Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
/* | |
* Real3D FlipBook [https://real3dflipbook.com] | |
* @author creativeinteractivemedia [https://codecanyon.net/user/creativeinteractivemedia/portfolio] | |
* @version 4.10 | |
* @date 2025-05-15 | |
*/ | |
/*!*************************************************** | |
* mark.js v9.0.0 | |
* https://markjs.io/ | |
* Copyright (c) 2014–2018, Julian Kühnel | |
* Released under the MIT license https://git.io/vwTVl | |
*****************************************************/ | |
(function (global, factory) { | |
typeof exports === 'object' && typeof module !== 'undefined' | |
? (module.exports = factory()) | |
: typeof define === 'function' && define.amd | |
? define(factory) | |
: (global.Mark = factory()); | |
})(this, function () { | |
'use strict'; | |
function _typeof(obj) { | |
if (typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol') { | |
_typeof = function (obj) { | |
return typeof obj; | |
}; | |
} else { | |
_typeof = function (obj) { | |
return obj && typeof Symbol === 'function' && obj.constructor === Symbol && obj !== Symbol.prototype | |
? 'symbol' | |
: typeof obj; | |
}; | |
} | |
return _typeof(obj); | |
} | |
function _classCallCheck(instance, Constructor) { | |
if (!(instance instanceof Constructor)) { | |
throw new TypeError('Cannot call a class as a function'); | |
} | |
} | |
function _defineProperties(target, props) { | |
for (var i = 0; i < props.length; i++) { | |
var descriptor = props[i]; | |
descriptor.enumerable = descriptor.enumerable || false; | |
descriptor.configurable = true; | |
if ('value' in descriptor) descriptor.writable = true; | |
Object.defineProperty(target, descriptor.key, descriptor); | |
} | |
} | |
function _createClass(Constructor, protoProps, staticProps) { | |
if (protoProps) _defineProperties(Constructor.prototype, protoProps); | |
if (staticProps) _defineProperties(Constructor, staticProps); | |
return Constructor; | |
} | |
function _extends() { | |
_extends = | |
Object.assign || | |
function (target) { | |
for (var i = 1; i < arguments.length; i++) { | |
var source = arguments[i]; | |
for (var key in source) { | |
if (Object.prototype.hasOwnProperty.call(source, key)) { | |
target[key] = source[key]; | |
} | |
} | |
} | |
return target; | |
}; | |
return _extends.apply(this, arguments); | |
} | |
var DOMIterator = | |
/*#__PURE__*/ | |
(function () { | |
function DOMIterator(ctx) { | |
var iframes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; | |
var exclude = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : []; | |
var iframesTimeout = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 5000; | |
_classCallCheck(this, DOMIterator); | |
this.ctx = ctx; | |
this.iframes = iframes; | |
this.exclude = exclude; | |
this.iframesTimeout = iframesTimeout; | |
} | |
_createClass( | |
DOMIterator, | |
[ | |
{ | |
key: 'getContexts', | |
value: function getContexts() { | |
var ctx, | |
filteredCtx = []; | |
if (typeof this.ctx === 'undefined' || !this.ctx) { | |
ctx = []; | |
} else if (NodeList.prototype.isPrototypeOf(this.ctx)) { | |
ctx = Array.prototype.slice.call(this.ctx); | |
} else if (Array.isArray(this.ctx)) { | |
ctx = this.ctx; | |
} else if (typeof this.ctx === 'string') { | |
ctx = Array.prototype.slice.call(document.querySelectorAll(this.ctx)); | |
} else { | |
ctx = [this.ctx]; | |
} | |
ctx.forEach(function (ctx) { | |
var isDescendant = | |
filteredCtx.filter(function (contexts) { | |
return contexts.contains(ctx); | |
}).length > 0; | |
if (filteredCtx.indexOf(ctx) === -1 && !isDescendant) { | |
filteredCtx.push(ctx); | |
} | |
}); | |
return filteredCtx; | |
}, | |
}, | |
{ | |
key: 'getIframeContents', | |
value: function getIframeContents(ifr, successFn) { | |
var errorFn = | |
arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function () {}; | |
var doc; | |
try { | |
var ifrWin = ifr.contentWindow; | |
doc = ifrWin.document; | |
if (!ifrWin || !doc) { | |
throw new Error('iframe inaccessible'); | |
} | |
} catch (e) { | |
errorFn(); | |
} | |
if (doc) { | |
successFn(doc); | |
} | |
}, | |
}, | |
{ | |
key: 'isIframeBlank', | |
value: function isIframeBlank(ifr) { | |
var bl = 'about:blank', | |
src = ifr.getAttribute('src').trim(), | |
href = ifr.contentWindow.location.href; | |
return href === bl && src !== bl && src; | |
}, | |
}, | |
{ | |
key: 'observeIframeLoad', | |
value: function observeIframeLoad(ifr, successFn, errorFn) { | |
var _this = this; | |
var called = false, | |
tout = null; | |
var listener = function listener() { | |
if (called) { | |
return; | |
} | |
called = true; | |
clearTimeout(tout); | |
try { | |
if (!_this.isIframeBlank(ifr)) { | |
ifr.removeEventListener('load', listener); | |
_this.getIframeContents(ifr, successFn, errorFn); | |
} | |
} catch (e) { | |
errorFn(); | |
} | |
}; | |
ifr.addEventListener('load', listener); | |
tout = setTimeout(listener, this.iframesTimeout); | |
}, | |
}, | |
{ | |
key: 'onIframeReady', | |
value: function onIframeReady(ifr, successFn, errorFn) { | |
try { | |
if (ifr.contentWindow.document.readyState === 'complete') { | |
if (this.isIframeBlank(ifr)) { | |
this.observeIframeLoad(ifr, successFn, errorFn); | |
} else { | |
this.getIframeContents(ifr, successFn, errorFn); | |
} | |
} else { | |
this.observeIframeLoad(ifr, successFn, errorFn); | |
} | |
} catch (e) { | |
errorFn(); | |
} | |
}, | |
}, | |
{ | |
key: 'waitForIframes', | |
value: function waitForIframes(ctx, done) { | |
var _this2 = this; | |
var eachCalled = 0; | |
this.forEachIframe( | |
ctx, | |
function () { | |
return true; | |
}, | |
function (ifr) { | |
eachCalled++; | |
_this2.waitForIframes(ifr.querySelector('html'), function () { | |
if (!--eachCalled) { | |
done(); | |
} | |
}); | |
}, | |
function (handled) { | |
if (!handled) { | |
done(); | |
} | |
} | |
); | |
}, | |
}, | |
{ | |
key: 'forEachIframe', | |
value: function forEachIframe(ctx, filter, each) { | |
var _this3 = this; | |
var end = | |
arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : function () {}; | |
var ifr = ctx.querySelectorAll('iframe'), | |
open = ifr.length, | |
handled = 0; | |
ifr = Array.prototype.slice.call(ifr); | |
var checkEnd = function checkEnd() { | |
if (--open <= 0) { | |
end(handled); | |
} | |
}; | |
if (!open) { | |
checkEnd(); | |
} | |
ifr.forEach(function (ifr) { | |
if (DOMIterator.matches(ifr, _this3.exclude)) { | |
checkEnd(); | |
} else { | |
_this3.onIframeReady( | |
ifr, | |
function (con) { | |
if (filter(ifr)) { | |
handled++; | |
each(con); | |
} | |
checkEnd(); | |
}, | |
checkEnd | |
); | |
} | |
}); | |
}, | |
}, | |
{ | |
key: 'createIterator', | |
value: function createIterator(ctx, whatToShow, filter) { | |
return document.createNodeIterator(ctx, whatToShow, filter, false); | |
}, | |
}, | |
{ | |
key: 'createInstanceOnIframe', | |
value: function createInstanceOnIframe(contents) { | |
return new DOMIterator(contents.querySelector('html'), this.iframes); | |
}, | |
}, | |
{ | |
key: 'compareNodeIframe', | |
value: function compareNodeIframe(node, prevNode, ifr) { | |
var compCurr = node.compareDocumentPosition(ifr), | |
prev = Node.DOCUMENT_POSITION_PRECEDING; | |
if (compCurr & prev) { | |
if (prevNode !== null) { | |
var compPrev = prevNode.compareDocumentPosition(ifr), | |
after = Node.DOCUMENT_POSITION_FOLLOWING; | |
if (compPrev & after) { | |
return true; | |
} | |
} else { | |
return true; | |
} | |
} | |
return false; | |
}, | |
}, | |
{ | |
key: 'getIteratorNode', | |
value: function getIteratorNode(itr) { | |
var prevNode = itr.previousNode(); | |
var node; | |
if (prevNode === null) { | |
node = itr.nextNode(); | |
} else { | |
node = itr.nextNode() && itr.nextNode(); | |
} | |
return { | |
prevNode: prevNode, | |
node: node, | |
}; | |
}, | |
}, | |
{ | |
key: 'checkIframeFilter', | |
value: function checkIframeFilter(node, prevNode, currIfr, ifr) { | |
var key = false, | |
handled = false; | |
ifr.forEach(function (ifrDict, i) { | |
if (ifrDict.val === currIfr) { | |
key = i; | |
handled = ifrDict.handled; | |
} | |
}); | |
if (this.compareNodeIframe(node, prevNode, currIfr)) { | |
if (key === false && !handled) { | |
ifr.push({ | |
val: currIfr, | |
handled: true, | |
}); | |
} else if (key !== false && !handled) { | |
ifr[key].handled = true; | |
} | |
return true; | |
} | |
if (key === false) { | |
ifr.push({ | |
val: currIfr, | |
handled: false, | |
}); | |
} | |
return false; | |
}, | |
}, | |
{ | |
key: 'handleOpenIframes', | |
value: function handleOpenIframes(ifr, whatToShow, eCb, fCb) { | |
var _this4 = this; | |
ifr.forEach(function (ifrDict) { | |
if (!ifrDict.handled) { | |
_this4.getIframeContents(ifrDict.val, function (con) { | |
_this4.createInstanceOnIframe(con).forEachNode(whatToShow, eCb, fCb); | |
}); | |
} | |
}); | |
}, | |
}, | |
{ | |
key: 'iterateThroughNodes', | |
value: function iterateThroughNodes(whatToShow, ctx, eachCb, filterCb, doneCb) { | |
var _this5 = this; | |
var itr = this.createIterator(ctx, whatToShow, filterCb); | |
var ifr = [], | |
elements = [], | |
node, | |
prevNode, | |
retrieveNodes = function retrieveNodes() { | |
var _this5$getIteratorNod = _this5.getIteratorNode(itr); | |
prevNode = _this5$getIteratorNod.prevNode; | |
node = _this5$getIteratorNod.node; | |
return node; | |
}; | |
while (retrieveNodes()) { | |
if (this.iframes) { | |
this.forEachIframe( | |
ctx, | |
function (currIfr) { | |
return _this5.checkIframeFilter(node, prevNode, currIfr, ifr); | |
}, | |
function (con) { | |
_this5.createInstanceOnIframe(con).forEachNode( | |
whatToShow, | |
function (ifrNode) { | |
return elements.push(ifrNode); | |
}, | |
filterCb | |
); | |
} | |
); | |
} | |
elements.push(node); | |
} | |
elements.forEach(function (node) { | |
eachCb(node); | |
}); | |
if (this.iframes) { | |
this.handleOpenIframes(ifr, whatToShow, eachCb, filterCb); | |
} | |
doneCb(); | |
}, | |
}, | |
{ | |
key: 'forEachNode', | |
value: function forEachNode(whatToShow, each, filter) { | |
var _this6 = this; | |
var done = | |
arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : function () {}; | |
var contexts = this.getContexts(); | |
var open = contexts.length; | |
if (!open) { | |
done(); | |
} | |
contexts.forEach(function (ctx) { | |
var ready = function ready() { | |
_this6.iterateThroughNodes(whatToShow, ctx, each, filter, function () { | |
if (--open <= 0) { | |
done(); | |
} | |
}); | |
}; | |
if (_this6.iframes) { | |
_this6.waitForIframes(ctx, ready); | |
} else { | |
ready(); | |
} | |
}); | |
}, | |
}, | |
], | |
[ | |
{ | |
key: 'matches', | |
value: function matches(element, selector) { | |
var selectors = typeof selector === 'string' ? [selector] : selector, | |
fn = | |
element.matches || | |
element.matchesSelector || | |
element.msMatchesSelector || | |
element.mozMatchesSelector || | |
element.oMatchesSelector || | |
element.webkitMatchesSelector; | |
if (fn) { | |
var match = false; | |
selectors.every(function (sel) { | |
if (fn.call(element, sel)) { | |
match = true; | |
return false; | |
} | |
return true; | |
}); | |
return match; | |
} else { | |
return false; | |
} | |
}, | |
}, | |
] | |
); | |
return DOMIterator; | |
})(); | |
var RegExpCreator = | |
/*#__PURE__*/ | |
(function () { | |
function RegExpCreator(options) { | |
_classCallCheck(this, RegExpCreator); | |
this.opt = _extends( | |
{}, | |
{ | |
diacritics: true, | |
synonyms: {}, | |
accuracy: 'partially', | |
caseSensitive: false, | |
ignoreJoiners: false, | |
ignorePunctuation: [], | |
wildcards: 'disabled', | |
}, | |
options | |
); | |
} | |
_createClass(RegExpCreator, [ | |
{ | |
key: 'create', | |
value: function create(str) { | |
if (this.opt.wildcards !== 'disabled') { | |
str = this.setupWildcardsRegExp(str); | |
} | |
str = this.escapeStr(str); | |
if (Object.keys(this.opt.synonyms).length) { | |
str = this.createSynonymsRegExp(str); | |
} | |
if (this.opt.ignoreJoiners || this.opt.ignorePunctuation.length) { | |
str = this.setupIgnoreJoinersRegExp(str); | |
} | |
if (this.opt.diacritics) { | |
str = this.createDiacriticsRegExp(str); | |
} | |
str = this.createMergedBlanksRegExp(str); | |
if (this.opt.ignoreJoiners || this.opt.ignorePunctuation.length) { | |
str = this.createJoinersRegExp(str); | |
} | |
if (this.opt.wildcards !== 'disabled') { | |
str = this.createWildcardsRegExp(str); | |
} | |
str = this.createAccuracyRegExp(str); | |
return new RegExp(str, 'gm'.concat(this.opt.caseSensitive ? '' : 'i')); | |
}, | |
}, | |
{ | |
key: 'sortByLength', | |
value: function sortByLength(arry) { | |
return arry.sort(function (a, b) { | |
return a.length === b.length ? (a > b ? 1 : -1) : b.length - a.length; | |
}); | |
}, | |
}, | |
{ | |
key: 'escapeStr', | |
value: function escapeStr(str) { | |
return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, '\\$&'); | |
}, | |
}, | |
{ | |
key: 'createSynonymsRegExp', | |
value: function createSynonymsRegExp(str) { | |
var _this = this; | |
var syn = this.opt.synonyms, | |
sens = this.opt.caseSensitive ? '' : 'i', | |
joinerPlaceholder = this.opt.ignoreJoiners || this.opt.ignorePunctuation.length ? '\0' : ''; | |
for (var index in syn) { | |
if (syn.hasOwnProperty(index)) { | |
var keys = Array.isArray(syn[index]) ? syn[index] : [syn[index]]; | |
keys.unshift(index); | |
keys = this.sortByLength(keys) | |
.map(function (key) { | |
if (_this.opt.wildcards !== 'disabled') { | |
key = _this.setupWildcardsRegExp(key); | |
} | |
key = _this.escapeStr(key); | |
return key; | |
}) | |
.filter(function (k) { | |
return k !== ''; | |
}); | |
if (keys.length > 1) { | |
str = str.replace( | |
new RegExp( | |
'('.concat( | |
keys | |
.map(function (k) { | |
return _this.escapeStr(k); | |
}) | |
.join('|'), | |
')' | |
), | |
'gm'.concat(sens) | |
), | |
joinerPlaceholder + | |
'('.concat( | |
keys | |
.map(function (k) { | |
return _this.processSynonyms(k); | |
}) | |
.join('|'), | |
')' | |
) + | |
joinerPlaceholder | |
); | |
} | |
} | |
} | |
return str; | |
}, | |
}, | |
{ | |
key: 'processSynonyms', | |
value: function processSynonyms(str) { | |
if (this.opt.ignoreJoiners || this.opt.ignorePunctuation.length) { | |
str = this.setupIgnoreJoinersRegExp(str); | |
} | |
return str; | |
}, | |
}, | |
{ | |
key: 'setupWildcardsRegExp', | |
value: function setupWildcardsRegExp(str) { | |
str = str.replace(/(?:\\)*\?/g, function (val) { | |
return val.charAt(0) === '\\' ? '?' : '\x01'; | |
}); | |
return str.replace(/(?:\\)*\*/g, function (val) { | |
return val.charAt(0) === '\\' ? '*' : '\x02'; | |
}); | |
}, | |
}, | |
{ | |
key: 'createWildcardsRegExp', | |
value: function createWildcardsRegExp(str) { | |
var spaces = this.opt.wildcards === 'withSpaces'; | |
return str | |
.replace(/\u0001/g, spaces ? '[\\S\\s]?' : '\\S?') | |
.replace(/\u0002/g, spaces ? '[\\S\\s]*?' : '\\S*'); | |
}, | |
}, | |
{ | |
key: 'setupIgnoreJoinersRegExp', | |
value: function setupIgnoreJoinersRegExp(str) { | |
return str.replace(/[^(|)\\]/g, function (val, indx, original) { | |
var nextChar = original.charAt(indx + 1); | |
if (/[(|)\\]/.test(nextChar) || nextChar === '') { | |
return val; | |
} else { | |
return val + '\0'; | |
} | |
}); | |
}, | |
}, | |
{ | |
key: 'createJoinersRegExp', | |
value: function createJoinersRegExp(str) { | |
var joiner = []; | |
var ignorePunctuation = this.opt.ignorePunctuation; | |
if (Array.isArray(ignorePunctuation) && ignorePunctuation.length) { | |
joiner.push(this.escapeStr(ignorePunctuation.join(''))); | |
} | |
if (this.opt.ignoreJoiners) { | |
joiner.push('\\u00ad\\u200b\\u200c\\u200d'); | |
} | |
return joiner.length ? str.split(/\u0000+/).join('['.concat(joiner.join(''), ']*')) : str; | |
}, | |
}, | |
{ | |
key: 'createDiacriticsRegExp', | |
value: function createDiacriticsRegExp(str) { | |
var sens = this.opt.caseSensitive ? '' : 'i', | |
dct = this.opt.caseSensitive | |
? [ | |
'aàáảãạăằắẳẵặâầấẩẫậäåāą', | |
'AÀÁẢÃẠĂẰẮẲẴẶÂẦẤẨẪẬÄÅĀĄ', | |
'cçćč', | |
'CÇĆČ', | |
'dđď', | |
'DĐĎ', | |
'eèéẻẽẹêềếểễệëěēę', | |
'EÈÉẺẼẸÊỀẾỂỄỆËĚĒĘ', | |
'iìíỉĩịîïī', | |
'IÌÍỈĨỊÎÏĪ', | |
'lł', | |
'LŁ', | |
'nñňń', | |
'NÑŇŃ', | |
'oòóỏõọôồốổỗộơởỡớờợöøō', | |
'OÒÓỎÕỌÔỒỐỔỖỘƠỞỠỚỜỢÖØŌ', | |
'rř', | |
'RŘ', | |
'sšśșş', | |
'SŠŚȘŞ', | |
'tťțţ', | |
'TŤȚŢ', | |
'uùúủũụưừứửữựûüůū', | |
'UÙÚỦŨỤƯỪỨỬỮỰÛÜŮŪ', | |
'yýỳỷỹỵÿ', | |
'YÝỲỶỸỴŸ', | |
'zžżź', | |
'ZŽŻŹ', | |
] | |
: [ | |
'aàáảãạăằắẳẵặâầấẩẫậäåāąAÀÁẢÃẠĂẰẮẲẴẶÂẦẤẨẪẬÄÅĀĄ', | |
'cçćčCÇĆČ', | |
'dđďDĐĎ', | |
'eèéẻẽẹêềếểễệëěēęEÈÉẺẼẸÊỀẾỂỄỆËĚĒĘ', | |
'iìíỉĩịîïīIÌÍỈĨỊÎÏĪ', | |
'lłLŁ', | |
'nñňńNÑŇŃ', | |
'oòóỏõọôồốổỗộơởỡớờợöøōOÒÓỎÕỌÔỒỐỔỖỘƠỞỠỚỜỢÖØŌ', | |
'rřRŘ', | |
'sšśșşSŠŚȘŞ', | |
'tťțţTŤȚŢ', | |
'uùúủũụưừứửữựûüůūUÙÚỦŨỤƯỪỨỬỮỰÛÜŮŪ', | |
'yýỳỷỹỵÿYÝỲỶỸỴŸ', | |
'zžżźZŽŻŹ', | |
]; | |
var handled = []; | |
str.split('').forEach(function (ch) { | |
dct.every(function (dct) { | |
if (dct.indexOf(ch) !== -1) { | |
if (handled.indexOf(dct) > -1) { | |
return false; | |
} | |
str = str.replace( | |
new RegExp('['.concat(dct, ']'), 'gm'.concat(sens)), | |
'['.concat(dct, ']') | |
); | |
handled.push(dct); | |
} | |
return true; | |
}); | |
}); | |
return str; | |
}, | |
}, | |
{ | |
key: 'createMergedBlanksRegExp', | |
value: function createMergedBlanksRegExp(str) { | |
return str.replace(/[\s]+/gim, '[\\s]+'); | |
}, | |
}, | |
{ | |
key: 'createAccuracyRegExp', | |
value: function createAccuracyRegExp(str) { | |
var _this2 = this; | |
var chars = '!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~¡¿'; | |
var acc = this.opt.accuracy, | |
val = typeof acc === 'string' ? acc : acc.value, | |
ls = typeof acc === 'string' ? [] : acc.limiters, | |
lsJoin = ''; | |
ls.forEach(function (limiter) { | |
lsJoin += '|'.concat(_this2.escapeStr(limiter)); | |
}); | |
switch (val) { | |
case 'partially': | |
default: | |
return '()('.concat(str, ')'); | |
case 'complementary': | |
lsJoin = '\\s' + (lsJoin ? lsJoin : this.escapeStr(chars)); | |
return '()([^'.concat(lsJoin, ']*').concat(str, '[^').concat(lsJoin, ']*)'); | |
case 'exactly': | |
return '(^|\\s'.concat(lsJoin, ')(').concat(str, ')(?=$|\\s').concat(lsJoin, ')'); | |
} | |
}, | |
}, | |
]); | |
return RegExpCreator; | |
})(); | |
var Mark = | |
/*#__PURE__*/ | |
(function () { | |
function Mark(ctx) { | |
_classCallCheck(this, Mark); | |
this.ctx = ctx; | |
this.ie = false; | |
var ua = window.navigator.userAgent; | |
if (ua.indexOf('MSIE') > -1 || ua.indexOf('Trident') > -1) { | |
this.ie = true; | |
} | |
} | |
_createClass(Mark, [ | |
{ | |
key: 'log', | |
value: function log(msg) { | |
var level = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'debug'; | |
var log = this.opt.log; | |
if (!this.opt.debug) { | |
return; | |
} | |
if (_typeof(log) === 'object' && typeof log[level] === 'function') { | |
log[level]('mark.js: '.concat(msg)); | |
} | |
}, | |
}, | |
{ | |
key: 'getSeparatedKeywords', | |
value: function getSeparatedKeywords(sv) { | |
var _this = this; | |
var stack = []; | |
sv.forEach(function (kw) { | |
if (!_this.opt.separateWordSearch) { | |
if (kw.trim() && stack.indexOf(kw) === -1) { | |
stack.push(kw); | |
} | |
} else { | |
kw.split(' ').forEach(function (kwSplitted) { | |
if (kwSplitted.trim() && stack.indexOf(kwSplitted) === -1) { | |
stack.push(kwSplitted); | |
} | |
}); | |
} | |
}); | |
return { | |
keywords: stack.sort(function (a, b) { | |
return b.length - a.length; | |
}), | |
length: stack.length, | |
}; | |
}, | |
}, | |
{ | |
key: 'isNumeric', | |
value: function isNumeric(value) { | |
return Number(parseFloat(value)) == value; | |
}, | |
}, | |
{ | |
key: 'checkRanges', | |
value: function checkRanges(array) { | |
var _this2 = this; | |
if (!Array.isArray(array) || Object.prototype.toString.call(array[0]) !== '[object Object]') { | |
this.log('markRanges() will only accept an array of objects'); | |
this.opt.noMatch(array); | |
return []; | |
} | |
var stack = []; | |
var last = 0; | |
array | |
.sort(function (a, b) { | |
return a.start - b.start; | |
}) | |
.forEach(function (item) { | |
var _this2$callNoMatchOnI = _this2.callNoMatchOnInvalidRanges(item, last), | |
start = _this2$callNoMatchOnI.start, | |
end = _this2$callNoMatchOnI.end, | |
valid = _this2$callNoMatchOnI.valid; | |
if (valid) { | |
item.start = start; | |
item.length = end - start; | |
stack.push(item); | |
last = end; | |
} | |
}); | |
return stack; | |
}, | |
}, | |
{ | |
key: 'callNoMatchOnInvalidRanges', | |
value: function callNoMatchOnInvalidRanges(range, last) { | |
var start, | |
end, | |
valid = false; | |
if (range && typeof range.start !== 'undefined') { | |
start = parseInt(range.start, 10); | |
end = start + parseInt(range.length, 10); | |
if ( | |
this.isNumeric(range.start) && | |
this.isNumeric(range.length) && | |
end - last > 0 && | |
end - start > 0 | |
) { | |
valid = true; | |
} else { | |
this.log('Ignoring invalid or overlapping range: ' + ''.concat(JSON.stringify(range))); | |
this.opt.noMatch(range); | |
} | |
} else { | |
this.log('Ignoring invalid range: '.concat(JSON.stringify(range))); | |
this.opt.noMatch(range); | |
} | |
return { | |
start: start, | |
end: end, | |
valid: valid, | |
}; | |
}, | |
}, | |
{ | |
key: 'checkWhitespaceRanges', | |
value: function checkWhitespaceRanges(range, originalLength, string) { | |
var end, | |
valid = true, | |
max = string.length, | |
offset = originalLength - max, | |
start = parseInt(range.start, 10) - offset; | |
start = start > max ? max : start; | |
end = start + parseInt(range.length, 10); | |
if (end > max) { | |
end = max; | |
this.log('End range automatically set to the max value of '.concat(max)); | |
} | |
if (start < 0 || end - start < 0 || start > max || end > max) { | |
valid = false; | |
this.log('Invalid range: '.concat(JSON.stringify(range))); | |
this.opt.noMatch(range); | |
} else if (string.substring(start, end).replace(/\s+/g, '') === '') { | |
valid = false; | |
this.log('Skipping whitespace only range: ' + JSON.stringify(range)); | |
this.opt.noMatch(range); | |
} | |
return { | |
start: start, | |
end: end, | |
valid: valid, | |
}; | |
}, | |
}, | |
{ | |
key: 'getTextNodes', | |
value: function getTextNodes(cb) { | |
var _this3 = this; | |
var val = '', | |
nodes = []; | |
this.iterator.forEachNode( | |
NodeFilter.SHOW_TEXT, | |
function (node) { | |
nodes.push({ | |
start: val.length, | |
end: (val += node.textContent).length, | |
node: node, | |
}); | |
}, | |
function (node) { | |
if (_this3.matchesExclude(node.parentNode)) { | |
return NodeFilter.FILTER_REJECT; | |
} else { | |
return NodeFilter.FILTER_ACCEPT; | |
} | |
}, | |
function () { | |
cb({ | |
value: val, | |
nodes: nodes, | |
}); | |
} | |
); | |
}, | |
}, | |
{ | |
key: 'matchesExclude', | |
value: function matchesExclude(el) { | |
return DOMIterator.matches( | |
el, | |
this.opt.exclude.concat(['script', 'style', 'title', 'head', 'html']) | |
); | |
}, | |
}, | |
{ | |
key: 'wrapRangeInTextNode', | |
value: function wrapRangeInTextNode(node, start, end) { | |
var hEl = !this.opt.element ? 'mark' : this.opt.element, | |
startNode = node.splitText(start), | |
ret = startNode.splitText(end - start); | |
var repl = document.createElement(hEl); | |
repl.setAttribute('data-markjs', 'true'); | |
if (this.opt.className) { | |
repl.setAttribute('class', this.opt.className); | |
} | |
repl.textContent = startNode.textContent; | |
startNode.parentNode.replaceChild(repl, startNode); | |
return ret; | |
}, | |
}, | |
{ | |
key: 'wrapRangeInMappedTextNode', | |
value: function wrapRangeInMappedTextNode(dict, start, end, filterCb, eachCb) { | |
var _this4 = this; | |
dict.nodes.every(function (n, i) { | |
var sibl = dict.nodes[i + 1]; | |
if (typeof sibl === 'undefined' || sibl.start > start) { | |
if (!filterCb(n.node)) { | |
return false; | |
} | |
var s = start - n.start, | |
e = (end > n.end ? n.end : end) - n.start, | |
startStr = dict.value.substr(0, n.start), | |
endStr = dict.value.substr(e + n.start); | |
n.node = _this4.wrapRangeInTextNode(n.node, s, e); | |
dict.value = startStr + endStr; | |
dict.nodes.forEach(function (k, j) { | |
if (j >= i) { | |
if (dict.nodes[j].start > 0 && j !== i) { | |
dict.nodes[j].start -= e; | |
} | |
dict.nodes[j].end -= e; | |
} | |
}); | |
end -= e; | |
eachCb(n.node.previousSibling, n.start); | |
if (end > n.end) { | |
start = n.end; | |
} else { | |
return false; | |
} | |
} | |
return true; | |
}); | |
}, | |
}, | |
{ | |
key: 'wrapGroups', | |
value: function wrapGroups(node, pos, len, eachCb) { | |
node = this.wrapRangeInTextNode(node, pos, pos + len); | |
eachCb(node.previousSibling); | |
return node; | |
}, | |
}, | |
{ | |
key: 'separateGroups', | |
value: function separateGroups(node, match, matchIdx, filterCb, eachCb) { | |
var matchLen = match.length; | |
for (var i = 1; i < matchLen; i++) { | |
var pos = node.textContent.indexOf(match[i]); | |
if (match[i] && pos > -1 && filterCb(match[i], node)) { | |
node = this.wrapGroups(node, pos, match[i].length, eachCb); | |
} | |
} | |
return node; | |
}, | |
}, | |
{ | |
key: 'wrapMatches', | |
value: function wrapMatches(regex, ignoreGroups, filterCb, eachCb, endCb) { | |
var _this5 = this; | |
var matchIdx = ignoreGroups === 0 ? 0 : ignoreGroups + 1; | |
this.getTextNodes(function (dict) { | |
dict.nodes.forEach(function (node) { | |
node = node.node; | |
var match; | |
while ((match = regex.exec(node.textContent)) !== null && match[matchIdx] !== '') { | |
if (_this5.opt.separateGroups) { | |
node = _this5.separateGroups(node, match, matchIdx, filterCb, eachCb); | |
} else { | |
if (!filterCb(match[matchIdx], node)) { | |
continue; | |
} | |
var pos = match.index; | |
if (matchIdx !== 0) { | |
for (var i = 1; i < matchIdx; i++) { | |
pos += match[i].length; | |
} | |
} | |
node = _this5.wrapGroups(node, pos, match[matchIdx].length, eachCb); | |
} | |
regex.lastIndex = 0; | |
} | |
}); | |
endCb(); | |
}); | |
}, | |
}, | |
{ | |
key: 'wrapMatchesAcrossElements', | |
value: function wrapMatchesAcrossElements(regex, ignoreGroups, filterCb, eachCb, endCb) { | |
var _this6 = this; | |
var matchIdx = ignoreGroups === 0 ? 0 : ignoreGroups + 1; | |
this.getTextNodes(function (dict) { | |
var match; | |
while ((match = regex.exec(dict.value)) !== null && match[matchIdx] !== '') { | |
var start = match.index; | |
if (matchIdx !== 0) { | |
for (var i = 1; i < matchIdx; i++) { | |
start += match[i].length; | |
} | |
} | |
var end = start + match[matchIdx].length; | |
_this6.wrapRangeInMappedTextNode( | |
dict, | |
start, | |
end, | |
function (node) { | |
return filterCb(match[matchIdx], node); | |
}, | |
function (node, lastIndex) { | |
regex.lastIndex = lastIndex; | |
eachCb(node); | |
} | |
); | |
} | |
endCb(); | |
}); | |
}, | |
}, | |
{ | |
key: 'wrapRangeFromIndex', | |
value: function wrapRangeFromIndex(ranges, filterCb, eachCb, endCb) { | |
var _this7 = this; | |
this.getTextNodes(function (dict) { | |
var originalLength = dict.value.length; | |
ranges.forEach(function (range, counter) { | |
var _this7$checkWhitespac = _this7.checkWhitespaceRanges( | |
range, | |
originalLength, | |
dict.value | |
), | |
start = _this7$checkWhitespac.start, | |
end = _this7$checkWhitespac.end, | |
valid = _this7$checkWhitespac.valid; | |
if (valid) { | |
_this7.wrapRangeInMappedTextNode( | |
dict, | |
start, | |
end, | |
function (node) { | |
return filterCb(node, range, dict.value.substring(start, end), counter); | |
}, | |
function (node) { | |
eachCb(node, range); | |
} | |
); | |
} | |
}); | |
endCb(); | |
}); | |
}, | |
}, | |
{ | |
key: 'unwrapMatches', | |
value: function unwrapMatches(node) { | |
var parent = node.parentNode; | |
var docFrag = document.createDocumentFragment(); | |
while (node.firstChild) { | |
docFrag.appendChild(node.removeChild(node.firstChild)); | |
} | |
parent.replaceChild(docFrag, node); | |
if (!this.ie) { | |
parent.normalize(); | |
} else { | |
this.normalizeTextNode(parent); | |
} | |
}, | |
}, | |
{ | |
key: 'normalizeTextNode', | |
value: function normalizeTextNode(node) { | |
if (!node) { | |
return; | |
} | |
if (node.nodeType === 3) { | |
while (node.nextSibling && node.nextSibling.nodeType === 3) { | |
node.nodeValue += node.nextSibling.nodeValue; | |
node.parentNode.removeChild(node.nextSibling); | |
} | |
} else { | |
this.normalizeTextNode(node.firstChild); | |
} | |
this.normalizeTextNode(node.nextSibling); | |
}, | |
}, | |
{ | |
key: 'markRegExp', | |
value: function markRegExp(regexp, opt) { | |
var _this8 = this; | |
this.opt = opt; | |
this.log('Searching with expression "'.concat(regexp, '"')); | |
var totalMatches = 0, | |
fn = 'wrapMatches'; | |
var eachCb = function eachCb(element) { | |
totalMatches++; | |
_this8.opt.each(element); | |
}; | |
if (this.opt.acrossElements) { | |
fn = 'wrapMatchesAcrossElements'; | |
} | |
this[fn]( | |
regexp, | |
this.opt.ignoreGroups, | |
function (match, node) { | |
return _this8.opt.filter(node, match, totalMatches); | |
}, | |
eachCb, | |
function () { | |
if (totalMatches === 0) { | |
_this8.opt.noMatch(regexp); | |
} | |
_this8.opt.done(totalMatches); | |
} | |
); | |
}, | |
}, | |
{ | |
key: 'mark', | |
value: function mark(sv, opt) { | |
var _this9 = this; | |
this.opt = opt; | |
var totalMatches = 0, | |
fn = 'wrapMatches'; | |
var _this$getSeparatedKey = this.getSeparatedKeywords(typeof sv === 'string' ? [sv] : sv), | |
kwArr = _this$getSeparatedKey.keywords, | |
kwArrLen = _this$getSeparatedKey.length, | |
handler = function handler(kw) { | |
var regex = new RegExpCreator(_this9.opt).create(kw); | |
var matches = 0; | |
_this9.log('Searching with expression "'.concat(regex, '"')); | |
_this9[fn]( | |
regex, | |
1, | |
function (term, node) { | |
return _this9.opt.filter(node, kw, totalMatches, matches); | |
}, | |
function (element) { | |
matches++; | |
totalMatches++; | |
_this9.opt.each(element); | |
}, | |
function () { | |
if (matches === 0) { | |
_this9.opt.noMatch(kw); | |
} | |
if (kwArr[kwArrLen - 1] === kw) { | |
_this9.opt.done(totalMatches); | |
} else { | |
handler(kwArr[kwArr.indexOf(kw) + 1]); | |
} | |
} | |
); | |
}; | |
if (this.opt.acrossElements) { | |
fn = 'wrapMatchesAcrossElements'; | |
} | |
if (kwArrLen === 0) { | |
this.opt.done(totalMatches); | |
} else { | |
handler(kwArr[0]); | |
} | |
}, | |
}, | |
{ | |
key: 'markRanges', | |
value: function markRanges(rawRanges, opt) { | |
var _this10 = this; | |
this.opt = opt; | |
var totalMatches = 0, | |
ranges = this.checkRanges(rawRanges); | |
if (ranges && ranges.length) { | |
this.log('Starting to mark with the following ranges: ' + JSON.stringify(ranges)); | |
this.wrapRangeFromIndex( | |
ranges, | |
function (node, range, match, counter) { | |
return _this10.opt.filter(node, range, match, counter); | |
}, | |
function (element, range) { | |
totalMatches++; | |
_this10.opt.each(element, range); | |
}, | |
function () { | |
_this10.opt.done(totalMatches); | |
} | |
); | |
} else { | |
this.opt.done(totalMatches); | |
} | |
}, | |
}, | |
{ | |
key: 'unmark', | |
value: function unmark(opt) { | |
var _this11 = this; | |
this.opt = opt; | |
var sel = this.opt.element ? this.opt.element : '*'; | |
sel += '[data-markjs]'; | |
if (this.opt.className) { | |
sel += '.'.concat(this.opt.className); | |
} | |
this.log('Removal selector "'.concat(sel, '"')); | |
this.iterator.forEachNode( | |
NodeFilter.SHOW_ELEMENT, | |
function (node) { | |
_this11.unwrapMatches(node); | |
}, | |
function (node) { | |
var matchesSel = DOMIterator.matches(node, sel), | |
matchesExclude = _this11.matchesExclude(node); | |
if (!matchesSel || matchesExclude) { | |
return NodeFilter.FILTER_REJECT; | |
} else { | |
return NodeFilter.FILTER_ACCEPT; | |
} | |
}, | |
this.opt.done | |
); | |
}, | |
}, | |
{ | |
key: 'opt', | |
set: function set(val) { | |
this._opt = _extends( | |
{}, | |
{ | |
element: '', | |
className: '', | |
exclude: [], | |
iframes: false, | |
iframesTimeout: 5000, | |
separateWordSearch: true, | |
acrossElements: false, | |
ignoreGroups: 0, | |
each: function each() {}, | |
noMatch: function noMatch() {}, | |
filter: function filter() { | |
return true; | |
}, | |
done: function done() {}, | |
debug: false, | |
log: window.console, | |
}, | |
val | |
); | |
}, | |
get: function get() { | |
return this._opt; | |
}, | |
}, | |
{ | |
key: 'iterator', | |
get: function get() { | |
return new DOMIterator(this.ctx, this.opt.iframes, this.opt.exclude, this.opt.iframesTimeout); | |
}, | |
}, | |
]); | |
return Mark; | |
})(); | |
function Mark$1(ctx) { | |
var _this = this; | |
var instance = new Mark(ctx); | |
this.mark = function (sv, opt) { | |
instance.mark(sv, opt); | |
return _this; | |
}; | |
this.markRegExp = function (sv, opt) { | |
instance.markRegExp(sv, opt); | |
return _this; | |
}; | |
this.markRanges = function (sv, opt) { | |
instance.markRanges(sv, opt); | |
return _this; | |
}; | |
this.unmark = function (opt) { | |
instance.unmark(opt); | |
return _this; | |
}; | |
return this; | |
} | |
return Mark$1; | |
}); | |