this.encloseSelection(stag,etag);
},
+ encloseLineSelection: function(prefix, suffix, fn) {
+ this.textarea.focus();
+
+ prefix = prefix || '';
+ suffix = suffix || '';
+
+ var start, end, sel, scrollPos, subst, res;
+
+ if (typeof(document["selection"]) != "undefined") {
+ sel = document.selection.createRange().text;
+ } else if (typeof(this.textarea["setSelectionRange"]) != "undefined") {
+ start = this.textarea.selectionStart;
+ end = this.textarea.selectionEnd;
+ scrollPos = this.textarea.scrollTop;
+ // go to the start of the line
+ start = this.textarea.value.substring(0, start).replace(/[^\r\n]*$/g,'').length;
+ // go to the end of the line
+ end = this.textarea.value.length - this.textarea.value.substring(end, this.textarea.value.length).replace(/^[^\r\n]*/, '').length;
+ sel = this.textarea.value.substring(start, end);
+ }
+
+ if (sel.match(/ $/)) { // exclude ending space char, if any
+ sel = sel.substring(0, sel.length - 1);
+ suffix = suffix + " ";
+ }
+
+ if (typeof(fn) == 'function') {
+ res = (sel) ? fn.call(this,sel) : fn('');
+ } else {
+ res = (sel) ? sel : '';
+ }
+
+ subst = prefix + res + suffix;
+
+ if (typeof(document["selection"]) != "undefined") {
+ document.selection.createRange().text = subst;
+ var range = this.textarea.createTextRange();
+ range.collapse(false);
+ range.move('character', -suffix.length);
+ range.select();
+ } else if (typeof(this.textarea["setSelectionRange"]) != "undefined") {
+ this.textarea.value = this.textarea.value.substring(0, start) + subst +
+ this.textarea.value.substring(end);
+ if (sel) {
+ this.textarea.setSelectionRange(start + subst.length, start + subst.length);
+ } else {
+ this.textarea.setSelectionRange(start + prefix.length, start + prefix.length);
+ }
+ this.textarea.scrollTop = scrollPos;
+ }
+ },
+
encloseSelection: function(prefix, suffix, fn) {
this.textarea.focus();
// spacer
jsToolBar.prototype.elements.space1 = {type: 'space'}
-// heading
-jsToolBar.prototype.elements.heading = {
+// headings
+jsToolBar.prototype.elements.h1 = {
type: 'button',
- title: 'Heading',
+ title: 'Heading 1',
fn: {
- wiki: function() {
- this.encloseSelection('','',function(str) {
- str = str.replace(/\r/g,'');
- return 'h2. '+str.replace(/\n/g,"\n* ");
- });
+ wiki: function() {
+ this.encloseLineSelection('h1. ', '',function(str) {
+ str = str.replace(/^h\d+\.\s+/, '')
+ return str;
+ });
+ }
+ }
+}
+jsToolBar.prototype.elements.h2 = {
+ type: 'button',
+ title: 'Heading 2',
+ fn: {
+ wiki: function() {
+ this.encloseLineSelection('h2. ', '',function(str) {
+ str = str.replace(/^h\d+\.\s+/, '')
+ return str;
+ });
+ }
+ }
+}
+jsToolBar.prototype.elements.h3 = {
+ type: 'button',
+ title: 'Heading 3',
+ fn: {
+ wiki: function() {
+ this.encloseLineSelection('h3. ', '',function(str) {
+ str = str.replace(/^h\d+\.\s+/, '')
+ return str;
+ });
}
}
}
-
-// br
-//jsToolBar.prototype.elements.br = {
-// type: 'button',
-// title: 'Line break',
-// fn: {
-// wiki: function() { this.encloseSelection("%%%\n",'') }
-// }
-//}
// spacer
jsToolBar.prototype.elements.space2 = {type: 'space'}
title: 'Unordered list',
fn: {
wiki: function() {
- this.encloseSelection('','',function(str) {
+ this.encloseLineSelection('','',function(str) {
str = str.replace(/\r/g,'');
- return '* '+str.replace(/\n/g,"\n* ");
+ return str.replace(/(\n|^)[#-]?\s*/g,"$1* ");
});
}
}
title: 'Ordered list',
fn: {
wiki: function() {
- this.encloseSelection('','',function(str) {
+ this.encloseLineSelection('','',function(str) {
str = str.replace(/\r/g,'');
- return '# '+str.replace(/\n/g,"\n# ");
+ return str.replace(/(\n|^)[*-]?\s*/g,"$1# ");
});
}
}
}
+// pre
+jsToolBar.prototype.elements.pre = {
+ type: 'button',
+ title: 'Preformatted text',
+ fn: {
+ wiki: function() { this.encloseLineSelection('<pre>\n', '\n</pre>') }
+ }
+}
+
// spacer
jsToolBar.prototype.elements.space3 = {type: 'space'}
-// link
-/*
+// wiki page
jsToolBar.prototype.elements.link = {
type: 'button',
- title: 'Link',
- fn: {},
- href_prompt: 'Please give page URL:',
- hreflang_prompt: 'Language of this page:',
- default_hreflang: '',
- prompt: function(href,hreflang) {
- href = href || '';
- hreflang = hreflang || this.elements.link.default_hreflang;
-
- href = window.prompt(this.elements.link.href_prompt,href);
- if (!href) { return false; }
-
- hreflang = ""
-
- return { href: this.stripBaseURL(href), hreflang: hreflang };
+ title: 'Wiki Page Link',
+ fn: {
+ wiki: function() { this.encloseSelection("[[", "]]") }
}
}
-
-jsToolBar.prototype.elements.link.fn.wiki = function() {
- var link = this.elements.link.prompt.call(this);
- if (link) {
- var stag = '"';
- var etag = '":'+link.href;
- this.encloseSelection(stag,etag);
- }
-};
-*/
-// link or wiki page
-jsToolBar.prototype.elements.link = {
+// image
+jsToolBar.prototype.elements.img = {
type: 'button',
- title: 'Link',
+ title: 'Inline image',
fn: {
- wiki: function() { this.encloseSelection("[[", "]]") }
+ wiki: function() { this.encloseSelection("!", "!") }
}
}