/*
Search & Replace Plugin
*/
(function () {
var js1 = 'https://cdnjs.cloudflare.com/ajax/libs/rangy/1.3.0/rangy-core.min.js';
var js2 = 'https://cdnjs.cloudflare.com/ajax/libs/rangy/1.3.0/rangy-textrange.min.js'
// _cb.getScript(js1);
// _cb.getScript(js2);
_cb.getScripts([js1,js2]); //Get js1 first, then after loaded, get js2
var html = '
' +
'
' + _cb.out('Search & Replace') +
'
✕
' +
'
' +
'' +
'
' +
'';
_cb.addHtml(html);
var button = '';
_cb.addButton('searchreplace', button, '.searchreplace-button', function () {
var modal = document.querySelector(".is-modal.searchreplace");
modal.className = modal.className + ' active';
var btnClose = modal.querySelector('.is-modal-close');
btnClose.addEventListener('click', function(e){
_cb.hideModal(modal);
});
var scriptPath = _cb.getScriptPath();
modal.querySelector('iframe').src = scriptPath + 'plugins/searchreplace/searchreplace.html';
// var wraper = _cb.getScope();
// $wraper.focusEnd();
});
})();
// https://stackoverflow.com/questions/32192664/how-to-select-a-given-string-repeatedly-within-the-text-of-a-contenteditable-ele
function findOne(target, caseSensitive, within, startNode, startPos) {
if (rangy.supported) {
var range = rangy.createRange();
var searchScopeRange = rangy.createRange();
searchScopeRange.selectNodeContents(within);
if (startNode != null && startPos != null) {
searchScopeRange.setStart(startNode, startPos);
}
var options = {
caseSensitive: caseSensitive,
wholeWordsOnly: true,
withinRange: searchScopeRange
};
if (target !== "") {
range.findText(target, options);
selectRange(range.startContainer, range.endContainer, range.startOffset, range.endOffset);
var text = getSelected(parent);
if (text != '') {
return true;
} else {
return false;
}
}
}
function selectRange(startNode, endNode, startPos, endPos) {
var range = document.createRange()
range.setStart(startNode, startPos);
range.setEnd(endNode, endPos);
var sel = window.getSelection();
sel.removeAllRanges();
sel.addRange(range);
}
function getSelected(window) {
if (window.getSelection) { return window.getSelection(); }
else if (document.getSelection) { return document.getSelection(); }
else {
var selection = document.selection && document.selection.createRange();
if (selection.text) { return selection.text; }
return false;
}
return false;
}
}
// https://stackoverflow.com/questions/1181700/set-cursor-position-on-contenteditable-div/3323835
// $.fn.focusEnd = function () {
// $(this).focus();
// var tmp = $('').appendTo($(this)),
// node = tmp.get(0),
// range = null,
// sel = null;
// if (document.selection) {
// range = document.body.createTextRange();
// range.moveToElementText(node);
// range.select();
// } else if (window.getSelection) {
// range = document.createRange();
// range.selectNode(node);
// sel = window.getSelection();
// sel.removeAllRanges();
// sel.addRange(range);
// }
// tmp.remove();
// return this;
// }