Comparing version 2.7.1 to 2.7.2
615
bundle.js
@@ -1,2 +0,2 @@ | ||
(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.ltx = 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){ | ||
(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.ltx = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){ | ||
'use strict' | ||
@@ -616,14 +616,26 @@ | ||
'&': '&', | ||
'&': '&', | ||
'<': '<', | ||
'<': '<', | ||
'>': '>', | ||
'>': '>', | ||
'"': '"', | ||
'"': '"', | ||
''': "'", | ||
''': "'" | ||
''': "'" | ||
} | ||
function unescapeXMLReplace (match) { | ||
if (match[1] === '#') { | ||
var num | ||
if (match[2] === 'x') { | ||
num = parseInt(match.slice(3), 16) | ||
} else { | ||
num = parseInt(match.slice(2), 10) | ||
} | ||
// https://www.w3.org/TR/xml/#NT-Char defines legal XML characters: | ||
// #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF] | ||
if (num === 0x9 || num === 0xA || num === 0xD || | ||
(num >= 0x20 && num <= 0xD7FF) || | ||
(num >= 0xE000 && num <= 0xFFFD) || | ||
(num >= 0x10000 && num <= 0x10FFFF)) { | ||
return String.fromCodePoint(num) | ||
} | ||
throw new Error(`Illegal XML character 0x${num.toString(16)}`) | ||
} | ||
return unescapeXMLTable[match] | ||
@@ -637,3 +649,3 @@ } | ||
exports.unescapeXML = function unescapeXML (s) { | ||
return s.replace(/&(amp|#38|lt|#60|gt|#62|quot|#34|apos|#39);/g, unescapeXMLReplace) | ||
return s.replace(/&(amp|lt|gt|quot|apos|#x[0-9a-fA-F]+|#[0-9]+);/g, unescapeXMLReplace) | ||
} | ||
@@ -980,4 +992,12 @@ | ||
var objectCreate = Object.create || objectCreatePolyfill | ||
var objectKeys = Object.keys || objectKeysPolyfill | ||
var bind = Function.prototype.bind || functionBindPolyfill | ||
function EventEmitter() { | ||
this._events = this._events || {}; | ||
if (!this._events || !Object.prototype.hasOwnProperty.call(this, '_events')) { | ||
this._events = objectCreate(null); | ||
this._eventsCount = 0; | ||
} | ||
this._maxListeners = this._maxListeners || undefined; | ||
@@ -995,9 +1015,33 @@ } | ||
// added to it. This is a useful default which helps finding memory leaks. | ||
EventEmitter.defaultMaxListeners = 10; | ||
var defaultMaxListeners = 10; | ||
var hasDefineProperty; | ||
try { | ||
var o = {}; | ||
if (Object.defineProperty) Object.defineProperty(o, 'x', { value: 0 }); | ||
hasDefineProperty = o.x === 0; | ||
} catch (err) { hasDefineProperty = false } | ||
if (hasDefineProperty) { | ||
Object.defineProperty(EventEmitter, 'defaultMaxListeners', { | ||
enumerable: true, | ||
get: function() { | ||
return defaultMaxListeners; | ||
}, | ||
set: function(arg) { | ||
// check whether the input is a positive number (whose value is zero or | ||
// greater and not a NaN). | ||
if (typeof arg !== 'number' || arg < 0 || arg !== arg) | ||
throw new TypeError('"defaultMaxListeners" must be a positive number'); | ||
defaultMaxListeners = arg; | ||
} | ||
}); | ||
} else { | ||
EventEmitter.defaultMaxListeners = defaultMaxListeners; | ||
} | ||
// Obviously not all Emitters should be limited to 10. This function allows | ||
// that to be increased. Set to zero for unlimited. | ||
EventEmitter.prototype.setMaxListeners = function(n) { | ||
if (!isNumber(n) || n < 0 || isNaN(n)) | ||
throw TypeError('n must be a positive number'); | ||
EventEmitter.prototype.setMaxListeners = function setMaxListeners(n) { | ||
if (typeof n !== 'number' || n < 0 || isNaN(n)) | ||
throw new TypeError('"n" argument must be a positive number'); | ||
this._maxListeners = n; | ||
@@ -1007,52 +1051,121 @@ return this; | ||
EventEmitter.prototype.emit = function(type) { | ||
var er, handler, len, args, i, listeners; | ||
function $getMaxListeners(that) { | ||
if (that._maxListeners === undefined) | ||
return EventEmitter.defaultMaxListeners; | ||
return that._maxListeners; | ||
} | ||
if (!this._events) | ||
this._events = {}; | ||
EventEmitter.prototype.getMaxListeners = function getMaxListeners() { | ||
return $getMaxListeners(this); | ||
}; | ||
// These standalone emit* functions are used to optimize calling of event | ||
// handlers for fast cases because emit() itself often has a variable number of | ||
// arguments and can be deoptimized because of that. These functions always have | ||
// the same number of arguments and thus do not get deoptimized, so the code | ||
// inside them can execute faster. | ||
function emitNone(handler, isFn, self) { | ||
if (isFn) | ||
handler.call(self); | ||
else { | ||
var len = handler.length; | ||
var listeners = arrayClone(handler, len); | ||
for (var i = 0; i < len; ++i) | ||
listeners[i].call(self); | ||
} | ||
} | ||
function emitOne(handler, isFn, self, arg1) { | ||
if (isFn) | ||
handler.call(self, arg1); | ||
else { | ||
var len = handler.length; | ||
var listeners = arrayClone(handler, len); | ||
for (var i = 0; i < len; ++i) | ||
listeners[i].call(self, arg1); | ||
} | ||
} | ||
function emitTwo(handler, isFn, self, arg1, arg2) { | ||
if (isFn) | ||
handler.call(self, arg1, arg2); | ||
else { | ||
var len = handler.length; | ||
var listeners = arrayClone(handler, len); | ||
for (var i = 0; i < len; ++i) | ||
listeners[i].call(self, arg1, arg2); | ||
} | ||
} | ||
function emitThree(handler, isFn, self, arg1, arg2, arg3) { | ||
if (isFn) | ||
handler.call(self, arg1, arg2, arg3); | ||
else { | ||
var len = handler.length; | ||
var listeners = arrayClone(handler, len); | ||
for (var i = 0; i < len; ++i) | ||
listeners[i].call(self, arg1, arg2, arg3); | ||
} | ||
} | ||
function emitMany(handler, isFn, self, args) { | ||
if (isFn) | ||
handler.apply(self, args); | ||
else { | ||
var len = handler.length; | ||
var listeners = arrayClone(handler, len); | ||
for (var i = 0; i < len; ++i) | ||
listeners[i].apply(self, args); | ||
} | ||
} | ||
EventEmitter.prototype.emit = function emit(type) { | ||
var er, handler, len, args, i, events; | ||
var doError = (type === 'error'); | ||
events = this._events; | ||
if (events) | ||
doError = (doError && events.error == null); | ||
else if (!doError) | ||
return false; | ||
// If there is no 'error' event listener then throw. | ||
if (type === 'error') { | ||
if (!this._events.error || | ||
(isObject(this._events.error) && !this._events.error.length)) { | ||
if (doError) { | ||
if (arguments.length > 1) | ||
er = arguments[1]; | ||
if (er instanceof Error) { | ||
throw er; // Unhandled 'error' event | ||
} else { | ||
// At least give some kind of context to the user | ||
var err = new Error('Uncaught, unspecified "error" event. (' + er + ')'); | ||
err.context = er; | ||
throw err; | ||
} | ||
if (er instanceof Error) { | ||
throw er; // Unhandled 'error' event | ||
} else { | ||
// At least give some kind of context to the user | ||
var err = new Error('Unhandled "error" event. (' + er + ')'); | ||
err.context = er; | ||
throw err; | ||
} | ||
return false; | ||
} | ||
handler = this._events[type]; | ||
handler = events[type]; | ||
if (isUndefined(handler)) | ||
if (!handler) | ||
return false; | ||
if (isFunction(handler)) { | ||
switch (arguments.length) { | ||
var isFn = typeof handler === 'function'; | ||
len = arguments.length; | ||
switch (len) { | ||
// fast cases | ||
case 1: | ||
handler.call(this); | ||
break; | ||
case 2: | ||
handler.call(this, arguments[1]); | ||
break; | ||
case 3: | ||
handler.call(this, arguments[1], arguments[2]); | ||
break; | ||
case 1: | ||
emitNone(handler, isFn, this); | ||
break; | ||
case 2: | ||
emitOne(handler, isFn, this, arguments[1]); | ||
break; | ||
case 3: | ||
emitTwo(handler, isFn, this, arguments[1], arguments[2]); | ||
break; | ||
case 4: | ||
emitThree(handler, isFn, this, arguments[1], arguments[2], arguments[3]); | ||
break; | ||
// slower | ||
default: | ||
args = Array.prototype.slice.call(arguments, 1); | ||
handler.apply(this, args); | ||
} | ||
} else if (isObject(handler)) { | ||
args = Array.prototype.slice.call(arguments, 1); | ||
listeners = handler.slice(); | ||
len = listeners.length; | ||
for (i = 0; i < len; i++) | ||
listeners[i].apply(this, args); | ||
default: | ||
args = new Array(len - 1); | ||
for (i = 1; i < len; i++) | ||
args[i - 1] = arguments[i]; | ||
emitMany(handler, isFn, this, args); | ||
} | ||
@@ -1063,45 +1176,62 @@ | ||
EventEmitter.prototype.addListener = function(type, listener) { | ||
function _addListener(target, type, listener, prepend) { | ||
var m; | ||
var events; | ||
var existing; | ||
if (!isFunction(listener)) | ||
throw TypeError('listener must be a function'); | ||
if (typeof listener !== 'function') | ||
throw new TypeError('"listener" argument must be a function'); | ||
if (!this._events) | ||
this._events = {}; | ||
events = target._events; | ||
if (!events) { | ||
events = target._events = objectCreate(null); | ||
target._eventsCount = 0; | ||
} else { | ||
// To avoid recursion in the case that type === "newListener"! Before | ||
// adding it to the listeners, first emit "newListener". | ||
if (events.newListener) { | ||
target.emit('newListener', type, | ||
listener.listener ? listener.listener : listener); | ||
// To avoid recursion in the case that type === "newListener"! Before | ||
// adding it to the listeners, first emit "newListener". | ||
if (this._events.newListener) | ||
this.emit('newListener', type, | ||
isFunction(listener.listener) ? | ||
listener.listener : listener); | ||
// Re-assign `events` because a newListener handler could have caused the | ||
// this._events to be assigned to a new object | ||
events = target._events; | ||
} | ||
existing = events[type]; | ||
} | ||
if (!this._events[type]) | ||
if (!existing) { | ||
// Optimize the case of one listener. Don't need the extra array object. | ||
this._events[type] = listener; | ||
else if (isObject(this._events[type])) | ||
// If we've already got an array, just append. | ||
this._events[type].push(listener); | ||
else | ||
// Adding the second element, need to change to array. | ||
this._events[type] = [this._events[type], listener]; | ||
// Check for listener leak | ||
if (isObject(this._events[type]) && !this._events[type].warned) { | ||
if (!isUndefined(this._maxListeners)) { | ||
m = this._maxListeners; | ||
existing = events[type] = listener; | ||
++target._eventsCount; | ||
} else { | ||
if (typeof existing === 'function') { | ||
// Adding the second element, need to change to array. | ||
existing = events[type] = | ||
prepend ? [listener, existing] : [existing, listener]; | ||
} else { | ||
m = EventEmitter.defaultMaxListeners; | ||
// If we've already got an array, just append. | ||
if (prepend) { | ||
existing.unshift(listener); | ||
} else { | ||
existing.push(listener); | ||
} | ||
} | ||
if (m && m > 0 && this._events[type].length > m) { | ||
this._events[type].warned = true; | ||
console.error('(node) warning: possible EventEmitter memory ' + | ||
'leak detected. %d listeners added. ' + | ||
'Use emitter.setMaxListeners() to increase limit.', | ||
this._events[type].length); | ||
if (typeof console.trace === 'function') { | ||
// not supported in IE 10 | ||
console.trace(); | ||
// Check for listener leak | ||
if (!existing.warned) { | ||
m = $getMaxListeners(target); | ||
if (m && m > 0 && existing.length > m) { | ||
existing.warned = true; | ||
var w = new Error('Possible EventEmitter memory leak detected. ' + | ||
existing.length + ' "' + String(type) + '" listeners ' + | ||
'added. Use emitter.setMaxListeners() to ' + | ||
'increase limit.'); | ||
w.name = 'MaxListenersExceededWarning'; | ||
w.emitter = target; | ||
w.type = type; | ||
w.count = existing.length; | ||
if (typeof console === 'object' && console.warn) { | ||
console.warn('%s: %s', w.name, w.message); | ||
} | ||
} | ||
@@ -1111,3 +1241,7 @@ } | ||
return this; | ||
return target; | ||
} | ||
EventEmitter.prototype.addListener = function addListener(type, listener) { | ||
return _addListener(this, type, listener, false); | ||
}; | ||
@@ -1117,151 +1251,250 @@ | ||
EventEmitter.prototype.once = function(type, listener) { | ||
if (!isFunction(listener)) | ||
throw TypeError('listener must be a function'); | ||
EventEmitter.prototype.prependListener = | ||
function prependListener(type, listener) { | ||
return _addListener(this, type, listener, true); | ||
}; | ||
var fired = false; | ||
function g() { | ||
this.removeListener(type, g); | ||
if (!fired) { | ||
fired = true; | ||
listener.apply(this, arguments); | ||
function onceWrapper() { | ||
if (!this.fired) { | ||
this.target.removeListener(this.type, this.wrapFn); | ||
this.fired = true; | ||
switch (arguments.length) { | ||
case 0: | ||
return this.listener.call(this.target); | ||
case 1: | ||
return this.listener.call(this.target, arguments[0]); | ||
case 2: | ||
return this.listener.call(this.target, arguments[0], arguments[1]); | ||
case 3: | ||
return this.listener.call(this.target, arguments[0], arguments[1], | ||
arguments[2]); | ||
default: | ||
var args = new Array(arguments.length); | ||
for (var i = 0; i < args.length; ++i) | ||
args[i] = arguments[i]; | ||
this.listener.apply(this.target, args); | ||
} | ||
} | ||
} | ||
g.listener = listener; | ||
this.on(type, g); | ||
function _onceWrap(target, type, listener) { | ||
var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener }; | ||
var wrapped = bind.call(onceWrapper, state); | ||
wrapped.listener = listener; | ||
state.wrapFn = wrapped; | ||
return wrapped; | ||
} | ||
EventEmitter.prototype.once = function once(type, listener) { | ||
if (typeof listener !== 'function') | ||
throw new TypeError('"listener" argument must be a function'); | ||
this.on(type, _onceWrap(this, type, listener)); | ||
return this; | ||
}; | ||
// emits a 'removeListener' event iff the listener was removed | ||
EventEmitter.prototype.removeListener = function(type, listener) { | ||
var list, position, length, i; | ||
EventEmitter.prototype.prependOnceListener = | ||
function prependOnceListener(type, listener) { | ||
if (typeof listener !== 'function') | ||
throw new TypeError('"listener" argument must be a function'); | ||
this.prependListener(type, _onceWrap(this, type, listener)); | ||
return this; | ||
}; | ||
if (!isFunction(listener)) | ||
throw TypeError('listener must be a function'); | ||
// Emits a 'removeListener' event if and only if the listener was removed. | ||
EventEmitter.prototype.removeListener = | ||
function removeListener(type, listener) { | ||
var list, events, position, i, originalListener; | ||
if (!this._events || !this._events[type]) | ||
return this; | ||
if (typeof listener !== 'function') | ||
throw new TypeError('"listener" argument must be a function'); | ||
list = this._events[type]; | ||
length = list.length; | ||
position = -1; | ||
events = this._events; | ||
if (!events) | ||
return this; | ||
if (list === listener || | ||
(isFunction(list.listener) && list.listener === listener)) { | ||
delete this._events[type]; | ||
if (this._events.removeListener) | ||
this.emit('removeListener', type, listener); | ||
list = events[type]; | ||
if (!list) | ||
return this; | ||
} else if (isObject(list)) { | ||
for (i = length; i-- > 0;) { | ||
if (list[i] === listener || | ||
(list[i].listener && list[i].listener === listener)) { | ||
position = i; | ||
break; | ||
if (list === listener || list.listener === listener) { | ||
if (--this._eventsCount === 0) | ||
this._events = objectCreate(null); | ||
else { | ||
delete events[type]; | ||
if (events.removeListener) | ||
this.emit('removeListener', type, list.listener || listener); | ||
} | ||
} else if (typeof list !== 'function') { | ||
position = -1; | ||
for (i = list.length - 1; i >= 0; i--) { | ||
if (list[i] === listener || list[i].listener === listener) { | ||
originalListener = list[i].listener; | ||
position = i; | ||
break; | ||
} | ||
} | ||
if (position < 0) | ||
return this; | ||
if (position === 0) | ||
list.shift(); | ||
else | ||
spliceOne(list, position); | ||
if (list.length === 1) | ||
events[type] = list[0]; | ||
if (events.removeListener) | ||
this.emit('removeListener', type, originalListener || listener); | ||
} | ||
} | ||
if (position < 0) | ||
return this; | ||
}; | ||
if (list.length === 1) { | ||
list.length = 0; | ||
delete this._events[type]; | ||
} else { | ||
list.splice(position, 1); | ||
} | ||
EventEmitter.prototype.removeAllListeners = | ||
function removeAllListeners(type) { | ||
var listeners, events, i; | ||
if (this._events.removeListener) | ||
this.emit('removeListener', type, listener); | ||
} | ||
events = this._events; | ||
if (!events) | ||
return this; | ||
return this; | ||
}; | ||
// not listening for removeListener, no need to emit | ||
if (!events.removeListener) { | ||
if (arguments.length === 0) { | ||
this._events = objectCreate(null); | ||
this._eventsCount = 0; | ||
} else if (events[type]) { | ||
if (--this._eventsCount === 0) | ||
this._events = objectCreate(null); | ||
else | ||
delete events[type]; | ||
} | ||
return this; | ||
} | ||
EventEmitter.prototype.removeAllListeners = function(type) { | ||
var key, listeners; | ||
// emit removeListener for all listeners on all events | ||
if (arguments.length === 0) { | ||
var keys = objectKeys(events); | ||
var key; | ||
for (i = 0; i < keys.length; ++i) { | ||
key = keys[i]; | ||
if (key === 'removeListener') continue; | ||
this.removeAllListeners(key); | ||
} | ||
this.removeAllListeners('removeListener'); | ||
this._events = objectCreate(null); | ||
this._eventsCount = 0; | ||
return this; | ||
} | ||
if (!this._events) | ||
return this; | ||
listeners = events[type]; | ||
// not listening for removeListener, no need to emit | ||
if (!this._events.removeListener) { | ||
if (arguments.length === 0) | ||
this._events = {}; | ||
else if (this._events[type]) | ||
delete this._events[type]; | ||
return this; | ||
} | ||
if (typeof listeners === 'function') { | ||
this.removeListener(type, listeners); | ||
} else if (listeners) { | ||
// LIFO order | ||
for (i = listeners.length - 1; i >= 0; i--) { | ||
this.removeListener(type, listeners[i]); | ||
} | ||
} | ||
// emit removeListener for all listeners on all events | ||
if (arguments.length === 0) { | ||
for (key in this._events) { | ||
if (key === 'removeListener') continue; | ||
this.removeAllListeners(key); | ||
} | ||
this.removeAllListeners('removeListener'); | ||
this._events = {}; | ||
return this; | ||
} | ||
return this; | ||
}; | ||
listeners = this._events[type]; | ||
function _listeners(target, type, unwrap) { | ||
var events = target._events; | ||
if (isFunction(listeners)) { | ||
this.removeListener(type, listeners); | ||
} else if (listeners) { | ||
// LIFO order | ||
while (listeners.length) | ||
this.removeListener(type, listeners[listeners.length - 1]); | ||
} | ||
delete this._events[type]; | ||
if (!events) | ||
return []; | ||
return this; | ||
var evlistener = events[type]; | ||
if (!evlistener) | ||
return []; | ||
if (typeof evlistener === 'function') | ||
return unwrap ? [evlistener.listener || evlistener] : [evlistener]; | ||
return unwrap ? unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length); | ||
} | ||
EventEmitter.prototype.listeners = function listeners(type) { | ||
return _listeners(this, type, true); | ||
}; | ||
EventEmitter.prototype.listeners = function(type) { | ||
var ret; | ||
if (!this._events || !this._events[type]) | ||
ret = []; | ||
else if (isFunction(this._events[type])) | ||
ret = [this._events[type]]; | ||
else | ||
ret = this._events[type].slice(); | ||
return ret; | ||
EventEmitter.prototype.rawListeners = function rawListeners(type) { | ||
return _listeners(this, type, false); | ||
}; | ||
EventEmitter.prototype.listenerCount = function(type) { | ||
if (this._events) { | ||
var evlistener = this._events[type]; | ||
EventEmitter.listenerCount = function(emitter, type) { | ||
if (typeof emitter.listenerCount === 'function') { | ||
return emitter.listenerCount(type); | ||
} else { | ||
return listenerCount.call(emitter, type); | ||
} | ||
}; | ||
if (isFunction(evlistener)) | ||
EventEmitter.prototype.listenerCount = listenerCount; | ||
function listenerCount(type) { | ||
var events = this._events; | ||
if (events) { | ||
var evlistener = events[type]; | ||
if (typeof evlistener === 'function') { | ||
return 1; | ||
else if (evlistener) | ||
} else if (evlistener) { | ||
return evlistener.length; | ||
} | ||
} | ||
return 0; | ||
}; | ||
} | ||
EventEmitter.listenerCount = function(emitter, type) { | ||
return emitter.listenerCount(type); | ||
EventEmitter.prototype.eventNames = function eventNames() { | ||
return this._eventsCount > 0 ? Reflect.ownKeys(this._events) : []; | ||
}; | ||
function isFunction(arg) { | ||
return typeof arg === 'function'; | ||
// About 1.5x faster than the two-arg version of Array#splice(). | ||
function spliceOne(list, index) { | ||
for (var i = index, k = i + 1, n = list.length; k < n; i += 1, k += 1) | ||
list[i] = list[k]; | ||
list.pop(); | ||
} | ||
function isNumber(arg) { | ||
return typeof arg === 'number'; | ||
function arrayClone(arr, n) { | ||
var copy = new Array(n); | ||
for (var i = 0; i < n; ++i) | ||
copy[i] = arr[i]; | ||
return copy; | ||
} | ||
function isObject(arg) { | ||
return typeof arg === 'object' && arg !== null; | ||
function unwrapListeners(arr) { | ||
var ret = new Array(arr.length); | ||
for (var i = 0; i < ret.length; ++i) { | ||
ret[i] = arr[i].listener || arr[i]; | ||
} | ||
return ret; | ||
} | ||
function isUndefined(arg) { | ||
return arg === void 0; | ||
function objectCreatePolyfill(proto) { | ||
var F = function() {}; | ||
F.prototype = proto; | ||
return new F; | ||
} | ||
function objectKeysPolyfill(obj) { | ||
var keys = []; | ||
for (var k in obj) if (Object.prototype.hasOwnProperty.call(obj, k)) { | ||
keys.push(k); | ||
} | ||
return k; | ||
} | ||
function functionBindPolyfill(context) { | ||
var fn = this; | ||
return function () { | ||
return fn.apply(context, arguments); | ||
}; | ||
} | ||
@@ -1294,2 +1527,2 @@ },{}],15:[function(require,module,exports){ | ||
},{}]},{},[1])(1) | ||
}); | ||
}); |
615
dist/ltx.js
@@ -1,2 +0,2 @@ | ||
(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.ltx = 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){ | ||
(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.ltx = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){ | ||
'use strict' | ||
@@ -616,14 +616,26 @@ | ||
'&': '&', | ||
'&': '&', | ||
'<': '<', | ||
'<': '<', | ||
'>': '>', | ||
'>': '>', | ||
'"': '"', | ||
'"': '"', | ||
''': "'", | ||
''': "'" | ||
''': "'" | ||
} | ||
function unescapeXMLReplace (match) { | ||
if (match[1] === '#') { | ||
var num | ||
if (match[2] === 'x') { | ||
num = parseInt(match.slice(3), 16) | ||
} else { | ||
num = parseInt(match.slice(2), 10) | ||
} | ||
// https://www.w3.org/TR/xml/#NT-Char defines legal XML characters: | ||
// #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF] | ||
if (num === 0x9 || num === 0xA || num === 0xD || | ||
(num >= 0x20 && num <= 0xD7FF) || | ||
(num >= 0xE000 && num <= 0xFFFD) || | ||
(num >= 0x10000 && num <= 0x10FFFF)) { | ||
return String.fromCodePoint(num) | ||
} | ||
throw new Error(`Illegal XML character 0x${num.toString(16)}`) | ||
} | ||
return unescapeXMLTable[match] | ||
@@ -637,3 +649,3 @@ } | ||
exports.unescapeXML = function unescapeXML (s) { | ||
return s.replace(/&(amp|#38|lt|#60|gt|#62|quot|#34|apos|#39);/g, unescapeXMLReplace) | ||
return s.replace(/&(amp|lt|gt|quot|apos|#x[0-9a-fA-F]+|#[0-9]+);/g, unescapeXMLReplace) | ||
} | ||
@@ -980,4 +992,12 @@ | ||
var objectCreate = Object.create || objectCreatePolyfill | ||
var objectKeys = Object.keys || objectKeysPolyfill | ||
var bind = Function.prototype.bind || functionBindPolyfill | ||
function EventEmitter() { | ||
this._events = this._events || {}; | ||
if (!this._events || !Object.prototype.hasOwnProperty.call(this, '_events')) { | ||
this._events = objectCreate(null); | ||
this._eventsCount = 0; | ||
} | ||
this._maxListeners = this._maxListeners || undefined; | ||
@@ -995,9 +1015,33 @@ } | ||
// added to it. This is a useful default which helps finding memory leaks. | ||
EventEmitter.defaultMaxListeners = 10; | ||
var defaultMaxListeners = 10; | ||
var hasDefineProperty; | ||
try { | ||
var o = {}; | ||
if (Object.defineProperty) Object.defineProperty(o, 'x', { value: 0 }); | ||
hasDefineProperty = o.x === 0; | ||
} catch (err) { hasDefineProperty = false } | ||
if (hasDefineProperty) { | ||
Object.defineProperty(EventEmitter, 'defaultMaxListeners', { | ||
enumerable: true, | ||
get: function() { | ||
return defaultMaxListeners; | ||
}, | ||
set: function(arg) { | ||
// check whether the input is a positive number (whose value is zero or | ||
// greater and not a NaN). | ||
if (typeof arg !== 'number' || arg < 0 || arg !== arg) | ||
throw new TypeError('"defaultMaxListeners" must be a positive number'); | ||
defaultMaxListeners = arg; | ||
} | ||
}); | ||
} else { | ||
EventEmitter.defaultMaxListeners = defaultMaxListeners; | ||
} | ||
// Obviously not all Emitters should be limited to 10. This function allows | ||
// that to be increased. Set to zero for unlimited. | ||
EventEmitter.prototype.setMaxListeners = function(n) { | ||
if (!isNumber(n) || n < 0 || isNaN(n)) | ||
throw TypeError('n must be a positive number'); | ||
EventEmitter.prototype.setMaxListeners = function setMaxListeners(n) { | ||
if (typeof n !== 'number' || n < 0 || isNaN(n)) | ||
throw new TypeError('"n" argument must be a positive number'); | ||
this._maxListeners = n; | ||
@@ -1007,52 +1051,121 @@ return this; | ||
EventEmitter.prototype.emit = function(type) { | ||
var er, handler, len, args, i, listeners; | ||
function $getMaxListeners(that) { | ||
if (that._maxListeners === undefined) | ||
return EventEmitter.defaultMaxListeners; | ||
return that._maxListeners; | ||
} | ||
if (!this._events) | ||
this._events = {}; | ||
EventEmitter.prototype.getMaxListeners = function getMaxListeners() { | ||
return $getMaxListeners(this); | ||
}; | ||
// These standalone emit* functions are used to optimize calling of event | ||
// handlers for fast cases because emit() itself often has a variable number of | ||
// arguments and can be deoptimized because of that. These functions always have | ||
// the same number of arguments and thus do not get deoptimized, so the code | ||
// inside them can execute faster. | ||
function emitNone(handler, isFn, self) { | ||
if (isFn) | ||
handler.call(self); | ||
else { | ||
var len = handler.length; | ||
var listeners = arrayClone(handler, len); | ||
for (var i = 0; i < len; ++i) | ||
listeners[i].call(self); | ||
} | ||
} | ||
function emitOne(handler, isFn, self, arg1) { | ||
if (isFn) | ||
handler.call(self, arg1); | ||
else { | ||
var len = handler.length; | ||
var listeners = arrayClone(handler, len); | ||
for (var i = 0; i < len; ++i) | ||
listeners[i].call(self, arg1); | ||
} | ||
} | ||
function emitTwo(handler, isFn, self, arg1, arg2) { | ||
if (isFn) | ||
handler.call(self, arg1, arg2); | ||
else { | ||
var len = handler.length; | ||
var listeners = arrayClone(handler, len); | ||
for (var i = 0; i < len; ++i) | ||
listeners[i].call(self, arg1, arg2); | ||
} | ||
} | ||
function emitThree(handler, isFn, self, arg1, arg2, arg3) { | ||
if (isFn) | ||
handler.call(self, arg1, arg2, arg3); | ||
else { | ||
var len = handler.length; | ||
var listeners = arrayClone(handler, len); | ||
for (var i = 0; i < len; ++i) | ||
listeners[i].call(self, arg1, arg2, arg3); | ||
} | ||
} | ||
function emitMany(handler, isFn, self, args) { | ||
if (isFn) | ||
handler.apply(self, args); | ||
else { | ||
var len = handler.length; | ||
var listeners = arrayClone(handler, len); | ||
for (var i = 0; i < len; ++i) | ||
listeners[i].apply(self, args); | ||
} | ||
} | ||
EventEmitter.prototype.emit = function emit(type) { | ||
var er, handler, len, args, i, events; | ||
var doError = (type === 'error'); | ||
events = this._events; | ||
if (events) | ||
doError = (doError && events.error == null); | ||
else if (!doError) | ||
return false; | ||
// If there is no 'error' event listener then throw. | ||
if (type === 'error') { | ||
if (!this._events.error || | ||
(isObject(this._events.error) && !this._events.error.length)) { | ||
if (doError) { | ||
if (arguments.length > 1) | ||
er = arguments[1]; | ||
if (er instanceof Error) { | ||
throw er; // Unhandled 'error' event | ||
} else { | ||
// At least give some kind of context to the user | ||
var err = new Error('Uncaught, unspecified "error" event. (' + er + ')'); | ||
err.context = er; | ||
throw err; | ||
} | ||
if (er instanceof Error) { | ||
throw er; // Unhandled 'error' event | ||
} else { | ||
// At least give some kind of context to the user | ||
var err = new Error('Unhandled "error" event. (' + er + ')'); | ||
err.context = er; | ||
throw err; | ||
} | ||
return false; | ||
} | ||
handler = this._events[type]; | ||
handler = events[type]; | ||
if (isUndefined(handler)) | ||
if (!handler) | ||
return false; | ||
if (isFunction(handler)) { | ||
switch (arguments.length) { | ||
var isFn = typeof handler === 'function'; | ||
len = arguments.length; | ||
switch (len) { | ||
// fast cases | ||
case 1: | ||
handler.call(this); | ||
break; | ||
case 2: | ||
handler.call(this, arguments[1]); | ||
break; | ||
case 3: | ||
handler.call(this, arguments[1], arguments[2]); | ||
break; | ||
case 1: | ||
emitNone(handler, isFn, this); | ||
break; | ||
case 2: | ||
emitOne(handler, isFn, this, arguments[1]); | ||
break; | ||
case 3: | ||
emitTwo(handler, isFn, this, arguments[1], arguments[2]); | ||
break; | ||
case 4: | ||
emitThree(handler, isFn, this, arguments[1], arguments[2], arguments[3]); | ||
break; | ||
// slower | ||
default: | ||
args = Array.prototype.slice.call(arguments, 1); | ||
handler.apply(this, args); | ||
} | ||
} else if (isObject(handler)) { | ||
args = Array.prototype.slice.call(arguments, 1); | ||
listeners = handler.slice(); | ||
len = listeners.length; | ||
for (i = 0; i < len; i++) | ||
listeners[i].apply(this, args); | ||
default: | ||
args = new Array(len - 1); | ||
for (i = 1; i < len; i++) | ||
args[i - 1] = arguments[i]; | ||
emitMany(handler, isFn, this, args); | ||
} | ||
@@ -1063,45 +1176,62 @@ | ||
EventEmitter.prototype.addListener = function(type, listener) { | ||
function _addListener(target, type, listener, prepend) { | ||
var m; | ||
var events; | ||
var existing; | ||
if (!isFunction(listener)) | ||
throw TypeError('listener must be a function'); | ||
if (typeof listener !== 'function') | ||
throw new TypeError('"listener" argument must be a function'); | ||
if (!this._events) | ||
this._events = {}; | ||
events = target._events; | ||
if (!events) { | ||
events = target._events = objectCreate(null); | ||
target._eventsCount = 0; | ||
} else { | ||
// To avoid recursion in the case that type === "newListener"! Before | ||
// adding it to the listeners, first emit "newListener". | ||
if (events.newListener) { | ||
target.emit('newListener', type, | ||
listener.listener ? listener.listener : listener); | ||
// To avoid recursion in the case that type === "newListener"! Before | ||
// adding it to the listeners, first emit "newListener". | ||
if (this._events.newListener) | ||
this.emit('newListener', type, | ||
isFunction(listener.listener) ? | ||
listener.listener : listener); | ||
// Re-assign `events` because a newListener handler could have caused the | ||
// this._events to be assigned to a new object | ||
events = target._events; | ||
} | ||
existing = events[type]; | ||
} | ||
if (!this._events[type]) | ||
if (!existing) { | ||
// Optimize the case of one listener. Don't need the extra array object. | ||
this._events[type] = listener; | ||
else if (isObject(this._events[type])) | ||
// If we've already got an array, just append. | ||
this._events[type].push(listener); | ||
else | ||
// Adding the second element, need to change to array. | ||
this._events[type] = [this._events[type], listener]; | ||
// Check for listener leak | ||
if (isObject(this._events[type]) && !this._events[type].warned) { | ||
if (!isUndefined(this._maxListeners)) { | ||
m = this._maxListeners; | ||
existing = events[type] = listener; | ||
++target._eventsCount; | ||
} else { | ||
if (typeof existing === 'function') { | ||
// Adding the second element, need to change to array. | ||
existing = events[type] = | ||
prepend ? [listener, existing] : [existing, listener]; | ||
} else { | ||
m = EventEmitter.defaultMaxListeners; | ||
// If we've already got an array, just append. | ||
if (prepend) { | ||
existing.unshift(listener); | ||
} else { | ||
existing.push(listener); | ||
} | ||
} | ||
if (m && m > 0 && this._events[type].length > m) { | ||
this._events[type].warned = true; | ||
console.error('(node) warning: possible EventEmitter memory ' + | ||
'leak detected. %d listeners added. ' + | ||
'Use emitter.setMaxListeners() to increase limit.', | ||
this._events[type].length); | ||
if (typeof console.trace === 'function') { | ||
// not supported in IE 10 | ||
console.trace(); | ||
// Check for listener leak | ||
if (!existing.warned) { | ||
m = $getMaxListeners(target); | ||
if (m && m > 0 && existing.length > m) { | ||
existing.warned = true; | ||
var w = new Error('Possible EventEmitter memory leak detected. ' + | ||
existing.length + ' "' + String(type) + '" listeners ' + | ||
'added. Use emitter.setMaxListeners() to ' + | ||
'increase limit.'); | ||
w.name = 'MaxListenersExceededWarning'; | ||
w.emitter = target; | ||
w.type = type; | ||
w.count = existing.length; | ||
if (typeof console === 'object' && console.warn) { | ||
console.warn('%s: %s', w.name, w.message); | ||
} | ||
} | ||
@@ -1111,3 +1241,7 @@ } | ||
return this; | ||
return target; | ||
} | ||
EventEmitter.prototype.addListener = function addListener(type, listener) { | ||
return _addListener(this, type, listener, false); | ||
}; | ||
@@ -1117,151 +1251,250 @@ | ||
EventEmitter.prototype.once = function(type, listener) { | ||
if (!isFunction(listener)) | ||
throw TypeError('listener must be a function'); | ||
EventEmitter.prototype.prependListener = | ||
function prependListener(type, listener) { | ||
return _addListener(this, type, listener, true); | ||
}; | ||
var fired = false; | ||
function g() { | ||
this.removeListener(type, g); | ||
if (!fired) { | ||
fired = true; | ||
listener.apply(this, arguments); | ||
function onceWrapper() { | ||
if (!this.fired) { | ||
this.target.removeListener(this.type, this.wrapFn); | ||
this.fired = true; | ||
switch (arguments.length) { | ||
case 0: | ||
return this.listener.call(this.target); | ||
case 1: | ||
return this.listener.call(this.target, arguments[0]); | ||
case 2: | ||
return this.listener.call(this.target, arguments[0], arguments[1]); | ||
case 3: | ||
return this.listener.call(this.target, arguments[0], arguments[1], | ||
arguments[2]); | ||
default: | ||
var args = new Array(arguments.length); | ||
for (var i = 0; i < args.length; ++i) | ||
args[i] = arguments[i]; | ||
this.listener.apply(this.target, args); | ||
} | ||
} | ||
} | ||
g.listener = listener; | ||
this.on(type, g); | ||
function _onceWrap(target, type, listener) { | ||
var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener }; | ||
var wrapped = bind.call(onceWrapper, state); | ||
wrapped.listener = listener; | ||
state.wrapFn = wrapped; | ||
return wrapped; | ||
} | ||
EventEmitter.prototype.once = function once(type, listener) { | ||
if (typeof listener !== 'function') | ||
throw new TypeError('"listener" argument must be a function'); | ||
this.on(type, _onceWrap(this, type, listener)); | ||
return this; | ||
}; | ||
// emits a 'removeListener' event iff the listener was removed | ||
EventEmitter.prototype.removeListener = function(type, listener) { | ||
var list, position, length, i; | ||
EventEmitter.prototype.prependOnceListener = | ||
function prependOnceListener(type, listener) { | ||
if (typeof listener !== 'function') | ||
throw new TypeError('"listener" argument must be a function'); | ||
this.prependListener(type, _onceWrap(this, type, listener)); | ||
return this; | ||
}; | ||
if (!isFunction(listener)) | ||
throw TypeError('listener must be a function'); | ||
// Emits a 'removeListener' event if and only if the listener was removed. | ||
EventEmitter.prototype.removeListener = | ||
function removeListener(type, listener) { | ||
var list, events, position, i, originalListener; | ||
if (!this._events || !this._events[type]) | ||
return this; | ||
if (typeof listener !== 'function') | ||
throw new TypeError('"listener" argument must be a function'); | ||
list = this._events[type]; | ||
length = list.length; | ||
position = -1; | ||
events = this._events; | ||
if (!events) | ||
return this; | ||
if (list === listener || | ||
(isFunction(list.listener) && list.listener === listener)) { | ||
delete this._events[type]; | ||
if (this._events.removeListener) | ||
this.emit('removeListener', type, listener); | ||
list = events[type]; | ||
if (!list) | ||
return this; | ||
} else if (isObject(list)) { | ||
for (i = length; i-- > 0;) { | ||
if (list[i] === listener || | ||
(list[i].listener && list[i].listener === listener)) { | ||
position = i; | ||
break; | ||
if (list === listener || list.listener === listener) { | ||
if (--this._eventsCount === 0) | ||
this._events = objectCreate(null); | ||
else { | ||
delete events[type]; | ||
if (events.removeListener) | ||
this.emit('removeListener', type, list.listener || listener); | ||
} | ||
} else if (typeof list !== 'function') { | ||
position = -1; | ||
for (i = list.length - 1; i >= 0; i--) { | ||
if (list[i] === listener || list[i].listener === listener) { | ||
originalListener = list[i].listener; | ||
position = i; | ||
break; | ||
} | ||
} | ||
if (position < 0) | ||
return this; | ||
if (position === 0) | ||
list.shift(); | ||
else | ||
spliceOne(list, position); | ||
if (list.length === 1) | ||
events[type] = list[0]; | ||
if (events.removeListener) | ||
this.emit('removeListener', type, originalListener || listener); | ||
} | ||
} | ||
if (position < 0) | ||
return this; | ||
}; | ||
if (list.length === 1) { | ||
list.length = 0; | ||
delete this._events[type]; | ||
} else { | ||
list.splice(position, 1); | ||
} | ||
EventEmitter.prototype.removeAllListeners = | ||
function removeAllListeners(type) { | ||
var listeners, events, i; | ||
if (this._events.removeListener) | ||
this.emit('removeListener', type, listener); | ||
} | ||
events = this._events; | ||
if (!events) | ||
return this; | ||
return this; | ||
}; | ||
// not listening for removeListener, no need to emit | ||
if (!events.removeListener) { | ||
if (arguments.length === 0) { | ||
this._events = objectCreate(null); | ||
this._eventsCount = 0; | ||
} else if (events[type]) { | ||
if (--this._eventsCount === 0) | ||
this._events = objectCreate(null); | ||
else | ||
delete events[type]; | ||
} | ||
return this; | ||
} | ||
EventEmitter.prototype.removeAllListeners = function(type) { | ||
var key, listeners; | ||
// emit removeListener for all listeners on all events | ||
if (arguments.length === 0) { | ||
var keys = objectKeys(events); | ||
var key; | ||
for (i = 0; i < keys.length; ++i) { | ||
key = keys[i]; | ||
if (key === 'removeListener') continue; | ||
this.removeAllListeners(key); | ||
} | ||
this.removeAllListeners('removeListener'); | ||
this._events = objectCreate(null); | ||
this._eventsCount = 0; | ||
return this; | ||
} | ||
if (!this._events) | ||
return this; | ||
listeners = events[type]; | ||
// not listening for removeListener, no need to emit | ||
if (!this._events.removeListener) { | ||
if (arguments.length === 0) | ||
this._events = {}; | ||
else if (this._events[type]) | ||
delete this._events[type]; | ||
return this; | ||
} | ||
if (typeof listeners === 'function') { | ||
this.removeListener(type, listeners); | ||
} else if (listeners) { | ||
// LIFO order | ||
for (i = listeners.length - 1; i >= 0; i--) { | ||
this.removeListener(type, listeners[i]); | ||
} | ||
} | ||
// emit removeListener for all listeners on all events | ||
if (arguments.length === 0) { | ||
for (key in this._events) { | ||
if (key === 'removeListener') continue; | ||
this.removeAllListeners(key); | ||
} | ||
this.removeAllListeners('removeListener'); | ||
this._events = {}; | ||
return this; | ||
} | ||
return this; | ||
}; | ||
listeners = this._events[type]; | ||
function _listeners(target, type, unwrap) { | ||
var events = target._events; | ||
if (isFunction(listeners)) { | ||
this.removeListener(type, listeners); | ||
} else if (listeners) { | ||
// LIFO order | ||
while (listeners.length) | ||
this.removeListener(type, listeners[listeners.length - 1]); | ||
} | ||
delete this._events[type]; | ||
if (!events) | ||
return []; | ||
return this; | ||
var evlistener = events[type]; | ||
if (!evlistener) | ||
return []; | ||
if (typeof evlistener === 'function') | ||
return unwrap ? [evlistener.listener || evlistener] : [evlistener]; | ||
return unwrap ? unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length); | ||
} | ||
EventEmitter.prototype.listeners = function listeners(type) { | ||
return _listeners(this, type, true); | ||
}; | ||
EventEmitter.prototype.listeners = function(type) { | ||
var ret; | ||
if (!this._events || !this._events[type]) | ||
ret = []; | ||
else if (isFunction(this._events[type])) | ||
ret = [this._events[type]]; | ||
else | ||
ret = this._events[type].slice(); | ||
return ret; | ||
EventEmitter.prototype.rawListeners = function rawListeners(type) { | ||
return _listeners(this, type, false); | ||
}; | ||
EventEmitter.prototype.listenerCount = function(type) { | ||
if (this._events) { | ||
var evlistener = this._events[type]; | ||
EventEmitter.listenerCount = function(emitter, type) { | ||
if (typeof emitter.listenerCount === 'function') { | ||
return emitter.listenerCount(type); | ||
} else { | ||
return listenerCount.call(emitter, type); | ||
} | ||
}; | ||
if (isFunction(evlistener)) | ||
EventEmitter.prototype.listenerCount = listenerCount; | ||
function listenerCount(type) { | ||
var events = this._events; | ||
if (events) { | ||
var evlistener = events[type]; | ||
if (typeof evlistener === 'function') { | ||
return 1; | ||
else if (evlistener) | ||
} else if (evlistener) { | ||
return evlistener.length; | ||
} | ||
} | ||
return 0; | ||
}; | ||
} | ||
EventEmitter.listenerCount = function(emitter, type) { | ||
return emitter.listenerCount(type); | ||
EventEmitter.prototype.eventNames = function eventNames() { | ||
return this._eventsCount > 0 ? Reflect.ownKeys(this._events) : []; | ||
}; | ||
function isFunction(arg) { | ||
return typeof arg === 'function'; | ||
// About 1.5x faster than the two-arg version of Array#splice(). | ||
function spliceOne(list, index) { | ||
for (var i = index, k = i + 1, n = list.length; k < n; i += 1, k += 1) | ||
list[i] = list[k]; | ||
list.pop(); | ||
} | ||
function isNumber(arg) { | ||
return typeof arg === 'number'; | ||
function arrayClone(arr, n) { | ||
var copy = new Array(n); | ||
for (var i = 0; i < n; ++i) | ||
copy[i] = arr[i]; | ||
return copy; | ||
} | ||
function isObject(arg) { | ||
return typeof arg === 'object' && arg !== null; | ||
function unwrapListeners(arr) { | ||
var ret = new Array(arr.length); | ||
for (var i = 0; i < ret.length; ++i) { | ||
ret[i] = arr[i].listener || arr[i]; | ||
} | ||
return ret; | ||
} | ||
function isUndefined(arg) { | ||
return arg === void 0; | ||
function objectCreatePolyfill(proto) { | ||
var F = function() {}; | ||
F.prototype = proto; | ||
return new F; | ||
} | ||
function objectKeysPolyfill(obj) { | ||
var keys = []; | ||
for (var k in obj) if (Object.prototype.hasOwnProperty.call(obj, k)) { | ||
keys.push(k); | ||
} | ||
return k; | ||
} | ||
function functionBindPolyfill(context) { | ||
var fn = this; | ||
return function () { | ||
return fn.apply(context, arguments); | ||
}; | ||
} | ||
@@ -1294,2 +1527,2 @@ },{}],15:[function(require,module,exports){ | ||
},{}]},{},[1])(1) | ||
}); | ||
}); |
@@ -17,14 +17,26 @@ 'use strict' | ||
'&': '&', | ||
'&': '&', | ||
'<': '<', | ||
'<': '<', | ||
'>': '>', | ||
'>': '>', | ||
'"': '"', | ||
'"': '"', | ||
''': "'", | ||
''': "'" | ||
''': "'" | ||
} | ||
function unescapeXMLReplace (match) { | ||
if (match[1] === '#') { | ||
var num | ||
if (match[2] === 'x') { | ||
num = parseInt(match.slice(3), 16) | ||
} else { | ||
num = parseInt(match.slice(2), 10) | ||
} | ||
// https://www.w3.org/TR/xml/#NT-Char defines legal XML characters: | ||
// #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF] | ||
if (num === 0x9 || num === 0xA || num === 0xD || | ||
(num >= 0x20 && num <= 0xD7FF) || | ||
(num >= 0xE000 && num <= 0xFFFD) || | ||
(num >= 0x10000 && num <= 0x10FFFF)) { | ||
return String.fromCodePoint(num) | ||
} | ||
throw new Error(`Illegal XML character 0x${num.toString(16)}`) | ||
} | ||
return unescapeXMLTable[match] | ||
@@ -38,3 +50,3 @@ } | ||
exports.unescapeXML = function unescapeXML (s) { | ||
return s.replace(/&(amp|#38|lt|#60|gt|#62|quot|#34|apos|#39);/g, unescapeXMLReplace) | ||
return s.replace(/&(amp|lt|gt|quot|apos|#x[0-9a-fA-F]+|#[0-9]+);/g, unescapeXMLReplace) | ||
} | ||
@@ -41,0 +53,0 @@ |
{ | ||
"name": "ltx", | ||
"version": "2.7.1", | ||
"version": "2.7.2", | ||
"description": "<xml for=\"JavaScript\">", | ||
@@ -32,4 +32,4 @@ "author": "Astro", | ||
"benchmark": "^2.1.3", | ||
"browserify": "^14.1.0", | ||
"libxmljs": "^0.18.4", | ||
"browserify": "^16.2.2", | ||
"libxmljs": "^0.19.5", | ||
"microtime": "^2.1.2", | ||
@@ -39,5 +39,5 @@ "node-expat": "^2.3.13", | ||
"sax": "^1.2.2", | ||
"standard": "^9.0.0", | ||
"standard": "^12.0.1", | ||
"vows": "^0.8.1" | ||
} | ||
} |
@@ -43,6 +43,2 @@ ltx | ||
## Documentation | ||
http://node-xmpp.org/doc/ltx.html | ||
## Benchmark | ||
@@ -49,0 +45,0 @@ |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
3741
113518
25
55