????JFIF??x?x????'
| Server IP : 104.21.30.238 / Your IP : 216.73.216.113 Web Server : LiteSpeed System : Linux premium151.web-hosting.com 4.18.0-553.44.1.lve.el8.x86_64 #1 SMP Thu Mar 13 14:29:12 UTC 2025 x86_64 User : tempvsty ( 647) PHP Version : 8.0.30 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /././proc/self/cwd/wp-content/plugins/motopress-content-editor/jquery/dom/selection/ |
Upload File : |
steal('jquery','jquery/dom/range').then(function($){
var convertType = function(type){
return type.replace(/([a-z])([a-z]+)/gi, function(all,first, next){
return first+next.toLowerCase()
}).replace(/_/g,"");
},
reverse = function(type){
return type.replace(/^([a-z]+)_TO_([a-z]+)/i, function(all, first, last){
return last+"_TO_"+first;
});
},
getWindow = function( element ) {
return element ? element.ownerDocument.defaultView || element.ownerDocument.parentWindow : window
},
// A helper that uses range to abstract out getting the current start and endPos.
getElementsSelection = function(el, win){
var current = $.Range.current(el).clone(),
entireElement = $.Range(el).select(el);
if(!current.overlaps(entireElement)){
return null;
}
// we need to check if it starts before our element ...
if(current.compare("START_TO_START", entireElement) < 1){
startPos = 0;
// we should move current ...
current.move("START_TO_START",entireElement);
}else{
fromElementToCurrent =entireElement.clone();
fromElementToCurrent.move("END_TO_START", current);
startPos = fromElementToCurrent.toString().length
}
// now we need to make sure current isn't to the right of us ...
if(current.compare("END_TO_END", entireElement) >= 0){
endPos = entireElement.toString().length
}else{
endPos = startPos+current.toString().length
}
return {
start: startPos,
end : endPos
};
},
getSelection = function(el){
// use selectionStart if we can.
var win = getWindow(el);
if (el.selectionStart !== undefined) {
if(document.activeElement
&& document.activeElement != el
&& el.selectionStart == el.selectionEnd
&& el.selectionStart == 0){
return {start: el.value.length, end: el.value.length};
}
return {start: el.selectionStart, end: el.selectionEnd}
} else if(win.getSelection){
return getElementsSelection(el, win)
} else{
try {
//try 2 different methods that work differently
// one should only work for input elements, but sometimes doesn't
// I don't know why this is, or what to detect
if (el.nodeName.toLowerCase() == 'input') {
var real = getWindow(el).document.selection.createRange(), r = el.createTextRange();
r.setEndPoint("EndToStart", real);
var start = r.text.length
return {
start: start,
end: start + real.text.length
}
}
else {
var res = getElementsSelection(el,win)
if(!res){
return res;
}
// we have to clean up for ie's textareas
var current = $.Range.current().clone(),
r2 = current.clone().collapse().range,
r3 = current.clone().collapse(false).range;
r2.moveStart('character', -1)
r3.moveStart('character', -1)
// if we aren't at the start, but previous is empty, we are at start of newline
if (res.startPos != 0 && r2.text == "") {
res.startPos += 2;
}
// do a similar thing for the end of the textarea
if (res.endPos != 0 && r3.text == "") {
res.endPos += 2;
}
return res
}
}catch(e){
return {start: el.value.length, end: el.value.length};
}
}
},
select = function( el, start, end ) {
var win = getWindow(el)
if(el.setSelectionRange){
if(end === undefined){
el.focus();
el.setSelectionRange(start, start);
} else {
el.select();
el.selectionStart = start;
el.selectionEnd = end;
}
} else if (el.createTextRange) {
//el.focus();
var r = el.createTextRange();
r.moveStart('character', start);
end = end || start;
r.moveEnd('character', end - el.value.length);
r.select();
} else if(win.getSelection){
var doc = win.document,
sel = win.getSelection(),
range = doc.createRange(),
ranges = [start, end !== undefined ? end : start];
getCharElement([el],ranges);
range.setStart(ranges[0].el, ranges[0].count);
range.setEnd(ranges[1].el, ranges[1].count);
// removeAllRanges is suprisingly necessary for webkit ... BOOO!
sel.removeAllRanges();
sel.addRange(range);
} else if(win.document.body.createTextRange){ //IE's weirdness
var range = document.body.createTextRange();
range.moveToElementText(el);
range.collapse()
range.moveStart('character', start)
range.moveEnd('character', end !== undefined ? end : start)
range.select();
}
},
/*
* If one of the range values is within start and len, replace the range
* value with the element and its offset.
*/
replaceWithLess = function(start, len, range, el){
if(typeof range[0] === 'number' && range[0] < len){
range[0] = {
el: el,
count: range[0] - start
};
}
if(typeof range[1] === 'number' && range[1] <= len){
range[1] = {
el: el,
count: range[1] - start
};;
}
},
getCharElement = function( elems , range, len ) {
var elem,
start;
len = len || 0;
for ( var i = 0; elems[i]; i++ ) {
elem = elems[i];
// Get the text from text nodes and CDATA nodes
if ( elem.nodeType === 3 || elem.nodeType === 4 ) {
start = len
len += elem.nodeValue.length;
//check if len is now greater than what's in counts
replaceWithLess(start, len, range, elem )
// Traverse everything else, except comment nodes
} else if ( elem.nodeType !== 8 ) {
len = getCharElement( elem.childNodes, range, len );
}
}
return len;
};
/**
* @parent dom
* @tag beta
*
* Gets or sets the current text selection.
*
* ## Getting
*
* Gets the current selection in the context of an element. For example:
*
* $('textarea').selection() // -> { .... }
*
* returns an object with:
*
* - __start__ - The number of characters from the start of the element to the start of the selection.
* - __end__ - The number of characters from the start of the element to the end of the selection.
* - __range__ - A [jQuery.Range $.Range] that represents the current selection.
*
* This lets you get the selected text in a textarea like:
*
* var textarea = $('textarea')
* selection = textarea.selection(),
* selected = textarea.val().substr(selection.start, selection.end);
*
* alert('You selected '+selected+'.');
*
* Selection works with all elements. If you want to get selection information of the document:
*
* $(document.body).selection();
*
* ## Setting
*
* By providing a start and end offset, you can select text within a given element.
*
* $('#rte').selection(30, 40)
*
* ## Demo
*
* This demo shows setting the selection in various elements
*
* @demo jquery/dom/selection/selection.html
*
* @param {Number} [start] Start of the range
* @param {Number} [end] End of the range
* @return {Object|jQuery} returns the selection information or the jQuery collection for
* chaining.
*/
$.fn.selection = function(start, end){
if(start !== undefined){
return this.each(function(){
select(this, start, end)
})
}else{
return getSelection(this[0])
}
};
// for testing
$.fn.selection.getCharElement = getCharElement;
});