Skip to content
This repository was archived by the owner on Feb 14, 2018. It is now read-only.
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
106 changes: 49 additions & 57 deletions jquery-fieldselection.js
Original file line number Diff line number Diff line change
@@ -1,79 +1,71 @@
/*
* jQuery plugin: fieldSelection - v0.1.1 - last change: 2006-12-16
* jQuery plugin: fieldSelection - v0.1.2 - last change: 2006-12-16
* (c) 2006 Alex Brem <alex@0xab.cd> - http://blog.0xab.cd
* (c) 2014 Vladimir Kryukov <erlioniel@gmail.com>
*/

(function() {

var fieldSelection = {

getSelection: function() {

var e = (this.jquery) ? this[0] : this;

return (

/* mozilla / dom 3.0 */
('selectionStart' in e && function() {
var l = e.selectionEnd - e.selectionStart;
return { start: e.selectionStart, end: e.selectionEnd, length: l, text: e.value.substr(e.selectionStart, l) };
}) ||

/* exploder */
(document.selection && function() {

e.focus();

var r = document.selection.createRange();
if (r === null) {
return { start: 0, end: e.value.length, length: 0 }
}

var re = e.createTextRange();
var rc = re.duplicate();
re.moveToBookmark(r.getBookmark());
rc.setEndPoint('EndToStart', re);

return { start: rc.text.length, end: rc.text.length + r.text.length, length: r.text.length, text: r.text };
}) ||

/* browser not supported */
function() { return null; }

)();

('selectionStart' in e && function() {
var l = e.selectionEnd - e.selectionStart;
return { start: e.selectionStart, end: e.selectionEnd, length: l, text: e.value.substr(e.selectionStart, l) };
}) ||
/* exploder */
(document.selection && function() {

e.focus();

var r = document.selection.createRange();
if (r === null) {
return { start: 0, end: e.value.length, length: 0 }
}

var re = e.createTextRange();
var rc = re.duplicate();
re.moveToBookmark(r.getBookmark());
rc.setEndPoint('EndToStart', re);

return { start: rc.text.length, end: rc.text.length + r.text.length, length: r.text.length, text: r.text };
}) ||
/* browser not supported */
function() { return null; }
)();
},

replaceSelection: function() {

var e = (typeof this.id == 'function') ? this.get(0) : this;
var e = (this.jquery) ? this[0] : this;
var text = arguments[0] || '';

return (
// Support for callback function
if(text instanceof Function) {
var selectedText = fieldSelection.getSelection.call(e);
text = text.call(this, selectedText.text);
}

return (
/* mozilla / dom 3.0 */
('selectionStart' in e && function() {
e.value = e.value.substr(0, e.selectionStart) + text + e.value.substr(e.selectionEnd, e.value.length);
return this;
}) ||

/* exploder */
(document.selection && function() {
e.focus();
document.selection.createRange().text = text;
return this;
}) ||

/* browser not supported */
function() {
e.value += text;
return jQuery(e);
}

)();

('selectionStart' in e && function() {
e.value = e.value.substr(0, e.selectionStart) + text + e.value.substr(e.selectionEnd, e.value.length);
return this;
}) ||
/* exploder */
(document.selection && function() {
e.focus();
document.selection.createRange().text = text;
return this;
}) ||
/* browser not supported */
function() {
e.value += text;
return jQuery(e);
}
)();
}

};

jQuery.each(fieldSelection, function(i) { jQuery.fn[i] = this; });
Expand Down