From 9e04bf83c05428b83c5b842cef7f3249eabd979e Mon Sep 17 00:00:00 2001 From: Stephan Eckardt Date: Thu, 24 Mar 2011 19:35:49 +0100 Subject: [PATCH] Fix jstoolbar to make buttons for h1, h2,
 etc. work in
 IE8

---
 public/javascripts/jstoolbar/jstoolbar.js | 26 +++++++++++++++++++++--
 1 file changed, 24 insertions(+), 2 deletions(-)

diff --git a/public/javascripts/jstoolbar/jstoolbar.js b/public/javascripts/jstoolbar/jstoolbar.js
index bfef733e..dbc973fe 100644
--- a/public/javascripts/jstoolbar/jstoolbar.js
+++ b/public/javascripts/jstoolbar/jstoolbar.js
@@ -249,7 +249,29 @@ jsToolBar.prototype = {
       suffix = suffix || '';
       var start, end, sel, scrollPos, subst, res;
       if (typeof(document["selection"]) != "undefined") {
-          sel = document.selection.createRange().text;
+        // just makes it work in IE8 somehow
+        var range = document.selection.createRange();
+        var bookmark = range.getBookmark();
+        var origParent = range.parentElement();
+        // we move the starting point of the selection to the last newline
+        try {
+          while (range.text[0] != "\n" && range.text[0] != "\r") {
+            bookmark = range.getBookmark();
+            range.moveStart("character", -1);
+            if (origParent != range.parentElement()) {
+              throw "Outside of Textarea";
+            }
+          }
+          range.moveStart("character", 1);
+        } catch(err) {
+          if (err == "Outside of Textarea")
+            range.moveToBookmark(bookmark);
+          else
+            throw err;
+        }
+        if (range.text.match(/ $/))
+          range.moveEnd("character", -1);
+        sel = range.text;
       } else if (typeof(this.textarea["setSelectionRange"]) != "undefined") {
           start = this.textarea.selectionStart;
           end = this.textarea.selectionEnd;
@@ -271,7 +293,7 @@ jsToolBar.prototype = {
       }
       subst = prefix + res + suffix;
       if (typeof(document["selection"]) != "undefined") {
-          var range = document.selection.createRange().text = subst;
+          range.text = subst;
           this.textarea.caretPos -= suffix.length;
       } else if (typeof(this.textarea["setSelectionRange"]) != "undefined") {
           this.textarea.value = this.textarea.value.substring(0, start) + subst + this.textarea.value.substring(end);