summaryrefslogtreecommitdiffstats
path: root/public
diff options
context:
space:
mode:
authorJean-Philippe Lang <jp_lang@yahoo.fr>2008-01-13 18:39:37 +0000
committerJean-Philippe Lang <jp_lang@yahoo.fr>2008-01-13 18:39:37 +0000
commit4e1e5985a1a6763d5413ccd0524213d8cd3dc4a7 (patch)
tree26ff31216056e7434a77f7bfd98a1881b294261b /public
parent8b710cf9de899eb31fb6759f72606d5d3ae4bffc (diff)
downloadredmine-4e1e5985a1a6763d5413ccd0524213d8cd3dc4a7.tar.gz
redmine-4e1e5985a1a6763d5413ccd0524213d8cd3dc4a7.zip
Wiki toolbar improvements (mainly for Firefox).
git-svn-id: http://redmine.rubyforge.org/svn/trunk@1063 e93f8b46-1217-0410-a6f0-8f06a7374b81
Diffstat (limited to 'public')
-rw-r--r--public/images/jstoolbar/bt_h1.pngbin0 -> 995 bytes
-rw-r--r--public/images/jstoolbar/bt_h2.pngbin0 -> 994 bytes
-rw-r--r--public/images/jstoolbar/bt_h3.pngbin0 -> 993 bytes
-rw-r--r--public/images/jstoolbar/bt_heading.pngbin415 -> 0 bytes
-rw-r--r--public/images/jstoolbar/bt_img.pngbin0 -> 566 bytes
-rw-r--r--public/images/jstoolbar/bt_pre.pngbin0 -> 224 bytes
-rw-r--r--public/javascripts/jstoolbar.js157
-rw-r--r--public/stylesheets/jstoolbar.css16
8 files changed, 119 insertions, 54 deletions
diff --git a/public/images/jstoolbar/bt_h1.png b/public/images/jstoolbar/bt_h1.png
new file mode 100644
index 000000000..01f3eec0d
--- /dev/null
+++ b/public/images/jstoolbar/bt_h1.png
Binary files differ
diff --git a/public/images/jstoolbar/bt_h2.png b/public/images/jstoolbar/bt_h2.png
new file mode 100644
index 000000000..36b15048e
--- /dev/null
+++ b/public/images/jstoolbar/bt_h2.png
Binary files differ
diff --git a/public/images/jstoolbar/bt_h3.png b/public/images/jstoolbar/bt_h3.png
new file mode 100644
index 000000000..029d648e5
--- /dev/null
+++ b/public/images/jstoolbar/bt_h3.png
Binary files differ
diff --git a/public/images/jstoolbar/bt_heading.png b/public/images/jstoolbar/bt_heading.png
deleted file mode 100644
index a143f23a7..000000000
--- a/public/images/jstoolbar/bt_heading.png
+++ /dev/null
Binary files differ
diff --git a/public/images/jstoolbar/bt_img.png b/public/images/jstoolbar/bt_img.png
new file mode 100644
index 000000000..91c9a8a87
--- /dev/null
+++ b/public/images/jstoolbar/bt_img.png
Binary files differ
diff --git a/public/images/jstoolbar/bt_pre.png b/public/images/jstoolbar/bt_pre.png
new file mode 100644
index 000000000..df3f917d0
--- /dev/null
+++ b/public/images/jstoolbar/bt_pre.png
Binary files differ
diff --git a/public/javascripts/jstoolbar.js b/public/javascripts/jstoolbar.js
index fd4611e2d..b94a4ed80 100644
--- a/public/javascripts/jstoolbar.js
+++ b/public/javascripts/jstoolbar.js
@@ -228,6 +228,58 @@ jsToolBar.prototype = {
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();
@@ -370,28 +422,43 @@ jsToolBar.prototype.elements.code = {
// 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'}
@@ -402,9 +469,9 @@ jsToolBar.prototype.elements.ul = {
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* ");
});
}
}
@@ -416,53 +483,39 @@ jsToolBar.prototype.elements.ol = {
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("!", "!") }
}
}
diff --git a/public/stylesheets/jstoolbar.css b/public/stylesheets/jstoolbar.css
index 62976e537..df5d2a633 100644
--- a/public/stylesheets/jstoolbar.css
+++ b/public/stylesheets/jstoolbar.css
@@ -67,8 +67,14 @@
.jstb_br {
background-image: url(../images/jstoolbar/bt_br.png);
}
-.jstb_heading {
- background-image: url(../images/jstoolbar/bt_heading.png);
+.jstb_h1 {
+ 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 {
background-image: url(../images/jstoolbar/bt_ul.png);
@@ -76,6 +82,12 @@
.jstb_ol {
background-image: url(../images/jstoolbar/bt_ol.png);
}
+.jstb_pre {
+ background-image: url(../images/jstoolbar/bt_pre.png);
+}
.jstb_link {
background-image: url(../images/jstoolbar/bt_link.png);
}
+.jstb_img {
+ background-image: url(../images/jstoolbar/bt_img.png);
+}