JAVASCRIPT   27

util js

Guest on 12th August 2022 12:29:52 AM

  1. // To avoid duplicates conflicting
  2. var jQueryUrvanovSyntaxHighlighter = jQuery;
  3.  
  4. (function ($) {
  5.  
  6.     UrvanovSyntaxHighlighterUtil = new function () {
  7.  
  8.         var base = this;
  9.         var settings = null;
  10.  
  11.         base.init = function () {
  12.             settings = UrvanovSyntaxHighlighterSyntaxSettings;
  13.             base.initGET();
  14.         };
  15.  
  16.         base.addPrefixToID = function (id) {
  17.             return id.replace(/^([#.])?(.*)$/, '$1' + settings.prefix + '$2');
  18.         };
  19.  
  20.         base.removePrefixFromID = function (id) {
  21.             var re = new RegExp('^[#.]?' + settings.prefix, 'i');
  22.             return id.replace(re, '');
  23.         };
  24.  
  25.         base.cssElem = function (id) {
  26.             return $(base.addPrefixToID(id));
  27.         };
  28.  
  29.         base.setDefault = function (v, d) {
  30.             return (typeof v == 'undefined') ? d : v;
  31.         };
  32.  
  33.         base.setMax = function (v, max) {
  34.             return v <= max ? v : max;
  35.         };
  36.  
  37.         base.setMin = function (v, min) {
  38.             return v >= min ? v : min;
  39.         };
  40.  
  41.         base.setRange = function (v, min, max) {
  42.             return base.setMax(base.setMin(v, min), max);
  43.         };
  44.  
  45.         base.getExt = function (str) {
  46.             if (str.indexOf('.') == -1) {
  47.                 return undefined;
  48.             }
  49.             var ext = str.split('.');
  50.             if (ext.length) {
  51.                 ext = ext[ext.length - 1];
  52.             } else {
  53.                 ext = '';
  54.             }
  55.             return ext;
  56.         };
  57.  
  58.         base.initGET = function () {
  59.             // URLs
  60.             window.currentURL = window.location.protocol + '//' + window.location.host + window.location.pathname;
  61.             window.currentDir = window.currentURL.substring(0, window.currentURL.lastIndexOf('/'));
  62.  
  63.             // http://stackoverflow.com/questions/439463
  64.             function getQueryParams(qs) {
  65.                 qs = qs.split("+").join(" ");
  66.                 var params = {}, tokens, re = /[?&]?([^=]+)=([^&]*)/g;
  67.                 while (tokens = re.exec(qs)) {
  68.                     params[decodeURIComponent(tokens[1])] = decodeURIComponent(tokens[2]);
  69.                 }
  70.                 return params;
  71.             }
  72.  
  73.             window.GET = getQueryParams(document.location.search);
  74.         };
  75.  
  76.         base.getAJAX = function (args, callback) {
  77.             args.version = settings.version;
  78.             $.get(settings.ajaxurl, args, callback);
  79.         };
  80.        
  81.         /**
  82.          * @param {String} HTML representing any number of sibling elements
  83.          * @return {NodeList}
  84.          */
  85.         base.htmlToElements = function (html) {
  86.             return $.parseHTML(html, document, true);
  87.         }
  88.  
  89.  
  90.         base.postAJAX = function (args, callback) {
  91.             args.version = settings.version;
  92.             $.post(settings.ajaxurl, args, callback);
  93.         };
  94.  
  95.         base.reload = function () {
  96.             var get = '?';
  97.             for (var i in window.GET) {
  98.                 get += i + '=' + window.GET[i] + '&';
  99.             }
  100.             window.location = window.currentURL + get;
  101.         };
  102.  
  103.         base.escape = function (string) {
  104.             if (typeof encodeURIComponent == 'function') {
  105.                 return encodeURIComponent(string);
  106.             } else if (typeof escape != 'function') {
  107.                 return escape(string);
  108.             } else {
  109.                 return string;
  110.             }
  111.         };
  112.  
  113.         base.log = function (string) {
  114.             if (typeof console != 'undefined' && settings && settings.debug) {
  115.                 console.log(string);
  116.             }
  117.         };
  118.  
  119.         base.decode_html = function (str) {
  120.             return String(str).replace(/&lt;/g, '<').replace(
  121.                 /&gt;/g, '>').replace(/&amp;/g, '&');
  122.         };
  123.  
  124.         base.encode_html = function (str) {
  125.             return String(str).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(
  126.                 />/g, '&gt;');
  127.         };
  128.  
  129.         /**
  130.          * Returns either black or white to ensure this color is distinguishable with the given RGB hex.
  131.          * This function can be used to create a readable foreground color given a background color, or vice versa.
  132.          * It forms a radius around white where black is returned. Outside this radius, white is returned.
  133.          *
  134.          * @param hex An RGB hex (e.g. "#FFFFFF")
  135.          * @requires jQuery and TinyColor
  136.          * @param args The argument object. Properties:
  137.          *      amount: a value in the range [0,1]. If the distance of the given hex from white exceeds this value,
  138.          *          white is returned. Otherwise, black is returned.
  139.          *      xMulti: a multiplier to the distance in the x-axis.
  140.          *      yMulti: a multiplier to the distance in the y-axis.
  141.          *      normalizeHue: either falsey or an [x,y] array range. If hex is a colour with hue in this range,
  142.          *          then normalizeHueXMulti and normalizeHueYMulti are applied.
  143.          *      normalizeHueXMulti: a multiplier to the distance in the x-axis if hue is normalized.
  144.          *      normalizeHueYMulti: a multiplier to the distance in the y-axis if hue is normalized.
  145.          * @return the RGB hex string of black or white.
  146.          */
  147.         base.getReadableColor = function (hex, args) {
  148.             args = $.extend({
  149.                 amount: 0.5,
  150.                 xMulti: 1,
  151.                 // We want to achieve white a bit sooner in the y axis
  152.                 yMulti: 1.5,
  153.                 normalizeHue: [20, 180],
  154.                 // For colors that appear lighter (yellow, green, light blue) we reduce the distance in the x direction,
  155.                 // stretching the radius in the x axis allowing more black than before.
  156.                 normalizeHueXMulti: 1 / 2.5,
  157.                 normalizeHueYMulti: 1
  158.             }, args);
  159.             var color = tinycolor(hex);
  160.             var hsv = color.toHsv();
  161.             // Origin is white
  162.             var coord = {x: hsv.s, y: 1 - hsv.v};
  163.             // Multipliers
  164.             coord.x *= args.xMulti;
  165.             coord.y *= args.yMulti;
  166.             if (args.normalizeHue && hsv.h > args.normalizeHue[0] && hsv.h < args.normalizeHue[1]) {
  167.                 coord.x *= args.normalizeHueXMulti;
  168.                 coord.y *= args.normalizeHueYMulti;
  169.             }
  170.             var dist = Math.sqrt(Math.pow(coord.x, 2) + Math.pow(coord.y, 2));
  171.             if (dist < args.amount) {
  172.                 hsv.v = 0; // black
  173.             } else {
  174.                 hsv.v = 1; // white
  175.             }
  176.             hsv.s = 0;
  177.             return tinycolor(hsv).toHexString();
  178.         };
  179.  
  180.         base.removeChars = function (chars, str) {
  181.             var re = new RegExp('[' + chars + ']', 'gmi');
  182.             return str.replace(re, '');
  183.         }
  184.  
  185.     };
  186.  
  187.     $(document).ready(function () {
  188.         UrvanovSyntaxHighlighterUtil.init();
  189.     });
  190.  
  191.     // http://stackoverflow.com/questions/2360655/jquery-event-handlers-always-execute-in-order-they-were-bound-any-way-around-t
  192.  
  193.     // [name] is the name of the event "click", "mouseover", ..
  194.     // same as you'd pass it to bind()
  195.     // [fn] is the handler function
  196.     $.fn.bindFirst = function (name, fn) {
  197.         // bind as you normally would
  198.         // don't want to miss out on any jQuery magic
  199.         this.bind(name, fn);
  200.         // Thanks to a comment by @Martin, adding support for
  201.         // namespaced events too.
  202.         var handlers = this.data('events')[name.split('.')[0]];
  203.         // take out the handler we just inserted from the end
  204.         var handler = handlers.pop();
  205.         // move it at the beginning
  206.         handlers.splice(0, 0, handler);
  207.     };
  208.  
  209.     // http://stackoverflow.com/questions/4079274/how-to-get-an-objects-properties-in-javascript-jquery
  210.     $.keys = function (obj) {
  211.         var keys = [];
  212.         for (var key in obj) {
  213.             keys.push(key);
  214.         }
  215.         return keys;
  216.     }
  217.  
  218.     // Prototype modifications
  219.  
  220.     RegExp.prototype.execAll = function (string) {
  221.         var matches = [];
  222.         var match = null;
  223.         while ((match = this.exec(string)) != null) {
  224.             var matchArray = [];
  225.             for (var i in match) {
  226.                 if (parseInt(i) == i) {
  227.                     matchArray.push(match[i]);
  228.                 }
  229.             }
  230.             matches.push(matchArray);
  231.         }
  232.         return matches;
  233.     };
  234.  
  235.     // Escape regex chars with \
  236.     RegExp.prototype.escape = function (text) {
  237.         return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
  238.     };
  239.  
  240.     String.prototype.sliceReplace = function (start, end, repl) {
  241.         return this.substring(0, start) + repl + this.substring(end);
  242.     };
  243.  
  244.     String.prototype.escape = function () {
  245.         var tagsToReplace = {
  246.             '&': '&amp;',
  247.             '<': '&lt;',
  248.             '>': '&gt;'
  249.         };
  250.         return this.replace(/[&<>]/g, function (tag) {
  251.             return tagsToReplace[tag] || tag;
  252.         });
  253.     };
  254.  
  255.     String.prototype.linkify = function (target) {
  256.         target = typeof target != 'undefined' ? target : '';
  257.         return this.replace(/(http(s)?:\/\/(\S)+)/gmi, '<a href="$1" target="' + target + '">$1</a>');
  258.     };
  259.  
  260.     String.prototype.toTitleCase = function () {
  261.         var parts = this.split(/\s+/);
  262.         var title = '';
  263.         $.each(parts, function (i, part) {
  264.             if (part != '') {
  265.                 title += part.slice(0, 1).toUpperCase() + part.slice(1, part.length);
  266.                 if (i != parts.length - 1 && parts[i + 1] != '') {
  267.                     title += ' ';
  268.                 }
  269.             }
  270.         });
  271.         return title;
  272.     };
  273.  
  274. })(jQueryUrvanovSyntaxHighlighter);

Raw Paste


Login or Register to edit or fork this paste. It's free.