This commit is contained in:
街角小林 2026-03-25 13:46:40 +08:00
parent 6bc3b85c8d
commit 4b69bb378b
361 changed files with 4 additions and 42846 deletions

View file

@ -18,6 +18,8 @@ mind-map 也提供了独立的思维导图客户端,可以点击[客户端](ht
图床配置帮助:[中文](./docs/imageHosting_zh.md) | [English](./docs/imageHosting.md)
> 插件源码不开源,本仓库仅存放文档。
# 功能清单
- 思维导图本身的功能可从[mind-map](https://github.com/wanglin2/mind-map)项目了解更多,也可以在这里查[看常见问题](./Help_zh.md)。

View file

@ -18,6 +18,8 @@ Help: [中文](./docs/help_zh.md) | [English](./docs/help.md)
Image Hosting Help: [中文](./docs/imageHosting_zh.md) | [English](./docs/imageHosting.md)
> The plugin source code is not open source, and this repository only stores documentation.
# Feature List
- For mind map features, refer to the [mind-map](https://github.com/wanglin2/mind-map) project. You can also check [Common Issues](./Help.md) here.

View file

@ -1,10 +0,0 @@
{
"id": "simple-mind-map",
"name": "Simple mind map",
"version": "0.1.7",
"minAppVersion": "1.8.3",
"description": "A relatively powerful mind map.",
"author": "wanglin",
"authorUrl": "https://github.com/wanglin2",
"isDesktopOnly": false
}

BIN
plugin/.DS_Store vendored

Binary file not shown.

View file

@ -1,12 +0,0 @@
{
"presets": [["@babel/preset-env"]],
"plugins": [
[
"component",
{
"libraryName": "element-ui",
"styleLibraryName": "theme-chalk"
}
]
]
}

View file

@ -1 +0,0 @@
NODE_ENV=library

View file

@ -1,11 +0,0 @@
src/assets
*/.DS_Store
node_modules
public
*.json
*.md
.eslintrc.js
.prettierignore
.prettierrc
package-lock.json
package.json

View file

@ -1,5 +0,0 @@
semi: false
singleQuote: true
printWidth: 80
trailingComma: 'none'
arrowParens: 'avoid'

View file

@ -1,865 +0,0 @@
import { Notice, TextFileView, TFile, setIcon, Platform } from 'obsidian'
import {
SMM_VIEW_TYPE,
SAVE_ICON,
IMPORT_ICON,
EXPORT_ICON,
SMM_TAG,
OUTLINE_ICON,
MINDMAP_ICON,
PRINT_ICON,
getSmmEditViewCount
} from './ob/constant.js'
import { initApp } from './src/main.js'
import {
assembleMarkdownText,
parseMarkdownText,
createDefaultText
} from './ob/metadataAndMarkdown.js'
import {
hideTargetMenu,
smmFilePathToFileName,
formatFileName
} from './ob/utils.js'
import LZString from 'lz-string'
import { base64ToFile } from './src/utils'
import ModifyFileName from './ob/ModifyFileName.js'
class SmmEditView extends TextFileView {
constructor(leaf, plugin) {
super(leaf)
this.plugin = plugin
this.contentEl.style.padding = 0
this.warpEl = this.contentEl.createDiv('smmMindmapEditContainer')
this.warpEl.classList.add('smm-common-full-size')
this.mindMapData = ''
this.parsedMindMapData = null
this.mindMapAPP = null
this.isActive = true
this.resizeObserver = null
this.isUnSave = false
this.isNotTriggerDataChange = false
this.isHidden = false
this.needResize = false
this.isOutlineEditMode = false
this.saveButton = null
this.exportButton = null
this.importButton = null
this.printOutlineButton = null
this.changeToOutlineButton = null
this.changeToMindmapButton = null
this.savingTipEl = null
this.isReadonlyMode = false
this.toggleReadonlyButton = null
this.modifyFileName = new ModifyFileName(this)
this.popScope = null
this.id = getSmmEditViewCount()
}
getViewType() {
return SMM_VIEW_TYPE
}
getIcon() {
return 'smm-icon'
}
onPaneMenu(menu, source) {
super.onPaneMenu(menu, source)
hideTargetMenu(menu, '在新窗口中打开')
hideTargetMenu(menu, '移动至新窗口')
}
async switchToMarkdownView() {
if (!this.file || !this.leaf) return
const mdViewType = this.app.viewRegistry.getTypeByExtension('md')
await this.leaf.setViewState({
type: mdViewType,
state: {
...this.leaf.getViewState().state,
isSwitchToMarkdownViewFromSmmView: true
},
popstate: true
})
}
async onOpen() {
// 注册激活状态监听
this.registerEvent(
this.app.workspace.on(
'active-leaf-change',
this._handleActiveChange.bind(this)
)
)
this.registerEvent(
this.app.workspace.on('resize', this._handleResize.bind(this))
)
this._addActionBtns()
this._initThemeMode()
this.modifyFileName.setupTitleEditing()
this._registerHotkeyOverrides()
}
getViewData() {
return this.mindMapData
}
async setViewData(data, isClear) {
if (this.isHidden) {
return
}
if (isClear) {
this.clear()
}
let rawData = data.trim()
try {
if (!rawData) {
throw new Error(this.plugin._t('tip.fileIsEmpty'))
} else {
this.parsedMindMapData = parseMarkdownText(rawData)
const content = this.parsedMindMapData.metadata.content
if (content) {
let passedContent = ''
try {
const json = JSON.parse(content)
if (json && json.root) {
passedContent = content
}
} catch (error) {}
if (!passedContent) {
this.parsedMindMapData.metadata.content = LZString.decompressFromBase64(
content
)
}
} else {
throw new Error('文件格式错误')
}
}
} catch (error) {
rawData = createDefaultText(
'',
this.plugin._getCreateDefaultMindMapOptions()
)
}
this.mindMapData = rawData
if (!this.parsedMindMapData) {
this.parsedMindMapData = parseMarkdownText(rawData)
this.parsedMindMapData.metadata.content = LZString.decompressFromBase64(
this.parsedMindMapData.metadata.content
)
}
if (isClear) {
this._renderMindMap()
} else if (this.mindMapAPP) {
this.isNotTriggerDataChange = true
this.mindMapAPP.$bus.$emit(
'updateMindMapDataFromOb',
this.parsedMindMapData.metadata.content
)
}
}
_clearObserver() {
if (this.resizeObserver) {
this.resizeObserver.disconnect()
this.resizeObserver = null
}
}
_renderMindMap() {
this.warpEl.empty()
const el = this.warpEl.createDiv('smmMindMapEdit')
el.classList.add('smm-common-full-size')
this._clearObserver()
this.resizeObserver = new ResizeObserver(entries => {
for (const entry of entries) {
const { width, height } = entry.contentRect
if (width > 10 && height > 10) {
this._initializeMindMap(el)
this._clearObserver()
break
}
}
})
this.resizeObserver.observe(el)
}
_initializeMindMap(el) {
if (this.mindMapAPP) return
const filePath = this.file?.path
let initLocationNodeId = ''
const { fileToSubpathMap } = this.plugin
if (fileToSubpathMap && fileToSubpathMap[filePath]) {
initLocationNodeId = fileToSubpathMap[filePath]
delete fileToSubpathMap[filePath]
}
this.mindMapAPP = initApp(el, {
getInitMindMapData: () => {
return this.parsedMindMapData.metadata.content
},
getInitLocationNodeId: () => {
return initLocationNodeId
},
getMindMapCurrentData: (content, linkData, textData) => {
this.parsedMindMapData.metadata.content = content
const {
metadata,
svgdata,
svgdataUpdateAt,
linkdata
} = this.parsedMindMapData
this.mindMapData = assembleMarkdownText({
metadata: {
path: `${this.file?.path}`,
tags: Array.from(new Set([SMM_TAG, ...metadata.tags])),
content: LZString.compressToBase64(content),
yaml: metadata.yaml
},
svgdata,
svgdataUpdateAt,
linkdata: linkData || linkdata || [],
textdata: textData || []
})
},
saveMindMapData: async (_, svgData) => {
try {
this._showSavingTip()
const { embedImageIsSeparateFile } = this.plugin.settings
if (svgData) {
if (embedImageIsSeparateFile) {
const res = await this._getFileSvgData(svgData)
if (res) {
this.parsedMindMapData.svgdata = `![[${res}]]`
this.parsedMindMapData.svgdataUpdateAt = moment().format(
'YYYY-MM-DD HH:mm:ss'
)
} else {
new Notice(this.plugin._t('tip.imgCreateFail'))
}
} else {
this.parsedMindMapData.svgdata = LZString.compressToBase64(
svgData
)
}
}
this.forceSave()
} catch (error) {}
},
getMindMapConfig: () => {
return this.plugin.settings.mindMapConfig || {}
},
saveMindMapConfig: newConfig => {
this.plugin.settings.mindMapConfig = newConfig
this.plugin._saveSettings()
},
getMindMapLocalConfig: () => {
const { mindMapLocalConfig, themeMode } = this.plugin.settings
const config = mindMapLocalConfig || {}
config.isDark =
themeMode === 'follow'
? this.plugin._getObIsDark()
: themeMode === 'dark'
return config
},
saveMindMapLocalConfig: newConfig => {
this.plugin.settings.mindMapLocalConfig = newConfig
this.plugin._saveSettings()
},
getSettings: () => {
return this.plugin.settings || {}
},
updateSettings: data => {
this.plugin.settings = {
...this.plugin.settings,
...data
}
this.plugin._saveSettings()
},
getObAllFiles: (extraSelf = true) => {
const fileList = this.app.vault.getFiles()
if (extraSelf && this.file) {
return fileList.filter(item => {
return item.path !== this.file.path
})
}
return fileList
},
createLinkInfoFromFilePath: (filePath, subpath = '', alias = '') => {
const file = this.tryGetFileByPath(filePath)
if (!file) {
return null
}
const linkText = this.app.fileManager.generateMarkdownLink(
file,
this.file?.path || '',
subpath,
alias
)
return {
link: file.path,
linkText
}
},
openFile: (filePath, isNewTab = false, createOnNoExist = false) => {
if (!filePath) return
let arr = filePath.split(/(#|^|\|)/)
filePath = arr[0]
let postfix = []
arr = arr.slice(1)
let ignore = false
for (let i = 0; i < arr.length; i++) {
if (arr[i] === '|') {
ignore = true
} else if (ignore) {
ignore = false
} else {
postfix.push(arr[i])
}
}
postfix = postfix.join('')
const file = this.tryGetFileByPath(filePath)
if (file && file instanceof TFile) {
this.app.workspace.openLinkText(
file.path + postfix,
this.file?.path || '',
isNewTab
)
} else if (createOnNoExist) {
this.app.workspace.openLinkText(
/\.md$/.test(filePath) ? filePath : filePath + '.md',
this.file?.path || '',
isNewTab
)
}
},
openWebLink: url => {
if (this.app.openExternal) {
this.app.openExternal(url)
return
}
try {
if (window.require) {
const { shell } = window.require('electron')
shell.openExternal(url)
return
}
} catch (e) {}
window.open(url, '_blank', 'noopener,noreferrer')
},
saveFileToVault: async (...args) => {
const res = await this.saveFileToVault(...args)
return res
},
getResourcePath: vaultPath => {
return this.app.vault.adapter.getResourcePath(vaultPath)
},
getObInternalLink: (...args) => {
return this.app.fileManager.generateMarkdownLink(this.file, '', ...args)
},
showTip: tip => {
new Notice(tip)
},
getFileFromUri: uri => {
const params = new URLSearchParams(uri.split('?')[1])
const vault = decodeURIComponent(params.get('vault') || '')
const filePath = decodeURIComponent(params.get('file') || '')
if (!vault || !filePath) return null
if (this.app.vault.getName() !== vault) {
new Notice(this.plugin._t('tip.onlyEnableSelectCurrentVaultFile'))
return null
}
return this.tryGetFileByPath(filePath)
},
isMobile: () => {
return Platform.isMobile
},
getObsidianApp: () => {
return this.app
},
getFormatFileName: (str, ignores = []) => {
return formatFileName(str, {
notename: this.file?.basename.split('.')[0],
ignores
})
}
})
setTimeout(() => {
this._listenMindMapEvent()
}, 100)
}
tryGetFileByPath(filePath) {
let res = this.app.vault.getFileByPath(filePath)
if (!res) {
res = this.app.vault.getFileByPath(filePath + '.md')
}
if (!res) {
res = this.app.metadataCache.getFirstLinkpathDest(
filePath,
this.file?.path
)
}
return res
}
async _getFileSvgData(svgData) {
const targetFileName = smmFilePathToFileName(this.file?.path, '.svg')
const { embedImageIsSeparateFileFolder } = this.plugin.settings
const originSvgData = this.parsedMindMapData.svgdata
if (originSvgData && /^!\[\[/.test(originSvgData)) {
const match = originSvgData.match(/!\[\[([^\]]+)\]\]/)
if (match && match[1]) {
const filePath = match[1]
const fileName = filePath.split('/').pop()
if (fileName !== targetFileName) {
const exist = await this.app.vault.exists(filePath)
if (exist) {
await this.app.vault.adapter.remove(filePath)
}
}
}
}
svgData = base64ToFile(svgData, targetFileName)
const res = await this.saveFileToVault(
svgData,
true,
embedImageIsSeparateFileFolder,
true
)
return res
}
async saveFileToVault(file, isImg = true, targetFolder = '', cover = false) {
try {
let folder = targetFolder || ''
if (!folder) {
folder = isImg
? this._getFileSavePath('imagePathType', 'imagePath', 'imageSubPath')
: this._getFileSavePath(
'attachmentPathType',
'attachmentPath',
'attachmentSubPath'
)
}
await this.plugin._ensureDirectoryExists(folder)
let fileName = file.name
let fileExist = false
if (!cover) {
let counter = 1
while (
this.app.vault.getFileByPath(
folder ? `${folder}/${fileName}` : fileName
)
) {
const parts = file.name.split('.')
const ext = parts.pop()
fileName = `${parts.join('.')}_${counter}.${ext}`
counter++
}
} else {
fileExist = await this.app.vault.adapter.exists(
folder ? `${folder}/${fileName}` : fileName
)
}
// 读取文件内容
const arrayBuffer = await file.arrayBuffer()
// 在vault中创建路径
const vaultPath = folder ? `${folder}/${fileName}` : fileName
// 写入文件
if (fileExist) {
await app.vault.adapter.writeBinary(vaultPath, arrayBuffer)
} else {
await this.app.vault.createBinary(vaultPath, arrayBuffer)
}
return vaultPath
} catch (error) {
return null
}
}
jumpToNodeByUid(uid) {
if (!this.mindMapAPP) {
return
}
this.mindMapAPP.$bus.$emit('jumpToNodeByUid', uid)
}
async save(ignoreActiveCheck = false) {
if (!ignoreActiveCheck && !this.isActive) {
return
}
if (this.app.noSaveOnClose) return
const t = Date.now()
if (this.mindMapAPP) {
this.mindMapAPP.$bus.$emit('getMindMapCurrentData')
this.mindMapAPP.$bus.$emit('clearAutoSave')
}
if (!this.mindMapData) {
return
}
await super.save()
this._setIsUnSave(false)
this._hideSavingTip()
}
forceSave(ignoreActiveCheck = false) {
this._showSavingTip()
this.save(ignoreActiveCheck)
}
forceSaveAndUpdateImage() {
this._showSavingTip()
this.mindMapAPP.$bus.$emit('saveToLocal', true, true)
}
_listenMindMapEvent() {
this._onDataChange = this._onDataChange.bind(this)
this.mindMapAPP.$bus.$on('data_change', this._onDataChange)
}
_onDataChange() {
if (this.isNotTriggerDataChange) {
this.isNotTriggerDataChange = false
return
}
this._setIsUnSave(true)
}
_handleResize() {
if (!this.mindMapAPP || this.needResize) {
return
}
if (this.isHidden) {
this.needResize = true
return
}
try {
if (this.mindMapAPP.$updateMindMapSize) {
const { width, height } = this.warpEl.getBoundingClientRect()
if (width > 0 && height > 0) {
this.mindMapAPP.$updateMindMapSize()
}
}
} catch (e) {}
}
async _handleActiveChange(leaf) {
const nowActive = leaf?.view === this
if (nowActive && !this.isActive) {
this._registerHotkeyOverrides()
this.isActive = true
if (this.mindMapAPP) {
if (this.isHidden) {
this.isHidden = false
this._checkForExternalChanges()
}
if (this.needResize) {
this.needResize = false
this._handleResize()
}
}
} else if (!nowActive && this.isActive) {
this._clearPopScope()
const rect = this.warpEl.getBoundingClientRect()
this.isHidden = rect.width === 0 || rect.height === 0
if (this.mindMapAPP) {
this.mindMapAPP.$bus.$emit('obTabDeactivate')
this.save()
this.mindMapAPP.$clearUpdateMindMapSize()
}
this.isActive = false
}
}
async _checkForExternalChanges() {
if (!this.file) return
try {
const data = await this.app.vault.read(this.file)
await this.setViewData(data, false)
} catch (e) {}
}
clear() {
this._clearObserver()
if (this.mindMapAPP) {
try {
this.mindMapAPP.$destroy()
} catch (e) {}
this.mindMapAPP = null
}
this.warpEl.empty()
this.mindMapData = ''
this.parsedMindMapData = null
this.isUnSave = false
this.isNotTriggerDataChange = false
this.isHidden = false
this.needResize = false
this._resetOnOutlineEditMode()
}
async onClose() {
this._clearPopScope()
this.modifyFileName.unload()
await this.save()
this.clear()
this.saveButton = null
this.exportButton = null
this.importButton = null
this.printOutlineButton = null
this.changeToOutlineButton = null
this.changeToMindmapButton = null
this.toggleReadonlyButton = null
}
_addActionBtns() {
const viewActions = this.headerEl.querySelector('.view-actions')
this.toggleReadonlyButton = this._createActionBtn(
this.plugin._t('action.changeToReadonly'),
'book-open',
viewActions,
async () => {
await this.save()
if (this.isReadonlyMode) {
this.isReadonlyMode = false
this.mindMapAPP.$bus.$emit('toggleReadonly', false)
setIcon(this.toggleReadonlyButton, 'book-open')
this.toggleReadonlyButton.setAttribute(
'aria-label',
this.plugin._t('action.changeToReadonly')
)
this._showButtons([
this.saveButton,
this.importButton,
this.exportButton
])
} else {
this.isReadonlyMode = true
this.mindMapAPP.$bus.$emit('toggleReadonly', true)
setIcon(this.toggleReadonlyButton, 'edit-3')
this.toggleReadonlyButton.setAttribute(
'aria-label',
this.plugin._t('action.changeToEdit')
)
this._hideButtons([
this.saveButton,
this.importButton,
this.exportButton
])
}
},
true
)
this.changeToOutlineButton = this._createActionBtn(
this.plugin._t('action.changeToOutline'),
OUTLINE_ICON,
viewActions,
async () => {
await this.save()
this._hideButtons([this.exportButton, this.changeToOutlineButton])
this._showButtons([this.printOutlineButton, this.changeToMindmapButton])
// 保存按钮文案修改
this.saveButton.setAttribute('aria-label', '保存')
this.mindMapAPP.$bus.$emit('showOutlineEdit')
this.isOutlineEditMode = true
}
)
this.changeToMindmapButton = this._createActionBtn(
this.plugin._t('action.changeToMindMap'),
MINDMAP_ICON,
viewActions,
async () => {
await this.save()
this.mindMapAPP.$bus.$emit('hideOutlineEdit')
this._resetOnOutlineEditMode()
}
)
this._hideButtons([this.changeToMindmapButton])
this.printOutlineButton = this._createActionBtn(
this.plugin._t('action.printOutline'),
PRINT_ICON,
viewActions,
async () => {
this.mindMapAPP.$bus.$emit('printOutline')
}
)
this._hideButtons([this.printOutlineButton])
this.importButton = this._createActionBtn(
this.plugin._t('action.import'),
IMPORT_ICON,
viewActions,
() => {
this.mindMapAPP.$bus.$emit('showImport')
}
)
if (!Platform.isMobile) {
this.exportButton = this._createActionBtn(
this.plugin._t('action.export'),
EXPORT_ICON,
viewActions,
() => {
this.mindMapAPP.$bus.$emit('showExport')
}
)
}
// 保存并更新图像数据
this.saveButton = this._createActionBtn(
this.plugin._t('action.saveAndUpdateImage'),
SAVE_ICON,
viewActions,
() => {
this.forceSaveAndUpdateImage()
}
)
this.saveButton.classList.add('smm-save-button-default')
this.savingTipEl = this.headerEl.createEl('div', {
cls: 'smm-save-tip'
})
viewActions.insertBefore(this.savingTipEl, viewActions.firstChild)
}
_showSavingTip() {
if (!this.savingTipEl) return
this.savingTipEl.innerText = this.plugin._t('tip.saving')
}
_hideSavingTip() {
if (!this.savingTipEl) return
this.savingTipEl.innerText = ''
}
_createActionBtn(label, icon, parentEl, onClick, isObIcon = false) {
const el = this.headerEl.createEl('button', {
cls: 'clickable-icon'
})
el.setAttribute('aria-label', label)
if (isObIcon) {
setIcon(el, icon, 24)
} else {
el.innerHTML = icon
}
parentEl.insertBefore(el, parentEl.firstChild)
el.addEventListener('click', onClick)
return el
}
_resetOnOutlineEditMode() {
if (this.isOutlineEditMode) {
this.saveButton.setAttribute(
'aria-label',
this.plugin._t('action.saveAndUpdateImage')
)
this._showButtons([this.exportButton, this.changeToOutlineButton])
this._hideButtons([this.changeToMindmapButton, this.printOutlineButton])
this.isOutlineEditMode = false
}
}
_showButtons(list) {
list.forEach(el => {
if (!el) return
el.classList.remove('smm-common-hide')
el.classList.add('smm-common-flex')
})
}
_hideButtons(list) {
list.forEach(el => {
if (!el) return
el.classList.remove('smm-common-flex')
el.classList.add('smm-common-hide')
})
}
_setIsUnSave(isUnSave) {
this.isUnSave = isUnSave
if (isUnSave) {
this.saveButton.classList.remove('smm-save-button-default')
this.saveButton.classList.add('smm-save-button-un-save')
} else {
this.saveButton.classList.remove('smm-save-button-un-save')
this.saveButton.classList.add('smm-save-button-default')
}
}
_initThemeMode() {
this._updateThemeMode()
this.registerEvent(
this.app.workspace.on('css-change', () => {
this._updateThemeMode()
})
)
}
_updateThemeMode() {
if (this.plugin.settings.themeMode === 'follow') {
const isDarkMode = this.plugin._getObIsDark()
if (this.mindMapAPP) {
this.mindMapAPP.$bus.$emit('setIsDark', isDarkMode)
}
}
}
_getFileSavePath(typeKey, pathKey, subPathKey) {
const type = this.plugin.settings[typeKey]
const folder = this.plugin.settings[pathKey] || ''
const subFolder = this.plugin.settings[subPathKey] || ''
switch (type) {
case 'root':
return ''
case 'custom':
return folder
case 'currentFileFolder':
return this.plugin._getActiveFileDirectory()
case 'currentFileFolderSubFolder':
const activeFileDirectory = this.plugin._getActiveFileDirectory()
return [activeFileDirectory, subFolder].filter(Boolean).join('/')
default:
return ''
}
}
_clearPopScope() {
if (this.popScope) {
this.popScope()
this.popScope = null
}
}
_registerHotkeyOverrides() {
this._clearPopScope()
const scope = this.app.keymap.getRootScope()
const ctrlFHandler = scope.register(['Mod'], 'f', evt => {
evt.preventDefault()
return true
})
const ctrlSHandler = scope.register(['Mod'], 's', evt => {
evt.preventDefault()
const view = this.plugin._getActiveSmmView()
if (view) {
view.forceSave()
}
return true
})
scope.keys.unshift(scope.keys.pop())
scope.keys.unshift(scope.keys.pop())
this.popScope = () => {
scope.unregister(ctrlFHandler)
scope.unregister(ctrlSHandler)
}
}
}
export default SmmEditView

View file

@ -1,186 +0,0 @@
{
"common": {
"mindMap": "Mind map",
"rootNodeDefaultText": "Root node",
"secondNodeDefaultText": "Secondary node",
"branchNodeDefaultText": "Branch topic"
},
"action": {
"createMindMap": "Create new mind map",
"createMindMapInsertToMd": "Create new mind map and insert into current document",
"openAsMd": "Open as markdown document",
"openAsMindMap": "Open as mind map document",
"changeToOutline": "Switch to outline mode",
"changeToMindMap": "Switch to mind map mode",
"printOutline": "Print outline",
"import": "Import",
"export": "Export",
"insertCodeBlockToMd": "Insert mind map code block into current document",
"previewAsMindMap": "Preview as mind map",
"changeToReadonly": "Change to readonly mode",
"changeToEdit": "Change to edit mode",
"changeToMdFile": "Convert to markdown document",
"changeToMindMapFile": "Convert to mind map document"
},
"tip": {
"tip": "Tip",
"confirm": "Confirm",
"cancel": "Cancel",
"close": "Close",
"fileExist": "File already exists",
"createMindMapFail": "Failed to create mind map",
"fileIsNotMd": "Current file is not a markdown document",
"fileIsEmpty": "File content is empty",
"fileFormatError": "File format error",
"onlyEnableSelectCurrentVaultFile": "Only files from the current vault can be added",
"saving": "Saving...",
"integerInputError": "Please enter a number greater than 0",
"noPreviewImage": "No preview image available",
"insertFail": "Insertion failed",
"noMatchResult": "No matching results",
"fileDeleted": "File has been deleted",
"noPreviewImageInFile": "No preview image in file",
"pluginNewVersion": "A new version of the plugin is available:",
"pluginNoNewVersion": "The current version is already the latest version",
"pluginVersionCheckError": "Check failed",
"changeSuccess": "Change completed",
"mdToMindMapFail": "Conversion failed, unable to parse data that can be converted into a mind map",
"imgCreateFail": "Image file creation failed",
"mdModifyTip": "Do not modify any information except YAML",
"fileNameEmpty": "The file name cannot be empty",
"fileNameIllegal": "The file name contains illegal characters",
"fileRenameFail": "File renaming failed",
"mindMapToMdTip": "After converting to a Markdown document, only some content will be retained, such as node text, summary text, notes, etc. Other content will be discarded and cannot be recovered. Please make a backup first.",
"mdToMindMapTip": "Only supports converting syntax such as titles and lists into mind maps. Other content will be discarded and cannot be recovered. Please make a backup first."
},
"setting": {
"title": {
"title1": "Basic",
"title2": "File",
"title3": "Image compression",
"title4": "Embed",
"title5": "Other",
"title6": "Image hosting"
},
"themeMode": {
"title": "Theme mode",
"desc": "Dark and light color modes",
"option1": "Follow Obsidian",
"option2": "Light mode",
"option3": "Dark mode"
},
"theme": {
"title": "Default theme (light color)",
"desc": "Default theme for creating a mind map file in light color mode",
"title2": "Default theme (dark color)",
"desc2": "Default theme for creating a mind map file in dark mode"
},
"layout": {
"title": "Default layout",
"desc": "The default structure when creating a new mind map file"
},
"folder": {
"title4": "Mind map file storage location",
"desc4": "Storage location for newly created SimpleMindMap files",
"title1": "Custom file storage directory",
"desc1": "Custom file storage directory, relative to vault root directory",
"title5": "Image storage location",
"desc5": "Storage location for uploaded image files (node images, background images)",
"title2": "Custom image storage directory",
"desc2": "Custom image storage directory, relative to vault root directory",
"title6": "Custom subfolder",
"desc6": "Custom subfolder, relative to current file's folder",
"title7": "File storage location",
"desc7": "Storage directory for local files selected in node hyperlinks",
"title3": "Custom file storage directory",
"desc3": "Custom file storage directory, relative to vault root directory",
"option1": "Vault root directory",
"option2": "Specified folder",
"option3": "Current file's folder",
"option4": "Specified subfolder under current file's folder",
"title8": "Support ob search",
"desc8": "Mind map data is stored after encoding and compression, so it cannot be searched in OB. If you want to search for the node text content of the mind map in OB, you can turn on this option. After turning it on, the text content of all nodes will be saved in the file for search. The side effect is that it will cause the file size to increase, which may affect the speed of file opening and saving",
"title9": "Store canvas position and scaling data",
"desc9": "After opening, the canvas position and zoom data will be saved in the file, so that the next time it is opened, it can be restored to the position and zoom state when it was closed last time. The disadvantage is that moving and scaling the canvas will cause file changes",
"title10": "The maximum level for converting node text to Markdown titles",
"desc10": "Nodes with text less than or equal to this level will be converted to Markdown titles, while the rest will be converted to unordered lists"
},
"compress": {
"title1": "Compress images",
"desc1": "Whether to compress uploaded node images (locally selected images)",
"title2": "Maximum compression width",
"desc2": "Set the maximum width after image compression",
"title3": "Maximum compression height",
"desc3": "Set the maximum height after image compression",
"title4": "Image quality",
"desc4": "The quality of compressed images is only valid for certain image formats, such as jpg",
"curValue": "Current value",
"reset": "Reset to default"
},
"autoSave": {
"title": "Auto-save interval",
"desc": "Inactivity time before auto-save (seconds)"
},
"codeBlock": {
"title": "Code block initial height",
"desc": "Initial height when embedding via smm code block (pixels)",
"title2": "Code block background transparent",
"desc2": "Whether the background of the embedded smm code block is transparent, otherwise it will follow the selected mind map theme background color"
},
"linkInfo": {
"issues": "Bugs and feature requests",
"desktop": "Download independent client",
"community": "Community"
},
"embed": {
"title1": "Embed preview double click to open a new tab",
"desc1": "When embedding an MD document in format ![[]], double-click to preview the image and open the file in a new tab",
"title2": "Embed preview background transparent",
"desc2": "Is the background of the preview image embedded in the format of ![[]] transparent",
"title3": "Is the embedded image stored as a separate file",
"desc3": "By default, images used for embedding preview in ![[]] format will be stored separately in the repository as SVG files. This way, only the file path is stored in the mind map file, which can significantly reduce the file size and speed up file reading and saving. If closed, the image data will be stored in the mind map file, and the volume will significantly increase",
"title4": "Embedded image file storage directory",
"desc4": "The folder where the embedded preview image files are stored should not be empty relative to the repository root directory, and the directory should start with . as the hidden folder",
"title5": "New tab opens node link",
"desc5": "Does clicking on the inserted node link (excluding network links) open in a new tab. After closing, you can also open a new tab by pressing Ctrl+left mouse button"
},
"file": {
"title1": "File name format for creating a new mind map",
"desc1": "Naming format for creating a new mind map file name. Support variables other than notename",
"title3": "Naming format for pasting images",
"desc3": "Naming format for images pasted on nodes",
"filenameFormatDesc": "File name format description"
},
"font": {
"title": "Font",
"desc": "Extended font list for mind maps",
"btn": "Manage",
"placeholder": "Search font. You can also press Enter to add input fonts directly",
"empty": "No font",
"noMatch": "No matching font",
"noFont": "No available font"
},
"button": {
"select": "Select"
},
"other": {
"title1": "Check for new versions",
"desc1": "After activation, it will check if a new version is available when the plugin starts. If your network cannot access Github, it is recommended to disable this option"
},
"imageHosting": {
"title1": "Open the picture bed",
"desc1": "After activation, all images will be uploaded to the image bed",
"tip1": "Please first improve the configuration information of the drawing bed",
"title2": "Picture bed URL",
"desc2": "Fill in the corresponding upload interface address based on the graphic tool you are using",
"title3": "Form field",
"desc3": "Name of the form field when uploading images",
"title4": "Response structure",
"desc4": "Response structure when uploading images. Please refer to the detailed description for more information:",
"desc5": "Image bed function description"
}
},
"html": {
"filenameFormatDesc": "<p>In addition to fixed names, variables can also be used, enclosed in {}. Available variables are as follows:</p><p>1.{notename}: The current file name without extension;</p><p>2.{date}: Current date in YYYY-MM-DD format;</p><p>3.{time}: Current time in HH:mm:ss format;</p><p>4.{datatime}: Current date and time in YYYY-MM-DD HH:mm:ss format;</p><p>5.{date:Format}: Specify date/time format, e.g.: MM-DD HH:mm, reference: <a href='https://day.js.org/docs/en/parse/string-format'>Format specification</a>;</p><p>6.{random}: Random string with 6-character length;</p>"
}
}

View file

@ -1,186 +0,0 @@
{
"common": {
"mindMap": "Sơ đồ tư duy",
"rootNodeDefaultText": "Nút gốc",
"secondNodeDefaultText": "Nút cấp hai",
"branchNodeDefaultText": "Chủ đề nhánh"
},
"action": {
"createMindMap": "Tạo sơ đồ tư duy mới",
"createMindMapInsertToMd": "Tạo sơ đồ tư duy mới và chèn vào tài liệu hiện tại",
"openAsMd": "Mở dưới dạng tài liệu Markdown",
"openAsMindMap": "Mở dưới dạng tài liệu sơ đồ tư duy",
"changeToOutline": "Chuyển sang chế độ dàn bài",
"changeToMindMap": "Chuyển sang chế độ sơ đồ tư duy",
"printOutline": "In dàn bài",
"import": "Nhập vào",
"export": "Xuất ra",
"insertCodeBlockToMd": "Chèn khối mã sơ đồ tư duy vào tài liệu hiện tại",
"previewAsMindMap": "Xem trước dưới dạng sơ đồ tư duy",
"changeToReadonly": "Chuyển sang chế độ xem",
"changeToEdit": "Chuyển sang chế độ chỉnh sửa",
"changeToMdFile": "Chuyển đổi sang tài liệu Markdown",
"changeToMindMapFile": "Chuyển đổi sang tài liệu bản đồ tư duy"
},
"tip": {
"tip": "Mẹo",
"confirm": "Xác nhận",
"cancel": "Hủy bỏ",
"close": "Đóng cửa",
"fileExist": "Tệp đã tồn tại",
"createMindMapFail": "Tạo sơ đồ tư duy thất bại",
"fileIsNotMd": "Tệp hiện tại không phải tệp markdown",
"fileIsEmpty": "Nội dung tệp trống",
"fileFormatError": "Lỗi định dạng tệp",
"onlyEnableSelectCurrentVaultFile": "Chỉ cho phép thêm tệp từ kho hiện tại",
"saving": "Đang lưu...",
"integerInputError": "Vui lòng nhập số lớn hơn 0",
"noPreviewImage": "Không có hình ảnh xem trước",
"insertFail": "Chèn thất bại",
"noMatchResult": "Không có kết quả phù hợp",
"fileDeleted": "Tệp đã bị xóa",
"noPreviewImageInFile": "Không có hình ảnh xem trước trong tệp",
"pluginNewVersion": "Plugin có phiên bản mới:",
"pluginNoNewVersion": "Hiện tại là phiên bản mới nhất",
"pluginVersionCheckError": "Kiểm tra thất bại",
"changeSuccess": "Hoàn thành chuyển đổi",
"mdToMindMapFail": "Chuyển đổi thất bại, không có dữ liệu được phân tích để có thể được chuyển đổi thành Bản đồ tư duy",
"imgCreateFail": "Lỗi tạo tập tin ảnh",
"mdModifyTip": "Không thay đổi bất kỳ thông tin nào khác ngoài YAML",
"fileNameEmpty": "Tên tập tin không được để trống",
"fileNameIllegal": "Tên tập tin chứa ký tự không hợp lệ",
"fileRenameFail": "Lỗi đổi tên tập tin",
"mindMapToMdTip": "Sau khi chuyển đổi sang tài liệu Markdown, chỉ một số nội dung sẽ được giữ lại, chẳng hạn như văn bản nút, văn bản tóm tắt, ghi chú, v.v., những nội dung khác sẽ bị loại bỏ và không thể khôi phục, hãy sao lưu trước.",
"mdToMindMapTip": "Chỉ hỗ trợ chuyển đổi tiêu đề, danh sách và cú pháp khác thành bản đồ tư duy, các nội dung khác sẽ bị loại bỏ và không thể phục hồi, hãy sao lưu trước."
},
"setting": {
"title": {
"title1": "Cơ bản",
"title2": "Tệp",
"title3": "Nén hình ảnh",
"title4": "Hình ảnh",
"title5": "Khác",
"title6": "Hình ảnh hosting"
},
"themeMode": {
"title": "Chế độ chủ đề",
"desc": "Chế độ tối, ánh sáng",
"option1": "Theo Obsidian",
"option2": "Chế độ sáng",
"option3": "Chế độ tối"
},
"theme": {
"title": "Sắc thái mặc định (màu sáng)",
"desc": "sắc thái mặc định khi tạo tập tin bản đồ tư duy mới trong chế độ sáng",
"title2": "sắc thái mặc định (đối)",
"desc2": "sắc thái mặc định khi tạo tập tin bản đồ tư duy mới trong chế độ tối"
},
"layout": {
"title": "Cấu trúc mặc định",
"desc": "Cấu trúc mặc định khi tạo tệp sơ đồ tư duy mới"
},
"folder": {
"title4": "Vị trí lưu trữ tệp sơ đồ tư duy",
"desc4": "Vị trí lưu trữ tệp SimpleMindMap mới tạo",
"title1": "Thư mục lưu trữ tệp tùy chỉnh",
"desc1": "Thư mục lưu trữ tệp tùy chỉnh, tương đối với thư mục gốc kho lưu trữ",
"title5": "Vị trí lưu trữ hình ảnh",
"desc5": "Vị trí lưu trữ tệp hình ảnh đã tải lên (hình ảnh nút, hình nền)",
"title2": "Thư mục lưu trữ hình ảnh tùy chỉnh",
"desc2": "Thư mục lưu trữ hình ảnh tùy chỉnh, tương đối với thư mục gốc kho lưu trữ",
"title6": "Thư mục con tùy chỉnh",
"desc6": "Thư mục con tùy chỉnh, tương đối với thư mục chứa tệp hiện tại",
"title7": "Vị trí lưu trữ tệp",
"desc7": "Thư mục lưu trữ tệp cục bộ được chọn trong siêu liên kết nút",
"title3": "Thư mục lưu trữ tệp tùy chỉnh",
"desc3": "Thư mục lưu trữ tệp tùy chỉnh, tương đối với thư mục gốc kho lưu trữ",
"option1": "Thư mục gốc của kho lưu trữ",
"option2": "Thư mục chỉ định",
"option3": "Thư mục chứa tệp hiện tại",
"option4": "Thư mục con được chỉ định trong thư mục chứa tệp hiện tại",
"title8": "Hỗ trợ tìm kiếm OB",
"desc8": "Tư duy bản đồ dữ liệu là mã hóa nén sau khi lưu trữ, vì vậy không thể tìm kiếm trong ob, nếu bạn muốn trong ob có thể tìm kiếm nội dung văn bản nút của bản đồ tư duy, bạn có thể mở tùy chọn này, sau khi mở sẽ lưu thêm tất cả các nút trong các tập tin nội dung văn bản để tìm kiếm, mang lại tác dụng phụ sẽ dẫn đến khối lượng tập tin lớn hơn, có thể ảnh hưởng đến tốc độ mở và lưu tập tin",
"title9": "Lưu trữ vị trí canvas và dữ liệu thu phóng",
"desc9": "Vị trí khung và dữ liệu thu phóng được lưu trong tệp sau khi mở để bạn có thể khôi phục lại vị trí và trạng thái thu phóng của lần đóng cuối cùng khi mở tiếp theo. Nhược điểm là chỉ cần di chuyển và phóng to canvas sẽ làm thay đổi tập tin.",
"title10": "Mức tối đa của văn bản nút đến tiêu đề Markdown",
"desc10": "Văn bản nút nhỏ hơn hoặc bằng cấp này được chuyển thành tiêu đề Markdown và phần còn lại được chuyển thành danh sách không có thứ tự."
},
"compress": {
"title1": "Có nén ảnh không",
"desc1": "Nén ảnh nút đã tải lên (ảnh được chọn cục bộ)",
"title2": "Chiều rộng tối đa khi nén",
"desc2": "Thiết lập chiều rộng tối đa sau khi nén ảnh",
"title3": "Chiều cao tối đa khi nén",
"desc3": "Thiết lập chiều cao tối đa sau khi nén ảnh",
"title4": "Chất lượng ảnh",
"desc4": "Chất lượng sau khi nén hình ảnh, chỉ có hiệu quả đối với một số định dạng hình ảnh, ví dụ như: jpg",
"curValue": "Giá trị hiện tại",
"reset": "Đặt lại về mặc định"
},
"autoSave": {
"title": "Thời gian tự động lưu",
"desc": "Thời gian tự động lưu khi không có thao tác, đơn vị: giây"
},
"codeBlock": {
"title": "Chiều cao ban đầu của khối mã nhúng",
"desc": "Chiều cao ban đầu khi nhúng bằng khối mã smm, đơn vị: px",
"title2": "Nền nhúng khối mã có trong suốt hay không",
"desc2": "Nền có trong suốt khi nhúng khối mã smm hay không, nếu không nó sẽ theo màu nền của chủ đề bản đồ tư duy đã chọn"
},
"linkInfo": {
"issues": "Gửi bug hoặc gợi ý",
"desktop": "Nhận khách hàng độc lập",
"community": "Hội đồng"
},
"embed": {
"title1": "Nhúng xem thử Nhấp đúp vào cửa sổ mới để mở",
"desc1": "![[]] Định dạng Nhấp đúp vào ô xem thử ảnh khi nhúng tài liệu md có cửa sổ mới Mở tập tin không",
"title2": "Hình nền nhúng xem thử có trong suốt không",
"desc2": "![[]] Định dạng Nền ảnh được nhúng trong ô xem thử có trong suốt không",
"title3": "Cho dù hình ảnh nhúng được lưu trữ dưới dạng tệp riêng biệt",
"desc3": "Hình ảnh được sử dụng mặc định để nhúng xem trước ở định dạng ![[]] được lưu trữ riêng biệt trong kho dưới dạng tệp svg để chỉ đường dẫn tệp được lưu trữ trong tệp Bản đồ Tư duy có thể làm giảm đáng kể khối lượng tệp và tăng tốc độ đọc và lưu tệp. Nếu tắt, dữ liệu hình ảnh sẽ được lưu trữ trong tệp Bản đồ Tư duy và khối lượng sẽ tăng lên đáng kể.",
"title4": "Nhúng thư mục lưu trữ tập tin ảnh",
"desc4": "Nhúng xem trước hình ảnh tập tin lưu trữ thư mục, liên quan đến thư mục gốc kho, không nên để trống và thư mục bắt đầu bằng . như một thư mục ẩn",
"title5": "Trang nhãn mới Mở liên kết nút",
"desc5": "Nhấp vào liên kết nút được chèn (không chứa liên kết mạng) để mở trên trang tab mới. Bạn cũng có thể mở tab mới bằng Ctrl+chuột trái sau khi đóng"
},
"file": {
"title1": "Định dạng tên tập tin cho bản đồ tư duy mới",
"desc1": "Dạng thức đặt tên cho tên tệp bản đồ tư duy mới. Hỗ trợ các biến khác ngoài notename",
"title3": "Định dạng có tên cho ảnh dán",
"desc3": "Định dạng có tên của ảnh được dán trên nút",
"filenameFormatDesc": "Mô tả định dạng tên tập tin"
},
"font": {
"title": "Phông chữ",
"desc": "Phông chữ mặc định khi tạo bản đồ tư duy mới",
"btn": "Quản lý",
"placeholder": "Tìm kiếm phông chữ. Bạn cũng có thể nhấn Enter để thêm các phông chữ nhập trực tiếp",
"empty": "Không có phông chữ",
"noMatch": "Không tìm thấy phông chữ",
"noFont": "Không có phông chữ"
},
"button": {
"select": "Chọn"
},
"other": {
"title1": "Kiểm tra phiên bản mới",
"desc1": "Khi plugin khởi động, bạn sẽ kiểm tra xem có phiên bản mới không và nếu mạng của bạn không truy cập được Github, bạn nên tắt tùy chọn này."
},
"imageHosting": {
"title1": "Mở giường",
"desc1": "Sau khi mở, tất cả hình ảnh sẽ được tải lên giường.",
"tip1": "Vui lòng hoàn thiện thông tin cấu hình giường",
"title2": "Giường Url",
"desc2": "Điền địa chỉ giao diện tải lên tương ứng với công cụ giường chiếu mà bạn sử dụng",
"title3": "Trường mẫu",
"desc3": "Tên trường trong biểu mẫu khi tải lên hình ảnh",
"title4": "Cấu trúc phản hồi",
"desc4": "Cấu trúc phản hồi khi tải lên hình ảnh. Hãy tham khảo thêm tại:",
"desc5": "Hướng dẫn sử dụng giường"
}
},
"html": {
"filenameFormatDesc": "<p>Ngoài các tên cố định, bạn cũng có thể sử dụng các biến, được đặt trong dấu ngoặc nhọn {}, các biến khả dụng như sau:</p><p>1.{notename}: Tên tệp hiện tại, không bao gồm phần mở rộng;</p><p>2.{date}: Ngày hiện tại, định dạng YYYY-MM-DD;</p><p>3.{time}: Thời gian hiện tại, định dạng HH:mm:ss;</p><p>4.{datatime}: Ngày giờ hiện tại, định dạng: YYYY-MM-DD HH:mm:ss;</p><p>5.{date:Format}: Chỉ định định dạng ngày giờ, ví dụ: MM-DD HH:mm, tham khảo thêm tại: <a href='https://day.js.org/docs/en/parse/string-format'>hướng dẫn định dạng</a>;</p><p>6.{random}: Chuỗi ngẫu nhiên, độ dài 6 ký tự;</p>"
}
}

View file

@ -1,186 +0,0 @@
{
"common": {
"mindMap": "思维导图",
"rootNodeDefaultText": "根节点",
"secondNodeDefaultText": "二级节点",
"branchNodeDefaultText": "分支主题"
},
"action": {
"createMindMap": "新建思维导图",
"createMindMapInsertToMd": "新建思维导图并插入当前文档",
"openAsMd": "打开为Markdown文档",
"openAsMindMap": "打开为思维导图文档",
"changeToOutline": "切换为大纲模式",
"changeToMindMap": "切换为思维导图模式",
"printOutline": "打印大纲",
"import": "导入",
"export": "导出",
"insertCodeBlockToMd": "插入思维导图代码块到当前文档",
"previewAsMindMap": "预览为思维导图",
"changeToReadonly": "切换为只读模式",
"changeToEdit": "切换为编辑模式",
"changeToMdFile": "转换为Markdown文档",
"changeToMindMapFile": "转换为思维导图文档"
},
"tip": {
"tip": "提示",
"confirm": "确认",
"cancel": "取消",
"close": "关闭",
"fileExist": "文件已经存在",
"createMindMapFail": "新建思维导图失败",
"fileIsNotMd": "当前文件不是markdown文件",
"fileIsEmpty": "文件内容为空",
"fileFormatError": "文件格式错误",
"onlyEnableSelectCurrentVaultFile": "只允许添加当前仓库的文件",
"saving": "保存中...",
"integerInputError": "请输入大于0的数字",
"noPreviewImage": "没有可预览图片",
"insertFail": "插入失败",
"noMatchResult": "暂无匹配结果",
"fileDeleted": "该文件已被删除",
"noPreviewImageInFile": "该文件中没有可预览图片",
"pluginNewVersion": "插件有新版本可用:",
"pluginNoNewVersion": "当前已是最新版本",
"pluginVersionCheckError": "检查失败",
"changeSuccess": "转换完成",
"mdToMindMapFail": "转换失败,没有解析到可以转换为思维导图的数据",
"imgCreateFail": "图片文件创建失败",
"mdModifyTip": "请勿修改除YAML外的任何信息",
"fileNameEmpty": "文件名不能为空",
"fileNameIllegal": "文件名包含非法字符",
"fileRenameFail": "文件重命名失败",
"mindMapToMdTip": "转换为Markdown文档后仅会保留部分内容比如节点文本、概要文本、备注等其他内容将丢弃且不可恢复请先做好备份。",
"mdToMindMapTip": "仅支持将标题、列表等语法转换为思维导图,其他内容将丢弃且不可恢复,请先做好备份。"
},
"setting": {
"title": {
"title1": "基础",
"title2": "文件",
"title3": "图片压缩",
"title4": "嵌入",
"title5": "其他",
"title6": "图床"
},
"themeMode": {
"title": "主题模式",
"desc": "深色、浅色模式",
"option1": "跟随obsidian",
"option2": "浅色模式",
"option3": "深色模式"
},
"theme": {
"title": "默认主题(浅色)",
"desc": "浅色模式下新建思维导图文件时的默认主题",
"title2": "默认主题(深色)",
"desc2": "深色模式下新建思维导图文件时的默认主题"
},
"layout": {
"title": "默认结构",
"desc": "新建思维导图文件时的默认结构"
},
"folder": {
"title4": "思维导图文件存储位置",
"desc4": "新建的SimpleMindMap文件存储位置",
"title1": "自定义文件存储目录",
"desc1": "自定义文件存储目录,相对于仓库根目录",
"title5": "图片存储位置",
"desc5": "上传的图片文件(节点图片、背景图片)存储位置",
"title2": "自定义图片存储目录",
"desc2": "自定义图片存储目录,相对于仓库根目录",
"title6": "自定义子文件夹",
"desc6": "自定义子文件夹,相对于当前文件所在文件夹",
"title7": "文件存储位置",
"desc7": "节点超链接中选择的本地文件存储目录",
"title3": "自定义文件存储目录",
"desc3": "自定义文件存储目录,相对于仓库根目录",
"option1": "仓库的根目录",
"option2": "指定文件夹",
"option3": "当前文件所在的文件夹",
"option4": "当前文件所在文件夹下指定的子文件夹",
"title8": "支持ob搜索",
"desc8": "思维导图数据是编码压缩后存储的所以无法在ob中搜索如果你想在ob中能搜索到思维导图的节点文本内容可以开启该选项开启后会在文件中额外保存所有节点的文本内容用于搜索带来的副作用是会导致文件体积变大可能会影响文件打开和保存的速度",
"title9": "存储画布位置和缩放数据",
"desc9": "开启后会在文件中保存画布位置和缩放数据,这样下次打开时能恢复到上次关闭时的位置和缩放状态。缺点是只要移动和缩放过画布就会造成文件改动",
"title10": "节点文字转Markdown标题的最大层级",
"desc10": "小于等于该层级的节点文字会转为Markdown标题其余的转为无序列表"
},
"compress": {
"title1": "压缩图片",
"desc1": "是否压缩上传的节点图片(从本地选择的图片)",
"title2": "最大压缩宽度",
"desc2": "图片压缩后的最大宽度",
"title3": "最大压缩高度",
"desc3": "图片压缩后的最大高度",
"title4": "图片质量",
"desc4": "图片压缩后的质量仅对部分图片格式有效比如jpg",
"curValue": "当前值",
"reset": "重置为默认值"
},
"autoSave": {
"title": "自动保存时间",
"desc": "无操作自动保存时间,单位:秒"
},
"codeBlock": {
"title": "代码块嵌入初始高度",
"desc": "smm代码块方式嵌入时初始高度单位px",
"title2": "代码块嵌入背景是否透明",
"desc2": "smm代码块嵌入时背景是否透明否则会跟随所选的思维导图主题背景颜色"
},
"linkInfo": {
"issues": "提交bug或建议",
"desktop": "下载独立客户端",
"community": "社区"
},
"embed": {
"title1": "嵌入预览双击是否新标签页打开",
"desc1": "![[]]格式嵌入md文档时双击预览图像是否新标签页打开文件",
"title2": "嵌入预览的图像背景是否透明",
"desc2": "![[]]格式嵌入预览的图像背景是否透明",
"title3": "嵌入的图片是否以单独文件的形式存储",
"desc3": "默认用于![[]]格式嵌入预览的图片会以svg格式的文件单独存储到仓库里这样思维导图文件中只存储文件路径可以显著减小文件体积加快文件的读取和保存速度。如果关闭则会把图片数据存储到思维导图文件中体积会显著增大",
"title4": "嵌入图片文件存储目录",
"desc4": "嵌入预览的图片文件存储的文件夹,相对于仓库根目录,建议不要为空,且目录以.开头作为隐藏文件夹",
"title5": "新标签页打开节点链接",
"desc5": "点击插入的节点链接不包含网络链接是否在新标签页打开。关闭后也可以通过Ctrl+鼠标左键在新标签页打开"
},
"file": {
"title1": "新建思维导图的文件名格式",
"desc1": "新建思维导图文件名的命名格式。支持除notename外的其他变量",
"title3": "粘贴图片的命名格式",
"desc3": "在节点上粘贴的图片的命名格式",
"filenameFormatDesc": "文件名格式说明"
},
"font": {
"title": "字体",
"desc": "扩展思维导图的字体列表",
"btn": "管理",
"placeholder": "搜索字体。也可按回车键直接添加输入的字体",
"empty": "暂无已添加字体",
"noMatch": "无匹配字体",
"noFont": "没有可用字体"
},
"button": {
"select": "选择"
},
"other": {
"title1": "检查新版本",
"desc1": "开启后会在插件启动时检查是否有新版本可用如果你的网络访问不到Github则建议关闭该选项"
},
"imageHosting": {
"title1": "开启图床",
"desc1": "开启后,所有图片都将上传到图床",
"tip1": "请先完善图床配置信息",
"title2": "图床url",
"desc2": "根据你使用的图床工具填写对应的上传接口地址",
"title3": "表单字段",
"desc3": "上传图片时的表单字段名称",
"title4": "接口响应结构",
"desc4": "上传图片时的接口响应结构。详细说明请参考:",
"desc5": "图床功能说明"
}
},
"html": {
"filenameFormatDesc": "<p>除了固定名称外,也可以使用变量,用 {} 括起来,可用变量如下:</p><p>1.{notename}:当前文件的文件名,不包含扩展名;</p><p>2.{date}:当前日期,格式为 YYYY-MM-DD</p><p>3.{time}:当前时间,格式为 HH:mm:ss</p><p>4.{datatime}当前日期时间格式为YYYY-MM-DD HH:mm:ss</p><p>5.{date:Format}指定日期时间格式比如MM-DD HH:mm可参考<a href='https://day.js.org/docs/en/parse/string-format'>格式说明</a></p><p>6.{random}:随机字符串,长度为 6 位;</p>"
}
}

View file

@ -1,186 +0,0 @@
{
"common": {
"mindMap": "思維導圖",
"rootNodeDefaultText": "根節點",
"secondNodeDefaultText": "二級節點",
"branchNodeDefaultText": "分支主題"
},
"action": {
"createMindMap": "新建思維導圖",
"createMindMapInsertToMd": "新建思維導圖並插入當前文件",
"openAsMd": "開啟為 Markdown 文件",
"openAsMindMap": "開啟為思維導圖文件",
"changeToOutline": "切換為大綱模式",
"changeToMindMap": "切換為思維導圖模式",
"printOutline": "列印大綱",
"import": "匯入",
"export": "匯出",
"insertCodeBlockToMd": "插入思維導圖程式碼區塊到當前文件",
"previewAsMindMap": "預覽為心智圖",
"changeToReadonly": "切換為只讀模式",
"changeToEdit": "切換為編輯模式",
"changeToMdFile": "轉換為Markdown檔案",
"changeToMindMapFile": "轉換為心智圖檔案"
},
"tip": {
"tip": "提示",
"confirm": "確認",
"cancel": "取消",
"close": "關閉",
"fileExist": "檔案已經存在",
"createMindMapFail": "新建思維導圖失敗",
"fileIsNotMd": "當前檔案不是 markdown 檔案",
"fileIsEmpty": "檔案內容為空",
"fileFormatError": "檔案格式錯誤",
"onlyEnableSelectCurrentVaultFile": "只允許新增當前倉庫的檔案",
"saving": "儲存中...",
"integerInputError": "請輸入大於 0 的數字",
"noPreviewImage": "沒有可預覽圖片",
"insertFail": "插入失敗",
"noMatchResult": "暫無匹配結果",
"fileDeleted": "該檔案已被删除",
"noPreviewImageInFile": "該檔案中沒有可預覽圖片",
"pluginNewVersion": "挿件有新版本可用:",
"pluginNoNewVersion": "當前已是最新版本",
"pluginVersionCheckError": "檢查失敗",
"changeSuccess": "轉換完成",
"mdToMindMapFail": "轉換失敗,沒有解析到可以轉換為心智圖的數據",
"imgCreateFail": "圖片檔案創建失敗",
"mdModifyTip": "請勿修改除YAML外的任何資訊",
"fileNameEmpty": "檔名不能為空",
"fileNameIllegal": "檔名包含非法字元",
"fileRenameFail": "檔案重命名失敗",
"mindMapToMdTip": "轉換為Markdown檔案後僅會保留部分內容比如節點文字、概要文字、備註等其他內容將丟棄且不可恢復請先做好備份。",
"mdToMindMapTip": "僅支持將標題、清單等語法轉換為心智圖,其他內容將丟棄且不可恢復,請先做好備份。"
},
"setting": {
"title": {
"title1": "基礎",
"title2": "文件",
"title3": "圖片壓縮",
"title4": "嵌入",
"title5": "其他",
"title6": "圖床主機"
},
"themeMode": {
"title": "主題模式",
"desc": "深色、淺色模式",
"option1": "跟隨 Obsidian",
"option2": "淺色模式",
"option3": "深色模式"
},
"theme": {
"title": "默認主題(淺色)",
"desc": "淺色模式下新建心智圖檔案時的默認主題",
"title2": "默認主題(深色)",
"desc2": "深色模式下新建心智圖檔案時的默認主題"
},
"layout": {
"title": "預設結構",
"desc": "新建心智圖檔案時的默認結構"
},
"folder": {
"title4": "思維導圖文件存儲位置",
"desc4": "新建的SimpleMindMap文件存儲位置",
"title1": "自定義文件存儲目錄",
"desc1": "自定義文件存儲目錄,相對於倉庫根目錄",
"title5": "圖片存儲位置",
"desc5": "上傳的圖片文件(節點圖片、背景圖片)存儲位置",
"title2": "自定義圖片存儲目錄",
"desc2": "自定義圖片存儲目錄,相對於倉庫根目錄",
"title6": "自定義子文件夾",
"desc6": "自定義子文件夾,相對於當前文件所在文件夾",
"title7": "文件存儲位置",
"desc7": "節點超連結中選擇的本地文件存儲目錄",
"title3": "自定義文件存儲目錄",
"desc3": "自定義文件存儲目錄,相對於倉庫根目錄",
"option1": "倉庫的根目錄",
"option2": "指定文件夾",
"option3": "當前文件所在的文件夾",
"option4": "當前文件所在文件夾下指定的子文件夾",
"title8": "支持ob蒐索",
"desc8": "心智圖數據是編碼壓縮後存儲的所以無法在ob中蒐索如果你想在ob中能蒐索到心智圖的節點文字內容可以開啟該選項開啟後會在檔案中額外保存所有節點的文字內容用於蒐索帶來的副作用是會導致檔案體積變大可能會影響檔案打開和保存的速度",
"title9": "存儲畫布位置和縮放數據",
"desc9": "開啟後會在檔案中保存畫布位置和縮放數據,這樣下次打開時能恢復到上次關閉時的位置和縮放狀態。缺點是只要移動和縮放過畫布就會造成檔案改動",
"title10": "節點文字轉Markdown標題的最大層級",
"desc10": "小於等於該層級的節點文字會轉為Markdown標題其餘的轉為無序清單"
},
"compress": {
"title1": "壓縮圖片",
"desc1": "是否壓縮上傳的節點圖片(從本地選擇的圖片)",
"title2": "最大壓縮寬度",
"desc2": "設定圖片壓縮後的最大寬度",
"title3": "最大壓縮高度",
"desc3": "設定圖片壓縮後的最大高度",
"title4": "圖片質量",
"desc4": "圖片壓縮後的質量僅對部分圖片格式有效比如jpg",
"curValue": "當前值",
"reset": "重置為預設值"
},
"autoSave": {
"title": "自動儲存時間",
"desc": "無操作自動儲存時間,單位:秒"
},
"codeBlock": {
"title": "程式碼區塊嵌入初始高度",
"desc": "smm 程式碼區塊方式嵌入時初始高度單位px",
"title2": "程式碼塊嵌入背景是否透明",
"desc2": "smm程式碼塊嵌入時背景是否透明否則會跟隨所選的心智圖主題背景顏色"
},
"linkInfo": {
"issues": "提交bug或建議",
"desktop": "獲取獨立用戶端",
"community": "社區"
},
"embed": {
"title1": "嵌入預覽按兩下是否新標籤頁打開",
"desc1": "![[]]格式嵌入md檔案時按兩下預覽影像是否新標籤頁打開文件",
"title2": "嵌入預覽的圖像背景是否透明",
"desc2": "設定![[]]格式嵌入預覽的圖像背景是否透明",
"title3": "嵌入的圖片是否以單獨檔案的形式存儲",
"desc3": "默認用於![[]]格式嵌入預覽的圖片會以svg格式的檔案單獨存儲到倉庫裏這樣心智圖檔案中只存儲檔案路徑可以顯著减小檔案體積加快檔案的讀取和保存速度。 如果關閉,則會把圖片資料存儲到心智圖檔案中,體積會顯著增大",
"title4": "嵌入圖片檔存儲目錄",
"desc4": "嵌入預覽的圖片檔存儲的資料夾,相對於倉庫根目錄,建議不要為空,且目錄以.開頭作為隱藏資料夾",
"title5": "新標籤頁打開節點連結",
"desc5": "點擊插入的節點連結(不包含網絡連結)是否在新標籤頁打開。 關閉後也可以通過Ctrl+滑鼠左鍵在新標籤頁打開"
},
"file": {
"title1": "新建心智圖的檔名格式",
"desc1": "新建心智圖檔名的命名格式。支持除notename外的其他變數",
"title3": "粘貼圖片的命名格式",
"desc3": "在節點上粘貼的圖片的命名格式",
"filenameFormatDesc": "檔名格式說明"
},
"font": {
"title": "字體",
"desc": "擴展心智圖的字體清單",
"btn": "管理",
"placeholder": "蒐索字體。 也可按回車鍵直接添加輸入的字體",
"empty": "暫無已添加字體",
"noMatch": "無匹配字體",
"noFont": "沒有可用字體"
},
"button": {
"select": "選擇"
},
"other": {
"title1": "檢查新版本",
"desc1": "開啟後會在挿件啟動時檢查是否有新版本可用如果你的網絡訪問不到Github則建議關閉該選項"
},
"imageHosting": {
"title1": "開啟圖床",
"desc1": "開啟後,所有圖片都將上傳到圖床",
"tip1": "請先完善圖床配寘資訊",
"title2": "圖床url",
"desc2": "根據你使用的圖床工具填寫對應的上傳介面地址",
"title3": "表單欄位",
"desc3": "上傳圖片時的表單欄位名稱",
"title4": "接口響應結構",
"desc4": "上傳圖片時的接口響應結構。詳細說明請參考:",
"desc5": "圖床功能說明"
}
},
"html": {
"filenameFormatDesc": "<p>除了固定名稱外,也可以使用變數,用 {} 括起來,可用變數如下:</p><p>1.{notename}:目前檔案的檔名,不包含副檔名;</p><p>2.{date}:目前日期,格式為 YYYY-MM-DD</p><p>3.{time}:目前時間,格式為 HH:mm:ss</p><p>4.{datatime}目前日期時間格式為YYYY-MM-DD HH:mm:ss</p><p>5.{date:Format}指定日期時間格式例如MM-DD HH:mm可參考<a href='https://day.js.org/docs/en/parse/string-format'>格式說明</a></p><p>6.{random}:隨機字串,長度為 6 位;</p>"
}
}

View file

@ -1,440 +0,0 @@
import {
addIcon,
Plugin,
TFolder,
Notice,
MarkdownView,
WorkspaceLeaf,
Workspace,
getLanguage
} from 'obsidian'
import './style.css'
import SmmEditView from './SmmEditView.js'
import {
SMM_VIEW_TYPE,
SIDE_BAR_ICON,
SMM_TAG,
DEFAULT_SETTINGS,
IGNORE_CHECK_SMM
} from './ob/constant.js'
import {
createDefaultText,
createDefaultMindMapData
} from './ob/metadataAndMarkdown.js'
import { around, dedupe } from 'monkey-around'
import { getUidFromSource, formatFileName } from './ob/utils.js'
import MarkdownPostProcessor from './ob/MarkdownPostProcessor.js'
import SmmSettingTab from './ob/SmmSettingTab.js'
import { langList } from './src/config/zh'
import i18n from 'i18next'
import enTranslations from './locales/en.json'
import zhTranslations from './locales/zh.json'
import viTranslations from './locales/vi.json'
import zhtwTranslations from './locales/zhtw.json'
import Commands from './ob/Commands.js'
import markdown from 'simple-mind-map/src/parse/markdown.js'
import Menus from './ob/Menus.js'
export default class SimpleMindMapPlugin extends Plugin {
async onload() {
await this._addSetting()
i18n.init({
lng: getLanguage() || 'en',
fallbackLng: 'en',
resources: {
en: { translation: enTranslations },
zh: { translation: zhTranslations },
vi: { translation: viTranslations },
['zh-TW']: { translation: zhtwTranslations }
}
})
addIcon('smm-icon', SIDE_BAR_ICON)
this.registerView(SMM_VIEW_TYPE, leaf => new SmmEditView(leaf, this))
this._createSmmFile = this._createSmmFile.bind(this)
this.addRibbonIcon(
'smm-icon',
this._t('action.createMindMap'),
this._createSmmFile
)
this.commands = new Commands(this)
this.menus = new Menus(this)
this._registerMonkeyPatches()
this._switchToSmmAfterLoad()
this._initStatusBar()
this.markdownPostProcessor = new MarkdownPostProcessor(this)
this.markdownPostProcessor.register()
this.fileToSubpathMap = {}
this.noSaveOnClose = false
}
async _createSmmFile(folderPath = '', callback) {
try {
if (typeof folderPath !== 'string' || folderPath === '/') {
folderPath = ''
}
const { fileNameFormat } = this.settings
folderPath = this._getCreateFolderPath(folderPath)
await this._ensureDirectoryExists(folderPath)
const { vault } = this.app
const filePath = `${
folderPath ? folderPath + '/' : ''
}${formatFileName(fileNameFormat, { ignores: ['notename'] })}.smm.md`
const fileContent = createDefaultText(
filePath,
this._getCreateDefaultMindMapOptions()
)
try {
const existingFile = vault.getFileByPath(filePath)
if (existingFile) {
new Notice(this._t('tip.fileExist'))
} else {
await vault.create(filePath, fileContent)
if (callback && typeof callback === 'function') {
callback(filePath)
} else {
await this.app.workspace.openLinkText(filePath, '', true)
}
}
} catch (error) {
new Notice(this._t('tip.createMindMapFail'))
}
} catch (error) {
new Notice(this._t('tip.createMindMapFail'))
}
}
_getCreateFolderPath(folderPath) {
if (folderPath) return folderPath
const { filePathType, filePath } = this.settings
switch (filePathType) {
case 'root':
return ''
case 'custom':
return filePath
case 'currentFileFolder':
return this._getActiveFileDirectory()
default:
return ''
}
}
async _getAvailableFilaName(filePath, extCount = 1) {
let counter = 1
while (await this.app.vault.adapter.exists(filePath)) {
const parts = filePath.split('.')
const extList = []
for (let i = 0; i < extCount; i++) {
extList.push(parts.pop())
}
const ext = extList.reverse().join('.')
filePath = `${parts.join('.')}_${counter}.${ext}`
counter++
}
return filePath
}
async _addSetting() {
await this._loadSettings()
this.addSettingTab(new SmmSettingTab(this.app, this))
}
async _loadSettings() {
const data = await this.loadData()
this.settings = Object.assign({}, DEFAULT_SETTINGS, data || {})
const obLang = getLanguage()
const target = langList.find(
item => item.value === obLang || item.alias === obLang
)
this.settings.lang = target ? target.value : 'en'
}
async _saveSettings() {
await this.saveData(this.settings)
}
_registerMonkeyPatches() {
const key = 'https://github.com/wanglin2/mind-map'
this.register(
around(Workspace.prototype, {
getActiveViewOfType(old) {
return dedupe(key, old, function(...args) {
const result = old && old.apply(this, args)
if (args[1] === IGNORE_CHECK_SMM) {
return result
}
const currentView = this.app?.workspace?.activeLeaf?.view
if (!currentView || !(currentView instanceof SmmEditView))
return result
})
}
})
)
if (!this.app.plugins?.plugins?.['obsidian-hover-editor']) {
this.register(
around(WorkspaceLeaf.prototype, {
getRoot(old) {
return function() {
const top = old.call(this)
return top.getRoot === this.getRoot ? top : top.getRoot()
}
}
})
)
}
const self = this
this.register(
around(WorkspaceLeaf.prototype, {
detach(next) {
return function() {
return next.apply(this)
}
},
setViewState(next) {
return function(state, ...rest) {
if (
(state.state?.isSwitchToMarkdownViewFromSmmView ||
['preview', 'source'].includes(state.state?.mode)) &&
!state.state?.isPreviewToMindMapViewFromMdView
) {
return next.apply(this, [state, ...rest])
}
if (
self._loaded &&
state.type === 'markdown' &&
state.state?.file
) {
const curFilePath = state.state.file
if (self._isSmmFile(curFilePath)) {
let isStop = false
if (rest && rest[0]) {
if (rest[0].subpath) {
self.fileToSubpathMap[curFilePath] = rest[0].subpath
} else if (
rest[0].match &&
rest[0].match.matches.length > 0
) {
const uid = getUidFromSource(rest[0])
if (uid) {
const existLeaf = this.app.workspace
.getLeavesOfType(SMM_VIEW_TYPE)
.find(leaf => {
const file = leaf.view.file
? leaf.view.file.path
: leaf.view.state.file
return file && file === curFilePath
})
if (existLeaf) {
if (
existLeaf.view instanceof SmmEditView &&
existLeaf.view.jumpToNodeByUid
) {
existLeaf.view.jumpToNodeByUid(uid)
} else {
self.fileToSubpathMap[curFilePath] = uid
}
this.app.workspace.setActiveLeaf(existLeaf)
isStop = true
} else {
self.fileToSubpathMap[curFilePath] = uid
}
}
}
}
if (isStop) return
const newState = {
...state,
type: SMM_VIEW_TYPE
}
return next.apply(this, [newState, ...rest])
}
}
return next.apply(this, [state, ...rest])
}
}
})
)
this.menus.addMarkdownFileMenus()
}
_switchToSmmAfterLoad() {
this.app.workspace.onLayoutReady(async () => {
let leaf
const markdownLeaf = this.app.workspace.getLeavesOfType('markdown')
for (leaf of markdownLeaf) {
if (
leaf.view instanceof MarkdownView &&
leaf.view.file &&
this._isSmmFile(leaf.view.file)
) {
this._setSmmView(leaf)
}
}
})
}
async _setSmmView(leaf) {
await leaf.setViewState({
type: SMM_VIEW_TYPE,
state: leaf.view.getState(),
popstate: true
})
}
_getActiveSmmView() {
return this.app.workspace.getActiveViewOfType(SmmEditView, IGNORE_CHECK_SMM)
}
_isSmmFile(file) {
if (!file) {
return false
}
const isString = typeof file === 'string'
const filePath = isString ? file : file.path
if (filePath.endsWith('.smm.md')) {
return true
}
let cache = null
if (isString) {
cache = this.app.metadataCache.getCache(file)
} else {
if (file.extension === SMM_VIEW_TYPE) {
return true
}
cache = this.app.metadataCache.getFileCache(file)
}
if (cache?.frontmatter?.tags?.contains(SMM_TAG)) {
return true
}
if (/\.smm.*\.md$/.test(filePath)) {
return true
}
return false
}
_initStatusBar() {
this.statusBarItem = this.addStatusBarItem()
this.statusBarItem.empty()
this.statusBarItem.style.display = 'none'
this.smmFileStatus = this.statusBarItem.createEl('div', {
cls: 'smm-file-status'
})
this.registerEvent(
this.app.workspace.on('file-open', this._updateStatusBar.bind(this))
)
this.registerEvent(
this.app.workspace.on(
'active-leaf-change',
this._updateStatusBar.bind(this)
)
)
this._updateStatusBar()
}
_updateStatusBar() {
const activeFile = this.app.workspace.getActiveFile()
const isSmmFile = activeFile && this._isSmmFile(activeFile)
const statusBar = this.app.statusBar.containerEl
if (isSmmFile) {
this.statusBarItem.style.display = 'block'
statusBar.classList.add('smm-file-status-active')
} else {
this.statusBarItem.style.display = 'none'
statusBar.classList.remove('smm-file-status-active')
}
}
async _ensureDirectoryExists(dirPath) {
if (!dirPath) return
const { vault } = this.app
const exist = await vault.exists(dirPath)
if (!exist) {
await vault.createFolder(dirPath)
}
}
_t(val) {
return i18n.t(val)
}
_getCreateDefaultMindMapOptions() {
const { defaultTheme, defaultThemeDark, defaultLayout } = this.settings
return {
theme: this._getObIsDark() ? defaultThemeDark : defaultTheme,
layout: defaultLayout,
rootNodeDefaultText: this._t('common.rootNodeDefaultText'),
secondNodeDefaultText: this._t('common.secondNodeDefaultText'),
branchNodeDefaultText: this._t('common.branchNodeDefaultText')
}
}
_createDefaultMindMapData() {
return createDefaultMindMapData(
this._getCreateDefaultMindMapOptions(),
false
)
}
_getActiveFileDirectory() {
const activeFile = this.app.workspace.getActiveFile()
if (!activeFile) {
return null
}
if (activeFile instanceof TFolder) {
return null
}
const parent = activeFile.parent
if (!parent) {
return null
}
return parent.path.replace(/\/$/, '')
}
_getObIsDark() {
return document.body.classList.contains('theme-dark')
}
async _mdToMindmapData(md) {
const frontMatterRegex = /^---\n[\s\S]*?\n---\n/
const cleanedMd = md.replace(frontMatterRegex, '')
if (!cleanedMd.trim()) {
return null
}
const data = await markdown.transformMarkdownTo(cleanedMd, false)
if (!data) {
return null
}
const { defaultTheme, defaultThemeDark, defaultLayout } = this.settings
return {
root: data,
layout: defaultLayout,
theme: {
template: this._getObIsDark() ? defaultThemeDark : defaultTheme,
config: {}
}
}
}
onunload() {
this.markdownPostProcessor.destroy()
this.statusBarItem?.remove()
this.commands.clear()
}
}

View file

@ -1,98 +0,0 @@
import { Notice, MarkdownView } from 'obsidian'
export default class Commands {
constructor(plugin) {
this.plugin = plugin
this.app = plugin.app
this._addCreatesCommand()
this._addActionsCommand()
}
clear() {}
addCommand(command) {
this.plugin.addCommand(command)
}
_t(key) {
return this.plugin._t(key)
}
_addCreatesCommand() {
this.addCommand({
id: 'create-smm-mindmap',
name: this._t('action.createMindMap'),
callback: async () => {
this.plugin._createSmmFile()
}
})
this.addCommand({
id: 'create-smm-mindmap-insert-markdown',
name: this._t('action.createMindMapInsertToMd'),
checkCallback: checking => {
const markdownView = this.app.workspace.getActiveViewOfType(
MarkdownView
)
if (markdownView) {
if (!checking) {
this.plugin._createSmmFile('', fileName => {
try {
const file = this.app.vault.getFileByPath(fileName)
const currentFile = this.app.workspace.getActiveFile()
const linkText = this.app.fileManager.generateMarkdownLink(
file,
currentFile?.path || ''
)
const activeEditor = this.app.workspace.activeEditor
activeEditor.editor.replaceSelection('!' + linkText)
} catch (error) {
console.error(error)
new Notice(this._t('tip.createMindMapFail'))
}
})
}
return true
}
return false
}
})
}
_addActionsCommand() {
this.addCommand({
id: 'enter-smm-mindmap-demonstrate',
name: this._t('action.enterDemonstrate'),
checkCallback: checking => {
const view = this.plugin._getActiveSmmView()
if (view) {
if (!checking) {
view.mindMapAPP.$bus.$emit('enter_demonstrate')
}
return true
}
return false
}
})
this.addCommand({
id: 'save-smm-mindmap-and-update-image',
name: this._t('action.saveAndUpdateImage'),
hotkeys: [
{
modifiers: ['Mod', 'Shift'],
key: 's'
}
],
checkCallback: checking => {
const view = this.plugin._getActiveSmmView()
if (view) {
if (!checking) {
view.forceSaveAndUpdateImage()
}
return true
}
return false
}
})
}
}

View file

@ -1,64 +0,0 @@
import { Modal } from 'obsidian'
import i18n from 'i18next'
export class ConfirmDialog extends Modal {
constructor(app, params) {
super(app)
this.params = {
title: i18n.t('tip.tip'),
confirmText: i18n.t('tip.confirm'),
cancelText: i18n.t('tip.cancel'),
content: '',
danger: false,
...params
}
this.resolvePromise = null
this.promise = new Promise(resolve => {
this.resolvePromise = resolve
})
this.setTitle(this.params.title)
}
onOpen() {
const { contentEl } = this
contentEl.empty()
const contentContainer = contentEl.createDiv('smm-confirm-dialog-content')
if (typeof this.params.content === 'string') {
contentContainer.createEl('p', { text: this.params.content })
} else {
contentContainer.appendChild(this.params.content)
}
const buttonContainer = contentEl.createDiv('smm-confirm-dialog-buttons')
const cancelBtn = buttonContainer.createEl('button', {
text: this.params.cancelText
})
cancelBtn.addEventListener('click', () => {
this.params.onCancel?.()
this.resolvePromise(false)
this.close()
})
const confirmBtn = buttonContainer.createEl('button', {
text: this.params.confirmText,
cls: this.params.danger ? 'mod-warning' : 'mod-cta'
})
confirmBtn.addEventListener('click', () => {
this.params.onConfirm?.()
this.resolvePromise(true)
this.close()
})
}
onClose() {
const { contentEl } = this
contentEl.empty()
if (this.resolvePromise) {
this.resolvePromise(false)
}
}
}
export function showConfirmationDialog(app, params) {
const dialog = new ConfirmDialog(app, params)
dialog.open()
return dialog.promise
}

View file

@ -1,421 +0,0 @@
import { TFile } from 'obsidian'
import {
parseMarkdownText,
assembleMarkdownText
} from './metadataAndMarkdown.js'
import { dataURItoBlob, smmFilePathToFileName } from './utils.js'
import LZString from 'lz-string'
import { SMM_VIEW_TYPE } from './constant.js'
import SmmEditView from '../SmmEditView.js'
export default class MarkdownPostProcessor {
constructor(plugin) {
this.plugin = plugin
this.urlCache = new Map()
this.imageElements = new Map()
this.emptyMap = new Map()
this.handleFileModify = this.handleFileModify.bind(this)
this.handleFileDelete = this.handleFileDelete.bind(this)
this.handleModifySvgName = this.handleModifySvgName.bind(this)
plugin.registerEvent(plugin.app.vault.on('modify', this.handleFileModify))
plugin.registerEvent(plugin.app.vault.on('delete', this.handleFileDelete))
plugin.registerEvent(
plugin.app.vault.on('rename', this.handleModifySvgName)
)
}
destroy() {
this.plugin.app.vault.off('modify', this.handleFileModify)
this.plugin.app.vault.off('delete', this.handleFileDelete)
this.plugin.app.vault.off('rename', this.handleModifySvgName)
this.urlCache.forEach(url => URL.revokeObjectURL(url))
this.urlCache.clear()
this.imageElements.clear()
this.emptyMap.clear()
}
async handleFileModify(file) {
if (!(file instanceof TFile) || !this.plugin._isSmmFile(file)) return
try {
const noUrlCache = !this.urlCache.has(file.path)
const hasEmpty = this.emptyMap.has(file.path)
if (noUrlCache && !hasEmpty) {
return
}
const curIsNoImage = noUrlCache && hasEmpty
const data = await this.plugin.app.vault.read(file)
const parsedata = parseMarkdownText(data)
const newUrl = this._getImgUrl(parsedata.svgdata)
if (!newUrl) {
return
}
const oldUrl = this.urlCache.get(file.path)
if (oldUrl) URL.revokeObjectURL(oldUrl)
this.urlCache.set(file.path, newUrl)
const emptyDiv = this.emptyMap.get(file.path)
if (emptyDiv) {
this.emptyMap.delete(file.path)
}
const elements = this.imageElements.get(file.path) || new Set()
elements.forEach(img => {
img.src = newUrl
})
if (curIsNoImage && emptyDiv) {
const img = this._createSvgImageElement(newUrl, file.path)
emptyDiv.replaceWith(img)
}
} catch (error) {
console.error('更新图片失败:', error)
}
}
async handleFileDelete(file) {
if (!(file instanceof TFile)) return
const url = this.urlCache.get(file.path)
if (url) {
URL.revokeObjectURL(url)
this.urlCache.delete(file.path)
const imgs = this.imageElements.get(file.path)
imgs.forEach(img => {
const parentElement = img.parentElement
parentElement.empty()
this._createEmptyDiv(
parentElement,
file,
this.plugin._t('tip.fileDeleted'),
false
)
})
this.imageElements.delete(file.path)
}
const emptyDiv = this.emptyMap.get(file.path)
if (emptyDiv) {
emptyDiv.textContent = this.plugin._t('tip.fileDeleted')
emptyDiv.removeEventListener('dblclick', emptyDiv.dblclickHandler)
this.emptyMap.delete(file.path)
}
this.deletePreviewSvgFile(file)
}
async deletePreviewSvgFile(file) {
try {
const targetFileName = smmFilePathToFileName(file.path, '.svg')
const { embedImageIsSeparateFileFolder } = this.plugin.settings
const previewFilePath = embedImageIsSeparateFileFolder
? `${embedImageIsSeparateFileFolder}/${targetFileName}`
: targetFileName
const exist = await this.plugin.app.vault.exists(previewFilePath)
if (exist) {
await this.plugin.app.vault.adapter.remove(previewFilePath)
}
} catch (error) {
console.error('删除预览图像文件失败:', error)
}
}
async handleModifySvgName(file, oldName) {
if (!(file instanceof TFile) || !this.plugin._isSmmFile(file)) return
let newPath = ''
try {
oldName = smmFilePathToFileName(oldName, '.svg')
const { embedImageIsSeparateFileFolder } = this.plugin.settings
const oldPath = embedImageIsSeparateFileFolder + '/' + oldName
const exist = await this.plugin.app.vault.exists(oldPath)
const newName = smmFilePathToFileName(file.name, '.svg')
newPath = embedImageIsSeparateFileFolder + '/' + newName
if (exist) {
await this.plugin.app.vault.adapter.rename(oldPath, newPath)
}
} catch (error) {
console.error('修改svg文件名失败:', error)
}
await this._modifyFileSvgPathData(file, newPath)
}
async _modifyFileSvgPathData(file, newPath) {
try {
const { embedImageIsSeparateFile } = this.plugin.settings
const newSvgData = `![[${newPath}]]`
const newDate = moment().format('YYYY-MM-DD HH:mm:ss')
// 如果当前文件已经打开了,那么走视图自己的保存逻辑
let isOpen = false
const markdownLeafs = this.plugin.app.workspace.getLeavesOfType(
SMM_VIEW_TYPE
)
for (const leaf of markdownLeafs) {
if (
leaf.view instanceof SmmEditView &&
leaf.view.file.path === file.path
) {
isOpen = true
if (embedImageIsSeparateFile) {
leaf.view.parsedMindMapData.svgdata = newSvgData
leaf.view.parsedMindMapData.svgdataUpdateAt = newDate
}
leaf.view.forceSave(true)
break
}
}
// 否则直接修改文件内容
if (!isOpen) {
const content = await this.plugin.app.vault.read(file)
const result = parseMarkdownText(content)
result.metadata.path = file.path
if (embedImageIsSeparateFile) {
result.svgdata = newSvgData
result.svgdataUpdateAt = newDate
}
this.plugin.app.noSaveOnClose = false
const str = assembleMarkdownText(result)
await this.plugin.app.vault.process(file, () => {
return str
})
}
} catch (error) {
console.error('保存失败:', error)
}
}
register() {
this.plugin.registerMarkdownPostProcessor(
this._markdownPostProcessor.bind(this)
)
}
async _markdownPostProcessor(el, ctx) {
try {
if (this._isSpecialCard(el)) {
return this._processSpecialCard(el)
}
const embeddedItems = el.querySelectorAll('.internal-embed')
if (embeddedItems.length === 0) {
await this._processEditMode(el, ctx)
} else {
await this._processReadingMode(embeddedItems, ctx)
}
} catch (error) {
console.error('Markdown处理失败:', error)
}
}
_isSpecialCard(el) {
return (
el.hasClass('components--DynamicDataView-PageCardCoverPreviewContent') &&
el.children[0]?.getAttribute('data-heading') === 'metadata' &&
el.children[2]?.getAttribute('data-heading') === 'svgdata' &&
el.children[4]?.getAttribute('data-heading') === 'linkdata'
)
}
_processSpecialCard(el) {
el.classList.add('smmMindCard')
const svgdata = el.children[3].children[0].innerHTML
const url = this._getImgUrl(svgdata)
const img = this._createSvgImageElement(url)
el.replaceChildren(img)
}
_createEmptyDiv(containerEl, file, text, listenerDblclick = true) {
const emptyDiv = containerEl.createEl('div', { text })
emptyDiv.style.color = 'var(--text-muted)'
emptyDiv.style.border = '1px dashed var(--text-muted)'
emptyDiv.style.padding = '10px'
emptyDiv.style.borderRadius = '4px'
emptyDiv.style.textAlign = 'center'
if (listenerDblclick) {
emptyDiv.dblclickHandler = () => {
const newWindow = this.plugin.settings.embedDblClickNewWindow
this.plugin.app.workspace.openLinkText(file?.path, '', newWindow)
}
emptyDiv.addEventListener('dblclick', emptyDiv.dblclickHandler)
}
return emptyDiv
}
async _processEditMode(el, ctx) {
const file = this.plugin.app.vault.getFileByPath(ctx.sourcePath)
if (!this.plugin._isSmmFile(file)) return
if (ctx.remainingNestLevel !== undefined && ctx.remainingNestLevel < 4)
return
let containerEl = this._findValidContainer(ctx.containerEl)
if (!containerEl || this._shouldSkipContainer(containerEl)) return
try {
const data = await this.plugin.app.vault.read(file)
const img = await this._createImageFromFile(file, data)
containerEl.empty()
if (img) {
containerEl.appendChild(img)
this._updateImgSize(containerEl, img)
} else {
const emptyDiv = this._createEmptyDiv(
containerEl,
file,
this.plugin._t('tip.noPreviewImageInFile')
)
this.emptyMap.set(file.path, emptyDiv)
}
if (containerEl.hasClass('markdown-embed')) {
containerEl.classList.remove('markdown-embed', 'inline-embed')
}
if (containerEl.hasClass('canvas-node-content')) {
containerEl.classList.add('smm-canvas-node-content')
}
} catch (error) {
console.error(`处理编辑模式失败: ${file?.path}`, error)
}
}
async _processReadingMode(embeddedItems, ctx) {
for (const item of embeddedItems) {
try {
const fname = item.getAttribute('src')?.split('#')[0]
if (!fname) continue
const file = this.plugin.app.metadataCache.getFirstLinkpathDest(
fname,
ctx.sourcePath
)
if (!(file instanceof TFile) || !this.plugin._isSmmFile(file)) continue
const data = await this.plugin.app.vault.read(file)
const img = await this._createImageFromFile(file, data)
this._updateImgSize(item, img)
if (img) {
item.parentElement?.replaceChild(img, item)
}
} catch (error) {
console.error('处理嵌入项失败', error)
}
}
}
_updateImgSize(containerEl, img) {
if (
containerEl.parentNode &&
containerEl.parentNode.classList.contains('popover')
) {
containerEl.classList.add('smm-popover-img-preview-content')
} else {
const width = containerEl.getAttribute('width')
const height = containerEl.getAttribute('height')
if (width) {
img.width = width
}
if (height) {
img.height = height
}
}
}
async _createImageFromFile(file, data) {
if (this.urlCache.has(file.path)) {
const url = this.urlCache.get(file.path)
return this._createSvgImageElement(url, file.path)
}
const parsedata = parseMarkdownText(data)
const svgdata = parsedata.svgdata
if (!svgdata) {
return null
}
const url = this._getImgUrl(svgdata)
this.urlCache.set(file.path, url)
const img = this._createSvgImageElement(url, file.path)
return img
}
_getImgUrl(svgdata) {
if (!svgdata) return ''
let url = ''
if (/^!\[\[/.test(svgdata)) {
const match = svgdata.match(/!\[\[([^\]]+)\]\]/)
if (match && match[1]) {
url = this.plugin.app.vault.adapter.getResourcePath(match[1])
}
} else {
const svgBlob = dataURItoBlob(LZString.decompressFromBase64(svgdata))
url = URL.createObjectURL(svgBlob)
}
return url
}
_createSvgImageElement(url, filePath = '') {
const img = document.createElement('img')
img.src = url
img.draggable = false
if (filePath) {
img.setAttribute('data-smm-file', filePath)
img.addEventListener('dblclick', () => {
const newWindow = this.plugin.settings.embedDblClickNewWindow
this.plugin.app.workspace.openLinkText(filePath, '', newWindow)
})
if (!this.imageElements.has(filePath)) {
this.imageElements.set(filePath, new Set())
}
this.imageElements.get(filePath).add(img)
const observer = new MutationObserver(() => {
if (!document.contains(img)) {
this.imageElements.get(filePath)?.delete(img)
observer.disconnect()
}
})
observer.observe(document.body, { subtree: true, childList: true })
}
return img
}
_findValidContainer(containerEl) {
const invalidClasses = [
'dataview',
'cm-preview-code-block',
'cm-embed-block'
]
while (containerEl) {
if (invalidClasses.some(cls => containerEl.classList.contains(cls))) {
return null
}
const isExcalidraw = containerEl.classList.contains('excalidraw-md-host')
if (
containerEl.classList.contains('internal-embed') ||
containerEl.classList.contains('markdown-embed') ||
containerEl.classList.contains('markdown-reading-view') ||
isExcalidraw
) {
return containerEl
}
containerEl = containerEl.parentElement
}
return null
}
_shouldSkipContainer(containerEl) {
return (
containerEl.hasAttribute('ready') ||
['dataview', 'cm-preview-code-block', 'cm-embed-block'].some(cls =>
containerEl.classList.contains(cls)
)
)
}
}

View file

@ -1,281 +0,0 @@
import { TFile, TFolder, Notice, MarkdownView } from 'obsidian'
import {
parseMarkdownText,
assembleMarkdownText
} from './metadataAndMarkdown.js'
import { hideTargetMenu } from './utils.js'
import { PreviewMindMap } from './PreviewMindMap.js'
import LZString from 'lz-string'
import { SMM_VIEW_TYPE, SMM_TAG } from './constant.js'
import { around } from 'monkey-around'
import markdown from 'simple-mind-map/src/parse/markdown.js'
import { showConfirmationDialog } from './ConfirmDialog.js'
import SmmEditView from '../SmmEditView.js'
export default class Menus {
constructor(plugin) {
this.plugin = plugin
this.app = plugin.app
this._addFileMenus()
}
_t(key) {
return this.plugin._t(key)
}
_addFileMenus() {
this.plugin.registerEvent(
this.app.workspace.on('file-menu', (menu, file) => {
if (file instanceof TFolder) {
menu.addItem(item => {
item
.setTitle(this._t('action.createMindMap'))
.setIcon('smm-icon')
.onClick(() => {
this.plugin._createSmmFile(file.path)
})
})
} else if (file instanceof TFile) {
if (this.plugin._isSmmFile(file)) {
hideTargetMenu(menu, '在新窗口中打开')
hideTargetMenu(menu, '移动至新窗口')
menu.addItem(item =>
item
.setTitle(this._t('action.openAsMd'))
.setIcon('document')
.setSection('open')
.onClick(async () => {
await this.app.workspace.openLinkText(file.path, '')
const leaf = this.app.workspace.getLeaf(false)
const mdViewType = this.app.viewRegistry.getTypeByExtension(
'md'
)
await leaf.setViewState({
type: mdViewType,
state: {
...leaf.getViewState().state,
isSwitchToMarkdownViewFromSmmView: true
},
active: true
})
this.app.workspace.revealLeaf(leaf)
})
)
menu.addItem(item =>
item
.setTitle(this._t('action.changeToMdFile'))
.setIcon('refresh-cw')
.setSection('open')
.onClick(async () => {
const confirmed = await showConfirmationDialog(this.app, {
content: this._t('tip.mindMapToMdTip')
})
if (!confirmed) {
return
}
const content = await this.app.vault.read(file)
const result = parseMarkdownText(content)
const mindMapData = LZString.decompressFromBase64(
result.metadata.content
)
let mdStr = ''
const tags = result.metadata.tags.filter(tag => {
return tag !== SMM_TAG
})
if (tags.length) {
mdStr += 'tags:\n'
for (const tag of tags) {
mdStr += ` - ${tag}\n`
}
}
if (result.metadata.yaml) {
mdStr += result.metadata.yaml
}
if (mdStr) {
mdStr = '---\n' + mdStr + '---\n'
}
const {
nodeTextToMarkdownTitleMaxLevel
} = this.plugin.settings
const mdMindMap = markdown.transformToMarkdown(
JSON.parse(mindMapData).root,
nodeTextToMarkdownTitleMaxLevel
)
mdStr += mdMindMap
let newPath = file.path.replace(/\.smm.*\.md$/g, '.md')
newPath = await this.plugin._getAvailableFilaName(newPath)
await this.app.vault.rename(file, newPath)
const renamedFile = this.app.vault.getFileByPath(newPath)
if (renamedFile) {
this.plugin.markdownPostProcessor.deletePreviewSvgFile(file)
this.app.noSaveOnClose = true
const markdownLeafs = this.app.workspace.getLeavesOfType(
SMM_VIEW_TYPE
)
for (const leaf of markdownLeafs) {
if (
leaf.view instanceof SmmEditView &&
leaf.view.file.path === renamedFile.path
) {
leaf.detach()
break
}
}
await this.app.vault.modify(renamedFile, mdStr)
this.app.noSaveOnClose = false
const ref = this.app.metadataCache.on(
'changed',
changedFile => {
if (changedFile.path === renamedFile.path) {
this.app.metadataCache.offref(ref)
this.app.workspace.openLinkText(
renamedFile.path,
'',
true
)
new Notice(this._t('tip.changeSuccess'))
}
}
)
}
})
)
}
}
})
)
}
addMarkdownFileMenus() {
const self = this
this.plugin.register(
around(MarkdownView.prototype, {
onPaneMenu(next) {
return function(menu, source) {
const res = next.apply(this, [menu, source])
if (self.plugin._isSmmFile(this.file)) {
if (source === 'more-options') {
menu.addItem(item =>
item
.setTitle(self._t('action.openAsMindMap'))
.setIcon('document')
.setSection('pane')
.onClick(() => {
self.plugin._setSmmView(this.leaf)
})
)
}
} else {
if (source === 'more-options') {
menu.addItem(item =>
item
.setTitle(self._t('action.previewAsMindMap'))
.setIcon('smm-icon')
.setSection('pane')
.onClick(() => {
let previewMindMap = new PreviewMindMap({
plugin: self.plugin,
file: this.file,
onClose: () => {
previewMindMap = null
}
})
})
)
menu.addItem(item =>
item
.setTitle(self._t('action.changeToMindMapFile'))
.setIcon('refresh-cw')
.setSection('pane')
.onClick(async () => {
const confirmed = await showConfirmationDialog(this.app, {
content: self._t('tip.mdToMindMapTip')
})
if (!confirmed) {
return
}
let yaml = ''
const tagList = []
await this.app.fileManager.processFrontMatter(
this.file,
frontmatter => {
if (frontmatter.tags) {
tagList.push(...frontmatter.tags)
delete frontmatter.tags
}
}
)
if (!tagList.includes(SMM_TAG)) {
tagList.push(SMM_TAG)
}
const content = await this.app.vault.read(this.file)
if (content.startsWith('---\n')) {
yaml = content.split('---\n')[1]
}
const mindMapData = await self.plugin._mdToMindmapData(
content
)
if (!mindMapData) {
new Notice(self._t('tip.mdToMindMapFail'))
return
}
let newPath = this.file.path.replace('.md', '.smm.md')
newPath = await self.plugin._getAvailableFilaName(
newPath,
2
)
await this.app.vault.rename(this.file, newPath)
const renamedFile = this.app.vault.getFileByPath(newPath)
const str = assembleMarkdownText({
metadata: {
path: `${newPath || ''}`,
tags: tagList,
yaml: yaml,
content: LZString.compressToBase64(
JSON.stringify(mindMapData)
)
},
svgdata: '',
linkdata: []
})
if (renamedFile) {
const markdownLeafs = this.app.workspace.getLeavesOfType(
'markdown'
)
for (const leaf of markdownLeafs) {
if (
leaf.view instanceof MarkdownView &&
leaf.view.file.path === renamedFile.path
) {
leaf.detach()
break
}
}
await this.app.vault.modify(renamedFile, str)
const ref = this.app.metadataCache.on(
'changed',
changedFile => {
if (changedFile.path === renamedFile.path) {
this.app.metadataCache.offref(ref)
this.app.workspace.openLinkText(
renamedFile.path,
'',
true
)
new Notice(self._t('tip.changeSuccess'))
}
}
)
}
})
)
}
}
return res
}
}
})
)
}
}

View file

@ -1,104 +0,0 @@
export default class ModifyFileName {
constructor(view) {
this.view = view
this.plugin = view.plugin
this.app = view.app
this.titleEl = null
}
setupTitleEditing() {
this.titleEl = this.getTitleElement()
if (!this.titleEl) return
this.titleEl.setAttribute('contenteditable', 'true')
this.onBlur = this.onBlur.bind(this)
this.titleEl.addEventListener('blur', this.onBlur)
this.onKeydown = this.onKeydown.bind(this)
this.titleEl.addEventListener('keydown', this.onKeydown)
}
getTitleElement() {
return this.view.containerEl.querySelector('.view-header-title')
}
async finishEditing(accept) {
if (!this.titleEl.isConnected) return
const file = this.view.file
if (!file) return
const originalName = file.basename
if (accept) {
const newName = this.titleEl.textContent.trim()
if (!newName) {
new Notice(this.plugin._t('tip.fileNameEmpty'))
return
}
this.titleEl.innerHTML = newName
if (newName === originalName) return
try {
const parentPath = file.parent.path
const extension = file.extension
const newPath = `${parentPath}${
parentPath !== '/' ? '/' : ''
}${newName}${extension ? '.' + extension : ''}`
if (!/^[^<>:"/\\|?*]+$/.test(newName)) {
new Notice(this.plugin._t('tip.fileNameIllegal'))
return
}
const existingFile =
this.app.vault.getFileByPath(newPath) ||
this.app.vault.getFileByPath(newPath.replace(/^\//, ''))
if (existingFile) {
new Notice(this.plugin._t('tip.fileExist'))
return
}
await this.app.fileManager.renameFile(file, newPath)
} catch (error) {
console.error('重命名文件失败:', error)
new Notice(this.plugin._t('tip.fileRenameFail'))
}
} else {
this.titleEl.innerHTML = originalName
const selection = window.getSelection()
const range = document.createRange()
let lastTextNode = null
const walker = document.createTreeWalker(
this.titleEl,
NodeFilter.SHOW_TEXT,
null,
false
)
let node
while ((node = walker.nextNode())) {
lastTextNode = node
}
range.setStart(
lastTextNode,
/\.smm$/.test(lastTextNode.textContent)
? lastTextNode.length - 4
: lastTextNode.length
)
range.collapse(true)
selection.removeAllRanges()
selection.addRange(range)
}
}
onBlur() {
this.finishEditing(true)
}
onKeydown(e) {
if (e.key === 'Enter') {
this.finishEditing(true)
} else if (e.key === 'Escape') {
this.finishEditing(false)
}
}
unload() {
if (this.titleEl) {
this.titleEl.removeAttribute('contenteditable')
this.titleEl.removeEventListener('blur', this.onBlur)
this.titleEl.removeEventListener('keydown', this.onKeydown)
}
}
}

View file

@ -1,59 +0,0 @@
import { initPreviewModeApp } from '../src/main'
export class PreviewMindMap {
constructor({ plugin, file, onClose }) {
this.app = plugin.app
this.plugin = plugin
this.file = file
this.onClose = onClose
this.previewModeApp = null
this.container = document.createElement('div')
this.wrap = document.createElement('div')
this.container.appendChild(this.wrap)
this.container.classList.add('smm-preview-md-to-mindmap-container')
document.body.appendChild(this.container)
this._renderView()
}
async _renderView() {
const content = await this.app.vault.read(this.file)
const mindMapData = await this.plugin._mdToMindmapData(content)
this.previewModeApp = initPreviewModeApp(this.wrap, {
getInitMindMapData: () => {
return mindMapData
},
getMindMapOptions: () => {
return {
readonly: true,
fit: true
}
},
getFile: () => {
return this.file
},
getSettings: () => {
return this.plugin.settings || {}
},
getMindMapLocalConfig: () => {
const { mindMapLocalConfig, themeMode } = this.plugin.settings
const config = mindMapLocalConfig || {}
config.isDark =
themeMode === 'follow'
? this.plugin._getObIsDark()
: themeMode === 'dark'
return config
}
})
this.previewModeApp.$bus.$on('closePreviewMode', this._close.bind(this))
}
_close() {
this.previewModeApp.$destroy()
document.body.removeChild(this.container)
this.previewModeApp = null
this.container = null
this.wrap = null
this.onClose()
}
}

View file

@ -1,781 +0,0 @@
import { PluginSettingTab, Setting, Notice, normalizePath } from 'obsidian'
import themeList from 'simple-mind-map-plugin-themes/themeList'
import { layoutGroupList } from '../src/config'
import { GITHUB_ICON, COMMUNITY_ICON } from './constant'
import { DEFAULT_SETTINGS } from './constant'
import { SuggestionModal } from './SuggestionModal'
import { TextInfoDialog } from './TextInfoDialog'
import { fragWithHTML } from './utils'
const validateInteger = (value, defaultValue = 0, errorTip) => {
value = Number(value)
if (!Number.isNaN(value) && value > 0) {
return value
} else {
new Notice(errorTip)
return defaultValue
}
}
export default class SmmSettingTab extends PluginSettingTab {
constructor(app, plugin) {
super(app, plugin)
this.plugin = plugin
this.filePathSettings = null
this.imagePathSettings = null
this.imageSubPathSettings = null
this.attachmentPathSettings = null
this.attachmentSubPathSettings = null
this.compressImageOptionsMaxWidthSettings = null
this.compressImageOptionsMaxHeightSettings = null
this.compressImageOptionsQualitySettings = null
this.embedImageIsSeparateFileFolderSettings = null
}
display() {
const { containerEl } = this
containerEl.empty()
this._addBaseSetting()
this._addFileSaveSetting()
this._addCompressSetting()
this._addImageHostingSetting()
this._addEmbedSetting()
this._addHelpInfo()
}
_addBaseSetting() {
const { containerEl } = this
new Setting(containerEl)
.setName(this.plugin._t('setting.autoSave.title'))
.setDesc(this.plugin._t('setting.autoSave.desc'))
.addText(text => {
text
.setValue(String(this.plugin.settings.autoSaveTime))
.onChange(async value => {
value = validateInteger(
value,
DEFAULT_SETTINGS.autoSaveTime,
this.plugin._t('tip.integerInputError')
)
this.plugin.settings.autoSaveTime = value
await this.plugin._saveSettings()
})
})
new Setting(containerEl)
.setName(this.plugin._t('setting.themeMode.title'))
.setDesc(this.plugin._t('setting.themeMode.desc'))
.addDropdown(dropdown => {
;[
{
name: this.plugin._t('setting.themeMode.option1'),
value: 'follow'
},
{
name: this.plugin._t('setting.themeMode.option2'),
value: 'light'
},
{
name: this.plugin._t('setting.themeMode.option3'),
value: 'dark'
}
].forEach(item => {
dropdown.addOption(item.value, item.name)
})
dropdown
.setValue(this.plugin.settings.themeMode)
.onChange(async value => {
this.plugin.settings.themeMode = value
await this.plugin._saveSettings()
})
})
const allThemeList = [
{
name: this.plugin._t('setting.theme.title'),
value: 'default',
dark: false
},
...themeList
].reverse()
new Setting(containerEl)
.setName(this.plugin._t('setting.theme.title'))
.setDesc(this.plugin._t('setting.theme.desc'))
.addDropdown(dropdown => {
allThemeList.forEach(item => {
dropdown.addOption(item.value, item.name)
})
dropdown
.setValue(this.plugin.settings.defaultTheme)
.onChange(async value => {
this.plugin.settings.defaultTheme = value
await this.plugin._saveSettings()
})
})
new Setting(containerEl)
.setName(this.plugin._t('setting.theme.title2'))
.setDesc(this.plugin._t('setting.theme.desc2'))
.addDropdown(dropdown => {
allThemeList.forEach(item => {
dropdown.addOption(item.value, item.name)
})
dropdown
.setValue(this.plugin.settings.defaultThemeDark)
.onChange(async value => {
this.plugin.settings.defaultThemeDark = value
await this.plugin._saveSettings()
})
})
const allLayoutList = []
;(layoutGroupList[this.plugin.settings.lang] || layoutGroupList.en).forEach(
item => {
allLayoutList.push(
...item.list.map((item2, index) => {
return {
name: item.name + (item.list.length > 1 ? index + 1 : ''),
value: item2
}
})
)
}
)
new Setting(containerEl)
.setName(this.plugin._t('setting.layout.title'))
.setDesc(this.plugin._t('setting.layout.desc'))
.addDropdown(dropdown => {
allLayoutList.forEach(item => {
dropdown.addOption(item.value, item.name)
})
dropdown
.setValue(this.plugin.settings.defaultLayout)
.onChange(async value => {
this.plugin.settings.defaultLayout = value
await this.plugin._saveSettings()
})
})
}
_addFileSaveSetting() {
const { containerEl } = this
this._setHeader(containerEl, this.plugin._t('setting.title.title2'))
new Setting(containerEl)
.setName(this.plugin._t('setting.file.title1'))
.setDesc(this.plugin._t('setting.file.desc1'))
.addText(text => {
text
.setValue(this.plugin.settings.fileNameFormat)
.onChange(async value => {
this.plugin.settings.fileNameFormat = value.trim()
? value.trim()
: DEFAULT_SETTINGS.fileNameFormat
await this.plugin._saveSettings()
})
})
.addExtraButton(button =>
button
.setIcon('help')
.setTooltip(this.plugin._t('setting.file.filenameFormatDesc'))
.onClick(async () => {
new TextInfoDialog(this.app, {
title: this.plugin._t('setting.file.filenameFormatDesc'),
html: this.plugin._t('html.filenameFormatDesc')
}).open()
})
)
new Setting(containerEl)
.setName(this.plugin._t('setting.file.title3'))
.setDesc(this.plugin._t('setting.file.desc3'))
.addText(text => {
text
.setValue(this.plugin.settings.nodePasteImageNameFormat)
.onChange(async value => {
this.plugin.settings.nodePasteImageNameFormat = value.trim()
? value.trim()
: DEFAULT_SETTINGS.nodePasteImageNameFormat
await this.plugin._saveSettings()
})
})
.addExtraButton(button =>
button
.setIcon('help')
.setTooltip(this.plugin._t('setting.file.filenameFormatDesc'))
.onClick(async () => {
new TextInfoDialog(this.app, {
title: this.plugin._t('setting.file.filenameFormatDesc'),
html: this.plugin._t('html.filenameFormatDesc')
}).open()
})
)
new Setting(containerEl)
.setName(this.plugin._t('setting.folder.title4'))
.setDesc(this.plugin._t('setting.folder.desc4'))
.addDropdown(dropdown => {
this._getFilePathOptions().forEach(item => {
dropdown.addOption(item.value, item.name)
})
dropdown
.setValue(this.plugin.settings.filePathType)
.onChange(async value => {
this.plugin.settings.filePathType = value
await this.plugin._saveSettings()
this._updateFilePathSettingsVisibility()
})
})
this.filePathSettings = new Setting(containerEl)
.setName(this.plugin._t('setting.folder.title1'))
.setDesc(this.plugin._t('setting.folder.desc1'))
.addText(text => {
text.setValue(this.plugin.settings.filePath).onChange(async value => {
this.plugin.settings.filePath = normalizePath(value)
await this.plugin._saveSettings()
})
this._addFolderSelectBtn(text, selected => {
this.plugin.settings.filePath = normalizePath(selected)
this.plugin._saveSettings()
})
})
this.filePathSettings.settingEl.className += ' smm-setting-sub-item'
this._updateFilePathSettingsVisibility()
new Setting(containerEl)
.setName(this.plugin._t('setting.folder.title5'))
.setDesc(this.plugin._t('setting.folder.desc5'))
.addDropdown(dropdown => {
this._getFilePathOptions(true).forEach(item => {
dropdown.addOption(item.value, item.name)
})
dropdown
.setValue(this.plugin.settings.imagePathType)
.onChange(async value => {
this.plugin.settings.imagePathType = value
await this.plugin._saveSettings()
this._updateImagePathSettingsVisibility()
})
})
this.imagePathSettings = new Setting(containerEl)
.setName(this.plugin._t('setting.folder.title2'))
.setDesc(this.plugin._t('setting.folder.desc2'))
.addText(text => {
text.setValue(this.plugin.settings.imagePath).onChange(async value => {
this.plugin.settings.imagePath = normalizePath(value)
await this.plugin._saveSettings()
})
this._addFolderSelectBtn(text, selected => {
this.plugin.settings.imagePath = normalizePath(selected)
this.plugin._saveSettings()
})
})
this.imagePathSettings.settingEl.className += ' smm-setting-sub-item'
this.imageSubPathSettings = new Setting(containerEl)
.setName(this.plugin._t('setting.folder.title6'))
.setDesc(this.plugin._t('setting.folder.desc6'))
.addText(text => {
text
.setValue(this.plugin.settings.imageSubPath)
.onChange(async value => {
this.plugin.settings.imageSubPath = normalizePath(value)
await this.plugin._saveSettings()
})
this._addFolderSelectBtn(text, selected => {
this.plugin.settings.imageSubPath = normalizePath(selected)
this.plugin._saveSettings()
})
})
this.imageSubPathSettings.settingEl.className += ' smm-setting-sub-item'
this._updateImagePathSettingsVisibility()
new Setting(containerEl)
.setName(this.plugin._t('setting.folder.title7'))
.setDesc(this.plugin._t('setting.folder.desc7'))
.addDropdown(dropdown => {
this._getFilePathOptions(true).forEach(item => {
dropdown.addOption(item.value, item.name)
})
dropdown
.setValue(this.plugin.settings.attachmentPathType)
.onChange(async value => {
this.plugin.settings.attachmentPathType = value
await this.plugin._saveSettings()
this._updateAttachmentPathSettingsVisibility()
})
})
this.attachmentPathSettings = new Setting(containerEl)
.setName(this.plugin._t('setting.folder.title3'))
.setDesc(this.plugin._t('setting.folder.desc3'))
.addText(text => {
text
.setValue(this.plugin.settings.attachmentPath)
.onChange(async value => {
this.plugin.settings.attachmentPath = normalizePath(value)
await this.plugin._saveSettings()
})
this._addFolderSelectBtn(text, selected => {
this.plugin.settings.attachmentPath = normalizePath(selected)
this.plugin._saveSettings()
})
})
this.attachmentPathSettings.settingEl.className += ' smm-setting-sub-item'
this.attachmentSubPathSettings = new Setting(containerEl)
.setName(this.plugin._t('setting.folder.title6'))
.setDesc(this.plugin._t('setting.folder.desc6'))
.addText(text => {
text
.setValue(this.plugin.settings.attachmentSubPath)
.onChange(async value => {
this.plugin.settings.attachmentSubPath = value
await this.plugin._saveSettings()
})
this._addFolderSelectBtn(text, selected => {
this.plugin.settings.attachmentSubPath = selected
this.plugin._saveSettings()
})
})
this.attachmentSubPathSettings.settingEl.className +=
' smm-setting-sub-item'
this._updateAttachmentPathSettingsVisibility()
new Setting(containerEl)
.setName(this.plugin._t('setting.folder.title8'))
.setDesc(this.plugin._t('setting.folder.desc8'))
.addToggle(toggle => {
toggle
.setValue(this.plugin.settings.supportObSearch)
.onChange(async value => {
this.plugin.settings.supportObSearch = value
await this.plugin._saveSettings()
})
})
new Setting(containerEl)
.setName(this.plugin._t('setting.folder.title9'))
.setDesc(this.plugin._t('setting.folder.desc9'))
.addToggle(toggle => {
toggle
.setValue(this.plugin.settings.saveCanvasViewData)
.onChange(async value => {
this.plugin.settings.saveCanvasViewData = value
await this.plugin._saveSettings()
})
})
new Setting(containerEl)
.setName(this.plugin._t('setting.folder.title10'))
.setDesc(this.plugin._t('setting.folder.desc10'))
.addDropdown(dropdown => {
new Array(6).fill(0).forEach((_, index) => {
dropdown.addOption(index + 1, index + 1)
})
dropdown
.setValue(this.plugin.settings.nodeTextToMarkdownTitleMaxLevel)
.onChange(async value => {
this.plugin.settings.nodeTextToMarkdownTitleMaxLevel = value
await this.plugin._saveSettings()
})
})
}
_addCompressSetting() {
const { containerEl } = this
this._setHeader(containerEl, this.plugin._t('setting.title.title3'))
new Setting(containerEl)
.setName(this.plugin._t('setting.compress.title1'))
.setDesc(this.plugin._t('setting.compress.desc1'))
.addToggle(toggle => {
toggle
.setValue(this.plugin.settings.compressImage)
.onChange(async value => {
this.plugin.settings.compressImage = value
await this.plugin._saveSettings()
this._updateCompressImageSettingsVisibility()
})
})
this.compressImageOptionsMaxWidthSettings = new Setting(containerEl)
.setName(this.plugin._t('setting.compress.title2'))
.setDesc(this.plugin._t('setting.compress.desc2'))
.addText(text => {
text
.setValue(String(this.plugin.settings.compressImageOptionsMaxWidth))
.onChange(async value => {
value = validateInteger(
value,
DEFAULT_SETTINGS.compressImageOptionsMaxWidth,
this.plugin._t('tip.integerInputError')
)
this.plugin.settings.compressImageOptionsMaxWidth = value
await this.plugin._saveSettings()
})
})
this.compressImageOptionsMaxWidthSettings.settingEl.className +=
' smm-setting-sub-item'
this.compressImageOptionsMaxHeightSettings = new Setting(containerEl)
.setName(this.plugin._t('setting.compress.title3'))
.setDesc(this.plugin._t('setting.compress.desc3'))
.addText(text => {
text
.setValue(String(this.plugin.settings.compressImageOptionsMaxHeight))
.onChange(async value => {
value = validateInteger(
value,
DEFAULT_SETTINGS.compressImageOptionsMaxHeight,
this.plugin._t('tip.integerInputError')
)
this.plugin.settings.compressImageOptionsMaxHeight = value
await this.plugin._saveSettings()
})
})
this.compressImageOptionsMaxHeightSettings.settingEl.className +=
' smm-setting-sub-item'
this.compressImageOptionsQualitySettings = new Setting(containerEl)
.setName(this.plugin._t('setting.compress.title4'))
.setDesc(
`${this.plugin._t('setting.compress.desc4')}${this.plugin._t(
'setting.compress.curValue'
)}: ${this.plugin.settings.compressImageOptionsQuality}`
)
.addSlider(slider =>
slider
.setLimits(0, 1, 0.1)
.setValue(this.plugin.settings.compressImageOptionsQuality)
.onChange(async value => {
this.plugin.settings.compressImageOptionsQuality = value
this.compressImageOptionsQualitySettings?.setDesc(
`${this.plugin._t('setting.compress.desc4')}${this.plugin._t(
'setting.compress.curValue'
)}: ${value}`
)
await this.plugin._saveSettings()
})
)
.addExtraButton(button =>
button
.setIcon('reset')
.setTooltip(this.plugin._t('setting.compress.reset'))
.onClick(async () => {
const defaultValue = DEFAULT_SETTINGS.compressImageOptionsQuality
this.plugin.settings.compressImageOptionsQuality = defaultValue
const sliderEl = this.compressImageOptionsQualitySettings
?.components[0]
if (sliderEl) {
sliderEl.setValue(defaultValue)
this.plugin.settings.compressImageOptionsQuality = defaultValue
this.compressImageOptionsQualitySettings?.setDesc(
`${this.plugin._t(
'setting.compress.curValue'
)}: ${defaultValue}`
)
}
await this.plugin._saveSettings()
})
)
this.compressImageOptionsQualitySettings.settingEl.className +=
' smm-setting-sub-item'
this._updateCompressImageSettingsVisibility()
}
_addEmbedSetting() {
const { containerEl } = this
this._setHeader(containerEl, this.plugin._t('setting.title.title4'))
new Setting(containerEl)
.setName(this.plugin._t('setting.embed.title3'))
.setDesc(this.plugin._t('setting.embed.desc3'))
.addToggle(toggle => {
toggle
.setValue(this.plugin.settings.embedImageIsSeparateFile)
.onChange(async value => {
this.plugin.settings.embedImageIsSeparateFile = value
this._updateEmbedImageFileFolderSettingsVisibility()
await this.plugin._saveSettings()
})
})
this.embedImageIsSeparateFileFolderSettings = new Setting(containerEl)
.setName(this.plugin._t('setting.embed.title4'))
.setDesc(this.plugin._t('setting.embed.desc4'))
.addText(text => {
text
.setValue(this.plugin.settings.embedImageIsSeparateFileFolder)
.onChange(async value => {
this.plugin.settings.embedImageIsSeparateFileFolder = value
await this.plugin._saveSettings()
})
this._addFolderSelectBtn(text, selected => {
this.plugin.settings.embedImageIsSeparateFileFolder = selected
this.plugin._saveSettings()
})
})
this.embedImageIsSeparateFileFolderSettings.settingEl.className +=
' smm-setting-sub-item'
this._updateEmbedImageFileFolderSettingsVisibility()
new Setting(containerEl)
.setName(this.plugin._t('setting.embed.title2'))
.setDesc(this.plugin._t('setting.embed.desc2'))
.addToggle(toggle => {
toggle
.setValue(this.plugin.settings.compressImageIsTransparent)
.onChange(async value => {
this.plugin.settings.compressImageIsTransparent = value
await this.plugin._saveSettings()
})
})
new Setting(containerEl)
.setName(this.plugin._t('setting.embed.title1'))
.setDesc(this.plugin._t('setting.embed.desc1'))
.addToggle(toggle => {
toggle
.setValue(this.plugin.settings.embedDblClickNewWindow)
.onChange(async value => {
this.plugin.settings.embedDblClickNewWindow = value
await this.plugin._saveSettings()
})
})
new Setting(containerEl)
.setName(this.plugin._t('setting.embed.title5'))
.setDesc(this.plugin._t('setting.embed.desc5'))
.addToggle(toggle => {
toggle
.setValue(this.plugin.settings.embedLinkNewWindowOpen)
.onChange(async value => {
this.plugin.settings.embedLinkNewWindowOpen = value
await this.plugin._saveSettings()
})
})
}
_addFolderSelectBtn(text, callback = () => {}) {
const inputEl = text.inputEl
const suggestionButton = inputEl.parentElement?.createEl('button', {
text: this.plugin._t('setting.button.select'),
cls: 'suggestion-button'
})
suggestionButton?.addEventListener('click', () => {
new SuggestionModal({
plugin: this.plugin,
type: 'folder',
app: this.app,
onSelect: selected => {
text.setValue(selected)
inputEl.focus()
callback(selected)
}
}).open()
})
}
_getFilePathOptions(full = false) {
const res = [
{
name: this.plugin._t('setting.folder.option1'),
value: 'root'
},
{
name: this.plugin._t('setting.folder.option2'),
value: 'custom'
},
{
name: this.plugin._t('setting.folder.option3'),
value: 'currentFileFolder'
}
]
if (full) {
res.push({
name: this.plugin._t('setting.folder.option4'),
value: 'currentFileFolderSubFolder'
})
}
return res
}
_updateEmbedImageFileFolderSettingsVisibility() {
const isVisible = this.plugin.settings.embedImageIsSeparateFile
if (this.embedImageIsSeparateFileFolderSettings) {
this.embedImageIsSeparateFileFolderSettings.settingEl.classList[
isVisible ? 'remove' : 'add'
]('smm-setting-item-hide')
}
}
_updateFilePathSettingsVisibility() {
const isVisible = this.plugin.settings.filePathType === 'custom'
if (this.filePathSettings) {
this.filePathSettings.settingEl.classList[isVisible ? 'remove' : 'add'](
'smm-setting-item-hide'
)
}
}
_updateImagePathSettingsVisibility() {
const isVisible = this.plugin.settings.imagePathType === 'custom'
if (this.imagePathSettings) {
this.imagePathSettings.settingEl.classList[isVisible ? 'remove' : 'add'](
'smm-setting-item-hide'
)
}
const isVisibleSub =
this.plugin.settings.imagePathType === 'currentFileFolderSubFolder'
if (this.imageSubPathSettings) {
this.imageSubPathSettings.settingEl.classList[
isVisibleSub ? 'remove' : 'add'
]('smm-setting-item-hide')
}
}
_updateAttachmentPathSettingsVisibility() {
const isVisible = this.plugin.settings.attachmentPathType === 'custom'
if (this.attachmentPathSettings) {
this.attachmentPathSettings.settingEl.classList[
isVisible ? 'remove' : 'add'
]('smm-setting-item-hide')
}
const isVisibleSub =
this.plugin.settings.attachmentPathType === 'currentFileFolderSubFolder'
if (this.attachmentSubPathSettings) {
this.attachmentSubPathSettings.settingEl.classList[
isVisibleSub ? 'remove' : 'add'
]('smm-setting-item-hide')
}
}
_updateCompressImageSettingsVisibility() {
const isVisible = this.plugin.settings.compressImage
if (this.compressImageOptionsMaxWidthSettings) {
this.compressImageOptionsMaxWidthSettings.settingEl.classList[
isVisible ? 'remove' : 'add'
]('smm-setting-item-hide')
}
if (this.compressImageOptionsMaxHeightSettings) {
this.compressImageOptionsMaxHeightSettings.settingEl.classList[
isVisible ? 'remove' : 'add'
]('smm-setting-item-hide')
}
if (this.compressImageOptionsQualitySettings) {
this.compressImageOptionsQualitySettings.settingEl.classList[
isVisible ? 'remove' : 'add'
]('smm-setting-item-hide')
}
}
_addImageHostingSetting() {
const { containerEl } = this
this._setHeader(containerEl, this.plugin._t('setting.title.title6'))
// 是否开启图床
new Setting(containerEl)
.setName(this.plugin._t('setting.imageHosting.title1'))
.setDesc(this.plugin._t('setting.imageHosting.desc1'))
.addToggle(toggle => {
toggle
.setValue(this.plugin.settings.useImgHosting)
.onChange(async value => {
if (
value &&
(!this.plugin.settings.imgHostingUrl ||
!this.plugin.settings.imgHostingFormField ||
!this.plugin.settings.imgHostingResponseField)
) {
toggle.setValue(false)
new Notice(this.plugin._t('setting.imageHosting.tip1'))
return
}
this.plugin.settings.useImgHosting = value
await this.plugin._saveSettings()
})
})
// 图床url
new Setting(containerEl)
.setName(this.plugin._t('setting.imageHosting.title2'))
.setDesc(this.plugin._t('setting.imageHosting.desc2'))
.addText(text => {
text
.setValue(String(this.plugin.settings.imgHostingUrl))
.onChange(async value => {
this.plugin.settings.imgHostingUrl = value
await this.plugin._saveSettings()
})
})
// 表单字段
new Setting(containerEl)
.setName(this.plugin._t('setting.imageHosting.title3'))
.setDesc(this.plugin._t('setting.imageHosting.desc3'))
.addText(text => {
text
.setValue(String(this.plugin.settings.imgHostingFormField))
.onChange(async value => {
this.plugin.settings.imgHostingFormField = value
await this.plugin._saveSettings()
})
})
// 接口响应结构
new Setting(containerEl)
.setName(this.plugin._t('setting.imageHosting.title4'))
.setDesc(
fragWithHTML(
this.plugin._t('setting.imageHosting.desc4') +
'<a href="https://github.com/wanglin2/obsidian-simplemindmap/blob/main/docs/imageHosting.md" target="_blank">' +
this.plugin._t('setting.imageHosting.desc5') +
'</a>。'
)
)
.addText(text => {
text
.setValue(String(this.plugin.settings.imgHostingResponseField))
.onChange(async value => {
this.plugin.settings.imgHostingResponseField = value
await this.plugin._saveSettings()
})
})
}
_addOtherSetting() {
const { containerEl } = this
this._setHeader(containerEl, this.plugin._t('setting.title.title5'))
}
// 设置标题
_setHeader(containerEl, title) {
new Setting(containerEl).setName(title).setHeading()
}
_addHelpInfo() {
const { containerEl } = this
const linkEl = containerEl.createDiv('setting-item smm-setting-link-list')
linkEl.innerHTML = `
<div class="smm-setting-link-item">
<a href="https://github.com/wanglin2/obsidian-simplemindmap/issues" target="_blank">
${GITHUB_ICON}
<span>${this.plugin._t('setting.linkInfo.issues')}</span>
</a>
</div>
<div class="smm-setting-link-item">
<a href="https://forum.pkmer.net/" target="_blank">
${COMMUNITY_ICON}
<span>${this.plugin._t('setting.linkInfo.community')}</span>
</a>
</div>
`
}
}

View file

@ -1,39 +0,0 @@
import { SuggestModal } from 'obsidian'
export class SuggestionModal extends SuggestModal {
constructor({ plugin, app, getSuggestions, onSelect, type }) {
super(app)
this.plugin = plugin
this.emptyStateText = this.plugin._t('tip.noMatchResult')
this.type = type
if (this.type === 'folder') {
this.getSuggestions = this._queryFolders.bind(this)
} else {
this.getSuggestions = getSuggestions
}
this.onSelect = onSelect
}
_queryFolders(query) {
const list = this.app.vault.getAllFolders()
return list
.filter(item => {
return item.path.toLowerCase().includes(query)
})
.map(item => {
return item.path
})
}
getSuggestions(query) {
return this.getSuggestions(query)
}
renderSuggestion(suggestion, el) {
el.createEl('div', { text: suggestion })
}
onChooseSuggestion(suggestion) {
this.onSelect(suggestion)
}
}

View file

@ -1,34 +0,0 @@
import { Modal } from 'obsidian'
import i18n from 'i18next'
export class TextInfoDialog extends Modal {
constructor(app, params = {}) {
super(app)
this.params = {
title: '',
html: '',
closeText: i18n.t('tip.close'),
...params
}
this.setTitle(this.params.title)
}
onOpen() {
const { contentEl } = this
contentEl.empty()
const contentContainer = contentEl.createDiv('smm-text-info-dialog-content')
contentContainer.innerHTML = this.params.html
const buttonContainer = contentEl.createDiv('smm-text-info-dialog-buttons')
const closeBtn = buttonContainer.createEl('button', {
text: this.params.closeText
})
closeBtn.addEventListener('click', () => {
this.close()
})
}
onClose() {
const { contentEl } = this
contentEl.empty()
}
}

View file

@ -1,90 +0,0 @@
export const SMM_VIEW_TYPE = 'smm'
export const SMM_TAG = 'simplemindmap'
export const getDefaultSmmData = (options = {}) => {
const theme = options.theme || 'classic13'
const layout = options.layout || 'logicalStructure'
const rootNodeDefaultText = options.rootNodeDefaultText || 'Root node' // 根节点
const secondNodeDefaultText = options.secondNodeDefaultText || 'Second node' // 二级节点
const branchNodeDefaultText = options.branchNodeDefaultText || 'Branch node' // 分支主题
return {
root: {
data: { text: rootNodeDefaultText },
children: [
{
data: { text: secondNodeDefaultText },
children: [
{ data: { text: branchNodeDefaultText }, children: [] },
{ data: { text: branchNodeDefaultText }, children: [] }
]
}
]
},
theme: { template: theme, config: {} },
layout
}
}
export const DEFAULT_SETTINGS = {
isFirstUse: true,
fileNameFormat: 'MindMap {date:YYYY-MM-DD HH.mm.ss}',
lang: 'zh',
themeMode: 'follow',
defaultLayout: 'logicalStructure',
defaultTheme: 'classic13',
defaultThemeDark: 'classic',
filePathType: 'root',
filePath: '',
imagePathType: 'currentFileFolder',
imagePath: '',
imageSubPath: '',
attachmentPathType: 'currentFileFolder',
attachmentPath: '',
attachmentSubPath: '',
compressImage: true,
compressImageOptionsMaxWidth: 1200,
compressImageOptionsMaxHeight: 1200,
compressImageOptionsQuality: 0.8,
compressImageIsTransparent: false,
embedDblClickNewWindow: true,
autoSaveTime: 5,
mindMapConfig: null,
mindMapLocalConfig: null,
supportObSearch: true,
saveCanvasViewData: true,
nodeTextToMarkdownTitleMaxLevel: 3,
embedImageIsSeparateFile: true,
embedImageIsSeparateFileFolder: '.smm-embed-image-files',
nodePasteImageNameFormat: '{notename}_pasteImage',
embedLinkNewWindowOpen: true,
useImgHosting: false,
imgHostingUrl: 'http://127.0.0.1:36677/upload',
imgHostingFormField: 'files',
imgHostingResponseField: 'data.result[0]'
}
let smmEditViewCount = 0
export const getSmmEditViewCount = () => {
return smmEditViewCount++
}
export const IGNORE_CHECK_SMM = 'ignoreCheckSmm'
export const SIDE_BAR_ICON = `<svg viewBox="0 0 1026 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M981.333333 473.173333H564.053333a42.666667 42.666667 0 0 0 0 85.333334h417.28a42.666667 42.666667 0 0 0 0-85.333334zM981.333333 838.186667H564.053333a42.666667 42.666667 0 0 0 0 85.333333h417.28a42.666667 42.666667 0 0 0 0-85.333333zM564.053333 193.493333h417.28a42.666667 42.666667 0 0 0 0-85.333333H564.053333a42.666667 42.666667 0 0 0 0 85.333333zM398.293333 515.84a42.666667 42.666667 0 0 0-42.666666-42.666667h-89.173334a526.933333 526.933333 0 0 0 27.52-117.12c13.653333-88.96 26.24-149.333333 75.093334-164.906666a42.666667 42.666667 0 1 0-27.093334-80.853334c-101.76 33.92-118.826667 144.213333-132.48 232.746667-15.146667 99.2-25.813333 130.133333-62.506666 130.133333H42.666667a42.666667 42.666667 0 0 0 0 85.333334h104.32c36.693333 0 47.36 30.933333 62.506666 130.133333 13.653333 88.533333 30.72 198.613333 132.48 232.746667a42.666667 42.666667 0 0 0 13.653334 2.133333 42.666667 42.666667 0 0 0 13.44-83.2c-48.853333-16.213333-61.44-75.733333-75.093334-164.693333a526.933333 526.933333 0 0 0-27.52-117.12h89.173334a42.666667 42.666667 0 0 0 42.666666-42.666667z" fill="currentColor"></path></svg>`
export const SAVE_ICON = `<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" width="256" height="256" class="svg-icon"><path d="M486.577954 156.09136h101.688183v203.376366a101.688183 101.688183 0 0 1-101.688183 101.688183h-152.532274a101.688183 101.688183 0 0 1-101.688182-101.688183v-203.376366h101.688182v203.376366h152.532274z m-279.642502-101.688182H610.129096a152.532274 152.532274 0 0 1 108.806356 47.285005l208.460774 217.612711a152.532274 152.532274 0 0 1 42.200596 105.247269v392.516385a152.532274 152.532274 0 0 1-152.532274 152.532274h-610.129096a152.532274 152.532274 0 0 1-152.532274-152.532274v-610.129096a152.532274 152.532274 0 0 1 152.532274-152.532274z m0 101.688182a50.844091 50.844091 0 0 0-50.844092 50.844092v610.129096a50.844091 50.844091 0 0 0 50.844092 50.844092h610.129096a50.844091 50.844091 0 0 0 50.844092-50.844092V424.548163a50.844091 50.844091 0 0 0-14.236346-35.082423L645.71996 171.853029a50.844091 50.844091 0 0 0-35.590864-15.761669z" fill="currentColor"></path></svg>`
export const IMPORT_ICON = `<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" width="256" height="256" class="svg-icon"><path d="M112.64 896a48.704 48.704 0 0 1-48.576-48.768V175.936a48.064 48.064 0 0 1 47.936-48H512a48.064 48.064 0 0 1 0 96H160v576h704V537.92a48.064 48.064 0 0 1 96 0v309.952a48.064 48.064 0 0 1-48.128 47.936z m409.6-192h-1.792a47.616 47.616 0 0 1-34.048-16.064 40.064 40.064 0 0 1-2.624-3.136l-89.6-119.872a48 48 0 0 1 76.8-57.6l22.016 29.312a698.624 698.624 0 0 1 107.136-216.384c90.56-123.84 201.6-192 312.512-192a48.064 48.064 0 1 1 0 96 318.144 318.144 0 0 0-234.88 152.704 618.624 618.624 0 0 0-86.976 168.256l23.104-17.344a48 48 0 1 1 57.6 76.8l-117.696 88.192a47.552 47.552 0 0 1-22.656 10.688h-8.512z" fill="currentColor"></path></svg>`
export const EXPORT_ICON = `<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" width="256" height="256" class="svg-icon" stroke="currentColor"><path d="M849.2 599v217H178.5V599c-0.7-23.7-20.1-42.7-44-42.7s-43.3 19-44 42.7v252.5c0 28.9 23.6 52.5 52.5 52.5h741.7c28.9 0 52.5-23.6 52.5-52.5V599c-0.7-23.7-20.1-42.7-44-42.7s-43.3 19-44 42.7z" fill="currentColor"></path><path d="M482.7 135.4l-164 164c-17.1 17.1-17.1 45.1 0 62.2s45.1 17.1 62.2 0l85.7-85.7v314.8c0 26 21.3 47.2 47.2 47.2 26 0 47.2-21.3 47.2-47.2V276l85.7 85.7c17.1 17.1 45.1 17.1 62.2 0s17.1-45.1 0-62.2l-164-164c-17.1-17.2-45.1-17.2-62.2-0.1z" fill="currentColor"></path></svg>`
export const OUTLINE_ICON = `<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" width="256" height="256" class="svg-icon" stroke="currentColor"><path d="M128 96h512a64 64 0 0 1 64 64v64a64 64 0 0 1-64 64H128a64 64 0 0 1-64-64V160a64 64 0 0 1 64-64z m32 64a32 32 0 1 0 0 64h448a32 32 0 0 0 0-64H160z m224 576h512a64 64 0 0 1 64 64v64a64 64 0 0 1-64 64H384a64 64 0 0 1-64-64v-64a64 64 0 0 1 64-64z m32 64a32 32 0 0 0 0 64h448a32 32 0 0 0 0-64H416z m-32-384h512a64 64 0 0 1 64 64v64a64 64 0 0 1-64 64H384a64 64 0 0 1-64-64v-64a64 64 0 0 1 64-64z m32 64a32 32 0 0 0 0 64h448a32 32 0 0 0 0-64H416z" fill="currentColor"></path></svg>`
export const MINDMAP_ICON = `<svg viewBox="0 0 1026 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" width="256" height="256" class="svg-icon" stroke="currentColor"><path d="M981.333333 473.173333H564.053333a42.666667 42.666667 0 0 0 0 85.333334h417.28a42.666667 42.666667 0 0 0 0-85.333334zM981.333333 838.186667H564.053333a42.666667 42.666667 0 0 0 0 85.333333h417.28a42.666667 42.666667 0 0 0 0-85.333333zM564.053333 193.493333h417.28a42.666667 42.666667 0 0 0 0-85.333333H564.053333a42.666667 42.666667 0 0 0 0 85.333333zM398.293333 515.84a42.666667 42.666667 0 0 0-42.666666-42.666667h-89.173334a526.933333 526.933333 0 0 0 27.52-117.12c13.653333-88.96 26.24-149.333333 75.093334-164.906666a42.666667 42.666667 0 1 0-27.093334-80.853334c-101.76 33.92-118.826667 144.213333-132.48 232.746667-15.146667 99.2-25.813333 130.133333-62.506666 130.133333H42.666667a42.666667 42.666667 0 0 0 0 85.333334h104.32c36.693333 0 47.36 30.933333 62.506666 130.133333 13.653333 88.533333 30.72 198.613333 132.48 232.746667a42.666667 42.666667 0 0 0 13.653334 2.133333 42.666667 42.666667 0 0 0 13.44-83.2c-48.853333-16.213333-61.44-75.733333-75.093334-164.693333a526.933333 526.933333 0 0 0-27.52-117.12h89.173334a42.666667 42.666667 0 0 0 42.666666-42.666667z" fill="currentColor"></path></svg>`
export const PRINT_ICON = `<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" width="256" height="256" class="svg-icon" stroke="currentColor"><path d="M864 352V154.7c0-17.1-6.8-33.4-18.9-45.4l-91.4-90.7C741.7 6.7 725.5 0 708.6 0H160v352H96c-53 0-96 43-96 96v384h160v128c0 35.3 28.7 64 64 64h576c35.3 0 64-28.7 64-64V832h160V352H864zM224 64h478c4.2 0 8.3 1.7 11.3 4.6l82 81.3c3 3 4.7 7.1 4.7 11.4V528H224V64z m544 896H256c-17.7 0-32-14.3-32-32V720h576v208c0 17.7-14.3 32-32 32z m192-192h-96V656H160v112H64V448c0-17.7 14.3-32 32-32h64v176h704V416h96v352z" fill="currentColor"></path><path d="M912 432c-17.7 0-32 14.3-32 32s14.3 32 32 32 32-14.3 32-32-14.3-32-32-32z" fill="currentColor"></path></svg>`
export const GITHUB_ICON = `<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" width="48" height="48" stroke="currentColor"><path d="M511.957333 21.333333C241.024 21.333333 21.333333 240.981333 21.333333 512c0 216.832 140.544 400.725333 335.573334 465.664 24.490667 4.394667 32.256-10.069333 32.256-23.082667 0-11.690667 0.256-44.245333 0-85.205333-136.448 29.610667-164.736-64.64-164.736-64.64-22.314667-56.704-54.4-71.765333-54.4-71.765333-44.586667-30.464 3.285333-29.824 3.285333-29.824 49.194667 3.413333 75.178667 50.517333 75.178667 50.517333 43.776 75.008 114.816 53.333333 142.762666 40.789333 4.522667-31.658667 17.152-53.376 31.189334-65.536-108.970667-12.458667-223.488-54.485333-223.488-242.602666 0-53.546667 19.114667-97.322667 50.517333-131.669334-5.034667-12.330667-21.930667-62.293333 4.778667-129.834666 0 0 41.258667-13.184 134.912 50.346666a469.802667 469.802667 0 0 1 122.88-16.554666c41.642667 0.213333 83.626667 5.632 122.88 16.554666 93.653333-63.488 134.784-50.346667 134.784-50.346666 26.752 67.541333 9.898667 117.504 4.864 129.834666 31.402667 34.346667 50.474667 78.122667 50.474666 131.669334 0 188.586667-114.730667 230.016-224.042666 242.090666 17.578667 15.232 33.578667 44.672 33.578666 90.453334v135.850666c0 13.141333 7.936 27.605333 32.853334 22.869334C862.250667 912.597333 1002.666667 728.746667 1002.666667 512 1002.666667 240.981333 783.018667 21.333333 511.957333 21.333333z" fill="currentColor"></path></svg>`
export const COMMUNITY_ICON = `<svg viewBox="0 0 1031 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" width="48" height="48" stroke="currentColor"><path d="M88.58011 231.028071a80.407056 80.407056 0 0 0-80.407057 79.106798v475.337354a80.453494 80.453494 0 0 0 81.660877 83.588046h99.539432l153.128656 153.778786 153.128656-153.778786h319.00449c21.77933 0 42.606685-8.799964 57.768627-24.426284a80.476713 80.476713 0 0 0 22.61521-58.511632v-69.540611h54.239355a80.407056 80.407056 0 0 0 79.756927-80.383837V160.837332a80.383837 80.383837 0 0 0-80.383838-80.383838H222.553172a80.407056 80.407056 0 0 0-80.407056 80.383838V231.028071H88.58011z m806.46211 421.724911V310.134869a80.360619 80.360619 0 0 0-80.383837-79.106798H205.974876V160.837332c0-9.171466 7.430049-16.578296 16.578296-16.578296h726.078273c9.148247 0 16.578296 7.40683 16.578296 16.578296v475.337354c0 9.171466-7.430049 16.601515-16.578296 16.601515h-53.589225zM72.001814 311.411909c0-9.171466 7.430049-16.601515 16.601515-16.601515h726.078273a16.578296 16.578296 0 0 1 16.578296 15.324475v475.337354c0 9.171466-7.430049 16.578296-16.578296 16.578296H471.390141l-127.611083 127.611084-127.611084-127.611084H88.58011a16.601515 16.601515 0 0 1-16.601515-16.578296V311.411909z m0 474.060314" fill="currentColor"></path><path d="M712.541653 548.105392a50.385017 50.385017 0 1 0-100.770033-0.046438 50.385017 50.385017 0 0 0 100.770033 0.046438z m0 0M502.015872 548.105392a50.408235 50.408235 0 1 0-100.816471 0 50.408235 50.408235 0 0 0 100.816471 0z m0 0M291.466872 548.105392a50.408235 50.408235 0 1 0-100.816471 0 50.408235 50.408235 0 0 0 100.816471 0z m0 0" fill="currentColor"></path></svg>`

View file

@ -1,147 +0,0 @@
import { getDefaultSmmData, SMM_TAG } from './constant'
import LZString from 'lz-string'
import i18n from 'i18next'
export const parseMarkdownText = text => {
const result = {
metadata: { path: '', tags: [], yaml: '', content: '' },
svgdata: '',
svgdataUpdateAt: '',
linkdata: [],
textdata: []
}
const lines = text.split('\n')
let currentSection = ''
let inCodeBlock = false
let inYamlHeader = false
let inTags = false
let codeBlockContent = []
for (const line of lines) {
if (line.trim() === '---') {
inYamlHeader = !inYamlHeader
continue
}
if (line.startsWith('# metadata')) {
currentSection = 'metadata'
continue
} else if (line.startsWith('# svgdata')) {
currentSection = 'svgdata'
continue
} else if (line.startsWith('# linkdata')) {
currentSection = 'linkdata'
continue
} else if (line.startsWith('# textdata')) {
break
}
if (line.trim() === '```metadata' || line.trim() === '```svgData') {
inCodeBlock = true
continue
} else if (line.trim() === '```' && inCodeBlock) {
inCodeBlock = false
if (currentSection === 'metadata') {
result.metadata.content = codeBlockContent.join('\n')
codeBlockContent = []
} else if (currentSection === 'svgdata') {
result.svgdata = codeBlockContent.join('\n')
if (result.svgdata == undefined) {
result.svgdata = ''
}
codeBlockContent = []
}
continue
}
if (inCodeBlock) {
codeBlockContent.push(line)
} else if (currentSection === 'linkdata' && line.startsWith('- ')) {
result.linkdata.push(line.replace('- ', '').trim())
} else if (currentSection === 'svgdata') {
if (line.startsWith('![[')) {
result.svgdata = line.trim()
} else if (line.startsWith('> updateAt:')) {
result.svgdataUpdateAt = line.match(/> updateAt:\s*(.*)/)[1]
}
} else if (inYamlHeader) {
if (line.startsWith('tags:')) {
inTags = true
} else if (inTags && line.startsWith(' -')) {
result.metadata.tags.push(line.replace(' -', '').trim())
} else {
inTags = false
if (line.startsWith('path:')) {
result.metadata.path = line.split(':')[1].trim()
} else if (line) {
result.metadata.yaml += line + '\n'
}
}
}
}
return result
}
export const assembleMarkdownText = obj => {
let result = '---\n'
result += `path: ${obj.metadata.path}\n`
result += 'tags:\n'
for (const tag of obj.metadata.tags) {
result += ` - ${tag}\n`
}
if (obj.metadata.yaml) {
result += obj.metadata.yaml
}
result += '---\n'
result += '> ' + i18n.t('tip.mdModifyTip') + '\n'
result += '# metadata\n'
result += '```metadata\n'
result += obj.metadata.content
result += '\n```\n'
result += '# svgdata\n'
if (obj.svgdata && /^!\[\[/.test(obj.svgdata)) {
result += obj.svgdata + '\n'
result += '> updateAt: ' + (obj.svgdataUpdateAt || '') + '\n'
} else {
result += '```svgData\n'
result += obj.svgdata
result += '\n```\n'
}
result += '# linkdata\n'
for (const item of obj.linkdata) {
result += `- ${item}\n`
}
result += '# textdata\n'
if (obj.textdata && Array.isArray(obj.textdata)) {
result += obj.textdata.join('\n\n')
}
return result
}
export const createDefaultMindMapData = (options, isCompress = true) => {
const content = JSON.stringify(getDefaultSmmData(options))
return isCompress ? LZString.compressToBase64(content) : content
}
export const createDefaultText = (filePath, options) => {
return assembleMarkdownText({
metadata: {
path: `${filePath || ''}`,
tags: [SMM_TAG],
yaml: '',
content: createDefaultMindMapData(options)
},
svgdata: '',
svgdataUpdateAt: '',
linkdata: [],
textdata: []
})
}

View file

@ -1,127 +0,0 @@
import { createUid } from 'simple-mind-map/src/utils/index.js'
export const simpleDeepClone = data => {
try {
return JSON.parse(JSON.stringify(data))
} catch (error) {
return null
}
}
export const generateRandomString = (
length = 12,
charSet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
) => {
if (typeof length !== 'number' || length <= 0) {
throw new Error('长度必须是正整数')
}
if (typeof charSet !== 'string' || charSet.length === 0) {
throw new Error('字符集不能为空')
}
let randomValues
if (typeof crypto !== 'undefined' && crypto.getRandomValues) {
randomValues = new Uint32Array(length)
crypto.getRandomValues(randomValues)
} else {
randomValues = new Array(length)
.fill(0)
.map(() => Math.random() * 0x100000000)
}
let result = ''
for (let i = 0; i < length; i++) {
const randomIndex = randomValues[i] % charSet.length
result += charSet.charAt(randomIndex)
}
return result
}
export const hideTargetMenu = (menu, text = '在新窗口中打开') => {
menu.items.forEach(item => {
if (item.title === text || item.dom?.innerText?.includes(text)) {
item.dom.hide()
}
})
}
export const dataURItoBlob = dataURI => {
const byteString = atob(dataURI.split(',')[1])
const mimeString = dataURI
.split(',')[0]
.split(':')[1]
.split(';')[0]
const ab = new ArrayBuffer(byteString.length)
const ia = new Uint8Array(ab)
for (let i = 0; i < byteString.length; i++) {
ia[i] = byteString.charCodeAt(i)
}
return new Blob([ab], { type: mimeString })
}
export const getUidFromSource = data => {
const { matches, content } = data.match
const total = content.length
const last = matches[matches.length - 1]
let index = last[1]
let str = content[index]
let uid = ''
let isJoin = false
while (true || index >= total) {
if (isJoin && (str === '\n' || str === undefined)) {
break
}
if (isJoin) {
uid += str
}
if (str === '^') {
isJoin = true
}
index++
str = content[index]
}
return uid
}
export const smmFilePathToFileName = (filePath, ext) => {
if (!filePath) return createUid() + ext
filePath =
filePath
.replace(/\//g, '_')
.replace(/.smm.md$/, '')
.replace(/.md$/, '') + ext
return filePath
}
export const formatFileName = (str, { notename, ignores } = {}) => {
str = str.trim()
if (!str) return ''
str = str.replace(/{([^{}]+)}/g, (...args) => {
const match = args[1].trim()
if (ignores && ignores.includes(match)) {
return args[0]
}
if (match === 'notename' && notename) {
return notename
} else if (match === 'date') {
return moment().format('YYYY-MM-DD')
} else if (match === 'time') {
return moment().format('HH:mm:ss')
} else if (match === 'datetime') {
return moment().format('YYYY-MM-DD HH:mm:ss')
} else if (match === 'random') {
return Math.random()
.toString(36)
.substring(2, 8)
} else if (match.startsWith('date:') && match.slice(5).trim()) {
return moment().format(match.slice(5).trim())
}
return args[0]
})
return str
}
export const fragWithHTML = html => {
return createFragment(frag => (frag.createDiv().innerHTML = html))
}

12260
plugin/package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -1,75 +0,0 @@
{
"name": "simple-mind-map",
"version": "0.1.0",
"private": true,
"scripts": {
"build": "cross-env NODE_ENV=production webpack --mode production",
"dev": "cross-env NODE_ENV=development webpack --watch --mode development",
"lint": "vue-cli-service lint",
"format": "prettier --write src/* src/*/* src/*/*/* src/*/*/*/*",
"createNodeImageList": "node ./scripts/createNodeImageList.js",
"ai:serve": "node ./scripts/ai.js"
},
"devDependencies": {
"@babel/core": "^7.28.0",
"@babel/preset-env": "^7.28.0",
"@types/node": "^16.11.6",
"babel-loader": "^10.0.0",
"babel-plugin-component": "^1.1.1",
"buffer": "^6.0.3",
"builtin-modules": "3.3.0",
"css-loader": "^7.1.2",
"css-minimizer-webpack-plugin": "^7.0.2",
"file-loader": "^6.2.0",
"less": "^3.12.2",
"less-loader": "^7.1.0",
"markdown-it": "^13.0.1",
"markdown-it-checkbox": "^1.1.0",
"mini-css-extract-plugin": "^2.9.2",
"obsidian": "latest",
"sass": "^1.89.2",
"sass-loader": "^16.0.5",
"stream-browserify": "^3.0.0",
"string_decoder": "^1.3.0",
"terser-webpack-plugin": "^5.3.14",
"url-loader": "^4.1.1",
"util": "^0.12.5",
"vue-loader": "^15.9.8",
"webpack": "^5.98.0",
"webpack-cli": "^6.0.1"
},
"dependencies": {
"@toast-ui/editor": "^3.1.5",
"element-ui": "^2.15.1",
"i18next": "^25.2.1",
"katex": "^0.16.9",
"lz-string": "^1.5.0",
"monkey-around": "^3.0.0",
"simple-mind-map-plugin-themes": "^1.0.0",
"v-viewer": "^1.6.4",
"vue": "^2.6.14",
"vue-i18n": "^8.27.2",
"vue-template-compiler": "^2.6.14",
"vuex": "^3.6.2",
"xlsx": "^0.18.5"
},
"eslintConfig": {
"root": true,
"env": {
"node": true
},
"extends": [
"plugin:vue/essential",
"eslint:recommended"
],
"parserOptions": {
"parser": "babel-eslint"
},
"rules": {}
},
"browserslist": [
"> 1%",
"last 2 versions",
"not dead"
]
}

View file

@ -1,5 +0,0 @@
declare module '*.vue' {
import Vue from 'vue';
export default Vue;
}

BIN
plugin/src/.DS_Store vendored

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -1,651 +0,0 @@
@font-face {
font-family: "iconfont"; /* Project id 2479351 */
src: url('iconfont.woff2?t=1764835435069') format('woff2'),
url('iconfont.woff?t=1764835435069') format('woff'),
url('iconfont.ttf?t=1764835435069') format('truetype');
}
.iconfont {
font-family: "iconfont" !important;
font-size: 16px;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.iconfour-squares:before {
content: "\ea3e";
}
.iconyousuojin:before {
content: "\e6f0";
}
.icondaimakuai:before {
content: "\e65d";
}
.iconcharulianjie:before {
content: "\ec7f";
}
.iconcharutupian:before {
content: "\ec81";
}
.iconwuxupailie:before {
content: "\ec82";
}
.iconyinyong:before {
content: "\ec88";
}
.iconyouxupailie:before {
content: "\ec89";
}
.iconzitidaima:before {
content: "\ec8a";
}
.iconzitishangbiao:before {
content: "\ec8b";
}
.iconzitibiaoti:before {
content: "\ec8c";
}
.iconzitixiabiao:before {
content: "\ec8d";
}
.iconbeijingyanse1:before {
content: "\e645";
}
.icondocdocx:before {
content: "\e635";
}
.iconsousuo1:before {
content: "\e661";
}
.icondodechild:before {
content: "\e70e";
}
.iconbofang:before {
content: "\e8a3";
}
.iconkuangxuan:before {
content: "\e624";
}
.iconcaidan:before {
content: "\e630";
}
.iconshangxiayidong:before {
content: "\e6c9";
}
.iconzuoyouyidong:before {
content: "\e6ca";
}
.iconbaocun:before {
content: "\e6e3";
}
.iconxinbiaoqianyedakai:before {
content: "\e623";
}
.icondaochu2:before {
content: "\e65f";
}
.icondaoru1:before {
content: "\e65a";
}
.iconarrow-left:before {
content: "\e61b";
}
.iconarrow-up:before {
content: "\e61c";
}
.icona-rongqi21:before {
content: "\e62b";
}
.icongeshishua:before {
content: "\e67b";
}
.iconcaozuo_geshishua:before {
content: "\e724";
}
.icontupian:before {
content: "\e8ba";
}
.iconwaikuang1:before {
content: "\e6db";
}
.iconwaikuang2:before {
content: "\e61f";
}
.iconqingchuyangshi:before {
content: "\e64a";
}
.iconchaolianjie1:before {
content: "\e6e2";
}
.icontag:before {
content: "\e62a";
}
.iconbeizhu:before {
content: "\e64b";
}
.icontaiyang:before {
content: "\e62e";
}
.iconjichuyangshi:before {
content: "\e61a";
}
.icongaiyao:before {
content: "\e653";
}
.iconMermaid:before {
content: "\e69a";
}
.iconzuoyouduiqi:before {
content: "\ec87";
}
.iconxise:before {
content: "\e680";
}
.iconshubiaoyidong:before {
content: "\e659";
}
.iconvip:before {
content: "\e65e";
}
.iconlianjie:before {
content: "\e619";
}
.iconjibiji:before {
content: "\e618";
}
.iconhuiyuan-:before {
content: "\e615";
}
.iconAIshengcheng:before {
content: "\e6b5";
}
.iconprinting:before {
content: "\ea28";
}
.iconwenjianjia:before {
content: "\e614";
}
.iconcontentleft:before {
content: "\e8c9";
}
.iconjuzhongduiqi:before {
content: "\ec80";
}
.iconfile-excel:before {
content: "\e7b7";
}
.iconfreemind:before {
content: "\e97d";
}
.iconwaikuang:before {
content: "\e640";
}
.iconhighlight:before {
content: "\e6b8";
}
.iconyanshibofang:before {
content: "\e648";
}
.iconfujian:before {
content: "\e88a";
}
.icongeshihua:before {
content: "\e7a3";
}
.iconyuanma:before {
content: "\e658";
}
.icongundongtiao:before {
content: "\e670";
}
.iconxietongwendang:before {
content: "\e60d";
}
.iconTXT:before {
content: "\e6e1";
}
.iconwenjian1:before {
content: "\e69f";
}
.icondodeparent:before {
content: "\e70f";
}
.icongongshi:before {
content: "\e617";
}
.icontouming:before {
content: "\e60c";
}
.iconlieri:before {
content: "\e60b";
}
.iconmoon_line:before {
content: "\e745";
}
.iconsousuo:before {
content: "\e693";
}
.iconjiantouyou:before {
content: "\e62d";
}
.iconbianji1:before {
content: "\e60a";
}
.icondaohang1:before {
content: "\e632";
}
.iconyanjing:before {
content: "\e8bf";
}
.iconwangzhan:before {
content: "\e628";
}
.iconcsdn:before {
content: "\e608";
}
.iconshejiaotubiao-10:before {
content: "\e644";
}
.iconstar:before {
content: "\e7df";
}
.iconfork:before {
content: "\e641";
}
.iconxiazai:before {
content: "\e613";
}
.iconteamwork:before {
content: "\e870";
}
.iconshuiyin:before {
content: "\e67a";
}
.iconxmind:before {
content: "\ea57";
}
.iconmouseR:before {
content: "\e6bd";
}
.iconmouseL:before {
content: "\e6c0";
}
.iconwenjian:before {
content: "\e607";
}
.iconpdf:before {
content: "\e740";
}
.iconPNG:before {
content: "\ec18";
}
.iconSVG:before {
content: "\e621";
}
.iconmarkdown:before {
content: "\ec04";
}
.iconjson:before {
content: "\ea42";
}
.iconlianjiexian:before {
content: "\e75b";
}
.iconbangzhu:before {
content: "\e620";
}
.iconshezhi:before {
content: "\e8b7";
}
.iconwushuju:before {
content: "\e643";
}
.iconzuijinliulan:before {
content: "\e62f";
}
.icon3zuidahua-3:before {
content: "\e692";
}
.iconzuixiaohua:before {
content: "\e650";
}
.iconzuidahua:before {
content: "\e651";
}
.iconguanbi:before {
content: "\e652";
}
.icondiannao:before {
content: "\eac0";
}
.iconzhuye:before {
content: "\e65c";
}
.iconbendi1x:before {
content: "\e606";
}
.iconbeijingyanse:before {
content: "\e6f8";
}
.iconqingchu:before {
content: "\e605";
}
.iconcase:before {
content: "\e6c6";
}
.iconxingzhuang-wenzi:before {
content: "\eb99";
}
.iconzitijiacu:before {
content: "\ec83";
}
.iconzitixiahuaxian:before {
content: "\ec85";
}
.iconzitixieti:before {
content: "\ec86";
}
.iconshanchuxian:before {
content: "\e612";
}
.iconzitiyanse:before {
content: "\e854";
}
.icongithub:before {
content: "\e64f";
}
.iconchoose1:before {
content: "\e6c5";
}
.iconzhuti:before {
content: "\e7aa";
}
.icondaochu1:before {
content: "\e63e";
}
.iconlingcunwei:before {
content: "\e657";
}
.iconexport:before {
content: "\e642";
}
.icondakai:before {
content: "\ebdf";
}
.iconxinjian:before {
content: "\e64e";
}
.iconjianqie:before {
content: "\e601";
}
.iconzhengli:before {
content: "\e83b";
}
.iconfuzhi:before {
content: "\e604";
}
.iconniantie:before {
content: "\e63f";
}
.iconshangyi:before {
content: "\e6be";
}
.iconxiayi:before {
content: "\e6bf";
}
.icongaikuozonglan:before {
content: "\e609";
}
.iconquanxuan:before {
content: "\f199";
}
.icondaoru:before {
content: "\e6a3";
}
.iconhoutui-shi:before {
content: "\e656";
}
.iconqianjin1:before {
content: "\e654";
}
.iconwithdraw:before {
content: "\e603";
}
.iconqianjin:before {
content: "\e600";
}
.iconhuifumoren:before {
content: "\e60e";
}
.iconhuanhang:before {
content: "\e61e";
}
.iconsuoxiao:before {
content: "\ec13";
}
.iconbianji:before {
content: "\e626";
}
.iconfangda:before {
content: "\e663";
}
.iconquanping1:before {
content: "\e664";
}
.icondingwei:before {
content: "\e616";
}
.icondaohang:before {
content: "\e611";
}
.iconjianpan:before {
content: "\e64d";
}
.iconquanping:before {
content: "\e602";
}
.icondaochu:before {
content: "\e63d";
}
.iconbiaoqian:before {
content: "\e63c";
}
.iconflow-Mark:before {
content: "\e65b";
}
.iconchaolianjie:before {
content: "\e6f4";
}
.iconjingzi:before {
content: "\e610";
}
.iconxiaolian:before {
content: "\e60f";
}
.iconimage:before {
content: "\e629";
}
.iconjiegou:before {
content: "\e61d";
}
.iconyangshi:before {
content: "\e631";
}
.iconfuhao-dagangshu:before {
content: "\e71f";
}
.icontianjiazijiedian:before {
content: "\e622";
}
.iconjiedian:before {
content: "\e655";
}
.iconshanchu:before {
content: "\e696";
}
.iconzhankai:before {
content: "\e64c";
}
.iconzhankai1:before {
content: "\e673";
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.9 KiB

View file

@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1702344017086" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1621" width="128" height="128" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M776 328m-72 0a72 72 0 1 0 144 0 72 72 0 1 0-144 0Z" p-id="1622" fill="#bfbfbf"></path><path d="M999.904 116.608a32 32 0 0 0-21.952-10.912l-456.192-31.904a31.552 31.552 0 0 0-27.2 11.904l-92.192 114.848a32 32 0 0 0 0.672 40.896l146.144 169.952-147.456 194.656 36.48-173.376a32 32 0 0 0-11.136-31.424L235.616 245.504l79.616-125.696a32 32 0 0 0-29.28-49.024l-240.192 16.768a32 32 0 0 0-29.696 34.176l55.808 798.016a32.064 32.064 0 0 0 34.304 29.696l176.512-13.184c17.632-1.312 30.848-16.672 29.504-34.272s-16.576-31.04-34.304-29.536l-144.448 10.784-6.432-92.512 125.312-12.576a32 32 0 0 0 28.672-35.04 32.16 32.16 0 0 0-35.04-28.672l-123.392 12.416L82.144 149.184l145.152-10.144-60.96 96.224a32 32 0 0 0 6.848 41.952l198.4 161.344-58.752 279.296a30.912 30.912 0 0 0 0.736 14.752 31.68 31.68 0 0 0 1.408 11.04l51.52 154.56a31.968 31.968 0 0 0 27.456 21.76l523.104 47.552a32.064 32.064 0 0 0 34.848-29.632L1007.68 139.84a32.064 32.064 0 0 0-7.776-23.232z m-98.912 630.848l-412.576-39.648a31.52 31.52 0 0 0-34.912 28.768 32 32 0 0 0 28.8 34.912l414.24 39.808-6.272 89.536-469.728-42.72-39.584-118.72 234.816-310.016a31.936 31.936 0 0 0-1.248-40.192L468.896 219.84l65.088-81.056 407.584 28.48-40.576 580.192z" p-id="1623" fill="#bfbfbf"></path></svg>

Before

Width:  |  Height:  |  Size: 1.5 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 6 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 5.7 KiB

View file

@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M401.9 584.7h16v16h-16zM385.9 600.7h-16v-16h16v16z m-31.9 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-31.9 0h-16v-16h16v16zM146.1 584.7h16v16h-16zM162.1 569h-16v-15.7h16V569z m0-31.5h-16v-15.7h16v15.7z m0-31.5h-16v-15.7h16V506z m0-31.5h-16v-15.7h16v15.7z m0-31.5h-16v-15.7h16V443z m0-31.5h-16v-15.7h16v15.7z m0-31.5h-16v-15.7h16V380z m0-31.5h-16v-15.7h16v15.7z m0-31.5h-16v-15.7h16V317z m0-31.4h-16v-15.7h16v15.7zM146.1 238.1h16v16h-16zM385.9 254.1h-16v-16h16v16z m-31.9 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-31.9 0h-16v-16h16v16zM401.9 238.1h16v16h-16zM417.9 569h-16v-15.7h16V569z m0-31.5h-16v-15.7h16v15.7z m0-31.5h-16v-15.7h16V506z m0-31.5h-16v-15.7h16v15.7z m0-31.5h-16v-15.7h16V443z m0-31.5h-16v-15.7h16v15.7z m0-31.5h-16v-15.7h16V380z m0-31.5h-16v-15.7h16v15.7z m0-31.5h-16v-15.7h16V317z m0-31.4h-16v-15.7h16v15.7zM860.1 682.9h16v16h-16zM844.2 698.9h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-31.9 0h-16v-16h16v16z m-32 0h-16v-16h16v16zM604.3 682.9h16v16h-16zM620.3 667.1h-16v-15.7h16v15.7z m0-31.4h-16V620h16v15.7z m0-31.5h-16v-15.7h16v15.7z m0-31.5h-16V557h16v15.7z m0-31.5h-16v-15.7h16v15.7z m0-31.5h-16V494h16v15.7z m0-31.5h-16v-15.7h16v15.7z m0-31.5h-16V431h16v15.7z m0-31.5h-16v-15.7h16v15.7z m0-31.5h-16V368h16v15.7zM604.3 336.2h16v16h-16zM844.2 352.2h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-31.9 0h-16v-16h16v16z m-32 0h-16v-16h16v16zM860.1 336.2h16v16h-16zM876.1 667.1h-16v-15.7h16v15.7z m0-31.4h-16V620h16v15.7z m0-31.5h-16v-15.7h16v15.7z m0-31.5h-16V557h16v15.7z m0-31.5h-16v-15.7h16v15.7z m0-31.5h-16V494h16v15.7z m0-31.5h-16v-15.7h16v15.7z m0-31.5h-16V431h16v15.7z m0-31.5h-16v-15.7h16v15.7z m0-31.5h-16V368h16v15.7z" fill="#0A0408" /><path d="M246.9 107.8h531.6v531.6H246.9z" fill="#FFFFFF" /><path d="M786.5 647.4H238.9V99.8h547.6v547.6z m-531.6-16h515.6V115.8H254.9v515.6z" fill="#0A0408" /><path d="M305.1 166h415.1v415.1H305.1z" fill="#55B7A8" /><path d="M389.9 238.2h195.3v16H389.9zM384.6 338.8h256.2v16H384.6zM384.6 441.2h256.2v16H384.6z" fill="#0A0408" /><path d="M868.8 918H156.5l-50-415.4h812.3z" fill="#FFFFFF" /><path d="M875.9 926H149.4L97.5 494.6h830.4l-52 431.4z m-712.3-16h698.1l48.1-399.4H115.5L163.6 910z" fill="#0A0408" /><path d="M809.6 866.5H215.8L174.1 554h677.2z" fill="#F4BE6F" /><path d="M154.1 639.7h154.3v16H154.1zM154.1 717.9h258.3v16H154.1z" fill="#FFFFFF" /><path d="M842.7 318.8h50.9v50.9h-50.9z" fill="#DC444A" /><path d="M901.6 377.7h-66.9v-66.9h66.9v66.9z m-50.9-16h34.9v-34.9h-34.9v34.9z" fill="#0A0408" /><path d="M128.6 220.8h50.9v50.9h-50.9z" fill="#DC444A" /><path d="M187.5 279.7h-66.9v-66.9h66.9v66.9z m-50.9-16h34.9v-34.9h-34.9v34.9z" fill="#0A0408" /></svg>

Before

Width:  |  Height:  |  Size: 3.1 KiB

View file

@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M153.9 105.9h715.4v812.8H153.9z" fill="#55B7A8" /><path d="M877.3 926.8H145.9V97.9h731.4v828.9z m-715.4-16h699.4V113.9H161.9v796.9z" fill="#0A0408" /><path d="M221.3 182.9h580.5v658.8H221.3z" fill="#FFFFFF" /><path d="M793.8 833.8h16v16h-16zM777.7 849.8h-16.1v-16h16.1v16z m-32.3 0h-16.1v-16h16.1v16z m-32.2 0h-16.1v-16h16.1v16z m-32.3 0h-16.1v-16h16.1v16z m-32.2 0h-16.1v-16h16.1v16z m-32.3 0h-16.1v-16h16.1v16z m-32.2 0H568v-16h16.1v16z m-32.3 0h-16.1v-16h16.1v16z m-32.3 0h-16.1v-16h16.1v16z m-32.2 0h-16.1v-16h16.1v16z m-32.3 0H439v-16h16.1v16z m-32.2 0h-16.1v-16h16.1v16z m-32.3 0h-16.1v-16h16.1v16z m-32.2 0h-16.1v-16h16.1v16z m-32.3 0H310v-16h16.1v16z m-32.3 0h-16.1v-16h16.1v16z m-32.2 0h-16.1v-16h16.1v16zM213.3 833.8h16v16h-16zM229.3 818.1h-16v-15.7h16v15.7z m0-31.4h-16V771h16v15.7z m0-31.3h-16v-15.7h16v15.7z m0-31.4h-16v-15.7h16V724z m0-31.3h-16V677h16v15.7z m0-31.4h-16v-15.7h16v15.7z m0-31.4h-16v-15.7h16v15.7z m0-31.3h-16v-15.7h16v15.7z m0-31.4h-16v-15.7h16v15.7z m0-31.3h-16v-15.7h16v15.7z m0-31.4h-16v-15.7h16v15.7z m0-31.4h-16v-15.7h16v15.7z m0-31.3h-16v-15.7h16v15.7z m0-31.4h-16v-15.7h16v15.7z m0-31.3h-16v-15.7h16v15.7z m0-31.4h-16V332h16v15.7z m0-31.3h-16v-15.7h16v15.7z m0-31.4h-16v-15.7h16V285z m0-31.4h-16V238h16v15.6z m0-31.3h-16v-15.7h16v15.7zM213.3 174.9h16v16h-16zM777.7 190.9h-16.1v-16h16.1v16z m-32.3 0h-16.1v-16h16.1v16z m-32.2 0h-16.1v-16h16.1v16z m-32.3 0h-16.1v-16h16.1v16z m-32.2 0h-16.1v-16h16.1v16z m-32.3 0h-16.1v-16h16.1v16z m-32.2 0H568v-16h16.1v16z m-32.3 0h-16.1v-16h16.1v16z m-32.3 0h-16.1v-16h16.1v16z m-32.2 0h-16.1v-16h16.1v16z m-32.3 0H439v-16h16.1v16z m-32.2 0h-16.1v-16h16.1v16z m-32.3 0h-16.1v-16h16.1v16z m-32.2 0h-16.1v-16h16.1v16z m-32.3 0H310v-16h16.1v16z m-32.3 0h-16.1v-16h16.1v16z m-32.2 0h-16.1v-16h16.1v16zM793.8 174.9h16v16h-16zM809.8 818.1h-16v-15.7h16v15.7z m0-31.4h-16V771h16v15.7z m0-31.3h-16v-15.7h16v15.7z m0-31.4h-16v-15.7h16V724z m0-31.3h-16V677h16v15.7z m0-31.4h-16v-15.7h16v15.7z m0-31.4h-16v-15.7h16v15.7z m0-31.3h-16v-15.7h16v15.7z m0-31.4h-16v-15.7h16v15.7z m0-31.3h-16v-15.7h16v15.7z m0-31.4h-16v-15.7h16v15.7z m0-31.4h-16v-15.7h16v15.7z m0-31.3h-16v-15.7h16v15.7z m0-31.4h-16v-15.7h16v15.7z m0-31.3h-16v-15.7h16v15.7z m0-31.4h-16V332h16v15.7z m0-31.3h-16v-15.7h16v15.7z m0-31.4h-16v-15.7h16V285z m0-31.4h-16V238h16v15.6z m0-31.3h-16v-15.7h16v15.7z" fill="#0A0408" /><path d="M364.5 306.6m-44.8 0a44.8 44.8 0 1 0 89.6 0 44.8 44.8 0 1 0-89.6 0Z" fill="#DC444A" /><path d="M364.5 359.4c-29.1 0-52.8-23.7-52.8-52.8s23.7-52.8 52.8-52.8 52.8 23.7 52.8 52.8-23.7 52.8-52.8 52.8z m0-89.6c-20.3 0-36.8 16.5-36.8 36.8s16.5 36.8 36.8 36.8 36.8-16.5 36.8-36.8-16.5-36.8-36.8-36.8zM459.3 262.6h144.1v16H459.3zM459.3 332.2h244.1v16H459.3z" fill="#0A0408" /><path d="M364.5 516.3m-44.8 0a44.8 44.8 0 1 0 89.6 0 44.8 44.8 0 1 0-89.6 0Z" fill="#DC444A" /><path d="M364.5 569.1c-29.1 0-52.8-23.7-52.8-52.8s23.7-52.8 52.8-52.8 52.8 23.7 52.8 52.8-23.7 52.8-52.8 52.8z m0-89.6c-20.3 0-36.8 16.5-36.8 36.8 0 20.3 16.5 36.8 36.8 36.8s36.8-16.5 36.8-36.8c0-20.3-16.5-36.8-36.8-36.8zM459.3 472.3h144.1v16H459.3zM459.3 541.9h244.1v16H459.3z" fill="#0A0408" /><path d="M364.5 726m-44.8 0a44.8 44.8 0 1 0 89.6 0 44.8 44.8 0 1 0-89.6 0Z" fill="#DC444A" /><path d="M364.5 778.8c-29.1 0-52.8-23.7-52.8-52.8s23.7-52.8 52.8-52.8 52.8 23.7 52.8 52.8-23.7 52.8-52.8 52.8z m0-89.6c-20.3 0-36.8 16.5-36.8 36.8 0 20.3 16.5 36.8 36.8 36.8s36.8-16.5 36.8-36.8c0-20.3-16.5-36.8-36.8-36.8zM459.3 682h144.1v16H459.3zM459.3 751.6h244.1v16H459.3z" fill="#0A0408" /><path d="M359 72.4h305.2v75.9H359z" fill="#EBB866" /><path d="M672.2 156.2H351V64.4h321.2v91.8z m-305.2-16h289.2V80.4H367v59.8z" fill="#0A0408" /><path d="M808.3 807.9m-141.7 0a141.7 141.7 0 1 0 283.4 0 141.7 141.7 0 1 0-283.4 0Z" fill="#EBB866" /><path d="M808.3 957.6c-82.5 0-149.7-67.1-149.7-149.7s67.1-149.7 149.7-149.7S958 725.4 958 807.9s-67.2 149.7-149.7 149.7z m0-283.4c-73.7 0-133.7 60-133.7 133.7s60 133.7 133.7 133.7S942 881.6 942 807.9s-60-133.7-133.7-133.7z" fill="#0A0408" /><path d="M810.3 727.1l26 52.5 58 8.5-42 40.9 9.9 57.8-51.9-27.3-51.9 27.3 9.9-57.8-41.9-40.9 58-8.5z" fill="#FFFFFF" /><path d="M872.8 901.4l-62.5-32.9-62.5 32.9 11.9-69.6-50.6-49.3 69.9-10.2 31.3-63.3 31.3 63.3 69.9 10.2-50.6 49.3 11.9 69.6z m-62.5-51l41.3 21.7-7.9-45.9 33.4-32.5L831 787l-20.6-41.8-20.7 41.8-46.1 6.7 33.4 32.5-7.9 45.9 41.2-21.7z" fill="#0A0408" /></svg>

Before

Width:  |  Height:  |  Size: 4.5 KiB

View file

@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M74 183.7h216V918H74z" fill="#55B7A8" /><path d="M298 926H66V175.7h232V926zM82 910h200V191.7H82V910z" fill="#0A0408" /><path d="M125.6 246.6h116.8v229.2H125.6z" fill="#FFFFFF" /><path d="M250.4 483.8H117.6V238.6h132.8v245.2z m-116.8-16h100.8V254.6H133.6v213.2z" fill="#0A0408" /><path d="M178.8 783.9m-55.2 0a55.2 55.2 0 1 0 110.4 0 55.2 55.2 0 1 0-110.4 0Z" fill="#FFFFFF" /><path d="M178.8 847.1c-34.8 0-63.2-28.3-63.2-63.2s28.3-63.2 63.2-63.2c34.8 0 63.2 28.3 63.2 63.2s-28.4 63.2-63.2 63.2z m0-110.4c-26 0-47.2 21.2-47.2 47.2s21.2 47.2 47.2 47.2 47.2-21.2 47.2-47.2-21.2-47.2-47.2-47.2z" fill="#0A0408" /><path d="M519.4 224.2L728 168.3l190.1 709.3-208.6 55.9" fill="#FFFFFF" /><path d="M517.346 216.397l7.727-2.07 4.14 15.454-7.727 2.07zM544.1 225.8l-4.1-15.5 14.9-4 4.1 15.5-14.9 4z m29.7-7.9l-4.1-15.5 14.9-4 4.1 15.5-14.9 4z m29.7-8l-4.1-15.5 14.9-4 4.1 15.5-14.9 4z m29.7-8l-4.1-15.5 14.9-4 4.1 15.5-14.9 4zM663 194l-4.1-15.5 14.9-4 4.1 15.5-14.9 4z m29.7-8l-4.1-15.5 14.9-4 4.1 15.5-14.9 4zM722.4 178.1l-4.2-15.5 15.5-4.1 4.1 15.4zM904.2 856.5l-4.1-15.4 15.5-4.1 4.1 15.4-15.5 4.1z m-8.3-30.8l-4.1-15.4 15.5-4.1 4.1 15.4-15.5 4.1z m-8.3-30.9l-4.1-15.4 15.5-4.1 4.1 15.4-15.5 4.1z m-8.2-30.8l-4.1-15.4 15.5-4.1 4.1 15.4-15.5 4.1z m-8.3-30.8l-4.1-15.4 15.5-4.1 4.1 15.4-15.5 4.1z m-8.2-30.9l-4.1-15.4 15.5-4.1 4.1 15.4-15.5 4.1z m-8.3-30.8l-4.1-15.4L866 652l4.1 15.4-15.5 4.1z m-8.3-30.9l-4.1-15.4 15.5-4.1 4.1 15.4-15.5 4.1z m-8.2-30.8l-4.1-15.4 15.5-4.1 4.1 15.4-15.5 4.1z m-8.3-30.8l-4.1-15.4 15.5-4.1 4.1 15.4-15.5 4.1z m-8.3-30.9l-4.1-15.4 15.5-4.1L837 544l-15.5 4.1z m-8.2-30.8l-4.1-15.4 15.5-4.1 4.1 15.4-15.5 4.1z m-8.3-30.9l-4.1-15.4 15.5-4.1 4.1 15.4-15.5 4.1z m-8.2-30.8l-4.1-15.4 15.5-4.1 4.1 15.4-15.5 4.1z m-8.3-30.8l-4.1-15.4 15.5-4.1 4.1 15.4-15.5 4.1z m-8.3-30.9l-4.1-15.4 15.5-4.1 4.1 15.4-15.5 4.1z m-8.2-30.8l-4.1-15.4 15.5-4.1 4.1 15.4-15.5 4.1z m-8.3-30.8l-4.1-15.4 15.5-4.1 4.1 15.4-15.5 4.1z m-8.3-30.9l-4.1-15.4 15.5-4.1 4.1 15.4-15.5 4.1z m-8.2-30.8l-4.1-15.4 15.5-4.1 4.1 15.4-15.5 4.1z m-8.3-30.9l-4.1-15.4 15.5-4.1 4.1 15.4-15.5 4.1z m-8.3-30.8l-4.1-15.4 15.5-4.1 4.1 15.4-15.5 4.1zM908.303 871.94l15.454-4.142 4.143 15.455-15.455 4.142zM734.2 935.1l-4.1-15.5 14.9-4 4.1 15.5-14.9 4z m29.7-7.9l-4.1-15.5 14.9-4 4.1 15.5-14.9 4z m29.7-8l-4.1-15.5 14.9-4 4.1 15.5-14.9 4z m29.7-7.9l-4.1-15.5 14.9-4 4.1 15.5-14.9 4z m29.7-8l-4.1-15.5 14.9-4 4.1 15.5-14.9 4z m29.7-8l-4.1-15.5 14.9-4 4.1 15.5-14.9 4zM707.443 925.66l7.727-2.07 4.141 15.454-7.727 2.07z" fill="#0A0408" /><path d="M583.619 272.12l112.817-30.229 59.317 221.385-112.817 30.228z" fill="#FFFFFF" /><path d="M637.3 503.3l-63.5-236.8L702.1 232l63.5 236.8-128.3 34.5z m-43.9-225.6l55.2 205.9 97.4-26.1-55.2-205.9-97.4 26.1z" fill="#0A0408" /><path d="M722.664239 791.097256a55.2 55.2 0 1 0 106.63871-28.571762 55.2 55.2 0 1 0-106.63871 28.571762Z" fill="#FFFFFF" /><path d="M776 840c-27.9 0-53.5-18.6-61-46.8-9-33.7 11-68.4 44.7-77.4s68.4 11 77.4 44.7c9 33.6-11 68.4-44.7 77.4-5.5 1.4-11 2.1-16.4 2.1z m0-110.4c-4 0-8.1 0.5-12.2 1.6-25.1 6.7-40.1 32.7-33.4 57.8 6.7 25.1 32.7 40.1 57.8 33.4 25.1-6.7 40.1-32.7 33.4-57.8-5.7-21-24.8-35-45.6-35z" fill="#0A0408" /><path d="M888.182 860.34l47.04-12.603 12.603 47.04-47.04 12.603z" fill="#DC444A" /><path d="M895.2 917.2l-16.8-62.5 62.5-16.8 16.8 62.5-62.5 16.8zM898 866l8.5 31.6 31.6-8.5-8.5-31.6L898 866z" fill="#0A0408" /><path d="M698.202 151.04l47.04-12.604 12.603 47.04-47.04 12.603z" fill="#DC444A" /><path d="M705.1 207.9l-16.8-62.5 62.5-16.8 16.8 62.5-62.5 16.8z m2.9-51.2l8.5 31.6 31.6-8.5-8.5-31.6-31.6 8.5z" fill="#0A0408" /><path d="M291.4 183.7h216V918h-216z" fill="#EBB866" /><path d="M515.4 926h-232V175.7h232V926z m-216-16h200V191.7h-200V910z" fill="#0A0408" /><path d="M343 246.6h116.8v229.2H343z" fill="#FFFFFF" /><path d="M467.8 483.8H335V238.6h132.8v245.2z m-116.8-16h100.8V254.6H351v213.2z" fill="#0A0408" /><path d="M396.2 783.9m-55.2 0a55.2 55.2 0 1 0 110.4 0 55.2 55.2 0 1 0-110.4 0Z" fill="#FFFFFF" /><path d="M396.2 847.1c-34.8 0-63.2-28.3-63.2-63.2s28.3-63.2 63.2-63.2c34.8 0 63.2 28.3 63.2 63.2s-28.4 63.2-63.2 63.2z m0-110.4c-26 0-47.2 21.2-47.2 47.2s21.2 47.2 47.2 47.2 47.2-21.2 47.2-47.2-21.2-47.2-47.2-47.2z" fill="#0A0408" /><path d="M712.5 941.5L518.4 217.2" fill="#FFFFFF" /><path d="M510.727 219.228l15.454-4.141 194.074 724.328-15.454 4.141z" fill="#0A0408" /></svg>

Before

Width:  |  Height:  |  Size: 4.5 KiB

View file

@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M96.4 364.2h830.3v529.5H96.4z" fill="#FFFFFF" /><path d="M926.7 901.7h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-22.3-9.7h-16v-16h16v16z m830.3-13.9h-16v-16h16v16zM104.4 860h-16v-16h16v16z m830.3-13.9h-16v-16h16v16zM104.4 828h-16v-16h16v16z m830.3-13.9h-16v-16h16v16zM104.4 796h-16v-16h16v16z m830.3-13.9h-16v-16h16v16zM104.4 764h-16v-16h16v16z m830.3-13.9h-16v-16h16v16zM104.4 732h-16v-16h16v16z m830.3-13.9h-16v-16h16v16zM104.4 700h-16v-16h16v16z m830.3-13.9h-16v-16h16v16zM104.4 668h-16v-16h16v16z m830.3-13.9h-16v-16h16v16zM104.4 636h-16v-16h16v16z m830.3-13.9h-16v-16h16v16zM104.4 604h-16v-16h16v16z m830.3-13.9h-16v-16h16v16zM104.4 572h-16v-16h16v16z m830.3-13.9h-16v-16h16v16zM104.4 540h-16v-16h16v16z m830.3-13.9h-16v-16h16v16zM104.4 508h-16v-16h16v16z m830.3-13.9h-16v-16h16v16zM104.4 476h-16v-16h16v16z m830.3-13.9h-16v-16h16v16zM104.4 444h-16v-16h16v16z m830.3-13.9h-16v-16h16v16zM104.4 412h-16v-16h16v16z m830.3-13.9h-16v-16h16v16zM104.4 380h-16v-23.8h8.2v8h7.8V380z m822.3-7.8h-14.1v-16h22.1v9.9h-8v6.1z m-30.1 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z" fill="#0A0408" /><path d="M172.6 438.3h677.8v381.4H172.6z" fill="#F4BE6F" /><path d="M96.4 258.8h830.3v105.9H96.4z" fill="#55B7A8" /><path d="M934.7 372.7H88.4V250.8h846.3v121.9z m-830.3-16h814.3v-89.9H104.4v89.9z" fill="#0A0408" /><path d="M457.3 107.2h108.5v203.7H457.3z" fill="#EBB866" /><path d="M573.8 318.9H449.3V99.2h124.5v219.7z m-108.5-16h92.5V115.2h-92.5v187.7z" fill="#0A0408" /><path d="M308.7 560.2m-65.9 0a65.9 65.9 0 1 0 131.8 0 65.9 65.9 0 1 0-131.8 0Z" fill="#FFFFFF" /><path d="M308.7 634.1c-40.8 0-73.9-33.2-73.9-73.9s33.2-73.9 73.9-73.9 73.9 33.2 73.9 73.9-33.1 73.9-73.9 73.9z m0-131.9c-32 0-57.9 26-57.9 57.9s26 57.9 57.9 57.9 57.9-26 57.9-57.9-25.9-57.9-57.9-57.9z" fill="#0A0408" /><path d="M418.7 767.9c0-60.7-49.2-109.9-109.9-109.9s-109.9 49.2-109.9 109.9h219.8z" fill="#FFFFFF" /><path d="M426.7 775.9H190.8v-8c0-65 52.9-117.9 117.9-117.9s117.9 52.9 117.9 117.9v8z m-219.6-16h203.3c-4.1-52.5-48.1-93.9-101.6-93.9s-97.6 41.4-101.7 93.9zM457.3 662.8h313.9v16H457.3zM457.3 751.2h261.8v16H457.3z" fill="#0A0408" /><path d="M457.3 512.7h313.9v65.9H457.3z" fill="#FFFFFF" /><path d="M779.2 586.7H449.3v-81.9h329.9v81.9z m-313.9-16h297.9v-49.9H465.3v49.9z" fill="#0A0408" /><path d="M512 258.6m-20.3 0a20.3 20.3 0 1 0 40.6 0 20.3 20.3 0 1 0-40.6 0Z" fill="#FFFFFF" /><path d="M512 287c-15.6 0-28.3-12.7-28.3-28.3s12.7-28.3 28.3-28.3 28.3 12.7 28.3 28.3S527.6 287 512 287z m0-40.7c-6.8 0-12.3 5.5-12.3 12.3S505.2 271 512 271s12.3-5.5 12.3-12.3-5.5-12.4-12.3-12.4z" fill="#0A0408" /><path d="M71.5 868.8h49.8v49.8H71.5z" fill="#DC504F" /><path d="M129.2 926.6H63.5v-65.8h65.8v65.8z m-49.7-16h33.8v-33.8H79.5v33.8z" fill="#0A0408" /><path d="M899.4 868.8h49.8v49.8h-49.8z" fill="#DC504F" /><path d="M957.1 926.6h-65.8v-65.8h65.8v65.8z m-49.7-16h33.8v-33.8h-33.8v33.8z" fill="#0A0408" /></svg>

Before

Width:  |  Height:  |  Size: 4.1 KiB

View file

@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M886.6 657.2h-16.8v-7.6l-0.7-7.6 0.7-0.1v-0.7h7.7l7.6-0.7zM853.8 657.2h-16v-16h16v16z m-32.1 0h-16v-16h16v16z m-32.1 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32.1 0h-16v-16h16v16z m-32.1 0h-16v-16h16v16z m-32.1 0h-16v-16h16v16z m-32.1 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32.1 0h-16v-16h16v16z m-32.1 0h-16v-16h16v16z m-32.1 0h-16v-16h16v16z m-32 0h-16v-16h16v16zM436.8 657.2h-18.2l4.3-17.7 6.9 1.7h7v1.8l1.7 0.4-1.7 6.8zM442.3 627.7l-15.5-3.8 3.9-15.7 15.5 3.8-3.9 15.7z m7.8-31.4l-15.5-3.8 3.9-15.7 15.5 3.8-3.9 15.7z m7.7-31.4l-15.5-3.8 3.9-15.7 15.5 3.8-3.9 15.7z m7.7-31.4l-15.5-3.8 3.9-15.7 15.5 3.8-3.9 15.7z m7.8-31.4l-15.5-3.8 3.9-15.7 15.5 3.8-3.9 15.7z m7.7-31.4l-15.5-3.8 3.9-15.7 15.5 3.8-3.9 15.7z m7.7-31.4l-15.5-3.8 3.9-15.7 15.5 3.8-3.9 15.7z m7.7-31.5l-15.5-3.8 3.9-15.7 15.5 3.8-3.9 15.7zM504.2 376.4l-15.6-3.8 3.4-13.8h14.3v16h-1.7zM923.3 374.8h-16v-16h16v16z m-32.1 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32.1 0h-16v-16h16v16z m-32.1 0h-16v-16h16v16z m-32.1 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32.1 0h-16v-16h16v16z m-32.1 0h-16v-16h16v16z m-32.1 0h-16v-16h16v16z m-32.1 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32.1 0h-16v-16h16v16zM950.2 377.7l-5-2.9h-5.8v-3.4l-3-1.8 3-5v-5.8h21.9zM867.8 626.8l-1.4-15.2 15.9-1.4 1.4 15.2-15.9 1.4z m-2.8-30.3l-1.4-15.2 15.9-1.4 1.4 15.2-15.9 1.4z m-2.8-30.3l-1.4-15.2 15.9-1.4 1.4 15.2-15.9 1.4z m-2.7-30.4l-1.4-15.2 15.9-1.4 1.4 15.2-15.9 1.4z m14-26.6l-13.8-8.1 7.7-13.2 13.8 8.1-7.7 13.2z m15.4-26.3l-13.8-8.1 7.7-13.2 13.8 8.1-7.7 13.2z m15.3-26.3l-13.8-8.1 7.7-13.2 13.8 8.1-7.7 13.2z m15.3-26.3l-13.8-8.1 7.7-13.2 13.8 8.1-7.7 13.2z m15.4-26.3l-13.8-8.1 7.7-13.2 13.8 8.1-7.7 13.2z" fill="#0A0408" /><path d="M795.3 649.2h-413l69.5-282.4h413.1L778.5 508z" fill="#EBB866" /><path d="M804.3 657.2H372.1l73.5-298.5h433.6l-92.4 151 17.5 147.5z m-411.8-16h393.8l-16.1-135 80.4-131.4H458.1l-65.6 266.4z" fill="#0A0408" /><path d="M238.4 855.7h-66.1l202.5-750.5H441z" fill="#55B7A8" /><path d="M244.5 863.7h-82.7L368.7 97.2h82.7L244.5 863.7z m-61.8-16h49.6l198.2-734.5H381L182.7 847.7z" fill="#0A0408" /><path d="M693.7 508h-453l69.5-282.5h453z" fill="#EBB866" /><path d="M700 516H230.5L304 217.5h469.5L700 516z m-449.1-16h436.6L753 233.5H316.5L250.9 500z" fill="#0A0408" /><path d="M115.6 850.1h189.8v68.8H115.6z" fill="#68A4D9" /><path d="M313.4 926.9H107.6v-84.8h205.8v84.8z m-189.8-16h173.8v-52.8H123.6v52.8z" fill="#0A0408" /><path d="M65.6 910.9h289.8v16H65.6zM278.6 358.8h232.7v16H278.6z" fill="#0A0408" /></svg>

Before

Width:  |  Height:  |  Size: 2.7 KiB

View file

@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M548.1 455.7h-72l-36 39.8 36 39.9h72l36-39.9z" fill="#DC444A" /><path d="M551.7 543.4h-79.1l-43.2-47.9 43.2-47.9h79.1l43.2 47.9-43.2 47.9z m-72-16h64.9l28.8-31.9-28.8-31.9h-64.9l-28.8 31.9 28.8 31.9z" fill="#0A0408" /><path d="M512.1 899.4l102.5-110.5-64.4-253.6h-76.1l-64.5 253.6z" fill="#FFFFFF" /><path d="M512.1 911.2l-111.3-120 67.1-263.8h88.5l67.1 263.8-111.4 120z m-93.7-124.6l93.7 101 93.7-101-61.9-243.4h-63.6l-61.9 243.4z" fill="#0A0408" /><path d="M512.1 843.5l72.4-78L539 586.6h-53.7l-45.5 178.9z" fill="#DC444A" /><path d="M512.1 240.3m-167.3 0a167.3 167.3 0 1 0 334.6 0 167.3 167.3 0 1 0-334.6 0Z" fill="#EBB866" /><path d="M512.1 415.5c-96.6 0-175.3-78.6-175.3-175.3S415.5 65 512.1 65c96.6 0 175.3 78.6 175.3 175.3s-78.6 175.2-175.3 175.2z m0-334.5c-87.8 0-159.3 71.4-159.3 159.3s71.4 159.3 159.3 159.3c87.8 0 159.3-71.4 159.3-159.3S599.9 81 512.1 81z" fill="#0A0408" /><path d="M880.3 950H143.9V645.6c0-61.2 116.2-144.2 177.4-144.2L512 774.7l190.7-273.3c61.2 0 177.4 82.9 177.4 144.2V950z" fill="#FFFFFF" /><path d="M888.3 958H135.9V645.6c0-43.4 48.2-85.4 68.9-101.4 39.9-30.9 85.7-50.8 116.6-50.8h4.2l186.6 267.3 186.6-267.3h4.2c30.9 0 76.7 19.9 116.6 50.8 20.7 16 68.9 57.9 68.9 101.4V958z m-736.4-16h720.4V645.6c0-25.2-23.4-58.4-62.6-88.7-35.5-27.4-75.2-45.6-102.7-47.3L512.1 788.8 317.3 509.6c-27.5 1.7-67.2 19.9-102.7 47.3-39.2 30.3-62.6 63.5-62.6 88.7V942z" fill="#0A0408" /><path d="M441.2 896.3H209.6V704.8c0-38.5 31.2-90.7 69.8-90.7h45.3l116.6 172v110.2zM574.6 896.3h231.7V704.8c0-38.5-31.2-90.7-69.8-90.7h-45.3L574.6 786v110.3z" fill="#55B7A8" /><path d="M520.1 930.4h-16v-15.2h16v15.2z m0-31.2h-16v-16h16v16z m0-32h-16v-16h16v16z m0-32h-16v-16h16v16z m0-32h-16v-16h16v16z m0-32h-16v-16h16v16z" fill="#0A0408" /></svg>

Before

Width:  |  Height:  |  Size: 2 KiB

View file

@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M841.7 915.2L518.5 797.3 183.1 915.2V107.1h658.6z" fill="#FFFFFF" /><path d="M849.7 926.7L518.4 805.8 175.1 926.5V99.1h674.5v827.6zM191.1 115.1v788.8l327.4-115.1 315.1 115V115.1H191.1z" fill="#0A0408" /><path d="M801.6 868.3l-18.2-6.6 2.2-6.2v-6.6h2.5l0.8-2.3 6.2 2.3h6.5zM256.2 856.6l-5.3-15.1 14.8-5.2 5.3 15.1-14.8 5.2z m512.4-0.3l-14.8-5.4 5.5-15 14.8 5.4-5.5 15z m-482.8-10.2l-5.3-15.1 14.8-5.2 5.3 15.1-14.8 5.2z m453.3-0.6l-14.8-5.4 5.5-15 14.8 5.4-5.5 15z m-423.6-9.8l-5.3-15.1 14.8-5.2 5.3 15.1-14.8 5.2z m394.1-1l-14.8-5.4 5.5-15 14.8 5.4-5.5 15z m-364.5-9.4l-5.3-15.1 14.8-5.2 5.3 15.1-14.8 5.2z m334.9-1.4l-14.8-5.4 5.5-15 14.8 5.4-5.5 15z m-305.2-9.1l-5.3-15.1 14.8-5.2 5.3 15.1-14.8 5.2z m275.7-1.6l-14.8-5.4 5.5-15 14.8 5.4-5.5 15z m-246.1-8.8l-5.3-15.1 14.8-5.2 5.3 15.1-14.8 5.2z m216.6-2l-14.8-5.4 5.5-15 14.8 5.4-5.5 15zM434.1 794l-5.3-15.1 14.8-5.2 5.3 15.1-14.8 5.2z m157.4-2.4l-14.8-5.4 5.5-15 14.8 5.4-5.5 15z m-127.8-8l-5.3-15.1 14.8-5.2 5.3 15.1-14.8 5.2z m98.2-2.8l-14.8-5.4 5.5-15 14.8 5.4-5.5 15z m-68.5-7.7l-5.3-15.1 14.8-5.2 5.3 15.1-14.8 5.2z m39-3l-14.8-5.4 5.5-15 14.8 5.4-5.5 15zM223.2 868.2v-19.3h6.6l6.2-2.2 0.8 2.2h2.4v6.6l2.2 6.3zM239.2 833.2h-16v-15.7h16v15.7z m0-31.4h-16V786h16v15.8z m0-31.5h-16v-15.7h16v15.7z m0-31.4h-16v-15.7h16v15.7z m0-31.4h-16v-15.7h16v15.7z m0-31.4h-16v-15.7h16v15.7z m0-31.4h-16V629h16v15.7z m0-31.4h-16v-15.7h16v15.7z m0-31.4h-16v-15.7h16v15.7z m0-31.5h-16v-15.7h16v15.7z m0-31.4h-16v-15.7h16V519z m0-31.4h-16v-15.7h16v15.7z m0-31.4h-16v-15.7h16v15.7z m0-31.4h-16v-15.7h16v15.7z m0-31.4h-16v-15.7h16v15.7z m0-31.4h-16v-15.7h16V362z m0-31.5h-16v-15.7h16v15.7z m0-31.4h-16v-15.7h16v15.7z m0-31.4h-16V252h16v15.7z m0-31.4h-16v-15.7h16v15.7z m0-31.4h-16v-15.7h16v15.7zM223.2 157.5h16v16h-16zM770 173.5h-15.6v-16H770v16z m-31.2 0h-15.6v-16h15.6v16z m-31.2 0H692v-16h15.6v16z m-31.3 0h-15.6v-16h15.6v16z m-31.2 0h-15.6v-16h15.6v16z m-31.2 0h-15.6v-16h15.6v16z m-31.2 0H567v-16h15.6v16z m-31.3 0h-15.6v-16h15.6v16z m-31.2 0h-15.6v-16h15.6v16z m-31.2 0h-15.6v-16H489v16z m-31.3 0h-15.6v-16h15.6v16z m-31.2 0h-15.6v-16h15.6v16z m-31.2 0h-15.6v-16h15.6v16z m-31.2 0h-15.6v-16h15.6v16z m-31.3 0h-15.6v-16h15.6v16z m-31.2 0H286v-16h15.6v16z m-31.2 0h-15.6v-16h15.6v16zM785.6 157.5h16v16h-16zM801.6 833.2h-16v-15.7h16v15.7z m0-31.4h-16V786h16v15.8z m0-31.5h-16v-15.7h16v15.7z m0-31.4h-16v-15.7h16v15.7z m0-31.4h-16v-15.7h16v15.7z m0-31.4h-16v-15.7h16v15.7z m0-31.4h-16V629h16v15.7z m0-31.4h-16v-15.7h16v15.7z m0-31.4h-16v-15.7h16v15.7z m0-31.5h-16v-15.7h16v15.7z m0-31.4h-16v-15.7h16V519z m0-31.4h-16v-15.7h16v15.7z m0-31.4h-16v-15.7h16v15.7z m0-31.4h-16v-15.7h16v15.7z m0-31.4h-16v-15.7h16v15.7z m0-31.4h-16v-15.7h16V362z m0-31.5h-16v-15.7h16v15.7z m0-31.4h-16v-15.7h16v15.7z m0-31.4h-16V252h16v15.7z m0-31.4h-16v-15.7h16v15.7z m0-31.4h-16v-15.7h16v15.7z" fill="#0A0408" /><path d="M752.2 791.2l-235.4-85.9-244.2 85.9V196.6h479.6z" fill="#55B7A8" /><path d="M512.4 305.7l42.9 86.8 95.8 13.9-69.4 67.6 16.4 95.5-85.7-45.1-85.7 45.1 16.4-95.5-69.4-67.6 95.8-13.9z" fill="#EBB866" /><path d="M608.7 584.1l-96.3-50.6-96.3 50.6 18.4-107.3-77.9-76 107.7-15.7 48.2-97.6 48.2 97.6 107.7 15.7-77.9 76 18.2 107.3z m-96.3-68.7l75.1 39.5-14.3-83.6 60.7-59.2-83.9-12.2-37.5-76.1-37.5 76.1-84.1 12.1 60.7 59.2-14.3 83.6 75.1-39.4z" fill="#0A0408" /><path d="M205.7 140h50.9v50.9h-50.9z" fill="#DC444A" /><path d="M264.6 198.9h-66.9V132h66.9v66.9z m-50.9-16h34.9V148h-34.9v34.9z" fill="#0A0408" /><path d="M768.2 140h50.9v50.9h-50.9z" fill="#DC444A" /><path d="M827.1 198.9h-66.9V132h66.9v66.9z m-50.9-16h34.9V148h-34.9v34.9z" fill="#0A0408" /></svg>

Before

Width:  |  Height:  |  Size: 3.8 KiB

View file

@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M858.5 933.3h-24v-16h16v3.9h8v12.1z m-40 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0H165v-18.5h16v10.5h-2.5v8z m680-28.1h-16v-16h16v16zM181 898.8h-16v-16h16v16z m677.5-25.6h-16v-16h16v16zM181 866.8h-16v-16h16v16z m677.5-25.6h-16v-16h16v16zM181 834.8h-16v-16h16v16z m677.5-25.6h-16v-16h16v16zM181 802.8h-16v-16h16v16z m677.5-25.6h-16v-16h16v16zM181 770.8h-16v-16h16v16z m677.5-25.6h-16v-16h16v16zM181 738.8h-16v-16h16v16z m677.5-25.6h-16v-16h16v16zM181 706.8h-16v-16h16v16z m677.5-25.6h-16v-16h16v16zM181 674.8h-16v-16h16v16z m677.5-25.6h-16v-16h16v16zM181 642.8h-16v-16h16v16z m677.5-25.6h-16v-16h16v16zM181 610.8h-16v-16h16v16z m677.5-25.6h-16v-16h16v16zM181 578.8h-16v-16h16v16z m677.5-25.6h-16v-16h16v16zM181 546.8h-16v-16h16v16z m677.5-25.6h-16v-16h16v16zM181 514.8h-16v-16h16v16z m677.5-25.6h-16v-16h16v16zM181 482.8h-16v-16h16v16z m677.5-25.6h-16v-16h16v16zM181 450.8h-16v-16h16v16z m677.5-25.6h-16v-16h16v16zM181 418.8h-16v-16h16v16z m677.5-25.6h-16v-16h16v16zM181 386.8h-16v-16h16v16z m677.5-25.6h-16v-16h16v16zM181 354.8h-16v-16h16v16z m677.5-25.6h-16v-16h16v16zM181 322.8h-16v-16h16v16z m677.5-25.6h-16v-16h16v16zM181 290.8h-16v-16h16v16z m677.5-25.6h-16v-16h16v16zM181 258.8h-16v-16h16v16z m677.5-25.6h-16v-16h16v16zM181 226.8h-16v-16h16v16z m677.5-25.6h-16v-16h16v16zM181 194.8h-16v-16h16v16z m677.5-25.6h-16v-16h16v16zM181 162.8h-16v-16h16v16z m677.5-25.6h-16v-16h16v16zM181 130.8h-16v-16h16v16z m677.5-25.6h-16v-8.4h0.4v-8h15.6v16.4z m-31.6-0.5h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-32 0H173v-5.9h-8V88.7h21.9v16z" fill="#0A0408" /><path d="M261.7 193.2h500.2v228.9H261.7z" fill="#EBB866" /><path d="M769.8 430.2H253.7v-245h516.2v245z m-500.1-16h484.2v-213H269.7v213z" fill="#0A0408" /><path d="M261.7 496.3h112.4v129.4H261.7z" fill="#55B7A8" /><path d="M382.1 633.7H253.7V488.3h128.4v145.4z m-112.4-16h96.4V504.3h-96.4v113.4z" fill="#0A0408" /><path d="M455.5 496.3h112.4v129.4H455.5z" fill="#55B7A8" /><path d="M576 633.7H447.5V488.3H576v145.4z m-112.5-16H560V504.3h-96.4v113.4z" fill="#0A0408" /><path d="M261.7 709.9h112.4v129.4H261.7z" fill="#55B7A8" /><path d="M382.1 847.3H253.7V701.9h128.4v145.4z m-112.4-16h96.4V717.9h-96.4v113.4z" fill="#0A0408" /><path d="M455.5 709.9h112.4v129.4H455.5z" fill="#55B7A8" /><path d="M576 847.3H447.5V701.9H576v145.4z m-112.5-16H560V717.9h-96.4v113.4z" fill="#0A0408" /><path d="M649.4 496.3h112.4v342.9H649.4z" fill="#55B7A8" /><path d="M769.8 847.3H641.4v-359h128.4v359z m-112.4-16h96.4v-327h-96.4v327zM261.7 256.3h78.5v16h-78.5zM261.7 333h139.7v16H261.7z" fill="#0A0408" /><path d="M147.3 71h51.4v51.4h-51.4z" fill="#DC444A" /><path d="M206.7 130.5h-67.4V63h67.4v67.5z m-51.4-16h35.4V79h-35.4v35.5z" fill="#0A0408" /><path d="M824.8 71h51.4v51.4h-51.4z" fill="#DC444A" /><path d="M884.2 130.5h-67.4V63h67.4v67.5z m-51.4-16h35.4V79h-35.4v35.5z" fill="#0A0408" /><path d="M147.3 899.6h51.4V951h-51.4z" fill="#DC444A" /><path d="M206.7 959h-67.4v-67.4h67.4V959z m-51.4-16h35.4v-35.4h-35.4V943z" fill="#0A0408" /><path d="M824.8 899.6h51.4V951h-51.4z" fill="#DC444A" /><path d="M884.2 959h-67.4v-67.4h67.4V959z m-51.4-16h35.4v-35.4h-35.4V943z" fill="#0A0408" /></svg>

Before

Width:  |  Height:  |  Size: 4.1 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 10 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 10 KiB

View file

@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M71.2 737.7h180.9v180.9H71.2z" fill="#FFFFFF" /><path d="M260.1 926.6H63.2V729.7h196.9v196.9z m-180.9-16h164.9V745.7H79.2v164.9z" fill="#0A0408" /><path d="M422.1 737.7H603v180.9H422.1z" fill="#FFFFFF" /><path d="M611 926.6H414.1V729.7H611v196.9z m-180.9-16H595V745.7H430.1v164.9z" fill="#0A0408" /><path d="M771.9 737.7h180.9v180.9H771.9z" fill="#FFFFFF" /><path d="M960.8 926.6H763.9V729.7h196.9v196.9z m-180.9-16h164.9V745.7H779.9v164.9z" fill="#0A0408" /><path d="M504.5 397.1h16v333.5h-16zM153.6 732.6h16v8h-16zM169.6 716.2h-16v-16.3h16v16.3z m0-32.7h-16v-16.3h16v16.3z m0-32.7h-16v-16.3h16v16.3z m0-32.7h-16v-16.3h16v16.3z m0-32.6h-16v-16.3h16v16.3z m0-32.7h-16v-16.3h16v16.3zM153.6 504.1h16v16h-16z" fill="#0A0408" /><path d="M840 520.1h-16v-16h16v16z m-31.9 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-31.9 0h-16v-16h16v16z m-31.9 0h-16v-16h16v16z m-31.9 0h-16v-16h16v16z m-31.9 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-31.9 0h-16v-16h16v16z m-31.9 0h-16v-16h16v16z m-31.9 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-31.9 0h-16v-16h16v16z m-31.9 0h-16v-16h16v16z m-31.9 0h-16v-16h16v16z m-31.9 0h-16v-16h16v16z m-32 0h-16v-16h16v16z m-31.9 0h-16v-16h16v16z m-31.9 0h-16v-16h16v16z m-31.9 0h-16v-16h16v16z m-31.9 0h-16v-16h16v16zM855.9 504.1h16v16h-16zM871.9 716.2h-16v-16.3h16v16.3z m0-32.7h-16v-16.3h16v16.3z m0-32.7h-16v-16.3h16v16.3z m0-32.7h-16v-16.3h16v16.3z m0-32.6h-16v-16.3h16v16.3z m0-32.7h-16v-16.3h16v16.3zM855.9 732.6h16v8h-16z" fill="#0A0408" /><path d="M655.6 216.7c0 79-143 184.8-143 184.8s-143-105.8-143-184.8 64-143 143-143 143 64 143 143z" fill="#EBB866" /><path d="M512.5 411.5l-4.8-3.5c-6-4.4-146.3-109.2-146.3-191.3 0-83.3 67.8-151 151-151 83.3 0 151 67.8 151 151 0 82.1-140.3 186.8-146.3 191.3l-4.6 3.5z m0-329.8c-74.5 0-135 60.6-135 135 0 30.2 23.9 70.4 69.2 116.4 27.4 27.8 55 50 65.8 58.3 10.8-8.4 38.6-30.6 66-58.5 45.2-45.9 69.1-86.2 69.1-116.3 0-74.3-60.6-134.9-135.1-134.9z" fill="#0A0408" /><path d="M116.7 783.2h89.9v89.9h-89.9z" fill="#55B7A8" /><path d="M467.6 783.2h89.9v89.9h-89.9zM819 783.2h89.9v89.9H819z" fill="#4EB3A6" /><path d="M836.7 486.6h50.9v50.9h-50.9z" fill="#DC444A" /><path d="M895.6 545.5h-66.9v-66.9h66.9v66.9z m-50.9-16h34.9v-34.9h-34.9v34.9z" fill="#0A0408" /><path d="M130 486.6h50.9v50.9H130z" fill="#DC444A" /><path d="M188.9 545.5H122v-66.9h66.9v66.9z m-50.9-16h34.9v-34.9H138v34.9z" fill="#0A0408" /></svg>

Before

Width:  |  Height:  |  Size: 2.6 KiB

View file

@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M135.3 198.6h752.6V744H135.3z" fill="#FFFFFF" /><path d="M879.9 736h16v16h-16zM864.2 752h-15.7v-16h15.7v16z m-31.3 0h-15.7v-16h15.7v16z m-31.4 0h-15.7v-16h15.7v16z m-31.3 0h-15.7v-16h15.7v16z m-31.3 0h-15.7v-16h15.7v16z m-31.4 0h-15.7v-16h15.7v16z m-31.3 0h-15.7v-16h15.7v16z m-31.4 0h-15.7v-16h15.7v16z m-31.3 0h-15.7v-16h15.7v16z m-31.4 0h-15.7v-16h15.7v16z m-31.3 0h-15.7v-16h15.7v16z m-31.3 0h-15.7v-16h15.7v16z m-31.4 0h-15.7v-16h15.7v16z m-31.3 0h-15.7v-16h15.7v16z m-31.4 0h-15.7v-16h15.7v16z m-31.3 0h-15.7v-16h15.7v16z m-31.4 0H347v-16h15.7v16z m-31.3 0h-15.7v-16h15.7v16z m-31.4 0h-15.7v-16H300v16z m-31.3 0H253v-16h15.7v16z m-31.3 0h-15.7v-16h15.7v16z m-31.4 0h-15.7v-16H206v16z m-31.3 0H159v-16h15.7v16zM127.3 736h16v16h-16zM143.3 719.9h-16v-16h16v16z m0-32h-16v-16h16v16z m0-32.1h-16v-16h16v16z m0-32.1h-16v-16h16v16z m0-32.1h-16v-16h16v16z m0-32.1h-16v-16h16v16z m0-32.1h-16v-16h16v16z m0-32h-16v-16h16v16z m0-32.1h-16v-16h16v16z m0-32.1h-16v-16h16v16z m0-32.1h-16v-16h16v16z m0-32.1h-16v-16h16v16z m0-32.1h-16v-16h16v16z m0-32.1h-16v-16h16v16z m0-32h-16v-16h16v16z m0-32.1h-16v-16h16v16zM127.3 190.6h16v16h-16zM864.2 206.6h-15.7v-16h15.7v16z m-31.3 0h-15.7v-16h15.7v16z m-31.4 0h-15.7v-16h15.7v16z m-31.3 0h-15.7v-16h15.7v16z m-31.3 0h-15.7v-16h15.7v16z m-31.4 0h-15.7v-16h15.7v16z m-31.3 0h-15.7v-16h15.7v16z m-31.4 0h-15.7v-16h15.7v16z m-31.3 0h-15.7v-16h15.7v16z m-31.4 0h-15.7v-16h15.7v16z m-31.3 0h-15.7v-16h15.7v16z m-31.3 0h-15.7v-16h15.7v16z m-31.4 0h-15.7v-16h15.7v16z m-31.3 0h-15.7v-16h15.7v16z m-31.4 0h-15.7v-16h15.7v16z m-31.3 0h-15.7v-16h15.7v16z m-31.4 0H347v-16h15.7v16z m-31.3 0h-15.7v-16h15.7v16z m-31.4 0h-15.7v-16H300v16z m-31.3 0H253v-16h15.7v16z m-31.3 0h-15.7v-16h15.7v16z m-31.4 0h-15.7v-16H206v16z m-31.3 0H159v-16h15.7v16zM879.9 190.6h16v16h-16zM895.9 719.9h-16v-16h16v16z m0-32h-16v-16h16v16z m0-32.1h-16v-16h16v16z m0-32.1h-16v-16h16v16z m0-32.1h-16v-16h16v16z m0-32.1h-16v-16h16v16z m0-32.1h-16v-16h16v16z m0-32h-16v-16h16v16z m0-32.1h-16v-16h16v16z m0-32.1h-16v-16h16v16z m0-32.1h-16v-16h16v16z m0-32.1h-16v-16h16v16z m0-32.1h-16v-16h16v16z m0-32.1h-16v-16h16v16z m0-32h-16v-16h16v16z m0-32.1h-16v-16h16v16z" fill="#0A0408" /><path d="M263 274.5h495.8V634H263z" fill="#F4BE6F" /><path d="M758.8 642H255V274.5h16V626h487.8zM503.6 764.6h16v137.2h-16z" fill="#0A0408" /><path d="M511.1 913.7m-35.8 0a35.8 35.8 0 1 0 71.6 0 35.8 35.8 0 1 0-71.6 0Z" fill="#55B7A8" /><path d="M511.1 957.5c-24.2 0-43.8-19.7-43.8-43.8s19.7-43.8 43.8-43.8c24.2 0 43.8 19.7 43.8 43.8s-19.6 43.8-43.8 43.8z m0-71.7c-15.4 0-27.8 12.5-27.8 27.8 0 15.4 12.5 27.8 27.8 27.8 15.4 0 27.8-12.5 27.8-27.8 0.1-15.3-12.4-27.8-27.8-27.8z" fill="#0A0408" /><path d="M268.7 639.7l-11.3-11.3 191.1-191.2L543 530l135.1-133.7 11.2 11.4-146.2 144.8-94.5-92.7z" fill="#0A0408" /><path d="M694.9 467.3h-16v-62h-62v-16h78z" fill="#0A0408" /><path d="M71.9 106.8h879.4v92.8H71.9z" fill="#55B7A8" /><path d="M959.3 207.6H63.9V98.8h895.4v108.8z m-879.4-16h863.4v-76.8H79.9v76.8z" fill="#0A0408" /><path d="M109.9 718.5h50.9v50.9h-50.9z" fill="#DC444A" /><path d="M168.8 777.4h-66.9v-66.9h66.9v66.9z m-50.9-16h34.9v-34.9h-34.9v34.9z" fill="#0A0408" /><path d="M862.5 718.5h50.9v50.9h-50.9z" fill="#DC444A" /><path d="M921.3 777.4h-66.9v-66.9h66.9v66.9z m-50.8-16h34.9v-34.9h-34.9v34.9z" fill="#0A0408" /></svg>

Before

Width:  |  Height:  |  Size: 3.5 KiB

View file

@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M503.8 817.7h16v128.9h-16zM503.7 62.7h16v127.7h-16z" fill="#0A0408" /><path d="M511.7 214h379.2v600.7H132.6V214h379.1" fill="#FFFFFF" /><path d="M511.7 206h8v16h-8zM867.1 222h-15.8v-16h15.8v16z m-31.6 0h-15.8v-16h15.8v16z m-31.6 0h-15.8v-16h15.8v16z m-31.6 0h-15.8v-16h15.8v16z m-31.5 0H725v-16h15.8v16z m-31.6 0h-15.8v-16h15.8v16z m-31.6 0h-15.8v-16h15.8v16z m-31.6 0h-15.8v-16H646v16z m-31.5 0h-15.8v-16h15.8v16z m-31.6 0h-15.8v-16h15.8v16z m-31.6 0h-15.8v-16h15.8v16zM882.9 206h16v16h-16zM898.9 790.9h-16v-15.8h16v15.8z m0-31.6h-16v-15.8h16v15.8z m0-31.6h-16v-15.8h16v15.8z m0-31.6h-16v-15.8h16v15.8z m0-31.6h-16v-15.8h16v15.8z m0-31.6h-16v-15.8h16v15.8z m0-31.6h-16v-15.8h16v15.8z m0-31.6h-16v-15.8h16v15.8z m0-31.6h-16v-15.8h16v15.8z m0-31.6h-16v-15.8h16v15.8z m0-31.7h-16V459h16v15.8z m0-31.6h-16v-15.8h16v15.8z m0-31.6h-16v-15.8h16v15.8z m0-31.6h-16v-15.8h16V380z m0-31.6h-16v-15.8h16v15.8z m0-31.6h-16V301h16v15.8z m0-31.6h-16v-15.8h16v15.8z m0-31.6h-16v-15.8h16v15.8zM882.9 806.7h16v16h-16zM867.1 822.7h-15.8v-16h15.8v16z m-31.6 0h-15.8v-16h15.8v16z m-31.6 0h-15.8v-16h15.8v16z m-31.6 0h-15.8v-16h15.8v16z m-31.6 0h-15.8v-16h15.8v16z m-31.6 0h-15.8v-16h15.8v16z m-31.5 0h-15.8v-16h15.8v16z m-31.6 0h-15.8v-16H646v16z m-31.6 0h-15.8v-16h15.8v16z m-31.6 0H567v-16h15.8v16z m-31.6 0h-15.8v-16h15.8v16z m-31.6 0h-15.8v-16h15.8v16z m-31.5 0h-15.8v-16h15.8v16z m-31.6 0h-15.8v-16h15.8v16z m-31.6 0h-15.8v-16h15.8v16z m-31.6 0h-15.8v-16h15.8v16z m-31.6 0h-15.8v-16h15.8v16z m-31.6 0h-15.8v-16h15.8v16z m-31.6 0h-15.8v-16h15.8v16z m-31.5 0h-15.8v-16H267v16z m-31.6 0h-15.8v-16h15.8v16z m-31.6 0H188v-16h15.8v16z m-31.6 0h-15.8v-16h15.8v16zM124.6 806.7h16v16h-16zM140.6 790.9h-16v-15.8h16v15.8z m0-31.6h-16v-15.8h16v15.8z m0-31.6h-16v-15.8h16v15.8z m0-31.6h-16v-15.8h16v15.8z m0-31.6h-16v-15.8h16v15.8z m0-31.6h-16v-15.8h16v15.8z m0-31.6h-16v-15.8h16v15.8z m0-31.6h-16v-15.8h16v15.8z m0-31.6h-16v-15.8h16v15.8z m0-31.6h-16v-15.8h16v15.8z m0-31.7h-16V459h16v15.8z m0-31.6h-16v-15.8h16v15.8z m0-31.6h-16v-15.8h16v15.8z m0-31.6h-16v-15.8h16V380z m0-31.6h-16v-15.8h16v15.8z m0-31.6h-16V301h16v15.8z m0-31.6h-16v-15.8h16v15.8z m0-31.6h-16v-15.8h16v15.8zM124.6 206h16v16h-16zM488 222h-15.8v-16H488v16z m-31.6 0h-15.8v-16h15.8v16z m-31.6 0H409v-16h15.8v16z m-31.6 0h-15.8v-16h15.8v16z m-31.5 0h-15.8v-16h15.8v16z m-31.6 0h-15.8v-16h15.8v16z m-31.6 0h-15.8v-16h15.8v16z m-31.6 0h-15.8v-16h15.8v16z m-31.6 0h-15.8v-16h15.8v16z m-31.5 0H188v-16h15.8v16z m-31.6 0h-15.8v-16h15.8v16zM503.7 206h8v16h-8zM333.7 957.6l-7.6-14.1 185.7-100.9 182 101-7.8 14-174.3-96.8z" fill="#0A0408" /><path d="M754.6 537.7c0 74.9-60.7 135.6-135.6 135.6s-135.6-60.7-135.6-135.6S544.1 402.1 619 402.1v135.6h135.6z" fill="#55B7A8" /><path d="M619 681.4c-79.2 0-143.6-64.4-143.6-143.6S539.8 394.1 619 394.1h8v135.6h135.6v8c0 79.2-64.4 143.7-143.6 143.7z m-8-271c-66.7 4.1-119.6 59.7-119.6 127.4 0 70.4 57.3 127.6 127.6 127.6 67.7 0 123.2-53 127.4-119.6H611V410.4z" fill="#0A0408" /><path d="M794.5 513.8H642.9V362.2h8c79.2 0 143.6 64.4 143.6 143.6v8z m-135.6-16h119.4c-4-64-55.4-115.4-119.4-119.4v119.4z" fill="#0A0408" /><path d="M750.4 477.8c0-39.5-32-71.5-71.5-71.5v71.5h71.5z" fill="#DC444A" /><path d="M229.1 583.2h16v90.2h-16zM288.7 411.5h16v261.9h-16zM348.3 512.5h16v160.9h-16zM407.9 613.5h16v59.9h-16z" fill="#0A0408" /><path d="M106.9 188.3h51.4v51.4h-51.4z" fill="#DC444A" /><path d="M166.3 247.7H98.9v-67.4h67.4v67.4z m-51.4-16h35.4v-35.4h-35.4v35.4z" fill="#0A0408" /><path d="M106.9 791h51.4v51.4h-51.4z" fill="#DC444A" /><path d="M166.3 850.4H98.9V783h67.4v67.4z m-51.4-16h35.4V799h-35.4v35.4z" fill="#0A0408" /><path d="M865.2 188.3h51.4v51.4h-51.4z" fill="#DC444A" /><path d="M924.6 247.7h-67.4v-67.4h67.4v67.4z m-51.4-16h35.4v-35.4h-35.4v35.4z" fill="#0A0408" /><path d="M865.2 791h51.4v51.4h-51.4z" fill="#DC444A" /><path d="M924.6 850.4h-67.4V783h67.4v67.4z m-51.4-16h35.4V799h-35.4v35.4z" fill="#0A0408" /></svg>

Before

Width:  |  Height:  |  Size: 4.1 KiB

View file

@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M135.3 373h753.1v493H135.3z" fill="#FFFFFF" /><path d="M880.5 365h16v16h-16zM864.8 381h-15.7v-16h15.7v16z m-31.4 0h-15.7v-16h15.7v16z m-31.3 0h-15.7v-16h15.7v16z m-31.4 0H755v-16h15.7v16z m-31.4 0h-15.7v-16h15.7v16z m-31.3 0h-15.7v-16H708v16z m-31.4 0h-15.7v-16h15.7v16z m-31.4 0h-15.7v-16h15.7v16z m-31.3 0h-15.7v-16h15.7v16z m-31.4 0h-15.7v-16h15.7v16z m-31.4 0h-15.7v-16h15.7v16z m-31.4 0H504v-16h15.7v16z m-31.3 0h-15.7v-16h15.7v16z m-31.4 0h-15.7v-16H457v16z m-31.4 0H410v-16h15.7v16z m-31.3 0h-15.7v-16h15.7v16z m-31.4 0h-15.7v-16h15.7v16z m-31.4 0h-15.7v-16h15.7v16z m-31.3 0h-15.7v-16h15.7v16z m-31.4 0h-15.7v-16h15.7v16z m-31.4 0h-15.7v-16h15.7v16z m-31.3 0h-15.7v-16h15.7v16z m-31.4 0H159v-16h15.7v16zM127.3 365h16v16h-16zM143.3 841.5h-16v-16.4h16v16.4z m0-32.9h-16v-16.4h16v16.4z m0-32.8h-16v-16.4h16v16.4z m0-32.9h-16v-16.4h16v16.4z m0-32.9h-16v-16.4h16V710z m0-32.9h-16v-16.4h16v16.4z m0-32.9h-16v-16.4h16v16.4z m0-32.9h-16v-16.4h16v16.4z m0-32.9h-16V562h16v16.4z m0-32.9h-16v-16.4h16v16.4z m0-32.9h-16v-16.4h16v16.4z m0-32.9h-16v-16.4h16v16.4z m0-32.9h-16v-16.4h16v16.4z m0-32.9h-16v-16.4h16v16.4zM127.3 858h16v16h-16zM864.8 874h-15.7v-16h15.7v16z m-31.4 0h-15.7v-16h15.7v16z m-31.3 0h-15.7v-16h15.7v16z m-31.4 0H755v-16h15.7v16z m-31.4 0h-15.7v-16h15.7v16z m-31.3 0h-15.7v-16H708v16z m-31.4 0h-15.7v-16h15.7v16z m-31.4 0h-15.7v-16h15.7v16z m-31.3 0h-15.7v-16h15.7v16z m-31.4 0h-15.7v-16h15.7v16z m-31.4 0h-15.7v-16h15.7v16z m-31.4 0H504v-16h15.7v16z m-31.3 0h-15.7v-16h15.7v16z m-31.4 0h-15.7v-16H457v16z m-31.4 0H410v-16h15.7v16z m-31.3 0h-15.7v-16h15.7v16z m-31.4 0h-15.7v-16h15.7v16z m-31.4 0h-15.7v-16h15.7v16z m-31.3 0h-15.7v-16h15.7v16z m-31.4 0h-15.7v-16h15.7v16z m-31.4 0h-15.7v-16h15.7v16z m-31.3 0h-15.7v-16h15.7v16z m-31.4 0H159v-16h15.7v16zM880.5 858h16v16h-16zM896.5 841.5h-16v-16.4h16v16.4z m0-32.9h-16v-16.4h16v16.4z m0-32.8h-16v-16.4h16v16.4z m0-32.9h-16v-16.4h16v16.4z m0-32.9h-16v-16.4h16V710z m0-32.9h-16v-16.4h16v16.4z m0-32.9h-16v-16.4h16v16.4z m0-32.9h-16v-16.4h16v16.4z m0-32.9h-16V562h16v16.4z m0-32.9h-16v-16.4h16v16.4z m0-32.9h-16v-16.4h16v16.4z m0-32.9h-16v-16.4h16v16.4z m0-32.9h-16v-16.4h16v16.4z m0-32.9h-16v-16.4h16v16.4z" fill="#0A0408" /><path d="M192.7 440.7h645.2v454.9H192.7z" fill="#EBB866" /><path d="M71.9 864.5H952v83.9H71.9z" fill="#FFFFFF" /><path d="M959.9 956.4h-896v-99.9H960v99.9z m-880-16H944v-67.9H79.9v67.9z" fill="#0A0408" /><path d="M314.5 334.1h84.4v319.7h-84.4z" fill="#55B7A8" /><path d="M406.9 661.8H306.5V326.1h100.4v335.7z m-84.4-16h68.4V342.1h-68.4v303.7z" fill="#0A0408" /><path d="M475.3 145.7h84.4v508.1h-84.4z" fill="#DC444A" /><path d="M567.6 661.8H467.3V137.7h100.4v524.1z m-84.3-16h68.4V153.7h-68.4v492.1z" fill="#0A0408" /><path d="M636 241.8h84.4v412H636z" fill="#68A4D9" /><path d="M728.4 661.8H628v-428h100.4v428z m-84.4-16h68.4v-396H644v396z" fill="#0A0408" /><path d="M314.5 308.7h84.4v110.8h-84.4z" fill="#FFFFFF" /><path d="M406.9 427.5H306.5V300.7h100.4v126.8z m-84.4-16h68.4v-94.8h-68.4v94.8z" fill="#0A0408" /><path d="M475.3 104h84.4v110.8h-84.4z" fill="#FFFFFF" /><path d="M567.6 222.8H467.3V96h100.4v126.8z m-84.3-16h68.4V112h-68.4v94.8z" fill="#0A0408" /><path d="M636 223.3h84.4v110.8H636z" fill="#FFFFFF" /><path d="M728.4 342.1H628V215.3h100.4v126.8z m-84.4-16h68.4v-94.8H644v94.8z" fill="#0A0408" /><path d="M314.5 742.2h8v16h-8zM696.8 758.2h-15.6v-16h15.6v16z m-31.2 0H650v-16h15.6v16z m-31.2 0h-15.6v-16h15.6v16z m-31.2 0h-15.6v-16h15.6v16z m-31.2 0h-15.6v-16H572v16z m-31.2 0h-15.6v-16h15.6v16z m-31.1 0h-15.6v-16h15.6v16z m-31.2 0h-15.6v-16h15.6v16z m-31.2 0h-15.6v-16h15.6v16z m-31.2 0h-15.6v-16h15.6v16z m-31.2 0h-15.6v-16h15.6v16z m-31.2 0h-15.6v-16h15.6v16zM712.4 742.2h8v16h-8z" fill="#0A0408" /><path d="M109.9 347.6h50.9v50.9h-50.9z" fill="#DC444A" /><path d="M168.8 406.5h-66.9v-66.9h66.9v66.9z m-50.9-16h34.9v-34.9h-34.9v34.9z" fill="#0A0408" /><path d="M863.7 346.9h50.9v50.9h-50.9z" fill="#DC444A" /><path d="M922.6 405.7h-66.9v-66.9h66.9v66.9z m-50.9-16h34.9v-34.9h-34.9v34.9z" fill="#0A0408" /></svg>

Before

Width:  |  Height:  |  Size: 4.2 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 5.4 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 5 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 5.3 KiB

View file

@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="170.10px" viewBox="0 0 1204 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M0 0m84.453608 0l1035.23233 0q84.453608 0 84.453608 84.453608l0 669.801567q0 84.453608-84.453608 84.453609l-1035.23233 0q-84.453608 0-84.453608-84.453609l0-669.801567q0-84.453608 84.453608-84.453608Z" fill="#D6E0E8" /><path d="M47.716289 33.190268m84.453608 0l939.799752 0q84.453608 0 84.453609 84.453608l0 603.421031q0 84.453608-84.453609 84.453608l-939.799752 0q-84.453608 0-84.453608-84.453608l0-603.421031q0-84.453608 84.453608-84.453608Z" fill="#8DDFFF" /><path d="M712.112825 955.001402H492.026722l19.67769-116.292618h180.730722l19.677691 116.292618z" fill="#244F60" /><path d="M693.533031 838.708784h-33.274722l17.650804 116.292618h33.190268l-17.56635-116.292618z" fill="#19355E" opacity=".47" /><path d="M413.82268 955.001402h376.663093a68.998598 68.998598 0 0 1 68.998598 68.998598h-515.16701a68.998598 68.998598 0 0 1 69.505319-68.998598z" fill="#2E5A70" /><path d="M790.485773 955.001402h-41.466721a68.914144 68.914144 0 0 1 68.914144 68.914144h41.551175a68.914144 68.914144 0 0 0-68.998598-68.914144z" fill="#19355E" opacity=".47" /><path d="M602.069773 780.604701m-24.913814 0a24.913814 24.913814 0 1 0 49.827629 0 24.913814 24.913814 0 1 0-49.827629 0Z" fill="#FFFFFF" /><path d="M1133.53633 755.690887v-41.551176H0v41.551176a83.017897 83.017897 0 0 0 83.017897 83.017897h967.500536a83.017897 83.017897 0 0 0 83.017897-83.017897z" fill="#2E5A70" /><path d="M1167.48668 824.520577a78.457402 78.457402 0 0 1-14.103752 7.685279 78.457402 78.457402 0 0 0 14.103752-7.685279zM1203.717278 764.136247a77.866227 77.866227 0 0 1-3.378144 16.215093 77.866227 77.866227 0 0 0 3.378144-16.215093zM1121.037196 0h-70.518763a83.017897 83.017897 0 0 1 83.017897 83.017897v631.121814h70.603216V83.017897A83.102351 83.102351 0 0 0 1121.037196 0zM1173.905155 819.791175a84.453608 84.453608 0 0 0 20.184412-24.491546 84.453608 84.453608 0 0 1-20.184412 24.491546z" fill="#F0F5FF" opacity=".33" /><path d="M1133.53633 755.690887a83.017897 83.017897 0 0 1-83.017897 83.017897h70.518763a82.257814 82.257814 0 0 0 32.345732-6.502928 78.457402 78.457402 0 0 0 14.103752-7.685279 69.75868 69.75868 0 0 0 6.418475-4.729402 84.453608 84.453608 0 0 0 20.184412-24.491546 83.355711 83.355711 0 0 0 6.249567-14.948289 77.866227 77.866227 0 0 0 3.378144-16.215093c0-2.786969 0.422268-5.573938 0.422268-8.44536v-41.551176h-70.603216z" fill="#0459A5" /><path d="M1133.53633 755.690887a83.017897 83.017897 0 0 1-83.017897 83.017897h70.518763a82.257814 82.257814 0 0 0 32.345732-6.502928 78.457402 78.457402 0 0 0 14.103752-7.685279 69.75868 69.75868 0 0 0 6.418475-4.729402 84.453608 84.453608 0 0 0 20.184412-24.491546 83.355711 83.355711 0 0 0 6.249567-14.948289 77.866227 77.866227 0 0 0 3.378144-16.215093c0-2.786969 0.422268-5.573938 0.422268-8.44536v-41.551176h-70.603216z" fill="#153D4C" /><path d="M583.321072 383.166021c0 114.688-68.914144 213.498722-202.68866 213.498721-129.382928 0-197.114722-93.996866-197.114721-212.147464 0-119.924124 74.825897-212.06301 202.68866-212.06301 120.515299 0 197.114722 84.538062 197.114721 210.711753z m-307.833402 0c0 80.484289 35.386062 141.37534 108.438433 141.37534 79.301938 0 107.340536-66.380536 107.340536-139.855175 0-78.372948-31.923464-139.770722-108.776247-139.770722-74.488082 0-107.002722 57.597361-107.002722 137.828289zM731.368247 495.48932l-32.176824 95.179216H611.528577L751.637113 178.450474h111.901031l146.104743 412.218062h-93.743506l-33.781443-95.179216zM862.778062 422.268041c-29.305402-87.07167-47.969649-142.642144-57.935175-179.717278h-0.591176C793.863918 283.426309 773.510598 348.03332 750.032495 422.268041z" fill="#FF9831" /></svg>

Before

Width:  |  Height:  |  Size: 3.8 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 18 KiB

View file

@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M287.403798 183.554432a124.492312 124.492312 0 0 0-95.870977 45.136335L530.02035 951.711884h14.905487l270.818014-739.676075a124.00246 124.00246 0 0 0-79.146039-28.481377z" fill="#FFAF3B" /><path d="M191.532821 228.690767A127.081528 127.081528 0 0 0 162.07174 310.216087v514.904121A125.961867 125.961867 0 0 0 287.403798 951.711884H316.025133V495.310053zM379.355961 629.949293v321.83257h150.664389L379.355961 629.949293z" fill="#FF761A" /><path d="M379.355961 183.554432h-63.050912v311.755621l63.050912 134.63924V183.554432z" fill="#FF9E1D" /><path d="M316.305049 495.310053v456.47181h63.050912V629.949293l-63.050912-134.63924z" fill="#FF5A08" /><path d="M815.743851 212.035809L662.910119 629.809335v321.902549H736.597812a125.961867 125.961867 0 0 0 125.262078-126.591676V310.216087a126.801613 126.801613 0 0 0-46.116039-98.180278zM544.925837 951.781863h54.93337v-150.034579l-54.93337 150.034579z" fill="#FFC73B" /><path d="M662.910119 183.554432h-63.050912v618.192852l63.050912-172.147885V183.554432z" fill="#FF9E1D" /><path d="M599.859207 801.747284v150.034579h63.050912V629.599399l-63.050912 172.147885z" fill="#FFB206" /><path d="M347.795515 5.668284h72.07818v177.886148h-72.07818z" fill="#2B3747" /><path d="M396.150877 5.668284h23.722818v177.886148h-23.722818z" fill="#1D2B3A" /><path d="M600.908889 5.668284h72.07818v177.886148h-72.07818z" fill="#2B3747" /><path d="M649.26425 5.668284h23.722819v177.886148h-23.722819z" fill="#1D2B3A" /><path d="M730.649612 183.554432H648.354526c72.498052 0 131.210278 53.813709 131.210278 120.153625v527.920181c0 66.339917-58.712226 120.153625-131.210278 120.153625h82.295086c72.498052 0 131.280257-53.813709 131.280257-120.153625V303.708057c-0.069979-66.339917-58.782205-120.153625-131.280257-120.153625z" fill="#EF8B06" /><path d="M389.782804 41.147543v4.618602a13.995763 13.995763 0 0 0 13.995763 13.995763h189.852525a13.995763 13.995763 0 0 0 13.995763-13.995763v-4.618602z" fill="#FF761A" /><path d="M607.486898 13.995763a13.995763 13.995763 0 0 0-13.995763-13.995763H403.63861a13.995763 13.995763 0 0 0-13.995763 13.995763v27.15178h217.844051z" fill="#FF5A08" /><path d="M292.792167 969.69644a54.30356 53.74373 90 1 0 107.48746 0 54.30356 53.74373 90 1 0-107.48746 0Z" fill="#2B3747" /><path d="M346.535897 915.392879a55.213285 55.213285 0 0 0-9.727056 0.909725 54.373539 54.373539 0 0 1 0 106.787671 55.213285 55.213285 0 0 0 9.727056 0.909725 54.30356 54.30356 0 0 0 0-108.607121z" fill="#1D2B3A" /><path d="M587.332999 969.69644a54.30356 53.74373 90 1 0 107.48746 0 54.30356 53.74373 90 1 0-107.48746 0Z" fill="#2B3747" /><path d="M641.076729 915.392879a55.073327 55.073327 0 0 0-9.657076 0.909725 54.373539 54.373539 0 0 1 0 106.787671 55.073327 55.073327 0 0 0 9.657076 0.909725 54.30356 54.30356 0 0 0 0-108.607121z" fill="#1D2B3A" /></svg>

Before

Width:  |  Height:  |  Size: 3 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 6 KiB

View file

@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M88.917218 106.064551m82.970966 0l597.529237 0q82.970966 0 82.970965 82.970966l0 751.924375q0 82.970966-82.970965 82.970966l-597.529237 0q-82.970966 0-82.970966-82.970966l0-751.924375q0-82.970966 82.970966-82.970966Z" fill="#005691" /><path d="M169.675625 187.44524m48.12316 0l505.708035 0q48.12316 0 48.12316 48.12316l0 658.927751q0 48.12316-48.12316 48.12316l-505.708035 0q-48.12316 0-48.12316-48.12316l0-658.927751q0-48.12316 48.12316-48.12316Z" fill="#E2E5E7" /><path d="M638.392438 73.360162H547.608373a73.360162 73.360162 0 0 0-146.720324 0H302.774882a29.454693 29.454693 0 0 0-29.316408 29.316408V235.084402a29.454693 29.454693 0 0 0 29.316408 29.316408h335.617556A29.38555 29.38555 0 0 0 667.639703 235.084402V102.67657a29.38555 29.38555 0 0 0-29.247265-29.316408z" fill="#FFB236" /><path d="M466.919109 1.175422A78.684132 78.684132 0 0 1 479.779608 0a73.360162 73.360162 0 0 1 73.360162 73.360162h-25.790141A73.360162 73.360162 0 0 0 466.919109 1.175422zM647.450101 235.084402V102.67657c0-16.110196 1.451992-29.316408-14.658204-29.316408h11.131938a29.454693 29.454693 0 0 1 29.316408 29.316408V235.084402a29.454693 29.454693 0 0 1-29.316408 29.316408h-11.131938c16.179338 0 14.658204-13.206212 14.658204-29.316408z" fill="#E28805" /><path d="M474.248211 73.360162m-25.790142 0a25.790142 25.790142 0 1 0 51.580283 0 25.790142 25.790142 0 1 0-51.580283 0Z" fill="#005691" /><path d="M492.570966 81.449831a25.651857 25.651857 0 0 1-31.252397 13.828494c0.82971 0.483997 1.590277 0.967995 2.489129 1.38285a25.790142 25.790142 0 1 0 20.742741-47.155166 20.742741 20.742741 0 0 0-2.696556-0.898852 25.651857 25.651857 0 0 1 10.717083 32.842674z" fill="#004870" /><path d="M348.408913 163.314517m20.258744 0l200.167454 0q20.258744 0 20.258745 20.258744l0 2.419987q0 20.258744-20.258745 20.258744l-200.167454 0q-20.258744 0-20.258744-20.258744l0-2.419987q0-20.258744 20.258744-20.258744Z" fill="#E2E5E7" /><path d="M259.699122 387.474409m21.019311 0l252.715733 0q21.019311 0 21.019311 21.019311l0 2.489129q0 21.019311-21.019311 21.019312l-252.715733 0q-21.019311 0-21.019311-21.019312l0-2.489129q0-21.019311 21.019311-21.019311Z" fill="#586A73" /><path d="M259.699122 485.864146m21.019311 0l252.715733 0q21.019311 0 21.019311 21.019311l0 2.489129q0 21.019311-21.019311 21.019311l-252.715733 0q-21.019311 0-21.019311-21.019311l0-2.489129q0-21.019311 21.019311-21.019311Z" fill="#586A73" /><path d="M259.699122 584.323025m21.019311 0l125.770156 0q21.019311 0 21.019311 21.019311l0 2.489129q0 21.019311-21.019311 21.019312l-125.770156 0q-21.019311 0-21.019311-21.019312l0-2.489129q0-21.019311 21.019311-21.019311Z" fill="#586A73" /><path d="M461.318569 895.533288l310.311411-124.456448v110.143957z" fill="#C6CBCB" opacity=".7" /><path d="M841.947873 509.303444l-308.098852 298.833761 27.034706 31.183254 320.61364-288.669818z" fill="#EB8923" /><path d="M533.849021 808.137205l-29.316408-21.503309 316.465091-324.001621 20.742742 46.671169z" fill="#ED9E43" /><path d="M560.883727 839.320459l12.653072 33.050101 361.545983-304.226873-53.585415-17.285618z" fill="#D27228" /><path d="M820.997704 462.632275l20.742742 46.671169 39.549493 41.485482 53.585415 17.285618-16.24848-46.394598-43.490615-44.596894z m-316.465091 324.001621s62.228224 25.375287 69.142471 85.736664c0 0-103.713707 36.023228-112.218231 23.162728s43.07576-108.899392 43.07576-108.899392z" fill="#F2B643" /><path d="M461.318569 895.533288c3.802836 5.669683 25.997569 1.866847 49.644294-4.21769l-37.267792-41.485483c-9.126806 20.950169-15.833626 40.448346-12.376502 45.703173z" fill="#EB8923" /><path d="M851.282107 509.303444l-7.398245-33.948954 14.934774-2.903984-37.820932-9.818231 20.742742 46.671169 39.549493 41.485482z" fill="#D89932" /><path d="M462.286563 896.639568l1.037137 0.55314-0.967994-0.55314z m44.320324-4.217691c31.183255-7.674814 66.791627-20.051317 66.791628-20.051317a91.890344 91.890344 0 0 0-10.647941-33.603241l-65.270493 37.613505 13.206212 14.934774z" fill="#D89932" opacity=".4" /><path d="M472.588791 898.298987H479.019041l2.903984-0.414855h0.622282l3.664551-0.553139 3.249696-0.622283H489.943552l3.526266-0.691424h0.622282l7.951384-1.797705h0.622282l3.871979-0.898852 4.217691-1.106279-13.344497-14.934774-35.124376 19.359892 0.967995 0.55314 1.451992 0.414854h7.052532z" fill="#D27228" /></svg>

Before

Width:  |  Height:  |  Size: 4.4 KiB

View file

@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M799.521962 974.880603H210.446693a70.282921 70.282921 0 0 1-70.139925-70.139924V182.320905a68.781455 68.781455 0 0 1 2.573943-18.446586A70.35442 70.35442 0 0 0 91.187372 231.440302v722.13378a70.35442 70.35442 0 0 0 70.139924 70.139924h589.146767a70.35442 70.35442 0 0 0 67.565983-51.693338 68.924452 68.924452 0 0 1-18.518084 2.859935z" fill="#FCB670" /><path d="M745.183182 310.946516c-59.701159 0-108.248569-51.049853-108.248568-113.753945V0H254.489704a74.286831 74.286831 0 0 0-72.14188 75.859796v781.119955a74.215333 74.215333 0 0 0 72.14188 75.788298h606.163385a74.215333 74.215333 0 0 0 72.141879-75.788298V310.946516z" fill="#F9B04E" /><path d="M673.041303 197.192571a74.215333 74.215333 0 0 0 72.141879 75.788298h187.611786L673.041303 0z" fill="#EDA43A" /><path d="M636.934614 0h-8.579808l8.579808 9.008798V0z" fill="#D86100" opacity=".25" /><path d="M700.496686 310.946516h44.686496a107.676581 107.676581 0 0 1-95.235861-59.844156 77.575758 77.575758 0 0 1-21.449518-53.909789V0h-35.749197v197.192571c-0.500489 62.704092 48.046921 113.753945 107.74808 113.753945zM888.108472 856.979751a74.215333 74.215333 0 0 1-72.14188 75.788298h44.686497a74.215333 74.215333 0 0 0 72.141879-75.788298V310.946516h-44.686496z" fill="#D86100" opacity=".25" /><path d="M622.205944 675.159335H488.646944a145.14174 145.14174 0 0 1-128.697109-212.35023L405.780306 493.338919a90.731462 90.731462 0 0 0 82.866638 127.33864h133.559V573.417121L731.097999 646.059489l-108.892055 72.57087v-43.471024z m-120.403295-235.9447v43.685519L392.910595 410.400782l108.892054-72.57087v46.974445h131.986035a145.14174 145.14174 0 0 1 128.69711 211.992738l-45.758973-30.458315A90.731462 90.731462 0 0 0 670.324364 446.864963a89.444491 89.444491 0 0 0-36.321185-7.57883z" fill="#FF6845" /></svg>

Before

Width:  |  Height:  |  Size: 2 KiB

View file

@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="191.76px" viewBox="0 0 1068 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M0.62344 217.658447v708.227702c0 53.927549 38.964992 98.113851 85.722983 98.113851h896.194825c47.225571 0 85.722983-44.186301 85.722983-98.113851V214.151598c-7.169559 2.18204-1067.640791 3.506849-1067.640791 3.506849z" fill="#BDEBFF" /><path d="M981.917808 0H85.722983C38.964992 0 0 44.186301 0 98.113851v122.817656h1067.640791V98.113851C1067.640791 44.186301 1028.675799 0 981.917808 0z" fill="#005691" /><path d="M61.486758 112.608828a20.807306 20.028006 0 1 0 41.614612 0 20.807306 20.028006 0 1 0-41.614612 0Z" fill="#FF441F" /><path d="M158.977169 112.608828a20.807306 20.028006 0 1 0 41.614612 0 20.807306 20.028006 0 1 0-41.614612 0Z" fill="#6FE513" /><path d="M256.46758 112.608828a20.807306 20.028006 0 1 0 41.614612 0 20.807306 20.028006 0 1 0-41.614612 0Z" fill="#FFF41F" /><path d="M0 220.931507h1067.640791v43.640791H0z" fill="#9FE6FF" /><path d="M271.741857 473.658447H126.324505V311.719939h145.417352z m-122.038356-23.378995h98.65936V335.098935H149.703501zM335.098935 377.103196h595.774733v31.171994H335.098935zM271.741857 711.344901H126.324505V549.328463h145.417352z m-122.038356-23.378995h98.65936V572.707458H149.703501zM335.098935 614.71172h595.774733v31.171994H335.098935zM271.741857 949.031355H126.324505V787.092846h145.417352z m-122.038356-23.378996h98.65936V810.471842H149.703501zM335.098935 852.398174h595.774733v31.171993H335.098935z" fill="#0D455E" /><path d="M181.888584 493.608524l-69.903196-113.621918 33.198174-20.417656 43.562861 70.838356L321.071537 293.016743l28.054795 27.041704-167.237748 173.550077zM181.888584 712.981431l-69.903196-113.621918 33.198174-20.417656 43.562861 70.838356L321.071537 512.38965l28.054795 27.041705-167.237748 173.550076z" fill="#FF441F" /></svg>

Before

Width:  |  Height:  |  Size: 1.9 KiB

View file

@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M278.521074 32.22621h31.878195V485.133225h-31.878195z" fill="#C99071" /><path d="M310.329666 0h31.878195v485.133225h-31.878195z" fill="#F9CAA7" /><path d="M278.521074 32.22621L251.863108 0h113.870582l-23.525829 32.22621h-63.686787z" fill="#F9CAA7" /><path d="M134.860389 71.969549h31.878195v452.907014h-31.878195z" fill="#C99071" /><path d="M166.738584 39.812942h31.878195v485.133224h-31.878195z" fill="#F9CAA7" /><path d="M134.860389 72.039152l-26.657966-32.22621h113.940185l-23.525829 32.22621h-63.75639z" fill="#F9CAA7" /><path d="M521.85332 323.306145L150.312265 544.365416v479.634584h375.508429V325.95106l-3.967374-2.644915z" fill="#FF7352" /><path d="M873.766316 554.249048l-347.945622-228.297988v698.04894h347.945622V554.249048z" fill="#FF5736" /><path d="M734.281814 749.48559H317.289971l-34.801523-53.803154h486.594889l-34.801523 53.803154z" fill="#FFFFFF" opacity=".53" /><path d="M572.315528 546.244698H479.32586V456.665579h92.989668z m-86.029364-6.960304h79.069059V463.625884H486.286164z" fill="#FCFCFC" /><path d="M522.340542 460.145731h6.960304v82.688418h-6.960304z" fill="#FCFCFC" /><path d="M482.806012 497.940185h86.029364v6.960304H482.806012z" fill="#FCFCFC" /><path d="M317.289971 746.840674h86.516585v277.159326H317.289971z" fill="#52C1FF" /><path d="M403.806556 746.840674h330.475258v277.159326H403.806556z" fill="#45ABFF" /><path d="M29.898997 639.512779a27.841218 27.841218 0 0 1-14.964654-51.367048l492.232735-314.118542a27.841218 27.841218 0 0 1 30.41653 0.348015l472.047853 314.04894a27.841218 27.841218 0 0 1-30.834149 46.355628L521.85332 330.75367 44.863652 635.127787a27.841218 27.841218 0 0 1-14.964655 4.384992z" fill="#823500" /><path d="M317.289971 799.042958h86.516585v47.051659H317.289971z" fill="#A2DCFC" /><path d="M403.806556 799.042958h330.475258v47.051659H403.806556zM403.806556 895.234367h330.475258v47.051658H403.806556z" fill="#C2E6FF" /><path d="M317.289971 895.234367h86.516585v47.051658H317.289971zM317.289971 976.739532h86.516585v47.051659H317.289971z" fill="#A2DCFC" /><path d="M403.806556 976.739532h330.475258v47.051659H403.806556z" fill="#C2E6FF" /></svg>

Before

Width:  |  Height:  |  Size: 2.3 KiB

View file

@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="180.12px" viewBox="0 0 1137 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M1120.237833 68.659474h0.900183a16.366978 16.366978 0 0 0 16.366979-16.366978V17.512667a16.366978 16.366978 0 0 0-16.366979-16.366979H17.594502a16.366978 16.366978 0 0 0-16.366979 16.366979v34.452489a16.366978 16.366978 0 0 0 16.366979 16.366979h2.045872a16.366978 16.366978 0 0 1 16.366978 16.366978v628.819308a16.366978 16.366978 0 0 1-16.366978 16.366978H16.366978a16.366978 16.366978 0 0 0-16.366978 16.366979v34.534324a16.366978 16.366978 0 0 0 16.366978 16.366978h501.647887a18.249181 18.249181 0 0 1 2.209542 0h96.647007a18.249181 18.249181 0 0 1 2.209542 0h501.156877a16.366978 16.366978 0 0 0 16.366978-16.366978v-34.043315a16.366978 16.366978 0 0 0-16.366978-16.366978 16.366978 16.366978 0 0 1-16.366979-16.366979V85.271957a16.366978 16.366978 0 0 1 16.366979-16.612483z" fill="#2CDB8F" /><path d="M534.709182 814.502677v115.223528a16.366978 16.366978 0 0 1-16.366978 16.366978h-46.482218a16.366978 16.366978 0 0 0-16.366979 16.366978v44.436347a16.366978 16.366978 0 0 0 16.366979 16.366978h193.375849a16.366978 16.366978 0 0 0 16.366978-16.366978v-44.436347a16.366978 16.366978 0 0 0-16.366978-16.366978h-46.154879a16.366978 16.366978 0 0 1-16.366979-16.366978V814.502677a16.366978 16.366978 0 0 1 14.402941-16.366978H520.224407a16.366978 16.366978 0 0 1 14.484775 16.366978z" fill="#1CD384" /><path d="M665.31767 945.438504h-46.236714a16.366978 16.366978 0 0 1-16.366979-16.366978v-115.387198a16.366978 16.366978 0 0 1 16.366979-16.366978h-25.123312a16.366978 16.366978 0 0 0-16.366978 16.366978v115.141693a16.366978 16.366978 0 0 0 16.366978 16.366978h46.154879a16.366978 16.366978 0 0 1 16.366978 16.366979v45.00919a16.366978 16.366978 0 0 1-16.366978 16.366978h25.205147a16.366978 16.366978 0 0 0 16.366978-16.366978v-44.436346a16.366978 16.366978 0 0 0-16.366978-16.694318z" fill="#059959" opacity=".31" /><path d="M1120.237833 67.75929h0.900183a16.366978 16.366978 0 0 0 16.366979-16.366978V16.366978a16.366978 16.366978 0 0 0-16.366979-16.366978h-58.757452a16.366978 16.366978 0 0 1 16.366979 16.366978v34.779829a16.366978 16.366978 0 0 1-16.366979 16.366979h-0.982018a16.366978 16.366978 0 0 0-16.366979 16.366978v628.737473a16.366978 16.366978 0 0 0 16.366979 16.366978 16.366978 16.366978 0 0 1 16.366978 16.366979v34.534324a16.366978 16.366978 0 0 1-16.366978 16.366978h58.757452a16.366978 16.366978 0 0 0 16.366978-16.366978v-33.96148a16.366978 16.366978 0 0 0-16.366978-16.366978 16.366978 16.366978 0 0 1-16.366979-16.366979V84.371773a16.366978 16.366978 0 0 1 16.448814-16.612483z" fill="#009E5A" opacity=".16" /><path d="M901.902342 526.771198l-176.763367-162.851435a25.205147 25.205147 0 0 0-35.680012 1.554863L552.631024 515.559818a25.205147 25.205147 0 0 1-33.797811 3.191561l-137.646287-103.930313a25.123312 25.123312 0 0 0-32.733957 2.291377l-75.45177 75.45177a25.205147 25.205147 0 0 1-35.598178 0l-23.732119-23.732118a25.123312 25.123312 0 0 1 0-35.680013l126.844082-127.089587a25.286982 25.286982 0 0 1 32.733957-2.291377l135.109406 101.966275a25.123312 25.123312 0 0 0 33.797811-3.109726l142.147207-156.059138a25.205147 25.205147 0 0 1 35.843682-1.554863l238.794214 220.054024a25.123312 25.123312 0 0 1 1.391193 35.598177l-22.7501 24.550468a25.123312 25.123312 0 0 1-35.680012 1.554863z" fill="#FFFFFF" /><path d="M216.944298 472.350995l123.570686-123.488852a25.123312 25.123312 0 0 1 32.733957-2.291377l135.109406 101.966275a25.205147 25.205147 0 0 0 33.797811-3.109725l142.147207-156.059139a25.123312 25.123312 0 0 1 35.843682-1.554863l235.929993 217.435307 4.255414-4.582754a25.123312 25.123312 0 0 0-1.391193-35.598177L720.147047 245.013666a25.205147 25.205147 0 0 0-35.680013 1.554863L542.156158 402.627667a25.123312 25.123312 0 0 1-33.797811 3.109726L373.494446 303.771118a25.286982 25.286982 0 0 0-32.733957 2.291377L213.425398 433.152082a25.123312 25.123312 0 0 0 0 35.680013z" fill="#EAEAEA" opacity=".8" /><path d="M119.397107 154.995285a8.183489 8.183489 0 0 1-8.183489-8.183489v-81.834892a8.183489 8.183489 0 0 1 8.183489-8.183489H188.220251A8.183489 8.183489 0 0 1 188.220251 73.651403h-60.55782v73.651402a8.183489 8.183489 0 0 1-8.265324 7.69248zM119.397107 188.220251a8.183489 8.183489 0 0 1-8.183489-8.183489v-8.183489a8.183489 8.183489 0 1 1 16.366978 0v7.446975a8.183489 8.183489 0 0 1-8.183489 8.920003z" fill="#DEFFF0" /></svg>

Before

Width:  |  Height:  |  Size: 4.4 KiB

View file

@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="182.86px" viewBox="0 0 1120 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M907.736266 602.111768l-7.87692-3.071998a211.731611 211.731611 0 0 1-234.574679 0l-7.87692 3.071998a344.615252 344.615252 0 0 0-212.676841 321.142031v70.183357a29.853527 29.853527 0 0 0 30.011065 30.56245h616.290225a29.853527 29.853527 0 0 0 29.459681-30.168604v-70.183357a344.615252 344.615252 0 0 0-212.755611-321.535877z" fill="#289FF7" /><path d="M738.146178 634.48591a209.289766 209.289766 0 0 0 22.370453-1.339077 210.628842 210.628842 0 0 1-94.523041-34.107063l-7.87692 3.071998c-6.143998 2.520614-12.130457 5.198767-18.038147 7.87692a210.943919 210.943919 0 0 0 98.067655 24.497222zM907.736266 602.111768l-7.87692-3.071998a219.372223 219.372223 0 0 1-19.062146 11.185226 344.77279 344.77279 0 0 1 194.638694 313.028803v70.183357a29.853527 29.853527 0 0 1-29.459681 30.168604h44.740906a29.853527 29.853527 0 0 0 29.459681-30.168604v-70.183357a344.615252 344.615252 0 0 0-212.440534-321.142031z" fill="#0784D1" opacity=".67" /><path d="M778.239701 641.968984L724.676644 896.157194l51.042442 84.440583 49.467058-82.78643L778.239701 641.968984z" fill="#FCFCFC" /><path d="M897.023655 341.85833l-122.092261-60.494746S662.764053 385.26016 574.306241 387.465697a206.217767 206.217767 0 0 0 77.036278 161.55563l6.616613 5.277537a211.495303 211.495303 0 0 0 190.857772 22.212914c20.952607-33.791987 41.117523-84.283045 51.436288-159.428861a211.337765 211.337765 0 0 0-3.229537-75.224587z" fill="#FFDDCC" /><path d="M897.023655 341.85833c-15.75384-69.474435-64.275668-122.801184-111.773495-159.743939h-10.318766c-110.276881 0-200.625154 92.159965-200.625153 205.587614 88.457812-2.205538 200.625154-106.102113 200.625153-106.102113zM783.674776 639.842215l-5.435075 2.126769s1.96923-0.630154 5.435075-2.126769z" fill="#2B3747" /><path d="M892.061195 554.377633l6.537844-5.356306a206.375305 206.375305 0 0 0 77.036278-161.55563v-6.695382l-78.7692-38.911985a211.337765 211.337765 0 0 1 2.993229 75.382125c-10.318765 75.145817-30.483681 126.030721-51.436288 159.428862a210.707611 210.707611 0 0 0 43.638137-22.212915z" fill="#FFCBBB" /><path d="M897.023655 341.85833l78.7692 38.911985c-3.387076-106.811036-86.646121-193.220849-190.227619-198.655924 47.182751 36.942755 96.019655 90.269504 111.458419 159.743939z" fill="#1D2B3A" /><path d="M572.494549 569.895165a270.572204 270.572204 0 0 1 162.185784-450.874903 435.514909 435.514909 0 1 0-353.043557 748.78002 409.599842 409.599842 0 0 1 190.857773-297.905117z" fill="#FF9C39" /><path d="M411.017688 197.631924h-54.035671v209.526073L233.629449 533.740102l39.935984 30.168604 137.452255-141.075638V197.631924z" fill="#FFFFFF" /></svg>

Before

Width:  |  Height:  |  Size: 2.8 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 6.5 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 11 KiB

View file

@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="177.47px" viewBox="0 0 1154 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M0 0l746.638036 945.827741 66.369622-225.139338z" fill="#C6CBCB" /><path d="M521.902897 462.566354l-51.252546 133.547643L746.638036 945.827741l66.369622-225.139338z" fill="#D672AD" /><path d="M746.638036 945.827741l-68.713981-168.227994L0 0l602.096155 827.235494z" fill="#D1D5D5" /><path d="M677.924055 777.518907l-388.759454 246.481093L0 0z m135.083603-56.587984L0 0l1154.394884 571.296124z" fill="#E2E5E7" /><path d="M411.798847 472.267151l-132.739243 515.759059 10.104997 35.97379 389.163654-246.804453z m695.22381 75.504539L521.902897 462.566354l291.023921 258.687929 341.468066-149.958159z" fill="#EA8EBC" /><path d="M411.798847 472.267151l-132.739243 515.759059 152.221678-493.123865z m110.10405-9.700797l25.949633 23.120233 559.008447 62.085103z" fill="#D672AD" /><path d="M678.328255 777.195547l-77.121339 48.503987 59.013183 48.503987z" fill="#C6CBCB" /><path d="M28.698192 101.535012l23.201074-42.036788L0 0zM62.893503 55.779585l52.384305 1.293439L0 0z" fill="#EA8EBC" /></svg>

Before

Width:  |  Height:  |  Size: 1.2 KiB

View file

@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M398.302947 908.730277a112.4029 112.4029 0 1 0 224.732669 0H398.302947z" fill="#FF761A" /><path d="M510.705848 1001.095185a112.256637 112.256637 0 0 1-110.501485-92.438039h-1.901416a112.4029 112.4029 0 1 0 224.732669 0h-1.828284a112.329769 112.329769 0 0 1-110.501484 92.438039z" fill="#EF670A" /><path d="M904.006301 740.089362H117.405394a56.164884 56.164884 0 0 0 0 112.329768h786.600907a56.164884 56.164884 0 1 0 0-112.329768z" fill="#005691" /><path d="M769.51773 163.082932C610.968942 33.128506 452.639548 62.966101 378.191824 88.854602A393.446716 393.446716 0 0 0 117.405394 459.191808v280.897554h786.600907V459.191808A392.349746 392.349746 0 0 0 769.51773 163.082932z" fill="#138EE2" /><path d="M769.51773 163.082932C668.230797 80.444496 567.30952 62.307919 488.035126 66.988326c70.571762 4.168488 152.990805 28.448099 235.482979 96.094606A392.349746 392.349746 0 0 1 858.372332 459.191808v280.897554h45.999626V459.191808A392.349746 392.349746 0 0 0 769.51773 163.082932z" fill="#006AA5" opacity=".51" /><path d="M564.749923 80.444496c0-44.463867-29.691332-80.444496-66.330144-80.444496s-66.330143 35.980629-66.330143 80.444496z" fill="#0984C9" /><path d="M290.726717 278.411087h-2.340203a11.774149 11.774149 0 0 1-9.14142-13.894958c6.216166-30.568908 34.225476-88.342683 95.509556-88.342683a11.774149 11.774149 0 1 1 0 23.475166C317.200269 199.429218 302.573997 268.318959 302.573997 269.050273a11.774149 11.774149 0 0 1-11.84728 9.360814zM271.346907 330.334352h-2.340204a11.627886 11.627886 0 0 1-9.14142-13.821827c0.585051-3.071517 1.023839-5.192327 1.316365-6.654953a9.580208 9.580208 0 0 1 0.365657-3.510306 11.84728 11.84728 0 0 1 14.626272-9.433945c11.335361 2.632729 9.360814 12.139806 6.947479 24.279611a11.774149 11.774149 0 0 1-11.774149 9.14142z" fill="#FFFFFF" /></svg>

Before

Width:  |  Height:  |  Size: 2 KiB

View file

@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="199.42px" viewBox="0 0 1027 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M852.995973 895.203456h-4.423164c-2.249067 0-4.498133-2.249067-8.921297-2.249067l-408.730361-86.589062a55.77685 55.77685 0 0 1-33.286185-22.490666 45.356175 45.356175 0 0 1-6.672231-37.484442l122.199283-562.266637a54.577348 54.577348 0 0 1 51.05381-39.958416h4.423165c2.249067 0 4.498133 2.249067 8.921297 2.249066l408.730361 86.589063a50.229153 50.229153 0 0 1 39.958416 59.975108l-117.70115 559.792664c-11.095395 26.838861-31.411963 42.432389-55.551944 42.432389z m-415.402591-133.294678l422.074822 91.087195 119.950216-573.137125-422.074822-91.012227z" fill="#007FC6" /><path d="M544.199136 444.265612l13.344462-59.975108 333.236693 68.896406-13.644337 62.149205z m31.112087-113.277985l4.423165-31.112087 2.249066-6.672231 333.236694 73.31957-6.672231 37.484442z" fill="#007FC6" /><path d="M173.253093 788.597701a52.478219 52.478219 0 0 1-51.05381-40.033384L4.423164 188.846621a38.98382 38.98382 0 0 1 6.672231-37.484442 50.154184 50.154184 0 0 1 33.361154-22.490666L453.18691 44.456549a12.06999 12.06999 0 0 1 11.095395-4.498133 52.478219 52.478219 0 0 1 51.05381 37.484442l117.776119 562.266638c6.597262 26.688923-13.344462 55.551944-40.033385 62.224174l-408.730361 86.664031zM46.630646 173.253093l119.950216 573.137126 422.074823-91.087195-119.950216-570.88806z" fill="#007FC6" /><path d="M135.468775 424.24892l335.48576-71.070503L479.800864 397.33509h-2.249067l-333.161725 71.370379z m-22.490665-117.701149l335.410791-71.070503L457.310198 279.858848l-335.110915 71.145471z" fill="#007FC6" /><path d="M235.477268 797.44403a27.963394 27.963394 0 0 1-28.863021-28.863021V53.302877a27.963394 27.963394 0 0 1 28.863021-28.86302h553.120433A27.963394 27.963394 0 0 1 817.160846 53.302877v717.527198a27.963394 27.963394 0 0 1-28.86302 28.863021H235.477268z" fill="#66CCFF" /><path d="M235.477268 817.160846a51.653562 51.653562 0 0 1-51.12878-51.128779V51.053811A51.728531 51.728531 0 0 1 235.477268 0h553.120433a53.602753 53.602753 0 0 1 37.484443 15.518559A50.45406 50.45406 0 0 1 839.651512 51.053811v715.278131a51.653562 51.653562 0 0 1-51.053811 51.12878z m-4.423164-42.207482h566.389926V46.630646H231.054104z" fill="#1CA5F9" /><path d="M206.614247 148.813237h615.269639v33.361154H206.614247z m402.05813-48.879713A28.038363 28.038363 0 0 0 637.235522 128.871513a26.838861 26.838861 0 0 0 28.863021-28.937989 28.863021 28.863021 0 1 0-57.726041 0z" fill="#2EB9FF" /><path d="M635.286331 122.199283a20.991288 20.991288 0 0 1-22.490665-22.490666 22.490665 22.490665 0 0 1 44.38158 0 20.991288 20.991288 0 0 1-21.890915 22.490666z m55.551944-22.490666a28.863021 28.863021 0 1 0 57.726042 0 28.863021 28.863021 0 1 0-57.726042 0z" fill="#FFFFFF" /><path d="M719.701296 122.199283a20.991288 20.991288 0 0 1-22.490666-22.490666 22.490665 22.490665 0 1 1 44.38158 0 20.991288 20.991288 0 0 1-21.890914 22.490666z" fill="#FFFFFF" /><path d="M986.290651 635.286331H659.726188v75.568636H581.983454v51.053811h-122.199282v-51.053811h-68.821437V635.286331H39.958416v351.00432h946.332235z" fill="#FFB236" /><path d="M86.664031 1024A88.163409 88.163409 0 0 1 0 937.111062V682.216853a88.163409 88.163409 0 0 1 86.664031-86.888937h304.298704a133.369646 133.369646 0 0 0 266.514386 0H937.111062A88.163409 88.163409 0 0 1 1024 682.216853v254.894209A88.163409 88.163409 0 0 1 937.111062 1024z m0-382.341313a46.855553 46.855553 0 0 0-28.93799 11.39527A38.384069 38.384069 0 0 0 46.630646 682.216853v254.894209a46.630646 46.630646 0 0 0 11.095395 28.863021 38.459038 38.459038 0 0 0 28.93799 11.095395H937.111062a46.630646 46.630646 0 0 0 28.863021-11.095395 38.3091 38.3091 0 0 0 11.095395-28.863021V682.216853a46.780584 46.780584 0 0 0-11.095395-28.86302 38.3091 38.3091 0 0 0-28.863021-11.395271H693.087342l-2.249067 4.423164a180.899919 180.899919 0 0 1-168.829929 124.448349 178.800791 178.800791 0 0 1-168.829929-124.448349l-2.174098-4.423164z" fill="#FFA41F" /><path d="M330.462845 284.581887h360.37543v199.342266H330.462845z" fill="#FFFFFF" /><path d="M389.163482 333.536569h248.371916v33.960905H389.163482zM389.163482 403.782415h248.371916v33.960904H389.163482z" fill="#DCE0E2" /></svg>

Before

Width:  |  Height:  |  Size: 4.2 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 6 KiB

View file

@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M508.213034 0.023163v732.038057h142.943577v-2.504121a120.406488 120.406488 0 0 1 53.908162-99.399695A344.594881 344.594881 0 0 0 508.213034 0.023163z" fill="#FF9C39" /><path d="M508.213034 0.023163h-9.877367a344.66444 344.66444 0 0 0-179.114214 630.2038 120.8934 120.8934 0 0 1 53.699485 100.164843v1.87809H508.213034z" fill="#FFCB39" /><path d="M652.965143 732.06122H508.213034v84.374968h137.726658a22.050177 22.050177 0 0 0 22.050177-22.050177v-47.64786a14.676932 14.676932 0 0 0-15.024726-14.676931z" fill="#2EB9FF" /><path d="M372.920938 732.06122h-2.643239a22.050177 22.050177 0 0 0-22.050178 22.050177v40.274614a22.050177 22.050177 0 0 0 22.050178 22.050177H508.213034v-84.374968z" fill="#5FD9FF" /><path d="M508.213034 1024h46.604475a82.635995 82.635995 0 0 0 82.635995-82.635995v-42.222263a82.635995 82.635995 0 0 0-82.635995-82.705554H508.213034z" fill="#2EB9FF" /><path d="M469.329598 816.436188a82.635995 82.635995 0 0 0-82.635995 82.705554v42.222263a82.635995 82.635995 0 0 0 82.635995 82.635995H508.213034v-207.563812z" fill="#48CBFF" /><path d="M370.277699 816.436188a22.119736 22.119736 0 0 0-22.050178 22.119736v40.274613a22.050177 22.050177 0 0 0 22.050178 22.050178H508.213034v-84.444527z" fill="#2793FF" /><path d="M645.661456 816.436188H508.213034v84.444527h137.726658a22.050177 22.050177 0 0 0 22.050177-22.050178v-40.274613a22.119736 22.119736 0 0 0-22.328413-22.119736z" fill="#0068FF" /><path d="M507.656562 502.308112l-153.446974-182.939955 22.53709-18.920026L508.213034 457.164374l137.865776-156.994478 22.119736 19.476497-160.541984 182.661719z" fill="#FFF48D" /><path d="M493.257866 479.701464h29.423423v252.359756h-29.423423z" fill="#FFF48D" /></svg>

Before

Width:  |  Height:  |  Size: 1.9 KiB

View file

@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="180.12px" viewBox="0 0 1137 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M0 506.510163l91.916773 51.056024V222.555835L0 279.744954v226.765209z" fill="#0C4A6D" /><path d="M73.039584 234.344122v312.708188l18.877189 10.513877V222.555835l-18.877189 11.788287z" fill="#146082" /><path d="M629.239605 61.98026v634.974447c0 60.773395 232.898304 77.659318 232.898304 46.993844V15.066067C862.376861-15.838359 629.239605 1.286516 629.239605 61.98026z" fill="#5ABCFF" /><path d="M838.402035 2.401624V756.772295c14.735358-2.389517 23.895175-6.610998 23.895175-12.664443V15.066067c0.079651-6.133095-9.159817-10.274925-23.895175-12.664443z" fill="#2E95CE" /><path d="M917.900906 523.379896m13.560728-10.844775l19.159193-15.321977q13.560728-10.844776 24.405503 2.715952l100.786767 126.02768q10.844776 13.560728-2.715952 24.405503l-19.159193 15.321977q-13.560728 10.844776-24.405504-2.715952l-100.786767-126.02768q-10.844776-13.560728 2.715953-24.405503Z" fill="#FF9545" /><path d="M917.962394 188.82484m10.844775-13.560727l100.786767-126.02768q10.844776-13.560728 24.405503-2.715952l19.159194 15.321976q13.560728 10.844776 2.715952 24.405503l-100.786767 126.02768q-10.844776 13.560728-24.405504 2.715952l-19.159193-15.321976q-13.560728-10.844776-2.715952-24.405503Z" fill="#FF9545" /><path d="M941.065002 389.835298m0.027275-17.363806l0.038536-24.532349q0.027275-17.363806 17.39108-17.336531l161.371882 0.253483q17.363806 0.027275 17.336531 17.39108l-0.038536 24.53235q-0.027275 17.363806-17.39108 17.33653l-161.371882-0.253482q-17.363806-0.027275-17.336531-17.391081Z" fill="#FF9545" /><path d="M113.183478 554.858067l93.430134 14.894659 104.820167 389.013447a89.447605 89.447605 0 0 0 67.862297 62.366406L332.14293 589.506071z" fill="#FF761A" /><path d="M599.370636 632.278434L345.603879 591.895588 493.833614 978.439867a86.420882 86.420882 0 0 0 14.098153-72.561681L426.847473 604.958284l172.523163 27.559101z" fill="#FFC73B" /><path d="M332.14293 589.506071l47.153146 431.387556a111.032912 111.032912 0 0 0 54.003095-1.035457 108.245142 108.245142 0 0 0 60.534443-41.657255L345.603879 591.895588z" fill="#FFAF3B" /><path d="M374.357739 392.052276c-116.369502-52.011831-197.453795-63.720466-260.935309-55.038553v217.844344l485.868555 77.420367v-191.161399C542.420469 446.135021 467.947174 434.107783 374.357739 392.052276z" fill="#0090FF" /><path d="M113.183478 219.847716V337.013723c63.720466-8.602263 144.565808 3.026722 260.93531 55.038553C467.947174 434.107783 542.420469 446.135021 599.370636 441.117035V144.259312z" fill="#1DA2FC" /></svg>

Before

Width:  |  Height:  |  Size: 2.7 KiB

View file

@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M897.619834 344.338783a344.333757 344.333757 0 1 0-479.009307 316.965786 81.894464 81.894464 0 0 1 50.267701 75.26192v74.563758h168.745882V736.566489a81.754832 81.754832 0 0 1 50.337518-75.26192 344.403573 344.403573 0 0 0 209.658206-316.965786z" fill="#FFCB39" /><path d="M815.097024 344.338783A344.333757 344.333757 0 1 0 335.878268 661.304569a81.894464 81.894464 0 0 1 50.267701 75.26192v74.563758h168.955331V736.566489a81.894464 81.894464 0 0 1 50.337518-75.26192 344.403573 344.403573 0 0 0 209.658206-316.965786z" fill="#FFCB39" /><path d="M528.152227 0.912638c-5.5853 0-11.1706 0.907611-16.686085 1.605774a344.333757 344.333757 0 0 1 93.972676 658.786157 81.894464 81.894464 0 0 0-50.337518 75.26192v74.563758h82.52281V736.566489a81.754832 81.754832 0 0 1 50.337518-75.26192A344.403573 344.403573 0 0 0 528.152227 0.912638z" fill="#FFA310" /><path d="M190.660463 751.716616m74.843022 0l492.972558 0q74.843023 0 74.843023 74.843022l0 13.61417q0 74.843023-74.843023 74.843022l-492.972558 0q-74.843023 0-74.843022-74.843022l0-13.61417q0-74.843023 74.843022-74.843022Z" fill="#FFCB39" /><path d="M758.476043 751.716616H265.503485a74.633574 74.633574 0 0 0-60.879772 31.417313h489.621378a74.843023 74.843023 0 0 1 74.843022 74.843023v13.96325a74.70339 74.70339 0 0 1-13.96325 43.355893h3.35118a74.843023 74.843023 0 0 0 74.843023-74.843022v-13.963251a74.843023 74.843023 0 0 0-74.843023-74.773206z" fill="#EF680C" /><path d="M773.835619 1024h-523.621893a27.926501 27.926501 0 1 1 0-55.853002h523.621893a27.926501 27.926501 0 0 1 0 55.853002z" fill="#FFCB39" /><path d="M282.329202 192.418618a11.030968 11.030968 0 0 1-3.630445-0.628346 10.472438 10.472438 0 0 1-6.14383-13.474537c39.166918-104.724379 151.08237-92.297086 152.269246-92.157453a10.472438 10.472438 0 0 1-2.583201 20.944876c-3.979526-0.488714-96.765326-10.681887-130.067678 78.6131a10.472438 10.472438 0 0 1-9.844092 6.70236zM271.647315 236.263225a10.472438 10.472438 0 0 1-10.472437-9.774276 35.95537 35.95537 0 0 1 6.004197-21.992119A10.472438 10.472438 0 0 1 284.214241 216.435409a15.499208 15.499208 0 0 0-2.164304 8.517583 10.402622 10.402622 0 0 1-9.774275 11.100784z" fill="#FFFBF0" /></svg>

Before

Width:  |  Height:  |  Size: 2.4 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 14 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 8.5 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 6.5 KiB

View file

@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="200px" height="200.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M617.799864 133.119344l-0.704848 754.187293c-14.096959 43.991322-38.916417 74.449563-74.449563 91.365914-122.934291 58.616917-245.665938 60.379036-368.194942 5.286359-57.092683-25.72695-85.550918-71.189642-85.462812-134.53785 0.237886-226.670286 0.29075-453.243656 0.176212-679.73773-0.088106-95.947426 82.555315-141.233905 164.758205-159.471846 117.18097-26.079374 315.507558-8.017645 363.877748 122.90786z m-80.616983 18.326046c0-48.22041-82.123595-87.313038-183.436676-87.313038s-183.436676 39.092629-183.436675 87.313038 82.123595 87.313038 183.436675 87.313038 183.436676-39.092629 183.436676-87.313038z m-132.599518 390.485757c-0.352424-19.973628-1.259916-32.185119-2.731286-36.652092-17.885516-54.713821-113.832942-44.40542-104.758025 26.079373 3.171816 24.229148-22.819452 13.832641-33.215959 15.594761-57.180789 9.867871-57.709425 96.299849-4.052875 105.639085 12.775369 2.20265 39.471485-9.515447 37.445046 15.15423-7.400903 89.603794 125.286721 77.268955 104.405601-7.929539a6.3172 6.3172 0 0 1 1.356832-5.709268 6.114556 6.114556 0 0 1 5.42733-2.044059c99.912195 12.687263 89.868112-120.000361 0.528636-106.520145a3.788558 3.788558 0 0 1-4.4053-3.612346z m118.854983 305.022945a13.709292 13.709292 0 0 0-11.400915-0.088106c-3.621156 1.62115-6.343631 4.740102-7.453767 8.546282-14.978019 51.189581-105.198555 61.233665-148.899127 60.616922a15.092556 15.092556 0 0 0-8.281963 2.114544c-13.920747 8.986811-15.180662 18.475827-3.788558 28.458236 2.06168 1.76212 4.819398 2.819392 7.841434 2.995603 52.951701 2.731286 171.806685-13.127793 184.053417-80.176453 1.876658-10.281969-2.140976-17.770979-12.070521-22.467028z" fill="#E2F0FA" /><path d="M617.799864 133.119344c85.991448 5.400897 171.921223 11.541885 257.798133 18.414152 37.268835 2.995604 59.295333 18.590364 59.295333 56.916471 0.114538 207.75393 0.14978 415.446185 0.088106 623.085577 0 45.374586-14.449383 74.009033-63.876844 69.603734a3553.490877 3553.490877 0 0 0-254.009576-13.832641l0.704848-754.187293z m229.07558 154.714122c5.022042-0.026432 9.815008-3.436134 13.339247-9.462584 3.52424-6.03526 5.471382-14.202686 5.427329-22.704914-0.044053-8.511039-2.079301-16.652033-5.665215-22.65205-3.585914-5.991207-8.422933-9.348046-13.444975-9.321614-5.022042 0.026432-9.823818 3.436134-13.348057 9.462583-3.52424 6.03526-5.471382 14.202686-5.42733 22.704914 0.044053 8.511039 2.079301 16.652033 5.665216 22.64324 3.585914 6.000018 8.422933 9.356856 13.444974 9.330425z m17.533092 41.057392a17.268774 17.268774 0 0 0-17.268774-17.268774h-0.528636a17.268774 17.268774 0 0 0-17.268775 17.268774v453.569648a17.268774 17.268774 0 0 0 17.268775 17.268775h0.528636a17.268774 17.268774 0 0 0 17.268774-17.268775v-453.569648z" fill="#C8DAE5" /><path d="M170.30953 151.44539a183.436676 87.313038 0 1 0 366.873351 0 183.436676 87.313038 0 1 0-366.873351 0Z" fill="#C8DAE5" /><path d="M846.531311 223.692743a32.070581 18.942788 89.7 1 0 0.335841 64.140283 32.070581 18.942788 89.7 1 0-0.335841-64.140283Z" fill="#9EBED1" /><path d="M829.342351 311.622084m17.268775 0l0.528636 0q17.268774 0 17.268774 17.268774l0 453.569648q0 17.268774-17.268774 17.268775l-0.528636 0q-17.268774 0-17.268775-17.268775l0-453.569648q0-17.268774 17.268775-17.268774Z" fill="#9EBED1" /><path d="M408.988663 545.543493c89.339476-13.480217 99.383559 119.207407-0.528636 106.520145a6.114556 6.114556 0 0 0-5.42733 2.044059 6.3172 6.3172 0 0 0-1.356832 5.709268c20.88112 85.198494-111.806504 97.533333-104.405601 7.929539 2.026438-24.669678-24.669678-12.951581-37.445046-15.15423-53.656549-9.339235-53.127913-95.771214 4.052875-105.639085 10.396507-1.76212 36.387775 8.634387 33.215959-15.594761-9.074917-70.484794 86.872508-80.793195 104.758025-26.079373 1.47137 4.466974 2.378862 16.678464 2.731286 36.652092a3.788558 3.788558 0 0 0 4.4053 3.612346z" fill="#DC1C4B" /><path d="M523.438346 846.954092c9.929545 4.696049 13.947179 12.185059 12.070521 22.467028-12.246733 67.04866-131.101716 82.907739-184.053417 80.176453a13.110172 13.110172 0 0 1-7.841434-2.995603c-11.392105-9.982409-10.132189-19.471424 3.788558-28.458236 2.290756-1.436128 5.180632-2.167407 8.281963-2.114544 43.700572 0.616742 133.921108-9.427341 148.899127-60.616922 1.110136-3.797368 3.832611-6.925131 7.453767-8.546282 3.621156-1.629961 7.78857-1.594718 11.400915 0.088106z" fill="#C8DAE5" /></svg>

Before

Width:  |  Height:  |  Size: 4.5 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 7.6 KiB

Some files were not shown because too many files have changed in this diff Show more