diff --git a/client/components/Reader/Reader.vue b/client/components/Reader/Reader.vue index bbef9b77..29839fdd 100644 --- a/client/components/Reader/Reader.vue +++ b/client/components/Reader/Reader.vue @@ -74,7 +74,21 @@ + + +
+ + Посмотреть историю версий + + Больше не показывать + +
+ + @@ -101,6 +115,8 @@ import ServerStorage from './ServerStorage/ServerStorage.vue'; import bookManager from './share/bookManager'; import readerApi from '../../api/reader'; import * as utils from '../../share/utils'; +import * as cryptoUtils from '../../share/cryptoUtils'; +import {versionHistory} from './versionHistory'; export default @Component({ components: { @@ -172,6 +188,9 @@ class Reader extends Vue { actionCur = -1; hidden = false; + whatsNewVisible = false; + whatsNewContent = ''; + created() { this.loading = true; this.commit = this.$store.commit; @@ -231,6 +250,8 @@ class Reader extends Vue { this.checkSetStorageAccessKey(); this.loading = false; + + await this.showWhatsNew(); })(); } @@ -257,6 +278,28 @@ class Reader extends Vue { } } + async showWhatsNew() { + await utils.sleep(2000); + + const whatsNew = versionHistory[0]; + if (whatsNew.showUntil >= utils.formatDate(new Date(), 'coDate') && + utils.stringToHex(cryptoUtils.sha256(whatsNew.content)) != this.whatsNewContentHash) { + this.whatsNewContent = whatsNew.content; + this.whatsNewVisible = true; + } + } + + openVersionHistory() { + this.whatsNewVisible = false; + this.versionHistoryToggle(); + } + + whatsNewDisable() { + this.whatsNewVisible = false; + const whatsNew = versionHistory[0]; + this.commit('reader/setWhatsNewContentHash', utils.stringToHex(cryptoUtils.sha256(whatsNew.content))); + } + get routeParamPos() { let result = undefined; const q = this.$route.query; @@ -353,6 +396,10 @@ class Reader extends Vue { return this.$store.state.reader.settings; } + get whatsNewContentHash() { + return this.$store.state.reader.whatsNewContentHash; + } + addAction(pos) { let a = this.actionList; if (!a.length || a[a.length - 1] != pos) { @@ -523,6 +570,15 @@ class Reader extends Vue { } } + versionHistoryToggle() { + this.helpToggle(); + if (this.helpActive) { + this.$nextTick(() => { + this.$refs.helpPage.activateVersionHistoryHelpPage(); + }); + } + } + refreshBook() { if (this.mostRecentBook()) { this.loadBook({url: this.mostRecentBook().url, force: true}); @@ -1010,4 +1066,10 @@ i { .clear { color: rgba(0,0,0,0); } + +.clickable { + color: blue; + text-decoration: underline; + cursor: pointer; +} \ No newline at end of file diff --git a/client/components/Reader/versionHistory.js b/client/components/Reader/versionHistory.js new file mode 100644 index 00000000..42f8b217 --- /dev/null +++ b/client/components/Reader/versionHistory.js @@ -0,0 +1,14 @@ +export const versionHistory = [ +{ + showUntil: '2019-05-05', + content: +` +Версия 0.6.7 (2019-05-01) + +` +}, + +] \ No newline at end of file diff --git a/client/element.js b/client/element.js index 02aeb0fb..0e489f93 100644 --- a/client/element.js +++ b/client/element.js @@ -86,8 +86,8 @@ import './theme/form-item.css'; import ElColorPicker from 'element-ui/lib/color-picker'; import './theme/color-picker.css'; -//import ElDialog from 'element-ui/lib/dialog'; -//import './theme/dialog.css'; +import ElDialog from 'element-ui/lib/dialog'; +import './theme/dialog.css'; import Notification from 'element-ui/lib/notification'; import './theme/notification.css'; @@ -106,7 +106,7 @@ const components = { ElCol, ElContainer, ElAside, ElMain, ElHeader, ElInput, ElInputNumber, ElSelect, ElOption, ElTable, ElTableColumn, ElProgress, ElSlider, ElForm, ElFormItem, - ElColorPicker, + ElColorPicker, ElDialog, }; for (let name in components) { diff --git a/client/share/utils.js b/client/share/utils.js index ba3d3d26..612610ce 100644 --- a/client/share/utils.js +++ b/client/share/utils.js @@ -39,6 +39,8 @@ export function formatDate(d, format) { case 'normal': return `${d.getDate().toString().padStart(2, '0')}.${(d.getMonth() + 1).toString().padStart(2, '0')}.${d.getFullYear()} ` + `${d.getHours().toString().padStart(2, '0')}:${d.getMinutes().toString().padStart(2, '0')}`; + case 'coDate': + return `${d.getFullYear()}-${(d.getMonth() + 1).toString().padStart(2, '0')}-${d.getDate().toString().padStart(2, '0')}`; } } diff --git a/client/store/modules/reader.js b/client/store/modules/reader.js index 09fb4913..2ae29768 100644 --- a/client/store/modules/reader.js +++ b/client/store/modules/reader.js @@ -183,6 +183,7 @@ const state = { profiles: {}, profilesRev: 0, allowProfilesSave: false,//подстраховка для разработки + whatsNewContentHash: '', currentProfile: '', settings: Object.assign({}, settingDefaults), settingsRev: {}, @@ -214,6 +215,9 @@ const mutations = { setAllowProfilesSave(state, value) { state.allowProfilesSave = value; }, + setWhatsNewContentHash(state, value) { + state.whatsNewContentHash = value; + }, setCurrentProfile(state, value) { state.currentProfile = value; },