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