codejar
Advanced tools
Comparing version 3.3.0 to 3.4.0
@@ -9,2 +9,3 @@ declare type Options = { | ||
history: boolean; | ||
window: typeof window; | ||
}; | ||
@@ -11,0 +12,0 @@ export declare type Position = { |
@@ -0,3 +1,6 @@ | ||
const globalWindow = window; | ||
export function CodeJar(editor, highlight, opt = {}) { | ||
const options = Object.assign({ tab: '\t', indentOn: /{$/, spellcheck: false, catchTab: true, preserveIdent: true, addClosing: true, history: true }, opt); | ||
const options = Object.assign({ tab: '\t', indentOn: /{$/, spellcheck: false, catchTab: true, preserveIdent: true, addClosing: true, history: true, window: globalWindow }, opt); | ||
const window = options.window; | ||
const document = window.document; | ||
let listeners = []; | ||
@@ -86,3 +89,3 @@ let history = []; | ||
function save() { | ||
const s = window.getSelection(); | ||
const s = getSelection(); | ||
const pos = { start: 0, end: 0, dir: undefined }; | ||
@@ -124,3 +127,3 @@ visit(editor, el => { | ||
function restore(pos) { | ||
const s = window.getSelection(); | ||
const s = getSelection(); | ||
let startNode, startOffset = 0; | ||
@@ -170,3 +173,3 @@ let endNode, endOffset = 0; | ||
function beforeCursor() { | ||
const s = window.getSelection(); | ||
const s = getSelection(); | ||
const r0 = s.getRangeAt(0); | ||
@@ -179,3 +182,3 @@ const r = document.createRange(); | ||
function afterCursor() { | ||
const s = window.getSelection(); | ||
const s = getSelection(); | ||
const r0 = s.getRangeAt(0); | ||
@@ -249,10 +252,10 @@ const r = document.createRange(); | ||
&& !escapeCharacter | ||
// Only if string or have empty space after | ||
&& (`"'`.includes(event.key) || ['', ' ', '\n'].includes(charAfter))) { | ||
// Place closing char. | ||
preventDefault(event); | ||
const pos = save(); | ||
preventDefault(event); | ||
const text = event.key + close[open.indexOf(event.key)]; | ||
const wrapText = pos.start == pos.end ? '' : getSelection().toString(); | ||
const text = event.key + wrapText + close[open.indexOf(event.key)]; | ||
insert(text); | ||
pos.start = ++pos.end; | ||
pos.start++; | ||
pos.end++; | ||
restore(pos); | ||
@@ -330,3 +333,6 @@ } | ||
preventDefault(event); | ||
const text = (event.originalEvent || event).clipboardData.getData('text/plain'); | ||
const text = (event.originalEvent || event) | ||
.clipboardData | ||
.getData('text/plain') | ||
.replace(/\r/g, ''); | ||
const pos = save(); | ||
@@ -395,2 +401,9 @@ insert(text); | ||
} | ||
function getSelection() { | ||
var _a; | ||
if (((_a = editor.parentNode) === null || _a === void 0 ? void 0 : _a.nodeType) == Node.DOCUMENT_FRAGMENT_NODE) { | ||
return editor.parentNode.getSelection(); | ||
} | ||
return window.getSelection(); | ||
} | ||
return { | ||
@@ -397,0 +410,0 @@ updateOptions(options) { |
@@ -0,1 +1,3 @@ | ||
const globalWindow = window | ||
type Options = { | ||
@@ -9,2 +11,3 @@ tab: string | ||
history: boolean | ||
window: typeof window | ||
} | ||
@@ -34,4 +37,9 @@ | ||
history: true, | ||
window: globalWindow, | ||
...opt | ||
} | ||
const window = options.window | ||
const document = window.document | ||
let listeners: [string, any][] = [] | ||
@@ -123,3 +131,3 @@ let history: HistoryRecord[] = [] | ||
function save(): Position { | ||
const s = window.getSelection()! | ||
const s = getSelection() | ||
const pos: Position = {start: 0, end: 0, dir: undefined} | ||
@@ -161,3 +169,3 @@ | ||
function restore(pos: Position) { | ||
const s = window.getSelection()! | ||
const s = getSelection() | ||
let startNode: Node | undefined, startOffset = 0 | ||
@@ -210,3 +218,3 @@ let endNode: Node | undefined, endOffset = 0 | ||
function beforeCursor() { | ||
const s = window.getSelection()! | ||
const s = getSelection() | ||
const r0 = s.getRangeAt(0) | ||
@@ -220,3 +228,3 @@ const r = document.createRange() | ||
function afterCursor() { | ||
const s = window.getSelection()! | ||
const s = getSelection() | ||
const r0 = s.getRangeAt(0) | ||
@@ -295,11 +303,11 @@ const r = document.createRange() | ||
&& !escapeCharacter | ||
// Only if string or have empty space after | ||
&& (`"'`.includes(event.key) || ['', ' ', '\n'].includes(charAfter)) | ||
) { | ||
// Place closing char. | ||
preventDefault(event) | ||
const pos = save() | ||
preventDefault(event) | ||
const text = event.key + close[open.indexOf(event.key)] | ||
const wrapText = pos.start == pos.end ? '' : getSelection().toString() | ||
const text = event.key + wrapText + close[open.indexOf(event.key)] | ||
insert(text) | ||
pos.start = ++pos.end | ||
pos.start++ | ||
pos.end++ | ||
restore(pos) | ||
@@ -380,3 +388,6 @@ } | ||
preventDefault(event) | ||
const text = ((event as any).originalEvent || event).clipboardData.getData('text/plain') | ||
const text = ((event as any).originalEvent || event) | ||
.clipboardData | ||
.getData('text/plain') | ||
.replace(/\r/g, '') | ||
const pos = save() | ||
@@ -456,2 +467,9 @@ insert(text) | ||
function getSelection() { | ||
if (editor.parentNode?.nodeType == Node.DOCUMENT_FRAGMENT_NODE) { | ||
return (editor.parentNode as Document).getSelection()! | ||
} | ||
return window.getSelection()! | ||
} | ||
return { | ||
@@ -458,0 +476,0 @@ updateOptions(options: Partial<Options>) { |
{ | ||
"name": "codejar", | ||
"version": "3.3.0", | ||
"version": "3.4.0", | ||
"description": "An embeddable code editor for the browser", | ||
@@ -24,4 +24,4 @@ "license": "MIT", | ||
"gzip-size-cli": "^3.0.0", | ||
"release-it": "^14.0.3", | ||
"typescript": "^3.8.3" | ||
"release-it": "^14.5.1", | ||
"typescript": "^4.2.3" | ||
}, | ||
@@ -28,0 +28,0 @@ "release-it": { |
@@ -63,2 +63,3 @@ <p align="center"><a href="https://medv.io/codejar/"><img src="https://medv.io/assets/codejar.svg" width="72"></a></p> | ||
- `history` records history. Default `true`. | ||
- `window` window object. Default: `window`. | ||
@@ -65,0 +66,0 @@ |
41562
1149
160