From 59fe713df2287575f6c38389befaa42aaf148ea1 Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Wed, 25 Dec 2019 01:29:32 +0700 Subject: [PATCH 01/12] =?UTF-8?q?=D0=9D=D0=B5=D0=BC=D0=BD=D0=BE=D0=B3?= =?UTF-8?q?=D0=BE=20=D1=83=D0=BB=D1=83=D1=87=D1=88=D0=B8=D0=BB=20=D0=B7?= =?UTF-8?q?=D0=B0=D0=B3=D1=80=D1=83=D0=B7=D0=BA=D1=83=20=D0=B2=D0=B5=D0=B1?= =?UTF-8?q?-=D1=88=D1=80=D0=B8=D1=84=D1=82=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/components/Reader/TextPage/TextPage.vue | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/client/components/Reader/TextPage/TextPage.vue b/client/components/Reader/TextPage/TextPage.vue index 9369eccc..fbf5ca7d 100644 --- a/client/components/Reader/TextPage/TextPage.vue +++ b/client/components/Reader/TextPage/TextPage.vue @@ -334,13 +334,15 @@ class TextPage extends Vue { this.draw(); - // шрифты хрен знает когда подгружаются в div, поэтому - const parsed = this.parsed; - await sleep(5000); - if (this.parsed === parsed) { - parsed.force = true; - this.draw(); - parsed.force = false; + // ширина шрифта некоторое время выдается неверно, поэтому + if (!omitLoadFonts) { + const parsed = this.parsed; + await sleep(100); + if (this.parsed === parsed) { + parsed.force = true; + this.draw(); + parsed.force = false; + } } } From a393b2a37066415843e5b07b2ba079d66e4bc1d2 Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Wed, 1 Jan 2020 14:34:54 +0700 Subject: [PATCH 02/12] =?UTF-8?q?=D0=9E=D0=BA=D0=BE=D0=BD=D1=87=D0=B0?= =?UTF-8?q?=D1=82=D0=B5=D0=BB=D1=8C=D0=BD=D1=8B=D0=B9=20=D0=BF=D0=B5=D1=80?= =?UTF-8?q?=D0=B5=D1=85=D0=BE=D0=B4=20=D0=BD=D0=B0=20https?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/omnireader/omnireader | 21 +-------------------- 1 file changed, 1 insertion(+), 20 deletions(-) diff --git a/docs/omnireader/omnireader b/docs/omnireader/omnireader index 291acc0a..a638b392 100644 --- a/docs/omnireader/omnireader +++ b/docs/omnireader/omnireader @@ -36,26 +36,7 @@ server { listen 80; server_name omnireader.ru; - client_max_body_size 50m; - - gzip on; - gzip_min_length 1024; - gzip_proxied expired no-cache no-store private auth; - gzip_types *; - - location /api { - proxy_pass http://127.0.0.1:44081; - } - - location /tmp { - root /home/liberama/public; - add_header Content-Type text/xml; - add_header Content-Encoding gzip; - } - - location / { - root /home/liberama/public; - } + return 301 https://$host$request_uri; } server { From 2ba68198767ebe240ae7e7f6578fb22fa413b19f Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Wed, 1 Jan 2020 14:48:32 +0700 Subject: [PATCH 03/12] =?UTF-8?q?=D0=9E=D0=BA=D0=BE=D0=BD=D1=87=D0=B0?= =?UTF-8?q?=D1=82=D0=B5=D0=BB=D1=8C=D0=BD=D1=8B=D0=B9=20=D0=BF=D0=B5=D1=80?= =?UTF-8?q?=D0=B5=D1=85=D0=BE=D0=B4=20=D0=BD=D0=B0=20https?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/components/Reader/Reader.vue | 128 ------------------ .../Reader/SettingsPage/SettingsPage.vue | 10 +- client/store/modules/reader.js | 5 - 3 files changed, 1 insertion(+), 142 deletions(-) diff --git a/client/components/Reader/Reader.vue b/client/components/Reader/Reader.vue index a0d05a6c..aef9a36f 100644 --- a/client/components/Reader/Reader.vue +++ b/client/components/Reader/Reader.vue @@ -1,8 +1,5 @@ @@ -285,8 +200,6 @@ class Reader extends Vue { whatsNewVisible = false; whatsNewContent = ''; - migrationVisible1 = false; - migrationVisible2 = false; created() { this.loading = true; @@ -346,7 +259,6 @@ class Reader extends Vue { this.loading = false; await this.showWhatsNew(); - await this.showMigration(); this.updateRoute(); })(); @@ -360,7 +272,6 @@ class Reader extends Vue { this.clickControl = settings.clickControl; this.blinkCachedLoad = settings.blinkCachedLoad; this.showWhatsNewDialog = settings.showWhatsNewDialog; - this.showMigrationDialog = settings.showMigrationDialog; this.showToolButton = settings.showToolButton; this.enableSitesFilter = settings.enableSitesFilter; @@ -426,41 +337,6 @@ class Reader extends Vue { } } - async showMigration() { - await utils.sleep(3000); - if (!this.settingsActive && - this.mode == 'omnireader' && this.showMigrationDialog && this.migrationRemindDate != utils.formatDate(new Date(), 'coDate')) { - if (window.location.protocol == 'http:') { - this.migrationVisible1 = true; - } else if (window.location.protocol == 'https:') { - this.migrationVisible2 = true; - } - } - } - - get isShowMigrationWarning() { - return window.location.protocol == 'http:'; - } - - showMigrationHttp() { - this.migrationVisible1 = true; - } - - migrationDialogDisable() { - this.migrationVisible1 = false; - this.migrationVisible2 = false; - if (this.showMigrationDialog) { - const newSettings = Object.assign({}, this.settings, { showMigrationDialog: false }); - this.commit('reader/setSettings', newSettings); - } - } - - migrationDialogRemind() { - this.migrationVisible1 = false; - this.migrationVisible2 = false; - this.commit('reader/setMigrationRemindDate', utils.formatDate(new Date(), 'coDate')); - } - openVersionHistory() { this.whatsNewVisible = false; this.versionHistoryToggle(); @@ -579,10 +455,6 @@ class Reader extends Vue { return this.$store.state.reader.whatsNewContentHash; } - get migrationRemindDate() { - return this.$store.state.reader.migrationRemindDate; - } - addAction(pos) { let a = this.actionList; if (!a.length || a[a.length - 1] != pos) { diff --git a/client/components/Reader/SettingsPage/SettingsPage.vue b/client/components/Reader/SettingsPage/SettingsPage.vue index b407cd4a..d7e736c2 100644 --- a/client/components/Reader/SettingsPage/SettingsPage.vue +++ b/client/components/Reader/SettingsPage/SettingsPage.vue @@ -471,18 +471,10 @@ Показывать уведомление "Что нового" - - - - Уведомлять о переходе на httpS-версию - - -
Прочее
+
Другое
diff --git a/client/store/modules/reader.js b/client/store/modules/reader.js index 154021e5..7e25c9c4 100644 --- a/client/store/modules/reader.js +++ b/client/store/modules/reader.js @@ -182,7 +182,6 @@ const settingDefaults = { imageFitWidth: true, showServerStorageMessages: true, showWhatsNewDialog: true, - showMigrationDialog: true, enableSitesFilter: true, fontShifts: {}, @@ -205,7 +204,6 @@ const state = { profilesRev: 0, allowProfilesSave: false,//подстраховка для разработки whatsNewContentHash: '', - migrationRemindDate: '', currentProfile: '', settings: Object.assign({}, settingDefaults), settingsRev: {}, @@ -240,9 +238,6 @@ const mutations = { setWhatsNewContentHash(state, value) { state.whatsNewContentHash = value; }, - setMigrationRemindDate(state, value) { - state.migrationRemindDate = value; - }, setCurrentProfile(state, value) { state.currentProfile = value; }, From 2201d8176ddbf9ff15c30c88dad04f6833122909 Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Wed, 1 Jan 2020 14:55:29 +0700 Subject: [PATCH 04/12] =?UTF-8?q?=D0=A3=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD?= =?UTF-8?q?=D0=B0=20yandex-=D0=BC=D0=B5=D1=82=D1=80=D0=B8=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/components/App.vue | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/client/components/App.vue b/client/components/App.vue index 514aaaf6..edce977b 100644 --- a/client/components/App.vue +++ b/client/components/App.vue @@ -215,22 +215,6 @@ class App extends Vue { window.history.replaceState({}, '', '/'); this.$router.replace({ path: '/reader', query: q }); } - - //yandex-метрика для omnireader - if (this.config.branch == 'production' && this.mode == 'omnireader' && !this.yaMetricsDone) { - (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)}; - m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)}) - (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");// eslint-disable-line no-unexpected-multiline - - ym(52347334, "init", {// eslint-disable-line no-undef - id:52347334, - clickmap:true, - trackLinks:true, - accurateTrackBounce:true - }); - - this.yaMetricsDone = true; - } } } //----------------------------------------------------------------------------- From 6186f5e138f083962377221b5ba74bfc723882aa Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Thu, 2 Jan 2020 19:32:56 +0700 Subject: [PATCH 05/12] =?UTF-8?q?=D0=92=D0=B5=D1=80=D1=81=D0=B8=D1=8F=200.?= =?UTF-8?q?8.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/components/Reader/versionHistory.js | 12 ++++++++++++ package.json | 4 +++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/client/components/Reader/versionHistory.js b/client/components/Reader/versionHistory.js index d78ea513..34b31805 100644 --- a/client/components/Reader/versionHistory.js +++ b/client/components/Reader/versionHistory.js @@ -1,4 +1,16 @@ export const versionHistory = [ +{ + showUntil: '2019-12-31', + header: '0.8.0 (2020-01-02)', + content: +` +
    +
  • окончательный переход на https
  • +
  • код проекта выложен на GitHub под лицензией cc0
  • +
+` +}, + { showUntil: '2019-11-26', header: '0.7.9 (2019-11-27)', diff --git a/package.json b/package.json index d62aad0d..8ad3c02f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,8 @@ { "name": "Liberama", - "version": "0.7.9", + "version": "0.8.0", + "author": "Book Pauk ", + "license": "CC0-1.0", "engines": { "node": ">=10.0.0" }, From c2480570813ff2ce8d5be2c66d9cf0cc98998e4a Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Thu, 2 Jan 2020 19:33:15 +0700 Subject: [PATCH 06/12] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=20=D1=84=D0=B0=D0=B9=D0=BB=20=D0=BB=D0=B8=D1=86?= =?UTF-8?q?=D0=B5=D0=BD=D0=B7=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- LICENSE.md | 106 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 LICENSE.md diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 00000000..34f902f6 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,106 @@ +# CC0 1.0 Universal + +## Statement of Purpose + +The laws of most jurisdictions throughout the world automatically confer +exclusive Copyright and Related Rights (defined below) upon the creator and +subsequent owner(s) (each and all, an “owner”) of an original work of +authorship and/or a database (each, a “Work”). + +Certain owners wish to permanently relinquish those rights to a Work for the +purpose of contributing to a commons of creative, cultural and scientific works +(“Commons”) that the public can reliably and without fear of later claims of +infringement build upon, modify, incorporate in other works, reuse and +redistribute as freely as possible in any form whatsoever and for any purposes, +including without limitation commercial purposes. These owners may contribute +to the Commons to promote the ideal of a free culture and the further +production of creative, cultural and scientific works, or to gain reputation or +greater distribution for their Work in part through the use and efforts of +others. + +For these and/or other purposes and motivations, and without any expectation of +additional consideration or compensation, the person associating CC0 with a +Work (the “Affirmer”), to the extent that he or she is an owner of Copyright +and Related Rights in the Work, voluntarily elects to apply CC0 to the Work and +publicly distribute the Work under its terms, with knowledge of his or her +Copyright and Related Rights in the Work and the meaning and intended legal +effect of CC0 on those rights. + +1. Copyright and Related Rights. A Work made available under CC0 may be + protected by copyright and related or neighboring rights (“Copyright and + Related Rights”). Copyright and Related Rights include, but are not limited + to, the following: + 1. the right to reproduce, adapt, distribute, perform, display, + communicate, and translate a Work; + 2. moral rights retained by the original author(s) and/or performer(s); + 3. publicity and privacy rights pertaining to a person’s image or likeness + depicted in a Work; + 4. rights protecting against unfair competition in regards to a Work, + subject to the limitations in paragraph 4(i), below; + 5. rights protecting the extraction, dissemination, use and reuse of data + in a Work; + 6. database rights (such as those arising under Directive 96/9/EC of the + European Parliament and of the Council of 11 March 1996 on the legal + protection of databases, and under any national implementation thereof, + including any amended or successor version of such directive); and + 7. other similar, equivalent or corresponding rights throughout the world + based on applicable law or treaty, and any national implementations + thereof. + +2. Waiver. To the greatest extent permitted by, but not in contravention of, +applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and +unconditionally waives, abandons, and surrenders all of Affirmer’s Copyright +and Related Rights and associated claims and causes of action, whether now +known or unknown (including existing as well as future claims and causes of +action), in the Work (i) in all territories worldwide, (ii) for the maximum +duration provided by applicable law or treaty (including future time +extensions), (iii) in any current or future medium and for any number of +copies, and (iv) for any purpose whatsoever, including without limitation +commercial, advertising or promotional purposes (the “Waiver”). Affirmer makes +the Waiver for the benefit of each member of the public at large and to the +detriment of Affirmer’s heirs and successors, fully intending that such Waiver +shall not be subject to revocation, rescission, cancellation, termination, or +any other legal or equitable action to disrupt the quiet enjoyment of the Work +by the public as contemplated by Affirmer’s express Statement of Purpose. + +3. Public License Fallback. Should any part of the Waiver for any reason be +judged legally invalid or ineffective under applicable law, then the Waiver +shall be preserved to the maximum extent permitted taking into account +Affirmer’s express Statement of Purpose. In addition, to the extent the Waiver +is so judged Affirmer hereby grants to each affected person a royalty-free, non +transferable, non sublicensable, non exclusive, irrevocable and unconditional +license to exercise Affirmer’s Copyright and Related Rights in the Work (i) in +all territories worldwide, (ii) for the maximum duration provided by applicable +law or treaty (including future time extensions), (iii) in any current or +future medium and for any number of copies, and (iv) for any purpose +whatsoever, including without limitation commercial, advertising or promotional +purposes (the “License”). The License shall be deemed effective as of the date +CC0 was applied by Affirmer to the Work. Should any part of the License for any +reason be judged legally invalid or ineffective under applicable law, such +partial invalidity or ineffectiveness shall not invalidate the remainder of the +License, and in such case Affirmer hereby affirms that he or she will not (i) +exercise any of his or her remaining Copyright and Related Rights in the Work +or (ii) assert any associated claims and causes of action with respect to the +Work, in either case contrary to Affirmer’s express Statement of Purpose. + +4. Limitations and Disclaimers. + 1. No trademark or patent rights held by Affirmer are waived, abandoned, + surrendered, licensed or otherwise affected by this document. + 2. Affirmer offers the Work as-is and makes no representations or + warranties of any kind concerning the Work, express, implied, statutory + or otherwise, including without limitation warranties of title, + merchantability, fitness for a particular purpose, non infringement, or + the absence of latent or other defects, accuracy, or the present or + absence of errors, whether or not discoverable, all to the greatest + extent permissible under applicable law. + 3. Affirmer disclaims responsibility for clearing rights of other persons + that may apply to the Work or any use thereof, including without + limitation any person’s Copyright and Related Rights in the Work. + Further, Affirmer disclaims responsibility for obtaining any necessary + consents, permissions or other rights required for any use of the Work. + 4. Affirmer understands and acknowledges that Creative Commons is not a + party to this document and has no duty or obligation with respect to + this CC0 or use of the Work. + +For more information, please see +http://creativecommons.org/publicdomain/zero/1.0/. From 28702065bcd9fc39875cc4c0a8a37e45d791cf75 Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Thu, 2 Jan 2020 19:43:49 +0700 Subject: [PATCH 07/12] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20repository?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 8ad3c02f..5e233d00 100644 --- a/package.json +++ b/package.json @@ -3,6 +3,7 @@ "version": "0.8.0", "author": "Book Pauk ", "license": "CC0-1.0", + "repository": "bookpauk/liberama", "engines": { "node": ">=10.0.0" }, From bee7bc42949516cf414568378f6c5738941b895f Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Thu, 2 Jan 2020 19:45:13 +0700 Subject: [PATCH 08/12] 0.8.0 --- package-lock.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package-lock.json b/package-lock.json index 9ae1b9f6..e906a04a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "Liberama", - "version": "0.7.9", + "version": "0.8.0", "lockfileVersion": 1, "requires": true, "dependencies": { From 57f8322f311a2597b2933d5b916798919c4b3255 Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Thu, 2 Jan 2020 19:47:07 +0700 Subject: [PATCH 09/12] =?UTF-8?q?=D0=9F=D0=BE=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D0=BE=D0=BF=D0=B8=D1=81=D0=B0=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d6017266..2181aa81 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,3 @@ # Liberama -Свободный обмен книгами в формате fb2 +Браузерная онлайн-читалка книг и децентрализованная библиотека. From 8d7428d099fb444a9aab6168366576e14ccad625 Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Thu, 2 Jan 2020 20:03:20 +0700 Subject: [PATCH 10/12] =?UTF-8?q?=D0=98=D0=B7=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BE=D1=82=20=D0=BF=D1=80=D0=B5?= =?UTF-8?q?=D0=B4=D1=83=D0=BF=D1=80=D0=B5=D0=B6=D0=B4=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=B9=20npm?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 212 +++++++++++++++++++++++++++++++++------------- package.json | 2 +- 2 files changed, 153 insertions(+), 61 deletions(-) diff --git a/package-lock.json b/package-lock.json index e906a04a..4c987cbd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2013,24 +2013,37 @@ "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" }, "cacache": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz", - "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==", + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.3.tgz", + "integrity": "sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw==", "dev": true, "requires": { - "bluebird": "^3.5.1", - "chownr": "^1.0.1", - "glob": "^7.1.2", - "graceful-fs": "^4.1.11", - "lru-cache": "^4.1.1", - "mississippi": "^2.0.0", + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", "mkdirp": "^0.5.1", "move-concurrently": "^1.0.1", "promise-inflight": "^1.0.1", - "rimraf": "^2.6.2", - "ssri": "^5.2.4", - "unique-filename": "^1.1.0", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", "y18n": "^4.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + } } }, "cache-base": { @@ -2689,19 +2702,104 @@ "dev": true }, "copy-webpack-plugin": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-4.6.0.tgz", - "integrity": "sha512-Y+SQCF+0NoWQryez2zXn5J5knmr9z/9qSQt7fbL78u83rxmigOy8X5+BFn8CFSuX+nKT8gpYwJX68ekqtQt6ZA==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-5.1.1.tgz", + "integrity": "sha512-P15M5ZC8dyCjQHWwd4Ia/dm0SgVvZJMYeykVIVYXbGyqO4dWB5oyPHp9i7wjwo5LhtlhKbiBCdS2NvM07Wlybg==", "dev": true, "requires": { - "cacache": "^10.0.4", - "find-cache-dir": "^1.0.0", + "cacache": "^12.0.3", + "find-cache-dir": "^2.1.0", + "glob-parent": "^3.1.0", "globby": "^7.1.1", - "is-glob": "^4.0.0", - "loader-utils": "^1.1.0", + "is-glob": "^4.0.1", + "loader-utils": "^1.2.3", "minimatch": "^3.0.4", - "p-limit": "^1.0.0", - "serialize-javascript": "^1.4.0" + "normalize-path": "^3.0.0", + "p-limit": "^2.2.1", + "schema-utils": "^1.0.0", + "serialize-javascript": "^2.1.2", + "webpack-log": "^2.0.0" + }, + "dependencies": { + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "p-limit": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz", + "integrity": "sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + } } }, "core-js": { @@ -6963,9 +7061,9 @@ } }, "mississippi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz", - "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", "dev": true, "requires": { "concat-stream": "^1.5.0", @@ -6974,22 +7072,10 @@ "flush-write-stream": "^1.0.0", "from2": "^2.1.0", "parallel-transform": "^1.1.0", - "pump": "^2.0.1", + "pump": "^3.0.0", "pumpify": "^1.3.3", "stream-each": "^1.1.0", "through2": "^2.0.0" - }, - "dependencies": { - "pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - } } }, "mixin-deep": { @@ -10883,9 +10969,9 @@ } }, "serialize-javascript": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.9.1.tgz", - "integrity": "sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-2.1.2.tgz", + "integrity": "sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ==", "dev": true }, "serve-static": { @@ -11247,12 +11333,12 @@ } }, "ssri": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz", - "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", + "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", "dev": true, "requires": { - "safe-buffer": "^5.1.1" + "figgy-pudding": "^3.5.1" } }, "stable": { @@ -11780,9 +11866,9 @@ } }, "terser": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.3.1.tgz", - "integrity": "sha512-pnzH6dnFEsR2aa2SJaKb1uSCl3QmIsJ8dEkj0Fky+2AwMMcC9doMqLOQIH6wVTEKaVfKVvLSk5qxPBEZT9mywg==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.4.3.tgz", + "integrity": "sha512-0ikKraVtRDKGzHrzkCv5rUNDzqlhmhowOBqC0XqUHFpW+vJ45+20/IFBcebwKfiS2Z9fJin6Eo+F1zLZsxi8RA==", "dev": true, "requires": { "commander": "^2.20.0", @@ -11791,9 +11877,9 @@ }, "dependencies": { "commander": { - "version": "2.20.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", - "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, "source-map": { @@ -11803,9 +11889,9 @@ "dev": true }, "source-map-support": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz", + "integrity": "sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==", "dev": true, "requires": { "buffer-from": "^1.0.0", @@ -11815,16 +11901,16 @@ } }, "terser-webpack-plugin": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.1.tgz", - "integrity": "sha512-ZXmmfiwtCLfz8WKZyYUuuHf3dMYEjg8NrjHMb0JqHVHVOSkzp3cW2/XG1fP3tRhqEqSzMwzzRQGtAPbs4Cncxg==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz", + "integrity": "sha512-QMxecFz/gHQwteWwSo5nTc6UaICqN1bMedC5sMtUc7y3Ha3Q8y6ZO0iCR8pq4RJC8Hjf0FEPEHZqcMB/+DFCrA==", "dev": true, "requires": { "cacache": "^12.0.2", "find-cache-dir": "^2.1.0", "is-wsl": "^1.1.0", "schema-utils": "^1.0.0", - "serialize-javascript": "^1.7.0", + "serialize-javascript": "^2.1.2", "source-map": "^0.6.1", "terser": "^4.1.2", "webpack-sources": "^1.4.0", @@ -11922,9 +12008,9 @@ } }, "p-limit": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", - "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz", + "integrity": "sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==", "dev": true, "requires": { "p-try": "^2.0.0" @@ -11960,6 +12046,12 @@ "find-up": "^3.0.0" } }, + "serialize-javascript": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-2.1.2.tgz", + "integrity": "sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ==", + "dev": true + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", diff --git a/package.json b/package.json index 5e233d00..e379fb4d 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "babel-plugin-transform-decorators-legacy": "^1.3.5", "babel-preset-env": "^1.3.2", "clean-webpack-plugin": "^1.0.1", - "copy-webpack-plugin": "^4.6.0", + "copy-webpack-plugin": "^5.1.1", "css-loader": "^1.0.0", "disable-output-webpack-plugin": "^1.0.1", "element-theme-chalk": "^2.12.0", From 2b2000ca100da5fa35bb1f70cc41cad07e154135 Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Thu, 2 Jan 2020 22:12:43 +0700 Subject: [PATCH 11/12] =?UTF-8?q?=D0=9F=D0=BE=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20readme?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 39 ++++++++++++++++++++++ docs/assets/face.jpg | Bin 0 -> 9398 bytes docs/assets/reader.jpg | Bin 0 -> 24522 bytes docs/omnireader/README.md | 66 +++++++++++++++++++++++++++++++++++++ docs/omnireader/readme.txt | 39 ---------------------- docs/readme.txt | 12 ------- 6 files changed, 105 insertions(+), 51 deletions(-) create mode 100644 docs/assets/face.jpg create mode 100644 docs/assets/reader.jpg create mode 100644 docs/omnireader/README.md delete mode 100644 docs/omnireader/readme.txt delete mode 100644 docs/readme.txt diff --git a/README.md b/README.md index 2181aa81..41fe993f 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,42 @@ # Liberama Браузерная онлайн-читалка книг и децентрализованная библиотека. + +Читалка ![](https://omnireader.ru/favicon.ico)[OmniReader](https://omnireader.ru) является частью данного проекта, развернутой на VPS: + +![](docs/assets/face.jpg) +![](docs/assets/reader.jpg) + +## VPS +Для разворачивания читалки на чистом VPS с нуля смотрите [docs/omnireader](docs/omnireader/README.md) + +## Сборка проекта + +``` +$ git clone https://github.com/bookpauk/liberama +$ cd liberama +$ npm i +``` + +### Windows +``` +$ npm run build:win +``` + +### Linux +``` +$ npm run build:linux +``` + +Результат сборки будет доступен в каталоге `dist/linux|win` в виде исполнимого (standalone) файла + +### Разработка +``` +$ npm run dev +``` + +## Помочь проекту + +* bitcoin: 3EbgZ7MK1UVaN38Gty5DCBtS4PknM4Ut85 +* litecoin: MP39Riec4oSNB3XMjiquKoLWxbufRYNXxZ +* monero: 8BQPnvHcPSHM5gMQsmuypDgx9NNsYqwXKfDDuswEyF2Q2ewQSfd2pkK6ydH2wmMyq2JViZvy9DQ35hLMx7g72mFWNJTPtnz diff --git a/docs/assets/face.jpg b/docs/assets/face.jpg new file mode 100644 index 0000000000000000000000000000000000000000..662b6db57bf35d828ffe3aaaf55619401f2cf6a9 GIT binary patch literal 9398 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 literal 0 HcmV?d00001 diff --git a/docs/assets/reader.jpg b/docs/assets/reader.jpg new file mode 100644 index 0000000000000000000000000000000000000000..296f24da971acaaa80fe1b3d25980beed48596d2 GIT binary patch literal 24522 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

xi_TK3N13Veok`B~c}6jFGfcAz)+%O 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 UpF;=tQU3t^2OWKp-lA9k*@e0i Date: Thu, 2 Jan 2020 22:25:41 +0700 Subject: [PATCH 12/12] =?UTF-8?q?=D0=9F=D0=BE=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20readme?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/omnireader/README.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/docs/omnireader/README.md b/docs/omnireader/README.md index 6396f4a3..f8c66371 100644 --- a/docs/omnireader/README.md +++ b/docs/omnireader/README.md @@ -64,3 +64,17 @@ cd docs/omnireader sh deploy.sh sh run_server.sh ``` + +После первого запуска будет создан конфигурационный файл `/home/liberama/data/config.json`. +Необходимо переключить приложение в режим omnireader, отредактировав опцию `servers`: +``` + "servers": [ + { + "serverName": "1", + "mode": "omnireader", + "ip": "0.0.0.0", + "port": "44081" + } + ] +``` +и перезапустить `run_server.sh` \ No newline at end of file