diff --git a/ayanova/src/components/wiki-control.vue b/ayanova/src/components/wiki-control.vue index 42bef13b..a0c66217 100644 --- a/ayanova/src/components/wiki-control.vue +++ b/ayanova/src/components/wiki-control.vue @@ -511,40 +511,134 @@ export default { this.replaceSelectedText("***"); break; case "heading": - this.getSelectedRange(true); //special forces { + this.getSelectedRange(true); //special forces let prepend = "#".repeat(ex) + " "; let s = this.getSelectedBlock(); s = s.replace(/\n/gi, "\n" + prepend); if (s.length > 0 && s[0] != "\n") { s = prepend + s; } + this.replaceSelectedBlock(s); } - this.replaceSelectedBlock(s); break; case "code": - throw "NOT IMPLEMENTED"; + this.replaceSelectedText("`" + this.getSelectedText() + "`"); break; case "codeblock": - throw "NOT IMPLEMENTED"; + this.replaceSelectedBlock( + "\n```\n" + this.getSelectedBlock() + "\n```\n" + ); break; case "quote": - throw "NOT IMPLEMENTED"; + if (this.selection.hasSelection) { + this.replaceSelectedBlock("\n>" + this.getSelectedBlock() + "\n"); + } else { + this.replaceSelectedText("\n>"); + } break; case "ul": - throw "NOT IMPLEMENTED"; + { + if (this.selection.hasSelection) { + let s = this.getSelectedBlock(); + s = s.replace(/\n/gi, "\n* "); + if (s.length > 0 && s[0] != "\n") { + s = "* " + s; + } + s = s + "\n"; + this.replaceSelectedBlock(s); + } else { + this.replaceSelectedText("\n* "); + } + } break; case "ol": - throw "NOT IMPLEMENTED"; + { + if (this.selection.hasSelection) { + let s = this.getSelectedBlock(); + // console.log("Selected block:[" + s + "]"); + let ret = "\n1. "; + let listItem = 1; + for (let i = 0; i < s.length; i++) { + if (s[i] == "\n") { + ++listItem; + ret += "\n" + listItem + ". "; + } else { + ret += s[i]; + } + } + ret += "\n\n"; + // console.log("RET:[" + ret + "]"); + this.replaceSelectedBlock(ret); + } else { + this.replaceSelectedText("\n1. "); + } + } break; case "task": - throw "NOT IMPLEMENTED"; + { + if (this.selection.hasSelection) { + let s = this.getSelectedBlock(); + s = s.replace(/\n/gi, "\n* [ ] "); + if (s.length > 0 && s[0] != "\n") { + s = "* [ ] " + s; + } + s = s + "\n"; + this.replaceSelectedBlock(s); + } else { + this.replaceSelectedText("\n* [ ] "); + } + } break; case "table": - throw "NOT IMPLEMENTED"; + { + this.tableMenu = false; + //| Column 1 | Column 2 | Column 3 | + //| -------- | -------- | -------- | + //| John | Doe | Male | + //| Mary | Smith | Female | + this.getSelectedRange(); + + let t = "\n"; + + //Header + //| CCC | CCC | CCC | + for (let c = 0; c < this.tableMenuColumns; c++) { + t += "| CCC "; + } + t += "|\n"; + + //Divider + //| --- | --- | --- | + for (let c = 0; c < this.tableMenuColumns; c++) { + t += "| --- "; + } + t += "|\n"; + + //Rows + //| XXX | XXX | XXX | + for (let r = 0; r < this.tableMenuRows; r++) { + for (let c = 0; c < this.tableMenuColumns; c++) { + t += "| XXX "; + } + t += "|\n"; + } + + this.replaceSelectedText(t); + } break; case "link": - throw "NOT IMPLEMENTED"; + { + this.linkMenu = false; + let url = this.linkUrl; + //force it to a full url so it doesn't attempt to open it as a SPA window + if (!url.includes(":")) { + url = "https://" + url; + } + let t = "[" + this.linkText + "](" + url + ")"; + // [MY Awesome LINK](www.ayanova.com) + this.replaceSelectedText(t); + } break; case "image": throw "NOT IMPLEMENTED"; @@ -557,7 +651,17 @@ export default { //emit input event to parent form for dirty tracking this.handleInput(this.localVal); }, - + openLinkMenu(e) { + e.preventDefault(); + this.linkMenu = false; + this.getSelectedRange(); + this.linkText = this.getSelectedText(); + this.linkMenuX = e.clientX; + this.linkMenuY = e.clientY; + this.$nextTick(() => { + this.linkMenu = true; + }); + } // clickBold() { // this.getSelectedRange(); // this.replaceSelectedText("**" + this.getSelectedText() + "**"); @@ -591,141 +695,131 @@ export default { // this.getSelectedRange(); // this.replaceSelectedText("***"); // }, - clickCode() { - this.getSelectedRange(); - this.replaceSelectedText("`" + this.getSelectedText() + "`"); - }, - clickCodeBlock() { - this.getSelectedRange(); - this.replaceSelectedBlock( - "\n```\n" + this.getSelectedBlock() + "\n```\n" - ); - }, + // clickCode() { + // this.getSelectedRange(); + // this.replaceSelectedText("`" + this.getSelectedText() + "`"); + // }, + // clickCodeBlock() { + // this.getSelectedRange(); + // this.replaceSelectedBlock( + // "\n```\n" + this.getSelectedBlock() + "\n```\n" + // ); + // }, - clickQuote() { - this.getSelectedRange(); - if (this.selection.hasSelection) { - this.replaceSelectedBlock("\n>" + this.getSelectedBlock() + "\n"); - } else { - this.replaceSelectedText("\n>"); - } - }, - clickUl() { - //if a selected block with several lines then prepend each line - //if a selected block with one line only then prepend start of first line after last linefeed - this.getSelectedRange(); - if (this.selection.hasSelection) { - let s = this.getSelectedBlock(); - s = s.replace(/\n/gi, "\n* "); - if (s.length > 0 && s[0] != "\n") { - s = "* " + s; - } - s = s + "\n"; - this.replaceSelectedBlock(s); - } else { - this.replaceSelectedText("\n* "); - } - }, - clickOl() { - //if a selected block with several lines then prepend each line - //if a selected block with one line only then prepend start of first line after last linefeed - this.getSelectedRange(); - if (this.selection.hasSelection) { - let s = this.getSelectedBlock(); - // console.log("Selected block:[" + s + "]"); - let ret = "\n1. "; - let listItem = 1; - for (let i = 0; i < s.length; i++) { - if (s[i] == "\n") { - ++listItem; - ret += "\n" + listItem + ". "; - } else { - ret += s[i]; - } - } - ret += "\n\n"; - // console.log("RET:[" + ret + "]"); - this.replaceSelectedBlock(ret); - } else { - this.replaceSelectedText("\n1. "); - } - }, - clickTask() { - this.getSelectedRange(); - if (this.selection.hasSelection) { - let s = this.getSelectedBlock(); - s = s.replace(/\n/gi, "\n* [ ] "); - if (s.length > 0 && s[0] != "\n") { - s = "* [ ] " + s; - } - s = s + "\n"; - this.replaceSelectedBlock(s); - } else { - this.replaceSelectedText("\n* [ ] "); - } - }, - clickTable() { - this.tableMenu = false; - //| Column 1 | Column 2 | Column 3 | - //| -------- | -------- | -------- | - //| John | Doe | Male | - //| Mary | Smith | Female | - this.getSelectedRange(); + // clickQuote() { + // this.getSelectedRange(); + // if (this.selection.hasSelection) { + // this.replaceSelectedBlock("\n>" + this.getSelectedBlock() + "\n"); + // } else { + // this.replaceSelectedText("\n>"); + // } + // }, + // clickUl() { + // //if a selected block with several lines then prepend each line + // //if a selected block with one line only then prepend start of first line after last linefeed + // this.getSelectedRange(); + // if (this.selection.hasSelection) { + // let s = this.getSelectedBlock(); + // s = s.replace(/\n/gi, "\n* "); + // if (s.length > 0 && s[0] != "\n") { + // s = "* " + s; + // } + // s = s + "\n"; + // this.replaceSelectedBlock(s); + // } else { + // this.replaceSelectedText("\n* "); + // } + // // }, + // clickOl() { + // //if a selected block with several lines then prepend each line + // //if a selected block with one line only then prepend start of first line after last linefeed + // this.getSelectedRange(); + // if (this.selection.hasSelection) { + // let s = this.getSelectedBlock(); + // // console.log("Selected block:[" + s + "]"); + // let ret = "\n1. "; + // let listItem = 1; + // for (let i = 0; i < s.length; i++) { + // if (s[i] == "\n") { + // ++listItem; + // ret += "\n" + listItem + ". "; + // } else { + // ret += s[i]; + // } + // } + // ret += "\n\n"; + // // console.log("RET:[" + ret + "]"); + // this.replaceSelectedBlock(ret); + // } else { + // this.replaceSelectedText("\n1. "); + // } + // }, + // clickTask() { + // this.getSelectedRange(); + // if (this.selection.hasSelection) { + // let s = this.getSelectedBlock(); + // s = s.replace(/\n/gi, "\n* [ ] "); + // if (s.length > 0 && s[0] != "\n") { + // s = "* [ ] " + s; + // } + // s = s + "\n"; + // this.replaceSelectedBlock(s); + // } else { + // this.replaceSelectedText("\n* [ ] "); + // } + // }, + // clickTable() { + // this.tableMenu = false; + // //| Column 1 | Column 2 | Column 3 | + // //| -------- | -------- | -------- | + // //| John | Doe | Male | + // //| Mary | Smith | Female | + // this.getSelectedRange(); - let t = "\n"; + // let t = "\n"; - //Header - //| CCC | CCC | CCC | - for (let c = 0; c < this.tableMenuColumns; c++) { - t += "| CCC "; - } - t += "|\n"; + // //Header + // //| CCC | CCC | CCC | + // for (let c = 0; c < this.tableMenuColumns; c++) { + // t += "| CCC "; + // } + // t += "|\n"; - //Divider - //| --- | --- | --- | - for (let c = 0; c < this.tableMenuColumns; c++) { - t += "| --- "; - } - t += "|\n"; + // //Divider + // //| --- | --- | --- | + // for (let c = 0; c < this.tableMenuColumns; c++) { + // t += "| --- "; + // } + // t += "|\n"; - //Rows - //| XXX | XXX | XXX | - for (let r = 0; r < this.tableMenuRows; r++) { - for (let c = 0; c < this.tableMenuColumns; c++) { - t += "| XXX "; - } - t += "|\n"; - } + // //Rows + // //| XXX | XXX | XXX | + // for (let r = 0; r < this.tableMenuRows; r++) { + // for (let c = 0; c < this.tableMenuColumns; c++) { + // t += "| XXX "; + // } + // t += "|\n"; + // } - this.replaceSelectedText(t); - }, - openLinkMenu(e) { - e.preventDefault(); - this.linkMenu = false; - this.getSelectedRange(); - this.linkText = this.getSelectedText(); - this.linkMenuX = e.clientX; - this.linkMenuY = e.clientY; - this.$nextTick(() => { - this.linkMenu = true; - }); - }, - clickLink() { - this.linkMenu = false; - this.getSelectedRange(); + // this.replaceSelectedText(t); + // }, - //this.linkUrl - //this.linkText - let url = this.linkUrl; - //force it to an external url - if (!url.includes(":")) { - url = "https://" + url; - } - let t = "[" + this.linkText + "](" + url + ")"; - // [MY Awesome LINK](www.ayanova.com) + // clickLink() { + // this.linkMenu = false; + // this.getSelectedRange(); - this.replaceSelectedText(t); - } + // //this.linkUrl + // //this.linkText + // let url = this.linkUrl; + // //force it to an external url + // if (!url.includes(":")) { + // url = "https://" + url; + // } + // let t = "[" + this.linkText + "](" + url + ")"; + // // [MY Awesome LINK](www.ayanova.com) + + // this.replaceSelectedText(t); + // } } };