more tests and some fixes

This commit is contained in:
Dennis Eichhorn 2024-04-24 03:20:46 +00:00
parent b030d7fd55
commit e5bf0b2f1f
3 changed files with 42 additions and 35 deletions

View File

@ -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 }}

View File

@ -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);

View File

@ -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;