diff --git a/grunt_config.json b/grunt_config.json --- a/grunt_config.json +++ b/grunt_config.json @@ -52,7 +52,7 @@ "<%= dirs.js.src %>/plugins/jquery.auto-grow-input.js", "<%= dirs.js.src %>/plugins/jquery.autocomplete.js", "<%= dirs.js.src %>/plugins/jquery.debounce.js", - "<%= dirs.js.src %>/plugins/jquery.mark.js", + "<%= dirs.js.node_modules %>/mark.js/dist/jquery.mark.min.js", "<%= dirs.js.src %>/plugins/jquery.timeago.js", "<%= dirs.js.src %>/plugins/jquery.timeago-extension.js", "<%= dirs.js.src %>/select2/select2.js", diff --git a/package.json b/package.json --- a/package.json +++ b/package.json @@ -22,6 +22,7 @@ "grunt-contrib-watch": "^0.6.1", "grunt-webpack": "^3.1.3", "jquery": "1.11.3", + "mark.js": "8.11.1", "jshint": "^2.9.1-rc3", "moment": "^2.18.1", "mousetrap": "^1.6.1", diff --git a/pkgs/node-packages.nix b/pkgs/node-packages.nix --- a/pkgs/node-packages.nix +++ b/pkgs/node-packages.nix @@ -4676,6 +4676,15 @@ let sha1 = "ecdca8f13144e660f1b5bd41f12f3479d98dfb8f"; }; }; + "mark.js-8.11.1" = { + name = "mark.js"; + packageName = "mark.js"; + version = "8.11.1"; + src = fetchurl { + url = "https://registry.npmjs.org/mark.js/-/mark.js-8.11.1.tgz"; + sha1 = "180f1f9ebef8b0e638e4166ad52db879beb2ffc5"; + }; + }; "math-expression-evaluator-1.2.17" = { name = "math-expression-evaluator"; packageName = "math-expression-evaluator"; @@ -8510,6 +8519,7 @@ let sources."map-age-cleaner-0.1.3" sources."map-cache-0.2.2" sources."map-visit-1.0.0" + sources."mark.js-8.11.1" sources."math-expression-evaluator-1.2.17" sources."md5.js-1.3.5" sources."mem-4.0.0" diff --git a/rhodecode/public/js/src/plugins/jquery.mark.js b/rhodecode/public/js/src/plugins/jquery.mark.js deleted file mode 100755 --- a/rhodecode/public/js/src/plugins/jquery.mark.js +++ /dev/null @@ -1,490 +0,0 @@ -/*!*************************************************** - * mark.js v6.1.0 - * https://github.com/julmot/mark.js - * Copyright (c) 2014–2016, Julian Motz - * Released under the MIT license https://git.io/vwTVl - *****************************************************/ - -"use strict"; - -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 _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 _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -(function (factory, window, document) { - if (typeof define === "function" && define.amd) { - define(["jquery"], function (jQuery) { - return factory(window, document, jQuery); - }); - } else if ((typeof exports === "undefined" ? "undefined" : _typeof(exports)) === "object") { - factory(window, document, require("jquery")); - } else { - factory(window, document, jQuery); - } -})(function (window, document, $) { - var Mark = function () { - function Mark(ctx) { - _classCallCheck(this, Mark); - - this.ctx = ctx; - } - - _createClass(Mark, [{ - key: "log", - value: function log(msg) { - var level = arguments.length <= 1 || arguments[1] === undefined ? "debug" : arguments[1]; - - 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) { - str = this.escapeStr(str); - if (Object.keys(this.opt.synonyms).length) { - str = this.createSynonymsRegExp(str); - } - if (this.opt.diacritics) { - str = this.createDiacriticsRegExp(str); - } - str = this.createAccuracyRegExp(str); - return str; - } - }, { - key: "createSynonymsRegExp", - value: function createSynonymsRegExp(str) { - var syn = this.opt.synonyms; - for (var index in syn) { - if (syn.hasOwnProperty(index)) { - var value = syn[index], - k1 = this.escapeStr(index), - k2 = this.escapeStr(value); - str = str.replace(new RegExp("(" + k1 + "|" + k2 + ")", "gmi"), "(" + k1 + "|" + k2 + ")"); - } - } - return str; - } - }, { - key: "createDiacriticsRegExp", - value: function createDiacriticsRegExp(str) { - var dct = ["aÀÁÂÃÄÅàáâãäåĀāąĄ", "cÇçćĆčČ", "dđĐďĎ", "eÈÉÊËèéêëěĚĒēęĘ", "iÌÍÎÏìíîïĪī", "lłŁ", "nÑñňŇńŃ", "oÒÓÔÕÕÖØòóôõöøŌō", "rřŘ", "sŠšśŚ", "tťŤ", "uÙÚÛÜùúûüůŮŪū", "yŸÿýÝ", "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 + "]", "gmi"), "[" + dct + "]"); - handled.push(dct); - } - return true; - }); - }); - return str; - } - }, { - key: "createAccuracyRegExp", - value: function createAccuracyRegExp(str) { - switch (this.opt.accuracy) { - case "partially": - return "()(" + str + ")"; - case "complementary": - return "()(\\S*" + str + "\\S*)"; - case "exactly": - return "(^|\\s)(" + str + ")(?=\\s|$)"; - } - } - }, { - key: "getSeparatedKeywords", - value: function getSeparatedKeywords(sv) { - var _this = this; - - var stack = []; - sv.forEach(function (kw) { - if (!_this.opt.separateWordSearch) { - if (kw.trim()) { - stack.push(kw); - } - } else { - kw.split(" ").forEach(function (kwSplitted) { - if (kwSplitted.trim()) { - stack.push(kwSplitted); - } - }); - } - }); - return { - "keywords": stack, - "length": stack.length - }; - } - }, { - key: "getElements", - value: function getElements() { - var ctx = void 0, - stack = []; - if (typeof this.ctx === "undefined") { - ctx = []; - } else if (this.ctx instanceof HTMLElement) { - ctx = [this.ctx]; - } else if (Array.isArray(this.ctx)) { - ctx = this.ctx; - } else { - ctx = Array.prototype.slice.call(this.ctx); - } - ctx.forEach(function (ctx) { - stack.push(ctx); - var childs = ctx.querySelectorAll("*"); - if (childs.length) { - stack = stack.concat(Array.prototype.slice.call(childs)); - } - }); - if (!ctx.length) { - this.log("Empty context", "warn"); - } - return { - "elements": stack, - "length": stack.length - }; - } - }, { - key: "matches", - value: function matches(el, selector) { - return (el.matches || el.matchesSelector || el.msMatchesSelector || el.mozMatchesSelector || el.webkitMatchesSelector || el.oMatchesSelector).call(el, selector); - } - }, { - key: "matchesFilter", - value: function matchesFilter(el, exclM) { - var _this2 = this; - - var remain = true; - var fltr = this.opt.filter.concat(["script", "style", "title"]); - if (!this.opt.iframes) { - fltr = fltr.concat(["iframe"]); - } - if (exclM) { - fltr = fltr.concat(["*[data-markjs='true']"]); - } - fltr.every(function (filter) { - if (_this2.matches(el, filter)) { - return remain = false; - } - return true; - }); - return !remain; - } - }, { - key: "onIframeReady", - value: function onIframeReady(ifr, successFn, errorFn) { - try { - (function () { - var ifrWin = ifr.contentWindow, - bl = "about:blank", - compl = "complete"; - var callCallback = function callCallback() { - try { - if (ifrWin.document === null) { - throw new Error("iframe inaccessible"); - } - successFn(ifrWin.document); - } catch (e) { - errorFn(); - } - }; - var isBlank = function isBlank() { - var src = ifr.getAttribute("src").trim(), - href = ifrWin.location.href; - return href === bl && src !== bl && src; - }; - var observeOnload = function observeOnload() { - var listener = function listener() { - try { - if (!isBlank()) { - ifr.removeEventListener("load", listener); - callCallback(); - } - } catch (e) { - errorFn(); - } - }; - ifr.addEventListener("load", listener); - }; - if (ifrWin.document.readyState === compl) { - if (isBlank()) { - observeOnload(); - } else { - callCallback(); - } - } else { - observeOnload(); - } - })(); - } catch (e) { - errorFn(); - } - } - }, { - key: "forEachElementInIframe", - value: function forEachElementInIframe(ifr, cb) { - var _this3 = this; - - var end = arguments.length <= 2 || arguments[2] === undefined ? function () {} : arguments[2]; - - var open = 0; - var checkEnd = function checkEnd() { - if (--open < 1) { - end(); - } - }; - this.onIframeReady(ifr, function (con) { - var stack = Array.prototype.slice.call(con.querySelectorAll("*")); - if ((open = stack.length) === 0) { - checkEnd(); - } - stack.forEach(function (el) { - if (el.tagName.toLowerCase() === "iframe") { - (function () { - var j = 0; - _this3.forEachElementInIframe(el, function (iel, len) { - cb(iel, len); - if (len - 1 === j) { - checkEnd(); - } - j++; - }, checkEnd); - })(); - } else { - cb(el, stack.length); - checkEnd(); - } - }); - }, function () { - var src = ifr.getAttribute("src"); - _this3.log("iframe '" + src + "' could not be accessed", "warn"); - checkEnd(); - }); - } - }, { - key: "forEachElement", - value: function forEachElement(cb) { - var _this4 = this; - - var end = arguments.length <= 1 || arguments[1] === undefined ? function () {} : arguments[1]; - var exclM = arguments.length <= 2 || arguments[2] === undefined ? true : arguments[2]; - - var _getElements = this.getElements(); - - var stack = _getElements.elements; - var open = _getElements.length; - - var checkEnd = function checkEnd() { - if (--open === 0) { - end(); - } - }; - checkEnd(++open); - stack.forEach(function (el) { - if (!_this4.matchesFilter(el, exclM)) { - if (el.tagName.toLowerCase() === "iframe") { - _this4.forEachElementInIframe(el, function (iel) { - if (!_this4.matchesFilter(iel, exclM)) { - cb(iel); - } - }, checkEnd); - return; - } else { - cb(el); - } - } - checkEnd(); - }); - } - }, { - key: "forEachNode", - value: function forEachNode(cb) { - var end = arguments.length <= 1 || arguments[1] === undefined ? function () {} : arguments[1]; - - this.forEachElement(function (n) { - for (n = n.firstChild; n; n = n.nextSibling) { - if (n.nodeType === 3 && n.textContent.trim()) { - cb(n); - } - } - }, end); - } - }, { - key: "wrapMatches", - value: function wrapMatches(node, regex, custom, cb) { - var hEl = !this.opt.element ? "mark" : this.opt.element, - index = custom ? 0 : 2; - var match = void 0; - while ((match = regex.exec(node.textContent)) !== null) { - var pos = match.index; - if (!custom) { - pos += match[index - 1].length; - } - var startNode = node.splitText(pos); - - node = startNode.splitText(match[index].length); - if (startNode.parentNode !== null) { - var repl = document.createElement(hEl); - repl.setAttribute("data-markjs", "true"); - if (this.opt.className) { - repl.setAttribute("class", this.opt.className); - } - repl.textContent = match[index]; - startNode.parentNode.replaceChild(repl, startNode); - cb(repl); - } - regex.lastIndex = 0; - } - } - }, { - 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); - parent.normalize(); - } - }, { - key: "markRegExp", - value: function markRegExp(regexp, opt) { - var _this5 = this; - - this.opt = opt; - this.log("Searching with expression \"" + regexp + "\""); - var found = false; - var eachCb = function eachCb(element) { - found = true; - _this5.opt.each(element); - }; - this.forEachNode(function (node) { - _this5.wrapMatches(node, regexp, true, eachCb); - }, function () { - if (!found) { - _this5.opt.noMatch(regexp); - } - _this5.opt.complete(); - _this5.opt.done(); - }); - } - }, { - key: "mark", - value: function mark(sv, opt) { - var _this6 = this; - - this.opt = opt; - sv = typeof sv === "string" ? [sv] : sv; - - var _getSeparatedKeywords = this.getSeparatedKeywords(sv); - - var kwArr = _getSeparatedKeywords.keywords; - var kwArrLen = _getSeparatedKeywords.length; - - if (kwArrLen === 0) { - this.opt.complete(); - this.opt.done(); - } - kwArr.forEach(function (kw) { - var regex = new RegExp(_this6.createRegExp(kw), "gmi"), - found = false; - var eachCb = function eachCb(element) { - found = true; - _this6.opt.each(element); - }; - _this6.log("Searching with expression \"" + regex + "\""); - _this6.forEachNode(function (node) { - _this6.wrapMatches(node, regex, false, eachCb); - }, function () { - if (!found) { - _this6.opt.noMatch(kw); - } - if (kwArr[kwArrLen - 1] === kw) { - _this6.opt.complete(); - _this6.opt.done(); - } - }); - }); - } - }, { - key: "unmark", - value: function unmark(opt) { - var _this7 = 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.forEachElement(function (el) { - if (_this7.matches(el, sel)) { - _this7.unwrapMatches(el); - } - }, function () { - _this7.opt.complete(); - _this7.opt.done(); - }, false); - } - }, { - key: "opt", - set: function set(val) { - this._opt = _extends({}, { - "element": "", - "className": "", - "filter": [], - "iframes": false, - "separateWordSearch": true, - "diacritics": true, - "synonyms": {}, - "accuracy": "partially", - "each": function each() {}, - "noMatch": function noMatch() {}, - "done": function done() {}, - "complete": function complete() {}, - "debug": false, - "log": window.console - }, val); - }, - get: function get() { - return this._opt; - } - }]); - - return Mark; - }(); - - $.fn.mark = function (sv, opt) { - new Mark(this).mark(sv, opt); - return this; - }; - $.fn.markRegExp = function (regexp, opt) { - new Mark(this).markRegExp(regexp, opt); - return this; - }; - $.fn.unmark = function (opt) { - new Mark(this).unmark(opt); - return this; - }; -}, window, document);