diff --git a/package-lock.json b/package-lock.json index 2ee253fe..74b27288 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12740,12 +12740,6 @@ } } }, - "raw-loader": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-0.5.1.tgz", - "integrity": "sha1-DD0L6u2KAclm2Xh793goElKpeao=", - "dev": true - }, "rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", diff --git a/package.json b/package.json index f0ba2d73..4dd2c27c 100644 --- a/package.json +++ b/package.json @@ -192,7 +192,6 @@ "node-loader": "^0.6.0", "postcss-loader": "^2.1.6", "postcss-preset-env": "^5.3.0", - "raw-loader": "^0.5.1", "require-dir": "^1.0.0", "spectron": "^3.8.0", "style-loader": "^0.21.0", diff --git a/src/main/actions/file.js b/src/main/actions/file.js index 72f61f85..016a4b9b 100644 --- a/src/main/actions/file.js +++ b/src/main/actions/file.js @@ -226,7 +226,7 @@ export const exportFile = (win, type) => { } export const print = win => { - win.webContents.print({ silent: false, printBackground: true, deviceName: '' }) + win.webContents.send('AGANI::print') } export const openFileOrProject = pathname => { diff --git a/src/muya/lib/index.css b/src/muya/lib/assets/styles/index.css similarity index 99% rename from src/muya/lib/index.css rename to src/muya/lib/assets/styles/index.css index af0d7aee..8876f5de 100644 --- a/src/muya/lib/index.css +++ b/src/muya/lib/assets/styles/index.css @@ -635,12 +635,12 @@ span.ag-warn.ag-emoji-marked-text { height: 1.1em; display: inline-block; vertical-align: middle; - background: url(./assets/icons/image.svg); + background: url(../icons/image.svg); background-size: contain; } .ag-image-marked-text.ag-image-fail::before { - background-image: url(./assets/icons/imagefail.svg); + background-image: url(../icons/imagefail.svg); } span[data-role="link"], a[data-role="link"], span[data-role="link"] .ag-backlash { diff --git a/src/muya/lib/index.js b/src/muya/lib/index.js index 496bedec..4c252be9 100644 --- a/src/muya/lib/index.js +++ b/src/muya/lib/index.js @@ -15,7 +15,7 @@ import TablePicker from './tablePicker' import './assets/symbolIcon' // import symbol icons import './assets/symbolIcon/index.css' -import './index.css' +import './assets/styles/index.css' class Muya { constructor (container, options) { @@ -480,6 +480,11 @@ class Muya { return new ExportHtml(markdown).generate(filename) } + exportHtml () { + const { markdown } = this + return new ExportHtml(markdown).renderHtml() + } + getWordCount (markdown) { return wordCount(markdown) } diff --git a/src/renderer/app.vue b/src/renderer/app.vue index af832038..85fe9f8e 100644 --- a/src/renderer/app.vue +++ b/src/renderer/app.vue @@ -128,7 +128,7 @@ dispatch('LISTEN_FOR_OPEN_SINGLE_FILE') dispatch('LISTEN_FOR_OPEN_BLANK_WINDOW') dispatch('LISTEN_FOR_SAVE_CLOSE') - dispatch('LISTEN_FOR_EXPORT') + dispatch('LISTEN_FOR_EXPORT_PRINT') dispatch('LISTEN_FOR_INSERT_IMAGE') dispatch('LISTEN_FOR_RENAME') dispatch('LINTEN_FOR_SET_LINE_ENDING') diff --git a/src/renderer/assets/styles/index.css b/src/renderer/assets/styles/index.css new file mode 100644 index 00000000..b55335fa --- /dev/null +++ b/src/renderer/assets/styles/index.css @@ -0,0 +1,25 @@ +:root { + --primary: #409eff; + --info: #909399; + --warning: rgb(255, 130, 0); + --error: rgb(242, 19, 93); + --lightBarColor: rgb(245, 245, 245); + --lightTabColor: rgb(243, 243, 243); + --darkBgColor: rgb(45, 45, 45); + --darkInputBgColor: rgb(54, 55, 49); + --darkInputColor: rgb(255, 255, 255); + --darkHoverColor: rgb(70, 70, 70); + --titleBarHeight: 25px; +} +.icon { + width: 1em; height: 1em; + vertical-align: -0.15em; + fill: currentColor; + overflow: hidden; +} + +.text-overflow { + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; +} diff --git a/src/renderer/assets/styles/printService.css b/src/renderer/assets/styles/printService.css new file mode 100644 index 00000000..41caadc0 --- /dev/null +++ b/src/renderer/assets/styles/printService.css @@ -0,0 +1,39 @@ +body article.print-container { + display: none; +} +@media print { + /* General rules for printing. */ + body { + background: transparent none; + } + + body > div { + display: none; + } + + body article.print-container { + display: block; + } + body article.print-container { + height: 100%; + } + body article.markdown-body { + box-sizing: border-box; + min-width: 200px; + max-width: 980px; + margin: 0 auto; + padding: 45px; + } + body article.markdown-body table { + display: table; + } + body article.markdown-body input[type="checkbox"] ~ p { + margin-top: 0; + display: inline-block; + } + @media (max-width: 767px) { + body article.markdown-body { + padding: 15px; + } + } +} \ No newline at end of file diff --git a/src/renderer/components/editorWithTabs/editor.vue b/src/renderer/components/editorWithTabs/editor.vue index ffe977bf..db8111ed 100644 --- a/src/renderer/components/editorWithTabs/editor.vue +++ b/src/renderer/components/editorWithTabs/editor.vue @@ -67,6 +67,7 @@ import bus from '../../bus' import { animatedScrollTo } from '../../util' import { showContextMenu } from '../../contextMenu/editor' + import Printer from '@/services/printService' const STANDAR_Y = 320 const PARAGRAPH_CMD = [ @@ -78,8 +79,7 @@ export default { props: { filename: { - type: String, - required: true + type: String }, theme: { type: String, @@ -222,6 +222,7 @@ bus.$on('editTable', this.handleEditTable) bus.$on('scroll-to-header', this.scrollToHeader) bus.$on('copy-block', this.handleCopyBlock) + bus.$on('print', this.handlePrint) // when cursor is in `` will emit `insert-image` this.editor.on('insert-image', type => { @@ -351,17 +352,25 @@ this.scrollToHighlight() }, - async handleExport (type) { + handlePrint () { + const html = this.editor.exportHtml() + const printer = new Printer(html) + printer.print() + }, + + handleExport (type) { + const markdown = this.editor.getMarkdown() switch (type) { case 'styledHtml': { - const content = await this.editor.exportStyledHTML(this.filename) - const markdown = this.editor.getMarkdown() + const content = this.editor.exportStyledHTML(this.filename) this.$store.dispatch('EXPORT', { type, content, markdown }) break } case 'pdf': { - const markdown = this.editor.getMarkdown() + const html = this.editor.exportHtml() + const printer = new Printer(html) + printer.renderMarkdown() this.$store.dispatch('EXPORT', { type, markdown }) break } diff --git a/src/renderer/components/editorWithTabs/index.vue b/src/renderer/components/editorWithTabs/index.vue index 7fcea468..ca20aea6 100644 --- a/src/renderer/components/editorWithTabs/index.vue +++ b/src/renderer/components/editorWithTabs/index.vue @@ -6,7 +6,7 @@