",
+ options: {
+ disabled: false,
+
+ // callbacks
+ create: null
+ },
+ _createWidget: function( options, element ) {
+ element = $( element || this.defaultElement || this )[ 0 ];
+ this.element = $( element );
+ this.uuid = widget_uuid++;
+ this.eventNamespace = "." + this.widgetName + this.uuid;
+
+ this.bindings = $();
+ this.hoverable = $();
+ this.focusable = $();
+
+ if ( element !== this ) {
+ $.data( element, this.widgetFullName, this );
+ this._on( true, this.element, {
+ remove: function( event ) {
+ if ( event.target === element ) {
+ this.destroy();
+ }
+ }
+ });
+ this.document = $( element.style ?
+ // element within the document
+ element.ownerDocument :
+ // element is window or document
+ element.document || element );
+ this.window = $( this.document[0].defaultView || this.document[0].parentWindow );
+ }
+
+ this.options = $.widget.extend( {},
+ this.options,
+ this._getCreateOptions(),
+ options );
+
+ this._create();
+ this._trigger( "create", null, this._getCreateEventData() );
+ this._init();
+ },
+ _getCreateOptions: $.noop,
+ _getCreateEventData: $.noop,
+ _create: $.noop,
+ _init: $.noop,
+
+ destroy: function() {
+ this._destroy();
+ // we can probably remove the unbind calls in 2.0
+ // all event bindings should go through this._on()
+ this.element
+ .unbind( this.eventNamespace )
+ .removeData( this.widgetFullName )
+ // support: jquery <1.6.3
+ // http://bugs.jquery.com/ticket/9413
+ .removeData( $.camelCase( this.widgetFullName ) );
+ this.widget()
+ .unbind( this.eventNamespace )
+ .removeAttr( "aria-disabled" )
+ .removeClass(
+ this.widgetFullName + "-disabled " +
+ "ui-state-disabled" );
+
+ // clean up events and states
+ this.bindings.unbind( this.eventNamespace );
+ this.hoverable.removeClass( "ui-state-hover" );
+ this.focusable.removeClass( "ui-state-focus" );
+ },
+ _destroy: $.noop,
+
+ widget: function() {
+ return this.element;
+ },
+
+ option: function( key, value ) {
+ var options = key,
+ parts,
+ curOption,
+ i;
+
+ if ( arguments.length === 0 ) {
+ // don't return a reference to the internal hash
+ return $.widget.extend( {}, this.options );
+ }
+
+ if ( typeof key === "string" ) {
+ // handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } }
+ options = {};
+ parts = key.split( "." );
+ key = parts.shift();
+ if ( parts.length ) {
+ curOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );
+ for ( i = 0; i < parts.length - 1; i++ ) {
+ curOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};
+ curOption = curOption[ parts[ i ] ];
+ }
+ key = parts.pop();
+ if ( arguments.length === 1 ) {
+ return curOption[ key ] === undefined ? null : curOption[ key ];
+ }
+ curOption[ key ] = value;
+ } else {
+ if ( arguments.length === 1 ) {
+ return this.options[ key ] === undefined ? null : this.options[ key ];
+ }
+ options[ key ] = value;
+ }
+ }
+
+ this._setOptions( options );
+
+ return this;
+ },
+ _setOptions: function( options ) {
+ var key;
+
+ for ( key in options ) {
+ this._setOption( key, options[ key ] );
+ }
+
+ return this;
+ },
+ _setOption: function( key, value ) {
+ this.options[ key ] = value;
+
+ if ( key === "disabled" ) {
+ this.widget()
+ .toggleClass( this.widgetFullName + "-disabled", !!value );
+
+ // If the widget is becoming disabled, then nothing is interactive
+ if ( value ) {
+ this.hoverable.removeClass( "ui-state-hover" );
+ this.focusable.removeClass( "ui-state-focus" );
+ }
+ }
+
+ return this;
+ },
+
+ enable: function() {
+ return this._setOptions({ disabled: false });
+ },
+ disable: function() {
+ return this._setOptions({ disabled: true });
+ },
+
+ _on: function( suppressDisabledCheck, element, handlers ) {
+ var delegateElement,
+ instance = this;
+
+ // no suppressDisabledCheck flag, shuffle arguments
+ if ( typeof suppressDisabledCheck !== "boolean" ) {
+ handlers = element;
+ element = suppressDisabledCheck;
+ suppressDisabledCheck = false;
+ }
+
+ // no element argument, shuffle and use this.element
+ if ( !handlers ) {
+ handlers = element;
+ element = this.element;
+ delegateElement = this.widget();
+ } else {
+ element = delegateElement = $( element );
+ this.bindings = this.bindings.add( element );
+ }
+
+ $.each( handlers, function( event, handler ) {
+ function handlerProxy() {
+ // allow widgets to customize the disabled handling
+ // - disabled as an array instead of boolean
+ // - disabled class as method for disabling individual parts
+ if ( !suppressDisabledCheck &&
+ ( instance.options.disabled === true ||
+ $( this ).hasClass( "ui-state-disabled" ) ) ) {
+ return;
+ }
+ return ( typeof handler === "string" ? instance[ handler ] : handler )
+ .apply( instance, arguments );
+ }
+
+ // copy the guid so direct unbinding works
+ if ( typeof handler !== "string" ) {
+ handlerProxy.guid = handler.guid =
+ handler.guid || handlerProxy.guid || $.guid++;
+ }
+
+ var match = event.match( /^([\w:-]*)\s*(.*)$/ ),
+ eventName = match[1] + instance.eventNamespace,
+ selector = match[2];
+ if ( selector ) {
+ delegateElement.delegate( selector, eventName, handlerProxy );
+ } else {
+ element.bind( eventName, handlerProxy );
+ }
+ });
+ },
+
+ _off: function( element, eventName ) {
+ eventName = (eventName || "").split( " " ).join( this.eventNamespace + " " ) +
+ this.eventNamespace;
+ element.unbind( eventName ).undelegate( eventName );
+
+ // Clear the stack to avoid memory leaks (#10056)
+ this.bindings = $( this.bindings.not( element ).get() );
+ this.focusable = $( this.focusable.not( element ).get() );
+ this.hoverable = $( this.hoverable.not( element ).get() );
+ },
+
+ _delay: function( handler, delay ) {
+ function handlerProxy() {
+ return ( typeof handler === "string" ? instance[ handler ] : handler )
+ .apply( instance, arguments );
+ }
+ var instance = this;
+ return setTimeout( handlerProxy, delay || 0 );
+ },
+
+ _hoverable: function( element ) {
+ this.hoverable = this.hoverable.add( element );
+ this._on( element, {
+ mouseenter: function( event ) {
+ $( event.currentTarget ).addClass( "ui-state-hover" );
+ },
+ mouseleave: function( event ) {
+ $( event.currentTarget ).removeClass( "ui-state-hover" );
+ }
+ });
+ },
+
+ _focusable: function( element ) {
+ this.focusable = this.focusable.add( element );
+ this._on( element, {
+ focusin: function( event ) {
+ $( event.currentTarget ).addClass( "ui-state-focus" );
+ },
+ focusout: function( event ) {
+ $( event.currentTarget ).removeClass( "ui-state-focus" );
+ }
+ });
+ },
+
+ _trigger: function( type, event, data ) {
+ var prop, orig,
+ callback = this.options[ type ];
+
+ data = data || {};
+ event = $.Event( event );
+ event.type = ( type === this.widgetEventPrefix ?
+ type :
+ this.widgetEventPrefix + type ).toLowerCase();
+ // the original event may come from any element
+ // so we need to reset the target on the new event
+ event.target = this.element[ 0 ];
+
+ // copy original event properties over to the new event
+ orig = event.originalEvent;
+ if ( orig ) {
+ for ( prop in orig ) {
+ if ( !( prop in event ) ) {
+ event[ prop ] = orig[ prop ];
+ }
+ }
+ }
+
+ this.element.trigger( event, data );
+ return !( $.isFunction( callback ) &&
+ callback.apply( this.element[0], [ event ].concat( data ) ) === false ||
+ event.isDefaultPrevented() );
+ }
+};
+
+$.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) {
+ $.Widget.prototype[ "_" + method ] = function( element, options, callback ) {
+ if ( typeof options === "string" ) {
+ options = { effect: options };
+ }
+ var hasOptions,
+ effectName = !options ?
+ method :
+ options === true || typeof options === "number" ?
+ defaultEffect :
+ options.effect || defaultEffect;
+ options = options || {};
+ if ( typeof options === "number" ) {
+ options = { duration: options };
+ }
+ hasOptions = !$.isEmptyObject( options );
+ options.complete = callback;
+ if ( options.delay ) {
+ element.delay( options.delay );
+ }
+ if ( hasOptions && $.effects && $.effects.effect[ effectName ] ) {
+ element[ method ]( options );
+ } else if ( effectName !== method && element[ effectName ] ) {
+ element[ effectName ]( options.duration, options.easing, callback );
+ } else {
+ element.queue(function( next ) {
+ $( this )[ method ]();
+ if ( callback ) {
+ callback.call( element[ 0 ] );
+ }
+ next();
+ });
+ }
+ };
+});
+
+var widget = $.widget;
+
+
+/*!
+ * jQuery UI Mouse 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/mouse/
+ */
+
+
+var mouseHandled = false;
+$( document ).mouseup( function() {
+ mouseHandled = false;
+});
+
+var mouse = $.widget("ui.mouse", {
+ version: "1.11.4",
+ options: {
+ cancel: "input,textarea,button,select,option",
+ distance: 1,
+ delay: 0
+ },
+ _mouseInit: function() {
+ var that = this;
+
+ this.element
+ .bind("mousedown." + this.widgetName, function(event) {
+ return that._mouseDown(event);
+ })
+ .bind("click." + this.widgetName, function(event) {
+ if (true === $.data(event.target, that.widgetName + ".preventClickEvent")) {
+ $.removeData(event.target, that.widgetName + ".preventClickEvent");
+ event.stopImmediatePropagation();
+ return false;
+ }
+ });
+
+ this.started = false;
+ },
+
+ // TODO: make sure destroying one instance of mouse doesn't mess with
+ // other instances of mouse
+ _mouseDestroy: function() {
+ this.element.unbind("." + this.widgetName);
+ if ( this._mouseMoveDelegate ) {
+ this.document
+ .unbind("mousemove." + this.widgetName, this._mouseMoveDelegate)
+ .unbind("mouseup." + this.widgetName, this._mouseUpDelegate);
+ }
+ },
+
+ _mouseDown: function(event) {
+ // don't let more than one widget handle mouseStart
+ if ( mouseHandled ) {
+ return;
+ }
+
+ this._mouseMoved = false;
+
+ // we may have missed mouseup (out of window)
+ (this._mouseStarted && this._mouseUp(event));
+
+ this._mouseDownEvent = event;
+
+ var that = this,
+ btnIsLeft = (event.which === 1),
+ // event.target.nodeName works around a bug in IE 8 with
+ // disabled inputs (#7620)
+ elIsCancel = (typeof this.options.cancel === "string" && event.target.nodeName ? $(event.target).closest(this.options.cancel).length : false);
+ if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) {
+ return true;
+ }
+
+ this.mouseDelayMet = !this.options.delay;
+ if (!this.mouseDelayMet) {
+ this._mouseDelayTimer = setTimeout(function() {
+ that.mouseDelayMet = true;
+ }, this.options.delay);
+ }
+
+ if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
+ this._mouseStarted = (this._mouseStart(event) !== false);
+ if (!this._mouseStarted) {
+ event.preventDefault();
+ return true;
+ }
+ }
+
+ // Click event may never have fired (Gecko & Opera)
+ if (true === $.data(event.target, this.widgetName + ".preventClickEvent")) {
+ $.removeData(event.target, this.widgetName + ".preventClickEvent");
+ }
+
+ // these delegates are required to keep context
+ this._mouseMoveDelegate = function(event) {
+ return that._mouseMove(event);
+ };
+ this._mouseUpDelegate = function(event) {
+ return that._mouseUp(event);
+ };
+
+ this.document
+ .bind( "mousemove." + this.widgetName, this._mouseMoveDelegate )
+ .bind( "mouseup." + this.widgetName, this._mouseUpDelegate );
+
+ event.preventDefault();
+
+ mouseHandled = true;
+ return true;
+ },
+
+ _mouseMove: function(event) {
+ // Only check for mouseups outside the document if you've moved inside the document
+ // at least once. This prevents the firing of mouseup in the case of IE<9, which will
+ // fire a mousemove event if content is placed under the cursor. See #7778
+ // Support: IE <9
+ if ( this._mouseMoved ) {
+ // IE mouseup check - mouseup happened when mouse was out of window
+ if ($.ui.ie && ( !document.documentMode || document.documentMode < 9 ) && !event.button) {
+ return this._mouseUp(event);
+
+ // Iframe mouseup check - mouseup occurred in another document
+ } else if ( !event.which ) {
+ return this._mouseUp( event );
+ }
+ }
+
+ if ( event.which || event.button ) {
+ this._mouseMoved = true;
+ }
+
+ if (this._mouseStarted) {
+ this._mouseDrag(event);
+ return event.preventDefault();
+ }
+
+ if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
+ this._mouseStarted =
+ (this._mouseStart(this._mouseDownEvent, event) !== false);
+ (this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event));
+ }
+
+ return !this._mouseStarted;
+ },
+
+ _mouseUp: function(event) {
+ this.document
+ .unbind( "mousemove." + this.widgetName, this._mouseMoveDelegate )
+ .unbind( "mouseup." + this.widgetName, this._mouseUpDelegate );
+
+ if (this._mouseStarted) {
+ this._mouseStarted = false;
+
+ if (event.target === this._mouseDownEvent.target) {
+ $.data(event.target, this.widgetName + ".preventClickEvent", true);
+ }
+
+ this._mouseStop(event);
+ }
+
+ mouseHandled = false;
+ return false;
+ },
+
+ _mouseDistanceMet: function(event) {
+ return (Math.max(
+ Math.abs(this._mouseDownEvent.pageX - event.pageX),
+ Math.abs(this._mouseDownEvent.pageY - event.pageY)
+ ) >= this.options.distance
+ );
+ },
+
+ _mouseDelayMet: function(/* event */) {
+ return this.mouseDelayMet;
+ },
+
+ // These are placeholder methods, to be overriden by extending plugin
+ _mouseStart: function(/* event */) {},
+ _mouseDrag: function(/* event */) {},
+ _mouseStop: function(/* event */) {},
+ _mouseCapture: function(/* event */) { return true; }
+});
+
+
+/*!
+ * jQuery UI Sortable 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/sortable/
+ */
+
+
+var sortable = $.widget("ui.sortable", $.ui.mouse, {
+ version: "1.11.4",
+ widgetEventPrefix: "sort",
+ ready: false,
+ options: {
+ appendTo: "parent",
+ axis: false,
+ connectWith: false,
+ containment: false,
+ cursor: "auto",
+ cursorAt: false,
+ dropOnEmpty: true,
+ forcePlaceholderSize: false,
+ forceHelperSize: false,
+ grid: false,
+ handle: false,
+ helper: "original",
+ items: "> *",
+ opacity: false,
+ placeholder: false,
+ revert: false,
+ scroll: true,
+ scrollSensitivity: 20,
+ scrollSpeed: 20,
+ scope: "default",
+ tolerance: "intersect",
+ zIndex: 1000,
+
+ // callbacks
+ activate: null,
+ beforeStop: null,
+ change: null,
+ deactivate: null,
+ out: null,
+ over: null,
+ receive: null,
+ remove: null,
+ sort: null,
+ start: null,
+ stop: null,
+ update: null
+ },
+
+ _isOverAxis: function( x, reference, size ) {
+ return ( x >= reference ) && ( x < ( reference + size ) );
+ },
+
+ _isFloating: function( item ) {
+ return (/left|right/).test(item.css("float")) || (/inline|table-cell/).test(item.css("display"));
+ },
+
+ _create: function() {
+ this.containerCache = {};
+ this.element.addClass("ui-sortable");
+
+ //Get the items
+ this.refresh();
+
+ //Let's determine the parent's offset
+ this.offset = this.element.offset();
+
+ //Initialize mouse events for interaction
+ this._mouseInit();
+
+ this._setHandleClassName();
+
+ //We're ready to go
+ this.ready = true;
+
+ },
+
+ _setOption: function( key, value ) {
+ this._super( key, value );
+
+ if ( key === "handle" ) {
+ this._setHandleClassName();
+ }
+ },
+
+ _setHandleClassName: function() {
+ this.element.find( ".ui-sortable-handle" ).removeClass( "ui-sortable-handle" );
+ $.each( this.items, function() {
+ ( this.instance.options.handle ?
+ this.item.find( this.instance.options.handle ) : this.item )
+ .addClass( "ui-sortable-handle" );
+ });
+ },
+
+ _destroy: function() {
+ this.element
+ .removeClass( "ui-sortable ui-sortable-disabled" )
+ .find( ".ui-sortable-handle" )
+ .removeClass( "ui-sortable-handle" );
+ this._mouseDestroy();
+
+ for ( var i = this.items.length - 1; i >= 0; i-- ) {
+ this.items[i].item.removeData(this.widgetName + "-item");
+ }
+
+ return this;
+ },
+
+ _mouseCapture: function(event, overrideHandle) {
+ var currentItem = null,
+ validHandle = false,
+ that = this;
+
+ if (this.reverting) {
+ return false;
+ }
+
+ if(this.options.disabled || this.options.type === "static") {
+ return false;
+ }
+
+ //We have to refresh the items data once first
+ this._refreshItems(event);
+
+ //Find out if the clicked node (or one of its parents) is a actual item in this.items
+ $(event.target).parents().each(function() {
+ if($.data(this, that.widgetName + "-item") === that) {
+ currentItem = $(this);
+ return false;
+ }
+ });
+ if($.data(event.target, that.widgetName + "-item") === that) {
+ currentItem = $(event.target);
+ }
+
+ if(!currentItem) {
+ return false;
+ }
+ if(this.options.handle && !overrideHandle) {
+ $(this.options.handle, currentItem).find("*").addBack().each(function() {
+ if(this === event.target) {
+ validHandle = true;
+ }
+ });
+ if(!validHandle) {
+ return false;
+ }
+ }
+
+ this.currentItem = currentItem;
+ this._removeCurrentsFromItems();
+ return true;
+
+ },
+
+ _mouseStart: function(event, overrideHandle, noActivation) {
+
+ var i, body,
+ o = this.options;
+
+ this.currentContainer = this;
+
+ //We only need to call refreshPositions, because the refreshItems call has been moved to mouseCapture
+ this.refreshPositions();
+
+ //Create and append the visible helper
+ this.helper = this._createHelper(event);
+
+ //Cache the helper size
+ this._cacheHelperProportions();
+
+ /*
+ * - Position generation -
+ * This block generates everything position related - it's the core of draggables.
+ */
+
+ //Cache the margins of the original element
+ this._cacheMargins();
+
+ //Get the next scrolling parent
+ this.scrollParent = this.helper.scrollParent();
+
+ //The element's absolute position on the page minus margins
+ this.offset = this.currentItem.offset();
+ this.offset = {
+ top: this.offset.top - this.margins.top,
+ left: this.offset.left - this.margins.left
+ };
+
+ $.extend(this.offset, {
+ click: { //Where the click happened, relative to the element
+ left: event.pageX - this.offset.left,
+ top: event.pageY - this.offset.top
+ },
+ parent: this._getParentOffset(),
+ relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper
+ });
+
+ // Only after we got the offset, we can change the helper's position to absolute
+ // TODO: Still need to figure out a way to make relative sorting possible
+ this.helper.css("position", "absolute");
+ this.cssPosition = this.helper.css("position");
+
+ //Generate the original position
+ this.originalPosition = this._generatePosition(event);
+ this.originalPageX = event.pageX;
+ this.originalPageY = event.pageY;
+
+ //Adjust the mouse offset relative to the helper if "cursorAt" is supplied
+ (o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt));
+
+ //Cache the former DOM position
+ this.domPosition = { prev: this.currentItem.prev()[0], parent: this.currentItem.parent()[0] };
+
+ //If the helper is not the original, hide the original so it's not playing any role during the drag, won't cause anything bad this way
+ if(this.helper[0] !== this.currentItem[0]) {
+ this.currentItem.hide();
+ }
+
+ //Create the placeholder
+ this._createPlaceholder();
+
+ //Set a containment if given in the options
+ if(o.containment) {
+ this._setContainment();
+ }
+
+ if( o.cursor && o.cursor !== "auto" ) { // cursor option
+ body = this.document.find( "body" );
+
+ // support: IE
+ this.storedCursor = body.css( "cursor" );
+ body.css( "cursor", o.cursor );
+
+ this.storedStylesheet = $( "" ).appendTo( body );
+ }
+
+ if(o.opacity) { // opacity option
+ if (this.helper.css("opacity")) {
+ this._storedOpacity = this.helper.css("opacity");
+ }
+ this.helper.css("opacity", o.opacity);
+ }
+
+ if(o.zIndex) { // zIndex option
+ if (this.helper.css("zIndex")) {
+ this._storedZIndex = this.helper.css("zIndex");
+ }
+ this.helper.css("zIndex", o.zIndex);
+ }
+
+ //Prepare scrolling
+ if(this.scrollParent[0] !== this.document[0] && this.scrollParent[0].tagName !== "HTML") {
+ this.overflowOffset = this.scrollParent.offset();
+ }
+
+ //Call callbacks
+ this._trigger("start", event, this._uiHash());
+
+ //Recache the helper size
+ if(!this._preserveHelperProportions) {
+ this._cacheHelperProportions();
+ }
+
+
+ //Post "activate" events to possible containers
+ if( !noActivation ) {
+ for ( i = this.containers.length - 1; i >= 0; i-- ) {
+ this.containers[ i ]._trigger( "activate", event, this._uiHash( this ) );
+ }
+ }
+
+ //Prepare possible droppables
+ if($.ui.ddmanager) {
+ $.ui.ddmanager.current = this;
+ }
+
+ if ($.ui.ddmanager && !o.dropBehaviour) {
+ $.ui.ddmanager.prepareOffsets(this, event);
+ }
+
+ this.dragging = true;
+
+ this.helper.addClass("ui-sortable-helper");
+ this._mouseDrag(event); //Execute the drag once - this causes the helper not to be visible before getting its correct position
+ return true;
+
+ },
+
+ _mouseDrag: function(event) {
+ var i, item, itemElement, intersection,
+ o = this.options,
+ scrolled = false;
+
+ //Compute the helpers position
+ this.position = this._generatePosition(event);
+ this.positionAbs = this._convertPositionTo("absolute");
+
+ if (!this.lastPositionAbs) {
+ this.lastPositionAbs = this.positionAbs;
+ }
+
+ //Do scrolling
+ if(this.options.scroll) {
+ if(this.scrollParent[0] !== this.document[0] && this.scrollParent[0].tagName !== "HTML") {
+
+ if((this.overflowOffset.top + this.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) {
+ this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop + o.scrollSpeed;
+ } else if(event.pageY - this.overflowOffset.top < o.scrollSensitivity) {
+ this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop - o.scrollSpeed;
+ }
+
+ if((this.overflowOffset.left + this.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) {
+ this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft + o.scrollSpeed;
+ } else if(event.pageX - this.overflowOffset.left < o.scrollSensitivity) {
+ this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft - o.scrollSpeed;
+ }
+
+ } else {
+
+ if(event.pageY - this.document.scrollTop() < o.scrollSensitivity) {
+ scrolled = this.document.scrollTop(this.document.scrollTop() - o.scrollSpeed);
+ } else if(this.window.height() - (event.pageY - this.document.scrollTop()) < o.scrollSensitivity) {
+ scrolled = this.document.scrollTop(this.document.scrollTop() + o.scrollSpeed);
+ }
+
+ if(event.pageX - this.document.scrollLeft() < o.scrollSensitivity) {
+ scrolled = this.document.scrollLeft(this.document.scrollLeft() - o.scrollSpeed);
+ } else if(this.window.width() - (event.pageX - this.document.scrollLeft()) < o.scrollSensitivity) {
+ scrolled = this.document.scrollLeft(this.document.scrollLeft() + o.scrollSpeed);
+ }
+
+ }
+
+ if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) {
+ $.ui.ddmanager.prepareOffsets(this, event);
+ }
+ }
+
+ //Regenerate the absolute position used for position checks
+ this.positionAbs = this._convertPositionTo("absolute");
+
+ //Set the helper position
+ if(!this.options.axis || this.options.axis !== "y") {
+ this.helper[0].style.left = this.position.left+"px";
+ }
+ if(!this.options.axis || this.options.axis !== "x") {
+ this.helper[0].style.top = this.position.top+"px";
+ }
+
+ //Rearrange
+ for (i = this.items.length - 1; i >= 0; i--) {
+
+ //Cache variables and intersection, continue if no intersection
+ item = this.items[i];
+ itemElement = item.item[0];
+ intersection = this._intersectsWithPointer(item);
+ if (!intersection) {
+ continue;
+ }
+
+ // Only put the placeholder inside the current Container, skip all
+ // items from other containers. This works because when moving
+ // an item from one container to another the
+ // currentContainer is switched before the placeholder is moved.
+ //
+ // Without this, moving items in "sub-sortables" can cause
+ // the placeholder to jitter between the outer and inner container.
+ if (item.instance !== this.currentContainer) {
+ continue;
+ }
+
+ // cannot intersect with itself
+ // no useless actions that have been done before
+ // no action if the item moved is the parent of the item checked
+ if (itemElement !== this.currentItem[0] &&
+ this.placeholder[intersection === 1 ? "next" : "prev"]()[0] !== itemElement &&
+ !$.contains(this.placeholder[0], itemElement) &&
+ (this.options.type === "semi-dynamic" ? !$.contains(this.element[0], itemElement) : true)
+ ) {
+
+ this.direction = intersection === 1 ? "down" : "up";
+
+ if (this.options.tolerance === "pointer" || this._intersectsWithSides(item)) {
+ this._rearrange(event, item);
+ } else {
+ break;
+ }
+
+ this._trigger("change", event, this._uiHash());
+ break;
+ }
+ }
+
+ //Post events to containers
+ this._contactContainers(event);
+
+ //Interconnect with droppables
+ if($.ui.ddmanager) {
+ $.ui.ddmanager.drag(this, event);
+ }
+
+ //Call callbacks
+ this._trigger("sort", event, this._uiHash());
+
+ this.lastPositionAbs = this.positionAbs;
+ return false;
+
+ },
+
+ _mouseStop: function(event, noPropagation) {
+
+ if(!event) {
+ return;
+ }
+
+ //If we are using droppables, inform the manager about the drop
+ if ($.ui.ddmanager && !this.options.dropBehaviour) {
+ $.ui.ddmanager.drop(this, event);
+ }
+
+ if(this.options.revert) {
+ var that = this,
+ cur = this.placeholder.offset(),
+ axis = this.options.axis,
+ animation = {};
+
+ if ( !axis || axis === "x" ) {
+ animation.left = cur.left - this.offset.parent.left - this.margins.left + (this.offsetParent[0] === this.document[0].body ? 0 : this.offsetParent[0].scrollLeft);
+ }
+ if ( !axis || axis === "y" ) {
+ animation.top = cur.top - this.offset.parent.top - this.margins.top + (this.offsetParent[0] === this.document[0].body ? 0 : this.offsetParent[0].scrollTop);
+ }
+ this.reverting = true;
+ $(this.helper).animate( animation, parseInt(this.options.revert, 10) || 500, function() {
+ that._clear(event);
+ });
+ } else {
+ this._clear(event, noPropagation);
+ }
+
+ return false;
+
+ },
+
+ cancel: function() {
+
+ if(this.dragging) {
+
+ this._mouseUp({ target: null });
+
+ if(this.options.helper === "original") {
+ this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper");
+ } else {
+ this.currentItem.show();
+ }
+
+ //Post deactivating events to containers
+ for (var i = this.containers.length - 1; i >= 0; i--){
+ this.containers[i]._trigger("deactivate", null, this._uiHash(this));
+ if(this.containers[i].containerCache.over) {
+ this.containers[i]._trigger("out", null, this._uiHash(this));
+ this.containers[i].containerCache.over = 0;
+ }
+ }
+
+ }
+
+ if (this.placeholder) {
+ //$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node!
+ if(this.placeholder[0].parentNode) {
+ this.placeholder[0].parentNode.removeChild(this.placeholder[0]);
+ }
+ if(this.options.helper !== "original" && this.helper && this.helper[0].parentNode) {
+ this.helper.remove();
+ }
+
+ $.extend(this, {
+ helper: null,
+ dragging: false,
+ reverting: false,
+ _noFinalSort: null
+ });
+
+ if(this.domPosition.prev) {
+ $(this.domPosition.prev).after(this.currentItem);
+ } else {
+ $(this.domPosition.parent).prepend(this.currentItem);
+ }
+ }
+
+ return this;
+
+ },
+
+ serialize: function(o) {
+
+ var items = this._getItemsAsjQuery(o && o.connected),
+ str = [];
+ o = o || {};
+
+ $(items).each(function() {
+ var res = ($(o.item || this).attr(o.attribute || "id") || "").match(o.expression || (/(.+)[\-=_](.+)/));
+ if (res) {
+ str.push((o.key || res[1]+"[]")+"="+(o.key && o.expression ? res[1] : res[2]));
+ }
+ });
+
+ if(!str.length && o.key) {
+ str.push(o.key + "=");
+ }
+
+ return str.join("&");
+
+ },
+
+ toArray: function(o) {
+
+ var items = this._getItemsAsjQuery(o && o.connected),
+ ret = [];
+
+ o = o || {};
+
+ items.each(function() { ret.push($(o.item || this).attr(o.attribute || "id") || ""); });
+ return ret;
+
+ },
+
+ /* Be careful with the following core functions */
+ _intersectsWith: function(item) {
+
+ var x1 = this.positionAbs.left,
+ x2 = x1 + this.helperProportions.width,
+ y1 = this.positionAbs.top,
+ y2 = y1 + this.helperProportions.height,
+ l = item.left,
+ r = l + item.width,
+ t = item.top,
+ b = t + item.height,
+ dyClick = this.offset.click.top,
+ dxClick = this.offset.click.left,
+ isOverElementHeight = ( this.options.axis === "x" ) || ( ( y1 + dyClick ) > t && ( y1 + dyClick ) < b ),
+ isOverElementWidth = ( this.options.axis === "y" ) || ( ( x1 + dxClick ) > l && ( x1 + dxClick ) < r ),
+ isOverElement = isOverElementHeight && isOverElementWidth;
+
+ if ( this.options.tolerance === "pointer" ||
+ this.options.forcePointerForContainers ||
+ (this.options.tolerance !== "pointer" && this.helperProportions[this.floating ? "width" : "height"] > item[this.floating ? "width" : "height"])
+ ) {
+ return isOverElement;
+ } else {
+
+ return (l < x1 + (this.helperProportions.width / 2) && // Right Half
+ x2 - (this.helperProportions.width / 2) < r && // Left Half
+ t < y1 + (this.helperProportions.height / 2) && // Bottom Half
+ y2 - (this.helperProportions.height / 2) < b ); // Top Half
+
+ }
+ },
+
+ _intersectsWithPointer: function(item) {
+
+ var isOverElementHeight = (this.options.axis === "x") || this._isOverAxis(this.positionAbs.top + this.offset.click.top, item.top, item.height),
+ isOverElementWidth = (this.options.axis === "y") || this._isOverAxis(this.positionAbs.left + this.offset.click.left, item.left, item.width),
+ isOverElement = isOverElementHeight && isOverElementWidth,
+ verticalDirection = this._getDragVerticalDirection(),
+ horizontalDirection = this._getDragHorizontalDirection();
+
+ if (!isOverElement) {
+ return false;
+ }
+
+ return this.floating ?
+ ( ((horizontalDirection && horizontalDirection === "right") || verticalDirection === "down") ? 2 : 1 )
+ : ( verticalDirection && (verticalDirection === "down" ? 2 : 1) );
+
+ },
+
+ _intersectsWithSides: function(item) {
+
+ var isOverBottomHalf = this._isOverAxis(this.positionAbs.top + this.offset.click.top, item.top + (item.height/2), item.height),
+ isOverRightHalf = this._isOverAxis(this.positionAbs.left + this.offset.click.left, item.left + (item.width/2), item.width),
+ verticalDirection = this._getDragVerticalDirection(),
+ horizontalDirection = this._getDragHorizontalDirection();
+
+ if (this.floating && horizontalDirection) {
+ return ((horizontalDirection === "right" && isOverRightHalf) || (horizontalDirection === "left" && !isOverRightHalf));
+ } else {
+ return verticalDirection && ((verticalDirection === "down" && isOverBottomHalf) || (verticalDirection === "up" && !isOverBottomHalf));
+ }
+
+ },
+
+ _getDragVerticalDirection: function() {
+ var delta = this.positionAbs.top - this.lastPositionAbs.top;
+ return delta !== 0 && (delta > 0 ? "down" : "up");
+ },
+
+ _getDragHorizontalDirection: function() {
+ var delta = this.positionAbs.left - this.lastPositionAbs.left;
+ return delta !== 0 && (delta > 0 ? "right" : "left");
+ },
+
+ refresh: function(event) {
+ this._refreshItems(event);
+ this._setHandleClassName();
+ this.refreshPositions();
+ return this;
+ },
+
+ _connectWith: function() {
+ var options = this.options;
+ return options.connectWith.constructor === String ? [options.connectWith] : options.connectWith;
+ },
+
+ _getItemsAsjQuery: function(connected) {
+
+ var i, j, cur, inst,
+ items = [],
+ queries = [],
+ connectWith = this._connectWith();
+
+ if(connectWith && connected) {
+ for (i = connectWith.length - 1; i >= 0; i--){
+ cur = $(connectWith[i], this.document[0]);
+ for ( j = cur.length - 1; j >= 0; j--){
+ inst = $.data(cur[j], this.widgetFullName);
+ if(inst && inst !== this && !inst.options.disabled) {
+ queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element) : $(inst.options.items, inst.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), inst]);
+ }
+ }
+ }
+ }
+
+ queries.push([$.isFunction(this.options.items) ? this.options.items.call(this.element, null, { options: this.options, item: this.currentItem }) : $(this.options.items, this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), this]);
+
+ function addItems() {
+ items.push( this );
+ }
+ for (i = queries.length - 1; i >= 0; i--){
+ queries[i][0].each( addItems );
+ }
+
+ return $(items);
+
+ },
+
+ _removeCurrentsFromItems: function() {
+
+ var list = this.currentItem.find(":data(" + this.widgetName + "-item)");
+
+ this.items = $.grep(this.items, function (item) {
+ for (var j=0; j < list.length; j++) {
+ if(list[j] === item.item[0]) {
+ return false;
+ }
+ }
+ return true;
+ });
+
+ },
+
+ _refreshItems: function(event) {
+
+ this.items = [];
+ this.containers = [this];
+
+ var i, j, cur, inst, targetData, _queries, item, queriesLength,
+ items = this.items,
+ queries = [[$.isFunction(this.options.items) ? this.options.items.call(this.element[0], event, { item: this.currentItem }) : $(this.options.items, this.element), this]],
+ connectWith = this._connectWith();
+
+ if(connectWith && this.ready) { //Shouldn't be run the first time through due to massive slow-down
+ for (i = connectWith.length - 1; i >= 0; i--){
+ cur = $(connectWith[i], this.document[0]);
+ for (j = cur.length - 1; j >= 0; j--){
+ inst = $.data(cur[j], this.widgetFullName);
+ if(inst && inst !== this && !inst.options.disabled) {
+ queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element[0], event, { item: this.currentItem }) : $(inst.options.items, inst.element), inst]);
+ this.containers.push(inst);
+ }
+ }
+ }
+ }
+
+ for (i = queries.length - 1; i >= 0; i--) {
+ targetData = queries[i][1];
+ _queries = queries[i][0];
+
+ for (j=0, queriesLength = _queries.length; j < queriesLength; j++) {
+ item = $(_queries[j]);
+
+ item.data(this.widgetName + "-item", targetData); // Data for target checking (mouse manager)
+
+ items.push({
+ item: item,
+ instance: targetData,
+ width: 0, height: 0,
+ left: 0, top: 0
+ });
+ }
+ }
+
+ },
+
+ refreshPositions: function(fast) {
+
+ // Determine whether items are being displayed horizontally
+ this.floating = this.items.length ?
+ this.options.axis === "x" || this._isFloating( this.items[ 0 ].item ) :
+ false;
+
+ //This has to be redone because due to the item being moved out/into the offsetParent, the offsetParent's position will change
+ if(this.offsetParent && this.helper) {
+ this.offset.parent = this._getParentOffset();
+ }
+
+ var i, item, t, p;
+
+ for (i = this.items.length - 1; i >= 0; i--){
+ item = this.items[i];
+
+ //We ignore calculating positions of all connected containers when we're not over them
+ if(item.instance !== this.currentContainer && this.currentContainer && item.item[0] !== this.currentItem[0]) {
+ continue;
+ }
+
+ t = this.options.toleranceElement ? $(this.options.toleranceElement, item.item) : item.item;
+
+ if (!fast) {
+ item.width = t.outerWidth();
+ item.height = t.outerHeight();
+ }
+
+ p = t.offset();
+ item.left = p.left;
+ item.top = p.top;
+ }
+
+ if(this.options.custom && this.options.custom.refreshContainers) {
+ this.options.custom.refreshContainers.call(this);
+ } else {
+ for (i = this.containers.length - 1; i >= 0; i--){
+ p = this.containers[i].element.offset();
+ this.containers[i].containerCache.left = p.left;
+ this.containers[i].containerCache.top = p.top;
+ this.containers[i].containerCache.width = this.containers[i].element.outerWidth();
+ this.containers[i].containerCache.height = this.containers[i].element.outerHeight();
+ }
+ }
+
+ return this;
+ },
+
+ _createPlaceholder: function(that) {
+ that = that || this;
+ var className,
+ o = that.options;
+
+ if(!o.placeholder || o.placeholder.constructor === String) {
+ className = o.placeholder;
+ o.placeholder = {
+ element: function() {
+
+ var nodeName = that.currentItem[0].nodeName.toLowerCase(),
+ element = $( "<" + nodeName + ">", that.document[0] )
+ .addClass(className || that.currentItem[0].className+" ui-sortable-placeholder")
+ .removeClass("ui-sortable-helper");
+
+ if ( nodeName === "tbody" ) {
+ that._createTrPlaceholder(
+ that.currentItem.find( "tr" ).eq( 0 ),
+ $( "
", that.document[ 0 ] ).appendTo( element )
+ );
+ } else if ( nodeName === "tr" ) {
+ that._createTrPlaceholder( that.currentItem, element );
+ } else if ( nodeName === "img" ) {
+ element.attr( "src", that.currentItem.attr( "src" ) );
+ }
+
+ if ( !className ) {
+ element.css( "visibility", "hidden" );
+ }
+
+ return element;
+ },
+ update: function(container, p) {
+
+ // 1. If a className is set as 'placeholder option, we don't force sizes - the class is responsible for that
+ // 2. The option 'forcePlaceholderSize can be enabled to force it even if a class name is specified
+ if(className && !o.forcePlaceholderSize) {
+ return;
+ }
+
+ //If the element doesn't have a actual height by itself (without styles coming from a stylesheet), it receives the inline height from the dragged item
+ if(!p.height()) { p.height(that.currentItem.innerHeight() - parseInt(that.currentItem.css("paddingTop")||0, 10) - parseInt(that.currentItem.css("paddingBottom")||0, 10)); }
+ if(!p.width()) { p.width(that.currentItem.innerWidth() - parseInt(that.currentItem.css("paddingLeft")||0, 10) - parseInt(that.currentItem.css("paddingRight")||0, 10)); }
+ }
+ };
+ }
+
+ //Create the placeholder
+ that.placeholder = $(o.placeholder.element.call(that.element, that.currentItem));
+
+ //Append it after the actual current item
+ that.currentItem.after(that.placeholder);
+
+ //Update the size of the placeholder (TODO: Logic to fuzzy, see line 316/317)
+ o.placeholder.update(that, that.placeholder);
+
+ },
+
+ _createTrPlaceholder: function( sourceTr, targetTr ) {
+ var that = this;
+
+ sourceTr.children().each(function() {
+ $( " | ", that.document[ 0 ] )
+ .attr( "colspan", $( this ).attr( "colspan" ) || 1 )
+ .appendTo( targetTr );
+ });
+ },
+
+ _contactContainers: function(event) {
+ var i, j, dist, itemWithLeastDistance, posProperty, sizeProperty, cur, nearBottom, floating, axis,
+ innermostContainer = null,
+ innermostIndex = null;
+
+ // get innermost container that intersects with item
+ for (i = this.containers.length - 1; i >= 0; i--) {
+
+ // never consider a container that's located within the item itself
+ if($.contains(this.currentItem[0], this.containers[i].element[0])) {
+ continue;
+ }
+
+ if(this._intersectsWith(this.containers[i].containerCache)) {
+
+ // if we've already found a container and it's more "inner" than this, then continue
+ if(innermostContainer && $.contains(this.containers[i].element[0], innermostContainer.element[0])) {
+ continue;
+ }
+
+ innermostContainer = this.containers[i];
+ innermostIndex = i;
+
+ } else {
+ // container doesn't intersect. trigger "out" event if necessary
+ if(this.containers[i].containerCache.over) {
+ this.containers[i]._trigger("out", event, this._uiHash(this));
+ this.containers[i].containerCache.over = 0;
+ }
+ }
+
+ }
+
+ // if no intersecting containers found, return
+ if(!innermostContainer) {
+ return;
+ }
+
+ // move the item into the container if it's not there already
+ if(this.containers.length === 1) {
+ if (!this.containers[innermostIndex].containerCache.over) {
+ this.containers[innermostIndex]._trigger("over", event, this._uiHash(this));
+ this.containers[innermostIndex].containerCache.over = 1;
+ }
+ } else {
+
+ //When entering a new container, we will find the item with the least distance and append our item near it
+ dist = 10000;
+ itemWithLeastDistance = null;
+ floating = innermostContainer.floating || this._isFloating(this.currentItem);
+ posProperty = floating ? "left" : "top";
+ sizeProperty = floating ? "width" : "height";
+ axis = floating ? "clientX" : "clientY";
+
+ for (j = this.items.length - 1; j >= 0; j--) {
+ if(!$.contains(this.containers[innermostIndex].element[0], this.items[j].item[0])) {
+ continue;
+ }
+ if(this.items[j].item[0] === this.currentItem[0]) {
+ continue;
+ }
+
+ cur = this.items[j].item.offset()[posProperty];
+ nearBottom = false;
+ if ( event[ axis ] - cur > this.items[ j ][ sizeProperty ] / 2 ) {
+ nearBottom = true;
+ }
+
+ if ( Math.abs( event[ axis ] - cur ) < dist ) {
+ dist = Math.abs( event[ axis ] - cur );
+ itemWithLeastDistance = this.items[ j ];
+ this.direction = nearBottom ? "up": "down";
+ }
+ }
+
+ //Check if dropOnEmpty is enabled
+ if(!itemWithLeastDistance && !this.options.dropOnEmpty) {
+ return;
+ }
+
+ if(this.currentContainer === this.containers[innermostIndex]) {
+ if ( !this.currentContainer.containerCache.over ) {
+ this.containers[ innermostIndex ]._trigger( "over", event, this._uiHash() );
+ this.currentContainer.containerCache.over = 1;
+ }
+ return;
+ }
+
+ itemWithLeastDistance ? this._rearrange(event, itemWithLeastDistance, null, true) : this._rearrange(event, null, this.containers[innermostIndex].element, true);
+ this._trigger("change", event, this._uiHash());
+ this.containers[innermostIndex]._trigger("change", event, this._uiHash(this));
+ this.currentContainer = this.containers[innermostIndex];
+
+ //Update the placeholder
+ this.options.placeholder.update(this.currentContainer, this.placeholder);
+
+ this.containers[innermostIndex]._trigger("over", event, this._uiHash(this));
+ this.containers[innermostIndex].containerCache.over = 1;
+ }
+
+
+ },
+
+ _createHelper: function(event) {
+
+ var o = this.options,
+ helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event, this.currentItem])) : (o.helper === "clone" ? this.currentItem.clone() : this.currentItem);
+
+ //Add the helper to the DOM if that didn't happen already
+ if(!helper.parents("body").length) {
+ $(o.appendTo !== "parent" ? o.appendTo : this.currentItem[0].parentNode)[0].appendChild(helper[0]);
+ }
+
+ if(helper[0] === this.currentItem[0]) {
+ this._storedCSS = { width: this.currentItem[0].style.width, height: this.currentItem[0].style.height, position: this.currentItem.css("position"), top: this.currentItem.css("top"), left: this.currentItem.css("left") };
+ }
+
+ if(!helper[0].style.width || o.forceHelperSize) {
+ helper.width(this.currentItem.width());
+ }
+ if(!helper[0].style.height || o.forceHelperSize) {
+ helper.height(this.currentItem.height());
+ }
+
+ return helper;
+
+ },
+
+ _adjustOffsetFromHelper: function(obj) {
+ if (typeof obj === "string") {
+ obj = obj.split(" ");
+ }
+ if ($.isArray(obj)) {
+ obj = {left: +obj[0], top: +obj[1] || 0};
+ }
+ if ("left" in obj) {
+ this.offset.click.left = obj.left + this.margins.left;
+ }
+ if ("right" in obj) {
+ this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
+ }
+ if ("top" in obj) {
+ this.offset.click.top = obj.top + this.margins.top;
+ }
+ if ("bottom" in obj) {
+ this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
+ }
+ },
+
+ _getParentOffset: function() {
+
+
+ //Get the offsetParent and cache its position
+ this.offsetParent = this.helper.offsetParent();
+ var po = this.offsetParent.offset();
+
+ // This is a special case where we need to modify a offset calculated on start, since the following happened:
+ // 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent
+ // 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that
+ // the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag
+ if(this.cssPosition === "absolute" && this.scrollParent[0] !== this.document[0] && $.contains(this.scrollParent[0], this.offsetParent[0])) {
+ po.left += this.scrollParent.scrollLeft();
+ po.top += this.scrollParent.scrollTop();
+ }
+
+ // This needs to be actually done for all browsers, since pageX/pageY includes this information
+ // with an ugly IE fix
+ if( this.offsetParent[0] === this.document[0].body || (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() === "html" && $.ui.ie)) {
+ po = { top: 0, left: 0 };
+ }
+
+ return {
+ top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0),
+ left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0)
+ };
+
+ },
+
+ _getRelativeOffset: function() {
+
+ if(this.cssPosition === "relative") {
+ var p = this.currentItem.position();
+ return {
+ top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(),
+ left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft()
+ };
+ } else {
+ return { top: 0, left: 0 };
+ }
+
+ },
+
+ _cacheMargins: function() {
+ this.margins = {
+ left: (parseInt(this.currentItem.css("marginLeft"),10) || 0),
+ top: (parseInt(this.currentItem.css("marginTop"),10) || 0)
+ };
+ },
+
+ _cacheHelperProportions: function() {
+ this.helperProportions = {
+ width: this.helper.outerWidth(),
+ height: this.helper.outerHeight()
+ };
+ },
+
+ _setContainment: function() {
+
+ var ce, co, over,
+ o = this.options;
+ if(o.containment === "parent") {
+ o.containment = this.helper[0].parentNode;
+ }
+ if(o.containment === "document" || o.containment === "window") {
+ this.containment = [
+ 0 - this.offset.relative.left - this.offset.parent.left,
+ 0 - this.offset.relative.top - this.offset.parent.top,
+ o.containment === "document" ? this.document.width() : this.window.width() - this.helperProportions.width - this.margins.left,
+ (o.containment === "document" ? this.document.width() : this.window.height() || this.document[0].body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top
+ ];
+ }
+
+ if(!(/^(document|window|parent)$/).test(o.containment)) {
+ ce = $(o.containment)[0];
+ co = $(o.containment).offset();
+ over = ($(ce).css("overflow") !== "hidden");
+
+ this.containment = [
+ co.left + (parseInt($(ce).css("borderLeftWidth"),10) || 0) + (parseInt($(ce).css("paddingLeft"),10) || 0) - this.margins.left,
+ co.top + (parseInt($(ce).css("borderTopWidth"),10) || 0) + (parseInt($(ce).css("paddingTop"),10) || 0) - this.margins.top,
+ co.left+(over ? Math.max(ce.scrollWidth,ce.offsetWidth) : ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"),10) || 0) - (parseInt($(ce).css("paddingRight"),10) || 0) - this.helperProportions.width - this.margins.left,
+ co.top+(over ? Math.max(ce.scrollHeight,ce.offsetHeight) : ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"),10) || 0) - (parseInt($(ce).css("paddingBottom"),10) || 0) - this.helperProportions.height - this.margins.top
+ ];
+ }
+
+ },
+
+ _convertPositionTo: function(d, pos) {
+
+ if(!pos) {
+ pos = this.position;
+ }
+ var mod = d === "absolute" ? 1 : -1,
+ scroll = this.cssPosition === "absolute" && !(this.scrollParent[0] !== this.document[0] && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent,
+ scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
+
+ return {
+ top: (
+ pos.top + // The absolute mouse position
+ this.offset.relative.top * mod + // Only for relative positioned nodes: Relative offset from element to offset parent
+ this.offset.parent.top * mod - // The offsetParent's offset without borders (offset + border)
+ ( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod)
+ ),
+ left: (
+ pos.left + // The absolute mouse position
+ this.offset.relative.left * mod + // Only for relative positioned nodes: Relative offset from element to offset parent
+ this.offset.parent.left * mod - // The offsetParent's offset without borders (offset + border)
+ ( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) * mod)
+ )
+ };
+
+ },
+
+ _generatePosition: function(event) {
+
+ var top, left,
+ o = this.options,
+ pageX = event.pageX,
+ pageY = event.pageY,
+ scroll = this.cssPosition === "absolute" && !(this.scrollParent[0] !== this.document[0] && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
+
+ // This is another very weird special case that only happens for relative elements:
+ // 1. If the css position is relative
+ // 2. and the scroll parent is the document or similar to the offset parent
+ // we have to refresh the relative offset during the scroll so there are no jumps
+ if(this.cssPosition === "relative" && !(this.scrollParent[0] !== this.document[0] && this.scrollParent[0] !== this.offsetParent[0])) {
+ this.offset.relative = this._getRelativeOffset();
+ }
+
+ /*
+ * - Position constraining -
+ * Constrain the position to a mix of grid, containment.
+ */
+
+ if(this.originalPosition) { //If we are not dragging yet, we won't check for options
+
+ if(this.containment) {
+ if(event.pageX - this.offset.click.left < this.containment[0]) {
+ pageX = this.containment[0] + this.offset.click.left;
+ }
+ if(event.pageY - this.offset.click.top < this.containment[1]) {
+ pageY = this.containment[1] + this.offset.click.top;
+ }
+ if(event.pageX - this.offset.click.left > this.containment[2]) {
+ pageX = this.containment[2] + this.offset.click.left;
+ }
+ if(event.pageY - this.offset.click.top > this.containment[3]) {
+ pageY = this.containment[3] + this.offset.click.top;
+ }
+ }
+
+ if(o.grid) {
+ top = this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1];
+ pageY = this.containment ? ( (top - this.offset.click.top >= this.containment[1] && top - this.offset.click.top <= this.containment[3]) ? top : ((top - this.offset.click.top >= this.containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;
+
+ left = this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0];
+ pageX = this.containment ? ( (left - this.offset.click.left >= this.containment[0] && left - this.offset.click.left <= this.containment[2]) ? left : ((left - this.offset.click.left >= this.containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;
+ }
+
+ }
+
+ return {
+ top: (
+ pageY - // The absolute mouse position
+ this.offset.click.top - // Click offset (relative to the element)
+ this.offset.relative.top - // Only for relative positioned nodes: Relative offset from element to offset parent
+ this.offset.parent.top + // The offsetParent's offset without borders (offset + border)
+ ( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ))
+ ),
+ left: (
+ pageX - // The absolute mouse position
+ this.offset.click.left - // Click offset (relative to the element)
+ this.offset.relative.left - // Only for relative positioned nodes: Relative offset from element to offset parent
+ this.offset.parent.left + // The offsetParent's offset without borders (offset + border)
+ ( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ))
+ )
+ };
+
+ },
+
+ _rearrange: function(event, i, a, hardRefresh) {
+
+ a ? a[0].appendChild(this.placeholder[0]) : i.item[0].parentNode.insertBefore(this.placeholder[0], (this.direction === "down" ? i.item[0] : i.item[0].nextSibling));
+
+ //Various things done here to improve the performance:
+ // 1. we create a setTimeout, that calls refreshPositions
+ // 2. on the instance, we have a counter variable, that get's higher after every append
+ // 3. on the local scope, we copy the counter variable, and check in the timeout, if it's still the same
+ // 4. this lets only the last addition to the timeout stack through
+ this.counter = this.counter ? ++this.counter : 1;
+ var counter = this.counter;
+
+ this._delay(function() {
+ if(counter === this.counter) {
+ this.refreshPositions(!hardRefresh); //Precompute after each DOM insertion, NOT on mousemove
+ }
+ });
+
+ },
+
+ _clear: function(event, noPropagation) {
+
+ this.reverting = false;
+ // We delay all events that have to be triggered to after the point where the placeholder has been removed and
+ // everything else normalized again
+ var i,
+ delayedTriggers = [];
+
+ // We first have to update the dom position of the actual currentItem
+ // Note: don't do it if the current item is already removed (by a user), or it gets reappended (see #4088)
+ if(!this._noFinalSort && this.currentItem.parent().length) {
+ this.placeholder.before(this.currentItem);
+ }
+ this._noFinalSort = null;
+
+ if(this.helper[0] === this.currentItem[0]) {
+ for(i in this._storedCSS) {
+ if(this._storedCSS[i] === "auto" || this._storedCSS[i] === "static") {
+ this._storedCSS[i] = "";
+ }
+ }
+ this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper");
+ } else {
+ this.currentItem.show();
+ }
+
+ if(this.fromOutside && !noPropagation) {
+ delayedTriggers.push(function(event) { this._trigger("receive", event, this._uiHash(this.fromOutside)); });
+ }
+ if((this.fromOutside || this.domPosition.prev !== this.currentItem.prev().not(".ui-sortable-helper")[0] || this.domPosition.parent !== this.currentItem.parent()[0]) && !noPropagation) {
+ delayedTriggers.push(function(event) { this._trigger("update", event, this._uiHash()); }); //Trigger update callback if the DOM position has changed
+ }
+
+ // Check if the items Container has Changed and trigger appropriate
+ // events.
+ if (this !== this.currentContainer) {
+ if(!noPropagation) {
+ delayedTriggers.push(function(event) { this._trigger("remove", event, this._uiHash()); });
+ delayedTriggers.push((function(c) { return function(event) { c._trigger("receive", event, this._uiHash(this)); }; }).call(this, this.currentContainer));
+ delayedTriggers.push((function(c) { return function(event) { c._trigger("update", event, this._uiHash(this)); }; }).call(this, this.currentContainer));
+ }
+ }
+
+
+ //Post events to containers
+ function delayEvent( type, instance, container ) {
+ return function( event ) {
+ container._trigger( type, event, instance._uiHash( instance ) );
+ };
+ }
+ for (i = this.containers.length - 1; i >= 0; i--){
+ if (!noPropagation) {
+ delayedTriggers.push( delayEvent( "deactivate", this, this.containers[ i ] ) );
+ }
+ if(this.containers[i].containerCache.over) {
+ delayedTriggers.push( delayEvent( "out", this, this.containers[ i ] ) );
+ this.containers[i].containerCache.over = 0;
+ }
+ }
+
+ //Do what was originally in plugins
+ if ( this.storedCursor ) {
+ this.document.find( "body" ).css( "cursor", this.storedCursor );
+ this.storedStylesheet.remove();
+ }
+ if(this._storedOpacity) {
+ this.helper.css("opacity", this._storedOpacity);
+ }
+ if(this._storedZIndex) {
+ this.helper.css("zIndex", this._storedZIndex === "auto" ? "" : this._storedZIndex);
+ }
+
+ this.dragging = false;
+
+ if(!noPropagation) {
+ this._trigger("beforeStop", event, this._uiHash());
+ }
+
+ //$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node!
+ this.placeholder[0].parentNode.removeChild(this.placeholder[0]);
+
+ if ( !this.cancelHelperRemoval ) {
+ if ( this.helper[ 0 ] !== this.currentItem[ 0 ] ) {
+ this.helper.remove();
+ }
+ this.helper = null;
+ }
+
+ if(!noPropagation) {
+ for (i=0; i < delayedTriggers.length; i++) {
+ delayedTriggers[i].call(this, event);
+ } //Trigger all delayed events
+ this._trigger("stop", event, this._uiHash());
+ }
+
+ this.fromOutside = false;
+ return !this.cancelHelperRemoval;
+
+ },
+
+ _trigger: function() {
+ if ($.Widget.prototype._trigger.apply(this, arguments) === false) {
+ this.cancel();
+ }
+ },
+
+ _uiHash: function(_inst) {
+ var inst = _inst || this;
+ return {
+ helper: inst.helper,
+ placeholder: inst.placeholder || $([]),
+ position: inst.position,
+ originalPosition: inst.originalPosition,
+ offset: inst.positionAbs,
+ item: inst.currentItem,
+ sender: _inst ? _inst.element : null
+ };
+ }
+
+});
+
+
+
+}));
\ No newline at end of file
diff --git a/src/addons/slider/lib/jquery.ui.widget.js b/src/addons/slider/lib/jquery.ui.widget.js
new file mode 100644
index 000000000..9c07bc110
--- /dev/null
+++ b/src/addons/slider/lib/jquery.ui.widget.js
@@ -0,0 +1,521 @@
+/*!
+ * jQuery UI Widget 1.10.2
+ * http://jqueryui.com
+ *
+ * Copyright 2013 jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/jQuery.widget/
+ */
+(function( $, undefined ) {
+
+var uuid = 0,
+ slice = Array.prototype.slice,
+ _cleanData = $.cleanData;
+$.cleanData = function( elems ) {
+ for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
+ try {
+ $( elem ).triggerHandler( "remove" );
+ // http://bugs.jquery.com/ticket/8235
+ } catch( e ) {}
+ }
+ _cleanData( elems );
+};
+
+$.widget = function( name, base, prototype ) {
+ var fullName, existingConstructor, constructor, basePrototype,
+ // proxiedPrototype allows the provided prototype to remain unmodified
+ // so that it can be used as a mixin for multiple widgets (#8876)
+ proxiedPrototype = {},
+ namespace = name.split( "." )[ 0 ];
+
+ name = name.split( "." )[ 1 ];
+ fullName = namespace + "-" + name;
+
+ if ( !prototype ) {
+ prototype = base;
+ base = $.Widget;
+ }
+
+ // create selector for plugin
+ $.expr[ ":" ][ fullName.toLowerCase() ] = function( elem ) {
+ return !!$.data( elem, fullName );
+ };
+
+ $[ namespace ] = $[ namespace ] || {};
+ existingConstructor = $[ namespace ][ name ];
+ constructor = $[ namespace ][ name ] = function( options, element ) {
+ // allow instantiation without "new" keyword
+ if ( !this._createWidget ) {
+ return new constructor( options, element );
+ }
+
+ // allow instantiation without initializing for simple inheritance
+ // must use "new" keyword (the code above always passes args)
+ if ( arguments.length ) {
+ this._createWidget( options, element );
+ }
+ };
+ // extend with the existing constructor to carry over any static properties
+ $.extend( constructor, existingConstructor, {
+ version: prototype.version,
+ // copy the object used to create the prototype in case we need to
+ // redefine the widget later
+ _proto: $.extend( {}, prototype ),
+ // track widgets that inherit from this widget in case this widget is
+ // redefined after a widget inherits from it
+ _childConstructors: []
+ });
+
+ basePrototype = new base();
+ // we need to make the options hash a property directly on the new instance
+ // otherwise we'll modify the options hash on the prototype that we're
+ // inheriting from
+ basePrototype.options = $.widget.extend( {}, basePrototype.options );
+ $.each( prototype, function( prop, value ) {
+ if ( !$.isFunction( value ) ) {
+ proxiedPrototype[ prop ] = value;
+ return;
+ }
+ proxiedPrototype[ prop ] = (function() {
+ var _super = function() {
+ return base.prototype[ prop ].apply( this, arguments );
+ },
+ _superApply = function( args ) {
+ return base.prototype[ prop ].apply( this, args );
+ };
+ return function() {
+ var __super = this._super,
+ __superApply = this._superApply,
+ returnValue;
+
+ this._super = _super;
+ this._superApply = _superApply;
+
+ returnValue = value.apply( this, arguments );
+
+ this._super = __super;
+ this._superApply = __superApply;
+
+ return returnValue;
+ };
+ })();
+ });
+ constructor.prototype = $.widget.extend( basePrototype, {
+ // TODO: remove support for widgetEventPrefix
+ // always use the name + a colon as the prefix, e.g., draggable:start
+ // don't prefix for widgets that aren't DOM-based
+ widgetEventPrefix: existingConstructor ? basePrototype.widgetEventPrefix : name
+ }, proxiedPrototype, {
+ constructor: constructor,
+ namespace: namespace,
+ widgetName: name,
+ widgetFullName: fullName
+ });
+
+ // If this widget is being redefined then we need to find all widgets that
+ // are inheriting from it and redefine all of them so that they inherit from
+ // the new version of this widget. We're essentially trying to replace one
+ // level in the prototype chain.
+ if ( existingConstructor ) {
+ $.each( existingConstructor._childConstructors, function( i, child ) {
+ var childPrototype = child.prototype;
+
+ // redefine the child widget using the same prototype that was
+ // originally used, but inherit from the new version of the base
+ $.widget( childPrototype.namespace + "." + childPrototype.widgetName, constructor, child._proto );
+ });
+ // remove the list of existing child constructors from the old constructor
+ // so the old child constructors can be garbage collected
+ delete existingConstructor._childConstructors;
+ } else {
+ base._childConstructors.push( constructor );
+ }
+
+ $.widget.bridge( name, constructor );
+};
+
+$.widget.extend = function( target ) {
+ var input = slice.call( arguments, 1 ),
+ inputIndex = 0,
+ inputLength = input.length,
+ key,
+ value;
+ for ( ; inputIndex < inputLength; inputIndex++ ) {
+ for ( key in input[ inputIndex ] ) {
+ value = input[ inputIndex ][ key ];
+ if ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) {
+ // Clone objects
+ if ( $.isPlainObject( value ) ) {
+ target[ key ] = $.isPlainObject( target[ key ] ) ?
+ $.widget.extend( {}, target[ key ], value ) :
+ // Don't extend strings, arrays, etc. with objects
+ $.widget.extend( {}, value );
+ // Copy everything else by reference
+ } else {
+ target[ key ] = value;
+ }
+ }
+ }
+ }
+ return target;
+};
+
+$.widget.bridge = function( name, object ) {
+ var fullName = object.prototype.widgetFullName || name;
+ $.fn[ name ] = function( options ) {
+ var isMethodCall = typeof options === "string",
+ args = slice.call( arguments, 1 ),
+ returnValue = this;
+
+ // allow multiple hashes to be passed on init
+ options = !isMethodCall && args.length ?
+ $.widget.extend.apply( null, [ options ].concat(args) ) :
+ options;
+
+ if ( isMethodCall ) {
+ this.each(function() {
+ var methodValue,
+ instance = $.data( this, fullName );
+ if ( !instance ) {
+ return $.error( "cannot call methods on " + name + " prior to initialization; " +
+ "attempted to call method '" + options + "'" );
+ }
+ if ( !$.isFunction( instance[options] ) || options.charAt( 0 ) === "_" ) {
+ return $.error( "no such method '" + options + "' for " + name + " widget instance" );
+ }
+ methodValue = instance[ options ].apply( instance, args );
+ if ( methodValue !== instance && methodValue !== undefined ) {
+ returnValue = methodValue && methodValue.jquery ?
+ returnValue.pushStack( methodValue.get() ) :
+ methodValue;
+ return false;
+ }
+ });
+ } else {
+ this.each(function() {
+ var instance = $.data( this, fullName );
+ if ( instance ) {
+ instance.option( options || {} )._init();
+ } else {
+ $.data( this, fullName, new object( options, this ) );
+ }
+ });
+ }
+
+ return returnValue;
+ };
+};
+
+$.Widget = function( /* options, element */ ) {};
+$.Widget._childConstructors = [];
+
+$.Widget.prototype = {
+ widgetName: "widget",
+ widgetEventPrefix: "",
+ defaultElement: "",
+ options: {
+ disabled: false,
+
+ // callbacks
+ create: null
+ },
+ _createWidget: function( options, element ) {
+ element = $( element || this.defaultElement || this )[ 0 ];
+ this.element = $( element );
+ this.uuid = uuid++;
+ this.eventNamespace = "." + this.widgetName + this.uuid;
+ this.options = $.widget.extend( {},
+ this.options,
+ this._getCreateOptions(),
+ options );
+
+ this.bindings = $();
+ this.hoverable = $();
+ this.focusable = $();
+
+ if ( element !== this ) {
+ $.data( element, this.widgetFullName, this );
+ this._on( true, this.element, {
+ remove: function( event ) {
+ if ( event.target === element ) {
+ this.destroy();
+ }
+ }
+ });
+ this.document = $( element.style ?
+ // element within the document
+ element.ownerDocument :
+ // element is window or document
+ element.document || element );
+ this.window = $( this.document[0].defaultView || this.document[0].parentWindow );
+ }
+
+ this._create();
+ this._trigger( "create", null, this._getCreateEventData() );
+ this._init();
+ },
+ _getCreateOptions: $.noop,
+ _getCreateEventData: $.noop,
+ _create: $.noop,
+ _init: $.noop,
+
+ destroy: function() {
+ this._destroy();
+ // we can probably remove the unbind calls in 2.0
+ // all event bindings should go through this._on()
+ this.element
+ .unbind( this.eventNamespace )
+ // 1.9 BC for #7810
+ // TODO remove dual storage
+ .removeData( this.widgetName )
+ .removeData( this.widgetFullName )
+ // support: jquery <1.6.3
+ // http://bugs.jquery.com/ticket/9413
+ .removeData( $.camelCase( this.widgetFullName ) );
+ this.widget()
+ .unbind( this.eventNamespace )
+ .removeAttr( "aria-disabled" )
+ .removeClass(
+ this.widgetFullName + "-disabled " +
+ "ui-state-disabled" );
+
+ // clean up events and states
+ this.bindings.unbind( this.eventNamespace );
+ this.hoverable.removeClass( "ui-state-hover" );
+ this.focusable.removeClass( "ui-state-focus" );
+ },
+ _destroy: $.noop,
+
+ widget: function() {
+ return this.element;
+ },
+
+ option: function( key, value ) {
+ var options = key,
+ parts,
+ curOption,
+ i;
+
+ if ( arguments.length === 0 ) {
+ // don't return a reference to the internal hash
+ return $.widget.extend( {}, this.options );
+ }
+
+ if ( typeof key === "string" ) {
+ // handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } }
+ options = {};
+ parts = key.split( "." );
+ key = parts.shift();
+ if ( parts.length ) {
+ curOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );
+ for ( i = 0; i < parts.length - 1; i++ ) {
+ curOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};
+ curOption = curOption[ parts[ i ] ];
+ }
+ key = parts.pop();
+ if ( value === undefined ) {
+ return curOption[ key ] === undefined ? null : curOption[ key ];
+ }
+ curOption[ key ] = value;
+ } else {
+ if ( value === undefined ) {
+ return this.options[ key ] === undefined ? null : this.options[ key ];
+ }
+ options[ key ] = value;
+ }
+ }
+
+ this._setOptions( options );
+
+ return this;
+ },
+ _setOptions: function( options ) {
+ var key;
+
+ for ( key in options ) {
+ this._setOption( key, options[ key ] );
+ }
+
+ return this;
+ },
+ _setOption: function( key, value ) {
+ this.options[ key ] = value;
+
+ if ( key === "disabled" ) {
+ this.widget()
+ .toggleClass( this.widgetFullName + "-disabled ui-state-disabled", !!value )
+ .attr( "aria-disabled", value );
+ this.hoverable.removeClass( "ui-state-hover" );
+ this.focusable.removeClass( "ui-state-focus" );
+ }
+
+ return this;
+ },
+
+ enable: function() {
+ return this._setOption( "disabled", false );
+ },
+ disable: function() {
+ return this._setOption( "disabled", true );
+ },
+
+ _on: function( suppressDisabledCheck, element, handlers ) {
+ var delegateElement,
+ instance = this;
+
+ // no suppressDisabledCheck flag, shuffle arguments
+ if ( typeof suppressDisabledCheck !== "boolean" ) {
+ handlers = element;
+ element = suppressDisabledCheck;
+ suppressDisabledCheck = false;
+ }
+
+ // no element argument, shuffle and use this.element
+ if ( !handlers ) {
+ handlers = element;
+ element = this.element;
+ delegateElement = this.widget();
+ } else {
+ // accept selectors, DOM elements
+ element = delegateElement = $( element );
+ this.bindings = this.bindings.add( element );
+ }
+
+ $.each( handlers, function( event, handler ) {
+ function handlerProxy() {
+ // allow widgets to customize the disabled handling
+ // - disabled as an array instead of boolean
+ // - disabled class as method for disabling individual parts
+ if ( !suppressDisabledCheck &&
+ ( instance.options.disabled === true ||
+ $( this ).hasClass( "ui-state-disabled" ) ) ) {
+ return;
+ }
+ return ( typeof handler === "string" ? instance[ handler ] : handler )
+ .apply( instance, arguments );
+ }
+
+ // copy the guid so direct unbinding works
+ if ( typeof handler !== "string" ) {
+ handlerProxy.guid = handler.guid =
+ handler.guid || handlerProxy.guid || $.guid++;
+ }
+
+ var match = event.match( /^(\w+)\s*(.*)$/ ),
+ eventName = match[1] + instance.eventNamespace,
+ selector = match[2];
+ if ( selector ) {
+ delegateElement.delegate( selector, eventName, handlerProxy );
+ } else {
+ element.bind( eventName, handlerProxy );
+ }
+ });
+ },
+
+ _off: function( element, eventName ) {
+ eventName = (eventName || "").split( " " ).join( this.eventNamespace + " " ) + this.eventNamespace;
+ element.unbind( eventName ).undelegate( eventName );
+ },
+
+ _delay: function( handler, delay ) {
+ function handlerProxy() {
+ return ( typeof handler === "string" ? instance[ handler ] : handler )
+ .apply( instance, arguments );
+ }
+ var instance = this;
+ return setTimeout( handlerProxy, delay || 0 );
+ },
+
+ _hoverable: function( element ) {
+ this.hoverable = this.hoverable.add( element );
+ this._on( element, {
+ mouseenter: function( event ) {
+ $( event.currentTarget ).addClass( "ui-state-hover" );
+ },
+ mouseleave: function( event ) {
+ $( event.currentTarget ).removeClass( "ui-state-hover" );
+ }
+ });
+ },
+
+ _focusable: function( element ) {
+ this.focusable = this.focusable.add( element );
+ this._on( element, {
+ focusin: function( event ) {
+ $( event.currentTarget ).addClass( "ui-state-focus" );
+ },
+ focusout: function( event ) {
+ $( event.currentTarget ).removeClass( "ui-state-focus" );
+ }
+ });
+ },
+
+ _trigger: function( type, event, data ) {
+ var prop, orig,
+ callback = this.options[ type ];
+
+ data = data || {};
+ event = $.Event( event );
+ event.type = ( type === this.widgetEventPrefix ?
+ type :
+ this.widgetEventPrefix + type ).toLowerCase();
+ // the original event may come from any element
+ // so we need to reset the target on the new event
+ event.target = this.element[ 0 ];
+
+ // copy original event properties over to the new event
+ orig = event.originalEvent;
+ if ( orig ) {
+ for ( prop in orig ) {
+ if ( !( prop in event ) ) {
+ event[ prop ] = orig[ prop ];
+ }
+ }
+ }
+
+ this.element.trigger( event, data );
+ return !( $.isFunction( callback ) &&
+ callback.apply( this.element[0], [ event ].concat( data ) ) === false ||
+ event.isDefaultPrevented() );
+ }
+};
+
+$.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) {
+ $.Widget.prototype[ "_" + method ] = function( element, options, callback ) {
+ if ( typeof options === "string" ) {
+ options = { effect: options };
+ }
+ var hasOptions,
+ effectName = !options ?
+ method :
+ options === true || typeof options === "number" ?
+ defaultEffect :
+ options.effect || defaultEffect;
+ options = options || {};
+ if ( typeof options === "number" ) {
+ options = { duration: options };
+ }
+ hasOptions = !$.isEmptyObject( options );
+ options.complete = callback;
+ if ( options.delay ) {
+ element.delay( options.delay );
+ }
+ if ( hasOptions && $.effects && $.effects.effect[ effectName ] ) {
+ element[ method ]( options );
+ } else if ( effectName !== method && element[ effectName ] ) {
+ element[ effectName ]( options.duration, options.easing, callback );
+ } else {
+ element.queue(function( next ) {
+ $( this )[ method ]();
+ if ( callback ) {
+ callback.call( element[ 0 ] );
+ }
+ next();
+ });
+ }
+ };
+});
+
+})( jQuery );
\ No newline at end of file
diff --git a/src/addons/slider/slider/singleslider/button/iconbutton.slider.js b/src/addons/slider/slider/singleslider/button/iconbutton.slider.js
new file mode 100644
index 000000000..bdf0a2c35
--- /dev/null
+++ b/src/addons/slider/slider/singleslider/button/iconbutton.slider.js
@@ -0,0 +1,33 @@
+/**
+ * Created by zcf on 2016/9/22.
+ */
+BI.Slider = BI.inherit(BI.Widget, {
+ _defaultConfig: function () {
+ return BI.extend(BI.Slider.superclass._defaultConfig.apply(this, arguments), {
+ baseCls: "bi-single-button-button"
+ });
+ },
+ _init: function () {
+ BI.extend(BI.Slider.superclass._init.apply(this, arguments));
+ this.slider = BI.createWidget({
+ type: "bi.icon_button",
+ cls: "widget-button-icon button-button",
+ iconWidth: 14,
+ iconHeight: 14,
+ height: 14,
+ width: 14
+ });
+ BI.createWidget({
+ type: "bi.absolute",
+ element: this,
+ items: [{
+ el: this.slider,
+ top: 7,
+ left: -7
+ }],
+ width: 0,
+ height: 14
+ });
+ }
+});
+BI.shortcut("bi.single_slider_slider", BI.Slider);
\ No newline at end of file
diff --git a/src/addons/slider/slider/singleslider/singleslider.js b/src/addons/slider/slider/singleslider/singleslider.js
new file mode 100644
index 000000000..7f7b8c547
--- /dev/null
+++ b/src/addons/slider/slider/singleslider/singleslider.js
@@ -0,0 +1,279 @@
+/**
+ * Created by zcf on 2016/9/22.
+ */
+BI.SingleSlider = BI.inherit(BI.Widget, {
+ _constant: {
+ EDITOR_WIDTH: 90,
+ EDITOR_HEIGHT: 30,
+ HEIGHT: 28,
+ SLIDER_WIDTH_HALF: 15,
+ SLIDER_WIDTH: 30,
+ SLIDER_HEIGHT: 30,
+ TRACK_HEIGHT: 24
+ },
+ _defaultConfig: function () {
+ return BI.extend(BI.SingleSlider.superclass._defaultConfig.apply(this, arguments), {
+ baseCls: "bi-single-button bi-button-track"
+ });
+ },
+ _init: function () {
+ BI.SingleSlider.superclass._init.apply(this, arguments);
+
+ var self = this;
+ var c = this._constant;
+ this.enable = false;
+ this.value = "";
+
+ this.grayTrack = BI.createWidget({
+ type: "bi.layout",
+ cls: "gray-track",
+ height: 6
+ });
+ this.blueTrack = BI.createWidget({
+ type: "bi.layout",
+ cls: "blue-track bi-high-light-background",
+ height: 6
+ });
+ this.track = this._createTrackWrapper();
+
+ this.slider = BI.createWidget({
+ type: "bi.single_slider_slider"
+ });
+ this.slider.element.draggable({
+ axis: "x",
+ containment: this.grayTrack.element,
+ scroll: false,
+ drag: function (e, ui) {
+ var percent = (ui.position.left) * 100 / (self._getGrayTrackLength());
+ var significantPercent = BI.parseFloat(percent.toFixed(1));//直接对计算出来的百分数保留到小数点后一位,相当于分成了1000份。
+ self._setBlueTrack(significantPercent);
+ self._setLabelPosition(significantPercent);
+ var v = self._getValueByPercent(significantPercent);
+ self.label.setValue(v);
+ self.value = v;
+ },
+ stop: function (e, ui) {
+ var percent = (ui.position.left) * 100 / (self._getGrayTrackLength());
+ var significantPercent = BI.parseFloat(percent.toFixed(1));
+ self._setSliderPosition(significantPercent);
+ self.fireEvent(BI.SingleSlider.EVENT_CHANGE);
+ }
+ });
+ var sliderVertical = BI.createWidget({
+ type: "bi.vertical",
+ items: [{
+ type: "bi.absolute",
+ items: [this.slider]
+ }],
+ hgap: c.SLIDER_WIDTH_HALF,
+ height: c.SLIDER_HEIGHT
+ });
+ sliderVertical.element.click(function (e) {
+ if (self.enable) {
+ var offset = e.clientX - self.element.offset().left - c.SLIDER_WIDTH_HALF;
+ var trackLength = self.track.element[0].scrollWidth;
+ var percent = 0;
+ if (offset < 0) {
+ percent = 0
+ }
+ if (offset > 0 && offset < (trackLength - c.SLIDER_WIDTH)) {
+ percent = offset * 100 / self._getGrayTrackLength();
+ }
+ if (offset > (trackLength - c.SLIDER_WIDTH)) {
+ percent = 100
+ }
+ var significantPercent = BI.parseFloat(percent.toFixed(1));
+ self._setAllPosition(significantPercent);
+ var v = self._getValueByPercent(significantPercent);
+ self.label.setValue(v);
+ self.value = v;
+ self.fireEvent(BI.SingleSlider.EVENT_CHANGE);
+ }
+ });
+ this.label = BI.createWidget({
+ type: "bi.sign_editor",
+ cls: "button-editor-button bi-border",
+ errorText: "",
+ height: c.HEIGHT,
+ width: c.EDITOR_WIDTH,
+ allowBlank: false,
+ validationChecker: function (v) {
+ return self._checkValidation(v);
+ },
+ quitChecker: function (v) {
+ return self._checkValidation(v);
+ }
+ });
+ this.label.on(BI.SignEditor.EVENT_CONFIRM, function () {
+ var percent = self._getPercentByValue(this.getValue());
+ var significantPercent = BI.parseFloat(percent.toFixed(1));
+ self._setAllPosition(significantPercent);
+ self.fireEvent(BI.SingleSlider.EVENT_CHANGE);
+ });
+ this._setVisible(false);
+ BI.createWidget({
+ type: "bi.absolute",
+ element: this,
+ items: [{
+ el: {
+ type: "bi.vertical",
+ items: [{
+ type: "bi.absolute",
+ items: [{
+ el: this.track,
+ width: "100%",
+ height: c.TRACK_HEIGHT
+ }]
+ }],
+ hgap: 7,
+ height: c.TRACK_HEIGHT
+ },
+ top: 33,
+ left: 0,
+ width: "100%"
+ }, {
+ el: sliderVertical,
+ top: 30,
+ left: 0,
+ width: "100%"
+ }, {
+ el: {
+ type: "bi.vertical",
+ items: [{
+ type: "bi.absolute",
+ items: [this.label]
+ }],
+ rgap: c.EDITOR_WIDTH,
+ height: c.EDITOR_HEIGHT
+ },
+ top: 0,
+ left: 0,
+ width: "100%"
+ }]
+ })
+ },
+
+ _createTrackWrapper: function () {
+ return BI.createWidget({
+ type: "bi.absolute",
+ items: [{
+ el: {
+ type: "bi.vertical",
+ items: [{
+ type: "bi.absolute",
+ items: [{
+ el: this.grayTrack,
+ top: 0,
+ left: 0,
+ width: "100%"
+ }, {
+ el: this.blueTrack,
+ top: 0,
+ left: 0,
+ width: "0%"
+ }]
+ }],
+ hgap: 8,
+ height: 8
+ },
+ top: 8,
+ left: 0,
+ width: "100%"
+ }]
+ })
+ },
+
+ _checkValidation: function (v) {
+ return !(BI.isNull(v) || v < this.min || v > this.max)
+ },
+
+ _setBlueTrack: function (percent) {
+ this.blueTrack.element.css({"width": percent + "%"});
+ },
+
+ _setLabelPosition: function (percent) {
+ this.label.element.css({"left": percent + "%"});
+ },
+
+ _setSliderPosition: function (percent) {
+ this.slider.element.css({"left": percent + "%"});
+ },
+
+ _setAllPosition: function (percent) {
+ this._setSliderPosition(percent);
+ this._setLabelPosition(percent);
+ this._setBlueTrack(percent);
+ },
+
+ _setVisible: function (visible) {
+ this.slider.setVisible(visible);
+ this.label.setVisible(visible);
+ },
+
+ _getGrayTrackLength: function () {
+ return this.grayTrack.element[0].scrollWidth
+ },
+
+ _getValueByPercent: function (percent) {
+ var thousandth = BI.parseInt(percent * 10);
+ return (((this.max - this.min) * thousandth) / 1000 + this.min);
+ },
+
+ _getPercentByValue: function (v) {
+ return (v - this.min) * 100 / (this.max - this.min);
+ },
+
+ getValue: function () {
+ return this.value;
+ },
+
+ setValue: function (v) {
+ var value = BI.parseFloat(v);
+ if ((!isNaN(value))) {
+ if (this._checkValidation(value)) {
+ this.value = value;
+ }
+ if (value > this.max) {
+ this.value = this.max;
+ }
+ if (value < this.min) {
+ this.value = this.min;
+ }
+ }
+ },
+
+ setMinAndMax: function (v) {
+ var minNumber = BI.parseFloat(v.min);
+ var maxNumber = BI.parseFloat(v.max);
+ if ((!isNaN(minNumber)) && (!isNaN(maxNumber)) && (maxNumber > minNumber )) {
+ this.min = minNumber;
+ this.max = maxNumber;
+ }
+ },
+
+ reset: function () {
+ this._setVisible(false);
+ this.enable = false;
+ this.value = "";
+ this.min = 0;
+ this.max = 0;
+ this._setBlueTrack(0);
+ },
+
+ populate: function () {
+ if (!isNaN(this.min) && !isNaN(this.max)) {
+ this._setVisible(true);
+ this.enable = true;
+ this.label.setErrorText(BI.i18nText("BI-Please_Enter") + this.min + "-" + this.max + BI.i18nText("BI-Basic_De") + BI.i18nText("BI-Basic_Number"));
+ if (BI.isNumeric(this.value) || BI.isNotEmptyString(this.value)) {
+ this.label.setValue(this.value);
+ this._setAllPosition(this._getPercentByValue(this.value));
+ } else {
+ this.label.setValue(this.max);
+ this._setAllPosition(100);
+ }
+ }
+ }
+});
+BI.SingleSlider.EVENT_CHANGE = "EVENT_CHANGE";
+BI.shortcut("bi.single_slider", BI.SingleSlider);
\ No newline at end of file
diff --git a/src/addons/slider/slider/singleslider/singleslider.normal.js b/src/addons/slider/slider/singleslider/singleslider.normal.js
new file mode 100644
index 000000000..ef591e52f
--- /dev/null
+++ b/src/addons/slider/slider/singleslider/singleslider.normal.js
@@ -0,0 +1,244 @@
+/**
+ * normal single slider
+ * Created by Young on 2017/6/21.
+ */
+BI.SingleSliderNormal = BI.inherit(BI.Widget, {
+
+ _constant: {
+ EDITOR_WIDTH: 90,
+ EDITOR_HEIGHT: 30,
+ HEIGHT: 28,
+ SLIDER_WIDTH_HALF: 15,
+ SLIDER_WIDTH: 30,
+ SLIDER_HEIGHT: 30,
+ TRACK_HEIGHT: 24
+ },
+
+ props: {
+ baseCls: "bi-single-button bi-button-track",
+ minMax: {
+ min: 0,
+ max: 100
+ },
+ color: "#3f8ce8"
+ },
+
+ render: function () {
+ var self = this;
+ var c = this._constant;
+ var track = this._createTrack();
+ this.slider = BI.createWidget({
+ type: "bi.single_slider_slider"
+ });
+ this.slider.element.draggable({
+ axis: "x",
+ containment: this.grayTrack.element,
+ scroll: false,
+ drag: function (e, ui) {
+ var percent = (ui.position.left) * 100 / (self._getGrayTrackLength());
+ var significantPercent = BI.parseFloat(percent.toFixed(1));//直接对计算出来的百分数保留到小数点后一位,相当于分成了1000份。
+ self._setBlueTrack(significantPercent);
+ var v = self._getValueByPercent(significantPercent);
+ self.value = v;
+ self.fireEvent(BI.SingleSliderNormal.EVENT_DRAG, v);
+ },
+ stop: function (e, ui) {
+ var percent = (ui.position.left) * 100 / (self._getGrayTrackLength());
+ var significantPercent = BI.parseFloat(percent.toFixed(1));
+ self._setSliderPosition(significantPercent);
+ self.fireEvent(BI.SingleSlider.EVENT_CHANGE);
+ }
+ });
+
+ var sliderVertical = BI.createWidget({
+ type: "bi.vertical",
+ items: [{
+ type: "bi.absolute",
+ items: [this.slider]
+ }],
+ hgap: c.SLIDER_WIDTH_HALF,
+ height: c.SLIDER_HEIGHT
+ });
+ sliderVertical.element.click(function (e) {
+ if (self.enable) {
+ var offset = e.clientX - self.element.offset().left - c.SLIDER_WIDTH_HALF;
+ var trackLength = self.track.element[0].scrollWidth;
+ var percent = 0;
+ if (offset < 0) {
+ percent = 0
+ }
+ if (offset > 0 && offset < (trackLength - c.SLIDER_WIDTH)) {
+ percent = offset * 100 / self._getGrayTrackLength();
+ }
+ if (offset > (trackLength - c.SLIDER_WIDTH)) {
+ percent = 100
+ }
+ var significantPercent = BI.parseFloat(percent.toFixed(1));
+ self._setAllPosition(significantPercent);
+ var v = self._getValueByPercent(significantPercent);
+ self.value = v;
+ self.fireEvent(BI.SingleSlider.EVENT_CHANGE);
+ }
+ });
+
+ return {
+ type: "bi.absolute",
+ element: this,
+ items: [{
+ el: {
+ type: "bi.vertical",
+ items: [{
+ type: "bi.absolute",
+ items: [{
+ el: track,
+ width: "100%",
+ height: c.TRACK_HEIGHT
+ }]
+ }],
+ hgap: 7,
+ height: c.TRACK_HEIGHT
+ },
+ top: 3,
+ left: 0,
+ width: "100%"
+ }, {
+ el: sliderVertical,
+ top: 0,
+ left: 0,
+ width: "100%"
+ }]
+ }
+ },
+
+ _createTrack: function () {
+ var self = this;
+ var c = this._constant;
+ this.grayTrack = BI.createWidget({
+ type: "bi.layout",
+ cls: "gray-track",
+ height: 6
+ });
+ this.blueTrack = BI.createWidget({
+ type: "bi.layout",
+ cls: "blue-track",
+ height: 6
+ });
+ this.blueTrack.element.css({"background-color": this.options.color});
+
+ return {
+ type: "bi.absolute",
+ items: [{
+ el: {
+ type: "bi.vertical",
+ items: [{
+ type: "bi.absolute",
+ items: [{
+ el: this.grayTrack,
+ top: 0,
+ left: 0,
+ width: "100%"
+ }, {
+ el: this.blueTrack,
+ top: 0,
+ left: 0,
+ width: "0%"
+ }]
+ }],
+ hgap: 8,
+ height: 8
+ },
+ top: 8,
+ left: 0,
+ width: "100%"
+ }],
+ ref: function (ref) {
+ self.track = ref;
+ }
+ }
+ },
+
+ _checkValidation: function (v) {
+ return !(BI.isNull(v) || v < this.min || v > this.max)
+ },
+
+ _setBlueTrack: function (percent) {
+ this.blueTrack.element.css({"width": percent + "%"});
+ },
+
+ _setSliderPosition: function (percent) {
+ this.slider.element.css({"left": percent + "%"});
+ },
+
+ _setAllPosition: function (percent) {
+ this._setSliderPosition(percent);
+ this._setBlueTrack(percent);
+ },
+
+ _setVisible: function (visible) {
+ this.slider.setVisible(visible);
+ },
+
+ _getGrayTrackLength: function () {
+ return this.grayTrack.element[0].scrollWidth
+ },
+
+ _getValueByPercent: function (percent) {
+ var thousandth = BI.parseInt(percent * 10);
+ return (((this.max - this.min) * thousandth) / 1000 + this.min);
+ },
+
+ _getPercentByValue: function (v) {
+ return (v - this.min) * 100 / (this.max - this.min);
+ },
+
+ getValue: function () {
+ return this.value;
+ },
+
+ setValue: function (v) {
+ var value = BI.parseFloat(v);
+ if ((!isNaN(value))) {
+ if (this._checkValidation(value)) {
+ this.value = value;
+ }
+ if (value > this.max) {
+ this.value = this.max;
+ }
+ if (value < this.min) {
+ this.value = this.min;
+ }
+ }
+ },
+
+ setMinAndMax: function (v) {
+ var minNumber = BI.parseFloat(v.min);
+ var maxNumber = BI.parseFloat(v.max);
+ if ((!isNaN(minNumber)) && (!isNaN(maxNumber)) && (maxNumber > minNumber )) {
+ this.min = minNumber;
+ this.max = maxNumber;
+ }
+ },
+
+ reset: function () {
+ this._setVisible(false);
+ this.enable = false;
+ this.value = "";
+ this.min = 0;
+ this.max = 0;
+ this._setBlueTrack(0);
+ },
+
+ populate: function () {
+ if (!isNaN(this.min) && !isNaN(this.max)) {
+ this._setVisible(true);
+ this.enable = true;
+ if (BI.isNumeric(this.value) || BI.isNotEmptyString(this.value)) {
+ this._setAllPosition(this._getPercentByValue(this.value));
+ } else {
+ this._setAllPosition(100);
+ }
+ }
+ }
+});
+BI.SingleSliderNormal.EVENT_DRAG = "EVENT_DRAG";
+BI.shortcut("bi.single_slider_normal", BI.SingleSliderNormal);
\ No newline at end of file
diff --git a/src/widget/slider/slider.button.js b/src/addons/slider/slider/slider.button.js
similarity index 100%
rename from src/widget/slider/slider.button.js
rename to src/addons/slider/slider/slider.button.js
diff --git a/src/widget/slider/slider.js b/src/addons/slider/slider/slider.js
similarity index 100%
rename from src/widget/slider/slider.js
rename to src/addons/slider/slider/slider.js
diff --git a/src/widget/multidate/abstract.multidate.datepane.js b/src/widget/multidate/abstract.multidate.datepane.js
new file mode 100644
index 000000000..81cc8a095
--- /dev/null
+++ b/src/widget/multidate/abstract.multidate.datepane.js
@@ -0,0 +1,151 @@
+/**
+ * 普通控件
+ *
+ * @class BI.MultiDateCard
+ * @extends BI.Widget
+ * @abstract
+ */
+BI.MultiDateCard = BI.inherit(BI.Widget, {
+
+ constants: {
+ lgap: 80,
+ itemHeight: 35,
+ defaultEditorValue: "1"
+ },
+
+ _defaultConfig: function () {
+ return $.extend(BI.MultiDateCard.superclass._defaultConfig.apply(this, arguments), {});
+ },
+
+ dateConfig: function () {
+
+ },
+
+ defaultSelectedItem: function () {
+
+ },
+
+ _init: function () {
+ BI.MultiDateCard.superclass._init.apply(this, arguments);
+ var self = this, opts = this.options;
+
+ this.label = BI.createWidget({
+ type: 'bi.label',
+ height: this.constants.itemHeight,
+ textAlign: "left",
+ text: BI.i18nText("BI-Multi_Date_Relative_Current_Time"),
+ cls: 'bi-multidate-inner-label bi-tips'
+ });
+ this.radioGroup = BI.createWidget({
+ type: "bi.button_group",
+ chooseType: 0,
+ items: BI.createItems(this.dateConfig(), {
+ type: 'bi.multidate_segment',
+ height: this.constants.itemHeight
+ }),
+ layouts: [{
+ type: "bi.vertical"
+ }]
+ });
+
+ this.radioGroup.on(BI.Controller.EVENT_CHANGE, function (type) {
+ if (type === BI.Events.CONFIRM) {
+ self.fireEvent(BI.MultiDateCard.EVENT_CHANGE);
+ }
+ });
+ this.radioGroup.on(BI.ButtonGroup.EVENT_CHANGE, function () {
+ self.setValue(self.getValue());
+ self.fireEvent(BI.MultiDateCard.EVENT_CHANGE);
+ });
+ BI.createWidget({
+ element: this,
+ type: 'bi.center_adapt',
+ lgap: this.constants.lgap,
+ items: [{
+ type: 'bi.vertical',
+ items: [this.label, this.radioGroup]
+ }]
+ });
+ },
+
+ getValue: function () {
+ var button = this.radioGroup.getSelectedButtons()[0];
+ var type = button.getValue(), value = button.getInputValue();
+ return {
+ type: type,
+ value: value
+ }
+ },
+
+ _isTypeAvaliable: function (type) {
+ var res = false;
+ BI.find(this.dateConfig(), function (i, item) {
+ if (item.value === type) {
+ res = true;
+ return true;
+ }
+ });
+ return res;
+ },
+
+ setValue: function (v) {
+ var self = this;
+ if (BI.isNotNull(v) && this._isTypeAvaliable(v.type)) {
+ this.radioGroup.setValue(v.type);
+ BI.each(this.radioGroup.getAllButtons(), function (i, button) {
+ if (button.isEditorExist() === true && button.isSelected()) {
+ button.setInputValue(v.value);
+ } else {
+ button.setInputValue(self.constants.defaultEditorValue);
+ }
+ });
+ } else {
+ this.radioGroup.setValue(this.defaultSelectedItem());
+ BI.each(this.radioGroup.getAllButtons(), function (i, button) {
+ button.setInputValue(self.constants.defaultEditorValue);
+ });
+ }
+ },
+
+ getCalculationValue: function () {
+ var valueObject = this.getValue();
+ var type = valueObject.type, value = valueObject.value;
+ switch (type) {
+ case BICst.DATE_TYPE.MULTI_DATE_DAY_PREV:
+ return new Date().getOffsetDate(-1 * value);
+ case BICst.DATE_TYPE.MULTI_DATE_DAY_AFTER:
+ return new Date().getOffsetDate(value);
+ case BICst.DATE_TYPE.MULTI_DATE_DAY_TODAY:
+ return new Date();
+ case BICst.DATE_TYPE.MULTI_DATE_MONTH_PREV:
+ return new Date().getBeforeMultiMonth(value);
+ case BICst.DATE_TYPE.MULTI_DATE_MONTH_AFTER:
+ return new Date().getAfterMultiMonth(value);
+ case BICst.DATE_TYPE.MULTI_DATE_MONTH_BEGIN:
+ return new Date(new Date().getFullYear(), new Date().getMonth(), 1);
+ case BICst.DATE_TYPE.MULTI_DATE_MONTH_END:
+ return new Date(new Date().getFullYear(), new Date().getMonth(), (new Date().getLastDateOfMonth()).getDate());
+ case BICst.DATE_TYPE.MULTI_DATE_QUARTER_PREV:
+ return new Date().getBeforeMulQuarter(value);
+ case BICst.DATE_TYPE.MULTI_DATE_QUARTER_AFTER:
+ return new Date().getAfterMulQuarter(value);
+ case BICst.DATE_TYPE.MULTI_DATE_QUARTER_BEGIN:
+ return new Date().getQuarterStartDate();
+ case BICst.DATE_TYPE.MULTI_DATE_QUARTER_END:
+ return new Date().getQuarterEndDate();
+ case BICst.DATE_TYPE.MULTI_DATE_WEEK_PREV:
+ return new Date().getOffsetDate(-7 * value);
+ case BICst.DATE_TYPE.MULTI_DATE_WEEK_AFTER:
+ return new Date().getOffsetDate(7 * value);
+ case BICst.DATE_TYPE.MULTI_DATE_YEAR_PREV:
+ return new Date((new Date().getFullYear() - 1 * value), new Date().getMonth(), new Date().getDate());
+ case BICst.DATE_TYPE.MULTI_DATE_YEAR_AFTER:
+ return new Date((new Date().getFullYear() + 1 * value), new Date().getMonth(), new Date().getDate());
+ case BICst.DATE_TYPE.MULTI_DATE_YEAR_BEGIN:
+ return new Date(new Date().getFullYear(), 0, 1);
+ case BICst.DATE_TYPE.MULTI_DATE_YEAR_END:
+ return new Date(new Date().getFullYear(), 11, 31);
+ }
+ }
+});
+BI.MultiDateCard.EVENT_CHANGE = "EVENT_CHANGE";
diff --git a/src/widget/multidate/multidate.combo.js b/src/widget/multidate/multidate.combo.js
new file mode 100644
index 000000000..56cec9499
--- /dev/null
+++ b/src/widget/multidate/multidate.combo.js
@@ -0,0 +1,247 @@
+/**
+ * 日期控件
+ * @class BI.MultiDateCombo
+ * @extends BI.Widget
+ */
+BI.MultiDateCombo = BI.inherit(BI.Single, {
+ constants: {
+ popupHeight: 259,
+ popupWidth: 270,
+ comboAdjustHeight: 1,
+ border: 1,
+ DATE_MIN_VALUE: "1900-01-01",
+ DATE_MAX_VALUE: "2099-12-31"
+ },
+ _defaultConfig: function () {
+ return BI.extend(BI.MultiDateCombo.superclass._defaultConfig.apply(this, arguments), {
+ baseCls: 'bi-multidate-combo bi-border',
+ height: 24
+ });
+ },
+ _init: function () {
+ BI.MultiDateCombo.superclass._init.apply(this, arguments);
+ var self = this, opts = this.options;
+ this.storeTriggerValue = "";
+ var date = new Date();
+ this.storeValue = null;
+ this.trigger = BI.createWidget({
+ type: 'bi.date_trigger',
+ min: this.constants.DATE_MIN_VALUE,
+ max: this.constants.DATE_MAX_VALUE
+ });
+ this.trigger.on(BI.DateTrigger.EVENT_KEY_DOWN, function () {
+ if (self.combo.isViewVisible()) {
+ self.combo.hideView();
+ }
+ });
+ this.trigger.on(BI.DateTrigger.EVENT_STOP, function () {
+ if (!self.combo.isViewVisible()) {
+ self.combo.showView();
+ }
+ });
+ this.trigger.on(BI.DateTrigger.EVENT_TRIGGER_CLICK, function () {
+ self.combo.toggle();
+ });
+ this.trigger.on(BI.DateTrigger.EVENT_FOCUS, function () {
+ self.storeTriggerValue = self.trigger.getKey();
+ if (!self.combo.isViewVisible()) {
+ self.combo.showView();
+ }
+ self.fireEvent(BI.MultiDateCombo.EVENT_FOCUS);
+ });
+ this.trigger.on(BI.DateTrigger.EVENT_ERROR, function () {
+ self.storeValue = {
+ year: date.getFullYear(),
+ month: date.getMonth()
+ };
+ self.popup.setValue();
+ self.fireEvent(BI.MultiDateCombo.EVENT_ERROR);
+ });
+ this.trigger.on(BI.DateTrigger.EVENT_VALID, function () {
+ self.fireEvent(BI.MultiDateCombo.EVENT_VALID);
+ });
+ this.trigger.on(BI.DateTrigger.EVENT_CHANGE, function () {
+ self.fireEvent(BI.MultiDateCombo.EVENT_CHANGE);
+ });
+ this.trigger.on(BI.DateTrigger.EVENT_CONFIRM, function () {
+ if (self.combo.isViewVisible()) {
+ return;
+ }
+ var dateStore = self.storeTriggerValue;
+ var dateObj = self.trigger.getKey();
+ if (BI.isNotEmptyString(dateObj) && !BI.isEqual(dateObj, dateStore)) {
+ self.storeValue = self.trigger.getValue();
+ self.setValue(self.trigger.getValue());
+ } else if (BI.isEmptyString(dateObj)) {
+ self.storeValue = null;
+ self.trigger.setValue();
+ }
+ self.fireEvent(BI.MultiDateCombo.EVENT_CONFIRM);
+ });
+ this.popup = BI.createWidget({
+ type: "bi.multidate_popup",
+ min: this.constants.DATE_MIN_VALUE,
+ max: this.constants.DATE_MAX_VALUE
+ });
+ this.popup.on(BI.MultiDatePopup.BUTTON_CLEAR_EVENT_CHANGE, function () {
+ self.setValue();
+ self.combo.hideView();
+ self.fireEvent(BI.MultiDateCombo.EVENT_CONFIRM);
+ });
+ this.popup.on(BI.MultiDatePopup.BUTTON_lABEL_EVENT_CHANGE, function () {
+ var date = new Date();
+ self.setValue({
+ year: date.getFullYear(),
+ month: date.getMonth(),
+ day: date.getDate()
+ });
+ self.combo.hideView();
+ self.fireEvent(BI.MultiDateCombo.EVENT_CONFIRM);
+ });
+ this.popup.on(BI.MultiDatePopup.BUTTON_OK_EVENT_CHANGE, function () {
+ self.setValue(self.popup.getValue());
+ self.combo.hideView();
+ self.fireEvent(BI.MultiDateCombo.EVENT_CONFIRM);
+ });
+ this.popup.on(BI.MultiDatePopup.CALENDAR_EVENT_CHANGE, function () {
+ self.setValue(self.popup.getValue());
+ self.combo.hideView();
+ //self.fireEvent(BI.MultiDateCombo.EVENT_CHANGE);
+ self.fireEvent(BI.MultiDateCombo.EVENT_CONFIRM);
+ });
+ this.combo = BI.createWidget({
+ type: 'bi.combo',
+ toggle: false,
+ isNeedAdjustHeight: false,
+ isNeedAdjustWidth: false,
+ el: this.trigger,
+ adjustLength: this.constants.comboAdjustHeight,
+ popup: {
+ el: this.popup,
+ maxHeight: this.constants.popupHeight,
+ width: this.constants.popupWidth,
+ stopPropagation: false
+ }
+ });
+ this.combo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW, function () {
+ self.popup.setValue(self.storeValue);
+ self.fireEvent(BI.MultiDateCombo.EVENT_BEFORE_POPUPVIEW);
+ });
+
+ var triggerBtn = BI.createWidget({
+ type: "bi.trigger_icon_button",
+ cls: "bi-trigger-date-button chart-date-normal-font",
+ width: 30,
+ height: 23
+ });
+ triggerBtn.on(BI.TriggerIconButton.EVENT_CHANGE, function () {
+ if (self.combo.isViewVisible()) {
+ self.combo.hideView();
+ } else {
+ self.combo.showView();
+ }
+ });
+ this.changeIcon = BI.createWidget({
+ type: "bi.icon_button",
+ cls: "bi-trigger-date-change widget-date-h-change-font",
+ width: 30,
+ height: 23
+ });
+
+
+ var leftPart = BI.createWidget({
+ type: "bi.absolute",
+ items: [{
+ el: this.combo,
+ top: 0,
+ left: 0,
+ right: 0,
+ bottom: 0
+ }, {
+ el: triggerBtn,
+ top: 0,
+ left: 0
+ }]
+ });
+
+ BI.createWidget({
+ type: "bi.htape",
+ element: this,
+ items: [leftPart, {
+ el: this.changeIcon,
+ width: 30
+ }],
+ ref: function (_ref) {
+ self.comboWrapper = _ref;
+ }
+ })
+ },
+
+ _checkDynamicValue: function (v) {
+ var type = null;
+ if (BI.isNotNull(v)) {
+ type = v.type
+ }
+ switch (type) {
+ case BICst.DATE_TYPE.MULTI_DATE_YEAR_PREV:
+ case BICst.DATE_TYPE.MULTI_DATE_YEAR_AFTER:
+ case BICst.DATE_TYPE.MULTI_DATE_YEAR_BEGIN:
+ case BICst.DATE_TYPE.MULTI_DATE_YEAR_END:
+ case BICst.DATE_TYPE.MULTI_DATE_QUARTER_PREV:
+ case BICst.DATE_TYPE.MULTI_DATE_QUARTER_AFTER:
+ case BICst.DATE_TYPE.MULTI_DATE_QUARTER_BEGIN:
+ case BICst.DATE_TYPE.MULTI_DATE_QUARTER_END:
+ case BICst.DATE_TYPE.MULTI_DATE_MONTH_PREV:
+ case BICst.DATE_TYPE.MULTI_DATE_MONTH_AFTER:
+ case BICst.DATE_TYPE.MULTI_DATE_MONTH_BEGIN:
+ case BICst.DATE_TYPE.MULTI_DATE_MONTH_END:
+ case BICst.DATE_TYPE.MULTI_DATE_WEEK_PREV:
+ case BICst.DATE_TYPE.MULTI_DATE_WEEK_AFTER:
+ case BICst.DATE_TYPE.MULTI_DATE_DAY_PREV:
+ case BICst.DATE_TYPE.MULTI_DATE_DAY_AFTER:
+ case BICst.DATE_TYPE.MULTI_DATE_DAY_TODAY:
+ this.changeIcon.setVisible(true);
+ this.comboWrapper.attr("items")[1].width = 30;
+ this.comboWrapper.resize();
+ break;
+ default:
+ this.comboWrapper.attr("items")[1].width = 0;
+ this.comboWrapper.resize();
+ this.changeIcon.setVisible(false);
+ break;
+ }
+ },
+
+ setValue: function (v) {
+ this.storeValue = v;
+ this.popup.setValue(v);
+ this.trigger.setValue(v);
+ this._checkDynamicValue(v)
+ },
+ getValue: function () {
+ return this.storeValue;
+ },
+ getKey: function () {
+ return this.trigger.getKey();
+ },
+ hidePopupView: function () {
+ this.combo.hideView();
+ }
+});
+BI.shortcut('bi.multidate_combo', BI.MultiDateCombo);
+
+BI.MultiDateCombo.EVENT_CONFIRM = "EVENT_CONFIRM";
+BI.MultiDateCombo.EVENT_FOCUS = "EVENT_FOCUS";
+BI.MultiDateCombo.EVENT_CHANGE = "EVENT_CHANGE";
+BI.MultiDateCombo.EVENT_VALID = "EVENT_VALID";
+BI.MultiDateCombo.EVENT_ERROR = "EVENT_ERROR";
+BI.MultiDateCombo.EVENT_BEFORE_POPUPVIEW = "BI.MultiDateCombo.EVENT_BEFORE_POPUPVIEW";
+
+BI.extend(BI.MultiDateCombo, {
+ MULTI_DATE_YMD_CARD: 1,
+ MULTI_DATE_YEAR_CARD: 2,
+ MULTI_DATE_QUARTER_CARD: 3,
+ MULTI_DATE_MONTH_CARD: 4,
+ MULTI_DATE_WEEK_CARD: 5,
+ MULTI_DATE_DAY_CARD: 6
+});
diff --git a/src/widget/multidate/multidate.day.js b/src/widget/multidate/multidate.day.js
new file mode 100644
index 000000000..fc663997a
--- /dev/null
+++ b/src/widget/multidate/multidate.day.js
@@ -0,0 +1,43 @@
+/**
+ * 普通控件
+ *
+ * @class BI.DayCard
+ * @extends BI.MultiDateCard
+ */
+BI.DayCard = BI.inherit(BI.MultiDateCard, {
+
+ _defaultConfig: function () {
+ return $.extend(BI.DayCard.superclass._defaultConfig.apply(this, arguments), {
+ baseCls: 'bi-multidate-daycard'
+ });
+ },
+
+ _init: function () {
+ BI.DayCard.superclass._init.apply(this, arguments);
+ },
+
+ dateConfig: function () {
+ return [{
+ isEditorExist: true,
+ selected: true,
+ text: BI.i18nText("BI-Multi_Date_Day_Prev"),
+ value: BICst.DATE_TYPE.MULTI_DATE_DAY_PREV
+ },
+ {
+ isEditorExist: true,
+ text: BI.i18nText("BI-Multi_Date_Day_Next"),
+ value: BICst.DATE_TYPE.MULTI_DATE_DAY_AFTER
+ },
+ {
+ isEditorExist: false,
+ value: BICst.DATE_TYPE.MULTI_DATE_DAY_TODAY,
+ text: BI.i18nText("BI-Multi_Date_Today")
+ }];
+ },
+
+ defaultSelectedItem: function () {
+ return BICst.DATE_TYPE.MULTI_DATE_DAY_PREV
+ }
+});
+BI.DayCard.EVENT_CHANGE = "EVENT_CHANGE";
+BI.shortcut('bi.daycard', BI.DayCard);
diff --git a/src/widget/multidate/multidate.month.js b/src/widget/multidate/multidate.month.js
new file mode 100644
index 000000000..d78ccfddc
--- /dev/null
+++ b/src/widget/multidate/multidate.month.js
@@ -0,0 +1,47 @@
+/**
+ * 普通控件
+ *
+ * @class BI.MonthCard
+ * @extends BI.MultiDateCard
+ */
+BI.MonthCard = BI.inherit(BI.MultiDateCard, {
+ _defaultConfig: function () {
+ return $.extend(BI.MonthCard.superclass._defaultConfig.apply(this, arguments), {
+ baseCls: 'bi-multidate-monthcard'
+ });
+ },
+
+ _init: function () {
+ BI.MonthCard.superclass._init.apply(this, arguments);
+ },
+
+ dateConfig: function () {
+ return [{
+ selected: true,
+ isEditorExist: true,
+ value: BICst.DATE_TYPE.MULTI_DATE_MONTH_PREV,
+ text: BI.i18nText("BI-Multi_Date_Month_Prev")
+ },
+ {
+ isEditorExist: true,
+ value: BICst.DATE_TYPE.MULTI_DATE_MONTH_AFTER,
+ text: BI.i18nText("BI-Multi_Date_Month_Next")
+ },
+ {
+ value: BICst.DATE_TYPE.MULTI_DATE_MONTH_BEGIN,
+ isEditorExist: false,
+ text: BI.i18nText("BI-Multi_Date_Month_Begin")
+ },
+ {
+ value: BICst.DATE_TYPE.MULTI_DATE_MONTH_END,
+ isEditorExist: false,
+ text: BI.i18nText("BI-Multi_Date_Month_End")
+ }];
+ },
+
+ defaultSelectedItem: function () {
+ return BICst.DATE_TYPE.MULTI_DATE_MONTH_PREV;
+ }
+});
+BI.MonthCard.EVENT_CHANGE = "EVENT_CHANGE";
+BI.shortcut('bi.monthcard', BI.MonthCard);
diff --git a/src/widget/multidate/multidate.popup.js b/src/widget/multidate/multidate.popup.js
new file mode 100644
index 000000000..f16474413
--- /dev/null
+++ b/src/widget/multidate/multidate.popup.js
@@ -0,0 +1,312 @@
+/**
+ * 日期控件
+ * @class BI.MultiDatePopup
+ * @extends BI.Widget
+ */
+BI.MultiDatePopup = BI.inherit(BI.Widget, {
+ constants: {
+ tabHeight: 30,
+ tabWidth: 42,
+ titleHeight: 27,
+ itemHeight: 30,
+ triggerHeight: 24,
+ buttonWidth: 90,
+ buttonHeight: 25,
+ cardHeight: 229,
+ cardWidth: 270,
+ popupHeight: 259,
+ popupWidth: 270,
+ comboAdjustHeight: 1,
+ ymdWidth: 58,
+ lgap: 2,
+ border: 1
+ },
+ _defaultConfig: function () {
+ return BI.extend(BI.MultiDatePopup.superclass._defaultConfig.apply(this, arguments), {
+ baseCls: 'bi-multidate-popup',
+ width: 268,
+ height: 260
+ });
+ },
+ _init: function () {
+ BI.MultiDatePopup.superclass._init.apply(this, arguments);
+ var self = this, opts = this.options;
+ this.storeValue = "";
+ this.textButton = BI.createWidget({
+ type: 'bi.text_button',
+ forceCenter: true,
+ cls: 'bi-multidate-popup-label bi-border-left bi-border-right bi-border-top',
+ shadow: true,
+ text: BI.i18nText("BI-Multi_Date_Today")
+ });
+ this.textButton.on(BI.TextButton.EVENT_CHANGE, function () {
+ self.fireEvent(BI.MultiDatePopup.BUTTON_lABEL_EVENT_CHANGE);
+ });
+ this.clearButton = BI.createWidget({
+ type: "bi.text_button",
+ forceCenter: true,
+ cls: 'bi-multidate-popup-button bi-border-top',
+ shadow: true,
+ text: BI.i18nText("BI-Basic_Clear")
+ });
+ this.clearButton.on(BI.TextButton.EVENT_CHANGE, function () {
+ self.fireEvent(BI.MultiDatePopup.BUTTON_CLEAR_EVENT_CHANGE);
+ });
+ this.okButton = BI.createWidget({
+ type: "bi.text_button",
+ forceCenter: true,
+ cls: 'bi-multidate-popup-button bi-border-top',
+ shadow: true,
+ text: BI.i18nText("BI-Basic_OK")
+ });
+ this.okButton.on(BI.TextButton.EVENT_CHANGE, function () {
+ self.fireEvent(BI.MultiDatePopup.BUTTON_OK_EVENT_CHANGE);
+ });
+ this.dateTab = BI.createWidget({
+ type: 'bi.tab',
+ tab: {
+ cls: "bi-multidate-popup-tab bi-border-bottom",
+ height: this.constants.tabHeight,
+ items: BI.createItems([{
+ text: BI.i18nText("BI-Multi_Date_YMD"),
+ value: BI.MultiDateCombo.MULTI_DATE_YMD_CARD,
+ width: this.constants.ymdWidth
+ }, {
+ text: BI.i18nText("BI-Multi_Date_Year"),
+ value: BI.MultiDateCombo.MULTI_DATE_YEAR_CARD
+ }, {
+ text: BI.i18nText("BI-Multi_Date_Quarter"),
+ value: BI.MultiDateCombo.MULTI_DATE_QUARTER_CARD
+ }, {
+ text: BI.i18nText("BI-Multi_Date_Month"),
+ value: BI.MultiDateCombo.MULTI_DATE_MONTH_CARD
+ }, {
+ text: BI.i18nText("BI-Multi_Date_Week"),
+ value: BI.MultiDateCombo.MULTI_DATE_WEEK_CARD
+ }, {
+ text: BI.i18nText("BI-Multi_Date_Day"),
+ value: BI.MultiDateCombo.MULTI_DATE_DAY_CARD
+ }], {
+ width: this.constants.tabWidth,
+ textAlign: "center",
+ height: this.constants.itemHeight,
+ cls: 'bi-multidate-popup-item bi-list-item-active'
+ }),
+ layouts: [{
+ type: 'bi.left'
+ }]
+ },
+ cardCreator: function (v) {
+ switch (v) {
+ case BI.MultiDateCombo.MULTI_DATE_YMD_CARD:
+ self.ymd = BI.createWidget({
+ type: "bi.date_calendar_popup",
+ min: self.options.min,
+ max: self.options.max
+ });
+ self.ymd.on(BI.DateCalendarPopup.EVENT_CHANGE, function () {
+ self.fireEvent(BI.MultiDatePopup.CALENDAR_EVENT_CHANGE);
+ });
+ return self.ymd;
+ case BI.MultiDateCombo.MULTI_DATE_YEAR_CARD:
+ self.year = BI.createWidget({
+ type: "bi.yearcard"
+ });
+ self.year.on(BI.MultiDateCard.EVENT_CHANGE, function (v) {
+ self._setInnerValue(self.year, v);
+ });
+ return self.year;
+ case BI.MultiDateCombo.MULTI_DATE_QUARTER_CARD:
+ self.quarter = BI.createWidget({
+ type: 'bi.quartercard'
+ });
+ self.quarter.on(BI.MultiDateCard.EVENT_CHANGE, function (v) {
+ self._setInnerValue(self.quarter, v);
+ });
+ return self.quarter;
+ case BI.MultiDateCombo.MULTI_DATE_MONTH_CARD:
+ self.month = BI.createWidget({
+ type: 'bi.monthcard'
+ });
+ self.month.on(BI.MultiDateCard.EVENT_CHANGE, function (v) {
+ self._setInnerValue(self.month, v);
+ });
+ return self.month;
+ case BI.MultiDateCombo.MULTI_DATE_WEEK_CARD:
+ self.week = BI.createWidget({
+ type: 'bi.weekcard'
+ });
+ self.week.on(BI.MultiDateCard.EVENT_CHANGE, function (v) {
+ self._setInnerValue(self.week, v);
+ });
+ return self.week;
+ case BI.MultiDateCombo.MULTI_DATE_DAY_CARD:
+ self.day = BI.createWidget({
+ type: 'bi.daycard'
+ });
+ self.day.on(BI.MultiDateCard.EVENT_CHANGE, function (v) {
+ self._setInnerValue(self.day, v);
+ });
+ return self.day;
+ }
+ }
+ });
+ this.dateTab.setSelect(BI.MultiDateCombo.MULTI_DATE_YMD_CARD);
+ this.cur = BI.MultiDateCombo.MULTI_DATE_YMD_CARD;
+ this.dateTab.on(BI.Tab.EVENT_CHANGE, function () {
+ var v = self.dateTab.getSelect();
+ switch (v) {
+ case BI.MultiDateCombo.MULTI_DATE_YMD_CARD:
+ var date = this.getTab(self.cur).getCalculationValue();
+ self.ymd.setValue({
+ year: date.getFullYear(),
+ month: date.getMonth(),
+ day: date.getDate()
+ });
+ self._setInnerValue(self.ymd);
+ break;
+ case BI.MultiDateCombo.MULTI_DATE_YEAR_CARD:
+ self.year.setValue(self.storeValue);
+ self._setInnerValue(self.year);
+ break;
+ case BI.MultiDateCombo.MULTI_DATE_QUARTER_CARD:
+ self.quarter.setValue(self.storeValue);
+ self._setInnerValue(self.quarter);
+ break;
+ case BI.MultiDateCombo.MULTI_DATE_MONTH_CARD:
+ self.month.setValue(self.storeValue);
+ self._setInnerValue(self.month);
+ break;
+ case BI.MultiDateCombo.MULTI_DATE_WEEK_CARD:
+ self.week.setValue(self.storeValue);
+ self._setInnerValue(self.week);
+ break;
+ case BI.MultiDateCombo.MULTI_DATE_DAY_CARD:
+ self.day.setValue(self.storeValue);
+ self._setInnerValue(self.day);
+ break;
+ }
+ self.cur = v;
+ });
+ this.dateButton = BI.createWidget({
+ type: "bi.grid",
+ items: [[this.clearButton, this.textButton, this.okButton]]
+ });
+ BI.createWidget({
+ element: this,
+ type: "bi.vtape",
+ items: [{
+ el: this.dateTab
+ }, {
+ el: this.dateButton,
+ height: 30
+ }]
+ });
+ },
+ _setInnerValue: function (obj) {
+ if (this.dateTab.getSelect() === BI.MultiDateCombo.MULTI_DATE_YMD_CARD) {
+ this.textButton.setValue(BI.i18nText("BI-Multi_Date_Today"));
+ this.textButton.setEnable(true);
+ } else {
+ var date = obj.getCalculationValue();
+ date = date.print("%Y-%x-%e");
+ this.textButton.setValue(date);
+ this.textButton.setEnable(false);
+ }
+ },
+ setValue: function (v) {
+ this.storeValue = v;
+ var self = this, date;
+ var type, value;
+ if (BI.isNotNull(v)) {
+ type = v.type || BICst.DATE_TYPE.MULTI_DATE_CALENDAR;
+ value = v.value;
+ if (BI.isNull(value)) {
+ value = v;
+ }
+ }
+ switch (type) {
+ case BICst.DATE_TYPE.MULTI_DATE_YEAR_PREV:
+ case BICst.DATE_TYPE.MULTI_DATE_YEAR_AFTER:
+ case BICst.DATE_TYPE.MULTI_DATE_YEAR_BEGIN:
+ case BICst.DATE_TYPE.MULTI_DATE_YEAR_END:
+ this.dateTab.setSelect(BICst.MULTI_DATE_YEAR_CARD);
+ this.year.setValue({type: type, value: value});
+ this.cur = BICst.MULTI_DATE_YEAR_CARD;
+ self._setInnerValue(this.year);
+ break;
+ case BICst.DATE_TYPE.MULTI_DATE_QUARTER_PREV:
+ case BICst.DATE_TYPE.MULTI_DATE_QUARTER_AFTER:
+ case BICst.DATE_TYPE.MULTI_DATE_QUARTER_BEGIN:
+ case BICst.DATE_TYPE.MULTI_DATE_QUARTER_END:
+ this.dateTab.setSelect(BICst.MULTI_DATE_QUARTER_CARD);
+ this.cur = BICst.MULTI_DATE_QUARTER_CARD;
+ this.quarter.setValue({type: type, value: value});
+ self._setInnerValue(this.quarter);
+ break;
+ case BICst.DATE_TYPE.MULTI_DATE_MONTH_PREV:
+ case BICst.DATE_TYPE.MULTI_DATE_MONTH_AFTER:
+ case BICst.DATE_TYPE.MULTI_DATE_MONTH_BEGIN:
+ case BICst.DATE_TYPE.MULTI_DATE_MONTH_END:
+ this.dateTab.setSelect(BICst.MULTI_DATE_MONTH_CARD);
+ this.cur = BICst.MULTI_DATE_MONTH_CARD;
+ this.month.setValue({type: type, value: value});
+ self._setInnerValue(this.month);
+ break;
+ case BICst.DATE_TYPE.MULTI_DATE_WEEK_PREV:
+ case BICst.DATE_TYPE.MULTI_DATE_WEEK_AFTER:
+ this.dateTab.setSelect(BICst.MULTI_DATE_WEEK_CARD);
+ this.cur = BICst.MULTI_DATE_WEEK_CARD;
+ this.week.setValue({type: type, value: value});
+ self._setInnerValue(this.week);
+ break;
+ case BICst.DATE_TYPE.MULTI_DATE_DAY_PREV:
+ case BICst.DATE_TYPE.MULTI_DATE_DAY_AFTER:
+ case BICst.DATE_TYPE.MULTI_DATE_DAY_TODAY:
+ this.dateTab.setSelect(BICst.MULTI_DATE_DAY_CARD);
+ this.cur = BICst.MULTI_DATE_DAY_CARD;
+ this.day.setValue({type: type, value: value});
+ self._setInnerValue(this.day);
+ break;
+ default:
+ if (BI.isNull(value) || BI.isEmptyObject(value)) {
+ var date = new Date();
+ this.dateTab.setSelect(BI.MultiDateCombo.MULTI_DATE_YMD_CARD);
+ this.ymd.setValue({
+ year: date.getFullYear(),
+ month: date.getMonth(),
+ day: date.getDate()
+ });
+ this.textButton.setValue(BI.i18nText("BI-Multi_Date_Today"));
+ } else {
+ this.dateTab.setSelect(BI.MultiDateCombo.MULTI_DATE_YMD_CARD);
+ this.ymd.setValue(value);
+ this.textButton.setValue(BI.i18nText("BI-Multi_Date_Today"));
+ }
+ this.textButton.setEnable(true);
+ break;
+ }
+ },
+ getValue: function () {
+ var tab = this.dateTab.getSelect();
+ switch (tab) {
+ case BI.MultiDateCombo.MULTI_DATE_YMD_CARD:
+ return this.ymd.getValue();
+ case BI.MultiDateCombo.MULTI_DATE_YEAR_CARD:
+ return this.year.getValue();
+ case BI.MultiDateCombo.MULTI_DATE_QUARTER_CARD:
+ return this.quarter.getValue();
+ case BI.MultiDateCombo.MULTI_DATE_MONTH_CARD:
+ return this.month.getValue();
+ case BI.MultiDateCombo.MULTI_DATE_WEEK_CARD:
+ return this.week.getValue();
+ case BI.MultiDateCombo.MULTI_DATE_DAY_CARD:
+ return this.day.getValue();
+ }
+ }
+});
+BI.MultiDatePopup.BUTTON_OK_EVENT_CHANGE = "BUTTON_OK_EVENT_CHANGE";
+BI.MultiDatePopup.BUTTON_lABEL_EVENT_CHANGE = "BUTTON_lABEL_EVENT_CHANGE";
+BI.MultiDatePopup.BUTTON_CLEAR_EVENT_CHANGE = "BUTTON_CLEAR_EVENT_CHANGE";
+BI.MultiDatePopup.CALENDAR_EVENT_CHANGE = "CALENDAR_EVENT_CHANGE";
+BI.shortcut('bi.multidate_popup', BI.MultiDatePopup);
diff --git a/src/widget/multidate/multidate.quarter.js b/src/widget/multidate/multidate.quarter.js
new file mode 100644
index 000000000..508e73dbc
--- /dev/null
+++ b/src/widget/multidate/multidate.quarter.js
@@ -0,0 +1,48 @@
+/**
+ * 普通控件
+ *
+ * @class BI.QuarterCard
+ * @extends BI.MultiDateCard
+ */
+BI.QuarterCard = BI.inherit(BI.MultiDateCard, {
+
+ _defaultConfig: function () {
+ return $.extend(BI.QuarterCard.superclass._defaultConfig.apply(this, arguments), {
+ baseCls: 'bi-multidate-quartercard'
+ });
+ },
+
+ _init: function () {
+ BI.QuarterCard.superclass._init.apply(this, arguments);
+ },
+
+ dateConfig: function () {
+ return [{
+ selected: true,
+ value: BICst.DATE_TYPE.MULTI_DATE_QUARTER_PREV,
+ isEditorExist: true,
+ text: BI.i18nText("BI-Multi_Date_Quarter_Prev")
+ },
+ {
+ value: BICst.DATE_TYPE.MULTI_DATE_QUARTER_AFTER,
+ isEditorExist: true,
+ text: BI.i18nText("BI-Multi_Date_Quarter_Next")
+ },
+ {
+ value: BICst.DATE_TYPE.MULTI_DATE_QUARTER_BEGIN,
+ isEditorExist: false,
+ text: BI.i18nText("BI-Multi_Date_Quarter_Begin")
+ },
+ {
+ value: BICst.DATE_TYPE.MULTI_DATE_QUARTER_END,
+ isEditorExist: false,
+ text: BI.i18nText("BI-Multi_Date_Quarter_End")
+ }]
+ },
+
+ defaultSelectedItem: function () {
+ return BICst.DATE_TYPE.MULTI_DATE_QUARTER_PREV;
+ }
+});
+BI.QuarterCard.EVENT_CHANGE = "EVENT_CHANGE";
+BI.shortcut('bi.quartercard', BI.QuarterCard);
diff --git a/src/widget/multidate/multidate.segment.js b/src/widget/multidate/multidate.segment.js
new file mode 100644
index 000000000..2ac7de01f
--- /dev/null
+++ b/src/widget/multidate/multidate.segment.js
@@ -0,0 +1,127 @@
+/**
+ * 普通控件
+ *
+ * @class BI.MultiDateSegment
+ * @extends BI.Single
+ */
+BI.MultiDateSegment = BI.inherit(BI.Single, {
+ constants: {
+ itemHeight: 24,
+ maxGap: 15,
+ minGap: 10,
+ textWidth: 30,
+ defaultEditorValue: "1"
+ },
+
+ _defaultConfig: function () {
+ return $.extend(BI.MultiDateSegment.superclass._defaultConfig.apply(this, arguments), {
+ baseCls: 'bi-multidate-segment',
+ text: "",
+ width: 130,
+ height: 30,
+ isEditorExist: true,
+ selected: false,
+ defaultEditorValue: "1"
+ });
+ },
+
+ _init: function () {
+ BI.MultiDateSegment.superclass._init.apply(this, arguments);
+ var self = this, opts = this.options;
+ this.radio = BI.createWidget({
+ type: "bi.radio",
+ selected: opts.selected
+ });
+ this.radio.on(BI.Controller.EVENT_CHANGE, function (v) {
+ self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);
+ });
+ this.textEditor = BI.createWidget({
+ type: 'bi.text_editor',
+ value: this.constants.defaultEditorValue,
+ title: function () {
+ return self.textEditor.getValue();
+ },
+ cls: 'bi-multidate-editor',
+ width: this.constants.textWidth,
+ height: this.constants.itemHeight
+ });
+ this.textEditor.on(BI.Controller.EVENT_CHANGE, function (v) {
+ self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);
+ });
+ this.text = BI.createWidget({
+ type: "bi.label",
+ textAlign: "left",
+ cls: 'bi-multidate-normal-label',
+ text: opts.text,
+ height: this.constants.itemHeight
+ });
+ this._createSegment();
+ },
+ _createSegment: function () {
+ if (this.options.isEditorExist === true) {
+ return BI.createWidget({
+ element: this,
+ type: 'bi.left',
+ items: [{
+ el: {
+ type: "bi.center_adapt",
+ items: [this.radio],
+ height: this.constants.itemHeight
+ },
+ lgap: 0
+ },
+ {
+ el: {
+ type: "bi.center_adapt",
+ items: [this.textEditor],
+ widgetName: 'textEditor'
+ },
+ lgap: this.constants.maxGap
+ },
+ {
+ el: this.text,
+ lgap: this.constants.minGap
+ }]
+ });
+ }
+ return BI.createWidget({
+ element: this,
+ type: 'bi.left',
+ items: [{
+ el: {
+ type: "bi.center_adapt",
+ items: [this.radio],
+ height: this.constants.itemHeight
+ },
+ lgap: 0
+ },
+ {
+ el: this.text,
+ lgap: this.constants.maxGap
+ }]
+ })
+ },
+ setSelected: function (v) {
+ if (BI.isNotNull(this.radio)) {
+ this.radio.setSelected(v);
+ this.textEditor.setEnable(v);
+ }
+ },
+ isSelected: function () {
+ return this.radio.isSelected();
+ },
+ getValue: function () {
+ return this.options.value;
+ },
+ getInputValue: function () {
+ return this.textEditor.getValue() | 0;
+ },
+ setInputValue: function (v) {
+ this.textEditor.setValue(v);
+ },
+ isEditorExist: function () {
+ return this.options.isEditorExist;
+ }
+});
+BI.MultiDateSegment.EVENT_CHANGE = "EVENT_CHANGE";
+BI.shortcut('bi.multidate_segment', BI.MultiDateSegment);
\ No newline at end of file
diff --git a/src/widget/multidate/multidate.week.js b/src/widget/multidate/multidate.week.js
new file mode 100644
index 000000000..d81903e27
--- /dev/null
+++ b/src/widget/multidate/multidate.week.js
@@ -0,0 +1,37 @@
+/**
+ * 普通控件
+ *
+ * @class BI.WeekCard
+ * @extends BI.MultiDateCard
+ */
+BI.WeekCard = BI.inherit(BI.MultiDateCard, {
+ _defaultConfig: function () {
+ return $.extend(BI.WeekCard.superclass._defaultConfig.apply(this, arguments), {
+ baseCls: 'bi-multidate-weekcard'
+ });
+ },
+
+ _init: function () {
+ BI.WeekCard.superclass._init.apply(this, arguments);
+ },
+
+ dateConfig: function () {
+ return [{
+ selected: true,
+ isEditorExist: true,
+ text: BI.i18nText("BI-Multi_Date_Week_Prev"),
+ value: BICst.DATE_TYPE.MULTI_DATE_WEEK_PREV
+ },
+ {
+ isEditorExist: true,
+ text: BI.i18nText("BI-Multi_Date_Week_Next"),
+ value: BICst.DATE_TYPE.MULTI_DATE_WEEK_AFTER
+ }];
+ },
+
+ defaultSelectedItem: function () {
+ return BICst.DATE_TYPE.MULTI_DATE_WEEK_PREV;
+ }
+});
+BI.WeekCard.EVENT_CHANGE = "EVENT_CHANGE";
+BI.shortcut('bi.weekcard', BI.WeekCard);
diff --git a/src/widget/multidate/multidate.year.js b/src/widget/multidate/multidate.year.js
new file mode 100644
index 000000000..e1fce8b64
--- /dev/null
+++ b/src/widget/multidate/multidate.year.js
@@ -0,0 +1,47 @@
+/**
+ * 普通控件
+ *
+ * @class BI.YearCard
+ * @extends BI.MultiDateCard
+ */
+BI.YearCard = BI.inherit(BI.MultiDateCard, {
+ _defaultConfig: function () {
+ return $.extend(BI.YearCard.superclass._defaultConfig.apply(this, arguments), {
+ baseCls: 'bi-multidate-yearcard'
+ });
+ },
+
+ _init: function () {
+ BI.YearCard.superclass._init.apply(this, arguments);
+ },
+
+ dateConfig: function () {
+ return [{
+ selected: true,
+ isEditorExist: true,
+ text: BI.i18nText("BI-Multi_Date_Year_Prev"),
+ value: BICst.DATE_TYPE.MULTI_DATE_YEAR_PREV
+ },
+ {
+ isEditorExist: true,
+ text: BI.i18nText("BI-Multi_Date_Year_Next"),
+ value: BICst.DATE_TYPE.MULTI_DATE_YEAR_AFTER
+ },
+ {
+ isEditorExist: false,
+ value: BICst.DATE_TYPE.MULTI_DATE_YEAR_BEGIN,
+ text: BI.i18nText("BI-Multi_Date_Year_Begin")
+ },
+ {
+ isEditorExist: false,
+ value: BICst.DATE_TYPE.MULTI_DATE_YEAR_END,
+ text: BI.i18nText("BI-Multi_Date_Year_End")
+ }]
+ },
+
+ defaultSelectedItem: function () {
+ return BICst.DATE_TYPE.MULTI_DATE_YEAR_PREV;
+ }
+});
+BI.YearCard.EVENT_CHANGE = "EVENT_CHANGE";
+BI.shortcut('bi.yearcard', BI.YearCard);
diff --git a/src/widget/timeinterval/timeinterval.js b/src/widget/timeinterval/timeinterval.js
new file mode 100644
index 000000000..e79fe3cbd
--- /dev/null
+++ b/src/widget/timeinterval/timeinterval.js
@@ -0,0 +1,189 @@
+/**
+ * Created by Baron on 2015/10/19.
+ */
+BI.TimeInterval = BI.inherit(BI.Single, {
+ constants: {
+ height: 25,
+ width: 25,
+ lgap: 15,
+ offset: -15,
+ timeErrorCls: "time-error",
+ DATE_MIN_VALUE: "1900-01-01",
+ DATE_MAX_VALUE: "2099-12-31"
+ },
+ _defaultConfig: function () {
+ var conf = BI.TimeInterval.superclass._defaultConfig.apply(this, arguments);
+ return BI.extend(conf, {
+ extraCls: "bi-time-interval"
+ })
+ },
+ _init: function () {
+ var self = this;
+ BI.TimeInterval.superclass._init.apply(this, arguments);
+
+ this.left = this._createCombo();
+ this.right = this._createCombo();
+ this.label = BI.createWidget({
+ type: 'bi.label',
+ height: this.constants.height,
+ width: this.constants.width,
+ text: "-"
+ });
+ BI.createWidget({
+ element: self,
+ type: "bi.center",
+ hgap: 15,
+ height: this.constants.height,
+ items: [{
+ type: "bi.absolute",
+ items: [{
+ el: self.left,
+ left: this.constants.offset,
+ right: 0,
+ top: 0,
+ bottom: 0
+ }]
+ }, {
+ type: "bi.absolute",
+ items: [{
+ el: self.right,
+ left: 0,
+ right: this.constants.offset,
+ top: 0,
+ bottom: 0
+ }]
+ }]
+ });
+ BI.createWidget({
+ type: "bi.horizontal_auto",
+ element: this,
+ items: [
+ self.label
+ ]
+ });
+ },
+
+ _createCombo: function () {
+ var self = this;
+ var combo = BI.createWidget({
+ type: 'bi.multidate_combo'
+ });
+ combo.on(BI.MultiDateCombo.EVENT_ERROR, function () {
+ self._clearTitle();
+ self.element.removeClass(self.constants.timeErrorCls);
+ self.fireEvent(BI.TimeInterval.EVENT_ERROR);
+ });
+
+ combo.on(BI.MultiDateCombo.EVENT_VALID, function(){
+ BI.Bubbles.hide("error");
+ var smallDate = self.left.getKey(), bigDate = self.right.getKey();
+ if (self._check(smallDate, bigDate) && self._compare(smallDate, bigDate)) {
+ self._setTitle(BI.i18nText("BI-Time_Interval_Error_Text"));
+ self.element.addClass(self.constants.timeErrorCls);
+ BI.Bubbles.show("error", BI.i18nText("BI-Time_Interval_Error_Text"), self, {
+ offsetStyle: "center"
+ });
+ self.fireEvent(BI.TimeInterval.EVENT_ERROR);
+ } else {
+ self._clearTitle();
+ self.element.removeClass(self.constants.timeErrorCls);
+ }
+ });
+
+ combo.on(BI.MultiDateCombo.EVENT_FOCUS, function(){
+ BI.Bubbles.hide("error");
+ var smallDate = self.left.getKey(), bigDate = self.right.getKey();
+ if (self._check(smallDate, bigDate) && self._compare(smallDate, bigDate)) {
+ self._setTitle(BI.i18nText("BI-Time_Interval_Error_Text"));
+ self.element.addClass(self.constants.timeErrorCls);
+ BI.Bubbles.show("error", BI.i18nText("BI-Time_Interval_Error_Text"), self, {
+ offsetStyle: "center"
+ });
+ self.fireEvent(BI.TimeInterval.EVENT_ERROR);
+ } else {
+ self._clearTitle();
+ self.element.removeClass(self.constants.timeErrorCls);
+ }
+ });
+
+ combo.on(BI.MultiDateCombo.EVENT_BEFORE_POPUPVIEW, function () {
+ self.left.hidePopupView();
+ self.right.hidePopupView();
+ });
+ //combo.on(BI.MultiDateCombo.EVENT_CHANGE, function () {
+ // BI.Bubbles.hide("error");
+ // var smallDate = self.left.getKey(), bigDate = self.right.getKey();
+ // if (self._check(smallDate, bigDate) && self._compare(smallDate, bigDate)) {
+ // self._setTitle(BI.i18nText("BI-Time_Interval_Error_Text"));
+ // self.element.addClass(self.constants.timeErrorCls);
+ // BI.Bubbles.show("error", BI.i18nText("BI-Time_Interval_Error_Text"), self, {
+ // offsetStyle: "center"
+ // });
+ // self.fireEvent(BI.TimeInterval.EVENT_ERROR);
+ // } else {
+ // self._clearTitle();
+ // self.element.removeClass(self.constants.timeErrorCls);
+ // }
+ //});
+
+ combo.on(BI.MultiDateCombo.EVENT_CONFIRM, function(){
+ BI.Bubbles.hide("error");
+ var smallDate = self.left.getKey(), bigDate = self.right.getKey();
+ if (self._check(smallDate, bigDate) && self._compare(smallDate, bigDate)) {
+ self._setTitle(BI.i18nText("BI-Time_Interval_Error_Text"));
+ self.element.addClass(self.constants.timeErrorCls);
+ self.fireEvent(BI.TimeInterval.EVENT_ERROR);
+ }else{
+ self._clearTitle();
+ self.element.removeClass(self.constants.timeErrorCls);
+ self.fireEvent(BI.TimeInterval.EVENT_CHANGE);
+ }
+ });
+ return combo;
+ },
+ _dateCheck: function (date) {
+ return Date.parseDateTime(date, "%Y-%x-%d").print("%Y-%x-%d") == date || Date.parseDateTime(date, "%Y-%X-%d").print("%Y-%X-%d") == date || Date.parseDateTime(date, "%Y-%x-%e").print("%Y-%x-%e") == date || Date.parseDateTime(date, "%Y-%X-%e").print("%Y-%X-%e") == date;
+ },
+ _checkVoid: function (obj) {
+ return !Date.checkVoid(obj.year, obj.month, obj.day, this.constants.DATE_MIN_VALUE, this.constants.DATE_MAX_VALUE)[0];
+ },
+ _check: function (smallDate, bigDate) {
+ var smallObj = smallDate.match(/\d+/g), bigObj = bigDate.match(/\d+/g);
+ return this._dateCheck(smallDate) && Date.checkLegal(smallDate) && this._checkVoid({
+ year: smallObj[0],
+ month: smallObj[1],
+ day: smallObj[2]
+ }) && this._dateCheck(bigDate) && Date.checkLegal(bigDate) && this._checkVoid({
+ year: bigObj[0],
+ month: bigObj[1],
+ day: bigObj[2]
+ });
+ },
+ _compare: function (smallDate, bigDate) {
+ smallDate = Date.parseDateTime(smallDate, "%Y-%X-%d").print("%Y-%X-%d");
+ bigDate = Date.parseDateTime(bigDate, "%Y-%X-%d").print("%Y-%X-%d");
+ return BI.isNotNull(smallDate) && BI.isNotNull(bigDate) && smallDate > bigDate;
+ },
+ _setTitle: function (v) {
+ this.left.setTitle(v);
+ this.right.setTitle(v);
+ this.label.setTitle(v);
+ },
+ _clearTitle: function () {
+ this.left.setTitle("");
+ this.right.setTitle("");
+ this.label.setTitle("");
+ },
+ setValue: function (date) {
+ date = date || {};
+ this.left.setValue(date.start);
+ this.right.setValue(date.end);
+ },
+ getValue: function () {
+ return {start: this.left.getValue(), end: this.right.getValue()};
+ }
+});
+BI.TimeInterval.EVENT_VALID = "EVENT_VALID";
+BI.TimeInterval.EVENT_ERROR = "EVENT_ERROR";
+BI.TimeInterval.EVENT_CHANGE = "EVENT_CHANGE";
+BI.shortcut("bi.time_interval", BI.TimeInterval);
\ No newline at end of file
diff --git a/uidoc/base/button/button.md b/uidoc/base/button/button.md
index 0f600054b..4323fb351 100644
--- a/uidoc/base/button/button.md
+++ b/uidoc/base/button/button.md
@@ -41,7 +41,7 @@ BI.createWidget({
| :------ |:------------- | :-----| :----|:----
| level |按钮类型 | string| common,success,warning,ignore | common |
| minWidth | 最小宽度,如果block/clear中某一项为true,此项值为0,否则为90 | number | — | 90 |
-| shadow | | boolean| true,false | |
+| shadow | 是否显示阴影 | boolean| true,false | props.clear !== true |
| isShadowShowingOnSelected|选中状态下是否显示阴影 | boolean| true,false | true |
| readonly | 是否只读 | boolean | true,false | true |
| iconClass | 图标类型 | string| — | " "|
diff --git a/uidoc/base/button/text_button.md b/uidoc/base/button/text_button.md
index 314f6f4fb..6686420a8 100644
--- a/uidoc/base/button/text_button.md
+++ b/uidoc/base/button/text_button.md
@@ -34,7 +34,7 @@ BI.createWidget({
##### 高级属性
| 参数 | 说明 | 类型 | 可选值 | 默认值
| :------ |:------------- | :-----| :----|:----
-| py | | string| | " " |
+| py | 拼音 | string| | " " |
| textAlign | 文字布局 | string | left,center,right | cneter |
| whiteSpace | 元素内的空白处理方式 | string | normal,nowrap | nowrap|
| forceCenter | 是否无论如何都要居中, 不考虑超出边界的情况, 在未知宽度和高度时有效 | boolean | true,false | false |
diff --git a/uidoc/base/editor/editor.md b/uidoc/base/editor/editor.md
index 841006a19..61be1f4d0 100644
--- a/uidoc/base/editor/editor.md
+++ b/uidoc/base/editor/editor.md
@@ -33,7 +33,6 @@ BI.createWidget({
| bgap | 效果相当于文本框bottom-padding值 | number | — | 0 |
| validationChecker | 输入较验函数 |function| — | — |
| quitChecker | 是否允许退出编辑函数 | function | — | — |
-| mouseOut | | boolean | true,false | false |
| allowBlank | 是否允许空值 | boolean | true,false | false |
| watermark | 文本框placeholder | string | — | " " |
| errorText | 错误提示 | string/function | —| " "|
diff --git a/uidoc/base/editor/formula_editor.md b/uidoc/base/editor/formula_editor.md
index 8f6a83393..e44f77c32 100644
--- a/uidoc/base/editor/formula_editor.md
+++ b/uidoc/base/editor/formula_editor.md
@@ -28,8 +28,8 @@ BI.createWidget({
| :------ |:------------- | :-----| :----|:----
| value | 文本域的值 | string | — | " "|
| watermark | 文本框placeholder| string | —| " " |
-| fieldTextValueMap | | string| —| {}|
-| showHint | | | —| 2 |
+| fieldTextValueMap | 字段集合 | onject | —| {}|
+| showHint | 是否显示提示信息 | boolean | true,false | true |
| lineHeight | 行高 | number | —| 2|
@@ -44,12 +44,12 @@ BI.createWidget({
| insertOperator | 插入操作符| op|
| setFunction | 设置函数 | v|
| insertString | 插入字符串 | str|
-| getFormulaString | 获取公式 |— |
+| getFormulaString | 获取公式框内容 |— |
| getUsedFields | 获取可用字段 | — |
-| getCheckString | | — |
+| getCheckString | 获取校验内容 | — |
| getValue | 获取文本框值|—|
| setValue | 设置文本框值|value|
-| setFieldTextValueMap | | fieldTextValueMap |
+| setFieldTextValueMap | 设置字段集合 | fieldTextValueMap |
| refresh | 刷新文本框 | —|
diff --git a/uidoc/base/editor/multifile_editor.md b/uidoc/base/editor/multifile_editor.md
index d2c41a474..bef06cf04 100644
--- a/uidoc/base/editor/multifile_editor.md
+++ b/uidoc/base/editor/multifile_editor.md
@@ -25,7 +25,7 @@ BI.createWidget({
| :------ |:------------- | :-----| :----|:----
| multiple | 是否支持多选 | boolean | true,false| false |
| maxSize | 最大可选数量 | number |— | -1 |
-| accept | | string | —| " "|
+| accept | 允许上传的文件类型 | string | —| " "|
| url | 文件路径 | string | —| " "|
diff --git a/uidoc/base/label.md b/uidoc/base/label.md
index 6aaeb9b1c..1cfa2b537 100644
--- a/uidoc/base/label.md
+++ b/uidoc/base/label.md
@@ -44,8 +44,8 @@ BI.createWidget({
| textAlign | 文本对齐方式 | string | left,center,right | center |
| whiteSpace | 元素内空白处理方式 | string| normal,nowrap | nowrap|
| forceCenter | 是否无论如何都要居中, 不考虑超出边界的情况, 在未知宽度和高度时有效 | boolean | true,false | true |
-| py | | string | — | 空 |
-| keyword | | string | —| 空 |
+| py | 拼音 | string | — | 空 |
+| keyword | 设置标红的关键词 | string | —| 空 |
| disabled | 灰化 | boolean| true,false | 无 |
| title | 提示title | string | — | 空 |
| warningTitle | 错误提示title | string | — | 空 |
@@ -61,7 +61,7 @@ BI.createWidget({
| getText| 获取文本值 | —|
| setStyle | 设置文本样式 |需要设置的文本标签样式,例{"color":"#000"} |
| setValue | 设置文本值 | 需要设置的文本值text |
-| populate| | —|
+| populate| 清空label | —|
---
\ No newline at end of file
diff --git a/uidoc/case/button/multi_select_item.md b/uidoc/case/button/multi_select_item.md
index 82856d6e4..eb48696d3 100644
--- a/uidoc/case/button/multi_select_item.md
+++ b/uidoc/case/button/multi_select_item.md
@@ -30,7 +30,7 @@ BI.createWidget({
| 参数 | 说明 | 类型 | 可选值 | 默认值
| :------ |:------------- | :-----| :----|:----
| height | 高度 | number | — | 30
-| logic | | object | | {dynamic:false} |
+| logic | 布局逻辑 | object | — | {dynamic:false} |
diff --git a/uidoc/case/combo/text_value_combo.md b/uidoc/case/combo/text_value_combo.md
index b605b378f..0111637b7 100644
--- a/uidoc/case/combo/text_value_combo.md
+++ b/uidoc/case/combo/text_value_combo.md
@@ -1,30 +1,29 @@
-# text_value_combo
+# bi.text_value_combo
-## 单选combo, 基类[BI.Widget](/core/widget.md)
+## 基类[BI.Widget](/core/widget.md)
{% method %}
-[source](https://jsfiddle.net/fineui/72xwcdee/)
+[source](https://jsfiddle.net/fineui/hcf0kd9m/)
{% common %}
```javascript
BI.createWidget({
type: "bi.text_value_combo",
- text: "initial value",
element: "#wrapper",
+ text: "value_combo",
width: 300,
items: [{
- text: "MVC-1",
+ text: "1",
value: 1
}, {
- text: "MVC-2",
+ text: "2",
value: 2
}, {
- text: "MVC-3",
+ text: "3",
value: 3
}]
-})
-
+});
```
@@ -35,19 +34,25 @@ BI.createWidget({
##### 基础属性
| 参数 | 说明 | 类型 | 可选值 | 默认值
| :------ |:------------- | :-----| :----|:----
-| height | 高度 | number | — | 24
-| items | 子items | array | — | [ ]
-| text | trigger初始文本内容 | string | — | " " |
+| height | 高度 | number | — | 30
+| el | 自定义下拉框trigger| object |—|{ } |
+| text | 文本内容 | string | — | " " |
| chooseType | 选择类型 | const |参考button_group | BI.ButtonGroup.CHOOSE_TYPE_SINGLE |
+
## 对外方法
-| 名称 | 说明 | 回调参数
-| :------ |:------------- | :-----
+| 名称 | 说明 | 回调参数
+| :------ |:------------- | :-----
+| setValue| 设置value值|—|
+| getValue| 获取value值|—|
+| populate | 刷新列表 | items |
+
+
+---
----
\ No newline at end of file
diff --git a/uidoc/case/layer/pane_list.md b/uidoc/case/layer/pane_list.md
index cbbdc06d7..8b60035a6 100644
--- a/uidoc/case/layer/pane_list.md
+++ b/uidoc/case/layer/pane_list.md
@@ -29,7 +29,7 @@ BI.createWidget({
| hasNext | 是否有下一页 | function | —| —
| onLoad | 正在加载 | function | —| —
| el | 开启panel的元素 | object | —|{type: "bi.button_group" }|
-| logic | | object |— | { dynamic:true}
+| logic | 布局逻辑 | object |— | { dynamic:true}
| hgap | 效果相当于容器左右padding值 | number | — | 0 |
| vgap | 效果相当于容器上下padding值 | number | —| 0 |
| lgap | 效果相当于容器left-padding值 | number | —| 0 |
diff --git a/uidoc/case/layer/panel.md b/uidoc/case/layer/panel.md
index f145b7617..4eb739284 100644
--- a/uidoc/case/layer/panel.md
+++ b/uidoc/case/layer/panel.md
@@ -33,9 +33,9 @@ BI.createWidget({
| 参数 | 说明 | 类型 | 可选值 | 默认值
| :------ |:------------- | :-----| :----|:----
| title | 标题 | string | — | " "
-| titleButton | | array | —| [ ]
+| titleButton | 标题后的按钮组 | array | —| [ ]
| el | 开启panel的元素 | object | —|{ }|
-| logic | | object |— | { dynamic:false}
+| logic | 布局逻辑 | object |— | { dynamic:false}
diff --git a/uidoc/case/segment.md b/uidoc/case/segment.md
index c70ee213d..0a8164faa 100644
--- a/uidoc/case/segment.md
+++ b/uidoc/case/segment.md
@@ -42,17 +42,17 @@ BI.createWidget({
##### 基础属性
| 参数 | 说明 | 类型 | 可选值 | 默认值
| :------ |:------------- | :-----| :----|:----
-| hgap | 效果相当于文本框左右padding值 | number | | 10 |
-| vgap | 效果相当于文本框上下padding值 | number | | 0 |
-| lgap | 效果相当于文本框left-padding值 | number | | 0 |
-| rgap | 效果相当于文本框right-padding值 | number | | 0 |
-| tgap |效果相当于文本框top-padding值 | number | | 0 |
-| bgap | 效果相当于文本框bottom-padding值 | number | | 0 |
-| items | 子控件数组 | array | | |
-| width | 宽度 | number | | |
-| height | 高度 | number | | |
-
-
---- ---
+| hgap | 效果相当于文本框左右padding值 | number | — | 10 |
+| vgap | 效果相当于文本框上下padding值 | number | — | 0 |
+| lgap | 效果相当于文本框left-padding值 | number | — | 0 |
+| rgap | 效果相当于文本框right-padding值 | number | — | 0 |
+| tgap |效果相当于文本框top-padding值 | number | — | 0 |
+| bgap | 效果相当于文本框bottom-padding值 | number | — | 0 |
+| items | 子控件数组 | array |— | [ ] |
+| width | 宽度 | number | — | — |
+| height | 高度 | number | — | — |
+
+
+---
diff --git a/uidoc/case/shelter_editor.md b/uidoc/case/shelter_editor.md
new file mode 100644
index 000000000..1b1e4fef3
--- /dev/null
+++ b/uidoc/case/shelter_editor.md
@@ -0,0 +1,2 @@
+# clipboard
+
diff --git a/uidoc/core/abstract/collection_view.md b/uidoc/core/abstract/collection_view.md
index 77f6332f1..d6bc36666 100644
--- a/uidoc/core/abstract/collection_view.md
+++ b/uidoc/core/abstract/collection_view.md
@@ -37,10 +37,10 @@ BI.createWidget({
| items | 子组件数组 | array | — | [ ] |
| overflowX | 是否显示横向滚动条| boolean | true,false | true |
| overflowY | 是否显示纵向滚动条 | boolean | true,false | true |
-| cellSizeAndPositionGetter |设置每个单元格的位置坐标和宽高 | function|— | — |
-| horizontalOverscanSize | | number | — | 0 |
-| verticalOverscanSize | | number | — | 0 |
-| width | 行宽,必设 |number| —ßß | — |
+| cellSizeAndPositionGetter | 设置每个单元格的位置坐标和宽高 | function|— | — |
+| horizontalOverscanSize | 横向超出可视范围区域预加载的数量 | number | — | 0 |
+| verticalOverscanSize | 纵向超出可视范围区域预加载的数量 | number | — | 0 |
+| width | 行宽,必设 |number| — | — |
| height | 列宽,必设 | number | —| — |
| scrollLeft | 滚动条相对于左边的偏移 | number | — | 0 |
| scrollTop | 滚动条相对于顶部的偏移 | number | — | 0 |
diff --git a/uidoc/core/abstract/custom_tree.md b/uidoc/core/abstract/custom_tree.md
index ccb5a5a7a..451cb8466 100644
--- a/uidoc/core/abstract/custom_tree.md
+++ b/uidoc/core/abstract/custom_tree.md
@@ -55,8 +55,8 @@ BI.createWidget({
| :------ |:------------- | :-----| :----|:----
| items | 子组件数组 | array | — | [ ] |
| itemsCreator| 子组件构造器 | object | — | { } |
-| expander | | object | | {el: {},popup: {type: "bi.custom_tree"}}|
-| el | | object | | {type: "bi.button_tree",chooseType: 0,layouts: [{type: "bi.vertical"}]}|
+| expander | popup组件 | object | — | {el: {},popup: {type: "bi.custom_tree"}}|
+| el | 开启popup元素 | object | — | {type: "bi.button_tree",chooseType: 0,layouts: [{type: "bi.vertical"}]}|
diff --git a/uidoc/core/abstract/grid_view.md b/uidoc/core/abstract/grid_view.md
index ae38074f4..c0b6b94b9 100644
--- a/uidoc/core/abstract/grid_view.md
+++ b/uidoc/core/abstract/grid_view.md
@@ -37,14 +37,14 @@ BI.createWidget({
| items | 子组件数组 | array | — | [ ] |
| overflowX | 是否显示横向滚动条| boolean | true,false | true |
| overflowY | 是否显示纵向滚动条 | boolean | true,false | true |
-| overscanColumnCount| | number|— | 0 |
-| overscanRowCount| | number | — | 0 |
+| overscanColumnCount| 超出可视范围区域预加载多少列 | number|— | 0 |
+| overscanRowCount| 超出可视范围区域预加载多少行 | number | — | 0 |
| width | 行宽,必设 |number| — | — |
| height | 列宽,必设 | number | —| — |
| rowHeightGetter| 每格行宽 |number,function | —| function |
| columnWidthGetter| 每格列宽 | number,function |— | function |
-| estimatedColumnSize| 每格行宽,columnWidthGetter为function时必设 |number,function |— | function |
-| estimatedRowSize | 每格列宽,rowHeightGetter为function时必设 | number,function | —| function |
+| estimatedColumnSize| 预估行宽,columnWidthGetter为function时必设 |number,function |— | function |
+| estimatedRowSize | 预估列宽,rowHeightGetter为function时必设 | number,function | —| function |
| scrollLeft | 滚动条相对于左边的偏移 | number | — | 0 |
| scrollTop | 滚动条相对于顶部的偏移 | number | —|0 |
diff --git a/uidoc/core/abstract/virtual_list.md b/uidoc/core/abstract/virtual_list.md
index d69ad86ae..b462e46c4 100644
--- a/uidoc/core/abstract/virtual_list.md
+++ b/uidoc/core/abstract/virtual_list.md
@@ -31,8 +31,8 @@ BI.createWidget({
| 参数 | 说明 | 类型 | 可选值 | 默认值
| :------ |:------------- | :-----| :----|:----
| items | 子组件数组 | array | — | [ ] |
-| blockSize | | number | — | 10 |
-| overscanHeight | | number | — | 100 |
+| blockSize | 滚动加载的个数 | number | — | 10 |
+| overscanHeight | 超出可视范围区域的高度 | number | — | 100 |
| scrollTop | 滚动条相对于顶部的偏移 | number | — | 0 |
diff --git a/uidoc/core/combination/bi.combo.md b/uidoc/core/combination/bi.combo.md
index 250ee1352..94c8b7824 100644
--- a/uidoc/core/combination/bi.combo.md
+++ b/uidoc/core/combination/bi.combo.md
@@ -43,7 +43,7 @@ BI.createWidget({
| stopPropagation | 阻止事件冒泡 | boolean | true,false | false |
| adjustXOffset | 调整横向偏移 | number | — | 0 |
| adjustYOffset |调整纵向偏移 | number | — | 0 |
-| hideChecker | | function | — | —|
+| hideChecker | 是否隐藏弹出层检测 | function | — | —|
| offsetStyle | 弹出层显示位置 | string | left,right,center | "left,right,center"|
| popup | 弹出层 | object | — | { }|
| comboClass | combo类 | string | — | "bi-combo-popup" |
diff --git a/uidoc/core/combination/group_combo.md b/uidoc/core/combination/group_combo.md
index b0bb1d7bb..d9dc8ab73 100644
--- a/uidoc/core/combination/group_combo.md
+++ b/uidoc/core/combination/group_combo.md
@@ -1,6 +1,6 @@
# bi.combo_group
-## 有子级的combo 基类[BI.Widget](/core/widget.md)
+## 基类[BI.Widget](/core/widget.md)
{% method %}
[source](https://jsfiddle.net/fineui/x32ue8xv/)
@@ -23,26 +23,17 @@ BI.createWidget({
height: 25,
text: "一月",
value: 11
- }, {
- type: "bi.icon_text_icon_item",
- height: 25,
- text: "二月",
- value: 12,
- children: [{
- type: "bi.single_select_item",
- text: "一号",
- value: 101,
- height: 25
- }]
}]
});
+
```
{% endmethod %}
+
## API
##### 基础属性
| 参数 | 说明 | 类型 | 可选值 | 默认值
diff --git a/uidoc/core/combination/loader.md b/uidoc/core/combination/loader.md
index 87c250c32..47a406105 100644
--- a/uidoc/core/combination/loader.md
+++ b/uidoc/core/combination/loader.md
@@ -12,7 +12,17 @@ BI.createWidget({
element: "#wrapper",
type: "bi.loader",
itemsCreator: function(options, populate) {
- populate();
+ populate(BI.map(BI.map(BI.makeArray(3, null), function(idx, value){
+ return {
+ text: faker.name.findName(),
+ value: BI.UUID()
+ };
+ }), function(i, v) {
+ return BI.extend(v, {
+ type: "bi.single_select_item",
+ height: 25
+ })
+ }))
},
hasNext: function(option) {
return option.count < 10;
@@ -21,17 +31,19 @@ BI.createWidget({
+
```
{% endmethod %}
+
## API
##### 基础属性
| 参数 | 说明 | 类型 | 可选值 | 默认值
| :------ |:------------- | :-----| :----|:----
| direction | combo弹出层位置 | string | top,bottom,left,right,(top,left),(top,right),(bottom,left),(bottom,right) | "top"|
| isDefaultInit | 是否默认初始化子数据 |boolean | true,false | true |
-| logic | | object | —| {dynamic:true,scrolly:true} |
+| logic | 布局逻辑 | object | —| {dynamic:true,scrolly:true} |
| items| 子组件 | array | — | []|
| itemsCreator | 子组件构造器 | function | — | — |
| onLoaded | 加载中 | function | — | — |
diff --git a/uidoc/core/combination/navigation.md b/uidoc/core/combination/navigation.md
index 11a5a7813..ca3e11e2b 100644
--- a/uidoc/core/combination/navigation.md
+++ b/uidoc/core/combination/navigation.md
@@ -48,7 +48,7 @@ BI.createWidget({
| single | 是否为单页 | boolean | true,false | true |
| defaultShowIndex | 是否默认显示 |boolean | true,false | true |
| tab | tab页元素 | boolean | true,false | true |
-| logic | | object | | {dynamic:true} |
+| logic | 布局逻辑 | object | — | {dynamic:true} |
| cardCreator | 面板构造器 | function | — | v |
| afterCardCreated | 面板构造之后 | function | — | — |
| afterCardShow | 面板显示之后 | function | —| — |
diff --git a/uidoc/core/combination/tab.md b/uidoc/core/combination/tab.md
index ae3fad9e2..9023bbf44 100644
--- a/uidoc/core/combination/tab.md
+++ b/uidoc/core/combination/tab.md
@@ -57,7 +57,7 @@ BI.createWidget({
| single | 是否为单页 | boolean | true,false | false |
| defaultShowIndex | 是否默认显示tab页 | boolean | true,false | false |
| tab | tab标签页 | object | — | { } |
-| logic | | object | — | {dynamic:false} |
+| logic | 布局逻辑 | object | — | {dynamic:false} |
| cardCreator | 面板构造器| function | — | function (v) {return BI.createWidget();} |
## 对外方法
diff --git a/uidoc/core/layer/layer_popup.md b/uidoc/core/layer/layer_popup.md
index 70a43a7a1..365009083 100644
--- a/uidoc/core/layer/layer_popup.md
+++ b/uidoc/core/layer/layer_popup.md
@@ -46,11 +46,11 @@ BI.createWidget({
| rgap | 效果相当于容器right-padding值 | number | —| 0 |
| tgap | 效果相当于容器top-padding值 | number | —| 0 |
| bgap | 效果相当于容器bottom-padding值 | number | — | 0 |
-| direction| 工具栏的方向| const | | BI.Direction.Top |
+| direction| 工具栏的方向| const | 参考button_group | BI.Direction.Top |
| stopEvent | 是否停止mousedown、mouseup事件 | boolean | true,false | false |
| stopPropagation | 是否停止mousedown、mouseup向上冒泡 | boolean | true,false | false |
| tabs | 导航栏 | array | — | [] |
-| logic | | object | — | {dynamic:true} |
+| logic | 布局逻辑| object | — | {dynamic:true} |
| tools | 自定义工具栏 |boolean | true,false | false |
| buttons | toolbar栏 | array | — | [] |
| el | 子组件 | object | — |{ type: "bi.button_group",items: [], chooseType: 0,behaviors: {},layouts: [{type: "bi.vertical"}]} |
diff --git a/uidoc/core/layer/layer_searcher.md b/uidoc/core/layer/layer_searcher.md
index 4eb4c00d2..64c0898b2 100644
--- a/uidoc/core/layer/layer_searcher.md
+++ b/uidoc/core/layer/layer_searcher.md
@@ -34,9 +34,9 @@ searcher.populate([{
| 参数 | 说明 | 类型 | 可选值 | 默认值
| :------ |:------------- | :-----| :----|:----
| tipText | title文本 | string | — | BI.i18nText("BI-No_Select") |
-| chooseType | 选择类型 | const | | BI.Selection.Single |
+| chooseType | 选择类型 | const | 参考button_group | BI.Selection.Single |
| matcher | 完全匹配的构造器 | object | — | {type: "bi.button_group",behaviors: { redmark: function () { return true;} },items: [], layouts: [{ type: "bi.vertical"}]} |
-| searcher | | object| — | {type: "bi.button_group",behaviors: {redmark: function () {return true;}}, items: [], layouts: [{ type: "bi.vertical" }]}|
+| searcher | 搜索到的元素 | object| — | {type: "bi.button_group",behaviors: {redmark: function () {return true;}}, items: [], layouts: [{ type: "bi.vertical" }]}|
## 对外方法
| 名称 | 说明 | 回调参数
diff --git a/uidoc/core/pane.md b/uidoc/core/pane.md
index 6c87f8f16..93ea2f6e5 100644
--- a/uidoc/core/pane.md
+++ b/uidoc/core/pane.md
@@ -8,8 +8,8 @@
| 参数 | 说明 | 类型 | 可选值 | 默认值
| :------ |:------------- | :-----| :----|:----
| tipText | title文本 | string | — | BI.i18nText("BI-No_Selected_Item") |
-| overlap| | boolean | true,false | true |
-| onLoaded | | function | — | — |
+| overlap| 是否含有遮罩层 | boolean | true,false | true |
+| onLoaded | 已经加载 | function | — | — |
## 对外方法
diff --git a/uidoc/core/widget.md b/uidoc/core/widget.md
index b956f85c9..5cc99bcc7 100644
--- a/uidoc/core/widget.md
+++ b/uidoc/core/widget.md
@@ -50,7 +50,7 @@
| getWidgetByName | 根据组件名称获取组件| name |
| removeWidget | 移除组件 | nameOrWidget |
| hasWidget | 判断是否有该组件 | name |
-| getName | 获取组件名称 | |
+| getName | 获取组件名称 | —|
| setTag | 设置tag | tag |
| getTag | 获取tag | —|
| attr | 设置组件属性 | key,value |
@@ -66,7 +66,7 @@
|invalid | 设置组件无效 | —|
| invisible | 设置组件不可见 | —|
| visible | 设置组件可见 | —|
-| isolate | | —|
+| isolate | 组件不在页面展示,组件事件和内容都在 | —|
| empty | 清空组件 | —|
| destroy | 销毁组件| —|
diff --git a/uidoc/detailed/combo/single_tree_combo.md b/uidoc/detailed/combo/single_tree_combo.md
index 13b09ce39..e40484146 100644
--- a/uidoc/detailed/combo/single_tree_combo.md
+++ b/uidoc/detailed/combo/single_tree_combo.md
@@ -24,7 +24,7 @@ var tree = BI.createWidget({
| 参数 | 说明 | 类型 | 默认值 |
| ------- | ---- | ------ | ---- |
-| trigger | | object | {} |
+| trigger | 下拉列表的弹出方式 | object | {} |
| height | 高度 | number | 30 |
| text | 文本框值 | string | '' |
| items | 元素 | array | null |
@@ -46,5 +46,6 @@ var tree = BI.createWidget({
|BI.SingleTreeCombo.EVENT_BEFORE_POPUPVIEW| 下拉框弹出前触发 |
其他事件详见[Input](../../base/editor/editor.md)
+
---
diff --git a/uidoc/detailed/date/custom_date_time.md b/uidoc/detailed/date/custom_date_time.md
index 4e216cf32..cd2b1d456 100644
--- a/uidoc/detailed/date/custom_date_time.md
+++ b/uidoc/detailed/date/custom_date_time.md
@@ -18,8 +18,8 @@ BI.createWidget({
##参数
| 参数 | 说明 | 类型 | 可选值 | 默认值
-| :------ |:------------- | :-----| :----|:----|
---- ---
+| :------ |:------------- | :-----| :----|:----
+
##事件
| 事件 | 说明 |
diff --git a/uidoc/detailed/date/date_combo.md b/uidoc/detailed/date/date_combo.md
index 8ec2eef54..0db0306f3 100644
--- a/uidoc/detailed/date/date_combo.md
+++ b/uidoc/detailed/date/date_combo.md
@@ -19,5 +19,7 @@ BI.createWidget({
##参数
| 参数 | 说明 | 类型 | 可选值 | 默认值
-| :------ |:------------- | :-----| :----|:----|
---- ---
\ No newline at end of file
+| :------ |:------------- | :-----| :----|:----
+
+
+---
\ No newline at end of file
diff --git a/uidoc/detailed/date/date_pane_widget.md b/uidoc/detailed/date/date_pane_widget.md
index 6eab4836e..57a017220 100644
--- a/uidoc/detailed/date/date_pane_widget.md
+++ b/uidoc/detailed/date/date_pane_widget.md
@@ -22,5 +22,7 @@ BI.createWidget({
| :------ |:------------- | :-----| :----|:----|
| min | 限定可选日期的下限 | string | | '1900-01-01' |
| max | 限定可选日期的上限 | string | | '2099-12-31' |
-| selectedTime | 选中的初始年月 | obj({year: y, month: m}) | | |
---- ---
\ No newline at end of file
+| selectedTime | 选中的初始年月 | obj({year: y, month: m}) | — | — |
+
+
+---
\ No newline at end of file
diff --git a/uidoc/detailed/date/year_month_combo.md b/uidoc/detailed/date/year_month_combo.md
index db6e015c4..f22537f98 100644
--- a/uidoc/detailed/date/year_month_combo.md
+++ b/uidoc/detailed/date/year_month_combo.md
@@ -19,9 +19,9 @@ BI.createWidget({
| 参数 | 说明 | 类型 | 可选值 | 默认值
| :------ |:------------- | :-----| :----|:----|
-| yearBehaviors |自定义年份选择的行为(详见[button_group](../../core/abstract/button_group.md)) | object| | |
-| monthBehaviors |自定义年份选择的行为(详见[button_group](../../core/abstract/button_group.md)) | object| | |
---- ---
+| yearBehaviors |自定义年份选择的行为(详见[button_group](../../core/abstract/button_group.md)) | object| —| { } |
+| monthBehaviors |自定义年份选择的行为(详见[button_group](../../core/abstract/button_group.md)) | object|— | { }|
+
##事件
| 事件 | 说明 |
@@ -29,4 +29,5 @@ BI.createWidget({
| BI.YearMonthCombo.EVENT_BEFORE_POPUPVIEW | 弹出框弹出前触发 |
| BI.YearMonthCombo.EVENT_CONFIRM| 点击确认触发 |
+
---
\ No newline at end of file
diff --git a/uidoc/detailed/date/year_quarter_combo.md b/uidoc/detailed/date/year_quarter_combo.md
index 1f567ab3d..6389cf304 100644
--- a/uidoc/detailed/date/year_quarter_combo.md
+++ b/uidoc/detailed/date/year_quarter_combo.md
@@ -20,8 +20,8 @@ BI.createWidget({
| 参数 | 说明 | 类型 | 可选值 | 默认值
| :------ |:------------- | :-----| :----|:----|
| yearBehaviors |自定义年份选择的行为(详见[button_group](../../core/abstract/button_group.md)) | object| | |
-| monthBehaviors |自定义年份选择的行为(详见[button_group](../../core/abstract/button_group.md)) | object| | |
---- ---
+| monthBehaviors |自定义年份选择的行为(详见[button_group](../../core/abstract/button_group.md)) | object| —|{ } |
+
##事件
@@ -30,4 +30,5 @@ BI.createWidget({
| BI.YearQuarterCombo.EVENT_BEFORE_POPUPVIEW | 弹出框弹出前触发 |
| BI.YearQuarterCombo.EVENT_CONFIRM| 点击确认触发 |
+
---
\ No newline at end of file
diff --git a/uidoc/detailed/dialog.md b/uidoc/detailed/dialog.md
index a9da35a30..51e5b7776 100644
--- a/uidoc/detailed/dialog.md
+++ b/uidoc/detailed/dialog.md
@@ -16,7 +16,9 @@ BI.Msg.alert(title, content)
| 参数 | 说明 | 类型 | 可选值 | 默认值
| :------ |:------------- | :-----| :----|:----|
-| title | 对话框标题 | string | | |
-| content | 对话框内容 | string | | |
+| title | 对话框标题 | string | — | " " |
+| content | 对话框内容 | string | — | " " |
---- ---
\ No newline at end of file
+
+
+---
\ No newline at end of file
diff --git a/uidoc/detailed/down_list_combo.md b/uidoc/detailed/down_list_combo.md
index 3fecd531c..5766bd532 100644
--- a/uidoc/detailed/down_list_combo.md
+++ b/uidoc/detailed/down_list_combo.md
@@ -65,7 +65,6 @@ BI.createWidget({
| direction | 弹出列表和trigger的位置关系 | string | top | bottom | left | right | top,left | top,right | bottom,left | bottom,right | bottom |
| adjustLength | 弹出列表和trigger的距离 | number | | 0 |
---- ---
##事件
| 事件 | 说明 |
@@ -74,4 +73,8 @@ BI.createWidget({
|BI.DownListCombo.EVENT_SON_VALUE_CHANGE| 点击二级节点触发 |
|BI.DownListCombo.EVENT_BEFORE_POPUPVIEW| 下拉列表弹出前触发 |
-##具体配置方法见[Combo](../core/combination/bi.combo.md)
\ No newline at end of file
+##具体配置方法见[Combo](../core/combination/bi.combo.md)
+
+
+
+---
\ No newline at end of file
diff --git a/uidoc/detailed/file_manager.md b/uidoc/detailed/file_manager.md
index e00fdfc28..dbad35967 100644
--- a/uidoc/detailed/file_manager.md
+++ b/uidoc/detailed/file_manager.md
@@ -29,12 +29,7 @@ BI.createWidget({
{% endmethod %}
-##参数
-| 参数 | 说明 | 类型 | 可选值 | 默认值
-| :------ |:------------- | :-----| :----|:----|
-
---- ---
##方法
@@ -42,4 +37,6 @@ BI.createWidget({
| :------ |:------------- |
| getSelectedValue() | 获取当前选中项的value值 |
| getSelectedId | 获取当前选中项的id属性 |
---- ---
\ No newline at end of file
+
+
+---
\ No newline at end of file
diff --git a/uidoc/detailed/month_combo.md b/uidoc/detailed/month_combo.md
index 761c466d6..ea87ce4bc 100644
--- a/uidoc/detailed/month_combo.md
+++ b/uidoc/detailed/month_combo.md
@@ -22,7 +22,7 @@ BI.createWidget({
| :------ |:------------- | :-----| :----|:----|
| behaviors | 自定义下拉列表中item项的行为,如高亮,标红等(详见[button_group](../core/abstract/button_group.md)) | object | | {} |
---- ---
+
##事件
| 事件 | 说明 |
@@ -30,3 +30,5 @@ BI.createWidget({
|BI.MonthCombo.EVENT_CONFIRM| 选中日期或者退出编辑状态触发 |
|BI.MonthCombo.EVENT_BEFORE_POPUPVIEW| 选中日期或者退出编辑状态触发 |
+
+---
\ No newline at end of file
diff --git a/uidoc/detailed/multi_select_combo.md b/uidoc/detailed/multi_select_combo.md
index dd98755f4..f0b44627d 100644
--- a/uidoc/detailed/multi_select_combo.md
+++ b/uidoc/detailed/multi_select_combo.md
@@ -22,15 +22,10 @@ BI.createWidget({
{% endmethod %}
-##参数
-
-| 参数 | 说明 | 类型 | 可选值 | 默认值
-| :------ |:------------- | :-----| :----|:----|
-
-## 方法
-| 方法 | 说明 | 用法 |
-| ---------------------------- | ---------------- | ------------------------------------ | |
| 事件 | 说明 |
| :------ |:------------- |
-|BI.MultiSelectCombo.EVENT_CONFIRM| 点击确定触发 |
\ No newline at end of file
+|BI.MultiSelectCombo.EVENT_CONFIRM| 点击确定触发 |
+
+
+---
\ No newline at end of file
diff --git a/uidoc/detailed/numeric_interval.md b/uidoc/detailed/numeric_interval.md
index 5ef454eda..374a520d6 100644
--- a/uidoc/detailed/numeric_interval.md
+++ b/uidoc/detailed/numeric_interval.md
@@ -33,10 +33,13 @@ BI.createWidget({
| setCloseMinEnable(boolean) | 设置左区间开闭combo的disable状态 | |
| setMaxEnable(boolean) | 设置右区间输入框disable状态 | |
| setCloseMaxEnable(boolean) | 设置右区间开闭combo的disable状态 | |
-| setNumTip(string) | 设置数值区间的tip提示 | |
+| setNumTip(string) | 设置数值区间的tip提示 | — |
##事件
| 事件 | 说明 |
| :------ |:------------- |
|BI.NumericalInterval.EVENT_VALID| 区间合法的状态事件 |
-|BI.NumericalInterval.EVENT_ERROR| 区间不合法的状态事件 |
\ No newline at end of file
+|BI.NumericalInterval.EVENT_ERROR| 区间不合法的状态事件 |
+
+
+---
\ No newline at end of file
diff --git a/uidoc/detailed/path/direction_path_chooser.md b/uidoc/detailed/path/direction_path_chooser.md
index f1336587e..e22203d23 100644
--- a/uidoc/detailed/path/direction_path_chooser.md
+++ b/uidoc/detailed/path/direction_path_chooser.md
@@ -34,5 +34,7 @@ BI.createWidget({
| 参数 | 说明 | 类型 | 可选值 | 默认值
| :------ |:------------- | :-----| :----|:----|
-| items |二维数组,每个元素代表一条路径,相较于[path_chooser](path_chooser.md)多一个属性direction来指定方向 | array| | |
---- ---
\ No newline at end of file
+| items |二维数组,每个元素代表一条路径,相较于[path_chooser](path_chooser.md)多一个属性direction来指定方向 | array| — | [ ]|
+
+
+---
\ No newline at end of file
diff --git a/uidoc/detailed/path/path_chooser.md b/uidoc/detailed/path/path_chooser.md
index 21977202c..097ecb060 100644
--- a/uidoc/detailed/path/path_chooser.md
+++ b/uidoc/detailed/path/path_chooser.md
@@ -35,5 +35,8 @@ BI.createWidget({
| 参数 | 说明 | 类型 | 可选值 | 默认值
| :------ |:------------- | :-----| :----|:----|
-| items |二维数组,每个元素代表一条路径 | array| | |
---- ---
\ No newline at end of file
+| items |二维数组,每个元素代表一条路径 | array| — | [ ] |
+
+
+
+---
\ No newline at end of file
diff --git a/uidoc/detailed/quarter_combo.md b/uidoc/detailed/quarter_combo.md
index 6ebae4aa1..e15d26d54 100644
--- a/uidoc/detailed/quarter_combo.md
+++ b/uidoc/detailed/quarter_combo.md
@@ -22,10 +22,13 @@ BI.createWidget({
| :------ |:------------- | :-----| :----|:----|
| behaviors | 自定义下拉列表中item项的行为,如高亮,标红等(详见[button_group](../core/abstract/button_group.md)) | object | | {} |
---- ---
+
##事件
| 事件 | 说明 |
| :------ |:------------- |
|BI.QuarterCombo.EVENT_CONFIRM| 选中日期或者退出编辑状态触发 |
-|BI.QuarterCombo.EVENT_BEFORE_POPUPVIEW| 选中日期或者退出编辑状态触发 |
\ No newline at end of file
+|BI.QuarterCombo.EVENT_BEFORE_POPUPVIEW| 选中日期或者退出编辑状态触发 |
+
+
+---
\ No newline at end of file
diff --git a/uidoc/detailed/relation_view.md b/uidoc/detailed/relation_view.md
index e6073f9f0..d2997620d 100644
--- a/uidoc/detailed/relation_view.md
+++ b/uidoc/detailed/relation_view.md
@@ -30,4 +30,6 @@ BI.createWidget({
| 参数 | 说明 | 类型 | 可选值 | 默认值
| :------ |:------------- | :-----| :----|:----|
---- ---
\ No newline at end of file
+
+
+---
\ No newline at end of file
diff --git a/uidoc/detailed/table/bi.excel_table.md b/uidoc/detailed/table/bi.excel_table.md
index 92fcb2099..4ab567cc9 100644
--- a/uidoc/detailed/table/bi.excel_table.md
+++ b/uidoc/detailed/table/bi.excel_table.md
@@ -79,6 +79,6 @@ BI.createWidget({
| populate | 增加行 | rows |
| destroy | 摧毁表 | — |
-------
+---
diff --git a/uidoc/detailed/table/bi.preview_table.md b/uidoc/detailed/table/bi.preview_table.md
index 413a0da99..e8d99a07b 100644
--- a/uidoc/detailed/table/bi.preview_table.md
+++ b/uidoc/detailed/table/bi.preview_table.md
@@ -71,5 +71,5 @@ BI.createWidget({
| populate | 替换为新的内容 | rows |
| destroy | 摧毁表 | — |
-------
+---
diff --git a/uidoc/detailed/text_input/bi.clear_editor.md b/uidoc/detailed/text_input/bi.clear_editor.md
index 68aa3c1f7..925055297 100644
--- a/uidoc/detailed/text_input/bi.clear_editor.md
+++ b/uidoc/detailed/text_input/bi.clear_editor.md
@@ -30,7 +30,6 @@ BI.createWidget({
| bgap | 效果相当于文本框bottom-padding值 | number | — | 0 |
| validationChecker | 输入较验函数 | function | — | — |
| quitChecker | 是否允许退出编辑函数 | function | — | — |
-| mouseOut | | boolean | true,false | false |
| allowBlank | 是否允许空值 | boolean | true,false | false |
| watermark | 文本框placeholder | string | — | null |
| value | 文本框默认值 | string | — | " " |
diff --git a/uidoc/detailed/text_input/bi.search_editor.md b/uidoc/detailed/text_input/bi.search_editor.md
index 6d9ec5492..d42283a0d 100644
--- a/uidoc/detailed/text_input/bi.search_editor.md
+++ b/uidoc/detailed/text_input/bi.search_editor.md
@@ -29,7 +29,6 @@ BI.createWidget({
| bgap | 效果相当于文本框bottom-padding值 | number | — | 0 |
| validationChecker | 输入较验函数 |function| — | — |
| quitChecker | 是否允许退出编辑函数 | function | — | — |
-| mouseOut | | boolean | true,false | false |
| allowBlank | 是否允许空值 | boolean | true,false | false |
| watermark | 文本框placeholder | string | — | null |
| value | 文本框默认值 | string | — | " " |
diff --git a/uidoc/detailed/text_input/bi.text_editor.md b/uidoc/detailed/text_input/bi.text_editor.md
index b7e02ec3a..32e27748e 100644
--- a/uidoc/detailed/text_input/bi.text_editor.md
+++ b/uidoc/detailed/text_input/bi.text_editor.md
@@ -31,7 +31,6 @@ BI.createWidget({
| bgap | 效果相当于文本框bottom-padding值 | number | — | 0 |
| validationChecker | 输入较验函数 |function| — | — |
| quitChecker | 是否允许退出编辑函数 | function | — | — |
-| mouseOut | | boolean | true,false | false |
| allowBlank | 是否允许空值 | boolean | true,false | false |
| watermark | 文本框placeholder | string | — | null |
| value | 文本框默认值 | string | — | " " |
diff --git a/uidoc/detailed/year_combo.md b/uidoc/detailed/year_combo.md
index bfb22129a..7cd74f0bc 100644
--- a/uidoc/detailed/year_combo.md
+++ b/uidoc/detailed/year_combo.md
@@ -24,7 +24,7 @@ BI.createWidget({
| min | 限定可选日期的下限 | string | | '1900-01-01' |
| max | 限定可选日期的上限 | string | | '2099-12-31' |
---- ---
+
##事件
| 事件 | 说明 |
@@ -32,3 +32,6 @@ BI.createWidget({
|BI.YearCombo.EVENT_CONFIRM| 选中日期或者退出编辑状态触发 |
|BI.YearCombo.EVENT_BEFORE_POPUPVIEW| 选中日期或者退出编辑状态触发 |
+
+
+---
\ No newline at end of file
diff --git a/uidoc/package-lock.json b/uidoc/package-lock.json
new file mode 100644
index 000000000..c091091a7
--- /dev/null
+++ b/uidoc/package-lock.json
@@ -0,0 +1,5851 @@
+{
+ "name": "fineuidocs",
+ "version": "1.0.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "abab": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/abab/-/abab-1.0.3.tgz",
+ "integrity": "sha1-uB3l9ydOxOdW15fNg08wNkJyTl0=",
+ "dev": true,
+ "optional": true
+ },
+ "acorn": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-2.7.0.tgz",
+ "integrity": "sha1-q259nYhqrKiwhbwzEreaGYQz8Oc=",
+ "dev": true
+ },
+ "acorn-globals": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-1.0.9.tgz",
+ "integrity": "sha1-VbtemGkVB7dFedBRNBMhfDgMVM8=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "acorn": "2.7.0"
+ }
+ },
+ "ajv": {
+ "version": "4.11.8",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz",
+ "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "co": "4.6.0",
+ "json-stable-stringify": "1.0.1"
+ }
+ },
+ "amdefine": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
+ "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=",
+ "dev": true,
+ "optional": true
+ },
+ "array-union": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
+ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
+ "dev": true,
+ "requires": {
+ "array-uniq": "1.0.3"
+ }
+ },
+ "array-uniq": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
+ "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
+ "dev": true
+ },
+ "asn1": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz",
+ "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=",
+ "dev": true,
+ "optional": true
+ },
+ "assert-plus": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz",
+ "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=",
+ "dev": true,
+ "optional": true
+ },
+ "async": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.1.4.tgz",
+ "integrity": "sha1-LSFgx3iAMuTdbL4lAvH5osj2zeQ=",
+ "dev": true,
+ "requires": {
+ "lodash": "4.17.4"
+ }
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
+ "dev": true,
+ "optional": true
+ },
+ "aws-sign2": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz",
+ "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=",
+ "dev": true,
+ "optional": true
+ },
+ "aws4": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz",
+ "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=",
+ "dev": true,
+ "optional": true
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "base64url": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/base64url/-/base64url-2.0.0.tgz",
+ "integrity": "sha1-6sFuA+oUOO/5Qj1puqNiYu0fcLs=",
+ "dev": true
+ },
+ "bash-color": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/bash-color/-/bash-color-0.0.4.tgz",
+ "integrity": "sha1-6b6M4zVAytpIgXaMWb1jhlc26RM=",
+ "dev": true
+ },
+ "bcrypt-pbkdf": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz",
+ "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "tweetnacl": "0.14.5"
+ }
+ },
+ "boolbase": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
+ "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=",
+ "dev": true
+ },
+ "boom": {
+ "version": "2.10.1",
+ "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz",
+ "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=",
+ "dev": true,
+ "requires": {
+ "hoek": "2.16.3"
+ }
+ },
+ "brace-expansion": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz",
+ "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=",
+ "dev": true,
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
+ "dev": true,
+ "optional": true
+ },
+ "cheerio": {
+ "version": "0.20.0",
+ "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.20.0.tgz",
+ "integrity": "sha1-XHEPK6uVZTJyhCugHG6mGzVF7DU=",
+ "dev": true,
+ "requires": {
+ "css-select": "1.2.0",
+ "dom-serializer": "0.1.0",
+ "entities": "1.1.1",
+ "htmlparser2": "3.8.3",
+ "jsdom": "7.2.2",
+ "lodash": "4.17.4"
+ }
+ },
+ "co": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
+ "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
+ "dev": true,
+ "optional": true
+ },
+ "combined-stream": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz",
+ "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=",
+ "dev": true,
+ "requires": {
+ "delayed-stream": "1.0.0"
+ }
+ },
+ "commander": {
+ "version": "2.9.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz",
+ "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=",
+ "dev": true,
+ "requires": {
+ "graceful-readlink": "1.0.1"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+ "dev": true
+ },
+ "cryptiles": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz",
+ "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "boom": "2.10.1"
+ }
+ },
+ "css-select": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz",
+ "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=",
+ "dev": true,
+ "requires": {
+ "boolbase": "1.0.0",
+ "css-what": "2.1.0",
+ "domutils": "1.5.1",
+ "nth-check": "1.0.1"
+ }
+ },
+ "css-what": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz",
+ "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0=",
+ "dev": true
+ },
+ "cssom": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.2.tgz",
+ "integrity": "sha1-uANhcMefB6kP8vFuIihAJ6JDhIs=",
+ "dev": true
+ },
+ "cssstyle": {
+ "version": "0.2.37",
+ "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-0.2.37.tgz",
+ "integrity": "sha1-VBCXI0yyUTyDzu06zdwn/yeYfVQ=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "cssom": "0.3.2"
+ }
+ },
+ "dashdash": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "assert-plus": "1.0.0"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "dev": true,
+ "optional": true
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
+ "dev": true
+ },
+ "dom-serializer": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz",
+ "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=",
+ "dev": true,
+ "requires": {
+ "domelementtype": "1.1.3",
+ "entities": "1.1.1"
+ },
+ "dependencies": {
+ "domelementtype": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz",
+ "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=",
+ "dev": true
+ }
+ }
+ },
+ "domelementtype": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz",
+ "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=",
+ "dev": true
+ },
+ "domhandler": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz",
+ "integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=",
+ "dev": true,
+ "requires": {
+ "domelementtype": "1.3.0"
+ }
+ },
+ "domutils": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz",
+ "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=",
+ "dev": true,
+ "requires": {
+ "dom-serializer": "0.1.0",
+ "domelementtype": "1.3.0"
+ }
+ },
+ "ecc-jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz",
+ "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "jsbn": "0.1.1"
+ }
+ },
+ "entities": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz",
+ "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=",
+ "dev": true
+ },
+ "escodegen": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz",
+ "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "esprima": "2.7.3",
+ "estraverse": "1.9.3",
+ "esutils": "2.0.2",
+ "optionator": "0.8.2",
+ "source-map": "0.2.0"
+ }
+ },
+ "esprima": {
+ "version": "2.7.3",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz",
+ "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=",
+ "dev": true,
+ "optional": true
+ },
+ "estraverse": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz",
+ "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=",
+ "dev": true,
+ "optional": true
+ },
+ "esutils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true,
+ "optional": true
+ },
+ "extend": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz",
+ "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=",
+ "dev": true,
+ "optional": true
+ },
+ "extsprintf": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
+ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
+ "dev": true
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true,
+ "optional": true
+ },
+ "forever-agent": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
+ "dev": true,
+ "optional": true
+ },
+ "form-data": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz",
+ "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "asynckit": "0.4.0",
+ "combined-stream": "1.0.5",
+ "mime-types": "2.1.17"
+ }
+ },
+ "fs-extra": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz",
+ "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "jsonfile": "3.0.1",
+ "universalify": "0.1.1"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "getpass": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+ "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "assert-plus": "1.0.0"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "gh-pages": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/gh-pages/-/gh-pages-1.0.0.tgz",
+ "integrity": "sha1-Skb0wlQ596K35oNVBNSknpSfBMo=",
+ "dev": true,
+ "requires": {
+ "async": "2.1.4",
+ "base64url": "2.0.0",
+ "commander": "2.9.0",
+ "fs-extra": "3.0.1",
+ "globby": "6.1.0",
+ "graceful-fs": "4.1.11",
+ "rimraf": "2.6.1"
+ }
+ },
+ "gitbook-cli": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/gitbook-cli/-/gitbook-cli-2.3.2.tgz",
+ "integrity": "sha512-eyGtkY7jKHhmgpfuvgAP5fZcUob/FBz4Ld0aLRdEmiTrS1RklimN9epzPp75dd4MWpGhYvSbiwxnpyLiv1wh6A==",
+ "dev": true,
+ "requires": {
+ "bash-color": "0.0.4",
+ "commander": "2.11.0",
+ "fs-extra": "3.0.1",
+ "lodash": "4.17.4",
+ "npm": "5.1.0",
+ "npmi": "1.0.1",
+ "optimist": "0.6.1",
+ "q": "1.5.0",
+ "semver": "5.3.0",
+ "tmp": "0.0.31",
+ "user-home": "2.0.0"
+ },
+ "dependencies": {
+ "commander": {
+ "version": "2.11.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz",
+ "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==",
+ "dev": true
+ }
+ }
+ },
+ "gitbook-plugin-expandable-chapters": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/gitbook-plugin-expandable-chapters/-/gitbook-plugin-expandable-chapters-0.2.0.tgz",
+ "integrity": "sha1-RdcIeuaQekH0gSjFT+ViJKnBraI=",
+ "dev": true
+ },
+ "gitbook-plugin-jsfiddle": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/gitbook-plugin-jsfiddle/-/gitbook-plugin-jsfiddle-1.0.0.tgz",
+ "integrity": "sha1-deNd6EbvYrvS0Gb7YSzJniUgoq4=",
+ "dev": true
+ },
+ "gitbook-plugin-search": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/gitbook-plugin-search/-/gitbook-plugin-search-2.2.1.tgz",
+ "integrity": "sha1-bSW1p3aZD6mP39+jfeMx944PaxM=",
+ "dev": true
+ },
+ "gitbook-plugin-splitter": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/gitbook-plugin-splitter/-/gitbook-plugin-splitter-0.0.8.tgz",
+ "integrity": "sha1-8rBRMGD8kma0awQYLk7KHUtx+vw=",
+ "dev": true
+ },
+ "gitbook-plugin-theme-api": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/gitbook-plugin-theme-api/-/gitbook-plugin-theme-api-1.1.2.tgz",
+ "integrity": "sha1-jBRaS61JoSE8AlApC5vZtyrqiPw=",
+ "dev": true,
+ "requires": {
+ "cheerio": "0.20.0",
+ "gitbook-plugin-search": "2.2.1",
+ "lodash": "4.12.0",
+ "q": "1.4.1",
+ "q-plus": "0.0.8"
+ },
+ "dependencies": {
+ "lodash": {
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.12.0.tgz",
+ "integrity": "sha1-K9bcRqBA9Z5obJcu0h2T3FkFMlg=",
+ "dev": true
+ },
+ "q": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz",
+ "integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4=",
+ "dev": true
+ }
+ }
+ },
+ "gitbook-plugin-toggle-chapters": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/gitbook-plugin-toggle-chapters/-/gitbook-plugin-toggle-chapters-0.0.3.tgz",
+ "integrity": "sha1-bl9aphubLiIcOAzfbpKDIAFez7k=",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "globby": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz",
+ "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=",
+ "dev": true,
+ "requires": {
+ "array-union": "1.0.2",
+ "glob": "7.1.2",
+ "object-assign": "4.1.1",
+ "pify": "2.3.0",
+ "pinkie-promise": "2.0.1"
+ }
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+ "dev": true
+ },
+ "graceful-readlink": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz",
+ "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=",
+ "dev": true
+ },
+ "har-schema": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz",
+ "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=",
+ "dev": true,
+ "optional": true
+ },
+ "har-validator": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz",
+ "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "ajv": "4.11.8",
+ "har-schema": "1.0.5"
+ }
+ },
+ "hawk": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz",
+ "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "boom": "2.10.1",
+ "cryptiles": "2.0.5",
+ "hoek": "2.16.3",
+ "sntp": "1.0.9"
+ }
+ },
+ "hoek": {
+ "version": "2.16.3",
+ "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz",
+ "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=",
+ "dev": true
+ },
+ "htmlparser2": {
+ "version": "3.8.3",
+ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz",
+ "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=",
+ "dev": true,
+ "requires": {
+ "domelementtype": "1.3.0",
+ "domhandler": "2.3.0",
+ "domutils": "1.5.1",
+ "entities": "1.0.0",
+ "readable-stream": "1.1.14"
+ },
+ "dependencies": {
+ "entities": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz",
+ "integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY=",
+ "dev": true
+ }
+ }
+ },
+ "http-signature": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz",
+ "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "assert-plus": "0.2.0",
+ "jsprim": "1.4.1",
+ "sshpk": "1.13.1"
+ }
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "dev": true,
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "is-typedarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
+ "dev": true,
+ "optional": true
+ },
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "dev": true,
+ "optional": true
+ },
+ "jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
+ "dev": true,
+ "optional": true
+ },
+ "jsdom": {
+ "version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-7.2.2.tgz",
+ "integrity": "sha1-QLQCdwwr2iNGkJa+6Rq2deOx/G4=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "abab": "1.0.3",
+ "acorn": "2.7.0",
+ "acorn-globals": "1.0.9",
+ "cssom": "0.3.2",
+ "cssstyle": "0.2.37",
+ "escodegen": "1.8.1",
+ "nwmatcher": "1.4.1",
+ "parse5": "1.5.1",
+ "request": "2.81.0",
+ "sax": "1.2.4",
+ "symbol-tree": "3.2.2",
+ "tough-cookie": "2.3.2",
+ "webidl-conversions": "2.0.1",
+ "whatwg-url-compat": "0.6.5",
+ "xml-name-validator": "2.0.1"
+ }
+ },
+ "json-schema": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
+ "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
+ "dev": true,
+ "optional": true
+ },
+ "json-stable-stringify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz",
+ "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "jsonify": "0.0.0"
+ }
+ },
+ "json-stringify-safe": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
+ "dev": true,
+ "optional": true
+ },
+ "jsonfile": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz",
+ "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11"
+ }
+ },
+ "jsonify": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz",
+ "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=",
+ "dev": true,
+ "optional": true
+ },
+ "jsprim": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
+ "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "assert-plus": "1.0.0",
+ "extsprintf": "1.3.0",
+ "json-schema": "0.2.3",
+ "verror": "1.10.0"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2"
+ }
+ },
+ "lodash": {
+ "version": "4.17.4",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz",
+ "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=",
+ "dev": true
+ },
+ "mime-db": {
+ "version": "1.30.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz",
+ "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=",
+ "dev": true
+ },
+ "mime-types": {
+ "version": "2.1.17",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz",
+ "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=",
+ "dev": true,
+ "requires": {
+ "mime-db": "1.30.0"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.8"
+ }
+ },
+ "minimist": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz",
+ "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=",
+ "dev": true
+ },
+ "npm": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/npm/-/npm-5.1.0.tgz",
+ "integrity": "sha512-pt5ClxEmY/dLpb60SmGQQBKi3nB6Ljx1FXmpoCUdAULlGqGVn2uCyXxPCWFbcuHGthT7qGiaGa1wOfs/UjGYMw==",
+ "dev": true,
+ "requires": {
+ "abbrev": "1.1.0",
+ "ansi-regex": "3.0.0",
+ "ansicolors": "0.3.2",
+ "ansistyles": "0.1.3",
+ "aproba": "1.1.2",
+ "archy": "1.0.0",
+ "bluebird": "3.5.0",
+ "cacache": "9.2.9",
+ "call-limit": "1.1.0",
+ "chownr": "1.0.1",
+ "cmd-shim": "2.0.2",
+ "columnify": "1.5.4",
+ "config-chain": "1.1.11",
+ "debuglog": "1.0.1",
+ "detect-indent": "5.0.0",
+ "dezalgo": "1.0.3",
+ "editor": "1.0.0",
+ "fs-vacuum": "1.2.10",
+ "fs-write-stream-atomic": "1.0.10",
+ "fstream": "1.0.11",
+ "fstream-npm": "1.2.1",
+ "glob": "7.1.2",
+ "graceful-fs": "4.1.11",
+ "has-unicode": "2.0.1",
+ "hosted-git-info": "2.5.0",
+ "iferr": "0.1.5",
+ "imurmurhash": "0.1.4",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "ini": "1.3.4",
+ "init-package-json": "1.10.1",
+ "JSONStream": "1.3.1",
+ "lazy-property": "1.0.0",
+ "lockfile": "1.0.3",
+ "lodash._baseindexof": "3.1.0",
+ "lodash._baseuniq": "4.6.0",
+ "lodash._bindcallback": "3.0.1",
+ "lodash._cacheindexof": "3.0.2",
+ "lodash._createcache": "3.1.2",
+ "lodash._getnative": "3.9.1",
+ "lodash.clonedeep": "4.5.0",
+ "lodash.restparam": "3.6.1",
+ "lodash.union": "4.6.0",
+ "lodash.uniq": "4.5.0",
+ "lodash.without": "4.4.0",
+ "lru-cache": "4.1.1",
+ "mississippi": "1.3.0",
+ "mkdirp": "0.5.1",
+ "move-concurrently": "1.0.1",
+ "node-gyp": "3.6.2",
+ "nopt": "4.0.1",
+ "normalize-package-data": "2.4.0",
+ "npm-cache-filename": "1.0.2",
+ "npm-install-checks": "3.0.0",
+ "npm-package-arg": "5.1.2",
+ "npm-registry-client": "8.4.0",
+ "npm-user-validate": "1.0.0",
+ "npmlog": "4.1.2",
+ "once": "1.4.0",
+ "opener": "1.4.3",
+ "osenv": "0.1.4",
+ "pacote": "2.7.38",
+ "path-is-inside": "1.0.2",
+ "promise-inflight": "1.0.1",
+ "read": "1.0.7",
+ "read-cmd-shim": "1.0.1",
+ "read-installed": "4.0.3",
+ "read-package-json": "2.0.9",
+ "read-package-tree": "5.1.6",
+ "readable-stream": "2.3.2",
+ "readdir-scoped-modules": "1.0.2",
+ "request": "2.81.0",
+ "retry": "0.10.1",
+ "rimraf": "2.6.1",
+ "safe-buffer": "5.1.1",
+ "semver": "5.3.0",
+ "sha": "2.0.1",
+ "slide": "1.1.6",
+ "sorted-object": "2.0.1",
+ "sorted-union-stream": "2.1.3",
+ "ssri": "4.1.6",
+ "strip-ansi": "4.0.0",
+ "tar": "2.2.1",
+ "text-table": "0.2.0",
+ "uid-number": "0.0.6",
+ "umask": "1.1.0",
+ "unique-filename": "1.1.0",
+ "unpipe": "1.0.0",
+ "update-notifier": "2.2.0",
+ "uuid": "3.1.0",
+ "validate-npm-package-license": "3.0.1",
+ "validate-npm-package-name": "3.0.0",
+ "which": "1.2.14",
+ "worker-farm": "1.3.1",
+ "wrappy": "1.0.2",
+ "write-file-atomic": "2.1.0"
+ },
+ "dependencies": {
+ "abbrev": {
+ "version": "1.1.0",
+ "bundled": true,
+ "dev": true
+ },
+ "ansi-regex": {
+ "version": "3.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "ansicolors": {
+ "version": "0.3.2",
+ "bundled": true,
+ "dev": true
+ },
+ "ansistyles": {
+ "version": "0.1.3",
+ "bundled": true,
+ "dev": true
+ },
+ "aproba": {
+ "version": "1.1.2",
+ "bundled": true,
+ "dev": true
+ },
+ "archy": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "bluebird": {
+ "version": "3.5.0",
+ "bundled": true,
+ "dev": true
+ },
+ "cacache": {
+ "version": "9.2.9",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "bluebird": "3.5.0",
+ "chownr": "1.0.1",
+ "glob": "7.1.2",
+ "graceful-fs": "4.1.11",
+ "lru-cache": "4.1.1",
+ "mississippi": "1.3.0",
+ "mkdirp": "0.5.1",
+ "move-concurrently": "1.0.1",
+ "promise-inflight": "1.0.1",
+ "rimraf": "2.6.1",
+ "ssri": "4.1.6",
+ "unique-filename": "1.1.0",
+ "y18n": "3.2.1"
+ },
+ "dependencies": {
+ "lru-cache": {
+ "version": "4.1.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "pseudomap": "1.0.2",
+ "yallist": "2.1.2"
+ },
+ "dependencies": {
+ "pseudomap": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true
+ },
+ "yallist": {
+ "version": "2.1.2",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "y18n": {
+ "version": "3.2.1",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "call-limit": {
+ "version": "1.1.0",
+ "bundled": true,
+ "dev": true
+ },
+ "chownr": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true
+ },
+ "cmd-shim": {
+ "version": "2.0.2",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "mkdirp": "0.5.1"
+ }
+ },
+ "columnify": {
+ "version": "1.5.4",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "strip-ansi": "3.0.1",
+ "wcwidth": "1.0.1"
+ },
+ "dependencies": {
+ "strip-ansi": {
+ "version": "3.0.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "wcwidth": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "defaults": "1.0.3"
+ },
+ "dependencies": {
+ "defaults": {
+ "version": "1.0.3",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "clone": "1.0.2"
+ },
+ "dependencies": {
+ "clone": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "config-chain": {
+ "version": "1.1.11",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "ini": "1.3.4",
+ "proto-list": "1.2.4"
+ },
+ "dependencies": {
+ "proto-list": {
+ "version": "1.2.4",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "debuglog": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true
+ },
+ "detect-indent": {
+ "version": "5.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "dezalgo": {
+ "version": "1.0.3",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "asap": "2.0.5",
+ "wrappy": "1.0.2"
+ },
+ "dependencies": {
+ "asap": {
+ "version": "2.0.5",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "editor": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "fs-vacuum": {
+ "version": "1.2.10",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "path-is-inside": "1.0.2",
+ "rimraf": "2.6.1"
+ }
+ },
+ "fs-write-stream-atomic": {
+ "version": "1.0.10",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "iferr": "0.1.5",
+ "imurmurhash": "0.1.4",
+ "readable-stream": "2.3.2"
+ }
+ },
+ "fstream": {
+ "version": "1.0.11",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "inherits": "2.0.3",
+ "mkdirp": "0.5.1",
+ "rimraf": "2.6.1"
+ }
+ },
+ "fstream-npm": {
+ "version": "1.2.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "fstream-ignore": "1.0.5",
+ "inherits": "2.0.3"
+ },
+ "dependencies": {
+ "fstream-ignore": {
+ "version": "1.0.5",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "fstream": "1.0.11",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4"
+ },
+ "dependencies": {
+ "minimatch": {
+ "version": "3.0.4",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.8"
+ },
+ "dependencies": {
+ "brace-expansion": {
+ "version": "1.1.8",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "0.0.1"
+ },
+ "dependencies": {
+ "balanced-match": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "glob": {
+ "version": "7.1.2",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ },
+ "dependencies": {
+ "fs.realpath": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.8"
+ },
+ "dependencies": {
+ "brace-expansion": {
+ "version": "1.1.8",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "0.0.1"
+ },
+ "dependencies": {
+ "balanced-match": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "bundled": true,
+ "dev": true
+ },
+ "has-unicode": {
+ "version": "2.0.1",
+ "bundled": true,
+ "dev": true
+ },
+ "hosted-git-info": {
+ "version": "2.5.0",
+ "bundled": true,
+ "dev": true
+ },
+ "iferr": {
+ "version": "0.1.5",
+ "bundled": true,
+ "dev": true
+ },
+ "imurmurhash": {
+ "version": "0.1.4",
+ "bundled": true,
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "bundled": true,
+ "dev": true
+ },
+ "ini": {
+ "version": "1.3.4",
+ "bundled": true,
+ "dev": true
+ },
+ "init-package-json": {
+ "version": "1.10.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "glob": "7.1.2",
+ "npm-package-arg": "5.1.2",
+ "promzard": "0.3.0",
+ "read": "1.0.7",
+ "read-package-json": "2.0.9",
+ "semver": "5.3.0",
+ "validate-npm-package-license": "3.0.1",
+ "validate-npm-package-name": "3.0.0"
+ },
+ "dependencies": {
+ "promzard": {
+ "version": "0.3.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "read": "1.0.7"
+ }
+ }
+ }
+ },
+ "JSONStream": {
+ "version": "1.3.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "jsonparse": "1.3.1",
+ "through": "2.3.8"
+ },
+ "dependencies": {
+ "jsonparse": {
+ "version": "1.3.1",
+ "bundled": true,
+ "dev": true
+ },
+ "through": {
+ "version": "2.3.8",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "lazy-property": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "lockfile": {
+ "version": "1.0.3",
+ "bundled": true,
+ "dev": true
+ },
+ "lodash._baseindexof": {
+ "version": "3.1.0",
+ "bundled": true,
+ "dev": true
+ },
+ "lodash._baseuniq": {
+ "version": "4.6.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "lodash._createset": "4.0.3",
+ "lodash._root": "3.0.1"
+ },
+ "dependencies": {
+ "lodash._createset": {
+ "version": "4.0.3",
+ "bundled": true,
+ "dev": true
+ },
+ "lodash._root": {
+ "version": "3.0.1",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "lodash._bindcallback": {
+ "version": "3.0.1",
+ "bundled": true,
+ "dev": true
+ },
+ "lodash._cacheindexof": {
+ "version": "3.0.2",
+ "bundled": true,
+ "dev": true
+ },
+ "lodash._createcache": {
+ "version": "3.1.2",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "lodash._getnative": "3.9.1"
+ }
+ },
+ "lodash._getnative": {
+ "version": "3.9.1",
+ "bundled": true,
+ "dev": true
+ },
+ "lodash.clonedeep": {
+ "version": "4.5.0",
+ "bundled": true,
+ "dev": true
+ },
+ "lodash.restparam": {
+ "version": "3.6.1",
+ "bundled": true,
+ "dev": true
+ },
+ "lodash.union": {
+ "version": "4.6.0",
+ "bundled": true,
+ "dev": true
+ },
+ "lodash.uniq": {
+ "version": "4.5.0",
+ "bundled": true,
+ "dev": true
+ },
+ "lodash.without": {
+ "version": "4.4.0",
+ "bundled": true,
+ "dev": true
+ },
+ "lru-cache": {
+ "version": "4.1.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "pseudomap": "1.0.2",
+ "yallist": "2.1.2"
+ },
+ "dependencies": {
+ "pseudomap": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true
+ },
+ "yallist": {
+ "version": "2.1.2",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "mississippi": {
+ "version": "1.3.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "concat-stream": "1.6.0",
+ "duplexify": "3.5.0",
+ "end-of-stream": "1.4.0",
+ "flush-write-stream": "1.0.2",
+ "from2": "2.3.0",
+ "parallel-transform": "1.1.0",
+ "pump": "1.0.2",
+ "pumpify": "1.3.5",
+ "stream-each": "1.2.0",
+ "through2": "2.0.3"
+ },
+ "dependencies": {
+ "concat-stream": {
+ "version": "1.6.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.2",
+ "typedarray": "0.0.6"
+ },
+ "dependencies": {
+ "typedarray": {
+ "version": "0.0.6",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "duplexify": {
+ "version": "3.5.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "end-of-stream": "1.0.0",
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.2",
+ "stream-shift": "1.0.0"
+ },
+ "dependencies": {
+ "end-of-stream": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "once": "1.3.3"
+ },
+ "dependencies": {
+ "once": {
+ "version": "1.3.3",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ }
+ }
+ },
+ "stream-shift": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "end-of-stream": {
+ "version": "1.4.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "once": "1.4.0"
+ }
+ },
+ "flush-write-stream": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.2"
+ }
+ },
+ "from2": {
+ "version": "2.3.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.2"
+ }
+ },
+ "parallel-transform": {
+ "version": "1.1.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "cyclist": "0.2.2",
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.2"
+ },
+ "dependencies": {
+ "cyclist": {
+ "version": "0.2.2",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "pump": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "end-of-stream": "1.4.0",
+ "once": "1.4.0"
+ }
+ },
+ "pumpify": {
+ "version": "1.3.5",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "duplexify": "3.5.0",
+ "inherits": "2.0.3",
+ "pump": "1.0.2"
+ }
+ },
+ "stream-each": {
+ "version": "1.2.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "end-of-stream": "1.4.0",
+ "stream-shift": "1.0.0"
+ },
+ "dependencies": {
+ "stream-shift": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "through2": {
+ "version": "2.0.3",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "readable-stream": "2.3.2",
+ "xtend": "4.0.1"
+ },
+ "dependencies": {
+ "xtend": {
+ "version": "4.0.1",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "minimist": "0.0.8"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "0.0.8",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "move-concurrently": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "aproba": "1.1.2",
+ "copy-concurrently": "1.0.3",
+ "fs-write-stream-atomic": "1.0.10",
+ "mkdirp": "0.5.1",
+ "rimraf": "2.6.1",
+ "run-queue": "1.0.3"
+ },
+ "dependencies": {
+ "copy-concurrently": {
+ "version": "1.0.3",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "aproba": "1.1.2",
+ "fs-write-stream-atomic": "1.0.10",
+ "iferr": "0.1.5",
+ "mkdirp": "0.5.1",
+ "rimraf": "2.6.1",
+ "run-queue": "1.0.3"
+ }
+ },
+ "run-queue": {
+ "version": "1.0.3",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "aproba": "1.1.2"
+ }
+ }
+ }
+ },
+ "node-gyp": {
+ "version": "3.6.2",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "fstream": "1.0.11",
+ "glob": "7.1.2",
+ "graceful-fs": "4.1.11",
+ "minimatch": "3.0.4",
+ "mkdirp": "0.5.1",
+ "nopt": "3.0.6",
+ "npmlog": "4.1.2",
+ "osenv": "0.1.4",
+ "request": "2.81.0",
+ "rimraf": "2.6.1",
+ "semver": "5.3.0",
+ "tar": "2.2.1",
+ "which": "1.2.14"
+ },
+ "dependencies": {
+ "minimatch": {
+ "version": "3.0.4",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.8"
+ },
+ "dependencies": {
+ "brace-expansion": {
+ "version": "1.1.8",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "0.0.1"
+ },
+ "dependencies": {
+ "balanced-match": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "nopt": {
+ "version": "3.0.6",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "abbrev": "1.1.0"
+ }
+ }
+ }
+ },
+ "nopt": {
+ "version": "4.0.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "abbrev": "1.1.0",
+ "osenv": "0.1.4"
+ }
+ },
+ "normalize-package-data": {
+ "version": "2.4.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "hosted-git-info": "2.5.0",
+ "is-builtin-module": "1.0.0",
+ "semver": "5.3.0",
+ "validate-npm-package-license": "3.0.1"
+ },
+ "dependencies": {
+ "is-builtin-module": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "builtin-modules": "1.1.1"
+ },
+ "dependencies": {
+ "builtin-modules": {
+ "version": "1.1.1",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "npm-cache-filename": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true
+ },
+ "npm-install-checks": {
+ "version": "3.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "semver": "5.3.0"
+ }
+ },
+ "npm-package-arg": {
+ "version": "5.1.2",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "hosted-git-info": "2.5.0",
+ "osenv": "0.1.4",
+ "semver": "5.3.0",
+ "validate-npm-package-name": "3.0.0"
+ }
+ },
+ "npm-registry-client": {
+ "version": "8.4.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "concat-stream": "1.6.0",
+ "graceful-fs": "4.1.11",
+ "normalize-package-data": "2.4.0",
+ "npm-package-arg": "5.1.2",
+ "npmlog": "4.1.2",
+ "once": "1.4.0",
+ "request": "2.81.0",
+ "retry": "0.10.1",
+ "semver": "5.3.0",
+ "slide": "1.1.6",
+ "ssri": "4.1.6"
+ },
+ "dependencies": {
+ "concat-stream": {
+ "version": "1.6.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.2",
+ "typedarray": "0.0.6"
+ },
+ "dependencies": {
+ "typedarray": {
+ "version": "0.0.6",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "npm-user-validate": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "npmlog": {
+ "version": "4.1.2",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "are-we-there-yet": "1.1.4",
+ "console-control-strings": "1.1.0",
+ "gauge": "2.7.4",
+ "set-blocking": "2.0.0"
+ },
+ "dependencies": {
+ "are-we-there-yet": {
+ "version": "1.1.4",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "delegates": "1.0.0",
+ "readable-stream": "2.3.2"
+ },
+ "dependencies": {
+ "delegates": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "console-control-strings": {
+ "version": "1.1.0",
+ "bundled": true,
+ "dev": true
+ },
+ "gauge": {
+ "version": "2.7.4",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "aproba": "1.1.2",
+ "console-control-strings": "1.1.0",
+ "has-unicode": "2.0.1",
+ "object-assign": "4.1.1",
+ "signal-exit": "3.0.2",
+ "string-width": "1.0.2",
+ "strip-ansi": "3.0.1",
+ "wide-align": "1.1.2"
+ },
+ "dependencies": {
+ "object-assign": {
+ "version": "4.1.1",
+ "bundled": true,
+ "dev": true
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "bundled": true,
+ "dev": true
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "code-point-at": "1.1.0",
+ "is-fullwidth-code-point": "1.0.0",
+ "strip-ansi": "3.0.1"
+ },
+ "dependencies": {
+ "code-point-at": {
+ "version": "1.1.0",
+ "bundled": true,
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ },
+ "dependencies": {
+ "number-is-nan": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "wide-align": {
+ "version": "1.1.2",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "string-width": "1.0.2"
+ }
+ }
+ }
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "once": {
+ "version": "1.4.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "opener": {
+ "version": "1.4.3",
+ "bundled": true,
+ "dev": true
+ },
+ "osenv": {
+ "version": "0.1.4",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "os-homedir": "1.0.2",
+ "os-tmpdir": "1.0.2"
+ },
+ "dependencies": {
+ "os-homedir": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "pacote": {
+ "version": "2.7.38",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "bluebird": "3.5.0",
+ "cacache": "9.2.9",
+ "glob": "7.1.2",
+ "lru-cache": "4.1.1",
+ "make-fetch-happen": "2.4.13",
+ "minimatch": "3.0.4",
+ "mississippi": "1.3.0",
+ "normalize-package-data": "2.4.0",
+ "npm-package-arg": "5.1.2",
+ "npm-pick-manifest": "1.0.4",
+ "osenv": "0.1.4",
+ "promise-inflight": "1.0.1",
+ "promise-retry": "1.1.1",
+ "protoduck": "4.0.0",
+ "safe-buffer": "5.1.1",
+ "semver": "5.3.0",
+ "ssri": "4.1.6",
+ "tar-fs": "1.15.3",
+ "tar-stream": "1.5.4",
+ "unique-filename": "1.1.0",
+ "which": "1.2.14"
+ },
+ "dependencies": {
+ "make-fetch-happen": {
+ "version": "2.4.13",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "agentkeepalive": "3.3.0",
+ "cacache": "9.2.9",
+ "http-cache-semantics": "3.7.3",
+ "http-proxy-agent": "2.0.0",
+ "https-proxy-agent": "2.0.0",
+ "lru-cache": "4.1.1",
+ "mississippi": "1.3.0",
+ "node-fetch-npm": "2.0.1",
+ "promise-retry": "1.1.1",
+ "socks-proxy-agent": "3.0.0",
+ "ssri": "4.1.6"
+ },
+ "dependencies": {
+ "agentkeepalive": {
+ "version": "3.3.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "humanize-ms": "1.2.1"
+ },
+ "dependencies": {
+ "humanize-ms": {
+ "version": "1.2.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ },
+ "dependencies": {
+ "ms": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "http-cache-semantics": {
+ "version": "3.7.3",
+ "bundled": true,
+ "dev": true
+ },
+ "http-proxy-agent": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "agent-base": "4.1.0",
+ "debug": "2.6.8"
+ },
+ "dependencies": {
+ "agent-base": {
+ "version": "4.1.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "es6-promisify": "5.0.0"
+ },
+ "dependencies": {
+ "es6-promisify": {
+ "version": "5.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "es6-promise": "4.1.1"
+ },
+ "dependencies": {
+ "es6-promise": {
+ "version": "4.1.1",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "debug": {
+ "version": "2.6.8",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ },
+ "dependencies": {
+ "ms": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "https-proxy-agent": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "agent-base": "4.1.0",
+ "debug": "2.6.8"
+ },
+ "dependencies": {
+ "agent-base": {
+ "version": "4.1.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "es6-promisify": "5.0.0"
+ },
+ "dependencies": {
+ "es6-promisify": {
+ "version": "5.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "es6-promise": "4.1.1"
+ },
+ "dependencies": {
+ "es6-promise": {
+ "version": "4.1.1",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "debug": {
+ "version": "2.6.8",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ },
+ "dependencies": {
+ "ms": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "node-fetch-npm": {
+ "version": "2.0.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "encoding": "0.1.12",
+ "json-parse-helpfulerror": "1.0.3",
+ "safe-buffer": "5.1.1"
+ },
+ "dependencies": {
+ "encoding": {
+ "version": "0.1.12",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "iconv-lite": "0.4.18"
+ },
+ "dependencies": {
+ "iconv-lite": {
+ "version": "0.4.18",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "json-parse-helpfulerror": {
+ "version": "1.0.3",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "jju": "1.3.0"
+ },
+ "dependencies": {
+ "jju": {
+ "version": "1.3.0",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "socks-proxy-agent": {
+ "version": "3.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "agent-base": "4.1.0",
+ "socks": "1.1.10"
+ },
+ "dependencies": {
+ "agent-base": {
+ "version": "4.1.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "es6-promisify": "5.0.0"
+ },
+ "dependencies": {
+ "es6-promisify": {
+ "version": "5.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "es6-promise": "4.1.1"
+ },
+ "dependencies": {
+ "es6-promise": {
+ "version": "4.1.1",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "socks": {
+ "version": "1.1.10",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "ip": "1.1.5",
+ "smart-buffer": "1.1.15"
+ },
+ "dependencies": {
+ "ip": {
+ "version": "1.1.5",
+ "bundled": true,
+ "dev": true
+ },
+ "smart-buffer": {
+ "version": "1.1.15",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.8"
+ },
+ "dependencies": {
+ "brace-expansion": {
+ "version": "1.1.8",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "0.0.1"
+ },
+ "dependencies": {
+ "balanced-match": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "npm-pick-manifest": {
+ "version": "1.0.4",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "npm-package-arg": "5.1.2",
+ "semver": "5.3.0"
+ }
+ },
+ "promise-retry": {
+ "version": "1.1.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "err-code": "1.1.2",
+ "retry": "0.10.1"
+ },
+ "dependencies": {
+ "err-code": {
+ "version": "1.1.2",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "protoduck": {
+ "version": "4.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "genfun": "4.0.1"
+ },
+ "dependencies": {
+ "genfun": {
+ "version": "4.0.1",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "tar-fs": {
+ "version": "1.15.3",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "chownr": "1.0.1",
+ "mkdirp": "0.5.1",
+ "pump": "1.0.2",
+ "tar-stream": "1.5.4"
+ },
+ "dependencies": {
+ "pump": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "end-of-stream": "1.4.0",
+ "once": "1.4.0"
+ },
+ "dependencies": {
+ "end-of-stream": {
+ "version": "1.4.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "once": "1.4.0"
+ }
+ }
+ }
+ }
+ }
+ },
+ "tar-stream": {
+ "version": "1.5.4",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "bl": "1.2.1",
+ "end-of-stream": "1.4.0",
+ "readable-stream": "2.3.2",
+ "xtend": "4.0.1"
+ },
+ "dependencies": {
+ "bl": {
+ "version": "1.2.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "readable-stream": "2.3.2"
+ }
+ },
+ "end-of-stream": {
+ "version": "1.4.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "once": "1.4.0"
+ }
+ },
+ "xtend": {
+ "version": "4.0.1",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "path-is-inside": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true
+ },
+ "promise-inflight": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true
+ },
+ "read": {
+ "version": "1.0.7",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "mute-stream": "0.0.7"
+ },
+ "dependencies": {
+ "mute-stream": {
+ "version": "0.0.7",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "read-cmd-shim": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11"
+ }
+ },
+ "read-installed": {
+ "version": "4.0.3",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "debuglog": "1.0.1",
+ "graceful-fs": "4.1.11",
+ "read-package-json": "2.0.9",
+ "readdir-scoped-modules": "1.0.2",
+ "semver": "5.3.0",
+ "slide": "1.1.6",
+ "util-extend": "1.0.3"
+ },
+ "dependencies": {
+ "util-extend": {
+ "version": "1.0.3",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "read-package-json": {
+ "version": "2.0.9",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "glob": "7.1.2",
+ "graceful-fs": "4.1.11",
+ "json-parse-helpfulerror": "1.0.3",
+ "normalize-package-data": "2.4.0"
+ },
+ "dependencies": {
+ "json-parse-helpfulerror": {
+ "version": "1.0.3",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "jju": "1.3.0"
+ },
+ "dependencies": {
+ "jju": {
+ "version": "1.3.0",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "read-package-tree": {
+ "version": "5.1.6",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "debuglog": "1.0.1",
+ "dezalgo": "1.0.3",
+ "once": "1.4.0",
+ "read-package-json": "2.0.9",
+ "readdir-scoped-modules": "1.0.2"
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.2",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "1.0.7",
+ "safe-buffer": "5.1.1",
+ "string_decoder": "1.0.3",
+ "util-deprecate": "1.0.2"
+ },
+ "dependencies": {
+ "core-util-is": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "1.0.7",
+ "bundled": true,
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "1.0.3",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "readdir-scoped-modules": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "debuglog": "1.0.1",
+ "dezalgo": "1.0.3",
+ "graceful-fs": "4.1.11",
+ "once": "1.4.0"
+ }
+ },
+ "request": {
+ "version": "2.81.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "aws-sign2": "0.6.0",
+ "aws4": "1.6.0",
+ "caseless": "0.12.0",
+ "combined-stream": "1.0.5",
+ "extend": "3.0.1",
+ "forever-agent": "0.6.1",
+ "form-data": "2.1.4",
+ "har-validator": "4.2.1",
+ "hawk": "3.1.3",
+ "http-signature": "1.1.1",
+ "is-typedarray": "1.0.0",
+ "isstream": "0.1.2",
+ "json-stringify-safe": "5.0.1",
+ "mime-types": "2.1.15",
+ "oauth-sign": "0.8.2",
+ "performance-now": "0.2.0",
+ "qs": "6.4.0",
+ "safe-buffer": "5.1.1",
+ "stringstream": "0.0.5",
+ "tough-cookie": "2.3.2",
+ "tunnel-agent": "0.6.0",
+ "uuid": "3.1.0"
+ },
+ "dependencies": {
+ "aws-sign2": {
+ "version": "0.6.0",
+ "bundled": true,
+ "dev": true
+ },
+ "aws4": {
+ "version": "1.6.0",
+ "bundled": true,
+ "dev": true
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "bundled": true,
+ "dev": true
+ },
+ "combined-stream": {
+ "version": "1.0.5",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "delayed-stream": "1.0.0"
+ },
+ "dependencies": {
+ "delayed-stream": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "extend": {
+ "version": "3.0.1",
+ "bundled": true,
+ "dev": true
+ },
+ "forever-agent": {
+ "version": "0.6.1",
+ "bundled": true,
+ "dev": true
+ },
+ "form-data": {
+ "version": "2.1.4",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "asynckit": "0.4.0",
+ "combined-stream": "1.0.5",
+ "mime-types": "2.1.15"
+ },
+ "dependencies": {
+ "asynckit": {
+ "version": "0.4.0",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "har-validator": {
+ "version": "4.2.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "ajv": "4.11.8",
+ "har-schema": "1.0.5"
+ },
+ "dependencies": {
+ "ajv": {
+ "version": "4.11.8",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "co": "4.6.0",
+ "json-stable-stringify": "1.0.1"
+ },
+ "dependencies": {
+ "co": {
+ "version": "4.6.0",
+ "bundled": true,
+ "dev": true
+ },
+ "json-stable-stringify": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "jsonify": "0.0.0"
+ },
+ "dependencies": {
+ "jsonify": {
+ "version": "0.0.0",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "har-schema": {
+ "version": "1.0.5",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "hawk": {
+ "version": "3.1.3",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "boom": "2.10.1",
+ "cryptiles": "2.0.5",
+ "hoek": "2.16.3",
+ "sntp": "1.0.9"
+ },
+ "dependencies": {
+ "boom": {
+ "version": "2.10.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "hoek": "2.16.3"
+ }
+ },
+ "cryptiles": {
+ "version": "2.0.5",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "boom": "2.10.1"
+ }
+ },
+ "hoek": {
+ "version": "2.16.3",
+ "bundled": true,
+ "dev": true
+ },
+ "sntp": {
+ "version": "1.0.9",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "hoek": "2.16.3"
+ }
+ }
+ }
+ },
+ "http-signature": {
+ "version": "1.1.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "assert-plus": "0.2.0",
+ "jsprim": "1.4.0",
+ "sshpk": "1.13.1"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "0.2.0",
+ "bundled": true,
+ "dev": true
+ },
+ "jsprim": {
+ "version": "1.4.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "assert-plus": "1.0.0",
+ "extsprintf": "1.0.2",
+ "json-schema": "0.2.3",
+ "verror": "1.3.6"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "extsprintf": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true
+ },
+ "json-schema": {
+ "version": "0.2.3",
+ "bundled": true,
+ "dev": true
+ },
+ "verror": {
+ "version": "1.3.6",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "extsprintf": "1.0.2"
+ }
+ }
+ }
+ },
+ "sshpk": {
+ "version": "1.13.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "asn1": "0.2.3",
+ "assert-plus": "1.0.0",
+ "bcrypt-pbkdf": "1.0.1",
+ "dashdash": "1.14.1",
+ "ecc-jsbn": "0.1.1",
+ "getpass": "0.1.7",
+ "jsbn": "0.1.1",
+ "tweetnacl": "0.14.5"
+ },
+ "dependencies": {
+ "asn1": {
+ "version": "0.2.3",
+ "bundled": true,
+ "dev": true
+ },
+ "assert-plus": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "bcrypt-pbkdf": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "tweetnacl": "0.14.5"
+ }
+ },
+ "dashdash": {
+ "version": "1.14.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "assert-plus": "1.0.0"
+ }
+ },
+ "ecc-jsbn": {
+ "version": "0.1.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "jsbn": "0.1.1"
+ }
+ },
+ "getpass": {
+ "version": "0.1.7",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "assert-plus": "1.0.0"
+ }
+ },
+ "jsbn": {
+ "version": "0.1.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "tweetnacl": {
+ "version": "0.14.5",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ }
+ }
+ }
+ }
+ },
+ "is-typedarray": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "bundled": true,
+ "dev": true
+ },
+ "json-stringify-safe": {
+ "version": "5.0.1",
+ "bundled": true,
+ "dev": true
+ },
+ "mime-types": {
+ "version": "2.1.15",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "mime-db": "1.27.0"
+ },
+ "dependencies": {
+ "mime-db": {
+ "version": "1.27.0",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "oauth-sign": {
+ "version": "0.8.2",
+ "bundled": true,
+ "dev": true
+ },
+ "performance-now": {
+ "version": "0.2.0",
+ "bundled": true,
+ "dev": true
+ },
+ "qs": {
+ "version": "6.4.0",
+ "bundled": true,
+ "dev": true
+ },
+ "stringstream": {
+ "version": "0.0.5",
+ "bundled": true,
+ "dev": true
+ },
+ "tough-cookie": {
+ "version": "2.3.2",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "punycode": "1.4.1"
+ },
+ "dependencies": {
+ "punycode": {
+ "version": "1.4.1",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "tunnel-agent": {
+ "version": "0.6.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ }
+ }
+ },
+ "retry": {
+ "version": "0.10.1",
+ "bundled": true,
+ "dev": true
+ },
+ "rimraf": {
+ "version": "2.6.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "glob": "7.1.2"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.1",
+ "bundled": true,
+ "dev": true
+ },
+ "semver": {
+ "version": "5.3.0",
+ "bundled": true,
+ "dev": true
+ },
+ "sha": {
+ "version": "2.0.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "readable-stream": "2.3.2"
+ }
+ },
+ "slide": {
+ "version": "1.1.6",
+ "bundled": true,
+ "dev": true
+ },
+ "sorted-object": {
+ "version": "2.0.1",
+ "bundled": true,
+ "dev": true
+ },
+ "sorted-union-stream": {
+ "version": "2.1.3",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "from2": "1.3.0",
+ "stream-iterate": "1.2.0"
+ },
+ "dependencies": {
+ "from2": {
+ "version": "1.3.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "readable-stream": "1.1.14"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "1.1.14",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "0.0.1",
+ "string_decoder": "0.10.31"
+ },
+ "dependencies": {
+ "core-util-is": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true
+ },
+ "isarray": {
+ "version": "0.0.1",
+ "bundled": true,
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "stream-iterate": {
+ "version": "1.2.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "readable-stream": "2.3.2",
+ "stream-shift": "1.0.0"
+ },
+ "dependencies": {
+ "stream-shift": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "ssri": {
+ "version": "4.1.6",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "ansi-regex": "3.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "tar": {
+ "version": "2.2.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "block-stream": "0.0.9",
+ "fstream": "1.0.11",
+ "inherits": "2.0.3"
+ },
+ "dependencies": {
+ "block-stream": {
+ "version": "0.0.9",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3"
+ }
+ }
+ }
+ },
+ "text-table": {
+ "version": "0.2.0",
+ "bundled": true,
+ "dev": true
+ },
+ "uid-number": {
+ "version": "0.0.6",
+ "bundled": true,
+ "dev": true
+ },
+ "umask": {
+ "version": "1.1.0",
+ "bundled": true,
+ "dev": true
+ },
+ "unique-filename": {
+ "version": "1.1.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "unique-slug": "2.0.0"
+ },
+ "dependencies": {
+ "unique-slug": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "imurmurhash": "0.1.4"
+ }
+ }
+ }
+ },
+ "unpipe": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "update-notifier": {
+ "version": "2.2.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "boxen": "1.1.0",
+ "chalk": "1.1.3",
+ "configstore": "3.1.0",
+ "import-lazy": "2.1.0",
+ "is-npm": "1.0.0",
+ "latest-version": "3.1.0",
+ "semver-diff": "2.1.0",
+ "xdg-basedir": "3.0.0"
+ },
+ "dependencies": {
+ "boxen": {
+ "version": "1.1.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "ansi-align": "2.0.0",
+ "camelcase": "4.1.0",
+ "chalk": "1.1.3",
+ "cli-boxes": "1.0.0",
+ "string-width": "2.1.0",
+ "term-size": "0.1.1",
+ "widest-line": "1.0.0"
+ },
+ "dependencies": {
+ "ansi-align": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "string-width": "2.1.0"
+ }
+ },
+ "camelcase": {
+ "version": "4.1.0",
+ "bundled": true,
+ "dev": true
+ },
+ "cli-boxes": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "string-width": {
+ "version": "2.1.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "is-fullwidth-code-point": "2.0.0",
+ "strip-ansi": "4.0.0"
+ },
+ "dependencies": {
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "ansi-regex": "3.0.0"
+ }
+ }
+ }
+ },
+ "term-size": {
+ "version": "0.1.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "execa": "0.4.0"
+ },
+ "dependencies": {
+ "execa": {
+ "version": "0.4.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "cross-spawn-async": "2.2.5",
+ "is-stream": "1.1.0",
+ "npm-run-path": "1.0.0",
+ "object-assign": "4.1.1",
+ "path-key": "1.0.0",
+ "strip-eof": "1.0.0"
+ },
+ "dependencies": {
+ "cross-spawn-async": {
+ "version": "2.2.5",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "lru-cache": "4.1.1",
+ "which": "1.2.14"
+ }
+ },
+ "is-stream": {
+ "version": "1.1.0",
+ "bundled": true,
+ "dev": true
+ },
+ "npm-run-path": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "path-key": "1.0.0"
+ }
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "bundled": true,
+ "dev": true
+ },
+ "path-key": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "strip-eof": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "widest-line": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "string-width": "1.0.2"
+ },
+ "dependencies": {
+ "string-width": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "code-point-at": "1.1.0",
+ "is-fullwidth-code-point": "1.0.0",
+ "strip-ansi": "3.0.1"
+ },
+ "dependencies": {
+ "code-point-at": {
+ "version": "1.1.0",
+ "bundled": true,
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ },
+ "dependencies": {
+ "number-is-nan": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "bundled": true,
+ "dev": true
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "bundled": true,
+ "dev": true
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "configstore": {
+ "version": "3.1.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "dot-prop": "4.1.1",
+ "graceful-fs": "4.1.11",
+ "make-dir": "1.0.0",
+ "unique-string": "1.0.0",
+ "write-file-atomic": "2.1.0",
+ "xdg-basedir": "3.0.0"
+ },
+ "dependencies": {
+ "dot-prop": {
+ "version": "4.1.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "is-obj": "1.0.1"
+ },
+ "dependencies": {
+ "is-obj": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "make-dir": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "pify": "2.3.0"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "2.3.0",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "unique-string": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "crypto-random-string": "1.0.0"
+ },
+ "dependencies": {
+ "crypto-random-string": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "import-lazy": {
+ "version": "2.1.0",
+ "bundled": true,
+ "dev": true
+ },
+ "is-npm": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "latest-version": {
+ "version": "3.1.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "package-json": "4.0.1"
+ },
+ "dependencies": {
+ "package-json": {
+ "version": "4.0.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "got": "6.7.1",
+ "registry-auth-token": "3.3.1",
+ "registry-url": "3.1.0",
+ "semver": "5.3.0"
+ },
+ "dependencies": {
+ "got": {
+ "version": "6.7.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "create-error-class": "3.0.2",
+ "duplexer3": "0.1.4",
+ "get-stream": "3.0.0",
+ "is-redirect": "1.0.0",
+ "is-retry-allowed": "1.1.0",
+ "is-stream": "1.1.0",
+ "lowercase-keys": "1.0.0",
+ "safe-buffer": "5.1.1",
+ "timed-out": "4.0.1",
+ "unzip-response": "2.0.1",
+ "url-parse-lax": "1.0.0"
+ },
+ "dependencies": {
+ "create-error-class": {
+ "version": "3.0.2",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "capture-stack-trace": "1.0.0"
+ },
+ "dependencies": {
+ "capture-stack-trace": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "duplexer3": {
+ "version": "0.1.4",
+ "bundled": true,
+ "dev": true
+ },
+ "get-stream": {
+ "version": "3.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "is-redirect": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "is-retry-allowed": {
+ "version": "1.1.0",
+ "bundled": true,
+ "dev": true
+ },
+ "is-stream": {
+ "version": "1.1.0",
+ "bundled": true,
+ "dev": true
+ },
+ "lowercase-keys": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "timed-out": {
+ "version": "4.0.1",
+ "bundled": true,
+ "dev": true
+ },
+ "unzip-response": {
+ "version": "2.0.1",
+ "bundled": true,
+ "dev": true
+ },
+ "url-parse-lax": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "prepend-http": "1.0.4"
+ },
+ "dependencies": {
+ "prepend-http": {
+ "version": "1.0.4",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "registry-auth-token": {
+ "version": "3.3.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "rc": "1.2.1",
+ "safe-buffer": "5.1.1"
+ },
+ "dependencies": {
+ "rc": {
+ "version": "1.2.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "deep-extend": "0.4.2",
+ "ini": "1.3.4",
+ "minimist": "1.2.0",
+ "strip-json-comments": "2.0.1"
+ },
+ "dependencies": {
+ "deep-extend": {
+ "version": "0.4.2",
+ "bundled": true,
+ "dev": true
+ },
+ "minimist": {
+ "version": "1.2.0",
+ "bundled": true,
+ "dev": true
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "registry-url": {
+ "version": "3.1.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "rc": "1.2.1"
+ },
+ "dependencies": {
+ "rc": {
+ "version": "1.2.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "deep-extend": "0.4.2",
+ "ini": "1.3.4",
+ "minimist": "1.2.0",
+ "strip-json-comments": "2.0.1"
+ },
+ "dependencies": {
+ "deep-extend": {
+ "version": "0.4.2",
+ "bundled": true,
+ "dev": true
+ },
+ "minimist": {
+ "version": "1.2.0",
+ "bundled": true,
+ "dev": true
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "semver-diff": {
+ "version": "2.1.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "semver": "5.3.0"
+ }
+ },
+ "xdg-basedir": {
+ "version": "3.0.0",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "uuid": {
+ "version": "3.1.0",
+ "bundled": true,
+ "dev": true
+ },
+ "validate-npm-package-license": {
+ "version": "3.0.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "spdx-correct": "1.0.2",
+ "spdx-expression-parse": "1.0.4"
+ },
+ "dependencies": {
+ "spdx-correct": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "spdx-license-ids": "1.2.2"
+ },
+ "dependencies": {
+ "spdx-license-ids": {
+ "version": "1.2.2",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "spdx-expression-parse": {
+ "version": "1.0.4",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "validate-npm-package-name": {
+ "version": "3.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "builtins": "1.0.3"
+ },
+ "dependencies": {
+ "builtins": {
+ "version": "1.0.3",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "which": {
+ "version": "1.2.14",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "isexe": "2.0.0"
+ },
+ "dependencies": {
+ "isexe": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "worker-farm": {
+ "version": "1.3.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "errno": "0.1.4",
+ "xtend": "4.0.1"
+ },
+ "dependencies": {
+ "errno": {
+ "version": "0.1.4",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "prr": "0.0.0"
+ },
+ "dependencies": {
+ "prr": {
+ "version": "0.0.0",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "xtend": {
+ "version": "4.0.1",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true
+ },
+ "write-file-atomic": {
+ "version": "2.1.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.11",
+ "imurmurhash": "0.1.4",
+ "slide": "1.1.6"
+ }
+ }
+ }
+ },
+ "npmi": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/npmi/-/npmi-1.0.1.tgz",
+ "integrity": "sha1-FddpJzVHVF5oCdzwzhiu1IsCkOI=",
+ "dev": true,
+ "requires": {
+ "npm": "2.15.12",
+ "semver": "4.3.6"
+ },
+ "dependencies": {
+ "npm": {
+ "version": "2.15.12",
+ "resolved": "https://registry.npmjs.org/npm/-/npm-2.15.12.tgz",
+ "integrity": "sha1-33w+1aJ3w/nUtdgZsFMR0QogCuY=",
+ "dev": true,
+ "requires": {
+ "abbrev": "1.0.9",
+ "ansi": "0.3.1",
+ "ansi-regex": "2.0.0",
+ "ansicolors": "0.3.2",
+ "ansistyles": "0.1.3",
+ "archy": "1.0.0",
+ "async-some": "1.0.2",
+ "block-stream": "0.0.9",
+ "char-spinner": "1.0.1",
+ "chmodr": "1.0.2",
+ "chownr": "1.0.1",
+ "cmd-shim": "2.0.2",
+ "columnify": "1.5.4",
+ "config-chain": "1.1.10",
+ "dezalgo": "1.0.3",
+ "editor": "1.0.0",
+ "fs-vacuum": "1.2.9",
+ "fs-write-stream-atomic": "1.0.8",
+ "fstream": "1.0.10",
+ "fstream-npm": "1.1.1",
+ "github-url-from-git": "1.4.0",
+ "github-url-from-username-repo": "1.0.2",
+ "glob": "7.0.6",
+ "graceful-fs": "4.1.6",
+ "hosted-git-info": "2.1.5",
+ "imurmurhash": "0.1.4",
+ "inflight": "1.0.5",
+ "inherits": "2.0.3",
+ "ini": "1.3.4",
+ "init-package-json": "1.9.4",
+ "lockfile": "1.0.1",
+ "lru-cache": "4.0.1",
+ "minimatch": "3.0.3",
+ "mkdirp": "0.5.1",
+ "node-gyp": "3.6.0",
+ "nopt": "3.0.6",
+ "normalize-git-url": "3.0.2",
+ "normalize-package-data": "2.3.5",
+ "npm-cache-filename": "1.0.2",
+ "npm-install-checks": "1.0.7",
+ "npm-package-arg": "4.1.0",
+ "npm-registry-client": "7.2.1",
+ "npm-user-validate": "0.1.5",
+ "npmlog": "2.0.4",
+ "once": "1.4.0",
+ "opener": "1.4.1",
+ "osenv": "0.1.3",
+ "path-is-inside": "1.0.1",
+ "read": "1.0.7",
+ "read-installed": "4.0.3",
+ "read-package-json": "2.0.4",
+ "readable-stream": "2.1.5",
+ "realize-package-specifier": "3.0.1",
+ "request": "2.74.0",
+ "retry": "0.10.0",
+ "rimraf": "2.5.4",
+ "semver": "5.1.0",
+ "sha": "2.0.1",
+ "slide": "1.1.6",
+ "sorted-object": "2.0.0",
+ "spdx-license-ids": "1.2.2",
+ "strip-ansi": "3.0.1",
+ "tar": "2.2.1",
+ "text-table": "0.2.0",
+ "uid-number": "0.0.6",
+ "umask": "1.1.0",
+ "validate-npm-package-license": "3.0.1",
+ "validate-npm-package-name": "2.2.2",
+ "which": "1.2.11",
+ "wrappy": "1.0.2",
+ "write-file-atomic": "1.1.4"
+ },
+ "dependencies": {
+ "abbrev": {
+ "version": "1.0.9",
+ "bundled": true,
+ "dev": true
+ },
+ "ansi": {
+ "version": "0.3.1",
+ "bundled": true,
+ "dev": true
+ },
+ "ansi-regex": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "ansicolors": {
+ "version": "0.3.2",
+ "bundled": true,
+ "dev": true
+ },
+ "ansistyles": {
+ "version": "0.1.3",
+ "bundled": true,
+ "dev": true
+ },
+ "archy": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "async-some": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "dezalgo": "1.0.3"
+ }
+ },
+ "block-stream": {
+ "version": "0.0.9",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3"
+ }
+ },
+ "char-spinner": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true
+ },
+ "chmodr": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true
+ },
+ "chownr": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true
+ },
+ "cmd-shim": {
+ "version": "2.0.2",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.6",
+ "mkdirp": "0.5.1"
+ }
+ },
+ "columnify": {
+ "version": "1.5.4",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "strip-ansi": "3.0.1",
+ "wcwidth": "1.0.0"
+ },
+ "dependencies": {
+ "wcwidth": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "defaults": "1.0.3"
+ },
+ "dependencies": {
+ "defaults": {
+ "version": "1.0.3",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "clone": "1.0.2"
+ },
+ "dependencies": {
+ "clone": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "config-chain": {
+ "version": "1.1.10",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "ini": "1.3.4",
+ "proto-list": "1.2.4"
+ },
+ "dependencies": {
+ "proto-list": {
+ "version": "1.2.4",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "dezalgo": {
+ "version": "1.0.3",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "asap": "2.0.3",
+ "wrappy": "1.0.2"
+ },
+ "dependencies": {
+ "asap": {
+ "version": "2.0.3",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "editor": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "fs-vacuum": {
+ "version": "1.2.9",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.6",
+ "path-is-inside": "1.0.1",
+ "rimraf": "2.5.4"
+ }
+ },
+ "fs-write-stream-atomic": {
+ "version": "1.0.8",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.6",
+ "iferr": "0.1.5",
+ "imurmurhash": "0.1.4",
+ "readable-stream": "2.1.5"
+ },
+ "dependencies": {
+ "iferr": {
+ "version": "0.1.5",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "fstream": {
+ "version": "1.0.10",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.6",
+ "inherits": "2.0.3",
+ "mkdirp": "0.5.1",
+ "rimraf": "2.5.4"
+ }
+ },
+ "fstream-npm": {
+ "version": "1.1.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "fstream-ignore": "1.0.5",
+ "inherits": "2.0.3"
+ },
+ "dependencies": {
+ "fstream-ignore": {
+ "version": "1.0.5",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "fstream": "1.0.10",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.3"
+ }
+ }
+ }
+ },
+ "github-url-from-git": {
+ "version": "1.4.0",
+ "bundled": true,
+ "dev": true
+ },
+ "github-url-from-username-repo": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true
+ },
+ "glob": {
+ "version": "7.0.6",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.5",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.3",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.0"
+ },
+ "dependencies": {
+ "fs.realpath": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "graceful-fs": {
+ "version": "4.1.6",
+ "bundled": true,
+ "dev": true
+ },
+ "hosted-git-info": {
+ "version": "2.1.5",
+ "bundled": true,
+ "dev": true
+ },
+ "imurmurhash": {
+ "version": "0.1.4",
+ "bundled": true,
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.5",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "bundled": true,
+ "dev": true
+ },
+ "ini": {
+ "version": "1.3.4",
+ "bundled": true,
+ "dev": true
+ },
+ "init-package-json": {
+ "version": "1.9.4",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "glob": "6.0.4",
+ "npm-package-arg": "4.1.0",
+ "promzard": "0.3.0",
+ "read": "1.0.7",
+ "read-package-json": "2.0.4",
+ "semver": "5.1.0",
+ "validate-npm-package-license": "3.0.1",
+ "validate-npm-package-name": "2.2.2"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "6.0.4",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "inflight": "1.0.5",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.3",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.0"
+ },
+ "dependencies": {
+ "path-is-absolute": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "promzard": {
+ "version": "0.3.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "read": "1.0.7"
+ }
+ }
+ }
+ },
+ "lockfile": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true
+ },
+ "lru-cache": {
+ "version": "4.0.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "pseudomap": "1.0.2",
+ "yallist": "2.0.0"
+ },
+ "dependencies": {
+ "pseudomap": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true
+ },
+ "yallist": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "minimatch": {
+ "version": "3.0.3",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.6"
+ },
+ "dependencies": {
+ "brace-expansion": {
+ "version": "1.1.6",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "balanced-match": "0.4.2",
+ "concat-map": "0.0.1"
+ },
+ "dependencies": {
+ "balanced-match": {
+ "version": "0.4.2",
+ "bundled": true,
+ "dev": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "minimist": "0.0.8"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "0.0.8",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "node-gyp": {
+ "version": "3.6.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "fstream": "1.0.10",
+ "glob": "7.0.6",
+ "graceful-fs": "4.1.6",
+ "minimatch": "3.0.3",
+ "mkdirp": "0.5.1",
+ "nopt": "3.0.6",
+ "npmlog": "2.0.4",
+ "osenv": "0.1.3",
+ "request": "2.74.0",
+ "rimraf": "2.5.4",
+ "semver": "5.3.0",
+ "tar": "2.2.1",
+ "which": "1.2.11"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "5.3.0",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "nopt": {
+ "version": "3.0.6",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "abbrev": "1.0.9"
+ }
+ },
+ "normalize-git-url": {
+ "version": "3.0.2",
+ "bundled": true,
+ "dev": true
+ },
+ "normalize-package-data": {
+ "version": "2.3.5",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "hosted-git-info": "2.1.5",
+ "is-builtin-module": "1.0.0",
+ "semver": "5.1.0",
+ "validate-npm-package-license": "3.0.1"
+ },
+ "dependencies": {
+ "is-builtin-module": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "builtin-modules": "1.1.0"
+ },
+ "dependencies": {
+ "builtin-modules": {
+ "version": "1.1.0",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "npm-cache-filename": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true
+ },
+ "npm-install-checks": {
+ "version": "1.0.7",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "npmlog": "2.0.4",
+ "semver": "5.1.0"
+ }
+ },
+ "npm-package-arg": {
+ "version": "4.1.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "hosted-git-info": "2.1.5",
+ "semver": "5.1.0"
+ }
+ },
+ "npm-registry-client": {
+ "version": "7.2.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "concat-stream": "1.5.2",
+ "graceful-fs": "4.1.6",
+ "normalize-package-data": "2.3.5",
+ "npm-package-arg": "4.1.0",
+ "npmlog": "2.0.4",
+ "once": "1.4.0",
+ "request": "2.74.0",
+ "retry": "0.10.0",
+ "semver": "5.1.0",
+ "slide": "1.1.6"
+ },
+ "dependencies": {
+ "concat-stream": {
+ "version": "1.5.2",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "readable-stream": "2.0.6",
+ "typedarray": "0.0.6"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "2.0.6",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "1.0.7",
+ "string_decoder": "0.10.31",
+ "util-deprecate": "1.0.2"
+ },
+ "dependencies": {
+ "core-util-is": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "1.0.7",
+ "bundled": true,
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "bundled": true,
+ "dev": true
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "retry": {
+ "version": "0.10.0",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "npm-user-validate": {
+ "version": "0.1.5",
+ "bundled": true,
+ "dev": true
+ },
+ "npmlog": {
+ "version": "2.0.4",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "ansi": "0.3.1",
+ "are-we-there-yet": "1.1.2",
+ "gauge": "1.2.7"
+ },
+ "dependencies": {
+ "are-we-there-yet": {
+ "version": "1.1.2",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "delegates": "1.0.0",
+ "readable-stream": "2.1.5"
+ },
+ "dependencies": {
+ "delegates": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "gauge": {
+ "version": "1.2.7",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "ansi": "0.3.1",
+ "has-unicode": "2.0.0",
+ "lodash.pad": "4.4.0",
+ "lodash.padend": "4.5.0",
+ "lodash.padstart": "4.5.0"
+ },
+ "dependencies": {
+ "has-unicode": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "lodash._baseslice": {
+ "version": "4.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "lodash._basetostring": {
+ "version": "4.12.0",
+ "bundled": true,
+ "dev": true
+ },
+ "lodash.pad": {
+ "version": "4.4.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "lodash._baseslice": "4.0.0",
+ "lodash._basetostring": "4.12.0",
+ "lodash.tostring": "4.1.4"
+ }
+ },
+ "lodash.padend": {
+ "version": "4.5.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "lodash._baseslice": "4.0.0",
+ "lodash._basetostring": "4.12.0",
+ "lodash.tostring": "4.1.4"
+ }
+ },
+ "lodash.padstart": {
+ "version": "4.5.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "lodash._baseslice": "4.0.0",
+ "lodash._basetostring": "4.12.0",
+ "lodash.tostring": "4.1.4"
+ }
+ },
+ "lodash.tostring": {
+ "version": "4.1.4",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "once": {
+ "version": "1.4.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "opener": {
+ "version": "1.4.1",
+ "bundled": true,
+ "dev": true
+ },
+ "osenv": {
+ "version": "0.1.3",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "os-homedir": "1.0.0",
+ "os-tmpdir": "1.0.1"
+ },
+ "dependencies": {
+ "os-homedir": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "os-tmpdir": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "path-is-inside": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true
+ },
+ "read": {
+ "version": "1.0.7",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "mute-stream": "0.0.5"
+ },
+ "dependencies": {
+ "mute-stream": {
+ "version": "0.0.5",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "read-installed": {
+ "version": "4.0.3",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "debuglog": "1.0.1",
+ "graceful-fs": "4.1.6",
+ "read-package-json": "2.0.4",
+ "readdir-scoped-modules": "1.0.2",
+ "semver": "5.1.0",
+ "slide": "1.1.6",
+ "util-extend": "1.0.1"
+ },
+ "dependencies": {
+ "debuglog": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true
+ },
+ "readdir-scoped-modules": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "debuglog": "1.0.1",
+ "dezalgo": "1.0.3",
+ "graceful-fs": "4.1.6",
+ "once": "1.4.0"
+ }
+ },
+ "util-extend": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "read-package-json": {
+ "version": "2.0.4",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "glob": "6.0.4",
+ "graceful-fs": "4.1.6",
+ "json-parse-helpfulerror": "1.0.3",
+ "normalize-package-data": "2.3.5"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "6.0.4",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "inflight": "1.0.5",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.3",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.0"
+ },
+ "dependencies": {
+ "path-is-absolute": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "json-parse-helpfulerror": {
+ "version": "1.0.3",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "jju": "1.3.0"
+ },
+ "dependencies": {
+ "jju": {
+ "version": "1.3.0",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "readable-stream": {
+ "version": "2.1.5",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "buffer-shims": "1.0.0",
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "1.0.7",
+ "string_decoder": "0.10.31",
+ "util-deprecate": "1.0.2"
+ },
+ "dependencies": {
+ "buffer-shims": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "1.0.7",
+ "bundled": true,
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "bundled": true,
+ "dev": true
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "realize-package-specifier": {
+ "version": "3.0.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "dezalgo": "1.0.3",
+ "npm-package-arg": "4.1.0"
+ }
+ },
+ "request": {
+ "version": "2.74.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "aws-sign2": "0.6.0",
+ "aws4": "1.4.1",
+ "bl": "1.1.2",
+ "caseless": "0.11.0",
+ "combined-stream": "1.0.5",
+ "extend": "3.0.0",
+ "forever-agent": "0.6.1",
+ "form-data": "1.0.0-rc4",
+ "har-validator": "2.0.6",
+ "hawk": "3.1.3",
+ "http-signature": "1.1.1",
+ "is-typedarray": "1.0.0",
+ "isstream": "0.1.2",
+ "json-stringify-safe": "5.0.1",
+ "mime-types": "2.1.11",
+ "node-uuid": "1.4.7",
+ "oauth-sign": "0.8.2",
+ "qs": "6.2.1",
+ "stringstream": "0.0.5",
+ "tough-cookie": "2.3.1",
+ "tunnel-agent": "0.4.3"
+ },
+ "dependencies": {
+ "aws-sign2": {
+ "version": "0.6.0",
+ "bundled": true,
+ "dev": true
+ },
+ "aws4": {
+ "version": "1.4.1",
+ "bundled": true,
+ "dev": true
+ },
+ "bl": {
+ "version": "1.1.2",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "readable-stream": "2.0.6"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "2.0.6",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "1.0.7",
+ "string_decoder": "0.10.31",
+ "util-deprecate": "1.0.2"
+ },
+ "dependencies": {
+ "core-util-is": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "1.0.7",
+ "bundled": true,
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "bundled": true,
+ "dev": true
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "caseless": {
+ "version": "0.11.0",
+ "bundled": true,
+ "dev": true
+ },
+ "combined-stream": {
+ "version": "1.0.5",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "delayed-stream": "1.0.0"
+ },
+ "dependencies": {
+ "delayed-stream": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "extend": {
+ "version": "3.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "forever-agent": {
+ "version": "0.6.1",
+ "bundled": true,
+ "dev": true
+ },
+ "form-data": {
+ "version": "1.0.0-rc4",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "async": "1.5.2",
+ "combined-stream": "1.0.5",
+ "mime-types": "2.1.11"
+ },
+ "dependencies": {
+ "async": {
+ "version": "1.5.2",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "har-validator": {
+ "version": "2.0.6",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "chalk": "1.1.3",
+ "commander": "2.9.0",
+ "is-my-json-valid": "2.13.1",
+ "pinkie-promise": "2.0.1"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "1.1.3",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "2.2.1",
+ "bundled": true,
+ "dev": true
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "bundled": true,
+ "dev": true
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "commander": {
+ "version": "2.9.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "graceful-readlink": "1.0.1"
+ },
+ "dependencies": {
+ "graceful-readlink": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "is-my-json-valid": {
+ "version": "2.13.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "generate-function": "2.0.0",
+ "generate-object-property": "1.2.0",
+ "jsonpointer": "2.0.0",
+ "xtend": "4.0.1"
+ },
+ "dependencies": {
+ "generate-function": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "generate-object-property": {
+ "version": "1.2.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "is-property": "1.0.2"
+ },
+ "dependencies": {
+ "is-property": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "jsonpointer": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "xtend": {
+ "version": "4.0.1",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "pinkie-promise": {
+ "version": "2.0.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "pinkie": "2.0.4"
+ },
+ "dependencies": {
+ "pinkie": {
+ "version": "2.0.4",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "hawk": {
+ "version": "3.1.3",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "boom": "2.10.1",
+ "cryptiles": "2.0.5",
+ "hoek": "2.16.3",
+ "sntp": "1.0.9"
+ },
+ "dependencies": {
+ "boom": {
+ "version": "2.10.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "hoek": "2.16.3"
+ }
+ },
+ "cryptiles": {
+ "version": "2.0.5",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "boom": "2.10.1"
+ }
+ },
+ "hoek": {
+ "version": "2.16.3",
+ "bundled": true,
+ "dev": true
+ },
+ "sntp": {
+ "version": "1.0.9",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "hoek": "2.16.3"
+ }
+ }
+ }
+ },
+ "http-signature": {
+ "version": "1.1.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "assert-plus": "0.2.0",
+ "jsprim": "1.3.0",
+ "sshpk": "1.9.2"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "0.2.0",
+ "bundled": true,
+ "dev": true
+ },
+ "jsprim": {
+ "version": "1.3.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "extsprintf": "1.0.2",
+ "json-schema": "0.2.2",
+ "verror": "1.3.6"
+ },
+ "dependencies": {
+ "extsprintf": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true
+ },
+ "json-schema": {
+ "version": "0.2.2",
+ "bundled": true,
+ "dev": true
+ },
+ "verror": {
+ "version": "1.3.6",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "extsprintf": "1.0.2"
+ }
+ }
+ }
+ },
+ "sshpk": {
+ "version": "1.9.2",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "asn1": "0.2.3",
+ "assert-plus": "1.0.0",
+ "dashdash": "1.14.0",
+ "ecc-jsbn": "0.1.1",
+ "getpass": "0.1.6",
+ "jodid25519": "1.0.2",
+ "jsbn": "0.1.0",
+ "tweetnacl": "0.13.3"
+ },
+ "dependencies": {
+ "asn1": {
+ "version": "0.2.3",
+ "bundled": true,
+ "dev": true
+ },
+ "assert-plus": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "dashdash": {
+ "version": "1.14.0",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "assert-plus": "1.0.0"
+ }
+ },
+ "ecc-jsbn": {
+ "version": "0.1.1",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "jsbn": "0.1.0"
+ }
+ },
+ "getpass": {
+ "version": "0.1.6",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "assert-plus": "1.0.0"
+ }
+ },
+ "jodid25519": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "jsbn": "0.1.0"
+ }
+ },
+ "jsbn": {
+ "version": "0.1.0",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ },
+ "tweetnacl": {
+ "version": "0.13.3",
+ "bundled": true,
+ "dev": true,
+ "optional": true
+ }
+ }
+ }
+ }
+ },
+ "is-typedarray": {
+ "version": "1.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "bundled": true,
+ "dev": true
+ },
+ "json-stringify-safe": {
+ "version": "5.0.1",
+ "bundled": true,
+ "dev": true
+ },
+ "mime-types": {
+ "version": "2.1.11",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "mime-db": "1.23.0"
+ },
+ "dependencies": {
+ "mime-db": {
+ "version": "1.23.0",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "node-uuid": {
+ "version": "1.4.7",
+ "bundled": true,
+ "dev": true
+ },
+ "oauth-sign": {
+ "version": "0.8.2",
+ "bundled": true,
+ "dev": true
+ },
+ "qs": {
+ "version": "6.2.1",
+ "bundled": true,
+ "dev": true
+ },
+ "stringstream": {
+ "version": "0.0.5",
+ "bundled": true,
+ "dev": true
+ },
+ "tough-cookie": {
+ "version": "2.3.1",
+ "bundled": true,
+ "dev": true
+ },
+ "tunnel-agent": {
+ "version": "0.4.3",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "retry": {
+ "version": "0.10.0",
+ "bundled": true,
+ "dev": true
+ },
+ "rimraf": {
+ "version": "2.5.4",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "glob": "7.0.6"
+ }
+ },
+ "semver": {
+ "version": "5.1.0",
+ "bundled": true,
+ "dev": true
+ },
+ "sha": {
+ "version": "2.0.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.6",
+ "readable-stream": "2.0.2"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "2.0.2",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.1",
+ "inherits": "2.0.3",
+ "isarray": "0.0.1",
+ "process-nextick-args": "1.0.3",
+ "string_decoder": "0.10.31",
+ "util-deprecate": "1.0.1"
+ },
+ "dependencies": {
+ "core-util-is": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true
+ },
+ "isarray": {
+ "version": "0.0.1",
+ "bundled": true,
+ "dev": true
+ },
+ "process-nextick-args": {
+ "version": "1.0.3",
+ "bundled": true,
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "bundled": true,
+ "dev": true
+ },
+ "util-deprecate": {
+ "version": "1.0.1",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "slide": {
+ "version": "1.1.6",
+ "bundled": true,
+ "dev": true
+ },
+ "sorted-object": {
+ "version": "2.0.0",
+ "bundled": true,
+ "dev": true
+ },
+ "spdx-license-ids": {
+ "version": "1.2.2",
+ "bundled": true,
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.0.0"
+ }
+ },
+ "tar": {
+ "version": "2.2.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "block-stream": "0.0.9",
+ "fstream": "1.0.10",
+ "inherits": "2.0.3"
+ }
+ },
+ "text-table": {
+ "version": "0.2.0",
+ "bundled": true,
+ "dev": true
+ },
+ "uid-number": {
+ "version": "0.0.6",
+ "bundled": true,
+ "dev": true
+ },
+ "umask": {
+ "version": "1.1.0",
+ "bundled": true,
+ "dev": true
+ },
+ "validate-npm-package-license": {
+ "version": "3.0.1",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "spdx-correct": "1.0.2",
+ "spdx-expression-parse": "1.0.2"
+ },
+ "dependencies": {
+ "spdx-correct": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "spdx-license-ids": "1.2.2"
+ }
+ },
+ "spdx-expression-parse": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "spdx-exceptions": "1.0.4",
+ "spdx-license-ids": "1.2.2"
+ },
+ "dependencies": {
+ "spdx-exceptions": {
+ "version": "1.0.4",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ }
+ }
+ },
+ "validate-npm-package-name": {
+ "version": "2.2.2",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "builtins": "0.0.7"
+ },
+ "dependencies": {
+ "builtins": {
+ "version": "0.0.7",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "which": {
+ "version": "1.2.11",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "isexe": "1.1.2"
+ },
+ "dependencies": {
+ "isexe": {
+ "version": "1.1.2",
+ "bundled": true,
+ "dev": true
+ }
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "bundled": true,
+ "dev": true
+ },
+ "write-file-atomic": {
+ "version": "1.1.4",
+ "bundled": true,
+ "dev": true,
+ "requires": {
+ "graceful-fs": "4.1.6",
+ "imurmurhash": "0.1.4",
+ "slide": "1.1.6"
+ }
+ }
+ }
+ },
+ "semver": {
+ "version": "4.3.6",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz",
+ "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=",
+ "dev": true
+ }
+ }
+ },
+ "nth-check": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz",
+ "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=",
+ "dev": true,
+ "requires": {
+ "boolbase": "1.0.0"
+ }
+ },
+ "nwmatcher": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/nwmatcher/-/nwmatcher-1.4.1.tgz",
+ "integrity": "sha1-eumwew6oBNt+JfBctf5Al9TklJ8=",
+ "dev": true,
+ "optional": true
+ },
+ "oauth-sign": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz",
+ "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=",
+ "dev": true,
+ "optional": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "optimist": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
+ "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
+ "dev": true,
+ "requires": {
+ "minimist": "0.0.10",
+ "wordwrap": "0.0.3"
+ }
+ },
+ "optionator": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "deep-is": "0.1.3",
+ "fast-levenshtein": "2.0.6",
+ "levn": "0.3.0",
+ "prelude-ls": "1.1.2",
+ "type-check": "0.3.2",
+ "wordwrap": "1.0.0"
+ },
+ "dependencies": {
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "os-homedir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
+ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
+ "dev": true
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
+ "dev": true
+ },
+ "parse5": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-1.5.1.tgz",
+ "integrity": "sha1-m387DeMr543CQBsXVzzK8Pb1nZQ=",
+ "dev": true,
+ "optional": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "performance-now": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz",
+ "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=",
+ "dev": true,
+ "optional": true
+ },
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ },
+ "pinkie": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+ "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
+ "dev": true
+ },
+ "pinkie-promise": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+ "dev": true,
+ "requires": {
+ "pinkie": "2.0.4"
+ }
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "dev": true
+ },
+ "punycode": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
+ "dev": true
+ },
+ "q": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.5.0.tgz",
+ "integrity": "sha1-3QG6ydBtMObyGa7LglPunr3DCPE=",
+ "dev": true
+ },
+ "q-plus": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/q-plus/-/q-plus-0.0.8.tgz",
+ "integrity": "sha1-TMZssZvRRbQ+nhtUAjYUI3e2Hqs=",
+ "dev": true,
+ "requires": {
+ "q": "1.5.0"
+ }
+ },
+ "qs": {
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz",
+ "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=",
+ "dev": true,
+ "optional": true
+ },
+ "readable-stream": {
+ "version": "1.1.14",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
+ "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "0.0.1",
+ "string_decoder": "0.10.31"
+ }
+ },
+ "request": {
+ "version": "2.81.0",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz",
+ "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "aws-sign2": "0.6.0",
+ "aws4": "1.6.0",
+ "caseless": "0.12.0",
+ "combined-stream": "1.0.5",
+ "extend": "3.0.1",
+ "forever-agent": "0.6.1",
+ "form-data": "2.1.4",
+ "har-validator": "4.2.1",
+ "hawk": "3.1.3",
+ "http-signature": "1.1.1",
+ "is-typedarray": "1.0.0",
+ "isstream": "0.1.2",
+ "json-stringify-safe": "5.0.1",
+ "mime-types": "2.1.17",
+ "oauth-sign": "0.8.2",
+ "performance-now": "0.2.0",
+ "qs": "6.4.0",
+ "safe-buffer": "5.1.1",
+ "stringstream": "0.0.5",
+ "tough-cookie": "2.3.2",
+ "tunnel-agent": "0.6.0",
+ "uuid": "3.1.0"
+ }
+ },
+ "rimraf": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz",
+ "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=",
+ "dev": true,
+ "requires": {
+ "glob": "7.1.2"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
+ "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==",
+ "dev": true
+ },
+ "sax": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
+ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
+ "dev": true,
+ "optional": true
+ },
+ "semver": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
+ "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=",
+ "dev": true
+ },
+ "sntp": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz",
+ "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "hoek": "2.16.3"
+ }
+ },
+ "source-map": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz",
+ "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "amdefine": "1.0.1"
+ }
+ },
+ "sshpk": {
+ "version": "1.13.1",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz",
+ "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "asn1": "0.2.3",
+ "assert-plus": "1.0.0",
+ "bcrypt-pbkdf": "1.0.1",
+ "dashdash": "1.14.1",
+ "ecc-jsbn": "0.1.1",
+ "getpass": "0.1.7",
+ "jsbn": "0.1.1",
+ "tweetnacl": "0.14.5"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ },
+ "stringstream": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz",
+ "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=",
+ "dev": true,
+ "optional": true
+ },
+ "symbol-tree": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.2.tgz",
+ "integrity": "sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=",
+ "dev": true,
+ "optional": true
+ },
+ "tmp": {
+ "version": "0.0.31",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz",
+ "integrity": "sha1-jzirlDjhcxXl29izZX6L+yd65Kc=",
+ "dev": true,
+ "requires": {
+ "os-tmpdir": "1.0.2"
+ }
+ },
+ "tough-cookie": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz",
+ "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=",
+ "dev": true,
+ "requires": {
+ "punycode": "1.4.1"
+ }
+ },
+ "tr46": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
+ "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=",
+ "dev": true,
+ "optional": true
+ },
+ "tunnel-agent": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+ "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "safe-buffer": "5.1.1"
+ }
+ },
+ "tweetnacl": {
+ "version": "0.14.5",
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
+ "dev": true,
+ "optional": true
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "1.1.2"
+ }
+ },
+ "universalify": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz",
+ "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=",
+ "dev": true
+ },
+ "user-home": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz",
+ "integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=",
+ "dev": true,
+ "requires": {
+ "os-homedir": "1.0.2"
+ }
+ },
+ "uuid": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz",
+ "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==",
+ "dev": true,
+ "optional": true
+ },
+ "verror": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
+ "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "assert-plus": "1.0.0",
+ "core-util-is": "1.0.2",
+ "extsprintf": "1.3.0"
+ },
+ "dependencies": {
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true,
+ "optional": true
+ }
+ }
+ },
+ "webidl-conversions": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-2.0.1.tgz",
+ "integrity": "sha1-O/glj30xjHRDw28uFpQCoaZwNQY=",
+ "dev": true,
+ "optional": true
+ },
+ "whatwg-url-compat": {
+ "version": "0.6.5",
+ "resolved": "https://registry.npmjs.org/whatwg-url-compat/-/whatwg-url-compat-0.6.5.tgz",
+ "integrity": "sha1-AImBEa9om7CXVBzVpFymyHmERb8=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "tr46": "0.0.3"
+ }
+ },
+ "wordwrap": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
+ "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=",
+ "dev": true
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ },
+ "xml-name-validator": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-2.0.1.tgz",
+ "integrity": "sha1-TYuPHszTQZqjYgYb7O9RXh5VljU=",
+ "dev": true,
+ "optional": true
+ }
+ }
+}