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 * *'
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 }}

View File

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

View File

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