הבדלים בין גרסאות בדף "מדיה ויקי:Mobile.js"
קפיצה לניווט
קפיצה לחיפוש
שורה 79: | שורה 79: | ||
}); | }); | ||
} | } | ||
+ | |||
+ | /*!*************************************************** | ||
+ | * mark.js v8.6.0 | ||
+ | * https://github.com/julmot/mark.js | ||
+ | * Copyright (c) 2014–2017, Julian Motz | ||
+ | * Released under the MIT license https://git.io/vwTVl | ||
+ | *****************************************************/ | ||
+ | ( function ( $ ) { | ||
+ | /*!*************************************************** | ||
+ | * mark.js v8.11.1 | ||
+ | * 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(require('jquery')) : | ||
+ | typeof define === 'function' && define.amd ? define(['jquery'], factory) : | ||
+ | (global.Mark = factory(global.jQuery)); | ||
+ | }(this, (function ($) { 'use strict'; | ||
+ | |||
+ | $ = $ && $.hasOwnProperty('default') ? $['default'] : $; | ||
+ | |||
+ | var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { | ||
+ | return typeof obj; | ||
+ | } : function (obj) { | ||
+ | return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; | ||
+ | }; | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | var classCallCheck = function (instance, Constructor) { | ||
+ | if (!(instance instanceof Constructor)) { | ||
+ | throw new TypeError("Cannot call a class as a function"); | ||
+ | } | ||
+ | }; | ||
+ | |||
+ | var createClass = 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); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | return function (Constructor, protoProps, staticProps) { | ||
+ | if (protoProps) defineProperties(Constructor.prototype, protoProps); | ||
+ | if (staticProps) defineProperties(Constructor, staticProps); | ||
+ | return Constructor; | ||
+ | }; | ||
+ | }(); | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | var _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; | ||
+ | }; | ||
+ | |||
+ | var DOMIterator = 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 = void 0, | ||
+ | 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 = void 0; | ||
+ | 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 = void 0; | ||
+ | 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 = void 0, | ||
+ | prevNode = void 0, | ||
+ | retrieveNodes = function retrieveNodes() { | ||
+ | var _getIteratorNode = _this5.getIteratorNode(itr); | ||
+ | |||
+ | prevNode = _getIteratorNode.prevNode; | ||
+ | node = _getIteratorNode.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 Mark = 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 === 'undefined' ? 'undefined' : _typeof(log)) === 'object' && typeof log[level] === 'function') { | ||
+ | log[level]('mark.js: ' + msg); | ||
+ | } | ||
+ | } | ||
+ | }, { | ||
+ | key: 'escapeStr', | ||
+ | value: function escapeStr(str) { | ||
+ | return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, '\\$&'); | ||
+ | } | ||
+ | }, { | ||
+ | key: 'createRegExp', | ||
+ | value: function createRegExp(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 str; | ||
+ | } | ||
+ | }, { | ||
+ | key: 'createSynonymsRegExp', | ||
+ | value: function createSynonymsRegExp(str) { | ||
+ | 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 value = syn[index], | ||
+ | k1 = this.opt.wildcards !== 'disabled' ? this.setupWildcardsRegExp(index) : this.escapeStr(index), | ||
+ | k2 = this.opt.wildcards !== 'disabled' ? this.setupWildcardsRegExp(value) : this.escapeStr(value); | ||
+ | if (k1 !== '' && k2 !== '') { | ||
+ | str = str.replace(new RegExp('(' + this.escapeStr(k1) + '|' + this.escapeStr(k2) + ')', 'gm' + sens), joinerPlaceholder + ('(' + this.processSynomyms(k1) + '|') + (this.processSynomyms(k2) + ')') + joinerPlaceholder); | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | return str; | ||
+ | } | ||
+ | }, { | ||
+ | key: 'processSynomyms', | ||
+ | value: function processSynomyms(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('[' + 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('[' + dct + ']', 'gm' + sens), '[' + dct + ']'); | ||
+ | handled.push(dct); | ||
+ | } | ||
+ | return true; | ||
+ | }); | ||
+ | }); | ||
+ | return str; | ||
+ | } | ||
+ | }, { | ||
+ | key: 'createMergedBlanksRegExp', | ||
+ | value: function createMergedBlanksRegExp(str) { | ||
+ | return str.replace(/[\s]+/gmi, '[\\s]+'); | ||
+ | } | ||
+ | }, { | ||
+ | key: 'createAccuracyRegExp', | ||
+ | value: function createAccuracyRegExp(str) { | ||
+ | var _this = 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 += '|' + _this.escapeStr(limiter); | ||
+ | }); | ||
+ | switch (val) { | ||
+ | case 'partially': | ||
+ | default: | ||
+ | return '()(' + str + ')'; | ||
+ | case 'complementary': | ||
+ | lsJoin = '\\s' + (lsJoin ? lsJoin : this.escapeStr(chars)); | ||
+ | return '()([^' + lsJoin + ']*' + str + '[^' + lsJoin + ']*)'; | ||
+ | case 'exactly': | ||
+ | return '(^|\\s' + lsJoin + ')(' + str + ')(?=$|\\s' + lsJoin + ')'; | ||
+ | } | ||
+ | } | ||
+ | }, { | ||
+ | key: 'getSeparatedKeywords', | ||
+ | value: function getSeparatedKeywords(sv) { | ||
+ | var _this2 = this; | ||
+ | |||
+ | var stack = []; | ||
+ | sv.forEach(function (kw) { | ||
+ | if (!_this2.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 _this3 = 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 _callNoMatchOnInvalid = _this3.callNoMatchOnInvalidRanges(item, last), | ||
+ | start = _callNoMatchOnInvalid.start, | ||
+ | end = _callNoMatchOnInvalid.end, | ||
+ | valid = _callNoMatchOnInvalid.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 = void 0, | ||
+ | end = void 0, | ||
+ | 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: ' + ('' + JSON.stringify(range))); | ||
+ | this.opt.noMatch(range); | ||
+ | } | ||
+ | } else { | ||
+ | this.log('Ignoring invalid range: ' + JSON.stringify(range)); | ||
+ | this.opt.noMatch(range); | ||
+ | } | ||
+ | return { | ||
+ | start: start, | ||
+ | end: end, | ||
+ | valid: valid | ||
+ | }; | ||
+ | } | ||
+ | }, { | ||
+ | key: 'checkWhitespaceRanges', | ||
+ | value: function checkWhitespaceRanges(range, originalLength, string) { | ||
+ | var end = void 0, | ||
+ | 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 ' + max); | ||
+ | } | ||
+ | if (start < 0 || end - start < 0 || start > max || end > max) { | ||
+ | valid = false; | ||
+ | this.log('Invalid range: ' + 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 _this4 = 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 (_this4.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 _this5 = 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 = _this5.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: 'wrapMatches', | ||
+ | value: function wrapMatches(regex, ignoreGroups, filterCb, eachCb, endCb) { | ||
+ | var _this6 = this; | ||
+ | |||
+ | var matchIdx = ignoreGroups === 0 ? 0 : ignoreGroups + 1; | ||
+ | this.getTextNodes(function (dict) { | ||
+ | dict.nodes.forEach(function (node) { | ||
+ | node = node.node; | ||
+ | var match = void 0; | ||
+ | while ((match = regex.exec(node.textContent)) !== null && match[matchIdx] !== '') { | ||
+ | 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 = _this6.wrapRangeInTextNode(node, pos, pos + match[matchIdx].length); | ||
+ | eachCb(node.previousSibling); | ||
+ | regex.lastIndex = 0; | ||
+ | } | ||
+ | }); | ||
+ | endCb(); | ||
+ | }); | ||
+ | } | ||
+ | }, { | ||
+ | key: 'wrapMatchesAcrossElements', | ||
+ | value: function wrapMatchesAcrossElements(regex, ignoreGroups, filterCb, eachCb, endCb) { | ||
+ | var _this7 = this; | ||
+ | |||
+ | var matchIdx = ignoreGroups === 0 ? 0 : ignoreGroups + 1; | ||
+ | this.getTextNodes(function (dict) { | ||
+ | var match = void 0; | ||
+ | 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; | ||
+ | _this7.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 _this8 = this; | ||
+ | |||
+ | this.getTextNodes(function (dict) { | ||
+ | var originalLength = dict.value.length; | ||
+ | ranges.forEach(function (range, counter) { | ||
+ | var _checkWhitespaceRange = _this8.checkWhitespaceRanges(range, originalLength, dict.value), | ||
+ | start = _checkWhitespaceRange.start, | ||
+ | end = _checkWhitespaceRange.end, | ||
+ | valid = _checkWhitespaceRange.valid; | ||
+ | |||
+ | if (valid) { | ||
+ | _this8.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 _this9 = this; | ||
+ | |||
+ | this.opt = opt; | ||
+ | this.log('Searching with expression "' + regexp + '"'); | ||
+ | var totalMatches = 0, | ||
+ | fn = 'wrapMatches'; | ||
+ | var eachCb = function eachCb(element) { | ||
+ | totalMatches++; | ||
+ | _this9.opt.each(element); | ||
+ | }; | ||
+ | if (this.opt.acrossElements) { | ||
+ | fn = 'wrapMatchesAcrossElements'; | ||
+ | } | ||
+ | this[fn](regexp, this.opt.ignoreGroups, function (match, node) { | ||
+ | return _this9.opt.filter(node, match, totalMatches); | ||
+ | }, eachCb, function () { | ||
+ | if (totalMatches === 0) { | ||
+ | _this9.opt.noMatch(regexp); | ||
+ | } | ||
+ | _this9.opt.done(totalMatches); | ||
+ | }); | ||
+ | } | ||
+ | }, { | ||
+ | key: 'mark', | ||
+ | value: function mark(sv, opt) { | ||
+ | var _this10 = this; | ||
+ | |||
+ | this.opt = opt; | ||
+ | var totalMatches = 0, | ||
+ | fn = 'wrapMatches'; | ||
+ | |||
+ | var _getSeparatedKeywords = this.getSeparatedKeywords(typeof sv === 'string' ? [sv] : sv), | ||
+ | kwArr = _getSeparatedKeywords.keywords, | ||
+ | kwArrLen = _getSeparatedKeywords.length, | ||
+ | sens = this.opt.caseSensitive ? '' : 'i', | ||
+ | handler = function handler(kw) { | ||
+ | var regex = new RegExp(_this10.createRegExp(kw), 'gm' + sens), | ||
+ | matches = 0; | ||
+ | _this10.log('Searching with expression "' + regex + '"'); | ||
+ | _this10[fn](regex, 1, function (term, node) { | ||
+ | return _this10.opt.filter(node, kw, totalMatches, matches); | ||
+ | }, function (element) { | ||
+ | matches++; | ||
+ | totalMatches++; | ||
+ | _this10.opt.each(element); | ||
+ | }, function () { | ||
+ | if (matches === 0) { | ||
+ | _this10.opt.noMatch(kw); | ||
+ | } | ||
+ | if (kwArr[kwArrLen - 1] === kw) { | ||
+ | _this10.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 _this11 = 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 _this11.opt.filter(node, range, match, counter); | ||
+ | }, function (element, range) { | ||
+ | totalMatches++; | ||
+ | _this11.opt.each(element, range); | ||
+ | }, function () { | ||
+ | _this11.opt.done(totalMatches); | ||
+ | }); | ||
+ | } else { | ||
+ | this.opt.done(totalMatches); | ||
+ | } | ||
+ | } | ||
+ | }, { | ||
+ | key: 'unmark', | ||
+ | value: function unmark(opt) { | ||
+ | var _this12 = this; | ||
+ | |||
+ | this.opt = opt; | ||
+ | var sel = this.opt.element ? this.opt.element : '*'; | ||
+ | sel += '[data-markjs]'; | ||
+ | if (this.opt.className) { | ||
+ | sel += '.' + this.opt.className; | ||
+ | } | ||
+ | this.log('Removal selector "' + sel + '"'); | ||
+ | this.iterator.forEachNode(NodeFilter.SHOW_ELEMENT, function (node) { | ||
+ | _this12.unwrapMatches(node); | ||
+ | }, function (node) { | ||
+ | var matchesSel = DOMIterator.matches(node, sel), | ||
+ | matchesExclude = _this12.matchesExclude(node); | ||
+ | if (!matchesSel || matchesExclude) { | ||
+ | return NodeFilter.FILTER_REJECT; | ||
+ | } else { | ||
+ | return NodeFilter.FILTER_ACCEPT; | ||
+ | } | ||
+ | }, this.opt.done); | ||
+ | } | ||
+ | }, { | ||
+ | key: 'opt', | ||
+ | set: function set$$1(val) { | ||
+ | this._opt = _extends({}, { | ||
+ | 'element': '', | ||
+ | 'className': '', | ||
+ | 'exclude': [], | ||
+ | 'iframes': false, | ||
+ | 'iframesTimeout': 5000, | ||
+ | 'separateWordSearch': true, | ||
+ | 'diacritics': true, | ||
+ | 'synonyms': {}, | ||
+ | 'accuracy': 'partially', | ||
+ | 'acrossElements': false, | ||
+ | 'caseSensitive': false, | ||
+ | 'ignoreJoiners': false, | ||
+ | 'ignoreGroups': 0, | ||
+ | 'ignorePunctuation': [], | ||
+ | 'wildcards': 'disabled', | ||
+ | 'each': function each() {}, | ||
+ | 'noMatch': function noMatch() {}, | ||
+ | 'filter': function filter() { | ||
+ | return true; | ||
+ | }, | ||
+ | 'done': function done() {}, | ||
+ | 'debug': false, | ||
+ | 'log': window.console | ||
+ | }, val); | ||
+ | }, | ||
+ | get: function get$$1() { | ||
+ | return this._opt; | ||
+ | } | ||
+ | }, { | ||
+ | key: 'iterator', | ||
+ | get: function get$$1() { | ||
+ | return new DOMIterator(this.ctx, this.opt.iframes, this.opt.exclude, this.opt.iframesTimeout); | ||
+ | } | ||
+ | }]); | ||
+ | return Mark; | ||
+ | }(); | ||
+ | |||
+ | $.fn.mark = function (sv, opt) { | ||
+ | new Mark(this.get()).mark(sv, opt); | ||
+ | return this; | ||
+ | }; | ||
+ | $.fn.markRegExp = function (regexp, opt) { | ||
+ | new Mark(this.get()).markRegExp(regexp, opt); | ||
+ | return this; | ||
+ | }; | ||
+ | $.fn.markRanges = function (ranges, opt) { | ||
+ | new Mark(this.get()).markRanges(ranges, opt); | ||
+ | return this; | ||
+ | }; | ||
+ | $.fn.unmark = function (opt) { | ||
+ | new Mark(this.get()).unmark(opt); | ||
+ | return this; | ||
+ | }; | ||
+ | |||
+ | return $; | ||
+ | |||
+ | }))); | ||
+ | }( jQuery ) ); | ||
+ | |||
+ | /* סינון מונחון */ | ||
+ | $(function() { | ||
+ | var $input = $("input[name='keyword']"), | ||
+ | $context = $("#context ul li"); | ||
+ | $outofcontext = $("#context h3 "), | ||
+ | $input.on("input", function() { | ||
+ | var term = $(this).val(); | ||
+ | $context.show().unmark(); | ||
+ | if (term) { | ||
+ | $context.mark(term, { | ||
+ | done: function() { | ||
+ | $context.not(":has(mark)").hide(); | ||
+ | $outofcontext.hide(); | ||
+ | } | ||
+ | }); | ||
+ | } else { | ||
+ | $outofcontext.show(); | ||
+ | } | ||
+ | }); | ||
+ | }); |
גרסה מ־13:46, 20 באוגוסט 2018
// menu
window.onload=function(){
var d1 = document.getElementById( 'mw-mf-page-left' ).getElementsByTagName( 'ul' )[0];
d1.insertAdjacentHTML('beforeend', '<li><a href="/wiki/פורטלים" class="icon-portal icon icon-text" id="portalButton">פורטלים</a></li><li><a href="/blog" class="icon-blog icon icon-text" id="blogButton">בלוג</a></li><li><a href="/wiki/ייעוץ_אסטרטגי" class="icon-strat icon icon-text" id="stratButton">ייעוץ אסטרטגי</a></li><li><a href="/wiki/קורסים_והכשרות" class="icon-course icon icon-text" id="courseButton">קורסים והכשרות</a></li><li><a href="/#contact" class="icon-contact icon icon-text" id="contactButton">צור קשר</a></li><li id="contact-icons"><a href="tel:+972544702895" class="icon-phone icon-text" id="phoneButton"></a><a href="//www.facebook.com/doalogue" class="icon-facebook icon-text" id="FBButton"></a><a href="//twitter.com/doalogue" class="icon-twitter icon-text" id="twitterButton"></a><a href="//linkedin.com/company/doalogue" class="icon-linkedin icon-text" id="twitterButton"></a></li>');
}
// banner
$( document ).ready(function(){
$('head').append('<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css" type="text/css" /><meta name="theme-color" content="#52A3F6"><meta name="msapplication-navbutton-color" content="#52A3F6"><meta name="apple-mobile-web-app-status-bar-style" content="#52A3F6">');
if ($('#image-banner').length > 0) {
$('#image-banner').css('background-image', 'url(' + $('.image img').attr('src') + ')').css('opacity', '1');
var PageHead = document.getElementById("section_0");
// Copy the element and its child nodes
var clnPageHead = PageHead.cloneNode(true);
var PageHeader = document.getElementById("image-banner");
var clnPageHeader = PageHeader.cloneNode(true);
if ($('.image').length > 0) {
document.getElementById("image-banner").remove();
$(".header").after(clnPageHeader);
document.getElementById("section_0").remove();
document.getElementById("newHeading").appendChild(clnPageHead);
}
}
});
if (typeof jQuery != 'undefined') {
jQuery(document).ready(function($) {
var filetypes = /\.(zip|exe|dmg|pdf|doc.*|xls.*|ppt.*|mp3|txt|rar|wma|mov|avi|wmv|flv|wav)$/i;
var baseHref = '';
if (jQuery('base').attr('href') != undefined) baseHref = jQuery('base').attr('href');
jQuery('a').on('click', function(event) {
var el = jQuery(this);
var track = true;
var href = (typeof(el.attr('href')) != 'undefined' ) ? el.attr('href') :"";
var isThisDomain = href.match(document.domain.split('.').reverse()[1] + '.' + document.domain.split('.').reverse()[0]);
if (!href.match(/^javascript:/i)) {
var elEv = []; elEv.value=0, elEv.non_i=false;
if (href.match(/^mailto\:/i)) {
elEv.category = "email";
elEv.action = "click";
elEv.label = href.replace(/^mailto\:/i, '');
elEv.loc = href;
}
else if (href.match(filetypes)) {
var extension = (/[.]/.exec(href)) ? /[^.]+$/.exec(href) : undefined;
elEv.category = "download";
elEv.action = "click-" + extension[0];
elEv.label = href.replace(/ /g,"-");
elEv.loc = baseHref + href;
}
else if (href.match(/^https?\:/i) && !isThisDomain) {
elEv.category = "external";
elEv.action = "click";
elEv.label = href.replace(/^https?\:\/\//i, '');
elEv.non_i = true;
elEv.loc = href;
}
else if (href.match(/^tel\:/i)) {
elEv.category = "telephone";
elEv.action = "click";
elEv.label = href.replace(/^tel\:/i, '');
elEv.loc = href;
}
else track = false;
if (track) {
_gaq.push(['_trackEvent', elEv.category.toLowerCase(), elEv.action.toLowerCase(), elEv.label.toLowerCase(), elEv.value, elEv.non_i]);
if ( el.attr('target') == undefined || el.attr('target').toLowerCase() != '_blank') {
setTimeout(function() { location.href = elEv.loc; }, 400);
return false;
}
}
}
});
});
}
/*!***************************************************
* mark.js v8.6.0
* https://github.com/julmot/mark.js
* Copyright (c) 2014–2017, Julian Motz
* Released under the MIT license https://git.io/vwTVl
*****************************************************/
( function ( $ ) {
/*!***************************************************
* mark.js v8.11.1
* 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(require('jquery')) :
typeof define === 'function' && define.amd ? define(['jquery'], factory) :
(global.Mark = factory(global.jQuery));
}(this, (function ($) { 'use strict';
$ = $ && $.hasOwnProperty('default') ? $['default'] : $;
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) {
return typeof obj;
} : function (obj) {
return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
};
var classCallCheck = function (instance, Constructor) {
if (!(instance instanceof Constructor)) {
throw new TypeError("Cannot call a class as a function");
}
};
var createClass = 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);
}
}
return function (Constructor, protoProps, staticProps) {
if (protoProps) defineProperties(Constructor.prototype, protoProps);
if (staticProps) defineProperties(Constructor, staticProps);
return Constructor;
};
}();
var _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;
};
var DOMIterator = 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 = void 0,
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 = void 0;
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 = void 0;
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 = void 0,
prevNode = void 0,
retrieveNodes = function retrieveNodes() {
var _getIteratorNode = _this5.getIteratorNode(itr);
prevNode = _getIteratorNode.prevNode;
node = _getIteratorNode.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 Mark = 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 === 'undefined' ? 'undefined' : _typeof(log)) === 'object' && typeof log[level] === 'function') {
log[level]('mark.js: ' + msg);
}
}
}, {
key: 'escapeStr',
value: function escapeStr(str) {
return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, '\\$&');
}
}, {
key: 'createRegExp',
value: function createRegExp(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 str;
}
}, {
key: 'createSynonymsRegExp',
value: function createSynonymsRegExp(str) {
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 value = syn[index],
k1 = this.opt.wildcards !== 'disabled' ? this.setupWildcardsRegExp(index) : this.escapeStr(index),
k2 = this.opt.wildcards !== 'disabled' ? this.setupWildcardsRegExp(value) : this.escapeStr(value);
if (k1 !== '' && k2 !== '') {
str = str.replace(new RegExp('(' + this.escapeStr(k1) + '|' + this.escapeStr(k2) + ')', 'gm' + sens), joinerPlaceholder + ('(' + this.processSynomyms(k1) + '|') + (this.processSynomyms(k2) + ')') + joinerPlaceholder);
}
}
}
return str;
}
}, {
key: 'processSynomyms',
value: function processSynomyms(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('[' + 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('[' + dct + ']', 'gm' + sens), '[' + dct + ']');
handled.push(dct);
}
return true;
});
});
return str;
}
}, {
key: 'createMergedBlanksRegExp',
value: function createMergedBlanksRegExp(str) {
return str.replace(/[\s]+/gmi, '[\\s]+');
}
}, {
key: 'createAccuracyRegExp',
value: function createAccuracyRegExp(str) {
var _this = 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 += '|' + _this.escapeStr(limiter);
});
switch (val) {
case 'partially':
default:
return '()(' + str + ')';
case 'complementary':
lsJoin = '\\s' + (lsJoin ? lsJoin : this.escapeStr(chars));
return '()([^' + lsJoin + ']*' + str + '[^' + lsJoin + ']*)';
case 'exactly':
return '(^|\\s' + lsJoin + ')(' + str + ')(?=$|\\s' + lsJoin + ')';
}
}
}, {
key: 'getSeparatedKeywords',
value: function getSeparatedKeywords(sv) {
var _this2 = this;
var stack = [];
sv.forEach(function (kw) {
if (!_this2.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 _this3 = 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 _callNoMatchOnInvalid = _this3.callNoMatchOnInvalidRanges(item, last),
start = _callNoMatchOnInvalid.start,
end = _callNoMatchOnInvalid.end,
valid = _callNoMatchOnInvalid.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 = void 0,
end = void 0,
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: ' + ('' + JSON.stringify(range)));
this.opt.noMatch(range);
}
} else {
this.log('Ignoring invalid range: ' + JSON.stringify(range));
this.opt.noMatch(range);
}
return {
start: start,
end: end,
valid: valid
};
}
}, {
key: 'checkWhitespaceRanges',
value: function checkWhitespaceRanges(range, originalLength, string) {
var end = void 0,
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 ' + max);
}
if (start < 0 || end - start < 0 || start > max || end > max) {
valid = false;
this.log('Invalid range: ' + 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 _this4 = 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 (_this4.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 _this5 = 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 = _this5.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: 'wrapMatches',
value: function wrapMatches(regex, ignoreGroups, filterCb, eachCb, endCb) {
var _this6 = this;
var matchIdx = ignoreGroups === 0 ? 0 : ignoreGroups + 1;
this.getTextNodes(function (dict) {
dict.nodes.forEach(function (node) {
node = node.node;
var match = void 0;
while ((match = regex.exec(node.textContent)) !== null && match[matchIdx] !== '') {
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 = _this6.wrapRangeInTextNode(node, pos, pos + match[matchIdx].length);
eachCb(node.previousSibling);
regex.lastIndex = 0;
}
});
endCb();
});
}
}, {
key: 'wrapMatchesAcrossElements',
value: function wrapMatchesAcrossElements(regex, ignoreGroups, filterCb, eachCb, endCb) {
var _this7 = this;
var matchIdx = ignoreGroups === 0 ? 0 : ignoreGroups + 1;
this.getTextNodes(function (dict) {
var match = void 0;
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;
_this7.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 _this8 = this;
this.getTextNodes(function (dict) {
var originalLength = dict.value.length;
ranges.forEach(function (range, counter) {
var _checkWhitespaceRange = _this8.checkWhitespaceRanges(range, originalLength, dict.value),
start = _checkWhitespaceRange.start,
end = _checkWhitespaceRange.end,
valid = _checkWhitespaceRange.valid;
if (valid) {
_this8.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 _this9 = this;
this.opt = opt;
this.log('Searching with expression "' + regexp + '"');
var totalMatches = 0,
fn = 'wrapMatches';
var eachCb = function eachCb(element) {
totalMatches++;
_this9.opt.each(element);
};
if (this.opt.acrossElements) {
fn = 'wrapMatchesAcrossElements';
}
this[fn](regexp, this.opt.ignoreGroups, function (match, node) {
return _this9.opt.filter(node, match, totalMatches);
}, eachCb, function () {
if (totalMatches === 0) {
_this9.opt.noMatch(regexp);
}
_this9.opt.done(totalMatches);
});
}
}, {
key: 'mark',
value: function mark(sv, opt) {
var _this10 = this;
this.opt = opt;
var totalMatches = 0,
fn = 'wrapMatches';
var _getSeparatedKeywords = this.getSeparatedKeywords(typeof sv === 'string' ? [sv] : sv),
kwArr = _getSeparatedKeywords.keywords,
kwArrLen = _getSeparatedKeywords.length,
sens = this.opt.caseSensitive ? '' : 'i',
handler = function handler(kw) {
var regex = new RegExp(_this10.createRegExp(kw), 'gm' + sens),
matches = 0;
_this10.log('Searching with expression "' + regex + '"');
_this10[fn](regex, 1, function (term, node) {
return _this10.opt.filter(node, kw, totalMatches, matches);
}, function (element) {
matches++;
totalMatches++;
_this10.opt.each(element);
}, function () {
if (matches === 0) {
_this10.opt.noMatch(kw);
}
if (kwArr[kwArrLen - 1] === kw) {
_this10.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 _this11 = 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 _this11.opt.filter(node, range, match, counter);
}, function (element, range) {
totalMatches++;
_this11.opt.each(element, range);
}, function () {
_this11.opt.done(totalMatches);
});
} else {
this.opt.done(totalMatches);
}
}
}, {
key: 'unmark',
value: function unmark(opt) {
var _this12 = this;
this.opt = opt;
var sel = this.opt.element ? this.opt.element : '*';
sel += '[data-markjs]';
if (this.opt.className) {
sel += '.' + this.opt.className;
}
this.log('Removal selector "' + sel + '"');
this.iterator.forEachNode(NodeFilter.SHOW_ELEMENT, function (node) {
_this12.unwrapMatches(node);
}, function (node) {
var matchesSel = DOMIterator.matches(node, sel),
matchesExclude = _this12.matchesExclude(node);
if (!matchesSel || matchesExclude) {
return NodeFilter.FILTER_REJECT;
} else {
return NodeFilter.FILTER_ACCEPT;
}
}, this.opt.done);
}
}, {
key: 'opt',
set: function set$$1(val) {
this._opt = _extends({}, {
'element': '',
'className': '',
'exclude': [],
'iframes': false,
'iframesTimeout': 5000,
'separateWordSearch': true,
'diacritics': true,
'synonyms': {},
'accuracy': 'partially',
'acrossElements': false,
'caseSensitive': false,
'ignoreJoiners': false,
'ignoreGroups': 0,
'ignorePunctuation': [],
'wildcards': 'disabled',
'each': function each() {},
'noMatch': function noMatch() {},
'filter': function filter() {
return true;
},
'done': function done() {},
'debug': false,
'log': window.console
}, val);
},
get: function get$$1() {
return this._opt;
}
}, {
key: 'iterator',
get: function get$$1() {
return new DOMIterator(this.ctx, this.opt.iframes, this.opt.exclude, this.opt.iframesTimeout);
}
}]);
return Mark;
}();
$.fn.mark = function (sv, opt) {
new Mark(this.get()).mark(sv, opt);
return this;
};
$.fn.markRegExp = function (regexp, opt) {
new Mark(this.get()).markRegExp(regexp, opt);
return this;
};
$.fn.markRanges = function (ranges, opt) {
new Mark(this.get()).markRanges(ranges, opt);
return this;
};
$.fn.unmark = function (opt) {
new Mark(this.get()).unmark(opt);
return this;
};
return $;
})));
}( jQuery ) );
/* סינון מונחון */
$(function() {
var $input = $("input[name='keyword']"),
$context = $("#context ul li");
$outofcontext = $("#context h3 "),
$input.on("input", function() {
var term = $(this).val();
$context.show().unmark();
if (term) {
$context.mark(term, {
done: function() {
$context.not(":has(mark)").hide();
$outofcontext.hide();
}
});
} else {
$outofcontext.show();
}
});
});