diff --git a/serendipity_editor.js b/serendipity_editor.js
index 657439a4..55659bad 100644
--- a/serendipity_editor.js
+++ b/serendipity_editor.js
@@ -29,72 +29,34 @@
// This variable isn't used anywhere else?
var thisForm;
-// Returns "position" of selection in textarea (Mozilla)?
+// Returns "position" of selection in textarea
// Used internally by wrapSelectionWithLink()
-function getMozSelection(txtarea) {
- var selLength = txtarea.textLength;
- var selStart = txtarea.selectionStart;
- var selEnd = txtarea.selectionEnd;
-
- if (selEnd==1 || selEnd==2) {
- selEnd=selLength;
- }
-
- return (txtarea.value).substring(selStart, selEnd);
-}
-
-// Returns "position" of selection in textarea (IE)?
-// Used internally by wrapSelectionWithLink()
-function getIESelection(txtarea) {
- return document.selection.createRange().text;
-}
-
-// Wraps selection in tags passed as arguments (Mozilla)
-// Used internally by wrapSelection()
-function mozWrap(txtarea, lft, rgt) {
- var selLength = txtarea.textLength;
- var selStart = txtarea.selectionStart;
- var selEnd = txtarea.selectionEnd;
-
- if (txtarea.setSelectionRange) {
- if (selEnd==1 || selEnd==2) selEnd=selLength;
-
- var s1 = (txtarea.value).substring(0,selStart);
- var s2 = (txtarea.value).substring(selStart, selEnd)
- var s3 = (txtarea.value).substring(selEnd, selLength);
-
- txtarea.value = s1 + lft + s2 + rgt + s3;
- } else {
- txtarea.value = txtarea.value + ' ' + lft + rgt + ' ';
- }
-}
-
-// Wraps selection in tags passed as arguments (IE)
-// Used internally by wrapSelection()
-function IEWrap(txtarea, lft, rgt) {
- strSelection = document.selection.createRange().text;
-
- if (strSelection != "") {
- document.selection.createRange().text = lft + strSelection + rgt;
- } else {
- txtarea.value = txtarea.value + lft + rgt;
- }
+function getSelection($txtarea) {
+ var start = $txtarea[0].selectionStart;
+ var end = $txtarea[0].selectionEnd;
+ return $txtarea.val().substring(start, end);
}
// Used by non-wysiwyg editor toolbar buttons to wrap selection
// in a element associated with toolbar button
-function wrapSelection(txtarea, lft, rgt) {
+function wrapSelection(txtarea, openTag, closeTag) {
scrollPos = false;
if (txtarea.scrollTop) {
scrollPos = txtarea.scrollTop;
}
- if (document.all) {
- IEWrap(txtarea, lft, rgt);
- } else if (document.getElementById) {
- mozWrap(txtarea, lft, rgt);
- }
+ // http://stackoverflow.com/questions/1712417/jquery-wrap-selected-text-in-a-textarea
+ var $txtarea = jQuery(txtarea);
+ var len = $txtarea.val().length;
+ var start = $txtarea[0].selectionStart;
+ var end = $txtarea[0].selectionEnd;
+ var selectedText = $txtarea.val().substring(start, end);
+ var replacement = openTag + selectedText + closeTag;
+ $txtarea.val($txtarea.val().substring(0, start) + replacement + $txtarea.val().substring(end, len));
+
+ $txtarea[0].selectionStart = start + replacement.length
+ $txtarea[0].selectionEnd = start + replacement.length
if (scrollPos) {
txtarea.focus();
@@ -107,8 +69,7 @@ function wrapSelection(txtarea, lft, rgt) {
function wrapSelectionWithLink(txtarea) {
var my_link = prompt("Enter URL:","http://");
- if (document.all && getIESelection(txtarea) == "" ||
- document.getElementById && getMozSelection(txtarea) == "") {
+ if (getSelection(jQuery(txtarea) ) == "") {
var my_desc = prompt("Enter Description", '');
}
@@ -138,33 +99,34 @@ function wrapSelectionWithLink(txtarea) {
// Adds img element to selected text
// Used internally by wrapInsImage()
-function mozInsert(txtarea, str) {
- var selLength = txtarea.textLength;
- var selStart = txtarea.selectionStart;
- var selEnd = txtarea.selectionEnd;
+function insertText(txtarea, str) {
+ $txtarea = jQuery(txtarea);
+ var selLength = $txtarea.val().length;
+ var selStart = $txtarea[0].selectionStart;
+ var selEnd = $txtarea[0].selectionEnd;
if (selEnd==1 || selEnd==2) {
selEnd=selLength;
}
- var s1 = (txtarea.value).substring(0,selStart);
- var s2 = (txtarea.value).substring(selStart, selEnd)
- var s3 = (txtarea.value).substring(selEnd, selLength);
+ var before = $txtarea.val().substring(0,selStart);
+ var after = $txtarea.val().substring(selStart);
- txtarea.value = s1 + str + s2 + s3;
+ $txtarea.val(before + str + after);
+
+ $txtarea[0].selectionStart = selStart + str.length
+ $txtarea[0].selectionEnd = selStart + str.length
}
// Used by non-wysiwyg editor toolbar buttons to wrap selection
// in
element (only); doesn't really "wrap", merely inserts
// an
element before selected text
-function wrapInsImage(area) {
+function wrapInsImage(txtarea) {
var loc = prompt('Enter the Image Location: ');
- if (!loc) {
- return;
+ if (loc) {
+ insertText(txtarea,'
');
}
-
- mozInsert(area,'
');
}
/* end Better-Editor functions */