create better structure inspired by ObsidianTweaks'
This commit is contained in:
82
src/DirectionalMove.ts
Normal file
82
src/DirectionalMove.ts
Normal file
@@ -0,0 +1,82 @@
|
||||
import { App, Editor, EditorChange, EditorTransaction, MarkdownView } from 'obsidian'
|
||||
import BindThemPlugin from './main'
|
||||
import { Direction } from './Entities'
|
||||
import { selectionToRange } from './Utils'
|
||||
|
||||
/**
|
||||
* DirectionalMove provides commands to move selection content left or right
|
||||
*/
|
||||
export class DirectionalMove {
|
||||
public app: App
|
||||
private plugin: BindThemPlugin
|
||||
|
||||
constructor(app: App, plugin: BindThemPlugin) {
|
||||
this.app = app
|
||||
this.plugin = plugin
|
||||
}
|
||||
|
||||
/**
|
||||
* Move the current selection(s) in the specified direction (left or right)
|
||||
*/
|
||||
public directionalMove(
|
||||
editor: Editor,
|
||||
view: MarkdownView,
|
||||
direction: Direction.Left | Direction.Right
|
||||
): void {
|
||||
const selections = editor.listSelections()
|
||||
|
||||
const changes: Array<EditorChange> = []
|
||||
for (const selection of selections) {
|
||||
const range = selectionToRange(selection)
|
||||
|
||||
let additionChange: EditorChange
|
||||
let deletionChange: EditorChange
|
||||
switch (direction) {
|
||||
case Direction.Left: {
|
||||
deletionChange = {
|
||||
from: {
|
||||
line: range.from.line,
|
||||
ch: range.from.ch - 1,
|
||||
},
|
||||
to: range.from,
|
||||
text: '',
|
||||
}
|
||||
|
||||
additionChange = {
|
||||
from: range.to,
|
||||
to: range.to,
|
||||
text: editor.getRange(deletionChange.from, deletionChange.to!),
|
||||
}
|
||||
break
|
||||
}
|
||||
|
||||
case Direction.Right: {
|
||||
deletionChange = {
|
||||
from: range.to,
|
||||
to: {
|
||||
line: range.to.line,
|
||||
ch: range.to.ch + 1,
|
||||
},
|
||||
text: '',
|
||||
}
|
||||
|
||||
additionChange = {
|
||||
from: range.from,
|
||||
to: range.from,
|
||||
text: editor.getRange(deletionChange.from, deletionChange.to!),
|
||||
}
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
changes.push(deletionChange, additionChange)
|
||||
}
|
||||
|
||||
const transaction: EditorTransaction = {
|
||||
changes: changes,
|
||||
}
|
||||
|
||||
const origin = 'DirectionalMove_' + String(direction)
|
||||
editor.transaction(transaction, origin)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user