Wiki toolbar improvements (mainly for Firefox).
git-svn-id: http://redmine.rubyforge.org/svn/trunk@1063 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
parent
8b710cf9de
commit
4e1e5985a1
Binary file not shown.
After Width: | Height: | Size: 995 B |
Binary file not shown.
After Width: | Height: | Size: 994 B |
Binary file not shown.
After Width: | Height: | Size: 993 B |
Binary file not shown.
Before Width: | Height: | Size: 415 B |
Binary file not shown.
After Width: | Height: | Size: 566 B |
Binary file not shown.
After Width: | Height: | Size: 224 B |
|
@ -228,6 +228,58 @@ jsToolBar.prototype = {
|
||||||
this.encloseSelection(stag,etag);
|
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) {
|
encloseSelection: function(prefix, suffix, fn) {
|
||||||
this.textarea.focus();
|
this.textarea.focus();
|
||||||
|
|
||||||
|
@ -370,28 +422,43 @@ jsToolBar.prototype.elements.code = {
|
||||||
// spacer
|
// spacer
|
||||||
jsToolBar.prototype.elements.space1 = {type: 'space'}
|
jsToolBar.prototype.elements.space1 = {type: 'space'}
|
||||||
|
|
||||||
// heading
|
// headings
|
||||||
jsToolBar.prototype.elements.heading = {
|
jsToolBar.prototype.elements.h1 = {
|
||||||
type: 'button',
|
type: 'button',
|
||||||
title: 'Heading',
|
title: 'Heading 1',
|
||||||
fn: {
|
fn: {
|
||||||
wiki: function() {
|
wiki: function() {
|
||||||
this.encloseSelection('','',function(str) {
|
this.encloseLineSelection('h1. ', '',function(str) {
|
||||||
str = str.replace(/\r/g,'');
|
str = str.replace(/^h\d+\.\s+/, '')
|
||||||
return 'h2. '+str.replace(/\n/g,"\n* ");
|
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
|
// spacer
|
||||||
jsToolBar.prototype.elements.space2 = {type: 'space'}
|
jsToolBar.prototype.elements.space2 = {type: 'space'}
|
||||||
|
@ -402,9 +469,9 @@ jsToolBar.prototype.elements.ul = {
|
||||||
title: 'Unordered list',
|
title: 'Unordered list',
|
||||||
fn: {
|
fn: {
|
||||||
wiki: function() {
|
wiki: function() {
|
||||||
this.encloseSelection('','',function(str) {
|
this.encloseLineSelection('','',function(str) {
|
||||||
str = str.replace(/\r/g,'');
|
str = str.replace(/\r/g,'');
|
||||||
return '* '+str.replace(/\n/g,"\n* ");
|
return str.replace(/(\n|^)[#-]?\s*/g,"$1* ");
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -416,53 +483,39 @@ jsToolBar.prototype.elements.ol = {
|
||||||
title: 'Ordered list',
|
title: 'Ordered list',
|
||||||
fn: {
|
fn: {
|
||||||
wiki: function() {
|
wiki: function() {
|
||||||
this.encloseSelection('','',function(str) {
|
this.encloseLineSelection('','',function(str) {
|
||||||
str = str.replace(/\r/g,'');
|
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
|
// spacer
|
||||||
jsToolBar.prototype.elements.space3 = {type: 'space'}
|
jsToolBar.prototype.elements.space3 = {type: 'space'}
|
||||||
|
|
||||||
// link
|
// wiki page
|
||||||
/*
|
|
||||||
jsToolBar.prototype.elements.link = {
|
jsToolBar.prototype.elements.link = {
|
||||||
type: 'button',
|
type: 'button',
|
||||||
title: 'Link',
|
title: 'Wiki Page 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 };
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
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 = {
|
|
||||||
type: 'button',
|
|
||||||
title: 'Link',
|
|
||||||
fn: {
|
fn: {
|
||||||
wiki: function() { this.encloseSelection("[[", "]]") }
|
wiki: function() { this.encloseSelection("[[", "]]") }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// image
|
||||||
|
jsToolBar.prototype.elements.img = {
|
||||||
|
type: 'button',
|
||||||
|
title: 'Inline image',
|
||||||
|
fn: {
|
||||||
|
wiki: function() { this.encloseSelection("!", "!") }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -67,8 +67,14 @@
|
||||||
.jstb_br {
|
.jstb_br {
|
||||||
background-image: url(../images/jstoolbar/bt_br.png);
|
background-image: url(../images/jstoolbar/bt_br.png);
|
||||||
}
|
}
|
||||||
.jstb_heading {
|
.jstb_h1 {
|
||||||
background-image: url(../images/jstoolbar/bt_heading.png);
|
background-image: url(../images/jstoolbar/bt_h1.png);
|
||||||
|
}
|
||||||
|
.jstb_h2 {
|
||||||
|
background-image: url(../images/jstoolbar/bt_h2.png);
|
||||||
|
}
|
||||||
|
.jstb_h3 {
|
||||||
|
background-image: url(../images/jstoolbar/bt_h3.png);
|
||||||
}
|
}
|
||||||
.jstb_ul {
|
.jstb_ul {
|
||||||
background-image: url(../images/jstoolbar/bt_ul.png);
|
background-image: url(../images/jstoolbar/bt_ul.png);
|
||||||
|
@ -76,6 +82,12 @@
|
||||||
.jstb_ol {
|
.jstb_ol {
|
||||||
background-image: url(../images/jstoolbar/bt_ol.png);
|
background-image: url(../images/jstoolbar/bt_ol.png);
|
||||||
}
|
}
|
||||||
|
.jstb_pre {
|
||||||
|
background-image: url(../images/jstoolbar/bt_pre.png);
|
||||||
|
}
|
||||||
.jstb_link {
|
.jstb_link {
|
||||||
background-image: url(../images/jstoolbar/bt_link.png);
|
background-image: url(../images/jstoolbar/bt_link.png);
|
||||||
}
|
}
|
||||||
|
.jstb_img {
|
||||||
|
background-image: url(../images/jstoolbar/bt_img.png);
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue