diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index e1e05f8..278096d 100755 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -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 }} \ No newline at end of file diff --git a/Controller.js b/Controller.js index f486284..e2663a5 100755 --- a/Controller.js +++ b/Controller.js @@ -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(); \ No newline at end of file +window.omsApp.moduleManager.get('Editor').bind(); diff --git a/Models/Editor.js b/Models/Editor.js index 72d6744..c8befe5 100755 --- a/Models/Editor.js +++ b/Models/Editor.js @@ -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; }; -}; \ No newline at end of file +};