├── .gitignore ├── LICENSE ├── README.md ├── wj-markdown-editor-electron ├── eslint.config.mjs ├── icon │ ├── 1024x1024.png │ ├── 256x256.png │ └── favicon.ico ├── installer.nsh ├── package-lock.json ├── package.json └── src │ ├── data │ ├── configUtil.js │ ├── defaultConfig.js │ └── recent.js │ ├── main.js │ ├── preload.js │ └── util │ ├── channel │ ├── ipcMainUtil.js │ └── sendUtil.js │ ├── commonUtil.js │ ├── fileUploadUtil.js │ ├── imageBedUtil.js │ ├── imgUtil.js │ ├── logUtil.js │ ├── protocolUtil.js │ ├── updateUtil.js │ └── win │ ├── aboutUtil.js │ ├── exportUtil.js │ ├── guideUtil.js │ ├── screenshotsUtil.js │ ├── settingUtil.js │ └── winInfoUtil.js └── wj-markdown-editor-web ├── .gitignore ├── README.md ├── eslint.config.js ├── index.html ├── jsconfig.json ├── package-lock.json ├── package.json ├── public └── favicon.ico ├── src ├── App.vue ├── assets │ ├── img │ │ ├── guide │ │ │ ├── Code.webp │ │ │ ├── Container.webp │ │ │ ├── CurrentDate.webp │ │ │ ├── GithubAlert.webp │ │ │ ├── TextColor.png │ │ │ └── TextColor.webp │ │ └── logo.png │ └── style │ │ ├── antd.scss │ │ ├── code-theme │ │ ├── code-theme.scss │ │ └── theme │ │ │ ├── a11y-dark.scss │ │ │ ├── a11y-light.scss │ │ │ ├── agate.scss │ │ │ ├── an-old-hope.scss │ │ │ ├── androidstudio.scss │ │ │ ├── arduino-light.scss │ │ │ ├── arta.scss │ │ │ ├── ascetic.scss │ │ │ ├── atom-one-dark-reasonable.scss │ │ │ ├── atom-one-dark.scss │ │ │ ├── atom-one-light.scss │ │ │ ├── brown-paper.scss │ │ │ ├── codepen-embed.scss │ │ │ ├── color-brewer.scss │ │ │ ├── dark.scss │ │ │ ├── default.scss │ │ │ ├── devibeans.scss │ │ │ ├── docco.scss │ │ │ ├── far.scss │ │ │ ├── felipec.scss │ │ │ ├── foundation.scss │ │ │ ├── github-dark-dimmed.scss │ │ │ ├── github-dark.scss │ │ │ ├── github.scss │ │ │ ├── gml.scss │ │ │ ├── googlecode.scss │ │ │ ├── gradient-dark.scss │ │ │ ├── gradient-light.scss │ │ │ ├── grayscale.scss │ │ │ ├── hybrid.scss │ │ │ ├── idea.scss │ │ │ ├── intellij-light.scss │ │ │ ├── ir-black.scss │ │ │ ├── isbl-editor-dark.scss │ │ │ ├── isbl-editor-light.scss │ │ │ ├── kimbie-dark.scss │ │ │ ├── kimbie-light.scss │ │ │ ├── lightfair.scss │ │ │ ├── lioshi.scss │ │ │ ├── magula.scss │ │ │ ├── mono-blue.scss │ │ │ ├── monokai-sublime.scss │ │ │ ├── monokai.scss │ │ │ ├── night-owl.scss │ │ │ ├── nnfx-dark.scss │ │ │ ├── nnfx-light.scss │ │ │ ├── nord.scss │ │ │ ├── obsidian.scss │ │ │ ├── panda-syntax-dark.scss │ │ │ ├── panda-syntax-light.scss │ │ │ ├── paraiso-dark.scss │ │ │ ├── paraiso-light.scss │ │ │ ├── pojoaque.scss │ │ │ ├── purebasic.scss │ │ │ ├── qtcreator-dark.scss │ │ │ ├── qtcreator-light.scss │ │ │ ├── rainbow.scss │ │ │ ├── routeros.scss │ │ │ ├── school-book.scss │ │ │ ├── shades-of-purple.scss │ │ │ ├── srcery.scss │ │ │ ├── stackoverflow-dark.scss │ │ │ ├── stackoverflow-light.scss │ │ │ ├── sunburst.scss │ │ │ ├── tokyo-night-dark.scss │ │ │ ├── tokyo-night-light.scss │ │ │ ├── tomorrow-night-blue.scss │ │ │ ├── tomorrow-night-bright.scss │ │ │ ├── vs.scss │ │ │ ├── vs2015.scss │ │ │ ├── xcode.scss │ │ │ └── xt256.scss │ │ ├── codemirror.scss │ │ ├── colorpicker.scss │ │ ├── common.scss │ │ ├── global-theme │ │ ├── dark.scss │ │ ├── global-theme.scss │ │ └── light.scss │ │ ├── preview-theme │ │ ├── preview-theme.scss │ │ └── theme │ │ │ ├── cyanosis.scss │ │ │ ├── github.css │ │ │ ├── juejin.scss │ │ │ ├── markdown-here.scss │ │ │ ├── mk-cute.scss │ │ │ ├── scrolls.scss │ │ │ ├── smart-blue.scss │ │ │ └── vuepress.scss │ │ ├── reset.css │ │ ├── scroll.scss │ │ ├── search.scss │ │ ├── wj-markdown-it-container.scss │ │ └── wj-markdown-it-text-color.scss ├── components │ ├── CommonVNode.vue │ ├── SearchBar.vue │ ├── TableShape.vue │ ├── editor │ │ ├── EditorSearchBar.vue │ │ ├── IconButton.vue │ │ ├── MarkdownEdit.vue │ │ ├── MarkdownMenu.vue │ │ └── MarkdownPreview.vue │ └── layout │ │ ├── LayoutContainer.vue │ │ ├── LayoutMenu.vue │ │ ├── LayoutTop.vue │ │ └── OtherLayout.vue ├── main.js ├── router │ └── index.js ├── stores │ └── counter.js ├── util │ ├── channel │ │ ├── channelUtil.js │ │ ├── eventEmit.js │ │ └── eventUtil.js │ ├── commonUtil.js │ ├── constant.js │ ├── editor │ │ ├── completion │ │ │ ├── alertCompletion.js │ │ │ ├── codeBlockCompletion.js │ │ │ ├── completionHandler.js │ │ │ ├── containerCompletion.js │ │ │ ├── dateCompletion.js │ │ │ ├── headingCompletion.js │ │ │ └── tableCompletion.js │ │ ├── editorExtensionUtil.js │ │ ├── editorUtil.js │ │ └── keymap │ │ │ └── keymapUtil.js │ ├── guideUtil.js │ ├── markdown-it │ │ ├── markdownItCodeBlock.js │ │ ├── markdownItContainerUtil.js │ │ ├── markdownItDefault.js │ │ └── markdownItTextColor.js │ └── shortcutKeyUtil.js └── views │ ├── AboutView.vue │ ├── EditorView.vue │ ├── ExportView.vue │ ├── GuideView.vue │ ├── HomeView.vue │ ├── PreviewView.vue │ └── SettingView.vue ├── uno.config.js └── vite.config.js /.gitignore: -------------------------------------------------------------------------------- 1 | HELP.md 2 | target/ 3 | !.mvn/wrapper/maven-wrapper.jar 4 | !**/src/main/**/target/ 5 | !**/src/test/**/target/ 6 | 7 | ### STS ### 8 | .apt_generated 9 | .classpath 10 | .factorypath 11 | .project 12 | .settings 13 | .springBeans 14 | .sts4-cache 15 | electron-build/ 16 | web-dist/ 17 | node_modules/ 18 | ### IntelliJ IDEA ### 19 | .idea 20 | /log/ 21 | *.iws 22 | *.iml 23 | *.ipr 24 | 25 | ### NetBeans ### 26 | /nbproject/private/ 27 | /nbbuild/ 28 | /dist/ 29 | /nbdist/ 30 | /.nb-gradle/ 31 | build/ 32 | !**/src/main/**/build/ 33 | !**/src/test/**/build/ 34 | 35 | ### VS Code ### 36 | .vscode/ 37 | config.json 38 | recent.json 39 | TempImg/ 40 | 41 | wj-markdown-editor-electron/img/ 42 | 43 | login_info 44 | 45 | last_opened.json 46 | 47 | wj-markdown-editor.db -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 nlbwqmz 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /wj-markdown-editor-electron/eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import antfu from '@antfu/eslint-config' 2 | 3 | export default antfu({ 4 | rules: { 5 | 'no-console': 'off', 6 | 'node/prefer-global/process': 'off', 7 | 'style/no-mixed-operators': 'off', 8 | 'new-cap': 'off', 9 | 'style/brace-style': 'off', 10 | 'node/prefer-global/buffer': 'off', 11 | }, 12 | }) 13 | -------------------------------------------------------------------------------- /wj-markdown-editor-electron/icon/1024x1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nlbwqmz/wj-markdown-editor/76b7a320f92c1f419dd88c29b310044fc9b347c4/wj-markdown-editor-electron/icon/1024x1024.png -------------------------------------------------------------------------------- /wj-markdown-editor-electron/icon/256x256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nlbwqmz/wj-markdown-editor/76b7a320f92c1f419dd88c29b310044fc9b347c4/wj-markdown-editor-electron/icon/256x256.png -------------------------------------------------------------------------------- /wj-markdown-editor-electron/icon/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nlbwqmz/wj-markdown-editor/76b7a320f92c1f419dd88c29b310044fc9b347c4/wj-markdown-editor-electron/icon/favicon.ico -------------------------------------------------------------------------------- /wj-markdown-editor-electron/installer.nsh: -------------------------------------------------------------------------------- 1 | ;安装时写入 2 | !macro customInstall 3 | WriteRegStr HKCR ".md" "" "Markdown File" 4 | WriteRegStr HKCR ".md\ShellNew" "NullFile" "" 5 | WriteRegStr HKCR "Markdown File" "" "Markdown" 6 | WriteRegStr HKCR "Markdown File\shell\open" "Icon" "$INSTDIR\wj-markdown-editor.exe" 7 | !macroend 8 | ;卸载时清除 9 | !macro customUninstall 10 | DeleteRegKey HKCR ".md\ShellNew" 11 | ${ifNot} ${isUpdated} 12 | RMDir /r "$PROFILE\Documents\wj-markdown-editor" 13 | ${endif} 14 | !macroend 15 | -------------------------------------------------------------------------------- /wj-markdown-editor-electron/src/data/recent.js: -------------------------------------------------------------------------------- 1 | import path from 'node:path' 2 | import { app } from 'electron' 3 | import fs from 'fs-extra' 4 | 5 | let recent = [] 6 | let maxSize = 10 7 | let callback = null 8 | 9 | const documentsPath = app.isPackaged ? path.resolve(app.getPath('documents'), 'wj-markdown-editor') : app.getAppPath() 10 | const recentPath = path.resolve(documentsPath, 'recent.json') 11 | 12 | async function write() { 13 | await fs.writeFile(recentPath, JSON.stringify(recent), 'utf-8') 14 | callback && callback(parseRecent()) 15 | } 16 | 17 | function parseRecent() { 18 | return recent.map((item) => { 19 | return { 20 | name: path.basename(item), 21 | path: item, 22 | } 23 | }) 24 | } 25 | 26 | async function initRecent(max, callbackFunction) { 27 | maxSize = max || 10 28 | callback = callbackFunction 29 | try { 30 | await fs.ensureDir(documentsPath) 31 | if (await fs.pathExists(recentPath)) { 32 | recent = JSON.parse(await fs.readFile(recentPath, 'utf-8')) 33 | } else { 34 | await fs.writeFile(recentPath, JSON.stringify([]), 'utf-8') 35 | } 36 | } catch { 37 | await fs.writeFile(recentPath, JSON.stringify([]), 'utf-8') 38 | } 39 | } 40 | 41 | async function clear() { 42 | recent = [] 43 | await write() 44 | } 45 | 46 | async function add(filePath) { 47 | if (!maxSize || maxSize <= 0) { 48 | return 49 | } 50 | if (recent.includes(filePath)) { 51 | recent.splice(recent.indexOf(filePath), 1) 52 | } 53 | if (recent.unshift(filePath) > maxSize) { 54 | recent.pop() 55 | } 56 | await write() 57 | } 58 | 59 | async function remove(filePath) { 60 | if (recent.includes(filePath)) { 61 | recent.splice(recent.indexOf(filePath), 1) 62 | await write() 63 | } 64 | } 65 | 66 | export default { 67 | initRecent, 68 | clear, 69 | add, 70 | remove, 71 | get: () => parseRecent(), 72 | setMax: async (max) => { 73 | maxSize = max || 0 74 | while (recent.length > maxSize && recent.length !== 0) { 75 | recent.pop() 76 | } 77 | await write() 78 | }, 79 | } 80 | -------------------------------------------------------------------------------- /wj-markdown-editor-electron/src/main.js: -------------------------------------------------------------------------------- 1 | import { app, Menu } from 'electron' 2 | import configUtil from './data/configUtil.js' 3 | import recent from './data/recent.js' 4 | import sendUtil from './util/channel/sendUtil.js' 5 | import logUtil from './util/logUtil.js' 6 | import protocolUtil from './util/protocolUtil.js' 7 | import updateUtil from './util/updateUtil.js' 8 | import aboutUtil from './util/win/aboutUtil.js' 9 | import exportUtil from './util/win/exportUtil.js' 10 | import guideUtil from './util/win/guideUtil.js' 11 | import screenshotsUtil from './util/win/screenshotsUtil.js' 12 | import settingUtil from './util/win/settingUtil.js' 13 | import winInfoUtil from './util/win/winInfoUtil.js' 14 | import './util/channel/ipcMainUtil.js' 15 | 16 | app.commandLine.appendSwitch('--disable-http-cache') 17 | 18 | /** 19 | * 是否通过文件打开 20 | */ 21 | function isOpenOnFile() { 22 | return Boolean(process.argv && process.argv.length > 0 && /.*\.md$/.test(process.argv[process.argv.length - 1])) 23 | } 24 | 25 | /** 26 | * 如果通过打开 获取文件路径 27 | */ 28 | function getOpenOnFilePath() { 29 | return isOpenOnFile() ? process.argv[process.argv.length - 1] : null 30 | } 31 | 32 | const lock = app.requestSingleInstanceLock({ filePath: getOpenOnFilePath() }) 33 | 34 | if (!lock) { 35 | app.quit() 36 | } else { 37 | app.on('second-instance', (event, commandLine, workingDirectory, additionalData) => { 38 | winInfoUtil.createNew(additionalData.filePath).then(() => {}) 39 | }) 40 | logUtil.init() 41 | app.whenReady().then(async () => { 42 | Menu.setApplicationMenu(null) 43 | await configUtil.initConfig((config) => { 44 | winInfoUtil.getAll().forEach((item) => { 45 | sendUtil.send(item.win, { event: 'update-config', data: config }) 46 | }) 47 | if (aboutUtil.get()) { 48 | sendUtil.send(aboutUtil.get(), { event: 'update-config', data: config }) 49 | } 50 | if (exportUtil.get()) { 51 | sendUtil.send(exportUtil.get(), { event: 'update-config', data: config }) 52 | } 53 | if (guideUtil.get()) { 54 | sendUtil.send(guideUtil.get(), { event: 'update-config', data: config }) 55 | } 56 | if (settingUtil.get()) { 57 | sendUtil.send(settingUtil.get(), { event: 'update-config', data: config }) 58 | } 59 | }) 60 | await recent.initRecent(configUtil.getConfig().recentMax, (recentList) => { 61 | winInfoUtil.getAll().forEach((item) => { 62 | sendUtil.send(item.win, { event: 'update-recent', data: recentList }) 63 | }) 64 | }) 65 | protocolUtil.handleProtocol() 66 | const openOnFilePath = getOpenOnFilePath() 67 | if (openOnFilePath) { 68 | await winInfoUtil.createNew(openOnFilePath) 69 | } else if (configUtil.getConfig().openRecent) { 70 | const recentList = recent.get() 71 | if (recentList && recentList.length > 0) { 72 | await winInfoUtil.createNew(recentList[0].path, true) 73 | } else { 74 | await winInfoUtil.createNew(null) 75 | } 76 | } else { 77 | await winInfoUtil.createNew(null) 78 | } 79 | screenshotsUtil.init() 80 | updateUtil.initUpdater(() => winInfoUtil.getAll()) 81 | }) 82 | } 83 | -------------------------------------------------------------------------------- /wj-markdown-editor-electron/src/preload.js: -------------------------------------------------------------------------------- 1 | const { contextBridge, ipcRenderer, webUtils } = require('electron') 2 | 3 | // 主进程调用渲染进程 4 | const mainToShow = { 5 | sendToShow: callback => ipcRenderer.on('sendToShow', (_event, json) => callback(json)), 6 | } 7 | 8 | // 渲染进程调用主进程 9 | const showToMain = { 10 | sendToMain: json => ipcRenderer.invoke('sendToMain', json), 11 | // 只能在渲染进程中使用 通过web端file对象获取绝对路径 12 | getWebFilePath: file => webUtils.getPathForFile(file), 13 | } 14 | 15 | contextBridge.exposeInMainWorld('node', { 16 | ...showToMain, 17 | ...mainToShow, 18 | }) 19 | -------------------------------------------------------------------------------- /wj-markdown-editor-electron/src/util/channel/sendUtil.js: -------------------------------------------------------------------------------- 1 | export default { 2 | send: (win, data) => { 3 | win.webContents.send('sendToShow', data) 4 | }, 5 | } 6 | -------------------------------------------------------------------------------- /wj-markdown-editor-electron/src/util/commonUtil.js: -------------------------------------------------------------------------------- 1 | import path from 'node:path' 2 | import fs from 'fs-extra' 3 | import { nanoid } from 'nanoid' 4 | 5 | const createId = () => `wj${nanoid()}` 6 | 7 | function removePathSplit(value) { 8 | value = value.replace(/\\/g, '/') 9 | if (!value.startsWith('/') && !value.endsWith('/')) { 10 | return value 11 | } 12 | if (value.startsWith('/')) { 13 | value = value.substring(1) 14 | } 15 | if (value.endsWith('/')) { 16 | value = value.substring(0, value.length - 1) 17 | } 18 | return removePathSplit(value) 19 | } 20 | 21 | function hexToString(hex) { 22 | return Buffer.from(hex, 'hex').toString('utf8') 23 | } 24 | 25 | function createUniqueFileName(name) { 26 | const extname = path.extname(name) 27 | return `${path.basename(name, extname)}_${nanoid(6)}${extname}` 28 | } 29 | 30 | export default { 31 | createId, 32 | createUniqueFileName, 33 | removePathSplit, 34 | base64ToImg: async (data, imgPath) => { 35 | await fs.ensureDir(path.dirname(imgPath)) 36 | const base64 = data.startsWith('data:') ? data.replace(/^data:image\/\w+;base64,/, '') : data 37 | const dataBuffer = Buffer.from(base64, 'base64') 38 | await fs.ensureDir(path.dirname(imgPath)) 39 | await fs.writeFile(imgPath, dataBuffer) 40 | }, 41 | hexToString, 42 | } 43 | -------------------------------------------------------------------------------- /wj-markdown-editor-electron/src/util/fileUploadUtil.js: -------------------------------------------------------------------------------- 1 | import path from 'node:path' 2 | import fs from 'fs-extra' 3 | import sendUtil from './channel/sendUtil.js' 4 | import commonUtil from './commonUtil.js' 5 | 6 | function createLocalSavePath(winInfo, filePath, config) { 7 | const uniqueFileName = commonUtil.createUniqueFileName(filePath) 8 | if (config.fileMode === '2') { // 绝对路径 9 | return path.resolve(config.fileAbsolutePath, uniqueFileName) 10 | } 11 | if (config.fileMode === '3') { 12 | return path.resolve(path.dirname(winInfo.path), path.basename(winInfo.path, path.extname(winInfo.path)), uniqueFileName) 13 | } 14 | if (config.fileMode === '4') { 15 | if (!config.fileRelativePath) { 16 | return path.resolve(path.dirname(winInfo.path), uniqueFileName) 17 | } else { 18 | return path.resolve(path.dirname(winInfo.path), commonUtil.removePathSplit(config.fileRelativePath), uniqueFileName) 19 | } 20 | } 21 | throw new Error('文件存储模式未知') 22 | } 23 | 24 | function check(winInfo, config) { 25 | if (config.fileMode === '2' && !config.fileAbsolutePath) { 26 | sendUtil.send(winInfo.win, { event: 'message', data: { type: 'warning', content: '未设置文件绝对路径' } }) 27 | return false 28 | } 29 | if ((config.fileMode === '3' || config.fileMode === '4') && !winInfo.path) { 30 | sendUtil.send(winInfo.win, { event: 'message', data: { type: 'warning', content: '当前文件未保存,不能将文件保存到相对路径' } }) 31 | return false 32 | } 33 | return true 34 | } 35 | 36 | export default { 37 | save: async (winInfo, filePath, config) => { 38 | if (check(winInfo, config)) { 39 | if (!await fs.pathExists(filePath)) { 40 | sendUtil.send(winInfo.win, { event: 'message', data: { type: 'warning', content: '文件不存在' } }) 41 | return null 42 | } 43 | const loadingKey = commonUtil.createId() 44 | try { 45 | const savePath = createLocalSavePath(winInfo, filePath, config) 46 | await fs.ensureDir(path.dirname(savePath)) 47 | // 消息Key 48 | sendUtil.send(winInfo.win, { event: 'message', data: { type: 'loading', content: '正在保存文件', duration: 0, key: loadingKey } }) 49 | await fs.copyFile(filePath, savePath) 50 | sendUtil.send(winInfo.win, { event: 'message', data: { type: 'success', content: '文件保存成功', duration: 3, key: loadingKey } }) 51 | // 保存带绝对路径 52 | if (config.fileMode === '2') { 53 | return { name: path.basename(filePath), path: savePath } 54 | } 55 | 56 | // 保存到文件名路径 57 | if (config.fileMode === '3') { 58 | return { name: path.basename(filePath), path: `${path.basename(winInfo.path, path.extname(winInfo.path))}/${path.basename(savePath)}` } 59 | } 60 | 61 | // 保存到相对路径 62 | if (config.fileMode === '4') { 63 | if (config.imgRelativePath) { 64 | return { name: path.basename(filePath), path: `${config.fileRelativePath}/${path.basename(savePath)}` } 65 | } else { 66 | return { name: path.basename(filePath), path: path.basename(savePath) } 67 | } 68 | } 69 | } catch (e) { 70 | console.error(e) 71 | sendUtil.send(winInfo.win, { event: 'message', data: { type: 'error', content: `文件保存失败,错误信息:${e.message}`, duration: 3, key: loadingKey } }) 72 | } 73 | } 74 | }, 75 | } 76 | -------------------------------------------------------------------------------- /wj-markdown-editor-electron/src/util/imageBedUtil.js: -------------------------------------------------------------------------------- 1 | import path from 'node:path' 2 | import axios from 'axios' 3 | import FormData from 'form-data' 4 | import fs from 'fs-extra' 5 | import mime from 'mime-types' 6 | 7 | const handler = { 8 | github: async (option, filePath) => { 9 | const fileName = path.basename(filePath) 10 | const buffer = await fs.readFile(filePath) 11 | const base64Image = Buffer.from(buffer).toString('base64') 12 | const data = { 13 | message: 'Upload by wj-markdown-editor.', 14 | branch: option.branch, 15 | content: base64Image, 16 | path: option.path + encodeURI(fileName), 17 | } 18 | const res = await axios.request({ 19 | method: 'PUT', 20 | url: `https://api.github.com/repos/${option.repo}/contents/${encodeURI(option.path)}${encodeURIComponent(fileName)}`, 21 | headers: { 22 | 'Authorization': `token ${option.token}`, 23 | 'User-Agent': 'wj-markdown-editor', 24 | 'Content-Type': mime.lookup(fileName), 25 | }, 26 | data, 27 | }) 28 | if (option.customUrl) { 29 | return `${option.customUrl}/${encodeURI(option.path)}${encodeURIComponent(fileName)}` 30 | } else { 31 | return res.data.content.download_url 32 | } 33 | }, 34 | smms: async (option, filePath) => { 35 | const fileName = path.basename(filePath) 36 | const buffer = await fs.readFile(filePath) 37 | const formData = new FormData() 38 | formData.append('smfile', buffer, fileName) 39 | const res = await axios.request({ 40 | method: 'POST', 41 | url: `https://${option.domain ? option.domain : 'sm.ms'}/api/v2/upload`, 42 | headers: { 43 | 'Authorization': option.token, 44 | 'User-Agent': 'wj-markdown-editor', 45 | 'Content-Type': 'multipart/form-data', 46 | }, 47 | data: formData, 48 | }) 49 | if (res.data.code === 'success') { 50 | return res.data.data.url 51 | } else if (res.data.code === 'image_repeated') { 52 | return res.data.images 53 | } 54 | throw new Error(res.data.message) 55 | }, 56 | } 57 | 58 | async function upload(imageBedConfig, filePath) { 59 | const uploader = imageBedConfig.uploader 60 | if (!handler[uploader]) { 61 | throw new Error('不支持当前图床类型。') 62 | } 63 | return await handler[uploader](imageBedConfig[uploader], filePath) 64 | } 65 | 66 | export default { 67 | upload, 68 | } 69 | -------------------------------------------------------------------------------- /wj-markdown-editor-electron/src/util/logUtil.js: -------------------------------------------------------------------------------- 1 | import path from 'node:path' 2 | import dayjs from 'dayjs' 3 | import { app } from 'electron' 4 | import log from 'electron-log' 5 | 6 | export default { 7 | init: () => { 8 | // 日志文件大小 5MB 9 | log.transports.file.maxSize = 1048576 * 5 10 | Object.assign(console, log.functions) 11 | log.transports.file.resolvePathFn = () => path.join(app.getPath('documents'), `wj-markdown-editor/logs/${dayjs().format('YYYY-MM-DD')}/main.log`) 12 | }, 13 | } 14 | -------------------------------------------------------------------------------- /wj-markdown-editor-electron/src/util/protocolUtil.js: -------------------------------------------------------------------------------- 1 | import path from 'node:path' 2 | import { net, protocol } from 'electron' 3 | import commonUtil from './commonUtil.js' 4 | import winInfoUtil from './win/winInfoUtil.js' 5 | 6 | export default { 7 | handleProtocol: () => { 8 | protocol.handle('wj', (request) => { 9 | const url = decodeURIComponent(commonUtil.hexToString(request.url.slice('wj:///'.length))) 10 | if (path.isAbsolute(url)) { 11 | return net.fetch(`file:///${url}`) 12 | } else { 13 | const winInfo = winInfoUtil.getWinInfo(request.headers.get('X-Window-ID')) 14 | if (winInfo.path) { 15 | return net.fetch(`file:///${path.resolve(path.dirname(winInfo.path), url)}`) 16 | } 17 | } 18 | }) 19 | }, 20 | } 21 | -------------------------------------------------------------------------------- /wj-markdown-editor-electron/src/util/win/aboutUtil.js: -------------------------------------------------------------------------------- 1 | import path from 'node:path' 2 | import { fileURLToPath } from 'node:url' 3 | import { BrowserWindow, shell } from 'electron' 4 | 5 | const __filename = fileURLToPath(import.meta.url) 6 | const __dirname = path.dirname(__filename) 7 | 8 | let aboutWin 9 | 10 | export default { 11 | get: () => aboutWin, 12 | channel: { 13 | 'open-about': () => { 14 | if (aboutWin) { 15 | aboutWin.show() 16 | return 17 | } 18 | aboutWin = new BrowserWindow({ 19 | frame: false, 20 | icon: path.resolve(__dirname, '../../../icon/favicon.ico'), 21 | title: '设置', 22 | width: 490, 23 | height: 390, 24 | show: false, 25 | maximizable: false, 26 | resizable: false, 27 | webPreferences: { 28 | preload: path.resolve(__dirname, '../../preload.js'), 29 | }, 30 | }) 31 | // 通过默认浏览器打开链接 32 | aboutWin.webContents.setWindowOpenHandler((details) => { 33 | shell.openExternal(details.url).then(() => {}) 34 | return { action: 'deny' } 35 | }) 36 | aboutWin.once('ready-to-show', () => { 37 | aboutWin.show() 38 | }) 39 | if (process.env.NODE_ENV && process.env.NODE_ENV.trim() === 'dev') { 40 | aboutWin.loadURL('http://localhost:8080/#/about').then(() => { 41 | aboutWin.webContents.openDevTools({ mode: 'undocked' }) 42 | }) 43 | } else { 44 | aboutWin.loadFile(path.resolve(__dirname, '../../../web-dist/index.html'), { hash: 'about' }).then(() => {}) 45 | } 46 | }, 47 | 'about-minimize': () => { 48 | aboutWin.minimize() 49 | }, 50 | 'about-close': () => { 51 | aboutWin.hide() 52 | }, 53 | }, 54 | } 55 | -------------------------------------------------------------------------------- /wj-markdown-editor-electron/src/util/win/guideUtil.js: -------------------------------------------------------------------------------- 1 | import path from 'node:path' 2 | import { fileURLToPath } from 'node:url' 3 | import { BrowserWindow, shell } from 'electron' 4 | 5 | const __filename = fileURLToPath(import.meta.url) 6 | const __dirname = path.dirname(__filename) 7 | 8 | let guideWin 9 | 10 | export default { 11 | get: () => guideWin, 12 | channel: { 13 | 'open-guide': () => { 14 | if (guideWin) { 15 | guideWin.show() 16 | return 17 | } 18 | guideWin = new BrowserWindow({ 19 | frame: false, 20 | icon: path.resolve(__dirname, '../../../icon/favicon.ico'), 21 | title: '示例', 22 | width: 1200, 23 | height: 800, 24 | minWidth: 480, 25 | minHeight: 480, 26 | show: false, 27 | maximizable: false, 28 | resizable: true, 29 | webPreferences: { 30 | preload: path.resolve(__dirname, '../../preload.js'), 31 | }, 32 | }) 33 | // 通过默认浏览器打开链接 34 | guideWin.webContents.setWindowOpenHandler((details) => { 35 | shell.openExternal(details.url).then(() => {}) 36 | return { action: 'deny' } 37 | }) 38 | guideWin.once('ready-to-show', () => { 39 | guideWin.show() 40 | }) 41 | if (process.env.NODE_ENV && process.env.NODE_ENV.trim() === 'dev') { 42 | guideWin.loadURL('http://localhost:8080/#/guide').then(() => { 43 | // guideWin.webContents.openDevTools({ mode: 'undocked' }) 44 | }) 45 | } else { 46 | guideWin.loadFile(path.resolve(__dirname, '../../../web-dist/index.html'), { hash: 'guide' }).then(() => {}) 47 | } 48 | }, 49 | 'guide-minimize': () => { 50 | guideWin.minimize() 51 | }, 52 | 'guide-close': () => { 53 | guideWin.hide() 54 | }, 55 | }, 56 | } 57 | -------------------------------------------------------------------------------- /wj-markdown-editor-electron/src/util/win/screenshotsUtil.js: -------------------------------------------------------------------------------- 1 | import { globalShortcut } from 'electron' 2 | import Screenshots from 'electron-screenshots' 3 | 4 | let screenshots 5 | let onOk 6 | let onAlways 7 | 8 | function finish() { 9 | globalShortcut.unregister('esc') 10 | onAlways && onAlways() 11 | } 12 | 13 | export default { 14 | init: () => { 15 | screenshots = new Screenshots({ singleWindow: true }) 16 | screenshots.on('cancel', (e) => { 17 | e.preventDefault() 18 | }) 19 | screenshots.on('ok', (e, buffer, bounds) => { 20 | onOk && onOk(Buffer.from(buffer).toString('base64'), bounds) 21 | finish() 22 | }) 23 | screenshots.on('afterSave', () => { 24 | finish() 25 | }) 26 | }, 27 | startCapture: (ok, always) => { 28 | onOk = ok 29 | onAlways = always 30 | screenshots.startCapture().then(() => { 31 | globalShortcut.register('esc', () => { 32 | if (screenshots.$win?.isFocused()) { 33 | screenshots.endCapture().then(() => { 34 | finish() 35 | }) 36 | } 37 | }) 38 | }) 39 | }, 40 | } 41 | -------------------------------------------------------------------------------- /wj-markdown-editor-electron/src/util/win/settingUtil.js: -------------------------------------------------------------------------------- 1 | import path from 'node:path' 2 | import { fileURLToPath } from 'node:url' 3 | import { BrowserWindow, shell } from 'electron' 4 | 5 | const __filename = fileURLToPath(import.meta.url) 6 | const __dirname = path.dirname(__filename) 7 | 8 | let settingWin 9 | 10 | export default { 11 | get: () => settingWin, 12 | close: () => { 13 | if (settingWin) { 14 | settingWin.close() 15 | } 16 | }, 17 | channel: { 18 | 'open-setting': () => { 19 | if (settingWin) { 20 | settingWin.show() 21 | return 22 | } 23 | settingWin = new BrowserWindow({ 24 | frame: false, 25 | icon: path.resolve(__dirname, '../../../icon/favicon.ico'), 26 | title: '设置', 27 | width: 800, 28 | height: 800, 29 | show: false, 30 | maximizable: false, 31 | resizable: false, 32 | webPreferences: { 33 | preload: path.resolve(__dirname, '../../preload.js'), 34 | }, 35 | }) 36 | // 通过默认浏览器打开链接 37 | settingWin.webContents.setWindowOpenHandler((details) => { 38 | shell.openExternal(details.url).then(() => {}) 39 | return { action: 'deny' } 40 | }) 41 | settingWin.once('ready-to-show', () => { 42 | settingWin.show() 43 | }) 44 | if (process.env.NODE_ENV && process.env.NODE_ENV.trim() === 'dev') { 45 | settingWin.loadURL('http://localhost:8080/#/setting').then(() => { 46 | // settingWin.webContents.openDevTools({ mode: 'undocked' }) 47 | }) 48 | } else { 49 | settingWin.loadFile(path.resolve(__dirname, '../../../web-dist/index.html'), { hash: 'setting' }).then(() => {}) 50 | } 51 | }, 52 | 'setting-minimize': () => { 53 | settingWin.minimize() 54 | }, 55 | 'setting-close': () => { 56 | settingWin.hide() 57 | }, 58 | }, 59 | } 60 | -------------------------------------------------------------------------------- /wj-markdown-editor-web/.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | .DS_Store 12 | dist 13 | dist-ssr 14 | coverage 15 | *.local 16 | 17 | /cypress/videos/ 18 | /cypress/screenshots/ 19 | 20 | # Editor directories and files 21 | .vscode/* 22 | !.vscode/extensions.json 23 | .idea 24 | *.suo 25 | *.ntvs* 26 | *.njsproj 27 | *.sln 28 | *.sw? 29 | 30 | *.tsbuildinfo 31 | -------------------------------------------------------------------------------- /wj-markdown-editor-web/README.md: -------------------------------------------------------------------------------- 1 | # wj-markdown-editor-web 2 | 3 | This template should help get you started developing with Vue 3 in Vite. 4 | 5 | ## Recommended IDE Setup 6 | 7 | [VSCode](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur). 8 | 9 | ## Customize configuration 10 | 11 | See [Vite Configuration Reference](https://vite.dev/config/). 12 | 13 | ## Project Setup 14 | 15 | ```sh 16 | npm install 17 | ``` 18 | 19 | ### Compile and Hot-Reload for Development 20 | 21 | ```sh 22 | npm run dev 23 | ``` 24 | 25 | ### Compile and Minify for Production 26 | 27 | ```sh 28 | npm run build 29 | ``` 30 | -------------------------------------------------------------------------------- /wj-markdown-editor-web/eslint.config.js: -------------------------------------------------------------------------------- 1 | import antfu from '@antfu/eslint-config' 2 | 3 | export default antfu({ 4 | unocss: true, 5 | vue: true, 6 | formatters: { 7 | css: true, 8 | html: true, 9 | markdown: true, 10 | }, 11 | rules: { 12 | 'style/brace-style': 'off', 13 | 'antfu/no-top-level-await': 'off', 14 | }, 15 | ignores: ['public/**'], 16 | }) 17 | -------------------------------------------------------------------------------- /wj-markdown-editor-web/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | wj-markdown-editor 8 | 9 | 10 |
25 | 30 |
31 | 55 |
56 | 57 | 58 | 68 | 69 | -------------------------------------------------------------------------------- /wj-markdown-editor-web/jsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "paths": { 4 | "@/*": ["./src/*"] 5 | } 6 | }, 7 | "exclude": ["node_modules", "dist"] 8 | } 9 | -------------------------------------------------------------------------------- /wj-markdown-editor-web/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "wj-markdown-editor-web", 3 | "version": "0.0.0", 4 | "private": true, 5 | "type": "module", 6 | "scripts": { 7 | "dev": "vite", 8 | "build": "vite build", 9 | "preview": "vite preview" 10 | }, 11 | "dependencies": { 12 | "@codemirror/lang-markdown": "^6.3.2", 13 | "@codemirror/language-data": "^6.5.1", 14 | "@codemirror/theme-one-dark": "^6.1.2", 15 | "@codemirror/view": "6.27.0", 16 | "@iconify-json/tabler": "^1.2.16", 17 | "@mdit/plugin-img-size": "^0.16.0", 18 | "@vscode/markdown-it-katex": "^1.1.1", 19 | "ant-design-vue": "^4.2.6", 20 | "codemirror": "^6.0.1", 21 | "dayjs": "^1.11.13", 22 | "github-markdown-css": "^5.8.1", 23 | "highlight.js": "^11.11.1", 24 | "katex": "^0.16.21", 25 | "mark.js": "^8.11.1", 26 | "markdown-it": "^14.1.0", 27 | "markdown-it-anchor": "^9.2.0", 28 | "markdown-it-container": "^4.0.0", 29 | "markdown-it-deflist": "^3.0.0", 30 | "markdown-it-for-inline": "^2.0.1", 31 | "markdown-it-github-alerts": "^1.0.0", 32 | "markdown-it-ins": "^4.0.0", 33 | "markdown-it-mark": "^4.0.0", 34 | "markdown-it-sub": "^2.0.0", 35 | "markdown-it-sup": "^2.0.0", 36 | "markdown-it-task-lists": "^2.1.1", 37 | "markdown-it-textual-uml": "^0.17.1", 38 | "mermaid": "^11.4.1", 39 | "nanoid": "^5.1.5", 40 | "pinia": "^3.0.1", 41 | "prettier": "^3.5.3", 42 | "split-grid": "^1.0.11", 43 | "vue": "^3.5.13", 44 | "vue-router": "^4.5.0", 45 | "vue3-colorpicker": "^2.3.0" 46 | }, 47 | "devDependencies": { 48 | "@antfu/eslint-config": "^4.11.0", 49 | "@unocss/eslint-plugin": "65.4.3", 50 | "@vitejs/plugin-vue": "^5.2.3", 51 | "eslint": "^9.17.0", 52 | "eslint-plugin-format": "^1.0.1", 53 | "postcss-pxtorem": "^6.1.0", 54 | "sass": "^1.83.0", 55 | "unocss": "65.4.3", 56 | "vite": "^6.2.4", 57 | "vite-plugin-eslint": "^1.8.1", 58 | "vite-plugin-vue-devtools": "^7.7.2" 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /wj-markdown-editor-web/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nlbwqmz/wj-markdown-editor/76b7a320f92c1f419dd88c29b310044fc9b347c4/wj-markdown-editor-web/public/favicon.ico -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/App.vue: -------------------------------------------------------------------------------- 1 | 57 | 58 | 64 | 65 | 67 | -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/img/guide/Code.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nlbwqmz/wj-markdown-editor/76b7a320f92c1f419dd88c29b310044fc9b347c4/wj-markdown-editor-web/src/assets/img/guide/Code.webp -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/img/guide/Container.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nlbwqmz/wj-markdown-editor/76b7a320f92c1f419dd88c29b310044fc9b347c4/wj-markdown-editor-web/src/assets/img/guide/Container.webp -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/img/guide/CurrentDate.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nlbwqmz/wj-markdown-editor/76b7a320f92c1f419dd88c29b310044fc9b347c4/wj-markdown-editor-web/src/assets/img/guide/CurrentDate.webp -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/img/guide/GithubAlert.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nlbwqmz/wj-markdown-editor/76b7a320f92c1f419dd88c29b310044fc9b347c4/wj-markdown-editor-web/src/assets/img/guide/GithubAlert.webp -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/img/guide/TextColor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nlbwqmz/wj-markdown-editor/76b7a320f92c1f419dd88c29b310044fc9b347c4/wj-markdown-editor-web/src/assets/img/guide/TextColor.png -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/img/guide/TextColor.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nlbwqmz/wj-markdown-editor/76b7a320f92c1f419dd88c29b310044fc9b347c4/wj-markdown-editor-web/src/assets/img/guide/TextColor.webp -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nlbwqmz/wj-markdown-editor/76b7a320f92c1f419dd88c29b310044fc9b347c4/wj-markdown-editor-web/src/assets/img/logo.png -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/code-theme/code-theme.scss: -------------------------------------------------------------------------------- 1 | @use "./theme/a11y-dark"; 2 | @use "./theme/a11y-light"; 3 | @use "./theme/agate"; 4 | @use "./theme/an-old-hope"; 5 | @use "./theme/androidstudio"; 6 | @use "./theme/arduino-light"; 7 | @use "./theme/arta"; 8 | @use "./theme/ascetic"; 9 | @use "./theme/atom-one-dark-reasonable"; 10 | @use "./theme/atom-one-dark"; 11 | @use "./theme/atom-one-light"; 12 | @use "./theme/brown-paper"; 13 | @use "./theme/codepen-embed"; 14 | @use "./theme/color-brewer"; 15 | @use "./theme/dark"; 16 | @use "./theme/default"; 17 | @use "./theme/devibeans"; 18 | @use "./theme/docco"; 19 | @use "./theme/far"; 20 | @use "./theme/felipec"; 21 | @use "./theme/foundation"; 22 | @use "./theme/github-dark-dimmed"; 23 | @use "./theme/github-dark"; 24 | @use "./theme/github"; 25 | @use "./theme/gml"; 26 | @use "./theme/googlecode"; 27 | @use "./theme/gradient-dark"; 28 | @use "./theme/gradient-light"; 29 | @use "./theme/grayscale"; 30 | @use "./theme/hybrid"; 31 | @use "./theme/idea"; 32 | @use "./theme/intellij-light"; 33 | @use "./theme/ir-black"; 34 | @use "./theme/isbl-editor-dark"; 35 | @use "./theme/isbl-editor-light"; 36 | @use "./theme/kimbie-dark"; 37 | @use "./theme/kimbie-light"; 38 | @use "./theme/lightfair"; 39 | @use "./theme/lioshi"; 40 | @use "./theme/magula"; 41 | @use "./theme/mono-blue"; 42 | @use "./theme/monokai-sublime"; 43 | @use "./theme/monokai"; 44 | @use "./theme/night-owl"; 45 | @use "./theme/nnfx-dark"; 46 | @use "./theme/nnfx-light"; 47 | @use "./theme/nord"; 48 | @use "./theme/obsidian"; 49 | @use "./theme/panda-syntax-dark"; 50 | @use "./theme/panda-syntax-light"; 51 | @use "./theme/paraiso-dark"; 52 | @use "./theme/paraiso-light"; 53 | @use "./theme/pojoaque"; 54 | @use "./theme/purebasic"; 55 | @use "./theme/qtcreator-dark"; 56 | @use "./theme/qtcreator-light"; 57 | @use "./theme/rainbow"; 58 | @use "./theme/routeros"; 59 | @use "./theme/school-book"; 60 | @use "./theme/shades-of-purple"; 61 | @use "./theme/srcery"; 62 | @use "./theme/stackoverflow-dark"; 63 | @use "./theme/stackoverflow-light"; 64 | @use "./theme/sunburst"; 65 | @use "./theme/tokyo-night-dark"; 66 | @use "./theme/tokyo-night-light"; 67 | @use "./theme/tomorrow-night-blue"; 68 | @use "./theme/tomorrow-night-bright"; 69 | @use "./theme/vs"; 70 | @use "./theme/vs2015"; 71 | @use "./theme/xcode"; 72 | @use "./theme/xt256"; 73 | -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/code-theme/theme/a11y-dark.scss: -------------------------------------------------------------------------------- 1 | .code-theme-a11y-dark{ 2 | pre code.hljs { 3 | display: block; 4 | overflow-x: auto; 5 | padding: 1em 6 | } 7 | code.hljs { 8 | padding: 3px 5px 9 | } 10 | /*! 11 | Theme: a11y-dark 12 | Author: @ericwbailey 13 | Maintainer: @ericwbailey 14 | 15 | Based on the Tomorrow Night Eighties theme: https://github.com/isagalaev/highlight.js/blob/master/src/styles/tomorrow-night-eighties.css 16 | */ 17 | .hljs { 18 | background: #2b2b2b; 19 | color: #f8f8f2 20 | } 21 | /* Comment */ 22 | .hljs-comment, 23 | .hljs-quote { 24 | color: #d4d0ab 25 | } 26 | /* Red */ 27 | .hljs-variable, 28 | .hljs-template-variable, 29 | .hljs-tag, 30 | .hljs-name, 31 | .hljs-selector-id, 32 | .hljs-selector-class, 33 | .hljs-regexp, 34 | .hljs-deletion { 35 | color: #ffa07a 36 | } 37 | /* Orange */ 38 | .hljs-number, 39 | .hljs-built_in, 40 | .hljs-literal, 41 | .hljs-type, 42 | .hljs-params, 43 | .hljs-meta, 44 | .hljs-link { 45 | color: #f5ab35 46 | } 47 | /* Yellow */ 48 | .hljs-attribute { 49 | color: #ffd700 50 | } 51 | /* Green */ 52 | .hljs-string, 53 | .hljs-symbol, 54 | .hljs-bullet, 55 | .hljs-addition { 56 | color: #abe338 57 | } 58 | /* Blue */ 59 | .hljs-title, 60 | .hljs-section { 61 | color: #00e0e0 62 | } 63 | /* Purple */ 64 | .hljs-keyword, 65 | .hljs-selector-tag { 66 | color: #dcc6e0 67 | } 68 | .hljs-emphasis { 69 | font-style: italic 70 | } 71 | .hljs-strong { 72 | font-weight: bold 73 | } 74 | @media screen and (-ms-high-contrast: active) { 75 | .hljs-addition, 76 | .hljs-attribute, 77 | .hljs-built_in, 78 | .hljs-bullet, 79 | .hljs-comment, 80 | .hljs-link, 81 | .hljs-literal, 82 | .hljs-meta, 83 | .hljs-number, 84 | .hljs-params, 85 | .hljs-string, 86 | .hljs-symbol, 87 | .hljs-type, 88 | .hljs-quote { 89 | color: highlight 90 | } 91 | .hljs-keyword, 92 | .hljs-selector-tag { 93 | font-weight: bold 94 | } 95 | } 96 | } -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/code-theme/theme/a11y-light.scss: -------------------------------------------------------------------------------- 1 | .code-theme-a11y-light{ 2 | pre code.hljs { 3 | display: block; 4 | overflow-x: auto; 5 | padding: 1em 6 | } 7 | code.hljs { 8 | padding: 3px 5px 9 | } 10 | /*! 11 | Theme: a11y-light 12 | Author: @ericwbailey 13 | Maintainer: @ericwbailey 14 | 15 | Based on the Tomorrow Night Eighties theme: https://github.com/isagalaev/highlight.js/blob/master/src/styles/tomorrow-night-eighties.css 16 | */ 17 | .hljs { 18 | background: #fefefe; 19 | color: #545454 20 | } 21 | /* Comment */ 22 | .hljs-comment, 23 | .hljs-quote { 24 | color: #696969 25 | } 26 | /* Red */ 27 | .hljs-variable, 28 | .hljs-template-variable, 29 | .hljs-tag, 30 | .hljs-name, 31 | .hljs-selector-id, 32 | .hljs-selector-class, 33 | .hljs-regexp, 34 | .hljs-deletion { 35 | color: #d91e18 36 | } 37 | /* Orange */ 38 | .hljs-number, 39 | .hljs-built_in, 40 | .hljs-literal, 41 | .hljs-type, 42 | .hljs-params, 43 | .hljs-meta, 44 | .hljs-link { 45 | color: #aa5d00 46 | } 47 | /* Yellow */ 48 | .hljs-attribute { 49 | color: #aa5d00 50 | } 51 | /* Green */ 52 | .hljs-string, 53 | .hljs-symbol, 54 | .hljs-bullet, 55 | .hljs-addition { 56 | color: #008000 57 | } 58 | /* Blue */ 59 | .hljs-title, 60 | .hljs-section { 61 | color: #007faa 62 | } 63 | /* Purple */ 64 | .hljs-keyword, 65 | .hljs-selector-tag { 66 | color: #7928a1 67 | } 68 | .hljs-emphasis { 69 | font-style: italic 70 | } 71 | .hljs-strong { 72 | font-weight: bold 73 | } 74 | @media screen and (-ms-high-contrast: active) { 75 | .hljs-addition, 76 | .hljs-attribute, 77 | .hljs-built_in, 78 | .hljs-bullet, 79 | .hljs-comment, 80 | .hljs-link, 81 | .hljs-literal, 82 | .hljs-meta, 83 | .hljs-number, 84 | .hljs-params, 85 | .hljs-string, 86 | .hljs-symbol, 87 | .hljs-type, 88 | .hljs-quote { 89 | color: highlight 90 | } 91 | .hljs-keyword, 92 | .hljs-selector-tag { 93 | font-weight: bold 94 | } 95 | } 96 | } -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/code-theme/theme/agate.scss: -------------------------------------------------------------------------------- 1 | .code-theme-agate{ 2 | pre code.hljs { 3 | display: block; 4 | overflow-x: auto; 5 | padding: 1em 6 | } 7 | code.hljs { 8 | padding: 3px 5px 9 | } 10 | /*! 11 | Theme: Agate 12 | Author: (c) Taufik Nurrohman 13 | Maintainer: @taufik-nurrohman 14 | Updated: 2021-04-24 15 | 16 | #333 17 | #62c8f3 18 | #7bd694 19 | #888 20 | #a2fca2 21 | #ade5fc 22 | #b8d8a2 23 | #c6b4f0 24 | #d36363 25 | #fc9b9b 26 | #fcc28c 27 | #ffa 28 | #fff 29 | */ 30 | .hljs { 31 | background: #333; 32 | color: #fff 33 | } 34 | .hljs-doctag, 35 | .hljs-meta-keyword, 36 | .hljs-name, 37 | .hljs-strong { 38 | font-weight: bold 39 | } 40 | .hljs-code, 41 | .hljs-emphasis { 42 | font-style: italic 43 | } 44 | .hljs-section, 45 | .hljs-tag { 46 | color: #62c8f3 47 | } 48 | .hljs-selector-class, 49 | .hljs-selector-id, 50 | .hljs-template-variable, 51 | .hljs-variable { 52 | color: #ade5fc 53 | } 54 | .hljs-meta-string, 55 | .hljs-string { 56 | color: #a2fca2 57 | } 58 | .hljs-attr, 59 | .hljs-quote, 60 | .hljs-selector-attr { 61 | color: #7bd694 62 | } 63 | .hljs-tag .hljs-attr { 64 | color: inherit 65 | } 66 | .hljs-attribute, 67 | .hljs-title, 68 | .hljs-type { 69 | color: #ffa 70 | } 71 | .hljs-number, 72 | .hljs-symbol { 73 | color: #d36363 74 | } 75 | .hljs-bullet, 76 | .hljs-template-tag { 77 | color: #b8d8a2 78 | } 79 | .hljs-built_in, 80 | .hljs-keyword, 81 | .hljs-literal, 82 | .hljs-selector-tag { 83 | color: #fcc28c 84 | } 85 | .hljs-code, 86 | .hljs-comment, 87 | .hljs-formula { 88 | color: #888 89 | } 90 | .hljs-link, 91 | .hljs-selector-pseudo, 92 | .hljs-regexp { 93 | color: #c6b4f0 94 | } 95 | .hljs-meta { 96 | color: #fc9b9b 97 | } 98 | .hljs-deletion { 99 | background: #fc9b9b; 100 | color: #333 101 | } 102 | .hljs-addition { 103 | background: #a2fca2; 104 | color: #333 105 | } 106 | /* Purposely ignored */ 107 | .hljs-operator, 108 | .hljs-params, 109 | .hljs-property, 110 | .hljs-punctuation { 111 | 112 | } 113 | .hljs-subst { 114 | color: #fff 115 | } 116 | /* This applies only if HTML auto-merging plugin is enabled by user (#2889) */ 117 | .hljs a { 118 | color: inherit 119 | } 120 | .hljs a:focus, 121 | .hljs a:hover { 122 | color: inherit; 123 | text-decoration: underline 124 | } 125 | .hljs mark { 126 | background: #555; 127 | color: inherit 128 | } 129 | } -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/code-theme/theme/an-old-hope.scss: -------------------------------------------------------------------------------- 1 | .code-theme-an-old-hope{ 2 | pre code.hljs { 3 | display: block; 4 | overflow-x: auto; 5 | padding: 1em 6 | } 7 | code.hljs { 8 | padding: 3px 5px 9 | } 10 | /*! 11 | Theme: An Old Hope – Star Wars Syntax 12 | Author: (c) Gustavo Costa 13 | Maintainer: @gusbemacbe 14 | 15 | Original theme - Ocean Dark Theme – by https://github.com/gavsiu 16 | Based on Jesse Leite's Atom syntax theme 'An Old Hope' 17 | https://github.com/JesseLeite/an-old-hope-syntax-atom 18 | */ 19 | /* Millenium Falcon */ 20 | .hljs { 21 | background: #1C1D21; 22 | color: #c0c5ce 23 | } 24 | /* Death Star Comment */ 25 | .hljs-comment, 26 | .hljs-quote { 27 | color: #B6B18B 28 | } 29 | /* Darth Vader */ 30 | .hljs-variable, 31 | .hljs-template-variable, 32 | .hljs-tag, 33 | .hljs-name, 34 | .hljs-selector-id, 35 | .hljs-selector-class, 36 | .hljs-regexp, 37 | .hljs-deletion { 38 | color: #EB3C54 39 | } 40 | /* Threepio */ 41 | .hljs-number, 42 | .hljs-built_in, 43 | .hljs-literal, 44 | .hljs-type, 45 | .hljs-params, 46 | .hljs-meta, 47 | .hljs-link { 48 | color: #E7CE56 49 | } 50 | /* Luke Skywalker */ 51 | .hljs-attribute { 52 | color: #EE7C2B 53 | } 54 | /* Obi Wan Kenobi */ 55 | .hljs-string, 56 | .hljs-symbol, 57 | .hljs-bullet, 58 | .hljs-addition { 59 | color: #4FB4D7 60 | } 61 | /* Yoda */ 62 | .hljs-title, 63 | .hljs-section { 64 | color: #78BB65 65 | } 66 | /* Mace Windu */ 67 | .hljs-keyword, 68 | .hljs-selector-tag { 69 | color: #B45EA4 70 | } 71 | .hljs-emphasis { 72 | font-style: italic 73 | } 74 | .hljs-strong { 75 | font-weight: bold 76 | } 77 | } -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/code-theme/theme/androidstudio.scss: -------------------------------------------------------------------------------- 1 | .code-theme-androidstudio{ 2 | pre code.hljs { 3 | display: block; 4 | overflow-x: auto; 5 | padding: 1em 6 | } 7 | code.hljs { 8 | padding: 3px 5px 9 | } 10 | /* 11 | Date: 24 Fev 2015 12 | Author: Pedro Oliveira 13 | */ 14 | .hljs { 15 | color: #a9b7c6; 16 | background: #282b2e 17 | } 18 | .hljs-number, 19 | .hljs-literal, 20 | .hljs-symbol, 21 | .hljs-bullet { 22 | color: #6897BB 23 | } 24 | .hljs-keyword, 25 | .hljs-selector-tag, 26 | .hljs-deletion { 27 | color: #cc7832 28 | } 29 | .hljs-variable, 30 | .hljs-template-variable, 31 | .hljs-link { 32 | color: #629755 33 | } 34 | .hljs-comment, 35 | .hljs-quote { 36 | color: #808080 37 | } 38 | .hljs-meta { 39 | color: #bbb529 40 | } 41 | .hljs-string, 42 | .hljs-attribute, 43 | .hljs-addition { 44 | color: #6A8759 45 | } 46 | .hljs-section, 47 | .hljs-title, 48 | .hljs-type { 49 | color: #ffc66d 50 | } 51 | .hljs-name, 52 | .hljs-selector-id, 53 | .hljs-selector-class { 54 | color: #e8bf6a 55 | } 56 | .hljs-emphasis { 57 | font-style: italic 58 | } 59 | .hljs-strong { 60 | font-weight: bold 61 | } 62 | } -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/code-theme/theme/arduino-light.scss: -------------------------------------------------------------------------------- 1 | .code-theme-arduino-light{ 2 | pre code.hljs { 3 | display: block; 4 | overflow-x: auto; 5 | padding: 1em 6 | } 7 | code.hljs { 8 | padding: 3px 5px 9 | } 10 | /* 11 | 12 | Arduino® Light Theme - Stefania Mellai 13 | 14 | */ 15 | .hljs { 16 | background: white; 17 | color: #434f54 18 | } 19 | .hljs-subst { 20 | color: #434f54 21 | } 22 | .hljs-keyword, 23 | .hljs-attribute, 24 | .hljs-selector-tag, 25 | .hljs-doctag, 26 | .hljs-name { 27 | color: #00979D 28 | } 29 | .hljs-built_in, 30 | .hljs-literal, 31 | .hljs-bullet, 32 | .hljs-code, 33 | .hljs-addition { 34 | color: #D35400 35 | } 36 | .hljs-regexp, 37 | .hljs-symbol, 38 | .hljs-variable, 39 | .hljs-template-variable, 40 | .hljs-link, 41 | .hljs-selector-attr, 42 | .hljs-selector-pseudo { 43 | color: #00979D 44 | } 45 | .hljs-type, 46 | .hljs-string, 47 | .hljs-selector-id, 48 | .hljs-selector-class, 49 | .hljs-quote, 50 | .hljs-template-tag, 51 | .hljs-deletion { 52 | color: #005C5F 53 | } 54 | .hljs-comment { 55 | color: rgba(149,165,166,.8) 56 | } 57 | .hljs-meta .hljs-keyword { 58 | color: #728E00 59 | } 60 | .hljs-meta { 61 | color: #434f54 62 | } 63 | .hljs-emphasis { 64 | font-style: italic 65 | } 66 | .hljs-strong { 67 | font-weight: bold 68 | } 69 | .hljs-function { 70 | color: #728E00 71 | } 72 | .hljs-title, 73 | .hljs-section { 74 | color: #880000; 75 | font-weight: bold 76 | } 77 | .hljs-number { 78 | color: #8A7B52 79 | } 80 | } -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/code-theme/theme/arta.scss: -------------------------------------------------------------------------------- 1 | .code-theme-arta{ 2 | pre code.hljs { 3 | display: block; 4 | overflow-x: auto; 5 | padding: 1em 6 | } 7 | code.hljs { 8 | padding: 3px 5px 9 | } 10 | /* 11 | Date: 17.V.2011 12 | Author: pumbur 13 | */ 14 | .hljs { 15 | background: #222; 16 | color: #aaa 17 | } 18 | .hljs-subst { 19 | color: #aaa 20 | } 21 | .hljs-section { 22 | color: #fff 23 | } 24 | .hljs-comment, 25 | .hljs-quote, 26 | .hljs-meta { 27 | color: #444 28 | } 29 | .hljs-string, 30 | .hljs-symbol, 31 | .hljs-bullet, 32 | .hljs-regexp { 33 | color: #ffcc33 34 | } 35 | .hljs-number, 36 | .hljs-addition { 37 | color: #00cc66 38 | } 39 | .hljs-built_in, 40 | .hljs-literal, 41 | .hljs-type, 42 | .hljs-template-variable, 43 | .hljs-attribute, 44 | .hljs-link { 45 | color: #32aaee 46 | } 47 | .hljs-keyword, 48 | .hljs-selector-tag, 49 | .hljs-name, 50 | .hljs-selector-id, 51 | .hljs-selector-class { 52 | color: #6644aa 53 | } 54 | .hljs-title, 55 | .hljs-variable, 56 | .hljs-deletion, 57 | .hljs-template-tag { 58 | color: #bb1166 59 | } 60 | .hljs-section, 61 | .hljs-doctag, 62 | .hljs-strong { 63 | font-weight: bold 64 | } 65 | .hljs-emphasis { 66 | font-style: italic 67 | } 68 | } -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/code-theme/theme/ascetic.scss: -------------------------------------------------------------------------------- 1 | .code-theme-ascetic{ 2 | pre code.hljs { 3 | display: block; 4 | overflow-x: auto; 5 | padding: 1em 6 | } 7 | code.hljs { 8 | padding: 3px 5px 9 | } 10 | /* 11 | 12 | Original style from softwaremaniacs.org (c) Ivan Sagalaev 13 | 14 | */ 15 | .hljs { 16 | background: white; 17 | color: black 18 | } 19 | .hljs-string, 20 | .hljs-variable, 21 | .hljs-template-variable, 22 | .hljs-symbol, 23 | .hljs-bullet, 24 | .hljs-section, 25 | .hljs-addition, 26 | .hljs-attribute, 27 | .hljs-link { 28 | color: #888 29 | } 30 | .hljs-comment, 31 | .hljs-quote, 32 | .hljs-meta, 33 | .hljs-deletion { 34 | color: #ccc 35 | } 36 | .hljs-keyword, 37 | .hljs-selector-tag, 38 | .hljs-section, 39 | .hljs-name, 40 | .hljs-type, 41 | .hljs-strong { 42 | font-weight: bold 43 | } 44 | .hljs-emphasis { 45 | font-style: italic 46 | } 47 | } -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/code-theme/theme/atom-one-dark-reasonable.scss: -------------------------------------------------------------------------------- 1 | .code-theme-atom-one-dark-reasonable{ 2 | pre code.hljs { 3 | display: block; 4 | overflow-x: auto; 5 | padding: 1em 6 | } 7 | code.hljs { 8 | padding: 3px 5px 9 | } 10 | /* 11 | 12 | Atom One Dark With support for ReasonML by Gidi Morris, based off work by Daniel Gamage 13 | 14 | Original One Dark Syntax theme from https://github.com/atom/one-dark-syntax 15 | 16 | */ 17 | .hljs { 18 | color: #abb2bf; 19 | background: #282c34 20 | } 21 | .hljs-keyword, 22 | .hljs-operator { 23 | color: #F92672 24 | } 25 | .hljs-pattern-match { 26 | color: #F92672 27 | } 28 | .hljs-pattern-match .hljs-constructor { 29 | color: #61aeee 30 | } 31 | .hljs-function { 32 | color: #61aeee 33 | } 34 | .hljs-function .hljs-params { 35 | color: #A6E22E 36 | } 37 | .hljs-function .hljs-params .hljs-typing { 38 | color: #FD971F 39 | } 40 | .hljs-module-access .hljs-module { 41 | color: #7e57c2 42 | } 43 | .hljs-constructor { 44 | color: #e2b93d 45 | } 46 | .hljs-constructor .hljs-string { 47 | color: #9CCC65 48 | } 49 | .hljs-comment, 50 | .hljs-quote { 51 | color: #b18eb1; 52 | font-style: italic 53 | } 54 | .hljs-doctag, 55 | .hljs-formula { 56 | color: #c678dd 57 | } 58 | .hljs-section, 59 | .hljs-name, 60 | .hljs-selector-tag, 61 | .hljs-deletion, 62 | .hljs-subst { 63 | color: #e06c75 64 | } 65 | .hljs-literal { 66 | color: #56b6c2 67 | } 68 | .hljs-string, 69 | .hljs-regexp, 70 | .hljs-addition, 71 | .hljs-attribute, 72 | .hljs-meta .hljs-string { 73 | color: #98c379 74 | } 75 | .hljs-built_in, 76 | .hljs-title.class_, 77 | .hljs-class .hljs-title { 78 | color: #e6c07b 79 | } 80 | .hljs-attr, 81 | .hljs-variable, 82 | .hljs-template-variable, 83 | .hljs-type, 84 | .hljs-selector-class, 85 | .hljs-selector-attr, 86 | .hljs-selector-pseudo, 87 | .hljs-number { 88 | color: #d19a66 89 | } 90 | .hljs-symbol, 91 | .hljs-bullet, 92 | .hljs-link, 93 | .hljs-meta, 94 | .hljs-selector-id, 95 | .hljs-title { 96 | color: #61aeee 97 | } 98 | .hljs-emphasis { 99 | font-style: italic 100 | } 101 | .hljs-strong { 102 | font-weight: bold 103 | } 104 | .hljs-link { 105 | text-decoration: underline 106 | } 107 | } -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/code-theme/theme/atom-one-dark.scss: -------------------------------------------------------------------------------- 1 | .code-theme-atom-one-dark{ 2 | pre code.hljs { 3 | display: block; 4 | overflow-x: auto; 5 | padding: 1em 6 | } 7 | code.hljs { 8 | padding: 3px 5px 9 | } 10 | /* 11 | 12 | Atom One Dark by Daniel Gamage 13 | Original One Dark Syntax theme from https://github.com/atom/one-dark-syntax 14 | 15 | base: #282c34 16 | mono-1: #abb2bf 17 | mono-2: #818896 18 | mono-3: #5c6370 19 | hue-1: #56b6c2 20 | hue-2: #61aeee 21 | hue-3: #c678dd 22 | hue-4: #98c379 23 | hue-5: #e06c75 24 | hue-5-2: #be5046 25 | hue-6: #d19a66 26 | hue-6-2: #e6c07b 27 | 28 | */ 29 | .hljs { 30 | color: #abb2bf; 31 | background: #282c34; 32 | } 33 | .hljs-comment, 34 | .hljs-quote { 35 | color: #5c6370; 36 | font-style: italic 37 | } 38 | .hljs-doctag, 39 | .hljs-keyword, 40 | .hljs-formula { 41 | color: #c678dd 42 | } 43 | .hljs-section, 44 | .hljs-name, 45 | .hljs-selector-tag, 46 | .hljs-deletion, 47 | .hljs-subst { 48 | color: #e06c75 49 | } 50 | .hljs-literal { 51 | color: #56b6c2 52 | } 53 | .hljs-string, 54 | .hljs-regexp, 55 | .hljs-addition, 56 | .hljs-attribute, 57 | .hljs-meta .hljs-string { 58 | color: #98c379 59 | } 60 | .hljs-attr, 61 | .hljs-variable, 62 | .hljs-template-variable, 63 | .hljs-type, 64 | .hljs-selector-class, 65 | .hljs-selector-attr, 66 | .hljs-selector-pseudo, 67 | .hljs-number { 68 | color: #d19a66 69 | } 70 | .hljs-symbol, 71 | .hljs-bullet, 72 | .hljs-link, 73 | .hljs-meta, 74 | .hljs-selector-id, 75 | .hljs-title { 76 | color: #61aeee 77 | } 78 | .hljs-built_in, 79 | .hljs-title.class_, 80 | .hljs-class .hljs-title { 81 | color: #e6c07b 82 | } 83 | .hljs-emphasis { 84 | font-style: italic 85 | } 86 | .hljs-strong { 87 | font-weight: bold 88 | } 89 | .hljs-link { 90 | text-decoration: underline 91 | } 92 | } -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/code-theme/theme/atom-one-light.scss: -------------------------------------------------------------------------------- 1 | .code-theme-atom-one-light{ 2 | pre code.hljs { 3 | display: block; 4 | overflow-x: auto; 5 | padding: 1em 6 | } 7 | code.hljs { 8 | padding: 3px 5px 9 | } 10 | /* 11 | 12 | Atom One Light by Daniel Gamage 13 | Original One Light Syntax theme from https://github.com/atom/one-light-syntax 14 | 15 | base: #fafafa 16 | mono-1: #383a42 17 | mono-2: #686b77 18 | mono-3: #a0a1a7 19 | hue-1: #0184bb 20 | hue-2: #4078f2 21 | hue-3: #a626a4 22 | hue-4: #50a14f 23 | hue-5: #e45649 24 | hue-5-2: #c91243 25 | hue-6: #986801 26 | hue-6-2: #c18401 27 | 28 | */ 29 | .hljs { 30 | color: #383a42; 31 | background: #fafafa 32 | } 33 | .hljs-comment, 34 | .hljs-quote { 35 | color: #a0a1a7; 36 | font-style: italic 37 | } 38 | .hljs-doctag, 39 | .hljs-keyword, 40 | .hljs-formula { 41 | color: #a626a4 42 | } 43 | .hljs-section, 44 | .hljs-name, 45 | .hljs-selector-tag, 46 | .hljs-deletion, 47 | .hljs-subst { 48 | color: #e45649 49 | } 50 | .hljs-literal { 51 | color: #0184bb 52 | } 53 | .hljs-string, 54 | .hljs-regexp, 55 | .hljs-addition, 56 | .hljs-attribute, 57 | .hljs-meta .hljs-string { 58 | color: #50a14f 59 | } 60 | .hljs-attr, 61 | .hljs-variable, 62 | .hljs-template-variable, 63 | .hljs-type, 64 | .hljs-selector-class, 65 | .hljs-selector-attr, 66 | .hljs-selector-pseudo, 67 | .hljs-number { 68 | color: #986801 69 | } 70 | .hljs-symbol, 71 | .hljs-bullet, 72 | .hljs-link, 73 | .hljs-meta, 74 | .hljs-selector-id, 75 | .hljs-title { 76 | color: #4078f2 77 | } 78 | .hljs-built_in, 79 | .hljs-title.class_, 80 | .hljs-class .hljs-title { 81 | color: #c18401 82 | } 83 | .hljs-emphasis { 84 | font-style: italic 85 | } 86 | .hljs-strong { 87 | font-weight: bold 88 | } 89 | .hljs-link { 90 | text-decoration: underline 91 | } 92 | } -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/code-theme/theme/brown-paper.scss: -------------------------------------------------------------------------------- 1 | .code-theme-brown-paper{ 2 | pre code.hljs { 3 | display: block; 4 | overflow-x: auto; 5 | padding: 1em 6 | } 7 | code.hljs { 8 | padding: 3px 5px 9 | } 10 | /* 11 | 12 | Brown Paper style from goldblog.com.ua (c) Zaripov Yura 13 | 14 | */ 15 | .hljs { 16 | color: #363c69; 17 | background: #b7a68e url(./brown-papersq.png) 18 | } 19 | .hljs-keyword, 20 | .hljs-selector-tag, 21 | .hljs-literal { 22 | color: #005599; 23 | font-weight: bold 24 | } 25 | .hljs-subst { 26 | /* default */ 27 | 28 | } 29 | .hljs-string, 30 | .hljs-title, 31 | .hljs-section, 32 | .hljs-type, 33 | .hljs-attribute, 34 | .hljs-symbol, 35 | .hljs-bullet, 36 | .hljs-built_in, 37 | .hljs-addition, 38 | .hljs-variable, 39 | .hljs-template-tag, 40 | .hljs-template-variable, 41 | .hljs-link, 42 | .hljs-name { 43 | color: #2c009f 44 | } 45 | .hljs-comment, 46 | .hljs-quote, 47 | .hljs-meta, 48 | .hljs-deletion { 49 | color: #802022 50 | } 51 | .hljs-keyword, 52 | .hljs-selector-tag, 53 | .hljs-literal, 54 | .hljs-doctag, 55 | .hljs-title, 56 | .hljs-section, 57 | .hljs-type, 58 | .hljs-name, 59 | .hljs-strong { 60 | font-weight: bold 61 | } 62 | .hljs-emphasis { 63 | font-style: italic 64 | } 65 | } -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/code-theme/theme/codepen-embed.scss: -------------------------------------------------------------------------------- 1 | .code-theme-codepen-embed{ 2 | pre code.hljs { 3 | display: block; 4 | overflow-x: auto; 5 | padding: 1em 6 | } 7 | code.hljs { 8 | padding: 3px 5px 9 | } 10 | /* 11 | codepen.io Embed Theme 12 | Author: Justin Perry 13 | Original theme - https://github.com/chriskempson/tomorrow-theme 14 | */ 15 | .hljs { 16 | background: #222; 17 | color: #fff 18 | } 19 | .hljs-comment, 20 | .hljs-quote { 21 | color: #777 22 | } 23 | .hljs-variable, 24 | .hljs-template-variable, 25 | .hljs-tag, 26 | .hljs-regexp, 27 | .hljs-meta, 28 | .hljs-number, 29 | .hljs-built_in, 30 | .hljs-literal, 31 | .hljs-params, 32 | .hljs-symbol, 33 | .hljs-bullet, 34 | .hljs-link, 35 | .hljs-deletion { 36 | color: #ab875d 37 | } 38 | .hljs-section, 39 | .hljs-title, 40 | .hljs-name, 41 | .hljs-selector-id, 42 | .hljs-selector-class, 43 | .hljs-type, 44 | .hljs-attribute { 45 | color: #9b869b 46 | } 47 | .hljs-string, 48 | .hljs-keyword, 49 | .hljs-selector-tag, 50 | .hljs-addition { 51 | color: #8f9c6c 52 | } 53 | .hljs-emphasis { 54 | font-style: italic 55 | } 56 | .hljs-strong { 57 | font-weight: bold 58 | } 59 | } -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/code-theme/theme/color-brewer.scss: -------------------------------------------------------------------------------- 1 | .code-theme-color-brewer{ 2 | pre code.hljs { 3 | display: block; 4 | overflow-x: auto; 5 | padding: 1em 6 | } 7 | code.hljs { 8 | padding: 3px 5px 9 | } 10 | /* 11 | 12 | Colorbrewer theme 13 | Original: https://github.com/mbostock/colorbrewer-theme (c) Mike Bostock 14 | Ported by Fabrício Tavares de Oliveira 15 | 16 | */ 17 | .hljs { 18 | color: #000; 19 | background: #fff 20 | } 21 | .hljs-subst { 22 | /* default */ 23 | 24 | } 25 | .hljs-string, 26 | .hljs-meta, 27 | .hljs-symbol, 28 | .hljs-template-tag, 29 | .hljs-template-variable, 30 | .hljs-addition { 31 | color: #756bb1 32 | } 33 | .hljs-comment, 34 | .hljs-quote { 35 | color: #636363 36 | } 37 | .hljs-number, 38 | .hljs-regexp, 39 | .hljs-literal, 40 | .hljs-bullet, 41 | .hljs-link { 42 | color: #31a354 43 | } 44 | .hljs-deletion, 45 | .hljs-variable { 46 | color: #88f 47 | } 48 | .hljs-keyword, 49 | .hljs-selector-tag, 50 | .hljs-title, 51 | .hljs-section, 52 | .hljs-built_in, 53 | .hljs-doctag, 54 | .hljs-type, 55 | .hljs-tag, 56 | .hljs-name, 57 | .hljs-selector-id, 58 | .hljs-selector-class, 59 | .hljs-strong { 60 | color: #3182bd 61 | } 62 | .hljs-emphasis { 63 | font-style: italic 64 | } 65 | .hljs-attribute { 66 | color: #e6550d 67 | } 68 | } -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/code-theme/theme/dark.scss: -------------------------------------------------------------------------------- 1 | .code-theme-dark{ 2 | pre code.hljs { 3 | display: block; 4 | overflow-x: auto; 5 | padding: 1em 6 | } 7 | code.hljs { 8 | padding: 3px 5px 9 | } 10 | /* 11 | 12 | Dark style from softwaremaniacs.org (c) Ivan Sagalaev 13 | 14 | */ 15 | .hljs { 16 | color: #ddd; 17 | background: #303030 18 | } 19 | .hljs-keyword, 20 | .hljs-selector-tag, 21 | .hljs-literal, 22 | .hljs-section, 23 | .hljs-link { 24 | color: white 25 | } 26 | .hljs-subst { 27 | /* default */ 28 | 29 | } 30 | .hljs-string, 31 | .hljs-title, 32 | .hljs-name, 33 | .hljs-type, 34 | .hljs-attribute, 35 | .hljs-symbol, 36 | .hljs-bullet, 37 | .hljs-built_in, 38 | .hljs-addition, 39 | .hljs-variable, 40 | .hljs-template-tag, 41 | .hljs-template-variable { 42 | color: #d88 43 | } 44 | .hljs-comment, 45 | .hljs-quote, 46 | .hljs-deletion, 47 | .hljs-meta { 48 | color: #979797 49 | } 50 | .hljs-keyword, 51 | .hljs-selector-tag, 52 | .hljs-literal, 53 | .hljs-title, 54 | .hljs-section, 55 | .hljs-doctag, 56 | .hljs-type, 57 | .hljs-name, 58 | .hljs-strong { 59 | font-weight: bold 60 | } 61 | .hljs-emphasis { 62 | font-style: italic 63 | } 64 | } -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/code-theme/theme/default.scss: -------------------------------------------------------------------------------- 1 | .code-theme-default{ 2 | pre code.hljs { 3 | display: block; 4 | overflow-x: auto; 5 | padding: 1em 6 | } 7 | code.hljs { 8 | padding: 3px 5px 9 | } 10 | /*! 11 | Theme: Default 12 | Description: Original highlight.js style 13 | Author: (c) Ivan Sagalaev 14 | Maintainer: @highlightjs/core-team 15 | Website: https://highlightjs.org/ 16 | License: see project LICENSE 17 | Touched: 2021 18 | */ 19 | /* 20 | This is left on purpose making default.css the single file that can be lifted 21 | as-is from the repository directly without the need for a build step 22 | 23 | Typically this "required" baseline CSS is added by `makestuff.js` during build. 24 | */ 25 | pre code.hljs { 26 | display: block; 27 | overflow-x: auto; 28 | padding: 1em 29 | } 30 | code.hljs { 31 | padding: 3px 5px 32 | } 33 | /* end baseline CSS */ 34 | .hljs { 35 | background: #F3F3F3; 36 | color: #444 37 | } 38 | /* Base color: saturation 0; */ 39 | .hljs-subst { 40 | /* default */ 41 | 42 | } 43 | /* purposely ignored */ 44 | .hljs-formula, 45 | .hljs-attr, 46 | .hljs-property, 47 | .hljs-params { 48 | 49 | } 50 | .hljs-comment { 51 | color: #697070 52 | } 53 | .hljs-tag, 54 | .hljs-punctuation { 55 | color: #444a 56 | } 57 | .hljs-tag .hljs-name, 58 | .hljs-tag .hljs-attr { 59 | color: #444 60 | } 61 | .hljs-keyword, 62 | .hljs-attribute, 63 | .hljs-selector-tag, 64 | .hljs-meta .hljs-keyword, 65 | .hljs-doctag, 66 | .hljs-name { 67 | font-weight: bold 68 | } 69 | /* User color: hue: 0 */ 70 | .hljs-type, 71 | .hljs-string, 72 | .hljs-number, 73 | .hljs-selector-id, 74 | .hljs-selector-class, 75 | .hljs-quote, 76 | .hljs-template-tag, 77 | .hljs-deletion { 78 | color: #880000 79 | } 80 | .hljs-title, 81 | .hljs-section { 82 | color: #880000; 83 | font-weight: bold 84 | } 85 | .hljs-regexp, 86 | .hljs-symbol, 87 | .hljs-variable, 88 | .hljs-template-variable, 89 | .hljs-link, 90 | .hljs-selector-attr, 91 | .hljs-operator, 92 | .hljs-selector-pseudo { 93 | color: #ab5656 94 | } 95 | /* Language color: hue: 90; */ 96 | .hljs-literal { 97 | color: #695 98 | } 99 | .hljs-built_in, 100 | .hljs-bullet, 101 | .hljs-code, 102 | .hljs-addition { 103 | color: #397300 104 | } 105 | /* Meta color: hue: 200 */ 106 | .hljs-meta { 107 | color: #1f7199 108 | } 109 | .hljs-meta .hljs-string { 110 | color: #38a 111 | } 112 | /* Misc effects */ 113 | .hljs-emphasis { 114 | font-style: italic 115 | } 116 | .hljs-strong { 117 | font-weight: bold 118 | } 119 | } -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/code-theme/theme/devibeans.scss: -------------------------------------------------------------------------------- 1 | .code-theme-devibeans{ 2 | pre code.hljs { 3 | display: block; 4 | overflow-x: auto; 5 | padding: 1em 6 | } 7 | code.hljs { 8 | padding: 3px 5px 9 | } 10 | /*! 11 | Theme: devibeans (dark) 12 | Author: @terminaldweller 13 | Maintainer: @terminaldweller 14 | 15 | Inspired by vim's jellybeans theme (https://github.com/nanotech/jellybeans.vim) 16 | */ 17 | .hljs { 18 | background: #000000; 19 | color: #a39e9b 20 | } 21 | .hljs-attr, 22 | .hljs-template-tag { 23 | color: #8787d7 24 | } 25 | .hljs-comment, 26 | .hljs-doctag, 27 | .hljs-quote { 28 | color: #339966 29 | } 30 | .hljs-params { 31 | color: #a39e9b 32 | } 33 | .hljs-regexp { 34 | color: #d700ff 35 | } 36 | .hljs-tag, 37 | .hljs-selector-id, 38 | .hljs-number, 39 | .hljs-literal { 40 | color: #ef5350 41 | } 42 | .hljs-meta, 43 | .hljs-meta .hljs-keyword { 44 | color: #0087ff 45 | } 46 | /* opt-out */ 47 | .hljs-operator, 48 | .hljs-punctuation { 49 | 50 | } 51 | .hljs-selector-class, 52 | .hljs-code, 53 | .hljs-formula, 54 | .hljs-variable, 55 | .hljs-template-variable, 56 | .hljs-selector-attr, 57 | .hljs-selector-pseudo, 58 | .hljs-link, 59 | .hljs-keyword { 60 | color: #64b5f6 61 | } 62 | .hljs-built_in, 63 | .hljs-title, 64 | .hljs-deletion { 65 | color: #ff8700 66 | } 67 | .hljs-type, 68 | .hljs-section, 69 | .hljs-function, 70 | .hljs-name, 71 | .hljs-property, 72 | .hljs-attribute { 73 | color: #ffd75f 74 | } 75 | .hljs-meta .hljs-string, 76 | .hljs-string, 77 | .hljs-subst, 78 | .hljs-symbol, 79 | .hljs-bullet, 80 | .hljs-addition { 81 | color: #558b2f 82 | } 83 | .hljs-selector-tag { 84 | color: #9966ff 85 | } 86 | .hljs-emphasis { 87 | font-style: italic 88 | } 89 | .hljs-strong { 90 | font-weight: bold 91 | } 92 | } -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/code-theme/theme/docco.scss: -------------------------------------------------------------------------------- 1 | .code-theme-docco{ 2 | pre code.hljs { 3 | display: block; 4 | overflow-x: auto; 5 | padding: 1em 6 | } 7 | code.hljs { 8 | padding: 3px 5px 9 | } 10 | /* 11 | Docco style used in http://jashkenas.github.com/docco/ converted by Simon Madine (@thingsinjars) 12 | */ 13 | .hljs { 14 | color: #000; 15 | background: #f8f8ff 16 | } 17 | .hljs-comment, 18 | .hljs-quote { 19 | color: #408080; 20 | font-style: italic 21 | } 22 | .hljs-keyword, 23 | .hljs-selector-tag, 24 | .hljs-literal, 25 | .hljs-subst { 26 | color: #954121 27 | } 28 | .hljs-number { 29 | color: #40a070 30 | } 31 | .hljs-string, 32 | .hljs-doctag { 33 | color: #219161 34 | } 35 | .hljs-selector-id, 36 | .hljs-selector-class, 37 | .hljs-section, 38 | .hljs-type { 39 | color: #19469d 40 | } 41 | .hljs-params { 42 | color: #00f 43 | } 44 | .hljs-title { 45 | color: #458; 46 | font-weight: bold 47 | } 48 | .hljs-tag, 49 | .hljs-name, 50 | .hljs-attribute { 51 | color: #000080; 52 | font-weight: normal 53 | } 54 | .hljs-variable, 55 | .hljs-template-variable { 56 | color: #008080 57 | } 58 | .hljs-regexp, 59 | .hljs-link { 60 | color: #b68 61 | } 62 | .hljs-symbol, 63 | .hljs-bullet { 64 | color: #990073 65 | } 66 | .hljs-built_in { 67 | color: #0086b3 68 | } 69 | .hljs-meta { 70 | color: #999; 71 | font-weight: bold 72 | } 73 | .hljs-deletion { 74 | background: #fdd 75 | } 76 | .hljs-addition { 77 | background: #dfd 78 | } 79 | .hljs-emphasis { 80 | font-style: italic 81 | } 82 | .hljs-strong { 83 | font-weight: bold 84 | } 85 | } -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/code-theme/theme/far.scss: -------------------------------------------------------------------------------- 1 | .code-theme-far{ 2 | pre code.hljs { 3 | display: block; 4 | overflow-x: auto; 5 | padding: 1em 6 | } 7 | code.hljs { 8 | padding: 3px 5px 9 | } 10 | /* 11 | 12 | FAR Style (c) MajestiC 13 | 14 | */ 15 | .hljs { 16 | color: #0ff; 17 | background: #000080 18 | } 19 | .hljs-subst { 20 | /* default */ 21 | 22 | } 23 | .hljs-string, 24 | .hljs-attribute, 25 | .hljs-symbol, 26 | .hljs-bullet, 27 | .hljs-built_in, 28 | .hljs-template-tag, 29 | .hljs-template-variable, 30 | .hljs-addition { 31 | color: #ff0 32 | } 33 | .hljs-keyword, 34 | .hljs-selector-tag, 35 | .hljs-section, 36 | .hljs-type, 37 | .hljs-name, 38 | .hljs-selector-id, 39 | .hljs-selector-class, 40 | .hljs-variable { 41 | color: #fff 42 | } 43 | .hljs-comment, 44 | .hljs-quote, 45 | .hljs-doctag, 46 | .hljs-deletion { 47 | color: #888 48 | } 49 | .hljs-number, 50 | .hljs-regexp, 51 | .hljs-literal, 52 | .hljs-link { 53 | color: #0f0 54 | } 55 | .hljs-meta { 56 | color: #008080 57 | } 58 | .hljs-keyword, 59 | .hljs-selector-tag, 60 | .hljs-title, 61 | .hljs-section, 62 | .hljs-name, 63 | .hljs-strong { 64 | font-weight: bold 65 | } 66 | .hljs-emphasis { 67 | font-style: italic 68 | } 69 | } -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/code-theme/theme/felipec.scss: -------------------------------------------------------------------------------- 1 | .code-theme-felipec{ 2 | pre code.hljs { 3 | display: block; 4 | overflow-x: auto; 5 | padding: 1em 6 | } 7 | code.hljs { 8 | padding: 3px 5px 9 | } 10 | /*! 11 | * Theme: FelipeC 12 | * Author: (c) 2021 Felipe Contreras 13 | * Website: https://github.com/felipec/vim-felipec 14 | * 15 | * Autogenerated with vim-felipec's generator. 16 | */ 17 | .hljs { 18 | color: #dddde1; 19 | background: #1e1e22 20 | } 21 | .hljs::selection, 22 | .hljs ::selection { 23 | color: #1e1e22; 24 | background: #bf8fef 25 | } 26 | .hljs-comment, 27 | .hljs-code, 28 | .hljs-quote { 29 | color: #888896 30 | } 31 | .hljs-number, 32 | .hljs-literal, 33 | .hljs-deletion { 34 | color: #ef8f8f 35 | } 36 | .hljs-punctuation, 37 | .hljs-meta, 38 | .hljs-operator, 39 | .hljs-subst, 40 | .hljs-doctag, 41 | .hljs-template-variable, 42 | .hljs-selector-attr { 43 | color: #efbf8f 44 | } 45 | .hljs-type { 46 | color: #efef8f 47 | } 48 | .hljs-tag, 49 | .hljs-title, 50 | .hljs-selector-class, 51 | .hljs-selector-id { 52 | color: #bfef8f 53 | } 54 | .hljs-string, 55 | .hljs-regexp, 56 | .hljs-addition { 57 | color: #8fef8f 58 | } 59 | .hljs-class, 60 | .hljs-property { 61 | color: #8fefbf 62 | } 63 | .hljs-name, 64 | .hljs-selector-tag { 65 | color: #8fefef 66 | } 67 | .hljs-keyword, 68 | .hljs-built_in { 69 | color: #8fbfef 70 | } 71 | .hljs-section, 72 | .hljs-bullet { 73 | color: #8f8fef 74 | } 75 | .hljs-selector-pseudo { 76 | color: #bf8fef 77 | } 78 | .hljs-variable, 79 | .hljs-params, 80 | .hljs-attr, 81 | .hljs-attribute { 82 | color: #ef8fef 83 | } 84 | .hljs-symbol, 85 | .hljs-link { 86 | color: #ef8fbf 87 | } 88 | .hljs-strong, 89 | .hljs-literal, 90 | .hljs-title { 91 | font-weight: bold 92 | } 93 | .hljs-emphasis { 94 | font-style: italic 95 | } 96 | } -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/code-theme/theme/foundation.scss: -------------------------------------------------------------------------------- 1 | .code-theme-foundation{ 2 | pre code.hljs { 3 | display: block; 4 | overflow-x: auto; 5 | padding: 1em 6 | } 7 | code.hljs { 8 | padding: 3px 5px 9 | } 10 | /* 11 | Description: Foundation 4 docs style for highlight.js 12 | Author: Dan Allen 13 | Website: http://foundation.zurb.com/docs/ 14 | Version: 1.0 15 | Date: 2013-04-02 16 | */ 17 | .hljs { 18 | background: #eee; 19 | color: black 20 | } 21 | .hljs-link, 22 | .hljs-emphasis, 23 | .hljs-attribute, 24 | .hljs-addition { 25 | color: #070 26 | } 27 | .hljs-emphasis { 28 | font-style: italic 29 | } 30 | .hljs-strong, 31 | .hljs-string, 32 | .hljs-deletion { 33 | color: #d14 34 | } 35 | .hljs-strong { 36 | font-weight: bold 37 | } 38 | .hljs-quote, 39 | .hljs-comment { 40 | color: #998; 41 | font-style: italic 42 | } 43 | .hljs-section, 44 | .hljs-title { 45 | color: #900 46 | } 47 | .hljs-class .hljs-title, 48 | .hljs-title.class_, 49 | .hljs-type { 50 | color: #458 51 | } 52 | .hljs-variable, 53 | .hljs-template-variable { 54 | color: #336699 55 | } 56 | .hljs-bullet { 57 | color: #997700 58 | } 59 | .hljs-meta { 60 | color: #3344bb 61 | } 62 | .hljs-code, 63 | .hljs-number, 64 | .hljs-literal, 65 | .hljs-keyword, 66 | .hljs-selector-tag { 67 | color: #099 68 | } 69 | .hljs-regexp { 70 | background-color: #fff0ff; 71 | color: #880088 72 | } 73 | .hljs-symbol { 74 | color: #990073 75 | } 76 | .hljs-tag, 77 | .hljs-name, 78 | .hljs-selector-id, 79 | .hljs-selector-class { 80 | color: #007700 81 | } 82 | } -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/code-theme/theme/github-dark-dimmed.scss: -------------------------------------------------------------------------------- 1 | .code-theme-github-dark-dimmed{ 2 | pre code.hljs { 3 | display: block; 4 | overflow-x: auto; 5 | padding: 1em 6 | } 7 | code.hljs { 8 | padding: 3px 5px 9 | } 10 | /*! 11 | Theme: GitHub Dark Dimmed 12 | Description: Dark dimmed theme as seen on github.com 13 | Author: github.com 14 | Maintainer: @Hirse 15 | Updated: 2021-05-15 16 | 17 | Colors taken from GitHub's CSS 18 | */ 19 | .hljs { 20 | color: #adbac7; 21 | background: #22272e 22 | } 23 | .hljs-doctag, 24 | .hljs-keyword, 25 | .hljs-meta .hljs-keyword, 26 | .hljs-template-tag, 27 | .hljs-template-variable, 28 | .hljs-type, 29 | .hljs-variable.language_ { 30 | /* prettylights-syntax-keyword */ 31 | color: #f47067 32 | } 33 | .hljs-title, 34 | .hljs-title.class_, 35 | .hljs-title.class_.inherited__, 36 | .hljs-title.function_ { 37 | /* prettylights-syntax-entity */ 38 | color: #dcbdfb 39 | } 40 | .hljs-attr, 41 | .hljs-attribute, 42 | .hljs-literal, 43 | .hljs-meta, 44 | .hljs-number, 45 | .hljs-operator, 46 | .hljs-variable, 47 | .hljs-selector-attr, 48 | .hljs-selector-class, 49 | .hljs-selector-id { 50 | /* prettylights-syntax-constant */ 51 | color: #6cb6ff 52 | } 53 | .hljs-regexp, 54 | .hljs-string, 55 | .hljs-meta .hljs-string { 56 | /* prettylights-syntax-string */ 57 | color: #96d0ff 58 | } 59 | .hljs-built_in, 60 | .hljs-symbol { 61 | /* prettylights-syntax-variable */ 62 | color: #f69d50 63 | } 64 | .hljs-comment, 65 | .hljs-code, 66 | .hljs-formula { 67 | /* prettylights-syntax-comment */ 68 | color: #768390 69 | } 70 | .hljs-name, 71 | .hljs-quote, 72 | .hljs-selector-tag, 73 | .hljs-selector-pseudo { 74 | /* prettylights-syntax-entity-tag */ 75 | color: #8ddb8c 76 | } 77 | .hljs-subst { 78 | /* prettylights-syntax-storage-modifier-import */ 79 | color: #adbac7 80 | } 81 | .hljs-section { 82 | /* prettylights-syntax-markup-heading */ 83 | color: #316dca; 84 | font-weight: bold 85 | } 86 | .hljs-bullet { 87 | /* prettylights-syntax-markup-list */ 88 | color: #eac55f 89 | } 90 | .hljs-emphasis { 91 | /* prettylights-syntax-markup-italic */ 92 | color: #adbac7; 93 | font-style: italic 94 | } 95 | .hljs-strong { 96 | /* prettylights-syntax-markup-bold */ 97 | color: #adbac7; 98 | font-weight: bold 99 | } 100 | .hljs-addition { 101 | /* prettylights-syntax-markup-inserted */ 102 | color: #b4f1b4; 103 | background-color: #1b4721 104 | } 105 | .hljs-deletion { 106 | /* prettylights-syntax-markup-deleted */ 107 | color: #ffd8d3; 108 | background-color: #78191b 109 | } 110 | .hljs-char.escape_, 111 | .hljs-link, 112 | .hljs-params, 113 | .hljs-property, 114 | .hljs-punctuation, 115 | .hljs-tag { 116 | /* purposely ignored */ 117 | 118 | } 119 | } -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/code-theme/theme/github-dark.scss: -------------------------------------------------------------------------------- 1 | .code-theme-github-dark{ 2 | pre code.hljs { 3 | display: block; 4 | overflow-x: auto; 5 | padding: 1em 6 | } 7 | code.hljs { 8 | padding: 3px 5px 9 | } 10 | /*! 11 | Theme: GitHub Dark 12 | Description: Dark theme as seen on github.com 13 | Author: github.com 14 | Maintainer: @Hirse 15 | Updated: 2021-05-15 16 | 17 | Outdated base version: https://github.com/primer/github-syntax-dark 18 | Current colors taken from GitHub's CSS 19 | */ 20 | .hljs { 21 | color: #c9d1d9; 22 | background: #0d1117 23 | } 24 | .hljs-doctag, 25 | .hljs-keyword, 26 | .hljs-meta .hljs-keyword, 27 | .hljs-template-tag, 28 | .hljs-template-variable, 29 | .hljs-type, 30 | .hljs-variable.language_ { 31 | /* prettylights-syntax-keyword */ 32 | color: #ff7b72 33 | } 34 | .hljs-title, 35 | .hljs-title.class_, 36 | .hljs-title.class_.inherited__, 37 | .hljs-title.function_ { 38 | /* prettylights-syntax-entity */ 39 | color: #d2a8ff 40 | } 41 | .hljs-attr, 42 | .hljs-attribute, 43 | .hljs-literal, 44 | .hljs-meta, 45 | .hljs-number, 46 | .hljs-operator, 47 | .hljs-variable, 48 | .hljs-selector-attr, 49 | .hljs-selector-class, 50 | .hljs-selector-id { 51 | /* prettylights-syntax-constant */ 52 | color: #79c0ff 53 | } 54 | .hljs-regexp, 55 | .hljs-string, 56 | .hljs-meta .hljs-string { 57 | /* prettylights-syntax-string */ 58 | color: #a5d6ff 59 | } 60 | .hljs-built_in, 61 | .hljs-symbol { 62 | /* prettylights-syntax-variable */ 63 | color: #ffa657 64 | } 65 | .hljs-comment, 66 | .hljs-code, 67 | .hljs-formula { 68 | /* prettylights-syntax-comment */ 69 | color: #8b949e 70 | } 71 | .hljs-name, 72 | .hljs-quote, 73 | .hljs-selector-tag, 74 | .hljs-selector-pseudo { 75 | /* prettylights-syntax-entity-tag */ 76 | color: #7ee787 77 | } 78 | .hljs-subst { 79 | /* prettylights-syntax-storage-modifier-import */ 80 | color: #c9d1d9 81 | } 82 | .hljs-section { 83 | /* prettylights-syntax-markup-heading */ 84 | color: #1f6feb; 85 | font-weight: bold 86 | } 87 | .hljs-bullet { 88 | /* prettylights-syntax-markup-list */ 89 | color: #f2cc60 90 | } 91 | .hljs-emphasis { 92 | /* prettylights-syntax-markup-italic */ 93 | color: #c9d1d9; 94 | font-style: italic 95 | } 96 | .hljs-strong { 97 | /* prettylights-syntax-markup-bold */ 98 | color: #c9d1d9; 99 | font-weight: bold 100 | } 101 | .hljs-addition { 102 | /* prettylights-syntax-markup-inserted */ 103 | color: #aff5b4; 104 | background-color: #033a16 105 | } 106 | .hljs-deletion { 107 | /* prettylights-syntax-markup-deleted */ 108 | color: #ffdcd7; 109 | background-color: #67060c 110 | } 111 | .hljs-char.escape_, 112 | .hljs-link, 113 | .hljs-params, 114 | .hljs-property, 115 | .hljs-punctuation, 116 | .hljs-tag { 117 | /* purposely ignored */ 118 | 119 | } 120 | } -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/code-theme/theme/github.scss: -------------------------------------------------------------------------------- 1 | .code-theme-github{ 2 | pre code.hljs { 3 | display: block; 4 | overflow-x: auto; 5 | padding: 1em 6 | } 7 | code.hljs { 8 | padding: 3px 5px 9 | } 10 | /*! 11 | Theme: GitHub 12 | Description: Light theme as seen on github.com 13 | Author: github.com 14 | Maintainer: @Hirse 15 | Updated: 2021-05-15 16 | 17 | Outdated base version: https://github.com/primer/github-syntax-light 18 | Current colors taken from GitHub's CSS 19 | */ 20 | .hljs { 21 | color: #24292e; 22 | background: #ffffff 23 | } 24 | .hljs-doctag, 25 | .hljs-keyword, 26 | .hljs-meta .hljs-keyword, 27 | .hljs-template-tag, 28 | .hljs-template-variable, 29 | .hljs-type, 30 | .hljs-variable.language_ { 31 | /* prettylights-syntax-keyword */ 32 | color: #d73a49 33 | } 34 | .hljs-title, 35 | .hljs-title.class_, 36 | .hljs-title.class_.inherited__, 37 | .hljs-title.function_ { 38 | /* prettylights-syntax-entity */ 39 | color: #6f42c1 40 | } 41 | .hljs-attr, 42 | .hljs-attribute, 43 | .hljs-literal, 44 | .hljs-meta, 45 | .hljs-number, 46 | .hljs-operator, 47 | .hljs-variable, 48 | .hljs-selector-attr, 49 | .hljs-selector-class, 50 | .hljs-selector-id { 51 | /* prettylights-syntax-constant */ 52 | color: #005cc5 53 | } 54 | .hljs-regexp, 55 | .hljs-string, 56 | .hljs-meta .hljs-string { 57 | /* prettylights-syntax-string */ 58 | color: #032f62 59 | } 60 | .hljs-built_in, 61 | .hljs-symbol { 62 | /* prettylights-syntax-variable */ 63 | color: #e36209 64 | } 65 | .hljs-comment, 66 | .hljs-code, 67 | .hljs-formula { 68 | /* prettylights-syntax-comment */ 69 | color: #6a737d 70 | } 71 | .hljs-name, 72 | .hljs-quote, 73 | .hljs-selector-tag, 74 | .hljs-selector-pseudo { 75 | /* prettylights-syntax-entity-tag */ 76 | color: #22863a 77 | } 78 | .hljs-subst { 79 | /* prettylights-syntax-storage-modifier-import */ 80 | color: #24292e 81 | } 82 | .hljs-section { 83 | /* prettylights-syntax-markup-heading */ 84 | color: #005cc5; 85 | font-weight: bold 86 | } 87 | .hljs-bullet { 88 | /* prettylights-syntax-markup-list */ 89 | color: #735c0f 90 | } 91 | .hljs-emphasis { 92 | /* prettylights-syntax-markup-italic */ 93 | color: #24292e; 94 | font-style: italic 95 | } 96 | .hljs-strong { 97 | /* prettylights-syntax-markup-bold */ 98 | color: #24292e; 99 | font-weight: bold 100 | } 101 | .hljs-addition { 102 | /* prettylights-syntax-markup-inserted */ 103 | color: #22863a; 104 | background-color: #f0fff4 105 | } 106 | .hljs-deletion { 107 | /* prettylights-syntax-markup-deleted */ 108 | color: #b31d28; 109 | background-color: #ffeef0 110 | } 111 | .hljs-char.escape_, 112 | .hljs-link, 113 | .hljs-params, 114 | .hljs-property, 115 | .hljs-punctuation, 116 | .hljs-tag { 117 | /* purposely ignored */ 118 | 119 | } 120 | } -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/code-theme/theme/gml.scss: -------------------------------------------------------------------------------- 1 | .code-theme-gml{ 2 | pre code.hljs { 3 | display: block; 4 | overflow-x: auto; 5 | padding: 1em 6 | } 7 | code.hljs { 8 | padding: 3px 5px 9 | } 10 | /* 11 | 12 | GML Theme - Meseta 13 | 14 | */ 15 | .hljs { 16 | background: #222222; 17 | color: #C0C0C0 18 | } 19 | .hljs-keyword { 20 | color: #FFB871; 21 | font-weight: bold 22 | } 23 | .hljs-built_in { 24 | color: #FFB871 25 | } 26 | .hljs-literal { 27 | color: #FF8080 28 | } 29 | .hljs-symbol { 30 | color: #58E55A 31 | } 32 | .hljs-comment { 33 | color: #5B995B 34 | } 35 | .hljs-string { 36 | color: #FFFF00 37 | } 38 | .hljs-number { 39 | color: #FF8080 40 | } 41 | .hljs-attribute, 42 | .hljs-selector-tag, 43 | .hljs-doctag, 44 | .hljs-name, 45 | .hljs-bullet, 46 | .hljs-code, 47 | .hljs-addition, 48 | .hljs-regexp, 49 | .hljs-variable, 50 | .hljs-template-variable, 51 | .hljs-link, 52 | .hljs-selector-attr, 53 | .hljs-selector-pseudo, 54 | .hljs-type, 55 | .hljs-selector-id, 56 | .hljs-selector-class, 57 | .hljs-quote, 58 | .hljs-template-tag, 59 | .hljs-deletion, 60 | .hljs-title, 61 | .hljs-section, 62 | .hljs-function, 63 | .hljs-meta .hljs-keyword, 64 | .hljs-meta, 65 | .hljs-subst { 66 | color: #C0C0C0 67 | } 68 | .hljs-emphasis { 69 | font-style: italic 70 | } 71 | .hljs-strong { 72 | font-weight: bold 73 | } 74 | } -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/code-theme/theme/googlecode.scss: -------------------------------------------------------------------------------- 1 | .code-theme-googlecode{ 2 | pre code.hljs { 3 | display: block; 4 | overflow-x: auto; 5 | padding: 1em 6 | } 7 | code.hljs { 8 | padding: 3px 5px 9 | } 10 | /* 11 | 12 | Google Code style (c) Aahan Krish 13 | 14 | */ 15 | .hljs { 16 | background: white; 17 | color: black 18 | } 19 | .hljs-comment, 20 | .hljs-quote { 21 | color: #800 22 | } 23 | .hljs-keyword, 24 | .hljs-selector-tag, 25 | .hljs-section, 26 | .hljs-title, 27 | .hljs-name { 28 | color: #008 29 | } 30 | .hljs-variable, 31 | .hljs-template-variable { 32 | color: #660 33 | } 34 | .hljs-string, 35 | .hljs-selector-attr, 36 | .hljs-selector-pseudo, 37 | .hljs-regexp { 38 | color: #080 39 | } 40 | .hljs-literal, 41 | .hljs-symbol, 42 | .hljs-bullet, 43 | .hljs-meta, 44 | .hljs-number, 45 | .hljs-link { 46 | color: #066 47 | } 48 | .hljs-title, 49 | .hljs-doctag, 50 | .hljs-type, 51 | .hljs-attr, 52 | .hljs-built_in, 53 | .hljs-params { 54 | color: #606 55 | } 56 | .hljs-attribute, 57 | .hljs-subst { 58 | color: #000 59 | } 60 | .hljs-formula { 61 | background-color: #eee; 62 | font-style: italic 63 | } 64 | .hljs-selector-id, 65 | .hljs-selector-class { 66 | color: #9B703F 67 | } 68 | .hljs-addition { 69 | background-color: #baeeba 70 | } 71 | .hljs-deletion { 72 | background-color: #ffc8bd 73 | } 74 | .hljs-doctag, 75 | .hljs-strong { 76 | font-weight: bold 77 | } 78 | .hljs-emphasis { 79 | font-style: italic 80 | } 81 | } -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/code-theme/theme/gradient-dark.scss: -------------------------------------------------------------------------------- 1 | .code-theme-gradient-dark{ 2 | pre code.hljs { 3 | display: block; 4 | overflow-x: auto; 5 | padding: 1em 6 | } 7 | code.hljs { 8 | padding: 3px 5px 9 | } 10 | /* 11 | 12 | Gradient Dark (c) Samia Ali 13 | 14 | */ 15 | .hljs { 16 | background-color: #652487; 17 | background-image: linear-gradient(160deg, #652487 0%, #443ac3 35%, #0174b7 68%, #04988e 100%); 18 | color: #e7e4eb 19 | } 20 | .hljs-subtr { 21 | color: #e7e4eb 22 | } 23 | .hljs-doctag, 24 | .hljs-meta, 25 | .hljs-comment, 26 | .hljs-quote { 27 | color: #af8dd9 28 | } 29 | .hljs-selector-tag, 30 | .hljs-selector-id, 31 | .hljs-template-tag, 32 | .hljs-regexp, 33 | .hljs-attr, 34 | .hljs-tag { 35 | color: #AEFBFF 36 | } 37 | .hljs-params, 38 | .hljs-selector-class, 39 | .hljs-bullet { 40 | color: #F19FFF 41 | } 42 | .hljs-keyword, 43 | .hljs-section, 44 | .hljs-meta .hljs-keyword, 45 | .hljs-symbol, 46 | .hljs-type { 47 | color: #17fc95 48 | } 49 | .hljs-addition, 50 | .hljs-number, 51 | .hljs-link { 52 | color: #C5FE00 53 | } 54 | .hljs-string { 55 | color: #38c0ff 56 | } 57 | .hljs-attribute, 58 | .hljs-addition { 59 | color: #E7FF9F 60 | } 61 | .hljs-variable, 62 | .hljs-template-variable { 63 | color: #E447FF 64 | } 65 | .hljs-built_in, 66 | .hljs-formula, 67 | .hljs-name, 68 | .hljs-title, 69 | .hljs-class, 70 | .hljs-function { 71 | color: #FFC800 72 | } 73 | .hljs-selector-pseudo, 74 | .hljs-deletion, 75 | .hljs-literal { 76 | color: #FF9E44 77 | } 78 | .hljs-emphasis, 79 | .hljs-quote { 80 | font-style: italic 81 | } 82 | .hljs-params, 83 | .hljs-selector-class, 84 | .hljs-strong, 85 | .hljs-selector-tag, 86 | .hljs-selector-id, 87 | .hljs-template-tag, 88 | .hljs-section, 89 | .hljs-keyword { 90 | font-weight: bold 91 | } 92 | } -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/code-theme/theme/gradient-light.scss: -------------------------------------------------------------------------------- 1 | .code-theme-gradient-light{ 2 | pre code.hljs { 3 | display: block; 4 | overflow-x: auto; 5 | padding: 1em 6 | } 7 | code.hljs { 8 | padding: 3px 5px 9 | } 10 | /* 11 | 12 | Gradient Light (c) Samia Ali 13 | 14 | */ 15 | .hljs { 16 | background-color: #f9ccff; 17 | background-image: linear-gradient(295deg, #f9ccff 0%, #e6bbf9 11%, #9ec6f9 32%, #55e6ee 60%, #91f5d1 74%, #f9ffbf 98%); 18 | color: #250482 19 | } 20 | .hljs-subtr { 21 | color: #01958B 22 | } 23 | .hljs-doctag, 24 | .hljs-meta, 25 | .hljs-comment, 26 | .hljs-quote { 27 | color: #CB7200 28 | } 29 | .hljs-selector-tag, 30 | .hljs-selector-id, 31 | .hljs-template-tag, 32 | .hljs-regexp, 33 | .hljs-attr, 34 | .hljs-tag { 35 | color: #07BD5F 36 | } 37 | .hljs-params, 38 | .hljs-selector-class, 39 | .hljs-bullet { 40 | color: #43449F 41 | } 42 | .hljs-keyword, 43 | .hljs-section, 44 | .hljs-meta .hljs-keyword, 45 | .hljs-symbol, 46 | .hljs-type { 47 | color: #7D2801 48 | } 49 | .hljs-addition, 50 | .hljs-number, 51 | .hljs-link { 52 | color: #7F0096 53 | } 54 | .hljs-string { 55 | color: #2681ab 56 | } 57 | .hljs-attribute, 58 | .hljs-addition { 59 | color: #296562 60 | } 61 | .hljs-variable, 62 | .hljs-template-variable { 63 | color: #025C8F 64 | } 65 | .hljs-built_in, 66 | .hljs-formula, 67 | .hljs-name, 68 | .hljs-title, 69 | .hljs-class, 70 | .hljs-function { 71 | color: #529117 72 | } 73 | .hljs-selector-pseudo, 74 | .hljs-deletion, 75 | .hljs-literal { 76 | color: #AD13FF 77 | } 78 | .hljs-emphasis, 79 | .hljs-quote { 80 | font-style: italic 81 | } 82 | .hljs-params, 83 | .hljs-selector-class, 84 | .hljs-strong, 85 | .hljs-selector-tag, 86 | .hljs-selector-id, 87 | .hljs-template-tag, 88 | .hljs-section, 89 | .hljs-keyword { 90 | font-weight: bold 91 | } 92 | } -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/code-theme/theme/grayscale.scss: -------------------------------------------------------------------------------- 1 | .code-theme-grayscale{ 2 | pre code.hljs { 3 | display: block; 4 | overflow-x: auto; 5 | padding: 1em 6 | } 7 | code.hljs { 8 | padding: 3px 5px 9 | } 10 | /* 11 | 12 | grayscale style (c) MY Sun 13 | 14 | */ 15 | .hljs { 16 | color: #333; 17 | background: #fff 18 | } 19 | .hljs-comment, 20 | .hljs-quote { 21 | color: #777; 22 | font-style: italic 23 | } 24 | .hljs-keyword, 25 | .hljs-selector-tag, 26 | .hljs-subst { 27 | color: #333; 28 | font-weight: bold 29 | } 30 | .hljs-number, 31 | .hljs-literal { 32 | color: #777 33 | } 34 | .hljs-string, 35 | .hljs-doctag, 36 | .hljs-formula { 37 | color: #333; 38 | background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAJ0lEQVQIW2O8e/fufwYGBgZBQUEQxcCIIfDu3Tuwivfv30NUoAsAALHpFMMLqZlPAAAAAElFTkSuQmCC) repeat 39 | } 40 | .hljs-title, 41 | .hljs-section, 42 | .hljs-selector-id { 43 | color: #000; 44 | font-weight: bold 45 | } 46 | .hljs-subst { 47 | font-weight: normal 48 | } 49 | .hljs-title.class_, 50 | .hljs-class .hljs-title, 51 | .hljs-type, 52 | .hljs-name { 53 | color: #333; 54 | font-weight: bold 55 | } 56 | .hljs-tag { 57 | color: #333 58 | } 59 | .hljs-regexp { 60 | color: #333; 61 | background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAICAYAAADA+m62AAAAPUlEQVQYV2NkQAN37979r6yszIgujiIAU4RNMVwhuiQ6H6wQl3XI4oy4FMHcCJPHcDS6J2A2EqUQpJhohQDexSef15DBCwAAAABJRU5ErkJggg==) repeat 62 | } 63 | .hljs-symbol, 64 | .hljs-bullet, 65 | .hljs-link { 66 | color: #000; 67 | background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAKElEQVQIW2NkQAO7d+/+z4gsBhJwdXVlhAvCBECKwIIwAbhKZBUwBQA6hBpm5efZsgAAAABJRU5ErkJggg==) repeat 68 | } 69 | .hljs-built_in { 70 | color: #000; 71 | text-decoration: underline 72 | } 73 | .hljs-meta { 74 | color: #999; 75 | font-weight: bold 76 | } 77 | .hljs-deletion { 78 | color: #fff; 79 | background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAADCAYAAABS3WWCAAAAE0lEQVQIW2MMDQ39zzhz5kwIAQAyxweWgUHd1AAAAABJRU5ErkJggg==) repeat 80 | } 81 | .hljs-addition { 82 | color: #000; 83 | background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAYAAADgkQYQAAAALUlEQVQYV2N89+7dfwYk8P79ewZBQUFkIQZGOiu6e/cuiptQHAPl0NtNxAQBAM97Oejj3Dg7AAAAAElFTkSuQmCC) repeat 84 | } 85 | .hljs-emphasis { 86 | font-style: italic 87 | } 88 | .hljs-strong { 89 | font-weight: bold 90 | } 91 | } -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/code-theme/theme/hybrid.scss: -------------------------------------------------------------------------------- 1 | .code-theme-hybrid{ 2 | pre code.hljs { 3 | display: block; 4 | overflow-x: auto; 5 | padding: 1em 6 | } 7 | code.hljs { 8 | padding: 3px 5px 9 | } 10 | /* 11 | 12 | vim-hybrid theme by w0ng (https://github.com/w0ng/vim-hybrid) 13 | 14 | */ 15 | .hljs { 16 | background: #1d1f21; 17 | color: #c5c8c6 18 | } 19 | /*selection color*/ 20 | .hljs::selection, 21 | .hljs span::selection { 22 | background: #373b41 23 | } 24 | .hljs::-moz-selection, 25 | .hljs span::-moz-selection { 26 | background: #373b41 27 | } 28 | /*color: fg_yellow*/ 29 | .hljs-title, 30 | .hljs-name { 31 | color: #f0c674 32 | } 33 | /*color: fg_comment*/ 34 | .hljs-comment, 35 | .hljs-meta, 36 | .hljs-meta .hljs-keyword { 37 | color: #707880 38 | } 39 | /*color: fg_red*/ 40 | .hljs-number, 41 | .hljs-symbol, 42 | .hljs-literal, 43 | .hljs-deletion, 44 | .hljs-link { 45 | color: #cc6666 46 | } 47 | /*color: fg_green*/ 48 | .hljs-string, 49 | .hljs-doctag, 50 | .hljs-addition, 51 | .hljs-regexp, 52 | .hljs-selector-attr, 53 | .hljs-selector-pseudo { 54 | color: #b5bd68 55 | } 56 | /*color: fg_purple*/ 57 | .hljs-attribute, 58 | .hljs-code, 59 | .hljs-selector-id { 60 | color: #b294bb 61 | } 62 | /*color: fg_blue*/ 63 | .hljs-keyword, 64 | .hljs-selector-tag, 65 | .hljs-bullet, 66 | .hljs-tag { 67 | color: #81a2be 68 | } 69 | /*color: fg_aqua*/ 70 | .hljs-subst, 71 | .hljs-variable, 72 | .hljs-template-tag, 73 | .hljs-template-variable { 74 | color: #8abeb7 75 | } 76 | /*color: fg_orange*/ 77 | .hljs-type, 78 | .hljs-built_in, 79 | .hljs-quote, 80 | .hljs-section, 81 | .hljs-selector-class { 82 | color: #de935f 83 | } 84 | .hljs-emphasis { 85 | font-style: italic 86 | } 87 | .hljs-strong { 88 | font-weight: bold 89 | } 90 | } -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/code-theme/theme/idea.scss: -------------------------------------------------------------------------------- 1 | .code-theme-idea{ 2 | pre code.hljs { 3 | display: block; 4 | overflow-x: auto; 5 | padding: 1em 6 | } 7 | code.hljs { 8 | padding: 3px 5px 9 | } 10 | /* 11 | 12 | Intellij Idea-like styling (c) Vasily Polovnyov 13 | 14 | */ 15 | .hljs { 16 | color: #000; 17 | background: #fff 18 | } 19 | .hljs-subst, 20 | .hljs-title { 21 | font-weight: normal; 22 | color: #000 23 | } 24 | .hljs-comment, 25 | .hljs-quote { 26 | color: #808080; 27 | font-style: italic 28 | } 29 | .hljs-meta { 30 | color: #808000 31 | } 32 | .hljs-tag { 33 | background: #efefef 34 | } 35 | .hljs-section, 36 | .hljs-name, 37 | .hljs-literal, 38 | .hljs-keyword, 39 | .hljs-selector-tag, 40 | .hljs-type, 41 | .hljs-selector-id, 42 | .hljs-selector-class { 43 | font-weight: bold; 44 | color: #000080 45 | } 46 | .hljs-attribute, 47 | .hljs-number, 48 | .hljs-regexp, 49 | .hljs-link { 50 | font-weight: bold; 51 | color: #0000ff 52 | } 53 | .hljs-number, 54 | .hljs-regexp, 55 | .hljs-link { 56 | font-weight: normal 57 | } 58 | .hljs-string { 59 | color: #008000; 60 | font-weight: bold 61 | } 62 | .hljs-symbol, 63 | .hljs-bullet, 64 | .hljs-formula { 65 | color: #000; 66 | background: #d0eded; 67 | font-style: italic 68 | } 69 | .hljs-doctag { 70 | text-decoration: underline 71 | } 72 | .hljs-variable, 73 | .hljs-template-variable { 74 | color: #660e7a 75 | } 76 | .hljs-addition { 77 | background: #baeeba 78 | } 79 | .hljs-deletion { 80 | background: #ffc8bd 81 | } 82 | .hljs-emphasis { 83 | font-style: italic 84 | } 85 | .hljs-strong { 86 | font-weight: bold 87 | } 88 | } -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/code-theme/theme/intellij-light.scss: -------------------------------------------------------------------------------- 1 | .code-theme-intellij-light{ 2 | pre code.hljs { 3 | display: block; 4 | overflow-x: auto; 5 | padding: 1em 6 | } 7 | code.hljs { 8 | padding: 3px 5px 9 | } 10 | /* 11 | 12 | Intellij-light style (c) Pegasis 13 | 14 | */ 15 | .hljs { 16 | color: #000; 17 | background: #fff 18 | } 19 | .hljs-subst, 20 | .hljs-title { 21 | font-weight: normal; 22 | color: #000 23 | } 24 | .hljs-title.function_ { 25 | color: #7A7A43 26 | } 27 | .hljs-code, 28 | .hljs-comment, 29 | .hljs-quote { 30 | color: #8C8C8C; 31 | font-style: italic 32 | } 33 | .hljs-meta { 34 | color: #9E880D 35 | } 36 | .hljs-section { 37 | color: #871094 38 | } 39 | .hljs-variable.language_, 40 | .hljs-symbol, 41 | .hljs-selector-class, 42 | .hljs-selector-id, 43 | .hljs-selector-tag, 44 | .hljs-template-tag, 45 | .hljs-selector-attr, 46 | .hljs-selector-pseudo, 47 | .hljs-keyword, 48 | .hljs-meta .hljs-keyword, 49 | .hljs-literal, 50 | .hljs-name, 51 | .hljs-built_in, 52 | .hljs-type { 53 | color: #0033B3 54 | } 55 | .hljs-property, 56 | .hljs-attr { 57 | color: #871094 58 | } 59 | .hljs-attribute { 60 | color: #174AD4 61 | } 62 | .hljs-number { 63 | color: #1750EB 64 | } 65 | .hljs-regexp { 66 | color: #264EFF 67 | } 68 | .hljs-link { 69 | text-decoration: underline; 70 | color: #006DCC 71 | } 72 | .hljs-meta .hljs-string, 73 | .hljs-string { 74 | color: #067D17 75 | } 76 | .hljs-char.escape_ { 77 | color: #0037A6 78 | } 79 | .hljs-doctag { 80 | text-decoration: underline 81 | } 82 | .hljs-template-variable { 83 | color: #248F8F 84 | } 85 | .hljs-addition { 86 | background: #BEE6BE 87 | } 88 | .hljs-deletion { 89 | background: #D6D6D6 90 | } 91 | .hljs-emphasis { 92 | font-style: italic 93 | } 94 | .hljs-strong { 95 | font-weight: bold 96 | } 97 | .hljs-variable, 98 | .hljs-operator, 99 | .hljs-punctuation, 100 | .hljs-title.class_.inherited__, 101 | .hljs-title.class_, 102 | .hljs-params, 103 | .hljs-bullet, 104 | .hljs-formula, 105 | .hljs-tag { 106 | /* purposely ignored */ 107 | 108 | } 109 | } -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/code-theme/theme/ir-black.scss: -------------------------------------------------------------------------------- 1 | .code-theme-ir-black{ 2 | pre code.hljs { 3 | display: block; 4 | overflow-x: auto; 5 | padding: 1em 6 | } 7 | code.hljs { 8 | padding: 3px 5px 9 | } 10 | /* 11 | IR_Black style (c) Vasily Mikhailitchenko 12 | */ 13 | .hljs { 14 | background: #000; 15 | color: #f8f8f8 16 | } 17 | .hljs-comment, 18 | .hljs-quote, 19 | .hljs-meta { 20 | color: #7c7c7c 21 | } 22 | .hljs-keyword, 23 | .hljs-selector-tag, 24 | .hljs-tag, 25 | .hljs-name { 26 | color: #96cbfe 27 | } 28 | .hljs-attribute, 29 | .hljs-selector-id { 30 | color: #ffffb6 31 | } 32 | .hljs-string, 33 | .hljs-selector-attr, 34 | .hljs-selector-pseudo, 35 | .hljs-addition { 36 | color: #a8ff60 37 | } 38 | .hljs-subst { 39 | color: #daefa3 40 | } 41 | .hljs-regexp, 42 | .hljs-link { 43 | color: #e9c062 44 | } 45 | .hljs-title, 46 | .hljs-section, 47 | .hljs-type, 48 | .hljs-doctag { 49 | color: #ffffb6 50 | } 51 | .hljs-symbol, 52 | .hljs-bullet, 53 | .hljs-variable, 54 | .hljs-template-variable, 55 | .hljs-literal { 56 | color: #c6c5fe 57 | } 58 | .hljs-number, 59 | .hljs-deletion { 60 | color: #ff73fd 61 | } 62 | .hljs-emphasis { 63 | font-style: italic 64 | } 65 | .hljs-strong { 66 | font-weight: bold 67 | } 68 | } -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/code-theme/theme/isbl-editor-dark.scss: -------------------------------------------------------------------------------- 1 | .code-theme-isbl-editor-dark{ 2 | pre code.hljs { 3 | display: block; 4 | overflow-x: auto; 5 | padding: 1em 6 | } 7 | code.hljs { 8 | padding: 3px 5px 9 | } 10 | /* 11 | 12 | ISBL Editor style dark color scheme (c) Dmitriy Tarasov 13 | 14 | */ 15 | .hljs { 16 | background: #404040; 17 | color: #f0f0f0 18 | } 19 | /* Base color: saturation 0; */ 20 | .hljs, 21 | .hljs-subst { 22 | color: #f0f0f0 23 | } 24 | .hljs-comment { 25 | color: #b5b5b5; 26 | font-style: italic 27 | } 28 | .hljs-keyword, 29 | .hljs-attribute, 30 | .hljs-selector-tag, 31 | .hljs-meta .hljs-keyword, 32 | .hljs-doctag, 33 | .hljs-name { 34 | color: #f0f0f0; 35 | font-weight: bold 36 | } 37 | /* User color: hue: 0 */ 38 | .hljs-string { 39 | color: #97bf0d 40 | } 41 | .hljs-type, 42 | .hljs-number, 43 | .hljs-selector-id, 44 | .hljs-selector-class, 45 | .hljs-quote, 46 | .hljs-template-tag, 47 | .hljs-deletion { 48 | color: #f0f0f0 49 | } 50 | .hljs-regexp, 51 | .hljs-symbol, 52 | .hljs-variable, 53 | .hljs-template-variable, 54 | .hljs-link, 55 | .hljs-selector-attr, 56 | .hljs-selector-pseudo { 57 | color: #e2c696 58 | } 59 | /* Language color: hue: 90; */ 60 | .hljs-built_in, 61 | .hljs-literal { 62 | color: #97bf0d; 63 | font-weight: bold 64 | } 65 | .hljs-bullet, 66 | .hljs-code, 67 | .hljs-addition { 68 | color: #397300 69 | } 70 | .hljs-class { 71 | color: #ce9d4d; 72 | font-weight: bold 73 | } 74 | .hljs-title, 75 | .hljs-section { 76 | color: #df471e 77 | } 78 | .hljs-title>.hljs-built_in { 79 | color: #81bce9; 80 | font-weight: normal 81 | } 82 | /* Meta color: hue: 200 */ 83 | .hljs-meta { 84 | color: #1f7199 85 | } 86 | .hljs-meta .hljs-string { 87 | color: #4d99bf 88 | } 89 | /* Misc effects */ 90 | .hljs-emphasis { 91 | font-style: italic 92 | } 93 | .hljs-strong { 94 | font-weight: bold 95 | } 96 | } -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/code-theme/theme/isbl-editor-light.scss: -------------------------------------------------------------------------------- 1 | .code-theme-isbl-editor-light{ 2 | pre code.hljs { 3 | display: block; 4 | overflow-x: auto; 5 | padding: 1em 6 | } 7 | code.hljs { 8 | padding: 3px 5px 9 | } 10 | /* 11 | 12 | ISBL Editor style light color schemec (c) Dmitriy Tarasov 13 | 14 | */ 15 | .hljs { 16 | background: white; 17 | color: black 18 | } 19 | /* Base color: saturation 0; */ 20 | .hljs-subst { 21 | color: black 22 | } 23 | .hljs-comment { 24 | color: #555555; 25 | font-style: italic 26 | } 27 | .hljs-keyword, 28 | .hljs-attribute, 29 | .hljs-selector-tag, 30 | .hljs-meta .hljs-keyword, 31 | .hljs-doctag, 32 | .hljs-name { 33 | color: #000000; 34 | font-weight: bold 35 | } 36 | /* User color: hue: 0 */ 37 | .hljs-string { 38 | color: #000080 39 | } 40 | .hljs-type, 41 | .hljs-number, 42 | .hljs-selector-id, 43 | .hljs-selector-class, 44 | .hljs-quote, 45 | .hljs-template-tag, 46 | .hljs-deletion { 47 | color: #000000 48 | } 49 | .hljs-regexp, 50 | .hljs-symbol, 51 | .hljs-variable, 52 | .hljs-template-variable, 53 | .hljs-link, 54 | .hljs-selector-attr, 55 | .hljs-selector-pseudo { 56 | color: #5e1700 57 | } 58 | /* Language color: hue: 90; */ 59 | .hljs-built_in, 60 | .hljs-literal { 61 | color: #000080; 62 | font-weight: bold 63 | } 64 | .hljs-bullet, 65 | .hljs-code, 66 | .hljs-addition { 67 | color: #397300 68 | } 69 | .hljs-class { 70 | color: #6f1C00; 71 | font-weight: bold 72 | } 73 | .hljs-title, 74 | .hljs-section { 75 | color: #fb2c00 76 | } 77 | .hljs-title>.hljs-built_in { 78 | color: #008080; 79 | font-weight: normal 80 | } 81 | /* Meta color: hue: 200 */ 82 | .hljs-meta { 83 | color: #1f7199 84 | } 85 | .hljs-meta .hljs-string { 86 | color: #4d99bf 87 | } 88 | /* Misc effects */ 89 | .hljs-emphasis { 90 | font-style: italic 91 | } 92 | .hljs-strong { 93 | font-weight: bold 94 | } 95 | } -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/code-theme/theme/kimbie-dark.scss: -------------------------------------------------------------------------------- 1 | .code-theme-kimbie-dark{ 2 | pre code.hljs { 3 | display: block; 4 | overflow-x: auto; 5 | padding: 1em 6 | } 7 | code.hljs { 8 | padding: 3px 5px 9 | } 10 | /* 11 | Name: Kimbie (dark) 12 | Author: Jan T. Sott 13 | License: Creative Commons Attribution-ShareAlike 4.0 Unported License 14 | URL: https://github.com/idleberg/Kimbie-highlight.js 15 | */ 16 | .hljs { 17 | background: #221a0f; 18 | color: #d3af86 19 | } 20 | /* Kimbie Comment */ 21 | .hljs-comment, 22 | .hljs-quote { 23 | color: #d6baad 24 | } 25 | /* Kimbie Red */ 26 | .hljs-variable, 27 | .hljs-template-variable, 28 | .hljs-tag, 29 | .hljs-name, 30 | .hljs-selector-id, 31 | .hljs-selector-class, 32 | .hljs-regexp, 33 | .hljs-meta { 34 | color: #dc3958 35 | } 36 | /* Kimbie Orange */ 37 | .hljs-number, 38 | .hljs-built_in, 39 | .hljs-literal, 40 | .hljs-type, 41 | .hljs-params, 42 | .hljs-deletion, 43 | .hljs-link { 44 | color: #f79a32 45 | } 46 | /* Kimbie Green */ 47 | .hljs-string, 48 | .hljs-symbol, 49 | .hljs-bullet, 50 | .hljs-addition { 51 | color: #889b4a 52 | } 53 | /* Kimbie Purple */ 54 | .hljs-keyword, 55 | .hljs-selector-tag, 56 | .hljs-function { 57 | color: #98676a 58 | } 59 | /* Kimbie Yellow */ 60 | .hljs-title, 61 | .hljs-section, 62 | .hljs-attribute { 63 | color: #f06431 64 | } 65 | .hljs-emphasis { 66 | font-style: italic 67 | } 68 | .hljs-strong { 69 | font-weight: bold 70 | } 71 | } -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/code-theme/theme/kimbie-light.scss: -------------------------------------------------------------------------------- 1 | .code-theme-kimbie-light{ 2 | pre code.hljs { 3 | display: block; 4 | overflow-x: auto; 5 | padding: 1em 6 | } 7 | code.hljs { 8 | padding: 3px 5px 9 | } 10 | /* 11 | Name: Kimbie (light) 12 | Author: Jan T. Sott 13 | License: Creative Commons Attribution-ShareAlike 4.0 Unported License 14 | URL: https://github.com/idleberg/Kimbie-highlight.js 15 | */ 16 | .hljs { 17 | background: #fbebd4; 18 | color: #84613d 19 | } 20 | /* Kimbie Comment */ 21 | .hljs-comment, 22 | .hljs-quote { 23 | color: #a57a4c 24 | } 25 | /* Kimbie Red */ 26 | .hljs-variable, 27 | .hljs-template-variable, 28 | .hljs-tag, 29 | .hljs-name, 30 | .hljs-selector-id, 31 | .hljs-selector-class, 32 | .hljs-regexp, 33 | .hljs-meta { 34 | color: #dc3958 35 | } 36 | /* Kimbie Orange */ 37 | .hljs-number, 38 | .hljs-built_in, 39 | .hljs-literal, 40 | .hljs-type, 41 | .hljs-params, 42 | .hljs-deletion, 43 | .hljs-link { 44 | color: #f79a32 45 | } 46 | /* Kimbie Green */ 47 | .hljs-string, 48 | .hljs-symbol, 49 | .hljs-bullet, 50 | .hljs-addition { 51 | color: #889b4a 52 | } 53 | /* Kimbie Purple */ 54 | .hljs-keyword, 55 | .hljs-selector-tag, 56 | .hljs-function { 57 | color: #98676a 58 | } 59 | /* Kimbie Yellow */ 60 | .hljs-title, 61 | .hljs-section, 62 | .hljs-attribute { 63 | color: #f06431 64 | } 65 | .hljs-emphasis { 66 | font-style: italic 67 | } 68 | .hljs-strong { 69 | font-weight: bold 70 | } 71 | } -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/code-theme/theme/lightfair.scss: -------------------------------------------------------------------------------- 1 | .code-theme-lightfair{ 2 | pre code.hljs { 3 | display: block; 4 | overflow-x: auto; 5 | padding: 1em 6 | } 7 | code.hljs { 8 | padding: 3px 5px 9 | } 10 | /* 11 | 12 | Lightfair style (c) Tristian Kelly 13 | 14 | */ 15 | .hljs { 16 | color: #444; 17 | background: #fff 18 | } 19 | .hljs-name { 20 | color: #01a3a3 21 | } 22 | .hljs-tag, 23 | .hljs-meta { 24 | color: #778899 25 | } 26 | .hljs-subst { 27 | /* default */ 28 | 29 | } 30 | .hljs-comment { 31 | color: #888888 32 | } 33 | .hljs-keyword, 34 | .hljs-attribute, 35 | .hljs-selector-tag, 36 | .hljs-meta .hljs-keyword, 37 | .hljs-doctag, 38 | .hljs-name { 39 | font-weight: bold 40 | } 41 | .hljs-type, 42 | .hljs-string, 43 | .hljs-number, 44 | .hljs-selector-id, 45 | .hljs-selector-class, 46 | .hljs-quote, 47 | .hljs-template-tag, 48 | .hljs-deletion { 49 | color: #4286f4 50 | } 51 | .hljs-title, 52 | .hljs-section { 53 | color: #4286f4; 54 | font-weight: bold 55 | } 56 | .hljs-regexp, 57 | .hljs-symbol, 58 | .hljs-variable, 59 | .hljs-template-variable, 60 | .hljs-link, 61 | .hljs-selector-attr, 62 | .hljs-selector-pseudo { 63 | color: #BC6060 64 | } 65 | .hljs-literal { 66 | color: #62bcbc 67 | } 68 | .hljs-built_in, 69 | .hljs-bullet, 70 | .hljs-code, 71 | .hljs-addition { 72 | color: #25c6c6 73 | } 74 | .hljs-meta .hljs-string { 75 | color: #4d99bf 76 | } 77 | .hljs-emphasis { 78 | font-style: italic 79 | } 80 | .hljs-strong { 81 | font-weight: bold 82 | } 83 | } -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/code-theme/theme/lioshi.scss: -------------------------------------------------------------------------------- 1 | .code-theme-lioshi{ 2 | pre code.hljs { 3 | display: block; 4 | overflow-x: auto; 5 | padding: 1em 6 | } 7 | code.hljs { 8 | padding: 3px 5px 9 | } 10 | /* lioshi Theme */ 11 | /* Original theme - https://github.com/lioshi/vscode-lioshi-theme */ 12 | .hljs { 13 | background: #303030; 14 | color: #c5c8c6 15 | } 16 | /* Comment */ 17 | .hljs-comment { 18 | color: #8d8d8d 19 | } 20 | /* quote */ 21 | .hljs-quote { 22 | color: #b3c7d8 23 | } 24 | /* Red */ 25 | .hljs-variable, 26 | .hljs-template-variable, 27 | .hljs-tag, 28 | .hljs-name, 29 | .hljs-selector-id, 30 | .hljs-selector-class, 31 | .hljs-regexp, 32 | .hljs-deletion { 33 | color: #cc6666 34 | } 35 | /* Orange */ 36 | .hljs-number, 37 | .hljs-built_in, 38 | .hljs-literal, 39 | .hljs-type, 40 | .hljs-subst 41 | .hljs-link { 42 | color: #de935f 43 | } 44 | /* Yellow */ 45 | .hljs-attribute { 46 | color: #f0c674 47 | } 48 | /* Green */ 49 | .hljs-string, 50 | .hljs-bullet, 51 | .hljs-params, 52 | .hljs-addition { 53 | color: #b5bd68 54 | } 55 | /* Purple */ 56 | .hljs-selector-tag, 57 | .hljs-keyword, 58 | .hljs-function, 59 | .hljs-class { 60 | color: #be94bb 61 | } 62 | /* Blue */ 63 | .hljs-title, 64 | .hljs-meta, 65 | .hljs-section { 66 | color: #81a2be 67 | } 68 | /* Purple light */ 69 | .hljs-symbol { 70 | color: #dbc4d9 71 | } 72 | .hljs-emphasis { 73 | font-style: italic 74 | } 75 | .hljs-strong { 76 | font-weight: bold 77 | } 78 | } -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/code-theme/theme/magula.scss: -------------------------------------------------------------------------------- 1 | .code-theme-magula{ 2 | pre code.hljs { 3 | display: block; 4 | overflow-x: auto; 5 | padding: 1em 6 | } 7 | code.hljs { 8 | padding: 3px 5px 9 | } 10 | /* 11 | Description: Magula style for highligh.js 12 | Author: Ruslan Keba 13 | Website: http://rukeba.com/ 14 | Version: 1.0 15 | Date: 2009-01-03 16 | Music: Aphex Twin / Xtal 17 | */ 18 | .hljs { 19 | background-color: #f4f4f4; 20 | color: black 21 | } 22 | .hljs-subst { 23 | color: black 24 | } 25 | .hljs-string, 26 | .hljs-title, 27 | .hljs-symbol, 28 | .hljs-bullet, 29 | .hljs-attribute, 30 | .hljs-addition, 31 | .hljs-variable, 32 | .hljs-template-tag, 33 | .hljs-template-variable { 34 | color: #050 35 | } 36 | .hljs-comment, 37 | .hljs-quote { 38 | color: #777 39 | } 40 | .hljs-number, 41 | .hljs-regexp, 42 | .hljs-literal, 43 | .hljs-type, 44 | .hljs-link { 45 | color: #800 46 | } 47 | .hljs-deletion, 48 | .hljs-meta { 49 | color: #00e 50 | } 51 | .hljs-keyword, 52 | .hljs-selector-tag, 53 | .hljs-doctag, 54 | .hljs-title, 55 | .hljs-section, 56 | .hljs-built_in, 57 | .hljs-tag, 58 | .hljs-name { 59 | font-weight: bold; 60 | color: navy 61 | } 62 | .hljs-emphasis { 63 | font-style: italic 64 | } 65 | .hljs-strong { 66 | font-weight: bold 67 | } 68 | } -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/code-theme/theme/mono-blue.scss: -------------------------------------------------------------------------------- 1 | .code-theme-mono-blue{ 2 | pre code.hljs { 3 | display: block; 4 | overflow-x: auto; 5 | padding: 1em 6 | } 7 | code.hljs { 8 | padding: 3px 5px 9 | } 10 | /* 11 | Five-color theme from a single blue hue. 12 | */ 13 | .hljs { 14 | background: #eaeef3; 15 | color: #00193a 16 | } 17 | .hljs-keyword, 18 | .hljs-selector-tag, 19 | .hljs-title, 20 | .hljs-section, 21 | .hljs-doctag, 22 | .hljs-name, 23 | .hljs-strong { 24 | font-weight: bold 25 | } 26 | .hljs-comment { 27 | color: #738191 28 | } 29 | .hljs-string, 30 | .hljs-title, 31 | .hljs-section, 32 | .hljs-built_in, 33 | .hljs-literal, 34 | .hljs-type, 35 | .hljs-addition, 36 | .hljs-tag, 37 | .hljs-quote, 38 | .hljs-name, 39 | .hljs-selector-id, 40 | .hljs-selector-class { 41 | color: #0048ab 42 | } 43 | .hljs-meta, 44 | .hljs-subst, 45 | .hljs-symbol, 46 | .hljs-regexp, 47 | .hljs-attribute, 48 | .hljs-deletion, 49 | .hljs-variable, 50 | .hljs-template-variable, 51 | .hljs-link, 52 | .hljs-bullet { 53 | color: #4c81c9 54 | } 55 | .hljs-emphasis { 56 | font-style: italic 57 | } 58 | } -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/code-theme/theme/monokai-sublime.scss: -------------------------------------------------------------------------------- 1 | .code-theme-monokai-sublime{ 2 | pre code.hljs { 3 | display: block; 4 | overflow-x: auto; 5 | padding: 1em 6 | } 7 | code.hljs { 8 | padding: 3px 5px 9 | } 10 | /* 11 | 12 | Monokai Sublime style. Derived from Monokai by noformnocontent http://nn.mit-license.org/ 13 | 14 | */ 15 | .hljs { 16 | background: #23241f; 17 | color: #f8f8f2 18 | } 19 | .hljs-tag, 20 | .hljs-subst { 21 | color: #f8f8f2 22 | } 23 | .hljs-strong, 24 | .hljs-emphasis { 25 | color: #a8a8a2 26 | } 27 | .hljs-bullet, 28 | .hljs-quote, 29 | .hljs-number, 30 | .hljs-regexp, 31 | .hljs-literal, 32 | .hljs-link { 33 | color: #ae81ff 34 | } 35 | .hljs-code, 36 | .hljs-title, 37 | .hljs-section, 38 | .hljs-selector-class { 39 | color: #a6e22e 40 | } 41 | .hljs-strong { 42 | font-weight: bold 43 | } 44 | .hljs-emphasis { 45 | font-style: italic 46 | } 47 | .hljs-keyword, 48 | .hljs-selector-tag, 49 | .hljs-name, 50 | .hljs-attr { 51 | color: #f92672 52 | } 53 | .hljs-symbol, 54 | .hljs-attribute { 55 | color: #66d9ef 56 | } 57 | .hljs-params, 58 | .hljs-title.class_, 59 | .hljs-class .hljs-title { 60 | color: #f8f8f2 61 | } 62 | .hljs-string, 63 | .hljs-type, 64 | .hljs-built_in, 65 | .hljs-selector-id, 66 | .hljs-selector-attr, 67 | .hljs-selector-pseudo, 68 | .hljs-addition, 69 | .hljs-variable, 70 | .hljs-template-variable { 71 | color: #e6db74 72 | } 73 | .hljs-comment, 74 | .hljs-deletion, 75 | .hljs-meta { 76 | color: #75715e 77 | } 78 | } -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/code-theme/theme/monokai.scss: -------------------------------------------------------------------------------- 1 | .code-theme-monokai{ 2 | pre code.hljs { 3 | display: block; 4 | overflow-x: auto; 5 | padding: 1em 6 | } 7 | code.hljs { 8 | padding: 3px 5px 9 | } 10 | /* 11 | Monokai style - ported by Luigi Maselli - http://grigio.org 12 | */ 13 | .hljs { 14 | background: #272822; 15 | color: #ddd 16 | } 17 | .hljs-tag, 18 | .hljs-keyword, 19 | .hljs-selector-tag, 20 | .hljs-literal, 21 | .hljs-strong, 22 | .hljs-number, 23 | .hljs-name { 24 | color: #f92672 25 | } 26 | .hljs-code { 27 | color: #66d9ef 28 | } 29 | .hljs-attribute, 30 | .hljs-attr, 31 | .hljs-symbol, 32 | .hljs-regexp, 33 | .hljs-link { 34 | color: #bf79db 35 | } 36 | .hljs-string, 37 | .hljs-bullet, 38 | .hljs-subst, 39 | .hljs-title, 40 | .hljs-section, 41 | .hljs-emphasis, 42 | .hljs-type, 43 | .hljs-built_in, 44 | .hljs-selector-attr, 45 | .hljs-selector-pseudo, 46 | .hljs-addition, 47 | .hljs-variable, 48 | .hljs-template-tag, 49 | .hljs-template-variable { 50 | color: #a6e22e 51 | } 52 | .hljs-title.class_, 53 | .hljs-class .hljs-title { 54 | color: white 55 | } 56 | .hljs-comment, 57 | .hljs-quote, 58 | .hljs-deletion, 59 | .hljs-meta { 60 | color: #75715e 61 | } 62 | .hljs-keyword, 63 | .hljs-selector-tag, 64 | .hljs-literal, 65 | .hljs-doctag, 66 | .hljs-title, 67 | .hljs-section, 68 | .hljs-type, 69 | .hljs-selector-id { 70 | font-weight: bold 71 | } 72 | } -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/code-theme/theme/nnfx-dark.scss: -------------------------------------------------------------------------------- 1 | .code-theme-nnfx-dark{ 2 | pre code.hljs { 3 | display: block; 4 | overflow-x: auto; 5 | padding: 1em 6 | } 7 | code.hljs { 8 | padding: 3px 5px 9 | } 10 | /*! 11 | Theme: nnfx dark 12 | Description: a theme inspired by Netscape Navigator/Firefox 13 | Author: (c) 2020-2021 Jim Mason 14 | Maintainer: @RocketMan 15 | License: https://creativecommons.org/licenses/by-sa/4.0 CC BY-SA 4.0 16 | Updated: 2021-05-17 17 | 18 | @version 1.1.0 19 | */ 20 | .hljs { 21 | background: #333; 22 | color: #fff 23 | } 24 | .language-xml .hljs-meta, 25 | .language-xml .hljs-meta-string { 26 | font-weight: bold; 27 | font-style: italic; 28 | color: #69f 29 | } 30 | .hljs-comment, 31 | .hljs-quote { 32 | font-style: italic; 33 | color: #9c6 34 | } 35 | .hljs-name, 36 | .hljs-keyword, 37 | .hljs-built_in { 38 | color: #a7a 39 | } 40 | .hljs-name, 41 | .hljs-attr { 42 | font-weight: bold 43 | } 44 | .hljs-string { 45 | font-weight: normal 46 | } 47 | .hljs-code, 48 | .hljs-string, 49 | .hljs-meta .hljs-string, 50 | .hljs-number, 51 | .hljs-regexp, 52 | .hljs-link { 53 | color: #bce 54 | } 55 | .hljs-title, 56 | .hljs-symbol, 57 | .hljs-bullet, 58 | .hljs-variable, 59 | .hljs-template-variable { 60 | color: #d40 61 | } 62 | .hljs-title.class_, 63 | .hljs-class .hljs-title, 64 | .hljs-type { 65 | font-weight: bold; 66 | color: #96c 67 | } 68 | .hljs-title.function_, 69 | .hljs-function .hljs-title, 70 | .hljs-attr, 71 | .hljs-subst, 72 | .hljs-tag { 73 | color: #fff 74 | } 75 | .hljs-formula { 76 | background-color: #eee; 77 | font-style: italic 78 | } 79 | .hljs-addition { 80 | background-color: #797 81 | } 82 | .hljs-deletion { 83 | background-color: #c99 84 | } 85 | .hljs-meta { 86 | color: #69f 87 | } 88 | .hljs-section, 89 | .hljs-selector-id, 90 | .hljs-selector-class, 91 | .hljs-selector-pseudo, 92 | .hljs-selector-tag { 93 | font-weight: bold; 94 | color: #69f 95 | } 96 | .hljs-selector-pseudo { 97 | font-style: italic 98 | } 99 | .hljs-doctag, 100 | .hljs-strong { 101 | font-weight: bold 102 | } 103 | .hljs-emphasis { 104 | font-style: italic 105 | } 106 | } -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/code-theme/theme/nnfx-light.scss: -------------------------------------------------------------------------------- 1 | .code-theme-nnfx-light{ 2 | pre code.hljs { 3 | display: block; 4 | overflow-x: auto; 5 | padding: 1em 6 | } 7 | code.hljs { 8 | padding: 3px 5px 9 | } 10 | /*! 11 | Theme: nnfx light 12 | Description: a theme inspired by Netscape Navigator/Firefox 13 | Author: (c) 2020-2021 Jim Mason 14 | Maintainer: @RocketMan 15 | License: https://creativecommons.org/licenses/by-sa/4.0 CC BY-SA 4.0 16 | Updated: 2021-05-17 17 | 18 | @version 1.1.0 19 | */ 20 | .hljs { 21 | background: #fff; 22 | color: #000 23 | } 24 | .language-xml .hljs-meta, 25 | .language-xml .hljs-meta-string { 26 | font-weight: bold; 27 | font-style: italic; 28 | color: #48b 29 | } 30 | .hljs-comment, 31 | .hljs-quote { 32 | font-style: italic; 33 | color: #070 34 | } 35 | .hljs-name, 36 | .hljs-keyword, 37 | .hljs-built_in { 38 | color: #808 39 | } 40 | .hljs-name, 41 | .hljs-attr { 42 | font-weight: bold 43 | } 44 | .hljs-string { 45 | font-weight: normal 46 | } 47 | .hljs-code, 48 | .hljs-string, 49 | .hljs-meta .hljs-string, 50 | .hljs-number, 51 | .hljs-regexp, 52 | .hljs-link { 53 | color: #00f 54 | } 55 | .hljs-title, 56 | .hljs-symbol, 57 | .hljs-bullet, 58 | .hljs-variable, 59 | .hljs-template-variable { 60 | color: #f40 61 | } 62 | .hljs-title.class_, 63 | .hljs-class .hljs-title, 64 | .hljs-type { 65 | font-weight: bold; 66 | color: #639 67 | } 68 | .hljs-title.function_, 69 | .hljs-function .hljs-title, 70 | .hljs-attr, 71 | .hljs-subst, 72 | .hljs-tag { 73 | color: #000 74 | } 75 | .hljs-formula { 76 | background-color: #eee; 77 | font-style: italic 78 | } 79 | .hljs-addition { 80 | background-color: #beb 81 | } 82 | .hljs-deletion { 83 | background-color: #fbb 84 | } 85 | .hljs-meta { 86 | color: #269 87 | } 88 | .hljs-section, 89 | .hljs-selector-id, 90 | .hljs-selector-class, 91 | .hljs-selector-pseudo, 92 | .hljs-selector-tag { 93 | font-weight: bold; 94 | color: #48b 95 | } 96 | .hljs-selector-pseudo { 97 | font-style: italic 98 | } 99 | .hljs-doctag, 100 | .hljs-strong { 101 | font-weight: bold 102 | } 103 | .hljs-emphasis { 104 | font-style: italic 105 | } 106 | } -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/code-theme/theme/obsidian.scss: -------------------------------------------------------------------------------- 1 | .code-theme-obsidian{ 2 | pre code.hljs { 3 | display: block; 4 | overflow-x: auto; 5 | padding: 1em 6 | } 7 | code.hljs { 8 | padding: 3px 5px 9 | } 10 | /** 11 | * Obsidian style 12 | * ported by Alexander Marenin (http://github.com/ioncreature) 13 | */ 14 | .hljs { 15 | color: #e0e2e4; 16 | background: #282b2e 17 | } 18 | .hljs-keyword, 19 | .hljs-selector-tag, 20 | .hljs-literal, 21 | .hljs-selector-id { 22 | color: #93c763 23 | } 24 | .hljs-number { 25 | color: #ffcd22 26 | } 27 | .hljs-attribute { 28 | color: #668bb0 29 | } 30 | .hljs-regexp, 31 | .hljs-link { 32 | color: #d39745 33 | } 34 | .hljs-meta { 35 | color: #557182 36 | } 37 | .hljs-tag, 38 | .hljs-name, 39 | .hljs-bullet, 40 | .hljs-subst, 41 | .hljs-emphasis, 42 | .hljs-type, 43 | .hljs-built_in, 44 | .hljs-selector-attr, 45 | .hljs-selector-pseudo, 46 | .hljs-addition, 47 | .hljs-variable, 48 | .hljs-template-tag, 49 | .hljs-template-variable { 50 | color: #8cbbad 51 | } 52 | .hljs-string, 53 | .hljs-symbol { 54 | color: #ec7600 55 | } 56 | .hljs-comment, 57 | .hljs-quote, 58 | .hljs-deletion { 59 | color: #818e96 60 | } 61 | .hljs-selector-class { 62 | color: #A082BD 63 | } 64 | .hljs-keyword, 65 | .hljs-selector-tag, 66 | .hljs-literal, 67 | .hljs-doctag, 68 | .hljs-title, 69 | .hljs-section, 70 | .hljs-type, 71 | .hljs-name, 72 | .hljs-strong { 73 | font-weight: bold 74 | } 75 | .hljs-code, 76 | .hljs-title.class_, 77 | .hljs-class .hljs-title, 78 | .hljs-section { 79 | color: white 80 | } 81 | } -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/code-theme/theme/panda-syntax-dark.scss: -------------------------------------------------------------------------------- 1 | .code-theme-panda-syntax-dark{ 2 | pre code.hljs { 3 | display: block; 4 | overflow-x: auto; 5 | padding: 1em 6 | } 7 | code.hljs { 8 | padding: 3px 5px 9 | } 10 | /** 11 | * Panda Syntax Theme for Highlight.js 12 | * Based on: https://github.com/tinkertrain/panda-syntax-vscode 13 | * Author: Annmarie Switzer 14 | */ 15 | .hljs { 16 | color: #e6e6e6; 17 | background: #2a2c2d 18 | } 19 | .hljs-emphasis { 20 | font-style: italic 21 | } 22 | .hljs-strong { 23 | font-weight: bold 24 | } 25 | .hljs-link { 26 | text-decoration: underline 27 | } 28 | .hljs-comment, 29 | .hljs-quote { 30 | color: #bbbbbb; 31 | font-style: italic 32 | } 33 | .hljs-params { 34 | color: #bbbbbb 35 | } 36 | .hljs-punctuation, 37 | .hljs-attr { 38 | color: #e6e6e6 39 | } 40 | .hljs-selector-tag, 41 | .hljs-name, 42 | .hljs-meta { 43 | color: #ff4b82 44 | } 45 | .hljs-operator, 46 | .hljs-char.escape_ { 47 | color: #b084eb 48 | } 49 | .hljs-keyword, 50 | .hljs-deletion { 51 | color: #ff75b5 52 | } 53 | .hljs-regexp, 54 | .hljs-selector-pseudo, 55 | .hljs-selector-attr, 56 | .hljs-variable.language_ { 57 | color: #ff9ac1 58 | } 59 | .hljs-subst, 60 | .hljs-property, 61 | .hljs-code, 62 | .hljs-formula, 63 | .hljs-section, 64 | .hljs-title.function_ { 65 | color: #45a9f9 66 | } 67 | .hljs-string, 68 | .hljs-symbol, 69 | .hljs-bullet, 70 | .hljs-addition, 71 | .hljs-selector-class, 72 | .hljs-title.class_, 73 | .hljs-title.class_.inherited__, 74 | .hljs-meta .hljs-string { 75 | color: #19f9d8 76 | } 77 | .hljs-variable, 78 | .hljs-template-variable, 79 | .hljs-number, 80 | .hljs-literal, 81 | .hljs-type, 82 | .hljs-link, 83 | .hljs-built_in, 84 | .hljs-title, 85 | .hljs-selector-id, 86 | .hljs-tag, 87 | .hljs-doctag, 88 | .hljs-attribute, 89 | .hljs-template-tag, 90 | .hljs-meta .hljs-keyword, 91 | .hljs-punctuation { 92 | color: #ffb86c 93 | } 94 | } -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/code-theme/theme/panda-syntax-light.scss: -------------------------------------------------------------------------------- 1 | .code-theme-panda-syntax-light{ 2 | pre code.hljs { 3 | display: block; 4 | overflow-x: auto; 5 | padding: 1em 6 | } 7 | code.hljs { 8 | padding: 3px 5px 9 | } 10 | /** 11 | * Panda Syntax Theme for Highlight.js 12 | * Based on: https://github.com/tinkertrain/panda-syntax-vscode 13 | * Author: Annmarie Switzer 14 | */ 15 | .hljs { 16 | color: #2a2c2d; 17 | background: #e6e6e6 18 | } 19 | .hljs-emphasis { 20 | font-style: italic 21 | } 22 | .hljs-strong { 23 | font-weight: bold 24 | } 25 | .hljs-link { 26 | text-decoration: underline 27 | } 28 | .hljs-comment, 29 | .hljs-quote { 30 | color: #676B79; 31 | font-style: italic 32 | } 33 | .hljs-params { 34 | color: #676B79 35 | } 36 | .hljs-punctuation, 37 | .hljs-attr { 38 | color: #2a2c2d 39 | } 40 | .hljs-selector-tag, 41 | .hljs-name, 42 | .hljs-meta, 43 | .hljs-operator, 44 | .hljs-char.escape_ { 45 | color: #c56200 46 | } 47 | .hljs-keyword, 48 | .hljs-deletion { 49 | color: #d92792 50 | } 51 | .hljs-regexp, 52 | .hljs-selector-pseudo, 53 | .hljs-selector-attr, 54 | .hljs-variable.language_ { 55 | color: #cc5e91 56 | } 57 | .hljs-subst, 58 | .hljs-property, 59 | .hljs-code, 60 | .hljs-formula, 61 | .hljs-section, 62 | .hljs-title.function_ { 63 | color: #3787c7 64 | } 65 | .hljs-string, 66 | .hljs-symbol, 67 | .hljs-bullet, 68 | .hljs-addition, 69 | .hljs-selector-class, 70 | .hljs-title.class_, 71 | .hljs-title.class_.inherited__, 72 | .hljs-meta .hljs-string { 73 | color: #0d7d6c 74 | } 75 | .hljs-variable, 76 | .hljs-template-variable, 77 | .hljs-number, 78 | .hljs-literal, 79 | .hljs-type, 80 | .hljs-link, 81 | .hljs-built_in, 82 | .hljs-title, 83 | .hljs-selector-id, 84 | .hljs-tag, 85 | .hljs-doctag, 86 | .hljs-attribute, 87 | .hljs-template-tag, 88 | .hljs-meta .hljs-keyword { 89 | color: #7641bb 90 | } 91 | } -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/code-theme/theme/paraiso-dark.scss: -------------------------------------------------------------------------------- 1 | .code-theme-paraiso-dark{ 2 | pre code.hljs { 3 | display: block; 4 | overflow-x: auto; 5 | padding: 1em 6 | } 7 | code.hljs { 8 | padding: 3px 5px 9 | } 10 | /* 11 | Paraíso (dark) 12 | Created by Jan T. Sott (http://github.com/idleberg) 13 | Inspired by the art of Rubens LP (http://www.rubenslp.com.br) 14 | */ 15 | .hljs { 16 | background: #2f1e2e; 17 | color: #a39e9b 18 | } 19 | /* Paraíso Comment */ 20 | .hljs-comment, 21 | .hljs-quote { 22 | color: #8d8687 23 | } 24 | /* Paraíso Red */ 25 | .hljs-variable, 26 | .hljs-template-variable, 27 | .hljs-tag, 28 | .hljs-name, 29 | .hljs-selector-id, 30 | .hljs-selector-class, 31 | .hljs-regexp, 32 | .hljs-link, 33 | .hljs-meta { 34 | color: #ef6155 35 | } 36 | /* Paraíso Orange */ 37 | .hljs-number, 38 | .hljs-built_in, 39 | .hljs-literal, 40 | .hljs-type, 41 | .hljs-params, 42 | .hljs-deletion { 43 | color: #f99b15 44 | } 45 | /* Paraíso Yellow */ 46 | .hljs-title, 47 | .hljs-section, 48 | .hljs-attribute { 49 | color: #fec418 50 | } 51 | /* Paraíso Green */ 52 | .hljs-string, 53 | .hljs-symbol, 54 | .hljs-bullet, 55 | .hljs-addition { 56 | color: #48b685 57 | } 58 | /* Paraíso Purple */ 59 | .hljs-keyword, 60 | .hljs-selector-tag { 61 | color: #815ba4 62 | } 63 | .hljs-emphasis { 64 | font-style: italic 65 | } 66 | .hljs-strong { 67 | font-weight: bold 68 | } 69 | } -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/code-theme/theme/paraiso-light.scss: -------------------------------------------------------------------------------- 1 | .code-theme-paraiso-light{ 2 | pre code.hljs { 3 | display: block; 4 | overflow-x: auto; 5 | padding: 1em 6 | } 7 | code.hljs { 8 | padding: 3px 5px 9 | } 10 | /* 11 | Paraíso (light) 12 | Created by Jan T. Sott (http://github.com/idleberg) 13 | Inspired by the art of Rubens LP (http://www.rubenslp.com.br) 14 | */ 15 | .hljs { 16 | background: #e7e9db; 17 | color: #4f424c 18 | } 19 | /* Paraíso Comment */ 20 | .hljs-comment, 21 | .hljs-quote { 22 | color: #776e71 23 | } 24 | /* Paraíso Red */ 25 | .hljs-variable, 26 | .hljs-template-variable, 27 | .hljs-tag, 28 | .hljs-name, 29 | .hljs-selector-id, 30 | .hljs-selector-class, 31 | .hljs-regexp, 32 | .hljs-link, 33 | .hljs-meta { 34 | color: #ef6155 35 | } 36 | /* Paraíso Orange */ 37 | .hljs-number, 38 | .hljs-built_in, 39 | .hljs-literal, 40 | .hljs-type, 41 | .hljs-params, 42 | .hljs-deletion { 43 | color: #f99b15 44 | } 45 | /* Paraíso Yellow */ 46 | .hljs-title, 47 | .hljs-section, 48 | .hljs-attribute { 49 | color: #fec418 50 | } 51 | /* Paraíso Green */ 52 | .hljs-string, 53 | .hljs-symbol, 54 | .hljs-bullet, 55 | .hljs-addition { 56 | color: #48b685 57 | } 58 | /* Paraíso Purple */ 59 | .hljs-keyword, 60 | .hljs-selector-tag { 61 | color: #815ba4 62 | } 63 | .hljs-emphasis { 64 | font-style: italic 65 | } 66 | .hljs-strong { 67 | font-weight: bold 68 | } 69 | } -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/code-theme/theme/pojoaque.scss: -------------------------------------------------------------------------------- 1 | .code-theme-pojoaque{ 2 | pre code.hljs { 3 | display: block; 4 | overflow-x: auto; 5 | padding: 1em 6 | } 7 | code.hljs { 8 | padding: 3px 5px 9 | } 10 | /* 11 | 12 | Pojoaque Style by Jason Tate 13 | http://web-cms-designs.com/ftopict-10-pojoaque-style-for-highlight-js-code-highlighter.html 14 | Based on Solarized Style from http://ethanschoonover.com/solarized 15 | 16 | */ 17 | .hljs { 18 | color: #dccf8f; 19 | background: url(./pojoaque.jpg) repeat scroll left top #181914 20 | } 21 | .hljs-comment, 22 | .hljs-quote { 23 | color: #586e75; 24 | font-style: italic 25 | } 26 | .hljs-keyword, 27 | .hljs-selector-tag, 28 | .hljs-literal, 29 | .hljs-addition { 30 | color: #b64926 31 | } 32 | .hljs-number, 33 | .hljs-string, 34 | .hljs-doctag, 35 | .hljs-regexp { 36 | color: #468966 37 | } 38 | .hljs-title, 39 | .hljs-section, 40 | .hljs-built_in, 41 | .hljs-name { 42 | color: #ffb03b 43 | } 44 | .hljs-variable, 45 | .hljs-template-variable, 46 | .hljs-title.class_, 47 | .hljs-class .hljs-title, 48 | .hljs-type, 49 | .hljs-tag { 50 | color: #b58900 51 | } 52 | .hljs-attribute { 53 | color: #b89859 54 | } 55 | .hljs-symbol, 56 | .hljs-bullet, 57 | .hljs-link, 58 | .hljs-subst, 59 | .hljs-meta { 60 | color: #cb4b16 61 | } 62 | .hljs-deletion { 63 | color: #dc322f 64 | } 65 | .hljs-selector-id, 66 | .hljs-selector-class { 67 | color: #d3a60c 68 | } 69 | .hljs-formula { 70 | background: #073642 71 | } 72 | .hljs-emphasis { 73 | font-style: italic 74 | } 75 | .hljs-strong { 76 | font-weight: bold 77 | } 78 | } -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/code-theme/theme/purebasic.scss: -------------------------------------------------------------------------------- 1 | .code-theme-purebasic{ 2 | pre code.hljs { 3 | display: block; 4 | overflow-x: auto; 5 | padding: 1em 6 | } 7 | code.hljs { 8 | padding: 3px 5px 9 | } 10 | /* 11 | 12 | PureBASIC native IDE style ( version 1.0 - April 2016 ) 13 | 14 | by Tristano Ajmone 15 | 16 | Public Domain 17 | 18 | NOTE_1: PureBASIC code syntax highlighting only applies the following classes: 19 | .hljs-comment 20 | .hljs-function 21 | .hljs-keywords 22 | .hljs-string 23 | .hljs-symbol 24 | 25 | Other classes are added here for the benefit of styling other languages with the look and feel of PureBASIC native IDE style. 26 | If you need to customize a stylesheet for PureBASIC only, remove all non-relevant classes -- PureBASIC-related classes are followed by 27 | a "--- used for PureBASIC ... ---" comment on same line. 28 | 29 | NOTE_2: Color names provided in comments were derived using "Name that Color" online tool: 30 | http://chir.ag/projects/name-that-color 31 | */ 32 | .hljs { 33 | background: #FFFFDF/* Half and Half (approx.) */ 34 | 35 | } 36 | /* --- used for PureBASIC base color --- */ 37 | /* --- used for PureBASIC Procedures return type --- */ 38 | /* --- used for wrapping PureBASIC Procedures definitions --- */ 39 | .hljs, 40 | .hljs-type, 41 | .hljs-function, 42 | .hljs-name, 43 | .hljs-number, 44 | .hljs-attr, 45 | .hljs-params, 46 | .hljs-subst { 47 | color: #000000/* Black */ 48 | 49 | } 50 | /* --- used for PureBASIC Comments --- */ 51 | .hljs-comment, 52 | .hljs-regexp, 53 | .hljs-section, 54 | .hljs-selector-pseudo, 55 | .hljs-addition { 56 | color: #00AAAA/* Persian Green (approx.) */ 57 | 58 | } 59 | /* --- used for PureBASIC Keywords --- */ 60 | .hljs-keyword, 61 | .hljs-class, 62 | .hljs-meta .hljs-keyword, 63 | .hljs-selector-class, 64 | .hljs-built_in { 65 | color: #006666; 66 | /* Blue Stone (approx.) */ 67 | font-weight: bold 68 | } 69 | /* --- used for PureBASIC Procedures Names --- */ 70 | .hljs-title, 71 | .hljs-tag, 72 | .hljs-variable, 73 | .hljs-code { 74 | color: #006666/* Blue Stone (approx.) */ 75 | 76 | } 77 | /* --- used for PureBASIC Strings --- */ 78 | .hljs-string, 79 | .hljs-selector-attr { 80 | color: #0080FF/* Azure Radiance (approx.) */ 81 | 82 | } 83 | /* --- used for PureBASIC Constants --- */ 84 | .hljs-symbol, 85 | .hljs-link, 86 | .hljs-deletion, 87 | .hljs-attribute { 88 | color: #924B72/* Cannon Pink (approx.) */ 89 | 90 | } 91 | .hljs-meta, 92 | .hljs-literal, 93 | .hljs-selector-id { 94 | color: #924B72; 95 | /* Cannon Pink (approx.) */ 96 | font-weight: bold 97 | } 98 | .hljs-strong, 99 | .hljs-name { 100 | font-weight: bold 101 | } 102 | .hljs-emphasis { 103 | font-style: italic 104 | } 105 | } -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/code-theme/theme/qtcreator-dark.scss: -------------------------------------------------------------------------------- 1 | .code-theme-qtcreator-dark{ 2 | pre code.hljs { 3 | display: block; 4 | overflow-x: auto; 5 | padding: 1em 6 | } 7 | code.hljs { 8 | padding: 3px 5px 9 | } 10 | /* 11 | 12 | Qt Creator dark color scheme 13 | 14 | */ 15 | .hljs { 16 | color: #aaaaaa; 17 | background: #000000 18 | } 19 | .hljs-strong, 20 | .hljs-emphasis { 21 | color: #a8a8a2 22 | } 23 | .hljs-bullet, 24 | .hljs-quote, 25 | .hljs-number, 26 | .hljs-regexp, 27 | .hljs-literal { 28 | color: #ff55ff 29 | } 30 | .hljs-code 31 | .hljs-selector-class { 32 | color: #aaaaff 33 | } 34 | .hljs-emphasis, 35 | .hljs-stronge, 36 | .hljs-type { 37 | font-style: italic 38 | } 39 | .hljs-keyword, 40 | .hljs-selector-tag, 41 | .hljs-function, 42 | .hljs-section, 43 | .hljs-symbol, 44 | .hljs-name { 45 | color: #ffff55 46 | } 47 | .hljs-subst, 48 | .hljs-tag, 49 | .hljs-title { 50 | color: #aaaaaa 51 | } 52 | .hljs-attribute { 53 | color: #ff5555 54 | } 55 | .hljs-variable, 56 | .hljs-params, 57 | .hljs-title.class_, 58 | .hljs-class .hljs-title { 59 | color: #8888ff 60 | } 61 | .hljs-string, 62 | .hljs-selector-id, 63 | .hljs-selector-attr, 64 | .hljs-selector-pseudo, 65 | .hljs-type, 66 | .hljs-built_in, 67 | .hljs-template-tag, 68 | .hljs-template-variable, 69 | .hljs-addition, 70 | .hljs-link { 71 | color: #ff55ff 72 | } 73 | .hljs-comment, 74 | .hljs-meta, 75 | .hljs-deletion { 76 | color: #55ffff 77 | } 78 | } -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/code-theme/theme/qtcreator-light.scss: -------------------------------------------------------------------------------- 1 | .code-theme-qtcreator-light{ 2 | pre code.hljs { 3 | display: block; 4 | overflow-x: auto; 5 | padding: 1em 6 | } 7 | code.hljs { 8 | padding: 3px 5px 9 | } 10 | /* 11 | Qt Creator light color scheme 12 | */ 13 | .hljs { 14 | color: #000000; 15 | background: #ffffff 16 | } 17 | .hljs-strong, 18 | .hljs-emphasis { 19 | color: #000000 20 | } 21 | .hljs-bullet, 22 | .hljs-quote, 23 | .hljs-number, 24 | .hljs-regexp, 25 | .hljs-literal { 26 | color: #000080 27 | } 28 | .hljs-code 29 | .hljs-selector-class { 30 | color: #800080 31 | } 32 | .hljs-emphasis, 33 | .hljs-stronge, 34 | .hljs-type { 35 | font-style: italic 36 | } 37 | .hljs-keyword, 38 | .hljs-selector-tag, 39 | .hljs-function, 40 | .hljs-section, 41 | .hljs-symbol, 42 | .hljs-name { 43 | color: #808000 44 | } 45 | .hljs-subst, 46 | .hljs-tag, 47 | .hljs-title { 48 | color: #000000 49 | } 50 | .hljs-attribute { 51 | color: #800000 52 | } 53 | .hljs-variable, 54 | .hljs-params, 55 | .hljs-title.class_, 56 | .hljs-class .hljs-title { 57 | color: #0055AF 58 | } 59 | .hljs-string, 60 | .hljs-selector-id, 61 | .hljs-selector-attr, 62 | .hljs-selector-pseudo, 63 | .hljs-type, 64 | .hljs-built_in, 65 | .hljs-template-tag, 66 | .hljs-template-variable, 67 | .hljs-addition, 68 | .hljs-link { 69 | color: #008000 70 | } 71 | .hljs-comment, 72 | .hljs-meta, 73 | .hljs-deletion { 74 | color: #008000 75 | } 76 | } -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/code-theme/theme/rainbow.scss: -------------------------------------------------------------------------------- 1 | .code-theme-rainbow{ 2 | pre code.hljs { 3 | display: block; 4 | overflow-x: auto; 5 | padding: 1em 6 | } 7 | code.hljs { 8 | padding: 3px 5px 9 | } 10 | /* 11 | 12 | Style with support for rainbow parens 13 | 14 | */ 15 | .hljs { 16 | background: #474949; 17 | color: #d1d9e1 18 | } 19 | .hljs-comment, 20 | .hljs-quote { 21 | color: #969896; 22 | font-style: italic 23 | } 24 | .hljs-keyword, 25 | .hljs-selector-tag, 26 | .hljs-literal, 27 | .hljs-type, 28 | .hljs-addition { 29 | color: #cc99cc 30 | } 31 | .hljs-number, 32 | .hljs-selector-attr, 33 | .hljs-selector-pseudo { 34 | color: #f99157 35 | } 36 | .hljs-string, 37 | .hljs-doctag, 38 | .hljs-regexp { 39 | color: #8abeb7 40 | } 41 | .hljs-title, 42 | .hljs-name, 43 | .hljs-section, 44 | .hljs-built_in { 45 | color: #b5bd68 46 | } 47 | .hljs-variable, 48 | .hljs-template-variable, 49 | .hljs-selector-id, 50 | .hljs-title.class_, 51 | .hljs-class .hljs-title { 52 | color: #ffcc66 53 | } 54 | .hljs-section, 55 | .hljs-name, 56 | .hljs-strong { 57 | font-weight: bold 58 | } 59 | .hljs-symbol, 60 | .hljs-bullet, 61 | .hljs-subst, 62 | .hljs-meta, 63 | .hljs-link { 64 | color: #f99157 65 | } 66 | .hljs-deletion { 67 | color: #dc322f 68 | } 69 | .hljs-formula { 70 | background: #eee8d5 71 | } 72 | .hljs-attr, 73 | .hljs-attribute { 74 | color: #81a2be 75 | } 76 | .hljs-emphasis { 77 | font-style: italic 78 | } 79 | } -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/code-theme/theme/routeros.scss: -------------------------------------------------------------------------------- 1 | .code-theme-routeros{ 2 | pre code.hljs { 3 | display: block; 4 | overflow-x: auto; 5 | padding: 1em 6 | } 7 | code.hljs { 8 | padding: 3px 5px 9 | } 10 | /* 11 | 12 | highlight.js style for MikroTik RouterOS script 13 | 14 | */ 15 | .hljs { 16 | color: #444; 17 | background: #F0F0F0 18 | } 19 | /* Base color: saturation 0; */ 20 | .hljs-subst { 21 | color: #444 22 | } 23 | .hljs-comment { 24 | color: #888888 25 | } 26 | .hljs-keyword, 27 | .hljs-selector-tag, 28 | .hljs-meta .hljs-keyword, 29 | .hljs-doctag, 30 | .hljs-name { 31 | font-weight: bold 32 | } 33 | .hljs-attribute { 34 | color: #0E9A00 35 | } 36 | .hljs-function { 37 | color: #99069A 38 | } 39 | /* User color: hue: 0 */ 40 | .hljs-type, 41 | .hljs-string, 42 | .hljs-number, 43 | .hljs-selector-id, 44 | .hljs-selector-class, 45 | .hljs-quote, 46 | .hljs-template-tag, 47 | .hljs-deletion { 48 | color: #880000 49 | } 50 | .hljs-title, 51 | .hljs-section { 52 | color: #880000; 53 | font-weight: bold 54 | } 55 | .hljs-regexp, 56 | .hljs-symbol, 57 | .hljs-variable, 58 | .hljs-template-variable, 59 | .hljs-link, 60 | .hljs-selector-attr, 61 | .hljs-selector-pseudo { 62 | color: #BC6060 63 | } 64 | /* Language color: hue: 90; */ 65 | .hljs-literal { 66 | color: #78A960 67 | } 68 | .hljs-built_in, 69 | .hljs-bullet, 70 | .hljs-code, 71 | .hljs-addition { 72 | color: #0C9A9A 73 | } 74 | /* Meta color: hue: 200 */ 75 | .hljs-meta { 76 | color: #1f7199 77 | } 78 | .hljs-meta .hljs-string { 79 | color: #4d99bf 80 | } 81 | /* Misc effects */ 82 | .hljs-emphasis { 83 | font-style: italic 84 | } 85 | .hljs-strong { 86 | font-weight: bold 87 | } 88 | } -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/code-theme/theme/school-book.scss: -------------------------------------------------------------------------------- 1 | .code-theme-school-book{ 2 | pre code.hljs { 3 | display: block; 4 | overflow-x: auto; 5 | padding: 1em 6 | } 7 | code.hljs { 8 | padding: 3px 5px 9 | } 10 | /* 11 | 12 | School Book style from goldblog.com.ua (c) Zaripov Yura 13 | 14 | */ 15 | .hljs { 16 | color: #3e5915; 17 | background: #f6f5b2 18 | } 19 | .hljs-keyword, 20 | .hljs-selector-tag, 21 | .hljs-literal { 22 | color: #005599; 23 | font-weight: bold 24 | } 25 | .hljs-subst { 26 | color: #3e5915 27 | } 28 | .hljs-string, 29 | .hljs-title, 30 | .hljs-section, 31 | .hljs-type, 32 | .hljs-symbol, 33 | .hljs-bullet, 34 | .hljs-attribute, 35 | .hljs-built_in, 36 | .hljs-addition, 37 | .hljs-variable, 38 | .hljs-template-tag, 39 | .hljs-template-variable, 40 | .hljs-link { 41 | color: #2c009f 42 | } 43 | .hljs-comment, 44 | .hljs-quote, 45 | .hljs-deletion, 46 | .hljs-meta { 47 | color: #e60415 48 | } 49 | .hljs-keyword, 50 | .hljs-selector-tag, 51 | .hljs-literal, 52 | .hljs-doctag, 53 | .hljs-title, 54 | .hljs-section, 55 | .hljs-type, 56 | .hljs-name, 57 | .hljs-selector-id, 58 | .hljs-strong { 59 | font-weight: bold 60 | } 61 | .hljs-emphasis { 62 | font-style: italic 63 | } 64 | } -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/code-theme/theme/shades-of-purple.scss: -------------------------------------------------------------------------------- 1 | .code-theme-shades-of-purple{ 2 | pre code.hljs { 3 | display: block; 4 | overflow-x: auto; 5 | padding: 1em 6 | } 7 | code.hljs { 8 | padding: 3px 5px 9 | } 10 | /** 11 | * Shades of Purple Theme — for Highlightjs. 12 | * 13 | * @author (c) Ahmad Awais 14 | * @link GitHub Repo → https://github.com/ahmadawais/Shades-of-Purple-HighlightJS 15 | * @version 1.5.0 16 | */ 17 | .hljs { 18 | background: #2d2b57; 19 | color: #e3dfff; 20 | font-weight: normal 21 | } 22 | .hljs-subst { 23 | color: #e3dfff 24 | } 25 | .hljs-title { 26 | color: #fad000; 27 | font-weight: normal 28 | } 29 | .hljs-name { 30 | color: #a1feff 31 | } 32 | .hljs-tag { 33 | color: #ffffff 34 | } 35 | .hljs-attr { 36 | color: #f8d000; 37 | font-style: italic 38 | } 39 | .hljs-built_in, 40 | .hljs-selector-tag, 41 | .hljs-section { 42 | color: #fb9e00 43 | } 44 | .hljs-keyword { 45 | color: #fb9e00 46 | } 47 | .hljs-string, 48 | .hljs-attribute, 49 | .hljs-symbol, 50 | .hljs-bullet, 51 | .hljs-addition, 52 | .hljs-code, 53 | .hljs-regexp, 54 | .hljs-selector-class, 55 | .hljs-selector-attr, 56 | .hljs-selector-pseudo, 57 | .hljs-template-tag, 58 | .hljs-quote, 59 | .hljs-deletion { 60 | color: #4cd213 61 | } 62 | .hljs-meta, 63 | .hljs-meta .hljs-string { 64 | color: #fb9e00 65 | } 66 | .hljs-comment { 67 | color: #ac65ff 68 | } 69 | .hljs-keyword, 70 | .hljs-selector-tag, 71 | .hljs-literal, 72 | .hljs-name, 73 | .hljs-strong { 74 | font-weight: normal 75 | } 76 | .hljs-literal, 77 | .hljs-number { 78 | color: #fa658d 79 | } 80 | .hljs-emphasis { 81 | font-style: italic 82 | } 83 | .hljs-strong { 84 | font-weight: bold 85 | } 86 | } -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/code-theme/theme/srcery.scss: -------------------------------------------------------------------------------- 1 | .code-theme-srcery{ 2 | pre code.hljs { 3 | display: block; 4 | overflow-x: auto; 5 | padding: 1em 6 | } 7 | code.hljs { 8 | padding: 3px 5px 9 | } 10 | /* 11 | Theme: Srcery 12 | Description: Srcery dark color scheme for highlight.js 13 | Author: Chen Bin 14 | Maintainer: @redguardtoo 15 | Website: https://srcery-colors.github.io/ 16 | Date: 2021-04-13 17 | */ 18 | .hljs { 19 | background: #1C1B19; 20 | /* Black */ 21 | color: #FCE8C3/* Bright White */ 22 | 23 | } 24 | /* Bright White */ 25 | .hljs-subst, 26 | .hljs-quote, 27 | .hljs-literal { 28 | color: #FCE8C3 29 | } 30 | /* Bright Blue */ 31 | .hljs-type, 32 | .hljs-symbol { 33 | color: #68A8E4 34 | } 35 | /* Red */ 36 | .hljs-keyword, 37 | .hljs-deletion { 38 | color: #EF2F27 39 | } 40 | /* Yellow */ 41 | .hljs-name, 42 | .hljs-function, 43 | .hljs-attribute, 44 | .hljs-selector-attr, 45 | .hljs-selector-id, 46 | .hljs-selector-class, 47 | .hljs-selector-pseudo, 48 | .hljs-section, 49 | .hljs-title { 50 | color: #FBB829 51 | } 52 | /* Cyan */ 53 | .hljs-code, 54 | .hljs-variable, 55 | .hljs-property, 56 | .hljs-template-variable, 57 | .hljs-class { 58 | color: #0AAEB3 59 | } 60 | /* Bright Green */ 61 | .hljs-string, 62 | .hljs-regexp, 63 | .hljs-bullet, 64 | .hljs-addition { 65 | color: #98BC37 66 | } 67 | /* Bright Magenta */ 68 | .hljs-built_in, 69 | .hljs-params { 70 | color: #FF5C8F 71 | } 72 | /* Blue */ 73 | .hljs-template-tag, 74 | .hljs-selector-tag { 75 | color: #2C78BF 76 | } 77 | /* Bright Black */ 78 | .hljs-link, 79 | .hljs-number, 80 | .hljs-comment, 81 | .hljs-meta { 82 | color: #918175 83 | } 84 | .hljs-emphasis { 85 | font-style: italic 86 | } 87 | .hljs-strong { 88 | font-weight: bold 89 | } 90 | /* @see https://github.com/srcery-colors/srcery-emacs for reference */ 91 | 92 | } -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/code-theme/theme/stackoverflow-dark.scss: -------------------------------------------------------------------------------- 1 | .code-theme-stackoverflow-dark{ 2 | pre code.hljs { 3 | display: block; 4 | overflow-x: auto; 5 | padding: 1em 6 | } 7 | code.hljs { 8 | padding: 3px 5px 9 | } 10 | /*! 11 | Theme: StackOverflow Dark 12 | Description: Dark theme as used on stackoverflow.com 13 | Author: stackoverflow.com 14 | Maintainer: @Hirse 15 | Website: https://github.com/StackExchange/Stacks 16 | License: MIT 17 | Updated: 2021-05-15 18 | 19 | Updated for @stackoverflow/stacks v0.64.0 20 | Code Blocks: /blob/v0.64.0/lib/css/components/_stacks-code-blocks.less 21 | Colors: /blob/v0.64.0/lib/css/exports/_stacks-constants-colors.less 22 | */ 23 | .hljs { 24 | /* var(--highlight-color) */ 25 | color: #ffffff; 26 | /* var(--highlight-bg) */ 27 | background: #1c1b1b 28 | } 29 | .hljs-subst { 30 | /* var(--highlight-color) */ 31 | color: #ffffff 32 | } 33 | .hljs-comment { 34 | /* var(--highlight-comment) */ 35 | color: #999999 36 | } 37 | .hljs-keyword, 38 | .hljs-selector-tag, 39 | .hljs-meta .hljs-keyword, 40 | .hljs-doctag, 41 | .hljs-section { 42 | /* var(--highlight-keyword) */ 43 | color: #88aece 44 | } 45 | .hljs-attr { 46 | /* var(--highlight-attribute); */ 47 | color: #88aece 48 | } 49 | .hljs-attribute { 50 | /* var(--highlight-symbol) */ 51 | color: #c59bc1 52 | } 53 | .hljs-name, 54 | .hljs-type, 55 | .hljs-number, 56 | .hljs-selector-id, 57 | .hljs-quote, 58 | .hljs-template-tag { 59 | /* var(--highlight-namespace) */ 60 | color: #f08d49 61 | } 62 | .hljs-selector-class { 63 | /* var(--highlight-keyword) */ 64 | color: #88aece 65 | } 66 | .hljs-string, 67 | .hljs-regexp, 68 | .hljs-symbol, 69 | .hljs-variable, 70 | .hljs-template-variable, 71 | .hljs-link, 72 | .hljs-selector-attr { 73 | /* var(--highlight-variable) */ 74 | color: #b5bd68 75 | } 76 | .hljs-meta, 77 | .hljs-selector-pseudo { 78 | /* var(--highlight-keyword) */ 79 | color: #88aece 80 | } 81 | .hljs-built_in, 82 | .hljs-title, 83 | .hljs-literal { 84 | /* var(--highlight-literal) */ 85 | color: #f08d49 86 | } 87 | .hljs-bullet, 88 | .hljs-code { 89 | /* var(--highlight-punctuation) */ 90 | color: #cccccc 91 | } 92 | .hljs-meta .hljs-string { 93 | /* var(--highlight-variable) */ 94 | color: #b5bd68 95 | } 96 | .hljs-deletion { 97 | /* var(--highlight-deletion) */ 98 | color: #de7176 99 | } 100 | .hljs-addition { 101 | /* var(--highlight-addition) */ 102 | color: #76c490 103 | } 104 | .hljs-emphasis { 105 | font-style: italic 106 | } 107 | .hljs-strong { 108 | font-weight: bold 109 | } 110 | .hljs-formula, 111 | .hljs-operator, 112 | .hljs-params, 113 | .hljs-property, 114 | .hljs-punctuation, 115 | .hljs-tag { 116 | /* purposely ignored */ 117 | 118 | } 119 | } -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/code-theme/theme/stackoverflow-light.scss: -------------------------------------------------------------------------------- 1 | .code-theme-stackoverflow-light{ 2 | pre code.hljs { 3 | display: block; 4 | overflow-x: auto; 5 | padding: 1em 6 | } 7 | code.hljs { 8 | padding: 3px 5px 9 | } 10 | /*! 11 | Theme: StackOverflow Light 12 | Description: Light theme as used on stackoverflow.com 13 | Author: stackoverflow.com 14 | Maintainer: @Hirse 15 | Website: https://github.com/StackExchange/Stacks 16 | License: MIT 17 | Updated: 2021-05-15 18 | 19 | Updated for @stackoverflow/stacks v0.64.0 20 | Code Blocks: /blob/v0.64.0/lib/css/components/_stacks-code-blocks.less 21 | Colors: /blob/v0.64.0/lib/css/exports/_stacks-constants-colors.less 22 | */ 23 | .hljs { 24 | /* var(--highlight-color) */ 25 | color: #2f3337; 26 | /* var(--highlight-bg) */ 27 | background: #f6f6f6 28 | } 29 | .hljs-subst { 30 | /* var(--highlight-color) */ 31 | color: #2f3337 32 | } 33 | .hljs-comment { 34 | /* var(--highlight-comment) */ 35 | color: #656e77 36 | } 37 | .hljs-keyword, 38 | .hljs-selector-tag, 39 | .hljs-meta .hljs-keyword, 40 | .hljs-doctag, 41 | .hljs-section { 42 | /* var(--highlight-keyword) */ 43 | color: #015692 44 | } 45 | .hljs-attr { 46 | /* var(--highlight-attribute); */ 47 | color: #015692 48 | } 49 | .hljs-attribute { 50 | /* var(--highlight-symbol) */ 51 | color: #803378 52 | } 53 | .hljs-name, 54 | .hljs-type, 55 | .hljs-number, 56 | .hljs-selector-id, 57 | .hljs-quote, 58 | .hljs-template-tag { 59 | /* var(--highlight-namespace) */ 60 | color: #b75501 61 | } 62 | .hljs-selector-class { 63 | /* var(--highlight-keyword) */ 64 | color: #015692 65 | } 66 | .hljs-string, 67 | .hljs-regexp, 68 | .hljs-symbol, 69 | .hljs-variable, 70 | .hljs-template-variable, 71 | .hljs-link, 72 | .hljs-selector-attr { 73 | /* var(--highlight-variable) */ 74 | color: #54790d 75 | } 76 | .hljs-meta, 77 | .hljs-selector-pseudo { 78 | /* var(--highlight-keyword) */ 79 | color: #015692 80 | } 81 | .hljs-built_in, 82 | .hljs-title, 83 | .hljs-literal { 84 | /* var(--highlight-literal) */ 85 | color: #b75501 86 | } 87 | .hljs-bullet, 88 | .hljs-code { 89 | /* var(--highlight-punctuation) */ 90 | color: #535a60 91 | } 92 | .hljs-meta .hljs-string { 93 | /* var(--highlight-variable) */ 94 | color: #54790d 95 | } 96 | .hljs-deletion { 97 | /* var(--highlight-deletion) */ 98 | color: #c02d2e 99 | } 100 | .hljs-addition { 101 | /* var(--highlight-addition) */ 102 | color: #2f6f44 103 | } 104 | .hljs-emphasis { 105 | font-style: italic 106 | } 107 | .hljs-strong { 108 | font-weight: bold 109 | } 110 | .hljs-formula, 111 | .hljs-operator, 112 | .hljs-params, 113 | .hljs-property, 114 | .hljs-punctuation, 115 | .hljs-tag { 116 | /* purposely ignored */ 117 | 118 | } 119 | } -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/code-theme/theme/sunburst.scss: -------------------------------------------------------------------------------- 1 | .code-theme-sunburst{ 2 | pre code.hljs { 3 | display: block; 4 | overflow-x: auto; 5 | padding: 1em 6 | } 7 | code.hljs { 8 | padding: 3px 5px 9 | } 10 | /* 11 | 12 | Sunburst-like style (c) Vasily Polovnyov 13 | 14 | */ 15 | .hljs { 16 | background: #000; 17 | color: #f8f8f8 18 | } 19 | .hljs-comment, 20 | .hljs-quote { 21 | color: #aeaeae; 22 | font-style: italic 23 | } 24 | .hljs-keyword, 25 | .hljs-selector-tag, 26 | .hljs-type { 27 | color: #e28964 28 | } 29 | .hljs-string { 30 | color: #65b042 31 | } 32 | .hljs-subst { 33 | color: #daefa3 34 | } 35 | .hljs-regexp, 36 | .hljs-link { 37 | color: #e9c062 38 | } 39 | .hljs-title, 40 | .hljs-section, 41 | .hljs-tag, 42 | .hljs-name { 43 | color: #89bdff 44 | } 45 | .hljs-title.class_, 46 | .hljs-class .hljs-title, 47 | .hljs-doctag { 48 | text-decoration: underline 49 | } 50 | .hljs-symbol, 51 | .hljs-bullet, 52 | .hljs-number { 53 | color: #3387cc 54 | } 55 | .hljs-params, 56 | .hljs-variable, 57 | .hljs-template-variable { 58 | color: #3e87e3 59 | } 60 | .hljs-attribute { 61 | color: #cda869 62 | } 63 | .hljs-meta { 64 | color: #8996a8 65 | } 66 | .hljs-formula { 67 | background-color: #0e2231; 68 | color: #f8f8f8; 69 | font-style: italic 70 | } 71 | .hljs-addition { 72 | background-color: #253b22; 73 | color: #f8f8f8 74 | } 75 | .hljs-deletion { 76 | background-color: #420e09; 77 | color: #f8f8f8 78 | } 79 | .hljs-selector-class { 80 | color: #9b703f 81 | } 82 | .hljs-selector-id { 83 | color: #8b98ab 84 | } 85 | .hljs-emphasis { 86 | font-style: italic 87 | } 88 | .hljs-strong { 89 | font-weight: bold 90 | } 91 | } -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/code-theme/theme/tokyo-night-dark.scss: -------------------------------------------------------------------------------- 1 | .code-theme-tokyo-night-dark{ 2 | pre code.hljs { 3 | display: block; 4 | overflow-x: auto; 5 | padding: 1em 6 | } 7 | code.hljs { 8 | padding: 3px 5px 9 | } 10 | /*! 11 | Theme: Tokyo-night-Dark 12 | origin: https://github.com/enkia/tokyo-night-vscode-theme 13 | Description: Original highlight.js style 14 | Author: (c) Henri Vandersleyen 15 | License: see project LICENSE 16 | Touched: 2022 17 | */ 18 | /* Comment */ 19 | .hljs-meta, 20 | .hljs-comment { 21 | color: #565f89 22 | } 23 | /* Red */ 24 | /*INFO: This keyword, HTML elements, Regex group symbol, CSS units, Terminal Red */ 25 | .hljs-tag, 26 | .hljs-doctag, 27 | .hljs-selector-id, 28 | .hljs-selector-class, 29 | .hljs-regexp, 30 | .hljs-template-tag, 31 | .hljs-selector-pseudo, 32 | .hljs-selector-attr, 33 | .hljs-variable.language_, 34 | .hljs-deletion { 35 | color: #f7768e 36 | } 37 | /*Orange */ 38 | /*INFO: Number and Boolean constants, Language support constants */ 39 | .hljs-variable, 40 | .hljs-template-variable, 41 | .hljs-number, 42 | .hljs-literal, 43 | .hljs-type, 44 | .hljs-params, 45 | .hljs-link { 46 | color: #ff9e64 47 | } 48 | /* Yellow */ 49 | /* INFO: Function parameters, Regex character sets, Terminal Yellow */ 50 | .hljs-built_in, 51 | .hljs-attribute { 52 | color: #e0af68 53 | } 54 | /* cyan */ 55 | /* INFO: Language support functions, CSS HTML elements */ 56 | .hljs-selector-tag { 57 | color: #2ac3de 58 | } 59 | /* light blue */ 60 | /* INFO: Object properties, Regex quantifiers and flags, Markdown headings, Terminal Cyan, Markdown code, Import/export keywords */ 61 | .hljs-keyword, 62 | .hljs-title.function_, 63 | .hljs-title, 64 | .hljs-title.class_, 65 | .hljs-title.class_.inherited__, 66 | .hljs-subst, 67 | .hljs-property { 68 | color: #7dcfff 69 | } 70 | /*Green*/ 71 | /* INFO: Object literal keys, Markdown links, Terminal Green */ 72 | .hljs-selector-tag { 73 | color: #73daca 74 | } 75 | /*Green(er) */ 76 | /* INFO: Strings, CSS class names */ 77 | .hljs-quote, 78 | .hljs-string, 79 | .hljs-symbol, 80 | .hljs-bullet, 81 | .hljs-addition { 82 | color: #9ece6a 83 | } 84 | /* Blue */ 85 | /* INFO: Function names, CSS property names, Terminal Blue */ 86 | .hljs-code, 87 | .hljs-formula, 88 | .hljs-section { 89 | color: #7aa2f7 90 | } 91 | /* Magenta */ 92 | /*INFO: Control Keywords, Storage Types, Regex symbols and operators, HTML Attributes, Terminal Magenta */ 93 | .hljs-name, 94 | .hljs-keyword, 95 | .hljs-operator, 96 | .hljs-keyword, 97 | .hljs-char.escape_, 98 | .hljs-attr { 99 | color: #bb9af7 100 | } 101 | /* white*/ 102 | /* INFO: Variables, Class names, Terminal White */ 103 | .hljs-punctuation { 104 | color: #c0caf5 105 | } 106 | .hljs { 107 | background: #1a1b26; 108 | color: #9aa5ce 109 | } 110 | .hljs-emphasis { 111 | font-style: italic 112 | } 113 | .hljs-strong { 114 | font-weight: bold 115 | } 116 | } -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/code-theme/theme/tokyo-night-light.scss: -------------------------------------------------------------------------------- 1 | .code-theme-tokyo-night-light{ 2 | pre code.hljs { 3 | display: block; 4 | overflow-x: auto; 5 | padding: 1em 6 | } 7 | code.hljs { 8 | padding: 3px 5px 9 | } 10 | /*! 11 | Theme: Tokyo-night-light 12 | origin: https://github.com/enkia/tokyo-night-vscode-theme 13 | Description: Original highlight.js style 14 | Author: (c) Henri Vandersleyen 15 | License: see project LICENSE 16 | Touched: 2022 17 | */ 18 | /* Comment */ 19 | .hljs-meta, 20 | .hljs-comment { 21 | color: #9699a3 22 | } 23 | /* Red */ 24 | /*INFO: This keyword, HTML elements, Regex group symbol, CSS units, Terminal Red */ 25 | .hljs-tag, 26 | .hljs-doctag, 27 | .hljs-selector-id, 28 | .hljs-selector-class, 29 | .hljs-regexp, 30 | .hljs-template-tag, 31 | .hljs-selector-pseudo, 32 | .hljs-selector-attr, 33 | .hljs-variable.language_, 34 | .hljs-deletion { 35 | color: #8c4351 36 | } 37 | /*Orange */ 38 | /*INFO: Number and Boolean constants, Language support constants */ 39 | .hljs-variable, 40 | .hljs-template-variable, 41 | .hljs-number, 42 | .hljs-literal, 43 | .hljs-type, 44 | .hljs-params, 45 | .hljs-link { 46 | color: #965027 47 | } 48 | /* Yellow */ 49 | /* INFO: Function parameters, Regex character sets, Terminal Yellow */ 50 | .hljs-built_in, 51 | .hljs-attribute { 52 | color: #8f5e15 53 | } 54 | /* cyan */ 55 | /* INFO: Language support functions, CSS HTML elements */ 56 | .hljs-selector-tag { 57 | color: #166775 58 | } 59 | /* light blue */ 60 | /* INFO: Object properties, Regex quantifiers and flags, Markdown headings, Terminal Cyan, Markdown code, Import/export keywords */ 61 | .hljs-keyword, 62 | .hljs-title.function_, 63 | .hljs-title, 64 | .hljs-title.class_, 65 | .hljs-title.class_.inherited__, 66 | .hljs-subst, 67 | .hljs-property { 68 | color: #0f4b6e 69 | } 70 | /*Green*/ 71 | /* INFO: Object literal keys, Markdown links, Terminal Green */ 72 | .hljs-selector-tag { 73 | color: #33635c 74 | } 75 | /*Green(er) */ 76 | /* INFO: Strings, CSS class names */ 77 | .hljs-quote, 78 | .hljs-string, 79 | .hljs-symbol, 80 | .hljs-bullet, 81 | .hljs-addition { 82 | color: #485e30 83 | } 84 | /* Blue */ 85 | /* INFO: Function names, CSS property names, Terminal Blue */ 86 | .hljs-code, 87 | .hljs-formula, 88 | .hljs-section { 89 | color: #34548a 90 | } 91 | /* Magenta */ 92 | /*INFO: Control Keywords, Storage Types, Regex symbols and operators, HTML Attributes, Terminal Magenta */ 93 | .hljs-name, 94 | .hljs-keyword, 95 | .hljs-operator, 96 | .hljs-keyword, 97 | .hljs-char.escape_, 98 | .hljs-attr { 99 | color: #5a4a78 100 | } 101 | /* white*/ 102 | /* INFO: Variables, Class names, Terminal White */ 103 | .hljs-punctuation { 104 | color: #343b58 105 | } 106 | .hljs { 107 | background: #d5d6db; 108 | color: #565a6e 109 | } 110 | .hljs-emphasis { 111 | font-style: italic 112 | } 113 | .hljs-strong { 114 | font-weight: bold 115 | } 116 | } -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/code-theme/theme/tomorrow-night-blue.scss: -------------------------------------------------------------------------------- 1 | .code-theme-tomorrow-night-blue{ 2 | pre code.hljs { 3 | display: block; 4 | overflow-x: auto; 5 | padding: 1em 6 | } 7 | code.hljs { 8 | padding: 3px 5px 9 | } 10 | /* Tomorrow Night Blue Theme */ 11 | /* http://jmblog.github.com/color-themes-for-google-code-highlightjs */ 12 | /* Original theme - https://github.com/chriskempson/tomorrow-theme */ 13 | /* http://jmblog.github.com/color-themes-for-google-code-highlightjs */ 14 | /* Tomorrow Comment */ 15 | .hljs-comment, 16 | .hljs-quote { 17 | color: #7285b7 18 | } 19 | /* Tomorrow Red */ 20 | .hljs-variable, 21 | .hljs-template-variable, 22 | .hljs-tag, 23 | .hljs-name, 24 | .hljs-selector-id, 25 | .hljs-selector-class, 26 | .hljs-regexp, 27 | .hljs-deletion { 28 | color: #ff9da4 29 | } 30 | /* Tomorrow Orange */ 31 | .hljs-number, 32 | .hljs-built_in, 33 | .hljs-literal, 34 | .hljs-type, 35 | .hljs-params, 36 | .hljs-meta, 37 | .hljs-link { 38 | color: #ffc58f 39 | } 40 | /* Tomorrow Yellow */ 41 | .hljs-attribute { 42 | color: #ffeead 43 | } 44 | /* Tomorrow Green */ 45 | .hljs-string, 46 | .hljs-symbol, 47 | .hljs-bullet, 48 | .hljs-addition { 49 | color: #d1f1a9 50 | } 51 | /* Tomorrow Blue */ 52 | .hljs-title, 53 | .hljs-section { 54 | color: #bbdaff 55 | } 56 | /* Tomorrow Purple */ 57 | .hljs-keyword, 58 | .hljs-selector-tag { 59 | color: #ebbbff 60 | } 61 | .hljs { 62 | background: #002451; 63 | color: white 64 | } 65 | .hljs-emphasis { 66 | font-style: italic 67 | } 68 | .hljs-strong { 69 | font-weight: bold 70 | } 71 | } -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/code-theme/theme/tomorrow-night-bright.scss: -------------------------------------------------------------------------------- 1 | .code-theme-tomorrow-night-bright{ 2 | pre code.hljs { 3 | display: block; 4 | overflow-x: auto; 5 | padding: 1em 6 | } 7 | code.hljs { 8 | padding: 3px 5px 9 | } 10 | /* Tomorrow Night Bright Theme */ 11 | /* Original theme - https://github.com/chriskempson/tomorrow-theme */ 12 | /* http://jmblog.github.com/color-themes-for-google-code-highlightjs */ 13 | /* Tomorrow Comment */ 14 | .hljs-comment, 15 | .hljs-quote { 16 | color: #969896 17 | } 18 | /* Tomorrow Red */ 19 | .hljs-variable, 20 | .hljs-template-variable, 21 | .hljs-tag, 22 | .hljs-name, 23 | .hljs-selector-id, 24 | .hljs-selector-class, 25 | .hljs-regexp, 26 | .hljs-deletion { 27 | color: #d54e53 28 | } 29 | /* Tomorrow Orange */ 30 | .hljs-number, 31 | .hljs-built_in, 32 | .hljs-literal, 33 | .hljs-type, 34 | .hljs-params, 35 | .hljs-meta, 36 | .hljs-link { 37 | color: #e78c45 38 | } 39 | /* Tomorrow Yellow */ 40 | .hljs-attribute { 41 | color: #e7c547 42 | } 43 | /* Tomorrow Green */ 44 | .hljs-string, 45 | .hljs-symbol, 46 | .hljs-bullet, 47 | .hljs-addition { 48 | color: #b9ca4a 49 | } 50 | /* Tomorrow Blue */ 51 | .hljs-title, 52 | .hljs-section { 53 | color: #7aa6da 54 | } 55 | /* Tomorrow Purple */ 56 | .hljs-keyword, 57 | .hljs-selector-tag { 58 | color: #c397d8 59 | } 60 | .hljs { 61 | background: black; 62 | color: #eaeaea 63 | } 64 | .hljs-emphasis { 65 | font-style: italic 66 | } 67 | .hljs-strong { 68 | font-weight: bold 69 | } 70 | } -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/code-theme/theme/vs.scss: -------------------------------------------------------------------------------- 1 | .code-theme-vs{ 2 | pre code.hljs { 3 | display: block; 4 | overflow-x: auto; 5 | padding: 1em 6 | } 7 | code.hljs { 8 | padding: 3px 5px 9 | } 10 | /* 11 | 12 | Visual Studio-like style based on original C# coloring by Jason Diamond 13 | 14 | */ 15 | .hljs { 16 | background: white; 17 | color: black 18 | } 19 | .hljs-comment, 20 | .hljs-quote, 21 | .hljs-variable { 22 | color: #008000 23 | } 24 | .hljs-keyword, 25 | .hljs-selector-tag, 26 | .hljs-built_in, 27 | .hljs-name, 28 | .hljs-tag { 29 | color: #00f 30 | } 31 | .hljs-string, 32 | .hljs-title, 33 | .hljs-section, 34 | .hljs-attribute, 35 | .hljs-literal, 36 | .hljs-template-tag, 37 | .hljs-template-variable, 38 | .hljs-type, 39 | .hljs-addition { 40 | color: #a31515 41 | } 42 | .hljs-deletion, 43 | .hljs-selector-attr, 44 | .hljs-selector-pseudo, 45 | .hljs-meta { 46 | color: #2b91af 47 | } 48 | .hljs-doctag { 49 | color: #808080 50 | } 51 | .hljs-attr { 52 | color: #f00 53 | } 54 | .hljs-symbol, 55 | .hljs-bullet, 56 | .hljs-link { 57 | color: #00b0e8 58 | } 59 | .hljs-emphasis { 60 | font-style: italic 61 | } 62 | .hljs-strong { 63 | font-weight: bold 64 | } 65 | } -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/code-theme/theme/vs2015.scss: -------------------------------------------------------------------------------- 1 | .code-theme-vs2015{ 2 | pre code.hljs { 3 | display: block; 4 | overflow-x: auto; 5 | padding: 1em 6 | } 7 | code.hljs { 8 | padding: 3px 5px 9 | } 10 | /* 11 | * Visual Studio 2015 dark style 12 | * Author: Nicolas LLOBERA 13 | */ 14 | .hljs { 15 | background: #1E1E1E; 16 | color: #DCDCDC 17 | } 18 | .hljs-keyword, 19 | .hljs-literal, 20 | .hljs-symbol, 21 | .hljs-name { 22 | color: #569CD6 23 | } 24 | .hljs-link { 25 | color: #569CD6; 26 | text-decoration: underline 27 | } 28 | .hljs-built_in, 29 | .hljs-type { 30 | color: #4EC9B0 31 | } 32 | .hljs-number, 33 | .hljs-class { 34 | color: #B8D7A3 35 | } 36 | .hljs-string, 37 | .hljs-meta .hljs-string { 38 | color: #D69D85 39 | } 40 | .hljs-regexp, 41 | .hljs-template-tag { 42 | color: #9A5334 43 | } 44 | .hljs-subst, 45 | .hljs-function, 46 | .hljs-title, 47 | .hljs-params, 48 | .hljs-formula { 49 | color: #DCDCDC 50 | } 51 | .hljs-comment, 52 | .hljs-quote { 53 | color: #57A64A; 54 | font-style: italic 55 | } 56 | .hljs-doctag { 57 | color: #608B4E 58 | } 59 | .hljs-meta, 60 | .hljs-meta .hljs-keyword, 61 | .hljs-tag { 62 | color: #9B9B9B 63 | } 64 | .hljs-variable, 65 | .hljs-template-variable { 66 | color: #BD63C5 67 | } 68 | .hljs-attr, 69 | .hljs-attribute { 70 | color: #9CDCFE 71 | } 72 | .hljs-section { 73 | color: gold 74 | } 75 | .hljs-emphasis { 76 | font-style: italic 77 | } 78 | .hljs-strong { 79 | font-weight: bold 80 | } 81 | /*.hljs-code { 82 | font-family:'Monospace'; 83 | }*/ 84 | .hljs-bullet, 85 | .hljs-selector-tag, 86 | .hljs-selector-id, 87 | .hljs-selector-class, 88 | .hljs-selector-attr, 89 | .hljs-selector-pseudo { 90 | color: #D7BA7D 91 | } 92 | .hljs-addition { 93 | background-color: #144212; 94 | display: inline-block; 95 | width: 100% 96 | } 97 | .hljs-deletion { 98 | background-color: #600; 99 | display: inline-block; 100 | width: 100% 101 | } 102 | } -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/code-theme/theme/xcode.scss: -------------------------------------------------------------------------------- 1 | .code-theme-xcode{ 2 | pre code.hljs { 3 | display: block; 4 | overflow-x: auto; 5 | padding: 1em 6 | } 7 | code.hljs { 8 | padding: 3px 5px 9 | } 10 | /* 11 | 12 | XCode style (c) Angel Garcia 13 | 14 | */ 15 | .hljs { 16 | background: #fff; 17 | color: black 18 | } 19 | /* Gray DOCTYPE selectors like WebKit */ 20 | .xml .hljs-meta { 21 | color: #c0c0c0 22 | } 23 | .hljs-comment, 24 | .hljs-quote { 25 | color: #007400 26 | } 27 | .hljs-tag, 28 | .hljs-attribute, 29 | .hljs-keyword, 30 | .hljs-selector-tag, 31 | .hljs-literal, 32 | .hljs-name { 33 | color: #aa0d91 34 | } 35 | .hljs-variable, 36 | .hljs-template-variable { 37 | color: #3F6E74 38 | } 39 | .hljs-code, 40 | .hljs-string, 41 | .hljs-meta .hljs-string { 42 | color: #c41a16 43 | } 44 | .hljs-regexp, 45 | .hljs-link { 46 | color: #0E0EFF 47 | } 48 | .hljs-title, 49 | .hljs-symbol, 50 | .hljs-bullet, 51 | .hljs-number { 52 | color: #1c00cf 53 | } 54 | .hljs-section, 55 | .hljs-meta { 56 | color: #643820 57 | } 58 | .hljs-title.class_, 59 | .hljs-class .hljs-title, 60 | .hljs-type, 61 | .hljs-built_in, 62 | .hljs-params { 63 | color: #5c2699 64 | } 65 | .hljs-attr { 66 | color: #836C28 67 | } 68 | .hljs-subst { 69 | color: #000 70 | } 71 | .hljs-formula { 72 | background-color: #eee; 73 | font-style: italic 74 | } 75 | .hljs-addition { 76 | background-color: #baeeba 77 | } 78 | .hljs-deletion { 79 | background-color: #ffc8bd 80 | } 81 | .hljs-selector-id, 82 | .hljs-selector-class { 83 | color: #9b703f 84 | } 85 | .hljs-doctag, 86 | .hljs-strong { 87 | font-weight: bold 88 | } 89 | .hljs-emphasis { 90 | font-style: italic 91 | } 92 | } -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/code-theme/theme/xt256.scss: -------------------------------------------------------------------------------- 1 | .code-theme-xt256{ 2 | pre code.hljs { 3 | display: block; 4 | overflow-x: auto; 5 | padding: 1em 6 | } 7 | code.hljs { 8 | padding: 3px 5px 9 | } 10 | /* 11 | xt256.css 12 | 13 | Contact: initbar [at] protonmail [dot] ch 14 | : github.com/initbar 15 | */ 16 | .hljs { 17 | color: #eaeaea; 18 | background: #000 19 | } 20 | .hljs-subst { 21 | color: #eaeaea 22 | } 23 | .hljs-emphasis { 24 | font-style: italic 25 | } 26 | .hljs-strong { 27 | font-weight: bold 28 | } 29 | .hljs-type { 30 | color: #eaeaea 31 | } 32 | .hljs-params { 33 | color: #da0000 34 | } 35 | .hljs-literal, 36 | .hljs-number, 37 | .hljs-name { 38 | color: #ff0000; 39 | font-weight: bolder 40 | } 41 | .hljs-comment { 42 | color: #969896 43 | } 44 | .hljs-selector-id, 45 | .hljs-quote { 46 | color: #00ffff 47 | } 48 | .hljs-template-variable, 49 | .hljs-variable, 50 | .hljs-title { 51 | color: #00ffff; 52 | font-weight: bold 53 | } 54 | .hljs-selector-class, 55 | .hljs-keyword, 56 | .hljs-symbol { 57 | color: #fff000 58 | } 59 | .hljs-string, 60 | .hljs-bullet { 61 | color: #00ff00 62 | } 63 | .hljs-tag, 64 | .hljs-section { 65 | color: #000fff 66 | } 67 | .hljs-selector-tag { 68 | color: #000fff; 69 | font-weight: bold 70 | } 71 | .hljs-attribute, 72 | .hljs-built_in, 73 | .hljs-regexp, 74 | .hljs-link { 75 | color: #ff00ff 76 | } 77 | .hljs-meta { 78 | color: #fff; 79 | font-weight: bolder 80 | } 81 | } -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/codemirror.scss: -------------------------------------------------------------------------------- 1 | :root[theme='dark'] { 2 | // 搜索匹配项(未选中)的高亮 3 | .cm-selectionMatch{ 4 | //outline: 1px #ff9900 solid 5 | } 6 | // 当前选中匹配项的高亮 7 | .cm-searchMatch-selected { 8 | outline: 1px #E3B999 solid !important; 9 | } 10 | } -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/colorpicker.scss: -------------------------------------------------------------------------------- 1 | .vc-colorpicker--container { 2 | background-color: var(--wj-markdown-bg-tertiary); 3 | color: var(--wj-markdown-text-primary); 4 | .vc-colorPicker__record { 5 | .color-list { 6 | .color-item { 7 | border-radius: 0; 8 | border: none; 9 | } 10 | } 11 | } 12 | } 13 | 14 | -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/common.scss: -------------------------------------------------------------------------------- 1 | // electron拖拽 2 | .electron-drag { 3 | -webkit-app-region: drag; 4 | -webkit-user-select: none; 5 | } 6 | 7 | .mermaid-cache, .mermaid { 8 | display: flex; 9 | justify-content: center; 10 | align-items: center; 11 | } 12 | 13 | //layout menu 14 | .ant-dropdown-menu-submenu-popup.ant-dropdown-menu { 15 | *::-webkit-scrollbar{ 16 | display: revert; 17 | width: 4px; 18 | height: 4px; 19 | } 20 | *::-webkit-scrollbar-track{ 21 | background-color: #e2e2e2; 22 | } 23 | *::-webkit-scrollbar-thumb { 24 | border-radius: 4px; 25 | background-color: #0000004d; 26 | } 27 | *::-webkit-scrollbar-thumb:hover{ 28 | background-color: #00000059; 29 | } 30 | *::-webkit-scrollbar-thumb:active{ 31 | background-color: #00000061; 32 | } 33 | .ant-dropdown-menu.ant-dropdown-menu-sub.ant-dropdown-menu-vertical { 34 | max-height: 400px; 35 | overflow: auto; 36 | } 37 | } -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/global-theme/dark.scss: -------------------------------------------------------------------------------- 1 | :root[theme=dark] { 2 | // 文字颜色 3 | --wj-markdown-text-primary: rgb(171,178,191); 4 | // 背景颜色 5 | --wj-markdown-bg-primary: rgb(40,44,52); 6 | --wj-markdown-bg-secondary: #363A43; 7 | --wj-markdown-bg-tertiary: rgb(30,34,42); 8 | --wj-markdown-bg-hover: rgba(171,178,191, .2); 9 | --wj-markdown-border-primary: #393B40; 10 | --wj-markdown-scroll-bg: #393B40; 11 | --wj-markdown-text-secondary: rgb(171,178,191); 12 | --wj-markdown-text-tertiary: rgb(160,160,160); 13 | 14 | } -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/global-theme/global-theme.scss: -------------------------------------------------------------------------------- 1 | @use "dark"; 2 | @use "light"; 3 | 4 | //* { 5 | // color: var(--wj-markdown-text-primary); 6 | // background-color: var(--wj-markdown-bg-primary); 7 | //} -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/global-theme/light.scss: -------------------------------------------------------------------------------- 1 | :root { 2 | --wj-markdown-text-primary: black; 3 | --wj-markdown-bg-primary: white; 4 | --wj-markdown-bg-secondary: rgba(5, 5, 5, 0.06); 5 | --wj-markdown-bg-tertiary: white; 6 | --wj-markdown-bg-hover: rgb(237,237,237); 7 | --wj-markdown-border-primary: rgb(229,231,235); 8 | --wj-markdown-scroll-bg: #e2e2e2; 9 | --wj-markdown-text-secondary: rgb(107,114,128); 10 | --wj-markdown-text-tertiary: rgb(160,160,160); 11 | } -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/preview-theme/preview-theme.scss: -------------------------------------------------------------------------------- 1 | @use "theme/github"; 2 | @use "theme/juejin.scss"; 3 | @use "theme/smart-blue"; 4 | @use "theme/vuepress"; 5 | @use "theme/mk-cute"; 6 | @use "theme/cyanosis"; 7 | @use "theme/scrolls"; 8 | @use "theme/markdown-here"; -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/reset.css: -------------------------------------------------------------------------------- 1 | * { 2 | box-sizing: border-box; 3 | margin: 0; 4 | padding: 0; 5 | } 6 | html, body, #app { 7 | width: 100%; 8 | height: 100%; 9 | } -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/scroll.scss: -------------------------------------------------------------------------------- 1 | .wj-scrollbar::-webkit-scrollbar{ 2 | display: revert; 3 | width: 6px; 4 | height: 6px; 5 | //background-color: rgb(20, 19, 19); 6 | } 7 | /*滚动条里面轨道*/ 8 | .wj-scrollbar::-webkit-scrollbar-track{ 9 | background-color: var(--wj-markdown-scroll-bg); 10 | } 11 | 12 | /*滚动条的样式*/ 13 | .wj-scrollbar::-webkit-scrollbar-thumb{ 14 | border-radius: 4px; 15 | background-color: #0000004d; 16 | } 17 | 18 | .wj-scrollbar::-webkit-scrollbar-thumb:hover{ 19 | background-color: #00000059; 20 | } 21 | 22 | .wj-scrollbar::-webkit-scrollbar-thumb:active{ 23 | background-color: #00000061; 24 | } 25 | 26 | .wj-scrollbar{ 27 | *::-webkit-scrollbar{ 28 | display: revert; 29 | width: 6px; 30 | height: 6px; 31 | } 32 | *::-webkit-scrollbar-track{ 33 | background-color: var(--wj-markdown-scroll-bg); 34 | } 35 | *::-webkit-scrollbar-thumb { 36 | border-radius: 4px; 37 | background-color: #0000004d; 38 | } 39 | *::-webkit-scrollbar-thumb:hover{ 40 | background-color: #00000059; 41 | } 42 | *::-webkit-scrollbar-thumb:active{ 43 | background-color: #00000061; 44 | } 45 | //background-color: rgb(20, 19, 19); 46 | } 47 | 48 | 49 | .wj-scrollbar-hide::-webkit-scrollbar{ 50 | display: revert; 51 | width: 0; 52 | height: 0; 53 | } 54 | 55 | 56 | //// 始终显示滚动条 57 | //.cm-scroller { 58 | // overflow-y: scroll; 59 | //} 60 | // 61 | //.cm-scroller::-webkit-scrollbar{ 62 | // display: revert; 63 | // width: 6px; 64 | // height: 6px; 65 | // //background-color: rgb(20, 19, 19); 66 | //} 67 | ///*滚动条里面轨道*/ 68 | //.cm-scroller::-webkit-scrollbar-track{ 69 | // background-color: #e2e2e2; 70 | //} 71 | // 72 | ///*滚动条的样式*/ 73 | //.cm-scroller::-webkit-scrollbar-thumb{ 74 | // border-radius: 4px; 75 | // background-color: #0000004d; 76 | //} 77 | // 78 | //.cm-scroller::-webkit-scrollbar-thumb:hover{ 79 | // background-color: #00000059; 80 | //} 81 | // 82 | //.cm-scroller::-webkit-scrollbar-thumb:active{ 83 | // background-color: #00000061; 84 | //} 85 | 86 | 87 | //.cm-autocompletion-scrollbar { 88 | // ul::-webkit-scrollbar{ 89 | // display: revert; 90 | // width: 6px; 91 | // height: 6px; 92 | // //background-color: rgb(20, 19, 19); 93 | // } 94 | // /*滚动条里面轨道*/ 95 | // ul::-webkit-scrollbar-track{ 96 | // background-color: #e2e2e2; 97 | // } 98 | // 99 | // /*滚动条的样式*/ 100 | // ul::-webkit-scrollbar-thumb{ 101 | // border-radius: 4px; 102 | // background-color: #0000004d; 103 | // } 104 | // 105 | // ul::-webkit-scrollbar-thumb:hover{ 106 | // background-color: #00000059; 107 | // } 108 | // 109 | // ul::-webkit-scrollbar-thumb:active{ 110 | // background-color: #00000061; 111 | // } 112 | //} -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/search.scss: -------------------------------------------------------------------------------- 1 | .search-mark { 2 | display: inline; 3 | color: black; 4 | background-color: #ffff00; 5 | } 6 | 7 | .search-mark-highlight { 8 | background-color: #ff9632; 9 | } -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/assets/style/wj-markdown-it-text-color.scss: -------------------------------------------------------------------------------- 1 | .markdown-it-text-color { 2 | color: var(--markdown-it-text-color); 3 | * { 4 | color: var(--markdown-it-text-color) !important; 5 | } 6 | } 7 | 8 | .markdown-it-text-color-gradient { 9 | background: var(--markdown-it-text-color) !important; 10 | -webkit-background-clip: text !important; 11 | background-clip: text !important; 12 | color: transparent !important; 13 | * { 14 | background: var(--markdown-it-text-color) !important; 15 | -webkit-background-clip: text !important; 16 | background-clip: text !important; 17 | color: transparent !important; 18 | } 19 | } -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/components/CommonVNode.vue: -------------------------------------------------------------------------------- 1 | 15 | -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/components/TableShape.vue: -------------------------------------------------------------------------------- 1 | 35 | 36 | 50 | 51 | 54 | -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/components/editor/IconButton.vue: -------------------------------------------------------------------------------- 1 | 37 | 38 | 104 | -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/components/editor/MarkdownMenu.vue: -------------------------------------------------------------------------------- 1 | 33 | 34 | 61 | 62 | 65 | -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/components/layout/LayoutContainer.vue: -------------------------------------------------------------------------------- 1 | 3 | 4 | 16 | 17 | 20 | -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/components/layout/OtherLayout.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 31 | 32 | 35 | -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/main.js: -------------------------------------------------------------------------------- 1 | import eventUtil from '@/util/channel/eventUtil.js' 2 | import commonUtil from '@/util/commonUtil.js' 3 | import Antd from 'ant-design-vue' 4 | 5 | import { createPinia } from 'pinia' 6 | import { createApp } from 'vue' 7 | import App from './App.vue' 8 | import router from './router' 9 | import '@/assets/style/reset.css' 10 | import '@/assets/style/common.scss' 11 | import 'virtual:uno.css' 12 | import 'ant-design-vue/dist/reset.css' 13 | import 'katex/dist/katex.min.css' 14 | import '@/assets/style/scroll.scss' 15 | import '@/assets/style/wj-markdown-it-container.scss' 16 | import '@/assets/style/wj-markdown-it-text-color.scss' 17 | import 'vue3-colorpicker/style.css' 18 | // 代码主题 19 | import '@/assets/style/code-theme/code-theme.scss' 20 | // 预览主题 21 | import '@/assets/style/preview-theme/preview-theme.scss' 22 | import '@/assets/style/antd.scss' 23 | // markdown-it-github-alerts 24 | import 'markdown-it-github-alerts/styles/github-base.css' 25 | import 'markdown-it-github-alerts/styles/github-colors-light.css' 26 | 27 | import '@/assets/style/search.scss' 28 | 29 | import '@/assets/style/global-theme/global-theme.scss' 30 | import '@/assets/style/colorpicker.scss' 31 | import '@/assets/style/codemirror.scss' 32 | 33 | const app = createApp(App) 34 | 35 | app.use(createPinia()) 36 | app.use(router) 37 | app.use(Antd) 38 | app.mount('#app') 39 | 40 | commonUtil.initMessageConfig() 41 | eventUtil.link() 42 | eventUtil.on() 43 | -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/router/index.js: -------------------------------------------------------------------------------- 1 | import { createRouter, createWebHashHistory } from 'vue-router' 2 | 3 | const router = createRouter({ 4 | history: createWebHashHistory(import.meta.env.BASE_URL), 5 | routes: [ 6 | { 7 | path: '/', 8 | name: 'home', 9 | component: () => import('../views/HomeView.vue'), 10 | children: [ 11 | { 12 | path: '/editor', 13 | name: 'editor', 14 | component: () => import('../views/EditorView.vue'), 15 | }, 16 | { 17 | path: '/preview', 18 | name: 'preview', 19 | component: () => import('../views/PreviewView.vue'), 20 | }, 21 | ], 22 | }, 23 | { 24 | path: '/setting', 25 | name: 'setting', 26 | component: () => import('../views/SettingView.vue'), 27 | }, 28 | { 29 | path: '/export', 30 | name: 'export', 31 | component: () => import('../views/ExportView.vue'), 32 | }, 33 | { 34 | path: '/about', 35 | name: 'about', 36 | component: () => import('../views/AboutView.vue'), 37 | }, 38 | { 39 | path: '/guide', 40 | name: 'guide', 41 | component: () => import('../views/GuideView.vue'), 42 | }, 43 | ], 44 | }) 45 | 46 | export default router 47 | -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/stores/counter.js: -------------------------------------------------------------------------------- 1 | import channelUtil from '@/util/channel/channelUtil.js' 2 | import { defineStore } from 'pinia' 3 | import { ref } from 'vue' 4 | 5 | const configData = await channelUtil.send({ event: 'get-config' }) 6 | const recentListData = await channelUtil.send({ event: 'get-recent-list' }) 7 | 8 | const useCommonStore = defineStore('common', () => { 9 | const fileName = ref('') 10 | const saved = ref(true) 11 | const isMaximize = ref(false) 12 | const config = ref(configData) 13 | const searchBarVisible = ref(false) 14 | const editorSearchBarVisible = ref(false) 15 | const hasNewVersion = ref(false) 16 | const isAlwaysOnTop = ref(false) 17 | const recentList = ref(recentListData) 18 | return { fileName, saved, isMaximize, config, searchBarVisible, hasNewVersion, isAlwaysOnTop, recentList, editorSearchBarVisible } 19 | }) 20 | 21 | export { useCommonStore } 22 | -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/util/channel/channelUtil.js: -------------------------------------------------------------------------------- 1 | export default { 2 | send: async (data) => { 3 | return await window.node.sendToMain(data) 4 | }, 5 | getWebFilePath: file => window.node.getWebFilePath(file), 6 | } 7 | -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/util/channel/eventEmit.js: -------------------------------------------------------------------------------- 1 | class EventEmit { 2 | #list = [] 3 | 4 | on(event, callback) { 5 | if (!event) { 6 | throw new Error('event is required') 7 | } 8 | if (!callback) { 9 | throw new Error('callback is required') 10 | } 11 | this.#list.push({ 12 | event, 13 | callback, 14 | }) 15 | } 16 | 17 | remove(event, callback) { 18 | this.#list = this.#list.filter(item => !(item.event === event && item.callback === callback)) 19 | } 20 | 21 | publish(event, obj) { 22 | this.#list.forEach((item) => { 23 | if (item.event === event) { 24 | try { 25 | item.callback(obj) 26 | } 27 | catch (e) { 28 | console.error(e) 29 | } 30 | } 31 | }) 32 | } 33 | } 34 | 35 | const eventEmit = new EventEmit() 36 | 37 | export default eventEmit 38 | -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/util/channel/eventUtil.js: -------------------------------------------------------------------------------- 1 | import { useCommonStore } from '@/stores/counter.js' 2 | import channelUtil from '@/util/channel/channelUtil.js' 3 | import eventEmit from '@/util/channel/eventEmit.js' 4 | import { ExclamationCircleOutlined } from '@ant-design/icons-vue' 5 | import { Button, message, Modal } from 'ant-design-vue' 6 | import { createVNode, h } from 'vue' 7 | 8 | export default { 9 | link: () => { 10 | window.node.sendToShow((obj) => { 11 | eventEmit.publish(obj.event, obj.data) 12 | }) 13 | }, 14 | on: () => { 15 | eventEmit.on('always-on-top-changed', (isAlwaysOnTop) => { 16 | useCommonStore().isAlwaysOnTop = isAlwaysOnTop 17 | }) 18 | eventEmit.on('file-is-saved', (data) => { 19 | useCommonStore().saved = data 20 | }) 21 | eventEmit.on('update-recent', (data) => { 22 | useCommonStore().$patch({ 23 | recentList: data, 24 | }) 25 | }) 26 | eventEmit.on('save-success', (data) => { 27 | window.document.title = data.fileName === 'Unnamed' ? 'wj-markdown-editor' : data.fileName 28 | useCommonStore().$patch({ 29 | fileName: data.fileName, 30 | saved: data.saved, 31 | }) 32 | }) 33 | eventEmit.on('has-new-version', (flag) => { 34 | useCommonStore().hasNewVersion = flag 35 | }) 36 | eventEmit.on('message', (data) => { 37 | message[data.type]({ 38 | content: data.content, 39 | key: data.key, 40 | duration: data.duration, 41 | }) 42 | }) 43 | eventEmit.on('window-size', (data) => { 44 | useCommonStore().isMaximize = data.isMaximize 45 | }) 46 | eventEmit.on('update-config', (data) => { 47 | useCommonStore().$patch({ 48 | config: data, 49 | }) 50 | }) 51 | eventEmit.on('unsaved', () => { 52 | const modal = Modal.confirm({ 53 | centered: true, 54 | title: '提示', 55 | icon: createVNode(ExclamationCircleOutlined), 56 | content: `${useCommonStore().fileName}未保存,是否直接退出?`, 57 | footer: h('div', { style: { width: '100%', display: 'flex', justifyContent: 'right', gap: '10px', paddingTop: '10px' } }, [ 58 | h(Button, { onClick: () => modal.destroy() }, () => '取消'), 59 | h(Button, { 60 | type: 'primary', 61 | danger: true, 62 | onClick: () => { 63 | channelUtil.send({ event: 'force-close' }).then(() => {}) 64 | modal.destroy() }, 65 | }, () => '直接退出'), 66 | ]), 67 | }) 68 | }) 69 | }, 70 | } 71 | -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/util/constant.js: -------------------------------------------------------------------------------- 1 | const codeThemeList = [ 2 | 'a11y-dark', 3 | 'a11y-light', 4 | 'agate', 5 | 'an-old-hope', 6 | 'androidstudio', 7 | 'arduino-light', 8 | 'arta', 9 | 'ascetic', 10 | 'atom-one-dark-reasonable', 11 | 'atom-one-dark', 12 | 'atom-one-light', 13 | 'brown-paper', 14 | 'codepen-embed', 15 | 'color-brewer', 16 | 'dark', 17 | 'default', 18 | 'devibeans', 19 | 'docco', 20 | 'far', 21 | 'felipec', 22 | 'foundation', 23 | 'github-dark-dimmed', 24 | 'github-dark', 25 | 'github', 26 | 'gml', 27 | 'googlecode', 28 | 'gradient-dark', 29 | 'gradient-light', 30 | 'grayscale', 31 | 'hybrid', 32 | 'idea', 33 | 'intellij-light', 34 | 'ir-black', 35 | 'isbl-editor-dark', 36 | 'isbl-editor-light', 37 | 'kimbie-dark', 38 | 'kimbie-light', 39 | 'lightfair', 40 | 'lioshi', 41 | 'magula', 42 | 'mono-blue', 43 | 'monokai-sublime', 44 | 'monokai', 45 | 'night-owl', 46 | 'nnfx-dark', 47 | 'nnfx-light', 48 | 'nord', 49 | 'obsidian', 50 | 'panda-syntax-dark', 51 | 'panda-syntax-light', 52 | 'paraiso-dark', 53 | 'paraiso-light', 54 | 'pojoaque', 55 | 'purebasic', 56 | 'qtcreator-dark', 57 | 'qtcreator-light', 58 | 'rainbow', 59 | 'routeros', 60 | 'school-book', 61 | 'shades-of-purple', 62 | 'srcery', 63 | 'stackoverflow-dark', 64 | 'stackoverflow-light', 65 | 'sunburst', 66 | 'tokyo-night-dark', 67 | 'tokyo-night-light', 68 | 'tomorrow-night-blue', 69 | 'tomorrow-night-bright', 70 | 'vs', 71 | 'vs2015', 72 | 'xcode', 73 | 'xt256', 74 | ] 75 | 76 | const previewThemeList = ['github', 'juejin', 'smart-blue', 'vuepress', 'mk-cute', 'cyanosis', 'scrolls', 'markdown-here'] 77 | 78 | // 禁止使用搜索功能的路由名称 79 | const notAllowedSearchRouteNameList = ['about', 'export'] 80 | 81 | export default { 82 | codeThemeList, 83 | previewThemeList, 84 | notAllowedSearchRouteNameList, 85 | } 86 | -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/util/editor/completion/alertCompletion.js: -------------------------------------------------------------------------------- 1 | function checkLineStart(context) { 2 | const word = context.matchBefore(/.*/) 3 | if (!word) { 4 | return false 5 | } 6 | const line = context.state.doc.lineAt(context.pos) 7 | if (!line) { 8 | return false 9 | } 10 | const lineText = line.text 11 | if (!lineText) { 12 | return false 13 | } 14 | return word.text === lineText 15 | } 16 | 17 | const listLanguages = ['Note', 'Tip', 'Important', 'Warning', 'Caution'] 18 | function alertCompletion(context) { 19 | if (checkLineStart(context) === false) { 20 | return [] 21 | } 22 | const word = context.matchBefore(/^>\x20*/) 23 | if (word) { 24 | const suggestions = [] 25 | const match = word.text.match(/^>(\x20*)/) 26 | const offset = match[0] ? match[0].length : 0 27 | listLanguages.forEach((item) => { 28 | suggestions.push({ 29 | label: `${item}`, 30 | type: 'text', 31 | section: '提示', 32 | apply: (view, completion, from, to) => { 33 | const insert = `> [!${item}]\n> ` 34 | view.dispatch({ 35 | changes: { from: to - offset, to, insert }, 36 | selection: { anchor: to - offset + 8 + item.length }, 37 | }) 38 | }, 39 | }) 40 | }) 41 | return suggestions 42 | } 43 | return [] 44 | } 45 | 46 | export default alertCompletion 47 | -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/util/editor/completion/codeBlockCompletion.js: -------------------------------------------------------------------------------- 1 | import hljs from 'highlight.js' 2 | 3 | const listLanguages = hljs.listLanguages().concat(['vue', 'mermaid']) 4 | function codeBlockCompletion(context) { 5 | const word = context.matchBefore(/^`{1,3}[a-z0-9]*/i) 6 | if (word) { 7 | const suggestions = [] 8 | const match = word.text.match(/^`(`{0,2})([a-z0-9]*)/i) 9 | const offset = match[1] ? match[1].length + 1 : 1 10 | const list = match[2] ? listLanguages.filter(item => item.startsWith(match[2])) : listLanguages 11 | list.forEach((item) => { 12 | suggestions.push({ 13 | label: `${item}`, 14 | type: 'text', 15 | section: '代码块', 16 | apply: (view, completion, from, to) => { 17 | const insert = `\`\`\`${item}\n\n\`\`\`` 18 | view.dispatch({ 19 | changes: { from: from - offset, to, insert }, 20 | selection: { anchor: from - offset + 4 + item.length }, 21 | }) 22 | }, 23 | }) 24 | suggestions.push({ 25 | label: `${item}`, 26 | detail: '非包围', 27 | type: 'text', 28 | section: '代码块', 29 | apply: (view, completion, from, to) => { 30 | const insert = `\`\`\`${item}` 31 | view.dispatch({ 32 | changes: { from: from - offset, to, insert }, 33 | selection: { anchor: from - offset + 4 + item.length }, 34 | }) 35 | }, 36 | }) 37 | }) 38 | return suggestions 39 | } 40 | return [] 41 | } 42 | 43 | export default codeBlockCompletion 44 | -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/util/editor/completion/completionHandler.js: -------------------------------------------------------------------------------- 1 | import alertCompletion from '@/util/editor/completion/alertCompletion.js' 2 | import codeBlockCompletion from '@/util/editor/completion/codeBlockCompletion.js' 3 | import containerCompletion from '@/util/editor/completion/containerCompletion.js' 4 | import dateCompletion from '@/util/editor/completion/dateCompletion.js' 5 | import headingCompletion from '@/util/editor/completion/headingCompletion.js' 6 | import tableCompletion from '@/util/editor/completion/tableCompletion.js' 7 | 8 | const handlerList = [tableCompletion, codeBlockCompletion, headingCompletion, dateCompletion, containerCompletion, alertCompletion] 9 | 10 | function autocompletionHandler(context) { 11 | const word = context.matchBefore(/\w*/) 12 | const suggestions = [] 13 | handlerList.forEach((handler) => { 14 | const itemSuggestions = handler(context) 15 | if (itemSuggestions && Array.isArray(itemSuggestions) && itemSuggestions.length > 0) { 16 | suggestions.push(...itemSuggestions) 17 | } 18 | }) 19 | return { 20 | from: word.from, 21 | to: word.to, 22 | options: suggestions, 23 | validFor: undefined, 24 | filter: false, 25 | } 26 | } 27 | 28 | export default autocompletionHandler 29 | -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/util/editor/completion/containerCompletion.js: -------------------------------------------------------------------------------- 1 | function checkLineStart(context) { 2 | const word = context.matchBefore(/.*/) 3 | if (!word) { 4 | return false 5 | } 6 | const line = context.state.doc.lineAt(context.pos) 7 | if (!line) { 8 | return false 9 | } 10 | const lineText = line.text 11 | if (!lineText) { 12 | return false 13 | } 14 | return word.text === lineText 15 | } 16 | 17 | const listLanguages = ['Info', 'Tip', 'Important', 'Warning', 'Danger', 'Detail'] 18 | function containerCompletion(context) { 19 | if (checkLineStart(context) === false) { 20 | return [] 21 | } 22 | const word = context.matchBefore(/^:{1,3}[\x20a-z]*/) 23 | if (word) { 24 | const suggestions = [] 25 | const match = word.text.match(/^:(:{0,2})([\x20a-z]*)/i) 26 | const offset = match[0] ? match[0].length : 0 27 | const list = match[2] ? listLanguages.filter(item => item.toLowerCase().startsWith(match[2].replaceAll(' ', '').toLowerCase())) : listLanguages 28 | list.forEach((item) => { 29 | suggestions.push({ 30 | label: `${item}`, 31 | type: 'text', 32 | section: '容器', 33 | apply: (view, completion, from, to) => { 34 | const insert = `::: ${item}\n\n:::` 35 | view.dispatch({ 36 | changes: { from: to - offset, to, insert }, 37 | selection: { anchor: to - offset + 5 + item.length }, 38 | }) 39 | }, 40 | }) 41 | suggestions.push({ 42 | label: `${item}`, 43 | detail: '非包围', 44 | type: 'text', 45 | section: '容器', 46 | apply: (view, completion, from, to) => { 47 | const insert = `::: ${item}` 48 | view.dispatch({ 49 | changes: { from: to - offset, to, insert }, 50 | }) 51 | }, 52 | }) 53 | }) 54 | return suggestions 55 | } 56 | return [] 57 | } 58 | 59 | export default containerCompletion 60 | -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/util/editor/completion/dateCompletion.js: -------------------------------------------------------------------------------- 1 | import dayjs from 'dayjs' 2 | 3 | function dateCompletion(context) { 4 | const word = context.matchBefore(/\w*/) 5 | if (word && word.text) { 6 | const lowerText = word.text.toLowerCase() 7 | const suggestions = [] 8 | if ('date'.startsWith(lowerText)) { 9 | suggestions.push({ 10 | label: 'date', 11 | type: 'text', 12 | detail: '日期', 13 | section: '时间', 14 | apply: (view, completion, from, to) => { 15 | const insert = dayjs().format('YYYY-MM-DD') 16 | view.dispatch({ 17 | changes: { from, to, insert }, 18 | }) 19 | }, 20 | }) 21 | } 22 | if ('datetime'.startsWith(lowerText)) { 23 | suggestions.push({ 24 | label: 'datetime', 25 | type: 'text', 26 | detail: '时间', 27 | section: '时间', 28 | apply: (view, completion, from, to) => { 29 | const insert = dayjs().format('YYYY-MM-DD HH:mm:ss') 30 | view.dispatch({ 31 | changes: { from, to, insert }, 32 | }) 33 | }, 34 | }) 35 | } 36 | return suggestions 37 | } 38 | return [] 39 | } 40 | 41 | export default dateCompletion 42 | -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/util/editor/completion/headingCompletion.js: -------------------------------------------------------------------------------- 1 | function headingCompletion(context) { 2 | const word = context.matchBefore(/^#{1,5}/) 3 | if (word) { 4 | const text = word.text 5 | const suggestions = [] 6 | for (let i = text.length; i <= 6; i++) { 7 | suggestions.push({ 8 | label: `${'#'.repeat(i)}`, 9 | type: 'text', 10 | section: '标题', 11 | apply: (view, completion, from, to) => { 12 | const insert = `${'#'.repeat(i)} ` 13 | view.dispatch({ 14 | changes: { from: from - text.length, to, insert }, 15 | }) 16 | }, 17 | }) 18 | } 19 | return suggestions 20 | } 21 | return [] 22 | } 23 | 24 | export default headingCompletion 25 | -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/util/editor/completion/tableCompletion.js: -------------------------------------------------------------------------------- 1 | import editorUtil from '@/util/editor/editorUtil.js' 2 | 3 | function checkLineStart(context) { 4 | const word = context.matchBefore(/.*/) 5 | if (!word) { 6 | return false 7 | } 8 | const line = context.state.doc.lineAt(context.pos) 9 | if (!line) { 10 | return false 11 | } 12 | const lineText = line.text 13 | if (!lineText) { 14 | return false 15 | } 16 | return word.text === lineText 17 | } 18 | function tableCompletion(context) { 19 | if (checkLineStart(context) === false) { 20 | return [] 21 | } 22 | const word = context.matchBefore(/^([1-9]\d*)(x)([1-9]\d*)?$/i) 23 | if (!word || word.text === '') { 24 | return [] 25 | } 26 | // 表格 27 | const text = word.text 28 | 29 | const suggestions = [] 30 | // 表格 31 | const match = text.match(/^([1-9]\d*)(x)([1-9]\d*)?$/i) 32 | if (match) { 33 | const rows = Number(match[1]) 34 | const symbol = match[2] 35 | const cols = match[3] ? Number(match[3]) : 1 36 | for (let i = 0; i < 5; i++) { 37 | suggestions.push({ 38 | label: `${rows}${symbol}${cols + i}`, 39 | type: 'text', 40 | section: '表格', 41 | apply: (view, completion, from, to) => { 42 | editorUtil.insertTable(view, rows, cols + i, from, to) 43 | }, 44 | }) 45 | } 46 | } 47 | return suggestions 48 | } 49 | 50 | export default tableCompletion 51 | -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/util/editor/editorExtensionUtil.js: -------------------------------------------------------------------------------- 1 | import completionHandler from '@/util/editor/completion/completionHandler.js' 2 | import { 3 | autocompletion, 4 | closeBrackets, 5 | } from '@codemirror/autocomplete' 6 | import { history } from '@codemirror/commands' 7 | import { markdown } from '@codemirror/lang-markdown' 8 | import { 9 | bracketMatching, 10 | defaultHighlightStyle, 11 | indentOnInput, 12 | syntaxHighlighting, 13 | } from '@codemirror/language' 14 | import { languages } from '@codemirror/language-data' 15 | import { highlightSelectionMatches, search } from '@codemirror/search' 16 | import { EditorState } from '@codemirror/state' 17 | import { 18 | crosshairCursor, 19 | drawSelection, 20 | dropCursor, 21 | highlightActiveLine, 22 | highlightSpecialChars, 23 | lineNumbers, 24 | rectangularSelection, 25 | } from '@codemirror/view' 26 | import { EditorView } from 'codemirror' 27 | 28 | /** 29 | * 固定的插件 30 | */ 31 | const fixedExtension = [ 32 | history(), 33 | drawSelection(), 34 | dropCursor(), 35 | indentOnInput(), 36 | search(), 37 | highlightSelectionMatches(), 38 | markdown({ codeLanguages: languages }), 39 | EditorView.theme({ 40 | '&': { 41 | height: '100%', 42 | fontSize: '1rem', 43 | }, 44 | '.cm-line': { 45 | fontFamily: 'source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace', // 字体 46 | }, 47 | '.cm-content': { 48 | lineHeight: '1.5', 49 | }, 50 | '.cm-gutterElement': { 51 | userSelect: 'none', 52 | }, 53 | '.cm-scroller': { 54 | overflowY: 'scroll', 55 | }, 56 | // 自定义搜索框依赖于原生的搜索框组件 设置原生搜索框不显示 若height不设置为0,会导致切换上一个或者下一个匹配项时,高度计算不正确,不能保证匹配项在可视区域 57 | '.cm-panels:has(.cm-search.cm-panel)': { 58 | height: 0, 59 | overflow: 'hidden', 60 | }, 61 | '*::-webkit-scrollbar': { 62 | display: 'revert', 63 | width: '6px', 64 | height: '6px', 65 | }, 66 | /* 滚动条里面轨道 */ 67 | '*::-webkit-scrollbar-track': { 68 | backgroundColor: 'var(--wj-markdown-scroll-bg)', 69 | }, 70 | /* 滚动条的样式 */ 71 | '*::-webkit-scrollbar-thumb': { 72 | borderRadius: '4px', 73 | backgroundColor: '#0000004d', 74 | }, 75 | '*::-webkit-scrollbar-thumb:hover': { 76 | backgroundColor: '#00000059', 77 | }, 78 | '*::-webkit-scrollbar-thumb:active': { 79 | backgroundColor: '#00000061', 80 | }, 81 | }), 82 | autocompletion({ 83 | override: [ 84 | completionHandler, 85 | ], 86 | }), 87 | ] 88 | 89 | const dynamicExtension = [ 90 | syntaxHighlighting(defaultHighlightStyle, { fallback: true }), 91 | bracketMatching(), 92 | closeBrackets(), 93 | EditorState.allowMultipleSelections.of(true), 94 | highlightSpecialChars(), 95 | rectangularSelection(), 96 | crosshairCursor(), 97 | highlightActiveLine(), 98 | lineNumbers(), 99 | EditorView.lineWrapping, 100 | ] 101 | 102 | const editorExtensionUtil = { 103 | getDefault: () => { 104 | return [ 105 | ...fixedExtension, 106 | ...dynamicExtension, 107 | ] 108 | }, 109 | } 110 | 111 | export default editorExtensionUtil 112 | -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/util/markdown-it/markdownItCodeBlock.js: -------------------------------------------------------------------------------- 1 | import hljs from 'highlight.js' 2 | /** 3 | * 若字符串以```结尾,则删除最后3个字符 4 | */ 5 | function removeTripleBackticks(inputString) { 6 | return inputString.endsWith('```') ? inputString.slice(0, -3) : inputString 7 | } 8 | 9 | function parseAttrs(attrs) { 10 | const value = [] 11 | if (attrs && attrs.length > 0) { 12 | attrs.forEach((item) => { 13 | value.push(`${item[0]}="${item[1]}"`) 14 | }) 15 | } 16 | return value.join(' ') 17 | } 18 | 19 | export default function codeBlockPlugin(md) { 20 | const defaultRenderer = md.renderer.rules.fence.bind(md.renderer.rules) 21 | md.renderer.rules.fence = (tokens, idx, options, env, slf) => { 22 | const token = tokens[idx] 23 | const code = token.content.trim() 24 | const info = token.info ? md.utils.unescapeAll(token.info).trim() : '' 25 | 26 | if (info) { 27 | const lang = info.split(/\s+/g)[0] 28 | if (lang === 'mermaid') { 29 | const content = removeTripleBackticks(code) 30 | return `
\n${content}\n
\n` 31 | } else { 32 | try { 33 | return `
${lang && hljs.getLanguage(lang) ? hljs.highlight(code, { language: lang, ignoreIllegals: true }).value : hljs.highlightAuto(code).value}
` 34 | } catch (e) { 35 | console.error(e) 36 | } 37 | return `
${md.utils.escapeHtml(code)}
` 38 | } 39 | } 40 | return defaultRenderer(tokens, idx, options, env, slf) 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/util/markdown-it/markdownItContainerUtil.js: -------------------------------------------------------------------------------- 1 | import commonUtil from '@/util/commonUtil.js' 2 | 3 | function helper(md, type, marker) { 4 | // 忽略大小写 5 | const reg = new RegExp(`^${type}\\s+(\\S*)$`, 'i') 6 | const regNotTitle = new RegExp(`^${type}$`, 'i') 7 | return { 8 | type, 9 | marker, 10 | validate(params) { 11 | return params.trim().match(reg) || regNotTitle.test(params.trim()) 12 | }, 13 | render(tokens, idx) { 14 | if (type.toLowerCase() === 'details') { 15 | if (tokens[idx].nesting === 1) { 16 | const title = regNotTitle.test(tokens[idx].info.trim()) ? commonUtil.upperCaseFirst(type) : md.utils.escapeHtml(tokens[idx].info.trim().match(reg)[1]) 17 | return ` 18 |
19 |
${title}\n 20 |
\n` 21 | } else { 22 | return '
\n' 23 | } 24 | } 25 | // 始终显示标题 26 | if (tokens[idx].nesting === 1) { 27 | const title = regNotTitle.test(tokens[idx].info.trim()) ? commonUtil.upperCaseFirst(type) : md.utils.escapeHtml(tokens[idx].info.trim().match(reg)[1]) 28 | return ` 29 |
30 |
${title}
31 |
\n` 32 | } else { 33 | return '
\n' 34 | } 35 | // 没有标题 36 | // if (regNotTitle.test(tokens[idx].info.trim())) { 37 | // if (tokens[idx].nesting === 1) { 38 | // // opening tag 39 | // return ` 40 | //
41 | //
\n` 42 | // } else { 43 | // // closing tag 44 | // return '
\n' 45 | // } 46 | // } else { 47 | // // 有标题 48 | // const m = tokens[idx].info.trim().match(reg) 49 | // if (tokens[idx].nesting === 1) { 50 | // // opening tag 51 | // return ` 52 | //
53 | //
${md.utils.escapeHtml(m[1])}
54 | //
\n` 55 | // } else { 56 | // // closing tag 57 | // return '
\n' 58 | // } 59 | // } 60 | }, 61 | } 62 | } 63 | 64 | export default { 65 | createContainerPlugin: (md, typeList) => { 66 | const list = [] 67 | for (const type of typeList) { 68 | list.push(helper(md, type, ':')) 69 | } 70 | return list 71 | }, 72 | } 73 | -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/util/markdown-it/markdownItTextColor.js: -------------------------------------------------------------------------------- 1 | export default function (md) { 2 | md.inline.ruler.push('text_color', (state, silent) => { 3 | const start = state.pos 4 | 5 | if (state.src.charCodeAt(start) !== 0x7B) 6 | return false 7 | const match = state.src.slice(start).match(/^\{([^}]+)\}\(([^)]+)\)/) 8 | if (!match) 9 | return false 10 | 11 | if (!silent) { 12 | const token = state.push('html_inline', '', 0) 13 | const color = match[1] 14 | const text = match[2] 15 | if (color.includes('gradient')) { 16 | token.content = `${md.renderInline(text)}` 17 | } else { 18 | token.content = `${md.renderInline(text)}` 19 | } 20 | } 21 | 22 | state.pos += match[0].length 23 | return true 24 | }) 25 | } 26 | -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/views/EditorView.vue: -------------------------------------------------------------------------------- 1 | 55 | 56 | 59 | 60 | 62 | -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/views/ExportView.vue: -------------------------------------------------------------------------------- 1 | 65 | 66 | 71 | 72 | 77 | -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/views/GuideView.vue: -------------------------------------------------------------------------------- 1 | 30 | 31 | 56 | 57 | 60 | -------------------------------------------------------------------------------- /wj-markdown-editor-web/src/views/HomeView.vue: -------------------------------------------------------------------------------- 1 | 38 | 39 | 48 | -------------------------------------------------------------------------------- /wj-markdown-editor-web/uno.config.js: -------------------------------------------------------------------------------- 1 | import { defineConfig, presetIcons, presetUno } from 'unocss' 2 | 3 | export default defineConfig({ 4 | presets: [ 5 | presetUno(), 6 | presetIcons({ 7 | extraProperties: { 8 | 'display': 'inline-block', 9 | 'vertical-align': 'middle', 10 | }, 11 | collections: { 12 | tabler: () => import('@iconify-json/tabler/icons.json').then(i => i.default), 13 | }, 14 | }), 15 | ], 16 | theme: { 17 | // ... 18 | colors: { 19 | text: { 20 | primary: 'var(--wj-markdown-text-primary)', 21 | secondary: 'var(--wj-markdown-text-secondary)', 22 | }, 23 | bg: { 24 | primary: 'var(--wj-markdown-bg-primary)', 25 | hover: 'var(--wj-markdown-bg-hover)', 26 | }, 27 | border: { 28 | primary: 'var(--wj-markdown-border-primary)', 29 | }, 30 | }, 31 | }, 32 | }) 33 | -------------------------------------------------------------------------------- /wj-markdown-editor-web/vite.config.js: -------------------------------------------------------------------------------- 1 | import { fileURLToPath, URL } from 'node:url' 2 | import vue from '@vitejs/plugin-vue' 3 | import postCssPxToRem from 'postcss-pxtorem' 4 | import UnoCSS from 'unocss/vite' 5 | 6 | import { defineConfig } from 'vite' 7 | 8 | // https://vitejs.dev/config/ 9 | export default defineConfig({ 10 | base: './', 11 | plugins: [ 12 | vue(), 13 | UnoCSS(), 14 | ], 15 | resolve: { 16 | alias: { 17 | '@': fileURLToPath(new URL('./src', import.meta.url)), 18 | }, 19 | }, 20 | build: { 21 | outDir: '../wj-markdown-editor-electron/web-dist', 22 | emptyOutDir: true, 23 | target: 'esnext', 24 | }, 25 | css: { 26 | postcss: { 27 | plugins: [ 28 | postCssPxToRem({ 29 | rootValue: 16, 30 | propList: ['*'], 31 | selectorBlackList: ['grid-rows-', 'grid-cols', 'wj-scrollbar'], 32 | }), 33 | ], 34 | }, 35 | }, 36 | server: { 37 | port: 8080, 38 | }, 39 | }) 40 | --------------------------------------------------------------------------------