This script should not be not be installed directly. It is a library for other scripts to include with the meta directive // @require https://update.greatest.deepsurf.us/scripts/38751/253184/Core.js
- (function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.linkifyPlusPlusCore = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
- var _require = require("./lib/url-matcher"),
- UrlMatcher = _require.UrlMatcher,
- _require2 = require("./lib/linkifier"),
- INVALID_TAGS = _require2.INVALID_TAGS,
- Linkifier = _require2.Linkifier,
- linkify = _require2.linkify;
-
- module.exports = {
- UrlMatcher,
- Linkifier,
- INVALID_TAGS,
- linkify
- };
-
- },{"./lib/linkifier":2,"./lib/url-matcher":4}],2:[function(require,module,exports){
- function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
-
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
-
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
- /* eslint-env browser */
-
- var Events = require("event-lite");
-
- var INVALID_TAGS = {
- A: true,
- NOSCRIPT: true,
- OPTION: true,
- SCRIPT: true,
- STYLE: true,
- TEXTAREA: true,
- SVG: true,
- CANVAS: true,
- BUTTON: true,
- SELECT: true,
- TEMPLATE: true,
- METER: true,
- PROGRESS: true,
- MATH: true,
- TIME: true
- };
-
- var Pos = function () {
- function Pos(container, offset) {
- var i = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
-
- _classCallCheck(this, Pos);
-
- this.container = container;
- this.offset = offset;
- this.i = i;
- }
-
- Pos.prototype.add = function add(change) {
- var cont = this.container,
- offset = this.offset;
-
- this.i += change;
-
- // If the container is #text.parentNode
- if (cont.childNodes.length) {
- cont = cont.childNodes[offset];
- offset = 0;
- }
-
- // If the container is #text
- while (cont) {
- if (cont.nodeType == 3) {
- if (!cont.LEN) {
- cont.LEN = cont.nodeValue.length;
- }
- if (offset + change <= cont.LEN) {
- this.container = cont;
- this.offset = offset + change;
- return;
- }
- change = offset + change - cont.LEN;
- offset = 0;
- }
- cont = cont.nextSibling;
- }
- };
-
- Pos.prototype.moveTo = function moveTo(offset) {
- this.add(offset - this.i);
- };
-
- return Pos;
- }();
-
- function cloneContents(range) {
- if (range.startContainer == range.endContainer) {
- return document.createTextNode(range.toString());
- }
- return range.cloneContents();
- }
-
- var DEFAULT_OPTIONS = {
- maxRunTime: 100,
- timeout: 10000,
- newTab: true,
- noOpener: true,
- embedImage: true
- };
-
- var Linkifier = function (_Events) {
- _inherits(Linkifier, _Events);
-
- function Linkifier(root) {
- var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
-
- _classCallCheck(this, Linkifier);
-
- var _this = _possibleConstructorReturn(this, _Events.call(this));
-
- if (!(root instanceof Node)) {
- options = root;
- root = options.root;
- }
- _this.root = root;
- _this.options = Object.assign({}, DEFAULT_OPTIONS, options);
- _this.aborted = false;
- return _this;
- }
-
- Linkifier.prototype.start = function start() {
- var time = Date.now,
- startTime = time(),
- chunks = this.generateChunks();
-
- var next = () => {
- if (this.aborted) {
- this.emit("error", new Error("Aborted"));
- return;
- }
- var chunkStart = time(),
- now;
-
- do {
- if (chunks.next().done) {
- this.emit("complete", time() - startTime);
- return;
- }
- } while ((now = time()) - chunkStart < this.options.maxRunTime);
-
- if (now - startTime > this.options.timeout) {
- this.emit("error", new Error(`max execution time exceeded: ${now - startTime}, on ${this.root}`));
- return;
- }
-
- setTimeout(next);
- };
-
- setTimeout(next);
- };
-
- Linkifier.prototype.abort = function abort() {
- this.aborted = true;
- };
-
- Linkifier.prototype.generateRanges = function* generateRanges() {
- var validator = this.options.validator;
-
- var filter = {
- acceptNode: function (node) {
- if (validator && !validator(node)) {
- return NodeFilter.FILTER_REJECT;
- }
- if (INVALID_TAGS[node.nodeName]) {
- return NodeFilter.FILTER_REJECT;
- }
- if (node.nodeName == "WBR") {
- return NodeFilter.FILTER_ACCEPT;
- }
- if (node.nodeType == 3) {
- return NodeFilter.FILTER_ACCEPT;
- }
- return NodeFilter.FILTER_SKIP;
- }
- };
- // Generate linkified ranges.
- var walker = document.createTreeWalker(this.root, NodeFilter.SHOW_TEXT + NodeFilter.SHOW_ELEMENT, filter),
- start,
- end,
- current,
- range;
-
- end = start = walker.nextNode();
- if (!start) {
- return;
- }
- range = document.createRange();
- range.setStartBefore(start);
- while (current = walker.nextNode()) {
- if (end.nextSibling == current) {
- end = current;
- continue;
- }
- range.setEndAfter(end);
- yield range;
-
- end = start = current;
- range.setStartBefore(start);
- }
- range.setEndAfter(end);
- yield range;
- };
-
- Linkifier.prototype.generateChunks = function* generateChunks() {
- var matcher = this.options.matcher;
-
- for (var range of this.generateRanges()) {
- var frag = null,
- pos = null,
- text = range.toString(),
- textRange = null;
- for (var result of matcher.match(text)) {
- if (!frag) {
- frag = document.createDocumentFragment();
- pos = new Pos(range.startContainer, range.startOffset);
- textRange = range.cloneRange();
- }
- // clone text
- pos.moveTo(result.start);
- textRange.setEnd(pos.container, pos.offset);
- frag.appendChild(cloneContents(textRange));
-
- // clone link
- textRange.collapse();
- pos.moveTo(result.end);
- textRange.setEnd(pos.container, pos.offset);
-
- var content = cloneContents(textRange),
- link = this.buildLink(result, content);
-
- textRange.collapse();
-
- frag.appendChild(link);
- this.emit("link", { link, range, result, content });
- }
- if (pos) {
- pos.moveTo(text.length);
- textRange.setEnd(pos.container, pos.offset);
- frag.appendChild(cloneContents(textRange));
-
- range.deleteContents();
- range.insertNode(frag);
- }
- yield;
- }
- };
-
- Linkifier.prototype.buildLink = function buildLink(result, content) {
- var _options = this.options,
- newTab = _options.newTab,
- embedImage = _options.embedImage,
- noOpener = _options.noOpener;
-
- var link = document.createElement("a");
- link.href = result.url;
- link.title = "Linkify Plus Plus";
- link.className = "linkifyplus";
- if (newTab) {
- link.target = "_blank";
- }
- if (noOpener) {
- link.rel = "noopener";
- }
- var child;
- if (embedImage && /^[^?#]+\.(?:jpg|png|gif|jpeg|svg)(?:$|[?#])/i.test(result.url)) {
- child = new Image();
- child.src = result.url;
- child.alt = result.text;
- } else {
- child = content;
- }
- link.appendChild(child);
- return link;
- };
-
- return Linkifier;
- }(Events);
-
- function linkify() {
- for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
- args[_key] = arguments[_key];
- }
-
- return new Promise((resolve, reject) => {
- var linkifier = new Linkifier(...args);
- linkifier.on("error", reject);
- linkifier.on("complete", resolve);
- for (var key of Object.keys(linkifier.options)) {
- if (key.startsWith("on")) {
- linkifier.on(key.slice(2), linkifier.options[key]);
- }
- }
- linkifier.start();
- });
- }
-
- module.exports = {
- INVALID_TAGS,
- Linkifier,
- linkify
- };
-
- },{"event-lite":5}],3:[function(require,module,exports){
- module.exports={
- "maxLength": 22,
- "chars": "セール佛山à²à²¾à²°à²¤æ…ˆå–„集团在线한êµà¬à¬¾à¬°à¬¤à¦à¦¾à§°à¦¤å…«å¦Ù…وقعবংল公益å¸é¦™æ ¼é‡Œæ‹‰ç½‘ç«™ç§»åŠ¨æˆ‘çˆ±ä½ Ð¼Ð¾Ñквақзнлйтрбгеファッションストア삼성சிஙà¯à®•à®ªà¯‚à®°å•†æ ‡åº—åŸŽÐ´Ð¸ÑŽæ–°é—»å®¶é›»ä¸æ–‡ä¿¡å›½åœ‹å¨±ä¹à°à°¾à°°à°¤à±à¶½à¶‚à¶šà·ã‚¯ãƒ©ã‚¦ãƒ‰à¤à¤¾à¤°à¤¤à¤®à¥à¥‹à¤¸à¤‚गठनé¤åŽ…ç»œÑƒæ¸¯é£Ÿå“é£žåˆ©æµ¦å°æ¹¾ç£æ‰‹æœºØ§Ù„جزئرنیتبپکسديةڀ澳門닷컴شكგე构å¥åº·à¹„ทยфã¿ã‚“ãªÎµÎ»ä¸–界書ç±à´à´¾à´°à´¤à´‚å€ë„·ã‚³ãƒ 游æˆä¼ä¸šæ¯å˜‰å¤§é…’ØµØ·å¹¿ä¸œà®‡à®²à¯ˆà®¨à®¤à®¯à®¾Õ°Õ¡ÕµåŠ å¡Ù政务",
- "table": {
- "aarp": true,
- "abb": true,
- "abbott": true,
- "abc": true,
- "abogado": true,
- "abudhabi": true,
- "ac": true,
- "academy": true,
- "accenture": true,
- "accountant": true,
- "accountants": true,
- "aco": true,
- "active": true,
- "actor": true,
- "ad": true,
- "adult": true,
- "ae": true,
- "aeg": true,
- "aero": true,
- "af": true,
- "afamilycompany": true,
- "afl": true,
- "africa": true,
- "ag": true,
- "agency": true,
- "ai": true,
- "aig": true,
- "airbus": true,
- "airforce": true,
- "al": true,
- "allstate": true,
- "alsace": true,
- "am": true,
- "amfam": true,
- "amica": true,
- "amsterdam": true,
- "analytics": true,
- "ao": true,
- "apartments": true,
- "aq": true,
- "aquarelle": true,
- "ar": true,
- "archi": true,
- "army": true,
- "art": true,
- "arte": true,
- "as": true,
- "asia": true,
- "associates": true,
- "at": true,
- "attorney": true,
- "au": true,
- "auction": true,
- "audi": true,
- "audio": true,
- "auspost": true,
- "auto": true,
- "autos": true,
- "aw": true,
- "aws": true,
- "ax": true,
- "axa": true,
- "az": true,
- "azure": true,
- "ba": true,
- "baby": true,
- "baidu": true,
- "band": true,
- "bank": true,
- "bar": true,
- "barcelona": true,
- "barclaycard": true,
- "barclays": true,
- "bargains": true,
- "basketball": true,
- "bayern": true,
- "bb": true,
- "bbva": true,
- "bd": true,
- "be": true,
- "beer": true,
- "bentley": true,
- "berlin": true,
- "best": true,
- "bet": true,
- "bf": true,
- "bg": true,
- "bh": true,
- "bi": true,
- "bible": true,
- "bid": true,
- "bike": true,
- "bing": true,
- "bingo": true,
- "bio": true,
- "biz": true,
- "bj": true,
- "black": true,
- "blackfriday": true,
- "blanco": true,
- "blog": true,
- "bloomberg": true,
- "blue": true,
- "bm": true,
- "bms": true,
- "bmw": true,
- "bn": true,
- "bnpparibas": true,
- "bo": true,
- "boats": true,
- "bosch": true,
- "bostik": true,
- "boston": true,
- "bot": true,
- "boutique": true,
- "br": true,
- "bradesco": true,
- "bridgestone": true,
- "broadway": true,
- "broker": true,
- "brother": true,
- "brussels": true,
- "bs": true,
- "bt": true,
- "bugatti": true,
- "build": true,
- "builders": true,
- "business": true,
- "buzz": true,
- "bw": true,
- "by": true,
- "bz": true,
- "bzh": true,
- "ca": true,
- "cab": true,
- "cafe": true,
- "cam": true,
- "camera": true,
- "camp": true,
- "cancerresearch": true,
- "canon": true,
- "capetown": true,
- "capital": true,
- "car": true,
- "cards": true,
- "care": true,
- "career": true,
- "careers": true,
- "cars": true,
- "casa": true,
- "cash": true,
- "casino": true,
- "cat": true,
- "catering": true,
- "catholic": true,
- "cba": true,
- "cc": true,
- "cd": true,
- "center": true,
- "ceo": true,
- "cern": true,
- "cf": true,
- "cfa": true,
- "cfd": true,
- "cg": true,
- "ch": true,
- "chanel": true,
- "chase": true,
- "chat": true,
- "cheap": true,
- "christmas": true,
- "church": true,
- "ci": true,
- "cisco": true,
- "citic": true,
- "city": true,
- "ck": true,
- "cl": true,
- "claims": true,
- "cleaning": true,
- "click": true,
- "clinic": true,
- "clothing": true,
- "cloud": true,
- "club": true,
- "clubmed": true,
- "cm": true,
- "cn": true,
- "co": true,
- "coach": true,
- "codes": true,
- "coffee": true,
- "college": true,
- "cologne": true,
- "com": true,
- "community": true,
- "company": true,
- "computer": true,
- "condos": true,
- "construction": true,
- "consulting": true,
- "contractors": true,
- "cooking": true,
- "cool": true,
- "coop": true,
- "corsica": true,
- "country": true,
- "coupons": true,
- "courses": true,
- "cr": true,
- "credit": true,
- "creditcard": true,
- "creditunion": true,
- "cricket": true,
- "crown": true,
- "crs": true,
- "cruises": true,
- "csc": true,
- "cu": true,
- "cuisinella": true,
- "cv": true,
- "cw": true,
- "cx": true,
- "cy": true,
- "cymru": true,
- "cz": true,
- "dabur": true,
- "dance": true,
- "date": true,
- "dating": true,
- "de": true,
- "deals": true,
- "degree": true,
- "delivery": true,
- "dell": true,
- "deloitte": true,
- "democrat": true,
- "dental": true,
- "dentist": true,
- "desi": true,
- "design": true,
- "dhl": true,
- "diamonds": true,
- "diet": true,
- "digital": true,
- "direct": true,
- "directory": true,
- "discount": true,
- "dj": true,
- "dk": true,
- "dm": true,
- "dnp": true,
- "do": true,
- "doctor": true,
- "dog": true,
- "domains": true,
- "download": true,
- "dubai": true,
- "duck": true,
- "durban": true,
- "dvag": true,
- "dz": true,
- "earth": true,
- "ec": true,
- "eco": true,
- "edeka": true,
- "edu": true,
- "education": true,
- "ee": true,
- "eg": true,
- "email": true,
- "emerck": true,
- "energy": true,
- "engineer": true,
- "engineering": true,
- "enterprises": true,
- "equipment": true,
- "er": true,
- "ericsson": true,
- "erni": true,
- "es": true,
- "estate": true,
- "et": true,
- "eu": true,
- "eurovision": true,
- "eus": true,
- "events": true,
- "everbank": true,
- "exchange": true,
- "expert": true,
- "exposed": true,
- "express": true,
- "extraspace": true,
- "fage": true,
- "fail": true,
- "fairwinds": true,
- "faith": true,
- "family": true,
- "fan": true,
- "fans": true,
- "farm": true,
- "fashion": true,
- "feedback": true,
- "ferrero": true,
- "fi": true,
- "film": true,
- "finance": true,
- "financial": true,
- "firmdale": true,
- "fish": true,
- "fishing": true,
- "fit": true,
- "fitness": true,
- "fj": true,
- "fk": true,
- "flights": true,
- "florist": true,
- "flowers": true,
- "fm": true,
- "fo": true,
- "foo": true,
- "football": true,
- "ford": true,
- "forex": true,
- "forsale": true,
- "forum": true,
- "foundation": true,
- "fox": true,
- "fr": true,
- "fresenius": true,
- "frl": true,
- "frogans": true,
- "fujitsu": true,
- "fujixerox": true,
- "fun": true,
- "fund": true,
- "furniture": true,
- "futbol": true,
- "fyi": true,
- "ga": true,
- "gal": true,
- "gallery": true,
- "game": true,
- "games": true,
- "garden": true,
- "gd": true,
- "gdn": true,
- "ge": true,
- "gea": true,
- "gent": true,
- "genting": true,
- "gf": true,
- "gg": true,
- "gh": true,
- "gi": true,
- "gift": true,
- "gifts": true,
- "gives": true,
- "gl": true,
- "glade": true,
- "glass": true,
- "global": true,
- "globo": true,
- "gm": true,
- "gmail": true,
- "gmbh": true,
- "gmo": true,
- "gn": true,
- "gold": true,
- "golf": true,
- "goo": true,
- "goog": true,
- "google": true,
- "gop": true,
- "gov": true,
- "gp": true,
- "gq": true,
- "gr": true,
- "graphics": true,
- "gratis": true,
- "green": true,
- "gripe": true,
- "group": true,
- "gs": true,
- "gt": true,
- "gu": true,
- "guardian": true,
- "gucci": true,
- "guide": true,
- "guitars": true,
- "guru": true,
- "gw": true,
- "gy": true,
- "hamburg": true,
- "haus": true,
- "health": true,
- "healthcare": true,
- "help": true,
- "here": true,
- "hiphop": true,
- "hisamitsu": true,
- "hitachi": true,
- "hiv": true,
- "hk": true,
- "hm": true,
- "hn": true,
- "hockey": true,
- "holdings": true,
- "holiday": true,
- "homes": true,
- "honda": true,
- "horse": true,
- "hospital": true,
- "host": true,
- "hosting": true,
- "hoteles": true,
- "hotmail": true,
- "house": true,
- "how": true,
- "hr": true,
- "hsbc": true,
- "ht": true,
- "hu": true,
- "ice": true,
- "id": true,
- "ie": true,
- "ifm": true,
- "ikano": true,
- "il": true,
- "im": true,
- "immo": true,
- "immobilien": true,
- "in": true,
- "industries": true,
- "info": true,
- "ink": true,
- "institute": true,
- "insurance": true,
- "insure": true,
- "int": true,
- "international": true,
- "investments": true,
- "io": true,
- "ipiranga": true,
- "iq": true,
- "ir": true,
- "irish": true,
- "is": true,
- "iselect": true,
- "ismaili": true,
- "ist": true,
- "istanbul": true,
- "it": true,
- "itv": true,
- "jaguar": true,
- "java": true,
- "jcb": true,
- "je": true,
- "jetzt": true,
- "jewelry": true,
- "jll": true,
- "jm": true,
- "jmp": true,
- "jnj": true,
- "jo": true,
- "jobs": true,
- "joburg": true,
- "jp": true,
- "jprs": true,
- "juegos": true,
- "kaufen": true,
- "ke": true,
- "kerryhotels": true,
- "kg": true,
- "kh": true,
- "ki": true,
- "kia": true,
- "kim": true,
- "kinder": true,
- "kitchen": true,
- "kiwi": true,
- "km": true,
- "kn": true,
- "koeln": true,
- "komatsu": true,
- "kp": true,
- "kpn": true,
- "kr": true,
- "krd": true,
- "kred": true,
- "kw": true,
- "ky": true,
- "kyoto": true,
- "kz": true,
- "la": true,
- "ladbrokes": true,
- "lamborghini": true,
- "lancaster": true,
- "land": true,
- "landrover": true,
- "lanxess": true,
- "lat": true,
- "latrobe": true,
- "law": true,
- "lawyer": true,
- "lb": true,
- "lc": true,
- "lease": true,
- "leclerc": true,
- "legal": true,
- "lego": true,
- "lexus": true,
- "lgbt": true,
- "li": true,
- "liaison": true,
- "lidl": true,
- "life": true,
- "lighting": true,
- "lilly": true,
- "limited": true,
- "limo": true,
- "linde": true,
- "link": true,
- "lipsy": true,
- "live": true,
- "lixil": true,
- "lk": true,
- "loan": true,
- "loans": true,
- "locus": true,
- "lol": true,
- "london": true,
- "lotto": true,
- "love": true,
- "lr": true,
- "ls": true,
- "lt": true,
- "ltd": true,
- "ltda": true,
- "lu": true,
- "lundbeck": true,
- "lupin": true,
- "luxury": true,
- "lv": true,
- "ly": true,
- "ma": true,
- "maif": true,
- "maison": true,
- "makeup": true,
- "man": true,
- "management": true,
- "mango": true,
- "market": true,
- "marketing": true,
- "markets": true,
- "marriott": true,
- "mba": true,
- "mc": true,
- "md": true,
- "me": true,
- "med": true,
- "media": true,
- "meet": true,
- "melbourne": true,
- "memorial": true,
- "men": true,
- "menu": true,
- "mg": true,
- "mh": true,
- "miami": true,
- "microsoft": true,
- "mil": true,
- "mini": true,
- "mk": true,
- "ml": true,
- "mlb": true,
- "mm": true,
- "mma": true,
- "mn": true,
- "mo": true,
- "mobi": true,
- "moda": true,
- "moe": true,
- "moi": true,
- "mom": true,
- "monash": true,
- "money": true,
- "mortgage": true,
- "moscow": true,
- "motorcycles": true,
- "movie": true,
- "mp": true,
- "mq": true,
- "mr": true,
- "ms": true,
- "mt": true,
- "mtn": true,
- "mtr": true,
- "mu": true,
- "museum": true,
- "mutual": true,
- "mv": true,
- "mw": true,
- "mx": true,
- "my": true,
- "mz": true,
- "na": true,
- "nab": true,
- "nadex": true,
- "nagoya": true,
- "name": true,
- "nationwide": true,
- "natura": true,
- "navy": true,
- "nc": true,
- "ne": true,
- "nec": true,
- "net": true,
- "network": true,
- "neustar": true,
- "new": true,
- "news": true,
- "next": true,
- "nextdirect": true,
- "nf": true,
- "ng": true,
- "ngo": true,
- "ni": true,
- "nico": true,
- "nikon": true,
- "ninja": true,
- "nissay": true,
- "nl": true,
- "no": true,
- "nokia": true,
- "norton": true,
- "np": true,
- "nr": true,
- "nra": true,
- "nrw": true,
- "ntt": true,
- "nu": true,
- "nyc": true,
- "nz": true,
- "obi": true,
- "observer": true,
- "off": true,
- "okinawa": true,
- "om": true,
- "omega": true,
- "one": true,
- "ong": true,
- "onl": true,
- "online": true,
- "onyourside": true,
- "ooo": true,
- "oracle": true,
- "orange": true,
- "org": true,
- "organic": true,
- "osaka": true,
- "otsuka": true,
- "ovh": true,
- "pa": true,
- "page": true,
- "paris": true,
- "partners": true,
- "parts": true,
- "party": true,
- "pe": true,
- "pet": true,
- "pf": true,
- "pg": true,
- "ph": true,
- "pharmacy": true,
- "philips": true,
- "photo": true,
- "photography": true,
- "photos": true,
- "physio": true,
- "pics": true,
- "pictet": true,
- "pictures": true,
- "pink": true,
- "pioneer": true,
- "pizza": true,
- "pk": true,
- "pl": true,
- "place": true,
- "plumbing": true,
- "plus": true,
- "pm": true,
- "pn": true,
- "poker": true,
- "porn": true,
- "post": true,
- "pr": true,
- "praxi": true,
- "press": true,
- "pro": true,
- "productions": true,
- "promo": true,
- "properties": true,
- "property": true,
- "protection": true,
- "pru": true,
- "prudential": true,
- "ps": true,
- "pt": true,
- "pub": true,
- "pw": true,
- "py": true,
- "qa": true,
- "qpon": true,
- "quebec": true,
- "racing": true,
- "radio": true,
- "raid": true,
- "re": true,
- "realtor": true,
- "realty": true,
- "recipes": true,
- "red": true,
- "redstone": true,
- "rehab": true,
- "reise": true,
- "reisen": true,
- "reit": true,
- "ren": true,
- "rent": true,
- "rentals": true,
- "repair": true,
- "report": true,
- "republican": true,
- "rest": true,
- "restaurant": true,
- "review": true,
- "reviews": true,
- "rexroth": true,
- "rich": true,
- "ricoh": true,
- "rio": true,
- "rip": true,
- "ro": true,
- "rocks": true,
- "rodeo": true,
- "rs": true,
- "ru": true,
- "ruhr": true,
- "run": true,
- "rw": true,
- "rwe": true,
- "ryukyu": true,
- "sa": true,
- "saarland": true,
- "sale": true,
- "salon": true,
- "samsung": true,
- "sandvik": true,
- "sandvikcoromant": true,
- "sanofi": true,
- "sap": true,
- "sarl": true,
- "saxo": true,
- "sb": true,
- "sbi": true,
- "sbs": true,
- "sc": true,
- "sca": true,
- "scb": true,
- "schmidt": true,
- "school": true,
- "schule": true,
- "schwarz": true,
- "science": true,
- "scjohnson": true,
- "scot": true,
- "sd": true,
- "se": true,
- "seat": true,
- "security": true,
- "sener": true,
- "services": true,
- "ses": true,
- "seven": true,
- "sew": true,
- "sex": true,
- "sexy": true,
- "sfr": true,
- "sg": true,
- "sh": true,
- "shangrila": true,
- "sharp": true,
- "shell": true,
- "shiksha": true,
- "shoes": true,
- "shop": true,
- "shopping": true,
- "show": true,
- "shriram": true,
- "si": true,
- "singles": true,
- "site": true,
- "sk": true,
- "ski": true,
- "skin": true,
- "sky": true,
- "skype": true,
- "sl": true,
- "sm": true,
- "smart": true,
- "sn": true,
- "sncf": true,
- "so": true,
- "soccer": true,
- "social": true,
- "software": true,
- "sohu": true,
- "solar": true,
- "solutions": true,
- "sony": true,
- "soy": true,
- "space": true,
- "spreadbetting": true,
- "sr": true,
- "srl": true,
- "st": true,
- "stada": true,
- "statefarm": true,
- "statoil": true,
- "stc": true,
- "storage": true,
- "store": true,
- "stream": true,
- "studio": true,
- "study": true,
- "style": true,
- "su": true,
- "sucks": true,
- "supplies": true,
- "supply": true,
- "support": true,
- "surf": true,
- "surgery": true,
- "suzuki": true,
- "sv": true,
- "swatch": true,
- "swiss": true,
- "sx": true,
- "sy": true,
- "sydney": true,
- "symantec": true,
- "systems": true,
- "sz": true,
- "taipei": true,
- "tatamotors": true,
- "tatar": true,
- "tattoo": true,
- "tax": true,
- "taxi": true,
- "tc": true,
- "td": true,
- "team": true,
- "tech": true,
- "technology": true,
- "tel": true,
- "tennis": true,
- "teva": true,
- "tf": true,
- "tg": true,
- "th": true,
- "theater": true,
- "theatre": true,
- "tickets": true,
- "tienda": true,
- "tiffany": true,
- "tips": true,
- "tires": true,
- "tirol": true,
- "tj": true,
- "tk": true,
- "tl": true,
- "tm": true,
- "tn": true,
- "to": true,
- "today": true,
- "tokyo": true,
- "tools": true,
- "top": true,
- "toray": true,
- "toshiba": true,
- "total": true,
- "tours": true,
- "town": true,
- "toyota": true,
- "toys": true,
- "tr": true,
- "trade": true,
- "trading": true,
- "training": true,
- "travel": true,
- "travelers": true,
- "trust": true,
- "tt": true,
- "tube": true,
- "tv": true,
- "tw": true,
- "tz": true,
- "ua": true,
- "ubs": true,
- "ug": true,
- "uk": true,
- "university": true,
- "uno": true,
- "uol": true,
- "us": true,
- "uy": true,
- "uz": true,
- "va": true,
- "vacations": true,
- "vanguard": true,
- "vc": true,
- "ve": true,
- "vegas": true,
- "ventures": true,
- "versicherung": true,
- "vet": true,
- "vg": true,
- "vi": true,
- "viajes": true,
- "video": true,
- "vig": true,
- "villas": true,
- "vin": true,
- "vip": true,
- "vision": true,
- "vistaprint": true,
- "vlaanderen": true,
- "vn": true,
- "vodka": true,
- "volkswagen": true,
- "volvo": true,
- "vote": true,
- "voting": true,
- "voto": true,
- "voyage": true,
- "vu": true,
- "wales": true,
- "walter": true,
- "wang": true,
- "warman": true,
- "watch": true,
- "webcam": true,
- "weber": true,
- "website": true,
- "wed": true,
- "wedding": true,
- "weir": true,
- "wf": true,
- "whoswho": true,
- "wien": true,
- "wiki": true,
- "williamhill": true,
- "win": true,
- "windows": true,
- "wine": true,
- "wme": true,
- "woodside": true,
- "work": true,
- "works": true,
- "world": true,
- "ws": true,
- "wtf": true,
- "xbox": true,
- "xerox": true,
- "xin": true,
- "xn--1ck2e1b": true,
- "xn--1qqw23a": true,
- "xn--2scrj9c": true,
- "xn--30rr7y": true,
- "xn--3bst00m": true,
- "xn--3ds443g": true,
- "xn--3e0b707e": true,
- "xn--3hcrj9c": true,
- "xn--45br5cyl": true,
- "xn--45q11c": true,
- "xn--4gbrim": true,
- "xn--54b7fta0cc": true,
- "xn--55qw42g": true,
- "xn--55qx5d": true,
- "xn--5su34j936bgsg": true,
- "xn--5tzm5g": true,
- "xn--6frz82g": true,
- "xn--6qq986b3xl": true,
- "xn--80adxhks": true,
- "xn--80ao21a": true,
- "xn--80asehdb": true,
- "xn--80aswg": true,
- "xn--90a3ac": true,
- "xn--90ae": true,
- "xn--90ais": true,
- "xn--bck1b9a5dre4c": true,
- "xn--c1avg": true,
- "xn--cck2b3b": true,
- "xn--cg4bki": true,
- "xn--clchc0ea0b2g2a9gcd": true,
- "xn--czr694b": true,
- "xn--czrs0t": true,
- "xn--czru2d": true,
- "xn--d1acj3b": true,
- "xn--d1alf": true,
- "xn--e1a4c": true,
- "xn--efvy88h": true,
- "xn--fct429k": true,
- "xn--fiq228c5hs": true,
- "xn--fiq64b": true,
- "xn--fiqs8s": true,
- "xn--fiqz9s": true,
- "xn--fjq720a": true,
- "xn--fpcrj9c3d": true,
- "xn--fzc2c9e2c": true,
- "xn--gckr3f0f": true,
- "xn--h2breg3eve": true,
- "xn--h2brj9c": true,
- "xn--h2brj9c8c": true,
- "xn--hxt814e": true,
- "xn--i1b6b1a6a2e": true,
- "xn--imr513n": true,
- "xn--io0a7i": true,
- "xn--j1amh": true,
- "xn--j6w193g": true,
- "xn--jvr189m": true,
- "xn--kcrx77d1x4a": true,
- "xn--kprw13d": true,
- "xn--kpry57d": true,
- "xn--kput3i": true,
- "xn--l1acc": true,
- "xn--lgbbat1ad8j": true,
- "xn--mgb9awbf": true,
- "xn--mgba3a4f16a": true,
- "xn--mgbaam7a8h": true,
- "xn--mgbab2bd": true,
- "xn--mgbai9azgqp6j": true,
- "xn--mgbayh7gpa": true,
- "xn--mgbbh1a": true,
- "xn--mgberp4a5d4ar": true,
- "xn--mgbgu82a": true,
- "xn--mgbpl2fh": true,
- "xn--mgbtx2b": true,
- "xn--mix891f": true,
- "xn--mk1bu44c": true,
- "xn--ngbc5azd": true,
- "xn--node": true,
- "xn--nqv7f": true,
- "xn--nyqy26a": true,
- "xn--o3cw4h": true,
- "xn--ogbpf8fl": true,
- "xn--p1acf": true,
- "xn--p1ai": true,
- "xn--pgbs0dh": true,
- "xn--q9jyb4c": true,
- "xn--qxam": true,
- "xn--rhqv96g": true,
- "xn--rovu88b": true,
- "xn--rvc1e0am3e": true,
- "xn--ses554g": true,
- "xn--t60b56a": true,
- "xn--tckwe": true,
- "xn--unup4y": true,
- "xn--vhquv": true,
- "xn--vuq861b": true,
- "xn--w4r85el8fhu5dnra": true,
- "xn--wgbh1c": true,
- "xn--wgbl6a": true,
- "xn--xhq521b": true,
- "xn--xkc2al3hye2a": true,
- "xn--xkc2dl3a5ee0h": true,
- "xn--y9a3aq": true,
- "xn--yfro4i67o": true,
- "xn--ygbi2ammx": true,
- "xn--zfr164b": true,
- "xperia": true,
- "xxx": true,
- "xyz": true,
- "yachts": true,
- "yandex": true,
- "ye": true,
- "yoga": true,
- "yokohama": true,
- "yt": true,
- "za": true,
- "zm": true,
- "zone": true,
- "zw": true,
- "セール": true,
- "佛山": true,
- "à²à²¾à²°à²¤": true,
- "慈善": true,
- "集团": true,
- "在线": true,
- "한êµ": true,
- "à¬à¬¾à¬°à¬¤": true,
- "à¦à¦¾à§°à¦¤": true,
- "å…«å¦": true,
- "موقع": true,
- "বাংলা": true,
- "公益": true,
- "å…¬å¸": true,
- "é¦™æ ¼é‡Œæ‹‰": true,
- "网站": true,
- "移动": true,
- "æˆ‘çˆ±ä½ ": true,
- "моÑква": true,
- "қаз": true,
- "онлайн": true,
- "Ñайт": true,
- "Ñрб": true,
- "бг": true,
- "бел": true,
- "ファッション": true,
- "орг": true,
- "ストア": true,
- "삼성": true,
- "சிஙà¯à®•பà¯à®ªà¯‚à®°à¯": true,
- "å•†æ ‡": true,
- "商店": true,
- "商城": true,
- "дети": true,
- "мкд": true,
- "ею": true,
- "æ–°é—»": true,
- "å®¶é›»": true,
- "䏿–‡ç½‘": true,
- "ä¸ä¿¡": true,
- "ä¸å›½": true,
- "ä¸åœ‹": true,
- "娱ä¹": true,
- "à°à°¾à°°à°¤à±": true,
- "ලංකà·": true,
- "クラウド": true,
- "à¤à¤¾à¤°à¤¤à¤®à¥": true,
- "à¤à¤¾à¤°à¤¤": true,
- "à¤à¤¾à¤°à¥‹à¤¤": true,
- "网店": true,
- "संगठन": true,
- "é¤åŽ…": true,
- "网络": true,
- "укр": true,
- "香港": true,
- "食å“": true,
- "飞利浦": true,
- "å°æ¹¾": true,
- "å°ç£": true,
- "手机": true,
- "мон": true,
- "الجزائر": true,
- "عمان": true,
- "ایران": true,
- "امارات": true,
- "بازار": true,
- "پاکستان": true,
- "الاردن": true,
- "بارت": true,
- "السعودية": true,
- "ڀارت": true,
- "سودان": true,
- "عراق": true,
- "澳門": true,
- "ë‹·ì»´": true,
- "شبكة": true,
- "გე": true,
- "机构": true,
- "å¥åº·": true,
- "ไทย": true,
- "سورية": true,
- "руÑ": true,
- "рф": true,
- "تونس": true,
- "ã¿ã‚“ãª": true,
- "ελ": true,
- "世界": true,
- "書ç±": true,
- "à´à´¾à´°à´¤à´‚": true,
- "网å€": true,
- "ë‹·ë„·": true,
- "コム": true,
- "游æˆ": true,
- "ä¼ä¸š": true,
- "ä¿¡æ¯": true,
- "嘉里大酒店": true,
- "مصر": true,
- "قطر": true,
- "广东": true,
- "இலஙà¯à®•ை": true,
- "இநà¯à®¤à®¿à®¯à®¾": true,
- "Õ°Õ¡Õµ": true,
- "æ–°åŠ å¡": true,
- "Ùلسطين": true,
- "政务": true
- }
- }
- },{}],4:[function(require,module,exports){
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
- var tlds = require("./tlds.json"),
- RE = {
- PROTOCOL: "([a-z][-a-z*]+://)?",
- USER: "(?:([\\w:.+-]+)@)?",
- DOMAIN_UNI: `([a-z0-9-.\\u00A0-\\uFFFF]+\\.[a-z0-9-${tlds.chars}]{1,${tlds.maxLength}})`,
- DOMAIN: `([a-z0-9-.]+\\.[a-z0-9-]{1,${tlds.maxLength}})`,
- PORT: "(:\\d+\\b)?",
- PATH_UNI: "([/?#]\\S*)?",
- PATH: "([/?#][\\w-.~!$&*+;=:@%/?#(),'\\[\\]]*)?"
- },
- TLD_TABLE = tlds.table;
-
- function regexEscape(text) {
- return text.replace(/[[\]\\^-]/g, "\\$&");
- }
-
- function buildRegex(_ref) {
- var _ref$unicode = _ref.unicode,
- unicode = _ref$unicode === undefined ? false : _ref$unicode,
- _ref$customRules = _ref.customRules,
- customRules = _ref$customRules === undefined ? [] : _ref$customRules,
- _ref$standalone = _ref.standalone,
- standalone = _ref$standalone === undefined ? false : _ref$standalone,
- boundaryLeft = _ref.boundaryLeft,
- boundaryRight = _ref.boundaryRight;
-
- var pattern = RE.PROTOCOL + RE.USER;
-
- if (unicode) {
- pattern += RE.DOMAIN_UNI + RE.PORT + RE.PATH_UNI;
- } else {
- pattern += RE.DOMAIN + RE.PORT + RE.PATH;
- }
-
- if (customRules.length) {
- pattern = "(?:" + pattern + "|(" + customRules.join("|") + "))";
- } else {
- pattern += "()";
- }
-
- var prefix, suffix, invalidSuffix;
- if (standalone) {
- if (boundaryLeft) {
- prefix = "((?:^|\\s)[" + regexEscape(boundaryLeft) + "]*?)";
- } else {
- prefix = "(^|\\s)";
- }
- if (boundaryRight) {
- suffix = "([" + regexEscape(boundaryRight) + "]*(?:$|\\s))";
- } else {
- suffix = "($|\\s)";
- }
- invalidSuffix = "[^\\s" + regexEscape(boundaryRight) + "]";
- } else {
- prefix = "(^|\\b|_)";
- suffix = "()";
- }
-
- pattern = prefix + pattern + suffix;
-
- return {
- url: new RegExp(pattern, "igm"),
- invalidSuffix: invalidSuffix && new RegExp(invalidSuffix),
- mustache: /\{\{[\s\S]+?\}\}/g
- };
- }
-
- function pathStrip(m, re, repl) {
- var s = m.path.replace(re, repl);
-
- if (s == m.path) return;
-
- m.end -= m.path.length - s.length;
- m.suffix = m.path.slice(s.length) + m.suffix;
- m.path = s;
- }
-
- function pathStripQuote(m, c) {
- var i = 0,
- s = m.path,
- end,
- pos = 0;
-
- if (!s.endsWith(c)) return;
-
- while ((pos = s.indexOf(c, pos)) >= 0) {
- if (i % 2) {
- end = null;
- } else {
- end = pos;
- }
- pos++;
- i++;
- }
-
- if (!end) return;
-
- m.end -= s.length - end;
- m.path = s.slice(0, end);
- m.suffix = s.slice(end) + m.suffix;
- }
-
- function pathStripBrace(m, left, right) {
- var str = m.path,
- re = new RegExp("[\\" + left + "\\" + right + "]", "g"),
- match,
- count = 0,
- end;
-
- // Match loop
- while (match = re.exec(str)) {
- if (count % 2 == 0) {
- end = match.index;
- if (match[0] == right) {
- break;
- }
- } else {
- if (match[0] == left) {
- break;
- }
- }
- count++;
- }
-
- if (!match && count % 2 == 0) {
- return;
- }
-
- m.end -= m.path.length - end;
- m.path = str.slice(0, end);
- m.suffix = str.slice(end) + m.suffix;
- }
-
- function isIP(s) {
- var m, i;
- if (!(m = s.match(/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/))) {
- return false;
- }
- for (i = 1; i < m.length; i++) {
- if (+m[i] > 255 || m[i].length > 1 && m[i][0] == "0") {
- return false;
- }
- }
- return true;
- }
-
- function isDomain(d) {
- return (/^[^.-]/.test(d) && d.indexOf("..") < 0
- );
- }
-
- function inTLDS(domain) {
- var match = domain.match(/\.([^.]+)$/);
- if (!match) {
- return false;
- }
- var key = match[1].toLowerCase();
- return TLD_TABLE.hasOwnProperty(key);
- }
-
- var UrlMatcher = function () {
- function UrlMatcher() {
- var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
-
- _classCallCheck(this, UrlMatcher);
-
- this.options = options;
- this.regex = buildRegex(options);
- }
-
- UrlMatcher.prototype.match = function* match(text) {
- var _options = this.options,
- _options$fuzzyIp = _options.fuzzyIp,
- fuzzyIp = _options$fuzzyIp === undefined ? true : _options$fuzzyIp,
- _options$ignoreMustac = _options.ignoreMustache,
- ignoreMustache = _options$ignoreMustac === undefined ? false : _options$ignoreMustac,
- _regex = this.regex,
- url = _regex.url,
- invalidSuffix = _regex.invalidSuffix,
- mustache = _regex.mustache,
- urlLastIndex,
- mustacheLastIndex;
-
-
- mustache.lastIndex = 0;
- url.lastIndex = 0;
-
- var mustacheMatch, mustacheRange;
- if (ignoreMustache) {
- mustacheMatch = mustache.exec(text);
- if (mustacheMatch) {
- mustacheRange = {
- start: mustacheMatch.index,
- end: mustache.lastIndex
- };
- }
- }
-
- var urlMatch;
- while (urlMatch = url.exec(text)) {
- var result;
- if (urlMatch[7]) {
- // custom rules
- result = {
- start: urlMatch.index,
- end: url.lastIndex,
-
- text: urlMatch[0],
- url: urlMatch[0],
-
- custom: urlMatch[7]
- };
- } else {
- result = {
- start: urlMatch.index + urlMatch[1].length,
- end: url.lastIndex - urlMatch[8].length,
-
- text: null,
- url: null,
-
- prefix: urlMatch[1],
- protocol: urlMatch[2],
- auth: urlMatch[3] || "",
- domain: urlMatch[4],
- port: urlMatch[5] || "",
- path: urlMatch[6] || "",
- custom: urlMatch[7],
- suffix: urlMatch[8]
- };
- }
-
- if (mustacheRange && mustacheRange.end <= result.start) {
- mustacheMatch = mustache.exec(text);
- if (mustacheMatch) {
- mustacheRange.start = mustacheMatch.index;
- mustacheRange.end = mustache.lastIndex;
- } else {
- mustacheRange = null;
- }
- }
-
- // ignore urls inside mustache pair
- if (mustacheRange && result.start < mustacheRange.end && result.end >= mustacheRange.start) {
- continue;
- }
-
- if (!result.custom) {
- // adjust path and suffix
- if (result.path) {
- // Strip BBCode
- pathStrip(result, /\[\/?(b|i|u|url|img|quote|code|size|color)\].*/i, "");
-
- // Strip braces
- pathStripBrace(result, "(", ")");
- pathStripBrace(result, "[", "]");
- pathStripBrace(result, "{", "}");
-
- // Strip quotes
- pathStripQuote(result, "'");
- pathStripQuote(result, '"');
-
- // Remove trailing ".,?"
- pathStrip(result, /(^|[^-_])[.,?]+$/, "$1");
- }
-
- // check suffix
- if (invalidSuffix && invalidSuffix.test(result.suffix)) {
- if (/\s$/.test(result.suffix)) {
- url.lastIndex--;
- }
- continue;
- }
-
- // check domain
- if (isIP(result.domain)) {
- if (!fuzzyIp && !result.protocol && !result.auth && !result.path) {
- continue;
- }
- } else if (isDomain(result.domain)) {
- if (!inTLDS(result.domain)) {
- continue;
- }
- } else {
- continue;
- }
-
- // mailto protocol
- if (!result.protocol && result.auth) {
- var matchMail = result.auth.match(/^mailto:(.+)/);
- if (matchMail) {
- result.protocol = "mailto:";
- result.auth = matchMail[1];
- }
- }
-
- // http alias
- if (result.protocol && result.protocol.match(/^(hxxp|h\*\*p|ttp)/)) {
- result.protocol = "http://";
- }
-
- // guess protocol
- if (!result.protocol) {
- var domainMatch;
- if (domainMatch = result.domain.match(/^(ftp|irc)/)) {
- result.protocol = domainMatch[0] + "://";
- } else if (result.domain.match(/^(www|web)/)) {
- result.protocol = "http://";
- } else if (result.auth && result.auth.indexOf(":") < 0 && !result.path) {
- result.protocol = "mailto:";
- } else {
- result.protocol = "http://";
- }
- }
-
- // Create URL
- result.url = result.protocol + (result.auth && result.auth + "@") + result.domain + result.port + result.path;
- result.text = text.slice(result.start, result.end);
- }
-
- // since regex is shared with other parse generators, cache lastIndex position and restore later
- mustacheLastIndex = mustache.lastIndex;
- urlLastIndex = url.lastIndex;
-
- yield result;
-
- url.lastIndex = urlLastIndex;
- mustache.lastIndex = mustacheLastIndex;
- }
- };
-
- return UrlMatcher;
- }();
-
- module.exports = {
- UrlMatcher
- };
-
- },{"./tlds.json":3}],5:[function(require,module,exports){
- /**
- * event-lite.js - Light-weight EventEmitter (less than 1KB when gzipped)
- *
- * @copyright Yusuke Kawasaki
- * @license MIT
- * @constructor
- * @see https://github.com/kawanet/event-lite
- * @see http://kawanet.github.io/event-lite/EventLite.html
- * @example
- * var EventLite = require("event-lite");
- *
- * function MyClass() {...} // your class
- *
- * EventLite.mixin(MyClass.prototype); // import event methods
- *
- * var obj = new MyClass();
- * obj.on("foo", function() {...}); // add event listener
- * obj.once("bar", function() {...}); // add one-time event listener
- * obj.emit("foo"); // dispatch event
- * obj.emit("bar"); // dispatch another event
- * obj.off("foo"); // remove event listener
- */
-
- function EventLite() {
- if (!(this instanceof EventLite)) return new EventLite();
- }
-
- (function(EventLite) {
- // export the class for node.js
- if ("undefined" !== typeof module) module.exports = EventLite;
-
- // property name to hold listeners
- var LISTENERS = "listeners";
-
- // methods to export
- var methods = {
- on: on,
- once: once,
- off: off,
- emit: emit
- };
-
- // mixin to self
- mixin(EventLite.prototype);
-
- // export mixin function
- EventLite.mixin = mixin;
-
- /**
- * Import on(), once(), off() and emit() methods into target object.
- *
- * @function EventLite.mixin
- * @param target {Prototype}
- */
-
- function mixin(target) {
- for (var key in methods) {
- target[key] = methods[key];
- }
- return target;
- }
-
- /**
- * Add an event listener.
- *
- * @function EventLite.prototype.on
- * @param type {string}
- * @param func {Function}
- * @returns {EventLite} Self for method chaining
- */
-
- function on(type, func) {
- getListeners(this, type).push(func);
- return this;
- }
-
- /**
- * Add one-time event listener.
- *
- * @function EventLite.prototype.once
- * @param type {string}
- * @param func {Function}
- * @returns {EventLite} Self for method chaining
- */
-
- function once(type, func) {
- var that = this;
- wrap.originalListener = func;
- getListeners(that, type).push(wrap);
- return that;
-
- function wrap() {
- off.call(that, type, wrap);
- func.apply(this, arguments);
- }
- }
-
- /**
- * Remove an event listener.
- *
- * @function EventLite.prototype.off
- * @param [type] {string}
- * @param [func] {Function}
- * @returns {EventLite} Self for method chaining
- */
-
- function off(type, func) {
- var that = this;
- var listners;
- if (!arguments.length) {
- delete that[LISTENERS];
- } else if (!func) {
- listners = that[LISTENERS];
- if (listners) {
- delete listners[type];
- if (!Object.keys(listners).length) return off.call(that);
- }
- } else {
- listners = getListeners(that, type, true);
- if (listners) {
- listners = listners.filter(ne);
- if (!listners.length) return off.call(that, type);
- that[LISTENERS][type] = listners;
- }
- }
- return that;
-
- function ne(test) {
- return test !== func && test.originalListener !== func;
- }
- }
-
- /**
- * Dispatch (trigger) an event.
- *
- * @function EventLite.prototype.emit
- * @param type {string}
- * @param [value] {*}
- * @returns {boolean} True when a listener received the event
- */
-
- function emit(type, value) {
- var that = this;
- var listeners = getListeners(that, type, true);
- if (!listeners) return false;
- var arglen = arguments.length;
- if (arglen === 1) {
- listeners.forEach(zeroarg);
- } else if (arglen === 2) {
- listeners.forEach(onearg);
- } else {
- var args = Array.prototype.slice.call(arguments, 1);
- listeners.forEach(moreargs);
- }
- return !!listeners.length;
-
- function zeroarg(func) {
- func.call(that);
- }
-
- function onearg(func) {
- func.call(that, value);
- }
-
- function moreargs(func) {
- func.apply(that, args);
- }
- }
-
- /**
- * @ignore
- */
-
- function getListeners(that, type, readonly) {
- if (readonly && !that[LISTENERS]) return;
- var listeners = that[LISTENERS] || (that[LISTENERS] = {});
- return listeners[type] || (listeners[type] = []);
- }
-
- })(EventLite);
-
- },{}]},{},[1])(1)
- });