mirror of
https://github.com/Karaka-Management/oms-Editor.git
synced 2026-01-10 16:48:42 +00:00
more tests and some fixes
This commit is contained in:
parent
b030d7fd55
commit
e5bf0b2f1f
9
.github/workflows/main.yml
vendored
9
.github/workflows/main.yml
vendored
|
|
@ -13,10 +13,15 @@ on:
|
|||
- cron: '0 0 1,15 * *'
|
||||
|
||||
jobs:
|
||||
general_module_workflow:
|
||||
general_module_workflow_php:
|
||||
uses: Karaka-Management/Karaka/.github/workflows/php_template.yml@develop
|
||||
secrets:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
GH_PAT: ${{ secrets.GH_PAT }}
|
||||
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
||||
|
||||
general_module_workflow_js:
|
||||
uses: Karaka-Management/Karaka/.github/workflows/js_template.yml@develop
|
||||
secrets:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
GH_PAT: ${{ secrets.GH_PAT }}
|
||||
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
||||
|
|
@ -7,8 +7,9 @@ Autoloader.defineNamespace('omsApp.Modules');
|
|||
* @feature Create immediate text preview similar to a rich text editor or Typora
|
||||
* https://github.com/Karaka-Management/oms-Editor/issues/4
|
||||
*/
|
||||
/* global omsApp */
|
||||
omsApp.Modules.Editor = class {
|
||||
constructor(app)
|
||||
constructor (app)
|
||||
{
|
||||
this.app = app;
|
||||
this.editors = {};
|
||||
|
|
@ -16,8 +17,8 @@ omsApp.Modules.Editor = class {
|
|||
|
||||
bind (id)
|
||||
{
|
||||
const e = typeof id === 'undefined' ? document.getElementsByClassName('m-editor') : [id],
|
||||
length = e.length;
|
||||
const e = typeof id === 'undefined' ? document.getElementsByClassName('m-editor') : [id];
|
||||
const length = e.length;
|
||||
|
||||
for (let i = 0; i < length; ++i) {
|
||||
this.bindElement(e[i].id);
|
||||
|
|
@ -31,4 +32,4 @@ omsApp.Modules.Editor = class {
|
|||
};
|
||||
};
|
||||
|
||||
window.omsApp.moduleManager.get('Editor').bind();
|
||||
window.omsApp.moduleManager.get('Editor').bind();
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ export class Editor {
|
|||
{
|
||||
this.id = id;
|
||||
this.editor = document.getElementById(id);
|
||||
this.markdown = new Markdown.Converter({extensions: [], sanitize: true});
|
||||
this.markdown = new Markdown.Converter({ extensions: [], sanitize: true });
|
||||
this.editorContent = null;
|
||||
};
|
||||
|
||||
|
|
@ -27,30 +27,30 @@ export class Editor {
|
|||
this.editorContent = this.editor.getElementsByTagName('textarea')[0];
|
||||
|
||||
for (let i = 0; i < length; ++i) {
|
||||
editorButtons[i].addEventListener('click', function(event) {
|
||||
editorButtons[i].addEventListener('click', function (event) {
|
||||
self.toolsButton(this, event);
|
||||
jsOMS.triggerEvent(self.editorContent, 'input');
|
||||
});
|
||||
}
|
||||
|
||||
this.editorContent.addEventListener('input', function() {
|
||||
this.editorContent.addEventListener('input', function () {
|
||||
editorPreview.innerHTML = self.markdown.makeHtml(self.editorContent.value);
|
||||
})
|
||||
});
|
||||
};
|
||||
|
||||
toolsButton (e, event)
|
||||
{
|
||||
let textarea = this.editor.getElementsByTagName('textarea')[0];
|
||||
const textarea = this.editor.getElementsByTagName('textarea')[0];
|
||||
|
||||
const startPosition = textarea.selectionStart;
|
||||
let endPosition = textarea.selectionEnd;
|
||||
let startOffset = 0;
|
||||
let endOffset = 0;
|
||||
// let endOffset = 0;
|
||||
let lines = [];
|
||||
let linesLength = 0;
|
||||
let end = '';
|
||||
|
||||
switch (e.dataset['editorButton']) {
|
||||
switch (e.dataset.editorButton) {
|
||||
case 'undo':
|
||||
|
||||
break;
|
||||
|
|
@ -59,102 +59,103 @@ export class Editor {
|
|||
break;
|
||||
case 'bold':
|
||||
startOffset = 2;
|
||||
endOffset = 2;
|
||||
// endOffset = 2;
|
||||
textarea.value = textarea.value.slice(0, startPosition)
|
||||
+ '**' + textarea.value.slice(startPosition, endPosition) + '**'
|
||||
+ textarea.value.slice(endPosition, textarea.value.length);
|
||||
break;
|
||||
case 'italic':
|
||||
startOffset = 1;
|
||||
endOffset = 1;
|
||||
// endOffset = 1;
|
||||
textarea.value = textarea.value.slice(0, startPosition)
|
||||
+ '*' + textarea.value.slice(startPosition, endPosition) + '*'
|
||||
+ textarea.value.slice(endPosition, textarea.value.length);
|
||||
break;
|
||||
case 'underline':
|
||||
startOffset = 2;
|
||||
endOffset = 2;
|
||||
// endOffset = 2;
|
||||
textarea.value = textarea.value.slice(0, startPosition)
|
||||
+ '__' + textarea.value.slice(startPosition, endPosition) + '__'
|
||||
+ textarea.value.slice(endPosition, textarea.value.length);
|
||||
break;
|
||||
case 'strikethrough':
|
||||
startOffset = 2;
|
||||
endOffset = 2;
|
||||
// endOffset = 2;
|
||||
textarea.value = textarea.value.slice(0, startPosition)
|
||||
+ '~~' + textarea.value.slice(startPosition, endPosition) + '~~'
|
||||
+ textarea.value.slice(endPosition, textarea.value.length);
|
||||
break;
|
||||
case 'ulist':
|
||||
lines = textarea.value.slice(startPosition, endPosition).split("\n");
|
||||
lines = textarea.value.slice(startPosition, endPosition).split('\n');
|
||||
linesLength = lines.length;
|
||||
|
||||
textarea.value = textarea.value.slice(0, startPosition);
|
||||
end = textarea.value.slice(endPosition, textarea.value.length);
|
||||
|
||||
for (let i = 0; i < linesLength; ++i) {
|
||||
textarea.value += ' * ' + lines[i] + "\n";
|
||||
textarea.value += ' * ' + lines[i] + '\n';
|
||||
}
|
||||
|
||||
endPosition = startPosition;
|
||||
textarea.value += end;
|
||||
break;
|
||||
case 'olist':
|
||||
lines = textarea.value.slice(startPosition, endPosition).split("\n");
|
||||
lines = textarea.value.slice(startPosition, endPosition).split('\n');
|
||||
linesLength = lines.length;
|
||||
|
||||
textarea.value = textarea.value.slice(0, startPosition);
|
||||
end = textarea.value.slice(endPosition, textarea.value.length);
|
||||
|
||||
for (let i = 0; i < linesLength; ++i) {
|
||||
textarea.value += ' ' + (i + 1) + '. ' + lines[i] + "\n";
|
||||
textarea.value += ' ' + (i + 1) + '. ' + lines[i] + '\n';
|
||||
}
|
||||
|
||||
endPosition = startPosition;
|
||||
textarea.value += end;
|
||||
break;
|
||||
case 'indent':
|
||||
lines = textarea.value.slice(startPosition, endPosition).split("\n");
|
||||
lines = textarea.value.slice(startPosition, endPosition).split('\n');
|
||||
linesLength = lines.length;
|
||||
|
||||
textarea.value = textarea.value.slice(0, startPosition);
|
||||
end = textarea.value.slice(endPosition, textarea.value.length);
|
||||
|
||||
for (let i = 0; i < linesLength; ++i) {
|
||||
textarea.value += ' ' + lines[i] + "\n";
|
||||
textarea.value += ' ' + lines[i] + '\n';
|
||||
}
|
||||
|
||||
endPosition = startPosition;
|
||||
textarea.value += end;
|
||||
break;
|
||||
case 'table':
|
||||
textarea.value = textarea.value.slice(0, startPosition) + "\n"
|
||||
+ '| Tables | Are | Cool |' + "\n"
|
||||
+ '| ------------- |:-----------------:| -----:|' + "\n"
|
||||
+ '| col 3 is | right - aligned | $1600 |' + "\n"
|
||||
+ '| col 2 is | centered | $12 |' + "\n"
|
||||
+ '| zebra stripes | are neat | $1 |' + "\n"
|
||||
textarea.value = textarea.value.slice(0, startPosition) + '\n'
|
||||
+ '| Tables | Are | Cool |' + '\n'
|
||||
+ '| ------------- |:-----------------:| -----:|' + '\n'
|
||||
+ '| col 3 is | right - aligned | $1600 |' + '\n'
|
||||
+ '| col 2 is | centered | $12 |' + '\n'
|
||||
+ '| zebra stripes | are neat | $1 |' + '\n'
|
||||
+ textarea.value.slice(startPosition, textarea.value.length);
|
||||
break;
|
||||
case 'link':
|
||||
case 'link': {
|
||||
startOffset = 1;
|
||||
endOffset = 0;
|
||||
let link = textarea.value.slice(startPosition, endPosition);
|
||||
// endOffset = 0;
|
||||
const link = textarea.value.slice(startPosition, endPosition);
|
||||
|
||||
textarea.value = textarea.value.slice(0, startPosition)
|
||||
+ ((link.startsWith('http') || link.startsWith('www')) ? '[' + link + ']' : '[' + link + '](https://www.website.com "' + link + '")')
|
||||
+ textarea.value.slice(endPosition, textarea.value.length);
|
||||
break;
|
||||
}
|
||||
case 'code':
|
||||
startOffset = 1;
|
||||
endOffset = 1;
|
||||
// endOffset = 1;
|
||||
textarea.value = textarea.value.slice(0, startPosition)
|
||||
+ '`' + textarea.value.slice(startPosition, endPosition) + '`'
|
||||
+ textarea.value.slice(endPosition, textarea.value.length);
|
||||
break;
|
||||
case 'quote':
|
||||
startOffset = 2;
|
||||
endOffset = 0;
|
||||
// endOffset = 0;
|
||||
textarea.value = textarea.value.slice(0, startPosition)
|
||||
+ '> ' + textarea.value.slice(startPosition, textarea.value.length);
|
||||
break;
|
||||
|
|
@ -183,4 +184,4 @@ export class Editor {
|
|||
|
||||
return text;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user