From 738a77eae12a9878fe8f7145327e5c994876201b Mon Sep 17 00:00:00 2001 From: CK <69121180+TfTHacker@users.noreply.github.com> Date: Fri, 27 Aug 2021 06:47:52 +0200 Subject: [PATCH 1/2] Move to esbuild, configure for vscode, configure for build folder output --- .gitignore | 8 +- LICENSE | 21 ++ main.js | 261 +++++++++++++++++++ package.json | 12 +- rollup.config.js | 30 --- main.ts => src/main.ts | 558 ++++++++++++++++++++--------------------- 6 files changed, 568 insertions(+), 322 deletions(-) create mode 100644 LICENSE create mode 100644 main.js delete mode 100644 rollup.config.js rename main.ts => src/main.ts (97%) diff --git a/.gitignore b/.gitignore index 2fd7c5e..2196514 100644 --- a/.gitignore +++ b/.gitignore @@ -1,14 +1,12 @@ -# Intellij -*.iml -.idea +# editor +.vscode # npm node_modules package-lock.json # build -main.js -*.js.map +build # obsidian data.json diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..caf36ff --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2021 TfTHacker + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/main.js b/main.js new file mode 100644 index 0000000..1c40e20 --- /dev/null +++ b/main.js @@ -0,0 +1,261 @@ +/* +THIS IS A GENERATED/BUNDLED FILE BY ROLLUP +if you want to view the source visit the plugins github repository +*/ + +'use strict'; + +var obsidian = require('obsidian'); + +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. +***************************************************************************** */ + +function __awaiter(thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +} + +const pluginName = 'Drag and Drop Blocks'; +const DEFAULT_SETTINGS = { + mySetting: 'default' +}; +class MyPlugin extends obsidian.Plugin { + onload() { + return __awaiter(this, void 0, void 0, function* () { + console.log("loading plugin: " + pluginName); + this.blockRefStartLine = null; + this.blockRefEmbed = null; + this.blockRefNewLine = null; + this.originalText = null; + this.blockRefDragState = null; + this.blockRefStartLeaf = null; + this.blockRefClientY = null; + this.blockRefModDrop = { alt: null, ctrl: null, shift: null }; + this.blockRefModDrag = { alt: null, ctrl: null, shift: null }; + yield this.loadSettings(); + this.addSettingTab(new SampleSettingTab(this.app, this)); + this.app.workspace.onLayoutReady(this.onLayoutReady.bind(this)); + }); + } + onLayoutReady() { + //Find the main DIV that holds all the markdown panes + const actDoc = document.getElementsByClassName('workspace-split mod-vertical mod-root')[0]; + this.registerDomEvent(actDoc, 'mouseover', (evt) => { + const mainDiv = evt.target; + if (mainDiv.className === 'CodeMirror-linenumber CodeMirror-gutter-elt') { + let oldElem = document.getElementById('block-ref-hover'); + if (oldElem) { + oldElem.remove(); + } + let docBody = document.getElementsByTagName('body')[0]; + const newElement = document.createElement("div"); + newElement.id = 'block-ref-hover'; + docBody.insertBefore(newElement, null); + newElement.draggable = true; + //newElement.innerText = "◎"; + //newElement.innerText = "❖"; + //newElement.style.fontSize = "12px"; + newElement.innerText = "⋮⋮"; + newElement.style.fontSize = "16px"; + newElement.style.fontWeight = "bold"; + newElement.style.color = "var(--text-accent-hover)"; + //newElement.style.cursor = "grab"; + newElement.style.cursor = "move"; + newElement.style.position = "absolute"; + let targetRect = mainDiv.getBoundingClientRect(); + newElement.style.top = `${targetRect.top - 1}px`; + newElement.style.left = `${targetRect.left - 8}px`; + this.registerDomEvent(newElement, 'mouseover', (evt) => { + const eventDiv = evt.target; + eventDiv.style.color = "var(--text-accent-hover)"; + }); + this.registerDomEvent(newElement, 'mouseout', (evt) => { + const eventDiv = evt.target; + eventDiv.style.color = "transparent"; + }); + this.registerDomEvent(mainDiv, 'mouseout', (evt) => { + const oldElem = document.getElementById('block-ref-hover'); + if (oldElem) { + oldElem.style.color = "transparent"; + } + }); + //Find the leaf that is being hovered over + let leafEl = this.app.workspace.containerEl.find(".workspace-leaf:hover"); + let allLeaves = this.app.workspace.getLeavesOfType("markdown"); + let hoveredLeaf = allLeaves.find(eachLeaf => eachLeaf.containerEl == leafEl); + if (hoveredLeaf) { + this.blockRefStartLeaf = hoveredLeaf; + this.blockRefClientY = evt.clientY + 1; + } + this.registerDomEvent(newElement, 'dragstart', (evt) => { + let hoveredLeaf = this.blockRefStartLeaf; + let mdView; + if (hoveredLeaf) { + mdView = hoveredLeaf.view; + } + if (mdView) { + this.blockRefModDrag = { alt: evt.altKey, ctrl: (evt.ctrlKey || evt.metaKey), shift: evt.shiftKey }; + let mdEditor = mdView.editor; + let topPos = this.blockRefClientY; + //NOTE: mdEditor.posAtCoords(x, y) is equivalent to mdEditor.cm.coordsChar({ left: x, top: y }) + let thisLine = mdEditor.posAtCoords(0, topPos).line; + //mdEditor.setSelection({ line: thisLine, ch: 0 }, { line: thisLine, ch: 9999 }); + let lineContent = mdEditor.getLine(thisLine); + let blockid = ''; + let finalString = ''; + let block = ''; + //No modifier keys held so move the block to the new location + if (!this.blockRefModDrag.ctrl && !this.blockRefModDrag.alt && !this.blockRefModDrag.shift) { + evt.dataTransfer.setData("text/plain", lineContent); + } + //Shift key held so copy the block to the new location + if (!this.blockRefModDrag.ctrl && !this.blockRefModDrag.alt && this.blockRefModDrag.shift) { + evt.dataTransfer.setData("text/plain", lineContent); + } + //Alt key held to create a block reference (CMD/Ctrl is not working for MACs so going with Alt) + if (this.blockRefModDrag.alt && !this.blockRefModDrag.ctrl && !this.blockRefModDrag.shift) { + const blockRef = lineContent.match(/ \^(.*)/); + if (blockRef) { + blockid = blockRef[1]; + finalString = lineContent; + } + else { + let characters = 'abcdefghijklmnopqrstuvwxyz0123456789'; + let charactersLength = characters.length; + for (var i = 0; i < 7; i++) { + blockid += characters.charAt(Math.floor(Math.random() * charactersLength)); + } + finalString = lineContent + ` ^${blockid}`; + } + block = `![` + `[${mdView.file.basename}#^${blockid}]]`.split("\n").join(""); + evt.dataTransfer.setData("text/plain", block); + } + this.blockRefStartLine = thisLine; + this.blockRefEmbed = block; + this.blockRefNewLine = finalString; + this.originalText = lineContent; + this.blockRefDragState = 'start'; + } + }); + this.registerDomEvent(newElement, 'dragend', (evt) => { + if (this.blockRefDragState === "dropped") { + //this.app.workspace.setActiveLeaf(this.blockRefStartLeaf); + let mdView; + if (this.blockRefStartLeaf) { + mdView = this.blockRefStartLeaf.view; + } + if (mdView) { + let mdEditor = mdView.editor; + //No modifier keys held so move the block to the new location + if (!this.blockRefModDrag.ctrl && !this.blockRefModDrag.alt && !this.blockRefModDrag.shift) { + //Delete the original line you dragged + mdEditor.setLine(this.blockRefStartLine, ''); + } + //Shift key held so copy the block to the new location + if (!this.blockRefModDrag.ctrl && !this.blockRefModDrag.alt && this.blockRefModDrag.shift) ; + //Alt key held to create a block reference (CMD/Ctrl is not working for MACs so going with Alt) + if (this.blockRefModDrag.alt && !this.blockRefModDrag.ctrl && !this.blockRefModDrag.shift) { + mdEditor.setLine(this.blockRefStartLine, this.blockRefNewLine); + mdEditor.setSelection({ line: this.blockRefStartLine, ch: 0 }, { line: this.blockRefStartLine, ch: 9999 }); + } + } + } + if (this.blockRefDragState === 'cancelled') ; + let oldElem = document.getElementById('block-ref-hover'); + if (oldElem) { + oldElem.remove(); + } + this.blockRefStartLine = null; + this.blockRefEmbed = null; + this.blockRefNewLine = null; + this.originalText = null; + this.blockRefDragState = null; + this.blockRefStartLeaf = null; + this.blockRefClientY = null; + this.blockRefModDrop = { alt: null, ctrl: null, shift: null }; + this.blockRefModDrag = { alt: null, ctrl: null, shift: null }; + }); + } + if (evt.ctrlKey && evt.shiftKey) { + let leafEl = this.app.workspace.containerEl.find(".workspace-leaf:hover"); + let allLeaves = this.app.workspace.getLeavesOfType("markdown"); + let hoveredLeaf = allLeaves.find(eachLeaf => eachLeaf.containerEl == leafEl); + let mdView; + if (hoveredLeaf) { + mdView = hoveredLeaf.view; + } + if (mdView) { + let mdEditor = mdView.editor; + let topPos = evt.clientY + 1; + //NOTE: mdEditor.posAtCoords(x, y) is equivalent to mdEditor.cm.coordsChar({ left: x, top: y }) + let thisLine = mdEditor.posAtCoords(0, topPos).line; + mdEditor.setSelection({ line: thisLine, ch: 0 }, { line: thisLine, ch: 9999 }); + } + } + }); + this.registerDomEvent(actDoc, 'drop', (evt) => { + if (this.blockRefDragState === 'start') { + this.blockRefDragState = 'dropped'; + this.blockRefModDrop = { alt: evt.altKey, ctrl: (evt.ctrlKey || evt.metaKey), shift: evt.shiftKey }; + } + }); + } + onunload() { + let oldElem = document.getElementById('block-ref-hover'); + if (oldElem) { + oldElem.remove(); + } + console.log("Unloading plugin: " + pluginName); + } + loadSettings() { + return __awaiter(this, void 0, void 0, function* () { + this.settings = Object.assign({}, DEFAULT_SETTINGS, yield this.loadData()); + }); + } + saveSettings() { + return __awaiter(this, void 0, void 0, function* () { + yield this.saveData(this.settings); + }); + } +} +class SampleSettingTab extends obsidian.PluginSettingTab { + constructor(app, plugin) { + super(app, plugin); + this.plugin = plugin; + } + display() { + let { containerEl } = this; + containerEl.empty(); + containerEl.createEl('h2', { text: 'Drag and Drop Block Settings' }); + new obsidian.Setting(containerEl) + .setName('Setting 1') + .setDesc('This is a placeholder only and doesn\'t do anything at this point') + .addText(text => text + .setPlaceholder('N/A') + .setValue('') + .onChange((value) => __awaiter(this, void 0, void 0, function* () { + this.plugin.settings.mySetting = value; + yield this.plugin.saveSettings(); + }))); + } +} + +module.exports = MyPlugin; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZXMiOlsibm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIsIm1haW4udHMiXSwic291cmNlc0NvbnRlbnQiOm51bGwsIm5hbWVzIjpbIlBsdWdpbiIsIlBsdWdpblNldHRpbmdUYWIiLCJTZXR0aW5nIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBdURBO0FBQ08sU0FBUyxTQUFTLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFO0FBQzdELElBQUksU0FBUyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsT0FBTyxLQUFLLFlBQVksQ0FBQyxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxVQUFVLE9BQU8sRUFBRSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFO0FBQ2hILElBQUksT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsT0FBTyxDQUFDLEVBQUUsVUFBVSxPQUFPLEVBQUUsTUFBTSxFQUFFO0FBQy9ELFFBQVEsU0FBUyxTQUFTLENBQUMsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtBQUNuRyxRQUFRLFNBQVMsUUFBUSxDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtBQUN0RyxRQUFRLFNB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 diff --git a/package.json b/package.json index 29e2406..590496c 100644 --- a/package.json +++ b/package.json @@ -1,22 +1,18 @@ { - "name": "obsidian-sample-plugin", + "name": "obsidian-drag-and-drop-blocks", "version": "0.12.0", - "description": "This is a sample plugin for Obsidian (https://obsidian.md)", + "description": "Drag and Drop Blocks", "main": "main.js", "scripts": { - "dev": "rollup --config rollup.config.js -w", - "build": "rollup --config rollup.config.js --environment BUILD:production" + "dev": "esbuild src/main.ts --bundle --external:obsidian --format=cjs --outfile=build/main.js --watch", + "build": "esbuild src/main.ts --bundle --external:obsidian --format=cjs --outfile=build/main.js" }, "keywords": [], "author": "", "license": "MIT", "devDependencies": { - "@rollup/plugin-commonjs": "^18.0.0", - "@rollup/plugin-node-resolve": "^11.2.1", - "@rollup/plugin-typescript": "^8.2.1", "@types/node": "^14.14.37", "obsidian": "^0.12.0", - "rollup": "^2.32.1", "tslib": "^2.2.0", "typescript": "^4.2.4" } diff --git a/rollup.config.js b/rollup.config.js deleted file mode 100644 index dd4d041..0000000 --- a/rollup.config.js +++ /dev/null @@ -1,30 +0,0 @@ -import typescript from '@rollup/plugin-typescript'; -import {nodeResolve} from '@rollup/plugin-node-resolve'; -import commonjs from '@rollup/plugin-commonjs'; - -const isProd = (process.env.BUILD === 'production'); - -const banner = -`/* -THIS IS A GENERATED/BUNDLED FILE BY ROLLUP -if you want to view the source visit the plugins github repository -*/ -`; - -export default { - input: 'main.ts', - output: { - dir: '.', - sourcemap: 'inline', - sourcemapExcludeSources: isProd, - format: 'cjs', - exports: 'default', - banner, - }, - external: ['obsidian'], - plugins: [ - typescript(), - nodeResolve({browser: true}), - commonjs(), - ] -}; \ No newline at end of file diff --git a/main.ts b/src/main.ts similarity index 97% rename from main.ts rename to src/main.ts index 3465773..96fcda7 100644 --- a/main.ts +++ b/src/main.ts @@ -1,279 +1,279 @@ -import { App, Modal, Notice, Plugin, PluginSettingTab, Setting, TFile, WorkspaceLeaf, MarkdownView, Editor } from 'obsidian'; -declare module "obsidian" { - interface WorkspaceLeaf { - containerEl: HTMLElement; - } - interface Editor { - posAtCoords(left: number, top: number): EditorPosition; - } -} -const pluginName = 'Drag and Drop Blocks'; - -interface MyPluginSettings { - mySetting: string; -} - -const DEFAULT_SETTINGS: MyPluginSettings = { - mySetting: 'default' -} - -export default class MyPlugin extends Plugin { - settings: MyPluginSettings; - - //My variables - blockRefStartLine: number; - blockRefEmbed: string; - blockRefNewLine: string; - originalText: string; - blockRefDragState: string; - blockRefStartLeaf: WorkspaceLeaf; - blockRefClientY: number; - blockRefModDrag: { - alt: boolean, - ctrl: boolean, - shift: boolean - } - blockRefModDrop: { - alt: boolean, - ctrl: boolean, - shift: boolean - } - - async onload() { - console.log("loading plugin: " + pluginName); - - this.blockRefStartLine = null; - this.blockRefEmbed = null; - this.blockRefNewLine = null; - this.originalText = null; - this.blockRefDragState = null; - this.blockRefStartLeaf = null; - this.blockRefClientY = null; - this.blockRefModDrop = { alt: null, ctrl: null, shift: null } - this.blockRefModDrag = { alt: null, ctrl: null, shift: null } - - await this.loadSettings(); - - this.addSettingTab(new SampleSettingTab(this.app, this)); - - this.app.workspace.onLayoutReady(this.onLayoutReady.bind(this)); - } - - onLayoutReady(): void { - //Find the main DIV that holds all the markdown panes - const actDoc: HTMLElement = document.getElementsByClassName('workspace-split mod-vertical mod-root')[0] as HTMLElement; - - this.registerDomEvent(actDoc, 'mouseover', (evt: MouseEvent) => { - const mainDiv: HTMLElement = evt.target as HTMLElement; - if (mainDiv.className === 'CodeMirror-linenumber CodeMirror-gutter-elt') { - let oldElem: HTMLElement = document.getElementById('block-ref-hover'); - if (oldElem) { oldElem.remove() } - let docBody: HTMLBodyElement = document.getElementsByTagName('body')[0]; - const newElement: HTMLDivElement = document.createElement("div"); - newElement.id = 'block-ref-hover'; - docBody.insertBefore(newElement, null); - newElement.draggable = true; - //newElement.innerText = "◎"; - //newElement.innerText = "❖"; - //newElement.style.fontSize = "12px"; - newElement.innerText = "⋮⋮"; - newElement.style.fontSize = "16px"; - newElement.style.fontWeight = "bold"; - newElement.style.color = "var(--text-accent-hover)"; - //newElement.style.cursor = "grab"; - newElement.style.cursor = "move"; - newElement.style.position = "absolute"; - let targetRect = mainDiv.getBoundingClientRect(); - newElement.style.top = `${targetRect.top - 1}px`; - newElement.style.left = `${targetRect.left - 8}px`; - - this.registerDomEvent(newElement, 'mouseover', (evt: MouseEvent) => { - const eventDiv: HTMLElement = evt.target as HTMLElement; - eventDiv.style.color = "var(--text-accent-hover)"; - }) - - this.registerDomEvent(newElement, 'mouseout', (evt: MouseEvent) => { - const eventDiv: HTMLElement = evt.target as HTMLElement; - eventDiv.style.color = "transparent"; - }) - - this.registerDomEvent(mainDiv, 'mouseout', (evt: MouseEvent) => { - const oldElem: HTMLElement = document.getElementById('block-ref-hover'); - if (oldElem) { oldElem.style.color = "transparent"; } - }) - - //Find the leaf that is being hovered over - let leafEl = this.app.workspace.containerEl.find(".workspace-leaf:hover"); - let allLeaves: Array = this.app.workspace.getLeavesOfType("markdown"); - let hoveredLeaf: WorkspaceLeaf = allLeaves.find(eachLeaf => eachLeaf.containerEl == leafEl); - if (hoveredLeaf) { - this.blockRefStartLeaf = hoveredLeaf; - this.blockRefClientY = evt.clientY + 1; - } - - this.registerDomEvent(newElement, 'dragstart', (evt: DragEvent) => { - let hoveredLeaf: WorkspaceLeaf = this.blockRefStartLeaf; - let mdView: MarkdownView; - if (hoveredLeaf) { mdView = hoveredLeaf.view as MarkdownView; } - if (mdView) { - this.blockRefModDrag = { alt: evt.altKey, ctrl: (evt.ctrlKey || evt.metaKey), shift: evt.shiftKey } - let mdEditor: Editor = mdView.editor; - let topPos: number = this.blockRefClientY; - //NOTE: mdEditor.posAtCoords(x, y) is equivalent to mdEditor.cm.coordsChar({ left: x, top: y }) - let thisLine: number = mdEditor.posAtCoords(0, topPos).line; - //mdEditor.setSelection({ line: thisLine, ch: 0 }, { line: thisLine, ch: 9999 }); - let lineContent: string = mdEditor.getLine(thisLine); - - let blockid: string = ''; - let finalString: string = ''; - let block: string = ''; - - //No modifier keys held so move the block to the new location - if (!this.blockRefModDrag.ctrl && !this.blockRefModDrag.alt && !this.blockRefModDrag.shift) { - evt.dataTransfer.setData("text/plain", lineContent); - } - - //Shift key held so copy the block to the new location - if (!this.blockRefModDrag.ctrl && !this.blockRefModDrag.alt && this.blockRefModDrag.shift) { - evt.dataTransfer.setData("text/plain", lineContent); - } - - //Alt key held to create a block reference (CMD/Ctrl is not working for MACs so going with Alt) - if (this.blockRefModDrag.alt && !this.blockRefModDrag.ctrl && !this.blockRefModDrag.shift) { - const blockRef: RegExpMatchArray = lineContent.match(/ \^(.*)/); - if (blockRef) { - blockid = blockRef[1]; - finalString = lineContent; - } else { - let characters: string = 'abcdefghijklmnopqrstuvwxyz0123456789'; - let charactersLength: number = characters.length; - for (var i = 0; i < 7; i++) { - blockid += characters.charAt(Math.floor(Math.random() * charactersLength)); - } - finalString = lineContent + ` ^${blockid}`; - } - - block = `![` + `[${mdView.file.basename}#^${blockid}]]`.split("\n").join(""); - evt.dataTransfer.setData("text/plain", block); - } - - this.blockRefStartLine = thisLine; - this.blockRefEmbed = block; - this.blockRefNewLine = finalString; - this.originalText = lineContent; - this.blockRefDragState = 'start'; - } - }) - - this.registerDomEvent(newElement, 'dragend', (evt: DragEvent) => { - if (this.blockRefDragState === "dropped") { - //this.app.workspace.setActiveLeaf(this.blockRefStartLeaf); - let mdView: MarkdownView; - if (this.blockRefStartLeaf) { mdView = this.blockRefStartLeaf.view as MarkdownView; } - if (mdView) { - let mdEditor: Editor = mdView.editor; - - //No modifier keys held so move the block to the new location - if (!this.blockRefModDrag.ctrl && !this.blockRefModDrag.alt && !this.blockRefModDrag.shift) { - //Delete the original line you dragged - mdEditor.setLine(this.blockRefStartLine, ''); - } - - //Shift key held so copy the block to the new location - if (!this.blockRefModDrag.ctrl && !this.blockRefModDrag.alt && this.blockRefModDrag.shift) { - //Do not have to do anything to the original block you dragged because it is just a copy / duplicate command - } - - //Alt key held to create a block reference (CMD/Ctrl is not working for MACs so going with Alt) - if (this.blockRefModDrag.alt && !this.blockRefModDrag.ctrl && !this.blockRefModDrag.shift) { - mdEditor.setLine(this.blockRefStartLine, this.blockRefNewLine); - mdEditor.setSelection({ line: this.blockRefStartLine, ch: 0 }, { line: this.blockRefStartLine, ch: 9999 }); - } - } - } - - if (this.blockRefDragState === 'cancelled') { - //Nothing right now - } - - let oldElem = document.getElementById('block-ref-hover'); - if (oldElem) { oldElem.remove() } - this.blockRefStartLine = null; - this.blockRefEmbed = null; - this.blockRefNewLine = null; - this.originalText = null; - this.blockRefDragState = null; - this.blockRefStartLeaf = null; - this.blockRefClientY = null; - this.blockRefModDrop = { alt: null, ctrl: null, shift: null } - this.blockRefModDrag = { alt: null, ctrl: null, shift: null } - }) - } - - if (evt.ctrlKey && evt.shiftKey) { - let leafEl = this.app.workspace.containerEl.find(".workspace-leaf:hover"); - - let allLeaves: Array = this.app.workspace.getLeavesOfType("markdown"); - let hoveredLeaf: WorkspaceLeaf = allLeaves.find(eachLeaf => eachLeaf.containerEl == leafEl); - let mdView: MarkdownView; - if (hoveredLeaf) { mdView = hoveredLeaf.view as MarkdownView; } - if (mdView) { - let mdEditor: Editor = mdView.editor; - let topPos: number = evt.clientY + 1; - //NOTE: mdEditor.posAtCoords(x, y) is equivalent to mdEditor.cm.coordsChar({ left: x, top: y }) - let thisLine: number = mdEditor.posAtCoords(0, topPos).line; - mdEditor.setSelection({ line: thisLine, ch: 0 }, { line: thisLine, ch: 9999 }); - } - } - }); - - this.registerDomEvent(actDoc, 'drop', (evt: DragEvent) => { - if (this.blockRefDragState === 'start') { - this.blockRefDragState = 'dropped'; - this.blockRefModDrop = { alt: evt.altKey, ctrl: (evt.ctrlKey || evt.metaKey), shift: evt.shiftKey } - } - }) - } - - onunload() { - let oldElem = document.getElementById('block-ref-hover'); - if (oldElem) { oldElem.remove() } - console.log("Unloading plugin: " + pluginName); - } - - async loadSettings() { - this.settings = Object.assign({}, DEFAULT_SETTINGS, await this.loadData()); - } - - async saveSettings() { - await this.saveData(this.settings); - } -} - -class SampleSettingTab extends PluginSettingTab { - plugin: MyPlugin; - - constructor(app: App, plugin: MyPlugin) { - super(app, plugin); - this.plugin = plugin; - } - - display(): void { - let {containerEl} = this; - - containerEl.empty(); - - containerEl.createEl('h2', { text: 'Drag and Drop Block Settings' }); - - new Setting(containerEl) - .setName('Setting 1') - .setDesc('This is a placeholder only and doesn\'t do anything at this point') - .addText(text => text - .setPlaceholder('N/A') - .setValue('') - .onChange(async (value) => { - this.plugin.settings.mySetting = value; - await this.plugin.saveSettings(); - })); - } -} +import { App, Modal, Notice, Plugin, PluginSettingTab, Setting, TFile, WorkspaceLeaf, MarkdownView, Editor } from 'obsidian'; +declare module "obsidian" { + interface WorkspaceLeaf { + containerEl: HTMLElement; + } + interface Editor { + posAtCoords(left: number, top: number): EditorPosition; + } +} +const pluginName = 'Drag and Drop Blocks'; + +interface MyPluginSettings { + mySetting: string; +} + +const DEFAULT_SETTINGS: MyPluginSettings = { + mySetting: 'default' +} + +export default class MyPlugin extends Plugin { + settings: MyPluginSettings; + + //My variables + blockRefStartLine: number; + blockRefEmbed: string; + blockRefNewLine: string; + originalText: string; + blockRefDragState: string; + blockRefStartLeaf: WorkspaceLeaf; + blockRefClientY: number; + blockRefModDrag: { + alt: boolean, + ctrl: boolean, + shift: boolean + } + blockRefModDrop: { + alt: boolean, + ctrl: boolean, + shift: boolean + } + + async onload() { + console.log("loading plugin: " + pluginName); + + this.blockRefStartLine = null; + this.blockRefEmbed = null; + this.blockRefNewLine = null; + this.originalText = null; + this.blockRefDragState = null; + this.blockRefStartLeaf = null; + this.blockRefClientY = null; + this.blockRefModDrop = { alt: null, ctrl: null, shift: null } + this.blockRefModDrag = { alt: null, ctrl: null, shift: null } + + await this.loadSettings(); + + this.addSettingTab(new SampleSettingTab(this.app, this)); + + this.app.workspace.onLayoutReady(this.onLayoutReady.bind(this)); + } + + onLayoutReady(): void { + //Find the main DIV that holds all the markdown panes + const actDoc: HTMLElement = document.getElementsByClassName('workspace-split mod-vertical mod-root')[0] as HTMLElement; + + this.registerDomEvent(actDoc, 'mouseover', (evt: MouseEvent) => { + const mainDiv: HTMLElement = evt.target as HTMLElement; + if (mainDiv.className === 'CodeMirror-linenumber CodeMirror-gutter-elt') { + let oldElem: HTMLElement = document.getElementById('block-ref-hover'); + if (oldElem) { oldElem.remove() } + let docBody: HTMLBodyElement = document.getElementsByTagName('body')[0]; + const newElement: HTMLDivElement = document.createElement("div"); + newElement.id = 'block-ref-hover'; + docBody.insertBefore(newElement, null); + newElement.draggable = true; + //newElement.innerText = "◎"; + //newElement.innerText = "❖"; + //newElement.style.fontSize = "12px"; + newElement.innerText = "⋮⋮"; + newElement.style.fontSize = "16px"; + newElement.style.fontWeight = "bold"; + newElement.style.color = "var(--text-accent-hover)"; + //newElement.style.cursor = "grab"; + newElement.style.cursor = "move"; + newElement.style.position = "absolute"; + let targetRect = mainDiv.getBoundingClientRect(); + newElement.style.top = `${targetRect.top - 1}px`; + newElement.style.left = `${targetRect.left - 8}px`; + + this.registerDomEvent(newElement, 'mouseover', (evt: MouseEvent) => { + const eventDiv: HTMLElement = evt.target as HTMLElement; + eventDiv.style.color = "var(--text-accent-hover)"; + }) + + this.registerDomEvent(newElement, 'mouseout', (evt: MouseEvent) => { + const eventDiv: HTMLElement = evt.target as HTMLElement; + eventDiv.style.color = "transparent"; + }) + + this.registerDomEvent(mainDiv, 'mouseout', (evt: MouseEvent) => { + const oldElem: HTMLElement = document.getElementById('block-ref-hover'); + if (oldElem) { oldElem.style.color = "transparent"; } + }) + + //Find the leaf that is being hovered over + let leafEl = this.app.workspace.containerEl.find(".workspace-leaf:hover"); + let allLeaves: Array = this.app.workspace.getLeavesOfType("markdown"); + let hoveredLeaf: WorkspaceLeaf = allLeaves.find(eachLeaf => eachLeaf.containerEl == leafEl); + if (hoveredLeaf) { + this.blockRefStartLeaf = hoveredLeaf; + this.blockRefClientY = evt.clientY + 1; + } + + this.registerDomEvent(newElement, 'dragstart', (evt: DragEvent) => { + let hoveredLeaf: WorkspaceLeaf = this.blockRefStartLeaf; + let mdView: MarkdownView; + if (hoveredLeaf) { mdView = hoveredLeaf.view as MarkdownView; } + if (mdView) { + this.blockRefModDrag = { alt: evt.altKey, ctrl: (evt.ctrlKey || evt.metaKey), shift: evt.shiftKey } + let mdEditor: Editor = mdView.editor; + let topPos: number = this.blockRefClientY; + //NOTE: mdEditor.posAtCoords(x, y) is equivalent to mdEditor.cm.coordsChar({ left: x, top: y }) + let thisLine: number = mdEditor.posAtCoords(0, topPos).line; + //mdEditor.setSelection({ line: thisLine, ch: 0 }, { line: thisLine, ch: 9999 }); + let lineContent: string = mdEditor.getLine(thisLine); + + let blockid: string = ''; + let finalString: string = ''; + let block: string = ''; + + //No modifier keys held so move the block to the new location + if (!this.blockRefModDrag.ctrl && !this.blockRefModDrag.alt && !this.blockRefModDrag.shift) { + evt.dataTransfer.setData("text/plain", lineContent); + } + + //Shift key held so copy the block to the new location + if (!this.blockRefModDrag.ctrl && !this.blockRefModDrag.alt && this.blockRefModDrag.shift) { + evt.dataTransfer.setData("text/plain", lineContent); + } + + //Alt key held to create a block reference (CMD/Ctrl is not working for MACs so going with Alt) + if (this.blockRefModDrag.alt && !this.blockRefModDrag.ctrl && !this.blockRefModDrag.shift) { + const blockRef: RegExpMatchArray = lineContent.match(/ \^(.*)/); + if (blockRef) { + blockid = blockRef[1]; + finalString = lineContent; + } else { + let characters: string = 'abcdefghijklmnopqrstuvwxyz0123456789'; + let charactersLength: number = characters.length; + for (var i = 0; i < 7; i++) { + blockid += characters.charAt(Math.floor(Math.random() * charactersLength)); + } + finalString = lineContent + ` ^${blockid}`; + } + + block = `![` + `[${mdView.file.basename}#^${blockid}]]`.split("\n").join(""); + evt.dataTransfer.setData("text/plain", block); + } + + this.blockRefStartLine = thisLine; + this.blockRefEmbed = block; + this.blockRefNewLine = finalString; + this.originalText = lineContent; + this.blockRefDragState = 'start'; + } + }) + + this.registerDomEvent(newElement, 'dragend', (evt: DragEvent) => { + if (this.blockRefDragState === "dropped") { + //this.app.workspace.setActiveLeaf(this.blockRefStartLeaf); + let mdView: MarkdownView; + if (this.blockRefStartLeaf) { mdView = this.blockRefStartLeaf.view as MarkdownView; } + if (mdView) { + let mdEditor: Editor = mdView.editor; + + //No modifier keys held so move the block to the new location + if (!this.blockRefModDrag.ctrl && !this.blockRefModDrag.alt && !this.blockRefModDrag.shift) { + //Delete the original line you dragged + mdEditor.setLine(this.blockRefStartLine, ''); + } + + //Shift key held so copy the block to the new location + if (!this.blockRefModDrag.ctrl && !this.blockRefModDrag.alt && this.blockRefModDrag.shift) { + //Do not have to do anything to the original block you dragged because it is just a copy / duplicate command + } + + //Alt key held to create a block reference (CMD/Ctrl is not working for MACs so going with Alt) + if (this.blockRefModDrag.alt && !this.blockRefModDrag.ctrl && !this.blockRefModDrag.shift) { + mdEditor.setLine(this.blockRefStartLine, this.blockRefNewLine); + mdEditor.setSelection({ line: this.blockRefStartLine, ch: 0 }, { line: this.blockRefStartLine, ch: 9999 }); + } + } + } + + if (this.blockRefDragState === 'cancelled') { + //Nothing right now + } + + let oldElem = document.getElementById('block-ref-hover'); + if (oldElem) { oldElem.remove() } + this.blockRefStartLine = null; + this.blockRefEmbed = null; + this.blockRefNewLine = null; + this.originalText = null; + this.blockRefDragState = null; + this.blockRefStartLeaf = null; + this.blockRefClientY = null; + this.blockRefModDrop = { alt: null, ctrl: null, shift: null } + this.blockRefModDrag = { alt: null, ctrl: null, shift: null } + }) + } + + if (evt.ctrlKey && evt.shiftKey) { + let leafEl = this.app.workspace.containerEl.find(".workspace-leaf:hover"); + + let allLeaves: Array = this.app.workspace.getLeavesOfType("markdown"); + let hoveredLeaf: WorkspaceLeaf = allLeaves.find(eachLeaf => eachLeaf.containerEl == leafEl); + let mdView: MarkdownView; + if (hoveredLeaf) { mdView = hoveredLeaf.view as MarkdownView; } + if (mdView) { + let mdEditor: Editor = mdView.editor; + let topPos: number = evt.clientY + 1; + //NOTE: mdEditor.posAtCoords(x, y) is equivalent to mdEditor.cm.coordsChar({ left: x, top: y }) + let thisLine: number = mdEditor.posAtCoords(0, topPos).line; + mdEditor.setSelection({ line: thisLine, ch: 0 }, { line: thisLine, ch: 9999 }); + } + } + }); + + this.registerDomEvent(actDoc, 'drop', (evt: DragEvent) => { + if (this.blockRefDragState === 'start') { + this.blockRefDragState = 'dropped'; + this.blockRefModDrop = { alt: evt.altKey, ctrl: (evt.ctrlKey || evt.metaKey), shift: evt.shiftKey } + } + }) + } + + onunload() { + let oldElem = document.getElementById('block-ref-hover'); + if (oldElem) { oldElem.remove() } + console.log("Unloading plugin: " + pluginName); + } + + async loadSettings() { + this.settings = Object.assign({}, DEFAULT_SETTINGS, await this.loadData()); + } + + async saveSettings() { + await this.saveData(this.settings); + } +} + +class SampleSettingTab extends PluginSettingTab { + plugin: MyPlugin; + + constructor(app: App, plugin: MyPlugin) { + super(app, plugin); + this.plugin = plugin; + } + + display(): void { + let {containerEl} = this; + + containerEl.empty(); + + containerEl.createEl('h2', { text: 'Drag and Drop Block Settings' }); + + new Setting(containerEl) + .setName('Setting 1') + .setDesc('This is a placeholder only and doesn\'t do anything at this point') + .addText(text => text + .setPlaceholder('N/A') + .setValue('') + .onChange(async (value) => { + this.plugin.settings.mySetting = value; + await this.plugin.saveSettings(); + })); + } +} From e718eb9f0f7cb3063d574bae9017920468b43d94 Mon Sep 17 00:00:00 2001 From: CK <69121180+TfTHacker@users.noreply.github.com> Date: Fri, 27 Aug 2021 06:59:16 +0200 Subject: [PATCH 2/2] Delete main.js --- main.js | 261 -------------------------------------------------------- 1 file changed, 261 deletions(-) delete mode 100644 main.js diff --git a/main.js b/main.js deleted file mode 100644 index 1c40e20..0000000 --- a/main.js +++ /dev/null @@ -1,261 +0,0 @@ -/* -THIS IS A GENERATED/BUNDLED FILE BY ROLLUP -if you want to view the source visit the plugins github repository -*/ - -'use strict'; - -var obsidian = require('obsidian'); - -/*! ***************************************************************************** -Copyright (c) Microsoft Corporation. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM -LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. -***************************************************************************** */ - -function __awaiter(thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -} - -const pluginName = 'Drag and Drop Blocks'; -const DEFAULT_SETTINGS = { - mySetting: 'default' -}; -class MyPlugin extends obsidian.Plugin { - onload() { - return __awaiter(this, void 0, void 0, function* () { - console.log("loading plugin: " + pluginName); - this.blockRefStartLine = null; - this.blockRefEmbed = null; - this.blockRefNewLine = null; - this.originalText = null; - this.blockRefDragState = null; - this.blockRefStartLeaf = null; - this.blockRefClientY = null; - this.blockRefModDrop = { alt: null, ctrl: null, shift: null }; - this.blockRefModDrag = { alt: null, ctrl: null, shift: null }; - yield this.loadSettings(); - this.addSettingTab(new SampleSettingTab(this.app, this)); - this.app.workspace.onLayoutReady(this.onLayoutReady.bind(this)); - }); - } - onLayoutReady() { - //Find the main DIV that holds all the markdown panes - const actDoc = document.getElementsByClassName('workspace-split mod-vertical mod-root')[0]; - this.registerDomEvent(actDoc, 'mouseover', (evt) => { - const mainDiv = evt.target; - if (mainDiv.className === 'CodeMirror-linenumber CodeMirror-gutter-elt') { - let oldElem = document.getElementById('block-ref-hover'); - if (oldElem) { - oldElem.remove(); - } - let docBody = document.getElementsByTagName('body')[0]; - const newElement = document.createElement("div"); - newElement.id = 'block-ref-hover'; - docBody.insertBefore(newElement, null); - newElement.draggable = true; - //newElement.innerText = "◎"; - //newElement.innerText = "❖"; - //newElement.style.fontSize = "12px"; - newElement.innerText = "⋮⋮"; - newElement.style.fontSize = "16px"; - newElement.style.fontWeight = "bold"; - newElement.style.color = "var(--text-accent-hover)"; - //newElement.style.cursor = "grab"; - newElement.style.cursor = "move"; - newElement.style.position = "absolute"; - let targetRect = mainDiv.getBoundingClientRect(); - newElement.style.top = `${targetRect.top - 1}px`; - newElement.style.left = `${targetRect.left - 8}px`; - this.registerDomEvent(newElement, 'mouseover', (evt) => { - const eventDiv = evt.target; - eventDiv.style.color = "var(--text-accent-hover)"; - }); - this.registerDomEvent(newElement, 'mouseout', (evt) => { - const eventDiv = evt.target; - eventDiv.style.color = "transparent"; - }); - this.registerDomEvent(mainDiv, 'mouseout', (evt) => { - const oldElem = document.getElementById('block-ref-hover'); - if (oldElem) { - oldElem.style.color = "transparent"; - } - }); - //Find the leaf that is being hovered over - let leafEl = this.app.workspace.containerEl.find(".workspace-leaf:hover"); - let allLeaves = this.app.workspace.getLeavesOfType("markdown"); - let hoveredLeaf = allLeaves.find(eachLeaf => eachLeaf.containerEl == leafEl); - if (hoveredLeaf) { - this.blockRefStartLeaf = hoveredLeaf; - this.blockRefClientY = evt.clientY + 1; - } - this.registerDomEvent(newElement, 'dragstart', (evt) => { - let hoveredLeaf = this.blockRefStartLeaf; - let mdView; - if (hoveredLeaf) { - mdView = hoveredLeaf.view; - } - if (mdView) { - this.blockRefModDrag = { alt: evt.altKey, ctrl: (evt.ctrlKey || evt.metaKey), shift: evt.shiftKey }; - let mdEditor = mdView.editor; - let topPos = this.blockRefClientY; - //NOTE: mdEditor.posAtCoords(x, y) is equivalent to mdEditor.cm.coordsChar({ left: x, top: y }) - let thisLine = mdEditor.posAtCoords(0, topPos).line; - //mdEditor.setSelection({ line: thisLine, ch: 0 }, { line: thisLine, ch: 9999 }); - let lineContent = mdEditor.getLine(thisLine); - let blockid = ''; - let finalString = ''; - let block = ''; - //No modifier keys held so move the block to the new location - if (!this.blockRefModDrag.ctrl && !this.blockRefModDrag.alt && !this.blockRefModDrag.shift) { - evt.dataTransfer.setData("text/plain", lineContent); - } - //Shift key held so copy the block to the new location - if (!this.blockRefModDrag.ctrl && !this.blockRefModDrag.alt && this.blockRefModDrag.shift) { - evt.dataTransfer.setData("text/plain", lineContent); - } - //Alt key held to create a block reference (CMD/Ctrl is not working for MACs so going with Alt) - if (this.blockRefModDrag.alt && !this.blockRefModDrag.ctrl && !this.blockRefModDrag.shift) { - const blockRef = lineContent.match(/ \^(.*)/); - if (blockRef) { - blockid = blockRef[1]; - finalString = lineContent; - } - else { - let characters = 'abcdefghijklmnopqrstuvwxyz0123456789'; - let charactersLength = characters.length; - for (var i = 0; i < 7; i++) { - blockid += characters.charAt(Math.floor(Math.random() * charactersLength)); - } - finalString = lineContent + ` ^${blockid}`; - } - block = `![` + `[${mdView.file.basename}#^${blockid}]]`.split("\n").join(""); - evt.dataTransfer.setData("text/plain", block); - } - this.blockRefStartLine = thisLine; - this.blockRefEmbed = block; - this.blockRefNewLine = finalString; - this.originalText = lineContent; - this.blockRefDragState = 'start'; - } - }); - this.registerDomEvent(newElement, 'dragend', (evt) => { - if (this.blockRefDragState === "dropped") { - //this.app.workspace.setActiveLeaf(this.blockRefStartLeaf); - let mdView; - if (this.blockRefStartLeaf) { - mdView = this.blockRefStartLeaf.view; - } - if (mdView) { - let mdEditor = mdView.editor; - //No modifier keys held so move the block to the new location - if (!this.blockRefModDrag.ctrl && !this.blockRefModDrag.alt && !this.blockRefModDrag.shift) { - //Delete the original line you dragged - mdEditor.setLine(this.blockRefStartLine, ''); - } - //Shift key held so copy the block to the new location - if (!this.blockRefModDrag.ctrl && !this.blockRefModDrag.alt && this.blockRefModDrag.shift) ; - //Alt key held to create a block reference (CMD/Ctrl is not working for MACs so going with Alt) - if (this.blockRefModDrag.alt && !this.blockRefModDrag.ctrl && !this.blockRefModDrag.shift) { - mdEditor.setLine(this.blockRefStartLine, this.blockRefNewLine); - mdEditor.setSelection({ line: this.blockRefStartLine, ch: 0 }, { line: this.blockRefStartLine, ch: 9999 }); - } - } - } - if (this.blockRefDragState === 'cancelled') ; - let oldElem = document.getElementById('block-ref-hover'); - if (oldElem) { - oldElem.remove(); - } - this.blockRefStartLine = null; - this.blockRefEmbed = null; - this.blockRefNewLine = null; - this.originalText = null; - this.blockRefDragState = null; - this.blockRefStartLeaf = null; - this.blockRefClientY = null; - this.blockRefModDrop = { alt: null, ctrl: null, shift: null }; - this.blockRefModDrag = { alt: null, ctrl: null, shift: null }; - }); - } - if (evt.ctrlKey && evt.shiftKey) { - let leafEl = this.app.workspace.containerEl.find(".workspace-leaf:hover"); - let allLeaves = this.app.workspace.getLeavesOfType("markdown"); - let hoveredLeaf = allLeaves.find(eachLeaf => eachLeaf.containerEl == leafEl); - let mdView; - if (hoveredLeaf) { - mdView = hoveredLeaf.view; - } - if (mdView) { - let mdEditor = mdView.editor; - let topPos = evt.clientY + 1; - //NOTE: mdEditor.posAtCoords(x, y) is equivalent to mdEditor.cm.coordsChar({ left: x, top: y }) - let thisLine = mdEditor.posAtCoords(0, topPos).line; - mdEditor.setSelection({ line: thisLine, ch: 0 }, { line: thisLine, ch: 9999 }); - } - } - }); - this.registerDomEvent(actDoc, 'drop', (evt) => { - if (this.blockRefDragState === 'start') { - this.blockRefDragState = 'dropped'; - this.blockRefModDrop = { alt: evt.altKey, ctrl: (evt.ctrlKey || evt.metaKey), shift: evt.shiftKey }; - } - }); - } - onunload() { - let oldElem = document.getElementById('block-ref-hover'); - if (oldElem) { - oldElem.remove(); - } - console.log("Unloading plugin: " + pluginName); - } - loadSettings() { - return __awaiter(this, void 0, void 0, function* () { - this.settings = Object.assign({}, DEFAULT_SETTINGS, yield this.loadData()); - }); - } - saveSettings() { - return __awaiter(this, void 0, void 0, function* () { - yield this.saveData(this.settings); - }); - } -} -class SampleSettingTab extends obsidian.PluginSettingTab { - constructor(app, plugin) { - super(app, plugin); - this.plugin = plugin; - } - display() { - let { containerEl } = this; - containerEl.empty(); - containerEl.createEl('h2', { text: 'Drag and Drop Block Settings' }); - new obsidian.Setting(containerEl) - .setName('Setting 1') - .setDesc('This is a placeholder only and doesn\'t do anything at this point') - .addText(text => text - .setPlaceholder('N/A') - .setValue('') - .onChange((value) => __awaiter(this, void 0, void 0, function* () { - this.plugin.settings.mySetting = value; - yield this.plugin.saveSettings(); - }))); - } -} - -module.exports = MyPlugin; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZXMiOlsibm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIsIm1haW4udHMiXSwic291cmNlc0NvbnRlbnQiOm51bGwsIm5hbWVzIjpbIlBsdWdpbiIsIlBsdWdpblNldHRpbmdUYWIiLCJTZXR0aW5nIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBdURBO0FBQ08sU0FBUyxTQUFTLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFO0FBQzdELElBQUksU0FBUyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsT0FBTyxLQUFLLFlBQVksQ0FBQyxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxVQUFVLE9BQU8sRUFBRSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFO0FBQ2hILElBQUksT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsT0FBTyxDQUFDLEVBQUUsVUFBVSxPQUFPLEVBQUUsTUFBTSxFQUFFO0FBQy9ELFFBQVEsU0FBUyxTQUFTLENBQUMsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtBQUNuRyxRQUFRLFNBQVMsUUFBUSxDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtBQUN0RyxRQUFRLFNB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