diff --git a/src/plugin/main.ts b/src/plugin/main.ts index d4a4782..a4bec7f 100644 --- a/src/plugin/main.ts +++ b/src/plugin/main.ts @@ -9,6 +9,7 @@ import highlighterMenu from "src/ui/highlighterMenu"; import { createHighlighterIcons } from "src/icons/customIcons"; import { createStyles } from "src/utils/createStyles"; +import { log } from "console"; export default class HighlightrPlugin extends Plugin { app: App; editor: Editor; @@ -33,12 +34,23 @@ export default class HighlightrPlugin extends Plugin { name: "Open Highlightr", icon: "highlightr-pen", editorCallback: (editor) => { - !document.querySelector(".menu.highlighterContainer") - ? highlighterMenu(this.app, this, this.settings, editor) - : true; + let obj = document.querySelector(".colorboard"); + if (obj == null) { + highlighterMenu(this.app, this, this.settings, editor) + } else { + obj.parentNode.removeChild(obj); + } }, }); + let rightBarDOM = document.querySelector(".workspace-split, .mod-horizontal, .mod-right-split"); + rightBarDOM.addEventListener("resize", function (e) { + console.log("resize"); + console.log(e); + + }) + + addEventListener("Highlightr-NewCommand", () => { this.reloadStyles(this.settings); this.generateCommands(this.editor); @@ -117,11 +129,11 @@ export default class HighlightrPlugin extends Plugin { } (selectedText && sufFirst === " ") || - (!selectedText && sufFirst === " ") + (!selectedText && sufFirst === " ") ? editor.replaceSelection(`${prefix}${selectedText}${suffix}`) : selectedText && sufFirst !== " " - ? editor.replaceSelection(`${prefix}${selectedText}${suffix} `) - : editor.replaceSelection(`${prefix}${selectedText}${suffix} `); + ? editor.replaceSelection(`${prefix}${selectedText}${suffix} `) + : editor.replaceSelection(`${prefix}${selectedText}${suffix} `); return setCursor(1); }; diff --git a/src/ui/highlighterMenu.ts b/src/ui/highlighterMenu.ts index 80f1648..fcec89b 100644 --- a/src/ui/highlighterMenu.ts +++ b/src/ui/highlighterMenu.ts @@ -1,5 +1,5 @@ import type HighlightrPlugin from "src/plugin/main"; -import { App, Menu, Notice, Editor } from "obsidian"; +import { App, Menu, Notice, Editor, ButtonComponent } from "obsidian"; import { HighlightrSettings } from "src/settings/settingsData"; import { Coords } from "src/settings/types"; @@ -7,26 +7,20 @@ const highlighterMenu = ( app: App, plugin: HighlightrPlugin, settings: HighlightrSettings, - editor: Editor, - event: MouseEvent + editor: Editor ): void => { if (editor && editor.hasFocus()) { const cursor = editor.getCursor("from"); let coords: Coords; const editorCli = editor as any; - const menu = new Menu(plugin.app).addItem((item) => { - const itemDom = (item as any).dom as HTMLElement; - itemDom.setAttribute("style", "display: none"); - }); - - const menuDom = (menu as any).dom as HTMLElement; - menuDom.addClass("highlighterContainer"); + const colorboard = createEl("div"); + colorboard.setAttribute("class", "colorboard") settings.highlighterOrder.forEach((highlighter) => { - const colorButton = menuDom.createEl("div"); + const colorButton = createEl('div') + colorboard.appendChild(colorButton) colorButton.setAttribute("id", `${highlighter}`); - colorButton.addEventListener("click", function (event) { (app as any).commands.executeCommandById( `highlightr-plugin:${highlighter}` @@ -58,11 +52,18 @@ const highlighterMenu = ( } else { return; } + console.log("ffzdebug colorboard showAtPosition"); + console.log(colorboard); - menu.showAtPosition({ - x: coords.right + 25, - y: coords.top + 20, - }); + // colorboard.style.left = `${coords.right + 25}px`; + // colorboard.style.top = `${coords.top + 20}px`; + + // menu.showAtPosition({ + // x: coords.right + 25, + // y: coords.top + 20, + // }); + + document.body.appendChild(colorboard); } else { new Notice("Focus must be in editor"); } diff --git a/styles.css b/styles.css index 6f1d314..8f715c5 100644 --- a/styles.css +++ b/styles.css @@ -5,31 +5,23 @@ .highlightr-lowlight .markdown-preview-view mark { --lowlight-background: var(--background-primary); border-radius: 0; - background-image: linear-gradient( - 360deg, - rgba(255, 255, 255, 0) 40%, - var(--lowlight-background) 40% - ) !important; + background-image: linear-gradient(360deg, + rgba(255, 255, 255, 0) 40%, + var(--lowlight-background) 40%) !important; } .highlightr-lowlight .workspace-split.mod-left-split mark, .highlightr-lowlight .workspace-split.mod-left-split span.cm-highlight, -.highlightr-lowlight - .workspace-split.mod-left-split - .markdown-preview-view - mark, +.highlightr-lowlight .workspace-split.mod-left-split .markdown-preview-view mark, .highlightr-lowlight .workspace-split.mod-right-split mark, .highlightr-lowlight .workspace-split.mod-right-split span.cm-highlight, -.highlightr-lowlight - .workspace-split.mod-right-split - .markdown-preview-view - mark { +.highlightr-lowlight .workspace-split.mod-right-split .markdown-preview-view mark { --lowlight-background: var(--background-secondary); } .highlightr-lowlight .admonition-content mark, .highlightr-lowlight .admonition-content span.cm-highlight, -.highlightr-lowlight .admonition-content > .markdown-preview-view mark { +.highlightr-lowlight .admonition-content>.markdown-preview-view mark { --lowlight-background: var(--background-primary-alt); } @@ -40,31 +32,23 @@ --floating-background: var(--background-primary); border-radius: 0; padding-bottom: 5px; - background-image: linear-gradient( - 360deg, - rgba(255, 255, 255, 0) 28%, - var(--floating-background) 28% - ) !important; + background-image: linear-gradient(360deg, + rgba(255, 255, 255, 0) 28%, + var(--floating-background) 28%) !important; } .highlightr-floating .workspace-split.mod-left-split mark, .highlightr-floating .workspace-split.mod-left-split span.cm-highlight, -.highlightr-floating - .workspace-split.mod-left-split - .markdown-preview-view - mark, +.highlightr-floating .workspace-split.mod-left-split .markdown-preview-view mark, .highlightr-floating .workspace-split.mod-right-split mark, .highlightr-floating .workspace-split.mod-right-split span.cm-highlight, -.highlightr-floating - .workspace-split.mod-right-split - .markdown-preview-view - mark { +.highlightr-floating .workspace-split.mod-right-split .markdown-preview-view mark { --floating-background: var(--background-secondary); } .highlightr-floating .admonition-content mark, .highlightr-floating .admonition-content span.cm-highlight, -.highlightr-floating .admonition-content > .markdown-preview-view mark { +.highlightr-floating .admonition-content>.markdown-preview-view mark { --floating-background: var(--background-primary-alt); } @@ -88,7 +72,7 @@ font-weight: inherit; } -.highlightr-rounded .cm-highlight + span.cm-formatting-highlight { +.highlightr-rounded .cm-highlight+span.cm-formatting-highlight { padding-left: 0em; padding-right: 0.15em; -webkit-box-decoration-break: clone; @@ -126,10 +110,7 @@ box-decoration-break: clone; } -.highlightr-realistic - .cm-s-obsidian - .cm-highlight - + span.cm-formatting-highlight { +.highlightr-realistic .cm-s-obsidian .cm-highlight+span.cm-formatting-highlight { margin: 0 -0.05em 0 0; padding: 0.15em 0.25em; border-radius: 0 0.3em 0.8em 0; @@ -174,12 +155,15 @@ details[open] summary.highlight-summary::before { 0% { opacity: 0; } + 20% { opacity: 0.9; } + 40% { opacity: 0.95; } + 100% { opacity: 1; } @@ -262,14 +246,12 @@ button.HighlightrSettingsButton svg { grid-gap: 6px; } -.modal.mod-settings - button:not(.mod-cta):not(.mod-warning).HighlightrSettingsButton.HighlightrSettingsButtonAdd, +.modal.mod-settings button:not(.mod-cta):not(.mod-warning).HighlightrSettingsButton.HighlightrSettingsButtonAdd, button:not(.mod-cta):not(.mod-warning).HighlightrSettingsButton.HighlightrSettingsButtonAdd { background-color: var(--interactive-accent); } -.modal.mod-settings - button:not(.mod-cta):not(.mod-warning).HighlightrSettingsButton.HighlightrSettingsButtonDelete, +.modal.mod-settings button:not(.mod-cta):not(.mod-warning).HighlightrSettingsButton.HighlightrSettingsButtonDelete, button:not(.mod-cta):not(.mod-warning).HighlightrSettingsButton.HighlightrSettingsButtonDelete { background-color: #989cab; } @@ -342,7 +324,7 @@ HIGHLIGHTR SUPPORT color: var(--text-normal); } -.pcr-app .pcr-swatches > button { +.pcr-app .pcr-swatches>button { padding: 0; } @@ -350,7 +332,7 @@ HIGHLIGHTR SUPPORT margin-right: 0; } -.themed-color-wrapper > div { +.themed-color-wrapper>div { background: var(--background-primary); padding: 10px; display: flex; @@ -358,7 +340,7 @@ HIGHLIGHTR SUPPORT border-radius: 4px; } -.themed-color-wrapper > div + div { +.themed-color-wrapper>div+div { margin-top: 6px; } @@ -366,13 +348,13 @@ HIGHLIGHTR SUPPORT display: block; } -.themed-color-wrapper .pickr-reset > button { +.themed-color-wrapper .pickr-reset>button { margin: 0 0 0 10px; padding: 9px; line-height: 1; } -.themed-color-wrapper .pickr-reset > button > svg { +.themed-color-wrapper .pickr-reset>button>svg { display: block; } @@ -382,12 +364,14 @@ HIGHLIGHTR SUPPORT overflow: visible; transform: translateY(0); } + .pickr * { box-sizing: border-box; outline: none; border: none; -webkit-appearance: none; } + .pickr .pcr-button { position: relative; height: 2em; @@ -397,11 +381,11 @@ HIGHLIGHTR SUPPORT font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Helvetica Neue", Arial, sans-serif; border-radius: 0.15em; - background: url('data:image/svg+xml;utf8, ') - no-repeat center; + background: url('data:image/svg+xml;utf8, ') no-repeat center; background-size: 0; transition: all 0.3s; } + .pickr .pcr-button::before { position: absolute; content: ""; @@ -414,9 +398,11 @@ HIGHLIGHTR SUPPORT border-radius: 0.15em; z-index: -1; } + .pickr .pcr-button::before { z-index: initial; } + .pickr .pcr-button::after { position: absolute; content: ""; @@ -428,18 +414,23 @@ HIGHLIGHTR SUPPORT background: var(--pcr-color); border-radius: 0.15em; } + .pickr .pcr-button.clear { background-size: 70%; } + .pickr .pcr-button.clear::before { opacity: 0; } + .pickr .pcr-button.clear:focus { box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.85), 0 0 0 3px var(--pcr-color); } + .pickr .pcr-button.disabled { cursor: not-allowed; } + .pickr *, .pcr-app * { box-sizing: border-box; @@ -447,6 +438,7 @@ HIGHLIGHTR SUPPORT border: none; -webkit-appearance: none; } + .pickr input:focus, .pickr input.pcr-active, .pickr button:focus, @@ -457,18 +449,21 @@ HIGHLIGHTR SUPPORT .pcr-app button.pcr-active { box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.85), 0 0 0 3px var(--pcr-color); } + .pickr .pcr-palette, .pickr .pcr-slider, .pcr-app .pcr-palette, .pcr-app .pcr-slider { transition: box-shadow 0.3s; } + .pickr .pcr-palette:focus, .pickr .pcr-slider:focus, .pcr-app .pcr-palette:focus, .pcr-app .pcr-slider:focus { box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.85), 0 0 0 3px rgba(0, 0, 0, 0.25); } + .pcr-app { position: fixed; display: flex; @@ -485,19 +480,23 @@ HIGHLIGHTR SUPPORT left: 0; top: 0; } + .pcr-app.visible { transition: opacity 0.3s; visibility: visible; opacity: 1; } + .pcr-app .pcr-swatches { display: flex; flex-wrap: wrap; margin-top: 0.75em; } + .pcr-app .pcr-swatches.pcr-last { margin: 0; } + @supports (display: grid) { .pcr-app .pcr-swatches { display: grid; @@ -505,7 +504,8 @@ HIGHLIGHTR SUPPORT grid-template-columns: repeat(auto-fit, 1.75em); } } -.pcr-app .pcr-swatches > button { + +.pcr-app .pcr-swatches>button { font-size: 1em; position: relative; width: calc(1.75em - 5px); @@ -520,7 +520,8 @@ HIGHLIGHTR SUPPORT background: transparent; z-index: 1; } -.pcr-app .pcr-swatches > button::before { + +.pcr-app .pcr-swatches>button::before { position: absolute; content: ""; top: 0; @@ -532,7 +533,8 @@ HIGHLIGHTR SUPPORT border-radius: 0.15em; z-index: -1; } -.pcr-app .pcr-swatches > button::after { + +.pcr-app .pcr-swatches>button::after { content: ""; position: absolute; top: 0; @@ -544,21 +546,26 @@ HIGHLIGHTR SUPPORT border-radius: 0.15em; box-sizing: border-box; } -.pcr-app .pcr-swatches > button:hover { + +.pcr-app .pcr-swatches>button:hover { filter: brightness(1.05); } -.pcr-app .pcr-swatches > button:not(.pcr-active) { + +.pcr-app .pcr-swatches>button:not(.pcr-active) { box-shadow: none; } + .pcr-app .pcr-interaction { display: flex; flex-wrap: wrap; align-items: center; margin: 0 -0.2em 0 -0.2em; } -.pcr-app .pcr-interaction > * { + +.pcr-app .pcr-interaction>* { margin: 0 0.2em; } + .pcr-app .pcr-interaction input { letter-spacing: 0.07em; font-size: 0.75em; @@ -571,13 +578,16 @@ HIGHLIGHTR SUPPORT padding: 0.45em 0.5em; margin-top: 0.75em; } + .pcr-app .pcr-interaction input:hover { filter: brightness(0.975); } + .pcr-app .pcr-interaction input:focus { box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.85), 0 0 0 3px rgba(66, 133, 244, 0.75); } + .pcr-app .pcr-interaction .pcr-result { color: #75797e; text-align: left; @@ -588,46 +598,56 @@ HIGHLIGHTR SUPPORT background: #f1f3f4; cursor: text; } + .pcr-app .pcr-interaction .pcr-result::-moz-selection { background: #4285f4; color: #fff; } + .pcr-app .pcr-interaction .pcr-result::selection { background: #4285f4; color: #fff; } + .pcr-app .pcr-interaction .pcr-type.active { color: #fff; background: #4285f4; } + .pcr-app .pcr-interaction .pcr-save, .pcr-app .pcr-interaction .pcr-cancel, .pcr-app .pcr-interaction .pcr-clear { color: #fff; width: auto; } + .pcr-app .pcr-interaction .pcr-save, .pcr-app .pcr-interaction .pcr-cancel, .pcr-app .pcr-interaction .pcr-clear { color: #fff; } + .pcr-app .pcr-interaction .pcr-save:hover, .pcr-app .pcr-interaction .pcr-cancel:hover, .pcr-app .pcr-interaction .pcr-clear:hover { filter: brightness(0.925); } + .pcr-app .pcr-interaction .pcr-save { background: #4285f4; } + .pcr-app .pcr-interaction .pcr-clear, .pcr-app .pcr-interaction .pcr-cancel { background: #f44250; } + .pcr-app .pcr-interaction .pcr-clear:focus, .pcr-app .pcr-interaction .pcr-cancel:focus { box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.85), 0 0 0 3px rgba(244, 66, 80, 0.75); } + .pcr-app .pcr-selection .pcr-picker { position: absolute; height: 18px; @@ -639,6 +659,7 @@ HIGHLIGHTR SUPPORT -ms-user-select: none; user-select: none; } + .pcr-app .pcr-selection .pcr-color-palette, .pcr-app .pcr-selection .pcr-color-chooser, .pcr-app .pcr-selection .pcr-color-opacity { @@ -652,23 +673,28 @@ HIGHLIGHTR SUPPORT cursor: grab; cursor: -webkit-grab; } + .pcr-app .pcr-selection .pcr-color-palette:active, .pcr-app .pcr-selection .pcr-color-chooser:active, .pcr-app .pcr-selection .pcr-color-opacity:active { cursor: grabbing; cursor: -webkit-grabbing; } + .pcr-app[data-theme="nano"] { width: 14.25em; max-width: 95vw; } + .pcr-app[data-theme="nano"] .pcr-swatches { margin-top: 0.6em; padding: 0 0.6em; } + .pcr-app[data-theme="nano"] .pcr-interaction { padding: 0 0.6em 0.6em 0.6em; } + .pcr-app[data-theme="nano"] .pcr-selection { display: grid; grid-gap: 0.6em; @@ -679,6 +705,7 @@ HIGHLIGHTR SUPPORT width: 100%; align-self: flex-start; } + .pcr-app[data-theme="nano"] .pcr-selection .pcr-color-preview { grid-area: 2 / 1 / 4 / 1; height: 100%; @@ -688,13 +715,12 @@ HIGHLIGHTR SUPPORT justify-content: center; margin-left: 0.6em; } + .pcr-app[data-theme="nano"] .pcr-selection .pcr-color-preview .pcr-last-color { display: none; } -.pcr-app[data-theme="nano"] - .pcr-selection - .pcr-color-preview - .pcr-current-color { + +.pcr-app[data-theme="nano"] .pcr-selection .pcr-color-preview .pcr-current-color { position: relative; background: var(--pcr-color); width: 2em; @@ -702,10 +728,8 @@ HIGHLIGHTR SUPPORT border-radius: 50em; overflow: hidden; } -.pcr-app[data-theme="nano"] - .pcr-selection - .pcr-color-preview - .pcr-current-color::before { + +.pcr-app[data-theme="nano"] .pcr-selection .pcr-color-preview .pcr-current-color::before { position: absolute; content: ""; top: 0; @@ -717,21 +741,21 @@ HIGHLIGHTR SUPPORT border-radius: 0.15em; z-index: -1; } + .pcr-app[data-theme="nano"] .pcr-selection .pcr-color-palette { grid-area: 1 / 1 / 2 / 3; width: 100%; height: 100%; z-index: 1; } + .pcr-app[data-theme="nano"] .pcr-selection .pcr-color-palette .pcr-palette { border-radius: 0.15em; width: 100%; height: 100%; } -.pcr-app[data-theme="nano"] - .pcr-selection - .pcr-color-palette - .pcr-palette::before { + +.pcr-app[data-theme="nano"] .pcr-selection .pcr-color-palette .pcr-palette::before { position: absolute; content: ""; top: 0; @@ -743,32 +767,50 @@ HIGHLIGHTR SUPPORT border-radius: 0.15em; z-index: -1; } + .pcr-app[data-theme="nano"] .pcr-selection .pcr-color-chooser { grid-area: 2 / 2 / 2 / 2; } + .pcr-app[data-theme="nano"] .pcr-selection .pcr-color-opacity { grid-area: 3 / 2 / 3 / 2; } + .pcr-app[data-theme="nano"] .pcr-selection .pcr-color-chooser, .pcr-app[data-theme="nano"] .pcr-selection .pcr-color-opacity { height: 0.5em; margin: 0 0.6em; } + .pcr-app[data-theme="nano"] .pcr-selection .pcr-color-chooser .pcr-picker, .pcr-app[data-theme="nano"] .pcr-selection .pcr-color-opacity .pcr-picker { top: 50%; transform: translateY(-50%); } + .pcr-app[data-theme="nano"] .pcr-selection .pcr-color-chooser .pcr-slider, .pcr-app[data-theme="nano"] .pcr-selection .pcr-color-opacity .pcr-slider { flex-grow: 1; border-radius: 50em; } + .pcr-app[data-theme="nano"] .pcr-selection .pcr-color-chooser .pcr-slider { background: linear-gradient(to right, red, #ff0, lime, cyan, blue, #f0f, red); } + .pcr-app[data-theme="nano"] .pcr-selection .pcr-color-opacity .pcr-slider { background: linear-gradient(to right, transparent, black), url('data:image/svg+xml;utf8, '); background-size: 100%, 0.25em; } + +.colorboard { + position: absolute; + left: 75%; + top: 40%; +} + +.colorboard div:hover span{ + font-size: x-large; + transition: 0.3s; +} \ No newline at end of file