",
+
+ options: {
+ classes: {},
+ disabled: false,
+
+ // Callbacks
+ create: null
+ },
+
+ _createWidget: function( options, element ) {
+ element = $( element || this.defaultElement || this )[ 0 ];
+ this.element = $( element );
+ this.uuid = widgetUuid++;
+ this.eventNamespace = "." + this.widgetName + this.uuid;
+
+ this.bindings = $();
+ this.hoverable = $();
+ this.focusable = $();
+ this.classesElementLookup = {};
+
+ 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();
+
+ if ( this.options.disabled ) {
+ this._setOptionDisabled( this.options.disabled );
+ }
+
+ this._trigger( "create", null, this._getCreateEventData() );
+ this._init();
+ },
+
+ _getCreateOptions: function() {
+ return {};
+ },
+
+ _getCreateEventData: $.noop,
+
+ _create: $.noop,
+
+ _init: $.noop,
+
+ destroy: function() {
+ var that = this;
+
+ this._destroy();
+ $.each( this.classesElementLookup, function( key, value ) {
+ that._removeClass( value, key );
+ } );
+
+ // We can probably remove the unbind calls in 2.0
+ // all event bindings should go through this._on()
+ this.element
+ .off( this.eventNamespace )
+ .removeData( this.widgetFullName );
+ this.widget()
+ .off( this.eventNamespace )
+ .removeAttr( "aria-disabled" );
+
+ // Clean up events and states
+ this.bindings.off( this.eventNamespace );
+ },
+
+ _destroy: $.noop,
+
+ widget: function() {
+ return this.element;
+ },
+
+ option: function( key, value ) {
+ var options = key;
+ var parts;
+ var curOption;
+ var 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 ) {
+ if ( key === "classes" ) {
+ this._setOptionClasses( value );
+ }
+
+ this.options[ key ] = value;
+
+ if ( key === "disabled" ) {
+ this._setOptionDisabled( value );
+ }
+
+ return this;
+ },
+
+ _setOptionClasses: function( value ) {
+ var classKey, elements, currentElements;
+
+ for ( classKey in value ) {
+ currentElements = this.classesElementLookup[ classKey ];
+ if ( value[ classKey ] === this.options.classes[ classKey ] ||
+ !currentElements ||
+ !currentElements.length ) {
+ continue;
+ }
+
+ // We are doing this to create a new jQuery object because the _removeClass() call
+ // on the next line is going to destroy the reference to the current elements being
+ // tracked. We need to save a copy of this collection so that we can add the new classes
+ // below.
+ elements = $( currentElements.get() );
+ this._removeClass( currentElements, classKey );
+
+ // We don't use _addClass() here, because that uses this.options.classes
+ // for generating the string of classes. We want to use the value passed in from
+ // _setOption(), this is the new value of the classes option which was passed to
+ // _setOption(). We pass this value directly to _classes().
+ elements.addClass( this._classes( {
+ element: elements,
+ keys: classKey,
+ classes: value,
+ add: true
+ } ) );
+ }
+ },
+
+ _setOptionDisabled: function( value ) {
+ this._toggleClass( this.widget(), this.widgetFullName + "-disabled", null, !!value );
+
+ // If the widget is becoming disabled, then nothing is interactive
+ if ( value ) {
+ this._removeClass( this.hoverable, null, "ui-state-hover" );
+ this._removeClass( this.focusable, null, "ui-state-focus" );
+ }
+ },
+
+ enable: function() {
+ return this._setOptions( { disabled: false } );
+ },
+
+ disable: function() {
+ return this._setOptions( { disabled: true } );
+ },
+
+ _classes: function( options ) {
+ var full = [];
+ var that = this;
+
+ options = $.extend( {
+ element: this.element,
+ classes: this.options.classes || {}
+ }, options );
+
+ function processClassString( classes, checkOption ) {
+ var current, i;
+ for ( i = 0; i < classes.length; i++ ) {
+ current = that.classesElementLookup[ classes[ i ] ] || $();
+ if ( options.add ) {
+ current = $( $.unique( current.get().concat( options.element.get() ) ) );
+ } else {
+ current = $( current.not( options.element ).get() );
+ }
+ that.classesElementLookup[ classes[ i ] ] = current;
+ full.push( classes[ i ] );
+ if ( checkOption && options.classes[ classes[ i ] ] ) {
+ full.push( options.classes[ classes[ i ] ] );
+ }
+ }
+ }
+
+ this._on( options.element, {
+ "remove": "_untrackClassesElement"
+ } );
+
+ if ( options.keys ) {
+ processClassString( options.keys.match( /\S+/g ) || [], true );
+ }
+ if ( options.extra ) {
+ processClassString( options.extra.match( /\S+/g ) || [] );
+ }
+
+ return full.join( " " );
+ },
+
+ _untrackClassesElement: function( event ) {
+ var that = this;
+ $.each( that.classesElementLookup, function( key, value ) {
+ if ( $.inArray( event.target, value ) !== -1 ) {
+ that.classesElementLookup[ key ] = $( value.not( event.target ).get() );
+ }
+ } );
+ },
+
+ _removeClass: function( element, keys, extra ) {
+ return this._toggleClass( element, keys, extra, false );
+ },
+
+ _addClass: function( element, keys, extra ) {
+ return this._toggleClass( element, keys, extra, true );
+ },
+
+ _toggleClass: function( element, keys, extra, add ) {
+ add = ( typeof add === "boolean" ) ? add : extra;
+ var shift = ( typeof element === "string" || element === null ),
+ options = {
+ extra: shift ? keys : extra,
+ keys: shift ? element : keys,
+ element: shift ? this.element : element,
+ add: add
+ };
+ options.element.toggleClass( this._classes( options ), add );
+ return this;
+ },
+
+ _on: function( suppressDisabledCheck, element, handlers ) {
+ var delegateElement;
+ var 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*(.*)$/ );
+ var eventName = match[ 1 ] + instance.eventNamespace;
+ var selector = match[ 2 ];
+
+ if ( selector ) {
+ delegateElement.on( eventName, selector, handlerProxy );
+ } else {
+ element.on( eventName, handlerProxy );
+ }
+ } );
+ },
+
+ _off: function( element, eventName ) {
+ eventName = ( eventName || "" ).split( " " ).join( this.eventNamespace + " " ) +
+ this.eventNamespace;
+ element.off( eventName ).off( 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 ) {
+ this._addClass( $( event.currentTarget ), null, "ui-state-hover" );
+ },
+ mouseleave: function( event ) {
+ this._removeClass( $( event.currentTarget ), null, "ui-state-hover" );
+ }
+ } );
+ },
+
+ _focusable: function( element ) {
+ this.focusable = this.focusable.add( element );
+ this._on( element, {
+ focusin: function( event ) {
+ this._addClass( $( event.currentTarget ), null, "ui-state-focus" );
+ },
+ focusout: function( event ) {
+ this._removeClass( $( event.currentTarget ), null, "ui-state-focus" );
+ }
+ } );
+ },
+
+ _trigger: function( type, event, data ) {
+ var prop, orig;
+ var 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;
+ var 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 Position 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/position/
+ */
+
+//>>label: Position
+//>>group: Core
+//>>description: Positions elements relative to other elements.
+//>>docs: http://api.jqueryui.com/position/
+//>>demos: http://jqueryui.com/position/
+
+
+( function() {
+var cachedScrollbarWidth,
+ max = Math.max,
+ abs = Math.abs,
+ rhorizontal = /left|center|right/,
+ rvertical = /top|center|bottom/,
+ roffset = /[\+\-]\d+(\.[\d]+)?%?/,
+ rposition = /^\w+/,
+ rpercent = /%$/,
+ _position = $.fn.position;
+
+function getOffsets( offsets, width, height ) {
+ return [
+ parseFloat( offsets[ 0 ] ) * ( rpercent.test( offsets[ 0 ] ) ? width / 100 : 1 ),
+ parseFloat( offsets[ 1 ] ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 )
+ ];
+}
+
+function parseCss( element, property ) {
+ return parseInt( $.css( element, property ), 10 ) || 0;
+}
+
+function getDimensions( elem ) {
+ var raw = elem[ 0 ];
+ if ( raw.nodeType === 9 ) {
+ return {
+ width: elem.width(),
+ height: elem.height(),
+ offset: { top: 0, left: 0 }
+ };
+ }
+ if ( $.isWindow( raw ) ) {
+ return {
+ width: elem.width(),
+ height: elem.height(),
+ offset: { top: elem.scrollTop(), left: elem.scrollLeft() }
+ };
+ }
+ if ( raw.preventDefault ) {
+ return {
+ width: 0,
+ height: 0,
+ offset: { top: raw.pageY, left: raw.pageX }
+ };
+ }
+ return {
+ width: elem.outerWidth(),
+ height: elem.outerHeight(),
+ offset: elem.offset()
+ };
+}
+
+$.position = $.position || {
+ scrollbarWidth: function() {
+ if ( cachedScrollbarWidth !== undefined ) {
+ return cachedScrollbarWidth;
+ }
+ var w1, w2,
+ div = $( "
" ),
+ innerDiv = div.children()[ 0 ];
+
+ $( "body" ).append( div );
+ w1 = innerDiv.offsetWidth;
+ div.css( "overflow", "scroll" );
+
+ w2 = innerDiv.offsetWidth;
+
+ if ( w1 === w2 ) {
+ w2 = div[ 0 ].clientWidth;
+ }
+
+ div.remove();
+
+ return ( cachedScrollbarWidth = w1 - w2 );
+ },
+ getScrollInfo: function( within ) {
+ var overflowX = within.isWindow || within.isDocument ? "" :
+ within.element.css( "overflow-x" ),
+ overflowY = within.isWindow || within.isDocument ? "" :
+ within.element.css( "overflow-y" ),
+ hasOverflowX = overflowX === "scroll" ||
+ ( overflowX === "auto" && within.width < within.element[ 0 ].scrollWidth ),
+ hasOverflowY = overflowY === "scroll" ||
+ ( overflowY === "auto" && within.height < within.element[ 0 ].scrollHeight );
+ return {
+ width: hasOverflowY ? $.position.scrollbarWidth() : 0,
+ height: hasOverflowX ? $.position.scrollbarWidth() : 0
+ };
+ },
+ getWithinInfo: function( element ) {
+ var withinElement = $( element || window ),
+ isWindow = $.isWindow( withinElement[ 0 ] ),
+ isDocument = !!withinElement[ 0 ] && withinElement[ 0 ].nodeType === 9,
+ hasOffset = !isWindow && !isDocument;
+ return {
+ element: withinElement,
+ isWindow: isWindow,
+ isDocument: isDocument,
+ offset: hasOffset ? $( element ).offset() : { left: 0, top: 0 },
+ scrollLeft: withinElement.scrollLeft(),
+ scrollTop: withinElement.scrollTop(),
+ width: withinElement.outerWidth(),
+ height: withinElement.outerHeight()
+ };
+ }
+};
+
+$.fn.position = function( options ) {
+ if ( !options || !options.of ) {
+ return _position.apply( this, arguments );
+ }
+
+ // Make a copy, we don't want to modify arguments
+ options = $.extend( {}, options );
+
+ var atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions,
+ target = $( options.of ),
+ within = $.position.getWithinInfo( options.within ),
+ scrollInfo = $.position.getScrollInfo( within ),
+ collision = ( options.collision || "flip" ).split( " " ),
+ offsets = {};
+
+ dimensions = getDimensions( target );
+ if ( target[ 0 ].preventDefault ) {
+
+ // Force left top to allow flipping
+ options.at = "left top";
+ }
+ targetWidth = dimensions.width;
+ targetHeight = dimensions.height;
+ targetOffset = dimensions.offset;
+
+ // Clone to reuse original targetOffset later
+ basePosition = $.extend( {}, targetOffset );
+
+ // Force my and at to have valid horizontal and vertical positions
+ // if a value is missing or invalid, it will be converted to center
+ $.each( [ "my", "at" ], function() {
+ var pos = ( options[ this ] || "" ).split( " " ),
+ horizontalOffset,
+ verticalOffset;
+
+ if ( pos.length === 1 ) {
+ pos = rhorizontal.test( pos[ 0 ] ) ?
+ pos.concat( [ "center" ] ) :
+ rvertical.test( pos[ 0 ] ) ?
+ [ "center" ].concat( pos ) :
+ [ "center", "center" ];
+ }
+ pos[ 0 ] = rhorizontal.test( pos[ 0 ] ) ? pos[ 0 ] : "center";
+ pos[ 1 ] = rvertical.test( pos[ 1 ] ) ? pos[ 1 ] : "center";
+
+ // Calculate offsets
+ horizontalOffset = roffset.exec( pos[ 0 ] );
+ verticalOffset = roffset.exec( pos[ 1 ] );
+ offsets[ this ] = [
+ horizontalOffset ? horizontalOffset[ 0 ] : 0,
+ verticalOffset ? verticalOffset[ 0 ] : 0
+ ];
+
+ // Reduce to just the positions without the offsets
+ options[ this ] = [
+ rposition.exec( pos[ 0 ] )[ 0 ],
+ rposition.exec( pos[ 1 ] )[ 0 ]
+ ];
+ } );
+
+ // Normalize collision option
+ if ( collision.length === 1 ) {
+ collision[ 1 ] = collision[ 0 ];
+ }
+
+ if ( options.at[ 0 ] === "right" ) {
+ basePosition.left += targetWidth;
+ } else if ( options.at[ 0 ] === "center" ) {
+ basePosition.left += targetWidth / 2;
+ }
+
+ if ( options.at[ 1 ] === "bottom" ) {
+ basePosition.top += targetHeight;
+ } else if ( options.at[ 1 ] === "center" ) {
+ basePosition.top += targetHeight / 2;
+ }
+
+ atOffset = getOffsets( offsets.at, targetWidth, targetHeight );
+ basePosition.left += atOffset[ 0 ];
+ basePosition.top += atOffset[ 1 ];
+
+ return this.each( function() {
+ var collisionPosition, using,
+ elem = $( this ),
+ elemWidth = elem.outerWidth(),
+ elemHeight = elem.outerHeight(),
+ marginLeft = parseCss( this, "marginLeft" ),
+ marginTop = parseCss( this, "marginTop" ),
+ collisionWidth = elemWidth + marginLeft + parseCss( this, "marginRight" ) +
+ scrollInfo.width,
+ collisionHeight = elemHeight + marginTop + parseCss( this, "marginBottom" ) +
+ scrollInfo.height,
+ position = $.extend( {}, basePosition ),
+ myOffset = getOffsets( offsets.my, elem.outerWidth(), elem.outerHeight() );
+
+ if ( options.my[ 0 ] === "right" ) {
+ position.left -= elemWidth;
+ } else if ( options.my[ 0 ] === "center" ) {
+ position.left -= elemWidth / 2;
+ }
+
+ if ( options.my[ 1 ] === "bottom" ) {
+ position.top -= elemHeight;
+ } else if ( options.my[ 1 ] === "center" ) {
+ position.top -= elemHeight / 2;
+ }
+
+ position.left += myOffset[ 0 ];
+ position.top += myOffset[ 1 ];
+
+ collisionPosition = {
+ marginLeft: marginLeft,
+ marginTop: marginTop
+ };
+
+ $.each( [ "left", "top" ], function( i, dir ) {
+ if ( $.ui.position[ collision[ i ] ] ) {
+ $.ui.position[ collision[ i ] ][ dir ]( position, {
+ targetWidth: targetWidth,
+ targetHeight: targetHeight,
+ elemWidth: elemWidth,
+ elemHeight: elemHeight,
+ collisionPosition: collisionPosition,
+ collisionWidth: collisionWidth,
+ collisionHeight: collisionHeight,
+ offset: [ atOffset[ 0 ] + myOffset[ 0 ], atOffset [ 1 ] + myOffset[ 1 ] ],
+ my: options.my,
+ at: options.at,
+ within: within,
+ elem: elem
+ } );
+ }
+ } );
+
+ if ( options.using ) {
+
+ // Adds feedback as second argument to using callback, if present
+ using = function( props ) {
+ var left = targetOffset.left - position.left,
+ right = left + targetWidth - elemWidth,
+ top = targetOffset.top - position.top,
+ bottom = top + targetHeight - elemHeight,
+ feedback = {
+ target: {
+ element: target,
+ left: targetOffset.left,
+ top: targetOffset.top,
+ width: targetWidth,
+ height: targetHeight
+ },
+ element: {
+ element: elem,
+ left: position.left,
+ top: position.top,
+ width: elemWidth,
+ height: elemHeight
+ },
+ horizontal: right < 0 ? "left" : left > 0 ? "right" : "center",
+ vertical: bottom < 0 ? "top" : top > 0 ? "bottom" : "middle"
+ };
+ if ( targetWidth < elemWidth && abs( left + right ) < targetWidth ) {
+ feedback.horizontal = "center";
+ }
+ if ( targetHeight < elemHeight && abs( top + bottom ) < targetHeight ) {
+ feedback.vertical = "middle";
+ }
+ if ( max( abs( left ), abs( right ) ) > max( abs( top ), abs( bottom ) ) ) {
+ feedback.important = "horizontal";
+ } else {
+ feedback.important = "vertical";
+ }
+ options.using.call( this, props, feedback );
+ };
+ }
+
+ elem.offset( $.extend( position, { using: using } ) );
+ } );
+};
+
+$.ui.position = {
+ fit: {
+ left: function( position, data ) {
+ var within = data.within,
+ withinOffset = within.isWindow ? within.scrollLeft : within.offset.left,
+ outerWidth = within.width,
+ collisionPosLeft = position.left - data.collisionPosition.marginLeft,
+ overLeft = withinOffset - collisionPosLeft,
+ overRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset,
+ newOverRight;
+
+ // Element is wider than within
+ if ( data.collisionWidth > outerWidth ) {
+
+ // Element is initially over the left side of within
+ if ( overLeft > 0 && overRight <= 0 ) {
+ newOverRight = position.left + overLeft + data.collisionWidth - outerWidth -
+ withinOffset;
+ position.left += overLeft - newOverRight;
+
+ // Element is initially over right side of within
+ } else if ( overRight > 0 && overLeft <= 0 ) {
+ position.left = withinOffset;
+
+ // Element is initially over both left and right sides of within
+ } else {
+ if ( overLeft > overRight ) {
+ position.left = withinOffset + outerWidth - data.collisionWidth;
+ } else {
+ position.left = withinOffset;
+ }
+ }
+
+ // Too far left -> align with left edge
+ } else if ( overLeft > 0 ) {
+ position.left += overLeft;
+
+ // Too far right -> align with right edge
+ } else if ( overRight > 0 ) {
+ position.left -= overRight;
+
+ // Adjust based on position and margin
+ } else {
+ position.left = max( position.left - collisionPosLeft, position.left );
+ }
+ },
+ top: function( position, data ) {
+ var within = data.within,
+ withinOffset = within.isWindow ? within.scrollTop : within.offset.top,
+ outerHeight = data.within.height,
+ collisionPosTop = position.top - data.collisionPosition.marginTop,
+ overTop = withinOffset - collisionPosTop,
+ overBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset,
+ newOverBottom;
+
+ // Element is taller than within
+ if ( data.collisionHeight > outerHeight ) {
+
+ // Element is initially over the top of within
+ if ( overTop > 0 && overBottom <= 0 ) {
+ newOverBottom = position.top + overTop + data.collisionHeight - outerHeight -
+ withinOffset;
+ position.top += overTop - newOverBottom;
+
+ // Element is initially over bottom of within
+ } else if ( overBottom > 0 && overTop <= 0 ) {
+ position.top = withinOffset;
+
+ // Element is initially over both top and bottom of within
+ } else {
+ if ( overTop > overBottom ) {
+ position.top = withinOffset + outerHeight - data.collisionHeight;
+ } else {
+ position.top = withinOffset;
+ }
+ }
+
+ // Too far up -> align with top
+ } else if ( overTop > 0 ) {
+ position.top += overTop;
+
+ // Too far down -> align with bottom edge
+ } else if ( overBottom > 0 ) {
+ position.top -= overBottom;
+
+ // Adjust based on position and margin
+ } else {
+ position.top = max( position.top - collisionPosTop, position.top );
+ }
+ }
+ },
+ flip: {
+ left: function( position, data ) {
+ var within = data.within,
+ withinOffset = within.offset.left + within.scrollLeft,
+ outerWidth = within.width,
+ offsetLeft = within.isWindow ? within.scrollLeft : within.offset.left,
+ collisionPosLeft = position.left - data.collisionPosition.marginLeft,
+ overLeft = collisionPosLeft - offsetLeft,
+ overRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft,
+ myOffset = data.my[ 0 ] === "left" ?
+ -data.elemWidth :
+ data.my[ 0 ] === "right" ?
+ data.elemWidth :
+ 0,
+ atOffset = data.at[ 0 ] === "left" ?
+ data.targetWidth :
+ data.at[ 0 ] === "right" ?
+ -data.targetWidth :
+ 0,
+ offset = -2 * data.offset[ 0 ],
+ newOverRight,
+ newOverLeft;
+
+ if ( overLeft < 0 ) {
+ newOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth -
+ outerWidth - withinOffset;
+ if ( newOverRight < 0 || newOverRight < abs( overLeft ) ) {
+ position.left += myOffset + atOffset + offset;
+ }
+ } else if ( overRight > 0 ) {
+ newOverLeft = position.left - data.collisionPosition.marginLeft + myOffset +
+ atOffset + offset - offsetLeft;
+ if ( newOverLeft > 0 || abs( newOverLeft ) < overRight ) {
+ position.left += myOffset + atOffset + offset;
+ }
+ }
+ },
+ top: function( position, data ) {
+ var within = data.within,
+ withinOffset = within.offset.top + within.scrollTop,
+ outerHeight = within.height,
+ offsetTop = within.isWindow ? within.scrollTop : within.offset.top,
+ collisionPosTop = position.top - data.collisionPosition.marginTop,
+ overTop = collisionPosTop - offsetTop,
+ overBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop,
+ top = data.my[ 1 ] === "top",
+ myOffset = top ?
+ -data.elemHeight :
+ data.my[ 1 ] === "bottom" ?
+ data.elemHeight :
+ 0,
+ atOffset = data.at[ 1 ] === "top" ?
+ data.targetHeight :
+ data.at[ 1 ] === "bottom" ?
+ -data.targetHeight :
+ 0,
+ offset = -2 * data.offset[ 1 ],
+ newOverTop,
+ newOverBottom;
+ if ( overTop < 0 ) {
+ newOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight -
+ outerHeight - withinOffset;
+ if ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) {
+ position.top += myOffset + atOffset + offset;
+ }
+ } else if ( overBottom > 0 ) {
+ newOverTop = position.top - data.collisionPosition.marginTop + myOffset + atOffset +
+ offset - offsetTop;
+ if ( newOverTop > 0 || abs( newOverTop ) < overBottom ) {
+ position.top += myOffset + atOffset + offset;
+ }
+ }
+ }
+ },
+ flipfit: {
+ left: function() {
+ $.ui.position.flip.left.apply( this, arguments );
+ $.ui.position.fit.left.apply( this, arguments );
+ },
+ top: function() {
+ $.ui.position.flip.top.apply( this, arguments );
+ $.ui.position.fit.top.apply( this, arguments );
+ }
+ }
+};
+
+} )();
+
+var position = $.ui.position;
+
+
+/*!
+ * jQuery UI Keycode 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: Keycode
+//>>group: Core
+//>>description: Provide keycodes as keynames
+//>>docs: http://api.jqueryui.com/jQuery.ui.keyCode/
+
+
+var keycode = $.ui.keyCode = {
+ BACKSPACE: 8,
+ COMMA: 188,
+ DELETE: 46,
+ DOWN: 40,
+ END: 35,
+ ENTER: 13,
+ ESCAPE: 27,
+ HOME: 36,
+ LEFT: 37,
+ PAGE_DOWN: 34,
+ PAGE_UP: 33,
+ PERIOD: 190,
+ RIGHT: 39,
+ SPACE: 32,
+ TAB: 9,
+ UP: 38
+};
+
+
+/*!
+ * jQuery UI Scroll Parent 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: scrollParent
+//>>group: Core
+//>>description: Get the closest ancestor element that is scrollable.
+//>>docs: http://api.jqueryui.com/scrollParent/
+
+
+
+var scrollParent = $.fn.scrollParent = function( includeHidden ) {
+ var position = this.css( "position" ),
+ excludeStaticParent = position === "absolute",
+ overflowRegex = includeHidden ? /(auto|scroll|hidden)/ : /(auto|scroll)/,
+ scrollParent = this.parents().filter( function() {
+ var parent = $( this );
+ if ( excludeStaticParent && parent.css( "position" ) === "static" ) {
+ return false;
+ }
+ return overflowRegex.test( parent.css( "overflow" ) + parent.css( "overflow-y" ) +
+ parent.css( "overflow-x" ) );
+ } ).eq( 0 );
+
+ return position === "fixed" || !scrollParent.length ?
+ $( this[ 0 ].ownerDocument || document ) :
+ scrollParent;
+};
+
+
+/*!
+ * jQuery UI Unique ID 1.12.1
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: uniqueId
+//>>group: Core
+//>>description: Functions to generate and remove uniqueId's
+//>>docs: http://api.jqueryui.com/uniqueId/
+
+
+
+var uniqueId = $.fn.extend( {
+ uniqueId: ( function() {
+ var uuid = 0;
+
+ return function() {
+ return this.each( function() {
+ if ( !this.id ) {
+ this.id = "ui-id-" + ( ++uuid );
+ }
+ } );
+ };
+ } )(),
+
+ removeUniqueId: function() {
+ return this.each( function() {
+ if ( /^ui-id-\d+$/.test( this.id ) ) {
+ $( this ).removeAttr( "id" );
+ }
+ } );
+ }
+} );
+
+
+}));
diff --git a/conlite/scripts/fancytree/modules/jquery.fancytree.wide.js b/conlite/scripts/fancytree/modules/jquery.fancytree.wide.js
new file mode 100644
index 0000000..779a633
--- /dev/null
+++ b/conlite/scripts/fancytree/modules/jquery.fancytree.wide.js
@@ -0,0 +1,257 @@
+/*!
+ * jquery.fancytree.wide.js
+ * Support for 100% wide selection bars.
+ * (Extension module for jquery.fancytree.js: https://github.com/mar10/fancytree/)
+ *
+ * Copyright (c) 2008-2021, Martin Wendt (https://wwWendt.de)
+ *
+ * Released under the MIT license
+ * https://github.com/mar10/fancytree/wiki/LicenseInfo
+ *
+ * @version 2.38.0
+ * @date 2021-02-09T20:03:49Z
+ */
+
+(function(factory) {
+ if (typeof define === "function" && define.amd) {
+ // AMD. Register as an anonymous module.
+ define(["jquery", "./jquery.fancytree"], factory);
+ } else if (typeof module === "object" && module.exports) {
+ // Node/CommonJS
+ require("./jquery.fancytree");
+ module.exports = factory(require("jquery"));
+ } else {
+ // Browser globals
+ factory(jQuery);
+ }
+})(function($) {
+ "use strict";
+
+ var reNumUnit = /^([+-]?(?:\d+|\d*\.\d+))([a-z]*|%)$/; // split "1.5em" to ["1.5", "em"]
+
+ /*******************************************************************************
+ * Private functions and variables
+ */
+ // var _assert = $.ui.fancytree.assert;
+
+ /* Calculate inner width without scrollbar */
+ // function realInnerWidth($el) {
+ // // http://blog.jquery.com/2012/08/16/jquery-1-8-box-sizing-width-csswidth-and-outerwidth/
+ // // inst.contWidth = parseFloat(this.$container.css("width"), 10);
+ // // 'Client width without scrollbar' - 'padding'
+ // return $el[0].clientWidth - ($el.innerWidth() - parseFloat($el.css("width"), 10));
+ // }
+
+ /* Create a global embedded CSS style for the tree. */
+ function defineHeadStyleElement(id, cssText) {
+ id = "fancytree-style-" + id;
+ var $headStyle = $("#" + id);
+
+ if (!cssText) {
+ $headStyle.remove();
+ return null;
+ }
+ if (!$headStyle.length) {
+ $headStyle = $("")
+ .attr("id", id)
+ .addClass("fancytree-style")
+ .prop("type", "text/css")
+ .appendTo("head");
+ }
+ try {
+ $headStyle.html(cssText);
+ } catch (e) {
+ // fix for IE 6-8
+ $headStyle[0].styleSheet.cssText = cssText;
+ }
+ return $headStyle;
+ }
+
+ /* Calculate the CSS rules that indent title spans. */
+ function renderLevelCss(
+ containerId,
+ depth,
+ levelOfs,
+ lineOfs,
+ labelOfs,
+ measureUnit
+ ) {
+ var i,
+ prefix = "#" + containerId + " span.fancytree-level-",
+ rules = [];
+
+ for (i = 0; i < depth; i++) {
+ rules.push(
+ prefix +
+ (i + 1) +
+ " span.fancytree-title { padding-left: " +
+ (i * levelOfs + lineOfs) +
+ measureUnit +
+ "; }"
+ );
+ }
+ // Some UI animations wrap the UL inside a DIV and set position:relative on both.
+ // This breaks the left:0 and padding-left:nn settings of the title
+ rules.push(
+ "#" +
+ containerId +
+ " div.ui-effects-wrapper ul li span.fancytree-title, " +
+ "#" +
+ containerId +
+ " li.fancytree-animating span.fancytree-title " + // #716
+ "{ padding-left: " +
+ labelOfs +
+ measureUnit +
+ "; position: static; width: auto; }"
+ );
+ return rules.join("\n");
+ }
+
+ // /**
+ // * [ext-wide] Recalculate the width of the selection bar after the tree container
+ // * was resized.
+ // * May be called explicitly on container resize, since there is no resize event
+ // * for DIV tags.
+ // *
+ // * @alias Fancytree#wideUpdate
+ // * @requires jquery.fancytree.wide.js
+ // */
+ // $.ui.fancytree._FancytreeClass.prototype.wideUpdate = function(){
+ // var inst = this.ext.wide,
+ // prevCw = inst.contWidth,
+ // prevLo = inst.lineOfs;
+
+ // inst.contWidth = realInnerWidth(this.$container);
+ // // Each title is precceeded by 2 or 3 icons (16px + 3 margin)
+ // // + 1px title border and 3px title padding
+ // // TODO: use code from treeInit() below
+ // inst.lineOfs = (this.options.checkbox ? 3 : 2) * 19;
+ // if( prevCw !== inst.contWidth || prevLo !== inst.lineOfs ) {
+ // this.debug("wideUpdate: " + inst.contWidth);
+ // this.visit(function(node){
+ // node.tree._callHook("nodeRenderTitle", node);
+ // });
+ // }
+ // };
+
+ /*******************************************************************************
+ * Extension code
+ */
+ $.ui.fancytree.registerExtension({
+ name: "wide",
+ version: "2.38.0",
+ // Default options for this extension.
+ options: {
+ iconWidth: null, // Adjust this if @fancy-icon-width != "16px"
+ iconSpacing: null, // Adjust this if @fancy-icon-spacing != "3px"
+ labelSpacing: null, // Adjust this if padding between icon and label != "3px"
+ levelOfs: null, // Adjust this if ul padding != "16px"
+ },
+
+ treeCreate: function(ctx) {
+ this._superApply(arguments);
+ this.$container.addClass("fancytree-ext-wide");
+
+ var containerId,
+ cssText,
+ iconSpacingUnit,
+ labelSpacingUnit,
+ iconWidthUnit,
+ levelOfsUnit,
+ instOpts = ctx.options.wide,
+ // css sniffing
+ $dummyLI = $(
+ "
"
+ ).appendTo(ctx.tree.$container),
+ $dummyIcon = $dummyLI.find(".fancytree-icon"),
+ $dummyUL = $dummyLI.find("ul"),
+ // $dummyTitle = $dummyLI.find(".fancytree-title"),
+ iconSpacing =
+ instOpts.iconSpacing || $dummyIcon.css("margin-left"),
+ iconWidth = instOpts.iconWidth || $dummyIcon.css("width"),
+ labelSpacing = instOpts.labelSpacing || "3px",
+ levelOfs = instOpts.levelOfs || $dummyUL.css("padding-left");
+
+ $dummyLI.remove();
+
+ iconSpacingUnit = iconSpacing.match(reNumUnit)[2];
+ iconSpacing = parseFloat(iconSpacing, 10);
+ labelSpacingUnit = labelSpacing.match(reNumUnit)[2];
+ labelSpacing = parseFloat(labelSpacing, 10);
+ iconWidthUnit = iconWidth.match(reNumUnit)[2];
+ iconWidth = parseFloat(iconWidth, 10);
+ levelOfsUnit = levelOfs.match(reNumUnit)[2];
+ if (
+ iconSpacingUnit !== iconWidthUnit ||
+ levelOfsUnit !== iconWidthUnit ||
+ labelSpacingUnit !== iconWidthUnit
+ ) {
+ $.error(
+ "iconWidth, iconSpacing, and levelOfs must have the same css measure unit"
+ );
+ }
+ this._local.measureUnit = iconWidthUnit;
+ this._local.levelOfs = parseFloat(levelOfs);
+ this._local.lineOfs =
+ (1 +
+ (ctx.options.checkbox ? 1 : 0) +
+ (ctx.options.icon === false ? 0 : 1)) *
+ (iconWidth + iconSpacing) +
+ iconSpacing;
+ this._local.labelOfs = labelSpacing;
+ this._local.maxDepth = 10;
+
+ // Get/Set a unique Id on the container (if not already exists)
+ containerId = this.$container.uniqueId().attr("id");
+ // Generated css rules for some levels (extended on demand)
+ cssText = renderLevelCss(
+ containerId,
+ this._local.maxDepth,
+ this._local.levelOfs,
+ this._local.lineOfs,
+ this._local.labelOfs,
+ this._local.measureUnit
+ );
+ defineHeadStyleElement(containerId, cssText);
+ },
+ treeDestroy: function(ctx) {
+ // Remove generated css rules
+ defineHeadStyleElement(this.$container.attr("id"), null);
+ return this._superApply(arguments);
+ },
+ nodeRenderStatus: function(ctx) {
+ var containerId,
+ cssText,
+ res,
+ node = ctx.node,
+ level = node.getLevel();
+
+ res = this._super(ctx);
+ // Generate some more level-n rules if required
+ if (level > this._local.maxDepth) {
+ containerId = this.$container.attr("id");
+ this._local.maxDepth *= 2;
+ node.debug(
+ "Define global ext-wide css up to level " +
+ this._local.maxDepth
+ );
+ cssText = renderLevelCss(
+ containerId,
+ this._local.maxDepth,
+ this._local.levelOfs,
+ this._local.lineOfs,
+ this._local.labelSpacing,
+ this._local.measureUnit
+ );
+ defineHeadStyleElement(containerId, cssText);
+ }
+ // Add level-n class to apply indentation padding.
+ // (Setting element style would not work, since it cannot easily be
+ // overriden while animations run)
+ $(node.span).addClass("fancytree-level-" + level);
+ return res;
+ },
+ });
+ // Value returned by `require('jquery.fancytree..')`
+ return $.ui.fancytree;
+}); // End of closure
diff --git a/conlite/scripts/fancytree/skin-common.less b/conlite/scripts/fancytree/skin-common.less
new file mode 100644
index 0000000..430d13e
--- /dev/null
+++ b/conlite/scripts/fancytree/skin-common.less
@@ -0,0 +1,964 @@
+/*******************************************************************************
+ * Common Styles for Fancytree Skins.
+ *
+ * This section is automatically generated from the `skin-common.less` template.
+ *
+ * Copyright (c) 2008-2021, Martin Wendt (https://wwWendt.de)
+ * Released under the MIT license
+ * https://github.com/mar10/fancytree/wiki/LicenseInfo
+ *
+ * @version 2.38.0
+ * @date 2021-02-09T20:03:49Z
+******************************************************************************/
+
+// Variables (defaults, may be overwritten by the including .less files)
+@fancy-use-sprites: true; // false: suppress all background images (i.e. icons)
+// @fancy-hide-connectors: true; // false: show vertical connector lines
+
+@fancy-level-indent: 16px;
+@fancy-line-height: 16px; // height of a nodes selection bar including borders
+@fancy-node-v-spacing: 1px; // gap between two node borders
+@fancy-icon-width: 16px;
+@fancy-icon-height: 16px;
+@fancy-icon-spacing: 3px; // margin between icon/icon or icon/title
+@fancy-icon-ofs-top: 0px; // extra vertical offset for expander, checkbox and icon
+@fancy-title-ofs-top: 0px; // extra vertical offset for title
+@fancy-node-border-width: 1px;
+@fancy-node-border-radius: 0px;
+@fancy-node-outline-width: 1px;
+
+// @fancy-line-ofs-top: (@fancy-line-height - @fancy-icon-height) / 2;
+
+// webpack uses /dist/skin-common.less as root path
+// grunt-less uses /dist/skin-Xxx/ui.fancyree.less as root path
+// So we define our theme LESS files for webpack compatibility, i.e.
+// define the image path n every main LESS file instead of here.
+// Prefix may be set to "", "/", "./", or any other value
+// Note: this variable must be defined by the main LESS files:
+// @fancy-image-prefix: "";
+
+// Use 'url(...)' to link to the throbber image, or
+// use data-uri(...)' to inline the data in css instead:
+// @fancy-loading-url: url("@{fancy-image-prefix}loading.gif");
+@fancy-loading-url: data-uri("@{fancy-image-prefix}loading.gif");
+
+// Set to `true` to use `data-uri(...)` instead of a `url(...)` link:
+@fancy-inline-sprites: false;
+
+@fancy-font-size: 10pt;
+@fancy-font-family: tahoma, arial, helvetica;
+@fancy-font-color: black;
+@fancy-font-color-dimm: #c0c0c0;
+@fancy-font-error-color: red;
+
+//------------------------------------------------------------------------------
+// Mixins
+//------------------------------------------------------------------------------
+.setBgPos(@x, @y, @cond:true) when (@cond) {
+ background-position: (@x * -@fancy-icon-width) (@y * -@fancy-icon-height);
+}
+.clearBgImage(@cond:true) when (@cond) {
+ background-image: none;
+}
+.setBgImageUrl(@url) when (@fancy-use-sprites) and not (@fancy-inline-sprites) {
+ background-image: url("@{fancy-image-prefix}@{url}");
+}
+.setBgImageUrl(@url) when (@fancy-use-sprites) and (@fancy-inline-sprites) {
+ background-image: data-uri("@{fancy-image-prefix}@{url}");
+}
+.useSprite(@x, @y) when (@fancy-use-sprites) {
+ .setBgPos(@x, @y);
+}
+.rounded-corners(@radius) {
+ -webkit-border-radius: @radius;
+ -moz-border-radius: @radius;
+ -ms-border-radius: @radius;
+ -o-border-radius: @radius;
+ border-radius: @radius;
+}
+.spanStyleMixin(@color, @bgcolor, @bordercolor) {
+ border-color: @bordercolor;
+ background: @bgcolor;
+ color: @color;
+}
+.spanStyleMixin(@color, @bgcolor, @bordercolor, @startColor, @stopColor) {
+ .spanStyleMixin(@color, @bgcolor, @bordercolor);
+ // @c-start: argb(@startColor);
+ // @c-end: argb(@stopColor);
+ background: -moz-linear-gradient(
+ top,
+ @startColor 0%,
+ @stopColor 100%
+ ); // FF3.6+
+ background: -webkit-gradient(
+ linear,
+ left top,
+ left bottom,
+ color-stop(0%, @startColor),
+ color-stop(100%, @stopColor)
+ ); // Chrome,Safari4+
+ background: -webkit-linear-gradient(
+ top,
+ @startColor 0%,
+ @stopColor 100%
+ ); // Chrome10+,Safari5.1+
+ background: -o-linear-gradient(
+ top,
+ @startColor 0%,
+ @stopColor 100%
+ ); // Opera 11.10+
+ background: -ms-linear-gradient(
+ top,
+ @startColor 0%,
+ @stopColor 100%
+ ); // IE10+
+ background: linear-gradient(
+ to bottom,
+ @startColor 0%,
+ @stopColor 100%
+ ); // W3C
+ filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='@{startColor}', endColorstr='@{stopColor}',GradientType=0 ); // IE6-9
+}
+
+/*------------------------------------------------------------------------------
+ * Helpers
+ *----------------------------------------------------------------------------*/
+// Redefine, in case jQuery-UI is not included
+// .ui-helper-hidden,
+.fancytree-helper-hidden {
+ display: none;
+}
+.fancytree-helper-indeterminate-cb {
+ // tri-state checkbox
+ color: #777;
+}
+.fancytree-helper-disabled {
+ color: @fancy-font-color-dimm;
+}
+
+/* Helper to allow spinning loader icon with glyph-, ligature-, and SVG-icons. */
+.fancytree-helper-spin {
+ -webkit-animation: spin 1000ms infinite linear;
+ animation: spin 1000ms infinite linear;
+}
+@-webkit-keyframes spin {
+ 0% {
+ -webkit-transform: rotate(0deg);
+ transform: rotate(0deg);
+ }
+ 100% {
+ -webkit-transform: rotate(359deg);
+ transform: rotate(359deg);
+ }
+}
+@keyframes spin {
+ 0% {
+ -webkit-transform: rotate(0deg);
+ transform: rotate(0deg);
+ }
+ 100% {
+ -webkit-transform: rotate(359deg);
+ transform: rotate(359deg);
+ }
+}
+
+/*------------------------------------------------------------------------------
+ * Container and UL / LI
+ *----------------------------------------------------------------------------*/
+
+ul.fancytree-container {
+ font-family: @fancy-font-family;
+ font-size: @fancy-font-size;
+ white-space: nowrap;
+ padding: 3px;
+ margin: 0; // DT issue 201
+ background-color: white;
+ border: 1px dotted gray;
+ // overflow: auto; // ext-dnd5: otherwise this is always the scroll parent
+ // height: 100%; // DT issue 263, 470
+ min-height: 0%; // #192
+ position: relative; // #235
+ ul {
+ padding: 0 0 0 @fancy-level-indent;
+ margin: 0;
+ }
+ ul > li:before {
+ // #538
+ content: none;
+ }
+ li {
+ list-style-image: none;
+ list-style-position: outside;
+ list-style-type: none;
+ -moz-background-clip: border;
+ -moz-background-inline-policy: continuous;
+ -moz-background-origin: padding;
+ background-attachment: scroll;
+ background-color: transparent;
+ .setBgPos(0, 0);
+ background-repeat: repeat-y;
+ background-image: none; // no v-lines
+
+ margin: 0;
+ // padding: 1px 0 0 0; // issue #246
+ }
+ // Suppress lines for last child node
+ li.fancytree-lastsib {
+ background-image: none;
+ }
+}
+
+// Style, when control is disabled
+.ui-fancytree-disabled ul.fancytree-container {
+ opacity: 0.5;
+ // filter: alpha(opacity=50); // Yields a css warning
+ background-color: silver;
+}
+
+ul.fancytree-connectors.fancytree-container {
+ li {
+ // Use 'data-uri(...)' to embed the image into CSS instead of linking to 'loading.gif':
+ background-image: data-uri("@{fancy-image-prefix}vline.gif");
+ background-position: 0 0;
+ }
+}
+
+// Suppress lines for last child node
+ul.fancytree-container li.fancytree-lastsib,
+// Suppress lines if level is fixed expanded (option minExpandLevel)
+ul.fancytree-no-connector > li {
+ background-image: none;
+}
+
+// Fix jQuery UI 'blind' animation for jQuery UI (#717)
+li.fancytree-animating {
+ position: relative;
+}
+
+/*------------------------------------------------------------------------------
+ * Common icon definitions
+ *----------------------------------------------------------------------------*/
+
+span.fancytree-empty,
+span.fancytree-vline,
+span.fancytree-expander,
+span.fancytree-icon,
+span.fancytree-checkbox,
+// span.fancytree-radio,
+span.fancytree-drag-helper-img,
+#fancytree-drop-marker {
+ width: @fancy-icon-width;
+ height: @fancy-icon-height;
+ // display: -moz-inline-box; // @ FF 1+2 removed for issue 221
+ // -moz-box-align: start; /* issue 221 */
+ display: inline-block; // Required to make a span sizeable
+ vertical-align: top;
+ background-repeat: no-repeat;
+ // background-position: left;
+ .setBgImageUrl("icons.gif");
+ .setBgPos(0, 0);
+}
+span.fancytree-icon,
+span.fancytree-checkbox,
+span.fancytree-expander,
+// span.fancytree-radio,
+span.fancytree-custom-icon {
+ margin-top: @fancy-icon-ofs-top;
+}
+/* Used by icon option: */
+span.fancytree-custom-icon {
+ width: @fancy-icon-width;
+ height: @fancy-icon-height;
+ display: inline-block;
+ margin-left: @fancy-icon-spacing;
+ .setBgPos(0, 0);
+}
+/* Used by 'icon' node option: */
+img.fancytree-icon {
+ width: @fancy-icon-width;
+ height: @fancy-icon-height;
+ margin-left: @fancy-icon-spacing;
+ margin-top: @fancy-icon-ofs-top;
+ vertical-align: top;
+ border-style: none;
+}
+
+/*------------------------------------------------------------------------------
+ * Expander icon
+ *
+ * Note: IE6 doesn't correctly evaluate multiples class names,
+ * so we create combined class names that can be used in the CSS.
+ *
+ * Prefix: fancytree-exp-
+ * 1st character: 'e': expanded, 'c': collapsed, 'n': no children
+ * 2nd character (optional): 'd': lazy (Delayed)
+ * 3rd character (optional): 'l': Last sibling
+ *----------------------------------------------------------------------------*/
+
+span.fancytree-expander {
+ // .useSprite(0, 5);
+ cursor: pointer;
+}
+// span.fancytree-expander:hover {
+// // .useSprite(1, 5);
+// }
+
+// --- End nodes (use connectors instead of expanders)
+
+.fancytree-exp-n span.fancytree-expander,
+.fancytree-exp-nl span.fancytree-expander {
+ // .clearBgImage( @fancy-hide-connectors );
+ background-image: none;
+ cursor: default;
+}
+.fancytree-connectors {
+ .fancytree-exp-n span.fancytree-expander,
+ .fancytree-exp-nl span.fancytree-expander {
+ .setBgImageUrl("icons.gif");
+ margin-top: 0;
+ }
+ .fancytree-exp-n span.fancytree-expander, // End-node, not last sibling
+ .fancytree-exp-n span.fancytree-expander:hover {
+ .useSprite(0, 4);
+ }
+ .fancytree-exp-nl span.fancytree-expander, // End-node, last sibling
+ .fancytree-exp-nl span.fancytree-expander:hover {
+ .useSprite(1, 4);
+ }
+}
+
+// --- Collapsed
+
+.fancytree-exp-c span.fancytree-expander {
+ // Collapsed, not delayed, not last sibling
+ .useSprite(0, 5);
+}
+.fancytree-exp-c span.fancytree-expander:hover {
+ .useSprite(1, 5);
+}
+.fancytree-exp-cl span.fancytree-expander {
+ // Collapsed, not delayed, last sibling
+ .useSprite(0, 6);
+}
+.fancytree-exp-cl span.fancytree-expander:hover {
+ .useSprite(1, 6);
+}
+.fancytree-exp-cd span.fancytree-expander {
+ // Collapsed, delayed, not last sibling
+ .useSprite(4, 5);
+}
+.fancytree-exp-cd span.fancytree-expander:hover {
+ .useSprite(5, 5);
+}
+.fancytree-exp-cdl span.fancytree-expander {
+ // Collapsed, delayed, last sibling
+ .useSprite(4, 6);
+}
+.fancytree-exp-cdl span.fancytree-expander:hover {
+ .useSprite(5, 6);
+}
+
+// --- Expanded
+
+.fancytree-exp-e span.fancytree-expander, // Expanded, not delayed, not last sibling
+.fancytree-exp-ed span.fancytree-expander {
+ // Expanded, delayed, not last sibling
+ .useSprite(2, 5);
+}
+.fancytree-exp-e span.fancytree-expander:hover,
+.fancytree-exp-ed span.fancytree-expander:hover {
+ .useSprite(3, 5);
+}
+.fancytree-exp-el span.fancytree-expander, // Expanded, not delayed, last sibling
+.fancytree-exp-edl span.fancytree-expander {
+ // Expanded, delayed, last sibling
+ .useSprite(2, 6);
+}
+.fancytree-exp-el span.fancytree-expander:hover,
+.fancytree-exp-edl span.fancytree-expander:hover {
+ .useSprite(3, 6);
+}
+
+/* Fade out expanders, when container is not hovered or active */
+.fancytree-fade-expander {
+ span.fancytree-expander {
+ transition: opacity 1.5s;
+ opacity: 0;
+ }
+ &:hover span.fancytree-expander,
+ &.fancytree-treefocus span.fancytree-expander,
+ .fancytree-treefocus span.fancytree-expander,
+ [class*="fancytree-statusnode-"] span.fancytree-expander {
+ transition: opacity 0.6s;
+ opacity: 1;
+ }
+}
+
+/*------------------------------------------------------------------------------
+ * Checkbox icon
+ *----------------------------------------------------------------------------*/
+
+span.fancytree-checkbox {
+ margin-left: @fancy-icon-spacing;
+ .useSprite(0, 2);
+ &:hover {
+ .useSprite(1, 2);
+ }
+ &.fancytree-radio {
+ .useSprite(0, 3);
+ }
+ &.fancytree-radio:hover {
+ .useSprite(1, 3);
+ }
+}
+.fancytree-partsel span.fancytree-checkbox {
+ .useSprite(4, 2);
+ &:hover {
+ .useSprite(5, 2);
+ }
+ &.fancytree-radio {
+ .useSprite(4, 3);
+ }
+ &.fancytree-radio:hover {
+ .useSprite(5, 3);
+ }
+}
+// selected after partsel, so it takes precedence:
+.fancytree-selected span.fancytree-checkbox {
+ .useSprite(2, 2);
+ &:hover {
+ .useSprite(3, 2);
+ }
+ &.fancytree-radio {
+ .useSprite(2, 3);
+ }
+ &.fancytree-radio:hover {
+ .useSprite(3, 3);
+ }
+}
+// Unselectable is dimmed, without hover effects
+.fancytree-unselectable {
+ span.fancytree-checkbox {
+ opacity: 0.4;
+ filter: alpha(opacity=40);
+ }
+ span.fancytree-checkbox:hover {
+ .useSprite(0, 2);
+ }
+ span.fancytree-checkbox.fancytree-radio:hover {
+ .useSprite(0, 3);
+ }
+ &.fancytree-partsel span.fancytree-checkbox:hover {
+ .useSprite(4, 2);
+ }
+ &.fancytree-selected span.fancytree-checkbox:hover {
+ .useSprite(2, 2);
+ }
+ &.fancytree-selected span.fancytree-checkbox.fancytree-radio:hover {
+ .useSprite(2, 3);
+ }
+}
+
+// Auto-hide checkboxes unless selected or hovered
+.fancytree-container.fancytree-checkbox-auto-hide {
+ span.fancytree-checkbox {
+ visibility: hidden;
+ }
+ .fancytree-node:hover span.fancytree-checkbox,
+ tr:hover td span.fancytree-checkbox,
+ .fancytree-node.fancytree-selected span.fancytree-checkbox,
+ tr.fancytree-selected td span.fancytree-checkbox {
+ visibility: unset;
+ }
+ &.fancytree-treefocus {
+ .fancytree-node.fancytree-active span.fancytree-checkbox,
+ tr.fancytree-active td span.fancytree-checkbox {
+ visibility: unset;
+ }
+ }
+}
+
+/*------------------------------------------------------------------------------
+ * Node type icon
+ * Note: IE6 doesn't correctly evaluate multiples class names,
+ * so we create combined class names that can be used in the CSS.
+ *
+ * Prefix: fancytree-ico-
+ * 1st character: 'e': expanded, 'c': collapsed
+ * 2nd character (optional): 'f': folder
+ *----------------------------------------------------------------------------*/
+
+span.fancytree-icon {
+ // Default icon
+ margin-left: @fancy-icon-spacing;
+ .useSprite(0, 0);
+}
+
+/* Documents */
+.fancytree-ico-c span.fancytree-icon {
+ // Collapsed folder (empty)
+ // .useSprite(0, 0);
+}
+.fancytree-ico-c span.fancytree-icon:hover {
+ .useSprite(1, 0);
+}
+.fancytree-has-children.fancytree-ico-c span.fancytree-icon {
+ // Collapsed folder (not empty)
+ .useSprite(2, 0);
+}
+.fancytree-has-children.fancytree-ico-c span.fancytree-icon:hover {
+ .useSprite(3, 0);
+}
+.fancytree-ico-e span.fancytree-icon {
+ // Expanded folder
+ .useSprite(4, 0);
+}
+.fancytree-ico-e span.fancytree-icon:hover {
+ .useSprite(5, 0);
+}
+
+/* Folders */
+.fancytree-ico-cf span.fancytree-icon {
+ // Collapsed folder (empty)
+ .useSprite(0, 1);
+}
+.fancytree-ico-cf span.fancytree-icon:hover {
+ .useSprite(1, 1);
+}
+.fancytree-has-children.fancytree-ico-cf span.fancytree-icon {
+ // Collapsed folder (not empty)
+ .useSprite(2, 1);
+}
+.fancytree-has-children.fancytree-ico-cf span.fancytree-icon:hover {
+ .useSprite(3, 1);
+}
+.fancytree-ico-ef span.fancytree-icon {
+ // Expanded folder
+ .useSprite(4, 1);
+}
+.fancytree-ico-ef span.fancytree-icon:hover {
+ .useSprite(5, 1);
+}
+
+// 'Loading' status overrides all others
+.fancytree-loading span.fancytree-expander,
+.fancytree-loading span.fancytree-expander:hover,
+.fancytree-statusnode-loading span.fancytree-icon,
+.fancytree-statusnode-loading span.fancytree-icon:hover,
+span.fancytree-icon.fancytree-icon-loading {
+ background-image: @fancy-loading-url;
+ .useSprite(0, 0);
+}
+
+/* Status node icons */
+
+.fancytree-statusnode-error span.fancytree-icon,
+.fancytree-statusnode-error span.fancytree-icon:hover {
+ .useSprite(0, 7);
+}
+
+/*------------------------------------------------------------------------------
+ * Node titles and highlighting
+ *----------------------------------------------------------------------------*/
+
+span.fancytree-node {
+ /* See #117 */
+ display: inherit; // #117, resolves to 'display: list-item;' for standard trees
+ width: 100%;
+ margin-top: @fancy-node-v-spacing;
+ min-height: @fancy-line-height;
+}
+span.fancytree-title {
+ color: @fancy-font-color; // inherit doesn't work on IE
+ cursor: pointer;
+ display: inline-block; // Better alignment, when title contains
+ vertical-align: top;
+ min-height: @fancy-line-height;
+ padding: 0 3px 0 3px; // Otherwise italic font will be outside right bounds
+ margin: @fancy-title-ofs-top 0 0 @fancy-icon-spacing;
+ // margin: 0px;
+ // margin-top: @fancy-line-ofs-top;
+ // margin-left: @fancy-icon-spacing;
+ border: @fancy-node-border-width solid transparent; // avoid jumping, when a border is added on hover
+ .rounded-corners(@fancy-node-border-radius);
+ // outline: 0; // @ Firefox, prevent dotted border after click
+ // Set transparent border to prevent jumping when active node gets a border
+ // (we can do this, because this theme doesn't use vertical lines)
+ // border: 1px solid white; // Note: 'transparent' would not work in IE6
+}
+span.fancytree-node.fancytree-error span.fancytree-title {
+ color: @fancy-font-error-color;
+}
+
+/*------------------------------------------------------------------------------
+ * Drag'n'drop support
+ *----------------------------------------------------------------------------*/
+/* ext-dnd5: */
+span.fancytree-childcounter {
+ color: #fff;
+ background: #337ab7; // bootstrap blue
+ border: 1px solid gray;
+ border-radius: 10px;
+ padding: 2px;
+ text-align: center;
+}
+
+/* ext-dnd: */
+div.fancytree-drag-helper {
+ span.fancytree-childcounter,
+ span.fancytree-dnd-modifier {
+ display: inline-block;
+ color: #fff;
+ background: #337ab7; // bootstrap blue
+ border: 1px solid gray;
+ min-width: 10px;
+ // min-height: 16px;
+ height: 10px;
+ line-height: 1;
+ vertical-align: baseline;
+ border-radius: 10px;
+ padding: 2px;
+ text-align: center;
+ font-size: 9px;
+ }
+ span.fancytree-childcounter {
+ position: absolute;
+ // left: 16px;
+ top: -6px;
+ right: -6px;
+ }
+ span.fancytree-dnd-modifier {
+ background: #5cb85c; // bootstrap green
+ border: none;
+ // min-height: 16px;
+ // font-size: 12px;
+ font-weight: bolder;
+ }
+ &.fancytree-drop-accept {
+ span.fancytree-drag-helper-img {
+ .useSprite(2, 7);
+ }
+ }
+ &.fancytree-drop-reject {
+ span.fancytree-drag-helper-img {
+ .useSprite(1, 7);
+ }
+ }
+}
+
+/*** Drop marker icon *********************************************************/
+#fancytree-drop-marker {
+ width: 2 * @fancy-icon-width; // was 24px, but 32 should be correct
+ position: absolute;
+ .useSprite(0, 8);
+ margin: 0;
+ &.fancytree-drop-after,
+ &.fancytree-drop-before {
+ width: 4 * @fancy-icon-width; // 64px;
+ .useSprite(0, 9);
+ }
+ &.fancytree-drop-copy {
+ .useSprite(4, 8);
+ }
+ &.fancytree-drop-move {
+ .useSprite(2, 8);
+ }
+}
+
+/*** Source node while dragging ***********************************************/
+
+span.fancytree-drag-source {
+ &.fancytree-drag-remove {
+ // text-decoration: line-through;
+ opacity: 0.15;
+ }
+}
+
+/*** Target node while dragging cursor is over it *****************************/
+
+span.fancytree-drop-target {
+ &.fancytree-drop-accept {
+ // outline: 1px dotted #5cb85c; // bootstrap sucess
+ }
+}
+span.fancytree-drop-reject {
+ // outline: 1px dotted #d9534f; // boostrap warning
+}
+
+/*------------------------------------------------------------------------------
+ * 'rtl' option
+ *----------------------------------------------------------------------------*/
+
+.fancytree-container.fancytree-rtl {
+ .fancytree-title {
+ /*unicode-bidi: bidi-override;*/ /* optional: reverse title letters */
+ }
+ span.fancytree-connector,
+ span.fancytree-expander,
+ span.fancytree-icon,
+ span.fancytree-drag-helper-img {
+ .setBgImageUrl("icons-rtl.gif");
+ }
+ .fancytree-exp-n span.fancytree-expander,
+ .fancytree-exp-nl span.fancytree-expander {
+ background-image: none;
+ }
+ &.fancytree-connectors .fancytree-exp-n span.fancytree-expander,
+ &.fancytree-connectors .fancytree-exp-nl span.fancytree-expander {
+ .setBgImageUrl("icons-rtl.gif");
+ }
+}
+ul.fancytree-container.fancytree-rtl {
+ ul {
+ padding: 0 16px 0 0;
+ }
+ &.fancytree-connectors li {
+ background-position: right 0;
+ background-image: url("@{fancy-image-prefix}vline-rtl.gif");
+ }
+ // Suppress lines for last child node
+ li.fancytree-lastsib,
+ // Suppress lines if level is fixed expanded (option minExpandLevel)
+ &.fancytree-no-connector > li {
+ background-image: none;
+ }
+}
+#fancytree-drop-marker.fancytree-rtl {
+ .setBgImageUrl("icons-rtl.gif");
+}
+
+/*------------------------------------------------------------------------------
+ * 'table' extension
+ *----------------------------------------------------------------------------*/
+
+table.fancytree-ext-table {
+ font-family: @fancy-font-family;
+ font-size: @fancy-font-size;
+ border-collapse: collapse;
+ span.fancytree-node {
+ display: inline-block; // #117
+ box-sizing: border-box; // #562
+ }
+ td.fancytree-status-merged {
+ text-align: center;
+ // font-weight: bold;
+ font-style: italic;
+ // line-height: 100px;
+ color: @fancy-font-color-dimm;
+ }
+ tr.fancytree-statusnode-error td.fancytree-status-merged {
+ color: @fancy-font-error-color;
+ }
+ /* ext-ariagrid */
+ &.fancytree-ext-ariagrid.fancytree-cell-mode {
+ > tbody > tr.fancytree-active > td {
+ background-color: #eee;
+ }
+ > tbody > tr > td.fancytree-active-cell {
+ background-color: #cbe8f6;
+ }
+ &.fancytree-cell-nav-mode > tbody > tr > td.fancytree-active-cell {
+ background-color: #3875d7;
+ }
+ }
+}
+
+/*------------------------------------------------------------------------------
+ * 'columnview' extension
+ *----------------------------------------------------------------------------*/
+
+table.fancytree-ext-columnview {
+ // border-collapse: collapse;
+ // width: 100%;
+ tbody tr td {
+ position: relative;
+ border: 1px solid gray;
+ vertical-align: top;
+ overflow: auto;
+ > ul {
+ padding: 0;
+ li {
+ list-style-image: none;
+ list-style-position: outside;
+ list-style-type: none;
+ -moz-background-clip: border;
+ -moz-background-inline-policy: continuous;
+ -moz-background-origin: padding;
+ background-attachment: scroll;
+ background-color: transparent;
+ .setBgPos(0, 0);
+ background-repeat: repeat-y;
+ background-image: none; /* no v-lines */
+
+ margin: 0;
+ // padding: 1px 0 0 0; // issue #246
+ }
+ }
+ }
+ span.fancytree-node {
+ position: relative; /* allow positioning of embedded spans */
+ display: inline-block; // #117
+ }
+ span.fancytree-node.fancytree-expanded {
+ background-color: #e0e0e0;
+ }
+ span.fancytree-node.fancytree-active {
+ background-color: #cbe8f6;
+ // background-color: royalblue;
+ }
+ .fancytree-has-children span.fancytree-cv-right {
+ position: absolute;
+ right: 3px;
+ .useSprite(0, 5);
+ &:hover {
+ .useSprite(1, 5);
+ }
+ }
+}
+
+/*------------------------------------------------------------------------------
+ * 'filter' extension
+ *----------------------------------------------------------------------------*/
+
+.fancytree-ext-filter-dimm {
+ span.fancytree-node span.fancytree-title {
+ color: @fancy-font-color-dimm;
+ font-weight: lighter;
+ }
+ tr.fancytree-submatch span.fancytree-title,
+ span.fancytree-node.fancytree-submatch span.fancytree-title {
+ color: black;
+ font-weight: normal;
+ }
+ tr.fancytree-match span.fancytree-title,
+ span.fancytree-node.fancytree-match span.fancytree-title {
+ color: black;
+ font-weight: bold;
+ }
+}
+.fancytree-ext-filter-hide {
+ tr.fancytree-hide,
+ span.fancytree-node.fancytree-hide {
+ display: none;
+ }
+ tr.fancytree-submatch span.fancytree-title,
+ span.fancytree-node.fancytree-submatch span.fancytree-title {
+ color: @fancy-font-color-dimm;
+ font-weight: lighter;
+ }
+ tr.fancytree-match span.fancytree-title,
+ span.fancytree-node.fancytree-match span.fancytree-title {
+ color: black;
+ font-weight: normal;
+ }
+}
+/* Hide expanders if all child nodes are hidden by filter */
+.fancytree-ext-filter-hide-expanders {
+ tr.fancytree-match span.fancytree-expander,
+ span.fancytree-node.fancytree-match span.fancytree-expander {
+ visibility: hidden;
+ }
+ tr.fancytree-submatch span.fancytree-expander,
+ span.fancytree-node.fancytree-submatch span.fancytree-expander {
+ visibility: visible;
+ }
+}
+
+.fancytree-ext-childcounter,
+.fancytree-ext-filter {
+ // span.fancytree-title mark {
+ // font-style: normal;
+ // background-color: #ead61c; // yellow
+ // border-radius: 3px;
+ // }
+ span.fancytree-icon,
+ span.fancytree-custom-icon {
+ position: relative;
+ }
+ span.fancytree-childcounter {
+ color: #fff;
+ background: #777; // #337ab7; // bootstrap blue
+ border: 1px solid gray;
+ position: absolute;
+ top: -6px;
+ right: -6px;
+ min-width: 10px;
+ height: 10px;
+ line-height: 1;
+ vertical-align: baseline;
+ border-radius: 10px;
+ padding: 2px;
+ text-align: center;
+ font-size: 9px;
+ }
+}
+/*------------------------------------------------------------------------------
+ * 'wide' extension
+ *----------------------------------------------------------------------------*/
+
+ul.fancytree-ext-wide {
+ position: relative;
+ min-width: 100%;
+ z-index: 2;
+
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+
+ span.fancytree-node > span {
+ position: relative;
+ z-index: 2;
+ }
+ span.fancytree-node span.fancytree-title {
+ position: absolute; // Allow left: 0. Note: prevents smooth dropdown animation
+ z-index: 1; // Behind expander and checkbox
+ left: 0px;
+ min-width: 100%;
+ margin-left: 0;
+ margin-right: 0;
+
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ }
+}
+
+/*------------------------------------------------------------------------------
+ * 'fixed' extension
+ *----------------------------------------------------------------------------*/
+
+.fancytree-ext-fixed-wrapper {
+ .fancytree-ext-fixed-hidden {
+ display: none;
+ }
+ div.fancytree-ext-fixed-scroll-border-bottom {
+ border-bottom: 3px solid rgba(0, 0, 0, 0.75);
+ }
+ div.fancytree-ext-fixed-scroll-border-right {
+ border-right: 3px solid rgba(0, 0, 0, 0.75);
+ }
+ div.fancytree-ext-fixed-wrapper-tl {
+ position: absolute;
+ overflow: hidden;
+ z-index: 3;
+ top: 0px;
+ left: 0px;
+ }
+ div.fancytree-ext-fixed-wrapper-tr {
+ position: absolute;
+ overflow: hidden;
+ z-index: 2;
+ top: 0px;
+ }
+ div.fancytree-ext-fixed-wrapper-bl {
+ position: absolute;
+ overflow: hidden;
+ z-index: 2;
+ left: 0px;
+ }
+ div.fancytree-ext-fixed-wrapper-br {
+ position: absolute;
+ overflow: scroll;
+ z-index: 1;
+ }
+}
diff --git a/conlite/scripts/fancytree/skin-lion/icons-rtl.gif b/conlite/scripts/fancytree/skin-lion/icons-rtl.gif
new file mode 100644
index 0000000..a4eeb9e
Binary files /dev/null and b/conlite/scripts/fancytree/skin-lion/icons-rtl.gif differ
diff --git a/conlite/scripts/fancytree/skin-lion/icons.gif b/conlite/scripts/fancytree/skin-lion/icons.gif
new file mode 100644
index 0000000..1ca2af6
Binary files /dev/null and b/conlite/scripts/fancytree/skin-lion/icons.gif differ
diff --git a/conlite/scripts/fancytree/skin-lion/loading.gif b/conlite/scripts/fancytree/skin-lion/loading.gif
new file mode 100644
index 0000000..5b33f7e
Binary files /dev/null and b/conlite/scripts/fancytree/skin-lion/loading.gif differ
diff --git a/conlite/scripts/fancytree/skin-lion/ui.fancytree.css b/conlite/scripts/fancytree/skin-lion/ui.fancytree.css
new file mode 100644
index 0000000..76dc315
--- /dev/null
+++ b/conlite/scripts/fancytree/skin-lion/ui.fancytree.css
@@ -0,0 +1,757 @@
+/*!
+ * Fancytree "Lion" skin.
+ *
+ * DON'T EDIT THE CSS FILE DIRECTLY, since it is automatically generated from
+ * the LESS templates.
+ */
+/*
+ Lion colors:
+ gray highlight bar: #D4D4D4
+ blue highlight-bar and -border #3875D7
+
+*/
+/*******************************************************************************
+ * Common Styles for Fancytree Skins.
+ *
+ * This section is automatically generated from the `skin-common.less` template.
+ *
+ * Copyright (c) 2008-2021, Martin Wendt (https://wwWendt.de)
+ * Released under the MIT license
+ * https://github.com/mar10/fancytree/wiki/LicenseInfo
+ *
+ * @version 2.38.0
+ * @date 2021-02-09T20:03:49Z
+******************************************************************************/
+/*------------------------------------------------------------------------------
+ * Helpers
+ *----------------------------------------------------------------------------*/
+.fancytree-helper-hidden {
+ display: none;
+}
+.fancytree-helper-indeterminate-cb {
+ color: #777;
+}
+.fancytree-helper-disabled {
+ color: #c0c0c0;
+}
+/* Helper to allow spinning loader icon with glyph-, ligature-, and SVG-icons. */
+.fancytree-helper-spin {
+ -webkit-animation: spin 1000ms infinite linear;
+ animation: spin 1000ms infinite linear;
+}
+@-webkit-keyframes spin {
+ 0% {
+ -webkit-transform: rotate(0deg);
+ transform: rotate(0deg);
+ }
+ 100% {
+ -webkit-transform: rotate(359deg);
+ transform: rotate(359deg);
+ }
+}
+@keyframes spin {
+ 0% {
+ -webkit-transform: rotate(0deg);
+ transform: rotate(0deg);
+ }
+ 100% {
+ -webkit-transform: rotate(359deg);
+ transform: rotate(359deg);
+ }
+}
+/*------------------------------------------------------------------------------
+ * Container and UL / LI
+ *----------------------------------------------------------------------------*/
+ul.fancytree-container {
+ font-family: tahoma, arial, helvetica;
+ font-size: 10pt;
+ white-space: nowrap;
+ padding: 3px;
+ margin: 0;
+ background-color: white;
+ border: 1px dotted gray;
+ min-height: 0%;
+ position: relative;
+}
+ul.fancytree-container ul {
+ padding: 0 0 0 16px;
+ margin: 0;
+}
+ul.fancytree-container ul > li:before {
+ content: none;
+}
+ul.fancytree-container li {
+ list-style-image: none;
+ list-style-position: outside;
+ list-style-type: none;
+ -moz-background-clip: border;
+ -moz-background-inline-policy: continuous;
+ -moz-background-origin: padding;
+ background-attachment: scroll;
+ background-color: transparent;
+ background-position: 0px 0px;
+ background-repeat: repeat-y;
+ background-image: none;
+ margin: 0;
+}
+ul.fancytree-container li.fancytree-lastsib {
+ background-image: none;
+}
+.ui-fancytree-disabled ul.fancytree-container {
+ opacity: 0.5;
+ background-color: silver;
+}
+ul.fancytree-connectors.fancytree-container li {
+ background-image: url("../skin-lion/vline.gif");
+ background-position: 0 0;
+}
+ul.fancytree-container li.fancytree-lastsib,
+ul.fancytree-no-connector > li {
+ background-image: none;
+}
+li.fancytree-animating {
+ position: relative;
+}
+/*------------------------------------------------------------------------------
+ * Common icon definitions
+ *----------------------------------------------------------------------------*/
+span.fancytree-empty,
+span.fancytree-vline,
+span.fancytree-expander,
+span.fancytree-icon,
+span.fancytree-checkbox,
+span.fancytree-drag-helper-img,
+#fancytree-drop-marker {
+ width: 16px;
+ height: 16px;
+ display: inline-block;
+ vertical-align: top;
+ background-repeat: no-repeat;
+ background-image: url("../skin-lion/icons.gif");
+ background-position: 0px 0px;
+}
+span.fancytree-icon,
+span.fancytree-checkbox,
+span.fancytree-expander,
+span.fancytree-custom-icon {
+ margin-top: 0px;
+}
+/* Used by icon option: */
+span.fancytree-custom-icon {
+ width: 16px;
+ height: 16px;
+ display: inline-block;
+ margin-left: 3px;
+ background-position: 0px 0px;
+}
+/* Used by 'icon' node option: */
+img.fancytree-icon {
+ width: 16px;
+ height: 16px;
+ margin-left: 3px;
+ margin-top: 0px;
+ vertical-align: top;
+ border-style: none;
+}
+/*------------------------------------------------------------------------------
+ * Expander icon
+ *
+ * Note: IE6 doesn't correctly evaluate multiples class names,
+ * so we create combined class names that can be used in the CSS.
+ *
+ * Prefix: fancytree-exp-
+ * 1st character: 'e': expanded, 'c': collapsed, 'n': no children
+ * 2nd character (optional): 'd': lazy (Delayed)
+ * 3rd character (optional): 'l': Last sibling
+ *----------------------------------------------------------------------------*/
+span.fancytree-expander {
+ cursor: pointer;
+}
+.fancytree-exp-n span.fancytree-expander,
+.fancytree-exp-nl span.fancytree-expander {
+ background-image: none;
+ cursor: default;
+}
+.fancytree-connectors .fancytree-exp-n span.fancytree-expander,
+.fancytree-connectors .fancytree-exp-nl span.fancytree-expander {
+ background-image: url("../skin-lion/icons.gif");
+ margin-top: 0;
+}
+.fancytree-connectors .fancytree-exp-n span.fancytree-expander,
+.fancytree-connectors .fancytree-exp-n span.fancytree-expander:hover {
+ background-position: 0px -64px;
+}
+.fancytree-connectors .fancytree-exp-nl span.fancytree-expander,
+.fancytree-connectors .fancytree-exp-nl span.fancytree-expander:hover {
+ background-position: -16px -64px;
+}
+.fancytree-exp-c span.fancytree-expander {
+ background-position: 0px -80px;
+}
+.fancytree-exp-c span.fancytree-expander:hover {
+ background-position: -16px -80px;
+}
+.fancytree-exp-cl span.fancytree-expander {
+ background-position: 0px -96px;
+}
+.fancytree-exp-cl span.fancytree-expander:hover {
+ background-position: -16px -96px;
+}
+.fancytree-exp-cd span.fancytree-expander {
+ background-position: -64px -80px;
+}
+.fancytree-exp-cd span.fancytree-expander:hover {
+ background-position: -80px -80px;
+}
+.fancytree-exp-cdl span.fancytree-expander {
+ background-position: -64px -96px;
+}
+.fancytree-exp-cdl span.fancytree-expander:hover {
+ background-position: -80px -96px;
+}
+.fancytree-exp-e span.fancytree-expander,
+.fancytree-exp-ed span.fancytree-expander {
+ background-position: -32px -80px;
+}
+.fancytree-exp-e span.fancytree-expander:hover,
+.fancytree-exp-ed span.fancytree-expander:hover {
+ background-position: -48px -80px;
+}
+.fancytree-exp-el span.fancytree-expander,
+.fancytree-exp-edl span.fancytree-expander {
+ background-position: -32px -96px;
+}
+.fancytree-exp-el span.fancytree-expander:hover,
+.fancytree-exp-edl span.fancytree-expander:hover {
+ background-position: -48px -96px;
+}
+/* Fade out expanders, when container is not hovered or active */
+.fancytree-fade-expander span.fancytree-expander {
+ transition: opacity 1.5s;
+ opacity: 0;
+}
+.fancytree-fade-expander:hover span.fancytree-expander,
+.fancytree-fade-expander.fancytree-treefocus span.fancytree-expander,
+.fancytree-fade-expander .fancytree-treefocus span.fancytree-expander,
+.fancytree-fade-expander [class*="fancytree-statusnode-"] span.fancytree-expander {
+ transition: opacity 0.6s;
+ opacity: 1;
+}
+/*------------------------------------------------------------------------------
+ * Checkbox icon
+ *----------------------------------------------------------------------------*/
+span.fancytree-checkbox {
+ margin-left: 3px;
+ background-position: 0px -32px;
+}
+span.fancytree-checkbox:hover {
+ background-position: -16px -32px;
+}
+span.fancytree-checkbox.fancytree-radio {
+ background-position: 0px -48px;
+}
+span.fancytree-checkbox.fancytree-radio:hover {
+ background-position: -16px -48px;
+}
+.fancytree-partsel span.fancytree-checkbox {
+ background-position: -64px -32px;
+}
+.fancytree-partsel span.fancytree-checkbox:hover {
+ background-position: -80px -32px;
+}
+.fancytree-partsel span.fancytree-checkbox.fancytree-radio {
+ background-position: -64px -48px;
+}
+.fancytree-partsel span.fancytree-checkbox.fancytree-radio:hover {
+ background-position: -80px -48px;
+}
+.fancytree-selected span.fancytree-checkbox {
+ background-position: -32px -32px;
+}
+.fancytree-selected span.fancytree-checkbox:hover {
+ background-position: -48px -32px;
+}
+.fancytree-selected span.fancytree-checkbox.fancytree-radio {
+ background-position: -32px -48px;
+}
+.fancytree-selected span.fancytree-checkbox.fancytree-radio:hover {
+ background-position: -48px -48px;
+}
+.fancytree-unselectable span.fancytree-checkbox {
+ opacity: 0.4;
+ filter: alpha(opacity=40);
+}
+.fancytree-unselectable span.fancytree-checkbox:hover {
+ background-position: 0px -32px;
+}
+.fancytree-unselectable span.fancytree-checkbox.fancytree-radio:hover {
+ background-position: 0px -48px;
+}
+.fancytree-unselectable.fancytree-partsel span.fancytree-checkbox:hover {
+ background-position: -64px -32px;
+}
+.fancytree-unselectable.fancytree-selected span.fancytree-checkbox:hover {
+ background-position: -32px -32px;
+}
+.fancytree-unselectable.fancytree-selected span.fancytree-checkbox.fancytree-radio:hover {
+ background-position: -32px -48px;
+}
+.fancytree-container.fancytree-checkbox-auto-hide span.fancytree-checkbox {
+ visibility: hidden;
+}
+.fancytree-container.fancytree-checkbox-auto-hide .fancytree-node:hover span.fancytree-checkbox,
+.fancytree-container.fancytree-checkbox-auto-hide tr:hover td span.fancytree-checkbox,
+.fancytree-container.fancytree-checkbox-auto-hide .fancytree-node.fancytree-selected span.fancytree-checkbox,
+.fancytree-container.fancytree-checkbox-auto-hide tr.fancytree-selected td span.fancytree-checkbox {
+ visibility: unset;
+}
+.fancytree-container.fancytree-checkbox-auto-hide.fancytree-treefocus .fancytree-node.fancytree-active span.fancytree-checkbox,
+.fancytree-container.fancytree-checkbox-auto-hide.fancytree-treefocus tr.fancytree-active td span.fancytree-checkbox {
+ visibility: unset;
+}
+/*------------------------------------------------------------------------------
+ * Node type icon
+ * Note: IE6 doesn't correctly evaluate multiples class names,
+ * so we create combined class names that can be used in the CSS.
+ *
+ * Prefix: fancytree-ico-
+ * 1st character: 'e': expanded, 'c': collapsed
+ * 2nd character (optional): 'f': folder
+ *----------------------------------------------------------------------------*/
+span.fancytree-icon {
+ margin-left: 3px;
+ background-position: 0px 0px;
+}
+/* Documents */
+.fancytree-ico-c span.fancytree-icon:hover {
+ background-position: -16px 0px;
+}
+.fancytree-has-children.fancytree-ico-c span.fancytree-icon {
+ background-position: -32px 0px;
+}
+.fancytree-has-children.fancytree-ico-c span.fancytree-icon:hover {
+ background-position: -48px 0px;
+}
+.fancytree-ico-e span.fancytree-icon {
+ background-position: -64px 0px;
+}
+.fancytree-ico-e span.fancytree-icon:hover {
+ background-position: -80px 0px;
+}
+/* Folders */
+.fancytree-ico-cf span.fancytree-icon {
+ background-position: 0px -16px;
+}
+.fancytree-ico-cf span.fancytree-icon:hover {
+ background-position: -16px -16px;
+}
+.fancytree-has-children.fancytree-ico-cf span.fancytree-icon {
+ background-position: -32px -16px;
+}
+.fancytree-has-children.fancytree-ico-cf span.fancytree-icon:hover {
+ background-position: -48px -16px;
+}
+.fancytree-ico-ef span.fancytree-icon {
+ background-position: -64px -16px;
+}
+.fancytree-ico-ef span.fancytree-icon:hover {
+ background-position: -80px -16px;
+}
+.fancytree-loading span.fancytree-expander,
+.fancytree-loading span.fancytree-expander:hover,
+.fancytree-statusnode-loading span.fancytree-icon,
+.fancytree-statusnode-loading span.fancytree-icon:hover,
+span.fancytree-icon.fancytree-icon-loading {
+ background-image: url("../skin-lion/loading.gif");
+ background-position: 0px 0px;
+}
+/* Status node icons */
+.fancytree-statusnode-error span.fancytree-icon,
+.fancytree-statusnode-error span.fancytree-icon:hover {
+ background-position: 0px -112px;
+}
+/*------------------------------------------------------------------------------
+ * Node titles and highlighting
+ *----------------------------------------------------------------------------*/
+span.fancytree-node {
+ /* See #117 */
+ display: inherit;
+ width: 100%;
+ margin-top: 1px;
+ min-height: 16px;
+}
+span.fancytree-title {
+ color: black;
+ cursor: pointer;
+ display: inline-block;
+ vertical-align: top;
+ min-height: 16px;
+ padding: 0 3px 0 3px;
+ margin: 0px 0 0 3px;
+ border: 1px solid transparent;
+ -webkit-border-radius: 0px;
+ -moz-border-radius: 0px;
+ -ms-border-radius: 0px;
+ -o-border-radius: 0px;
+ border-radius: 0px;
+}
+span.fancytree-node.fancytree-error span.fancytree-title {
+ color: red;
+}
+/*------------------------------------------------------------------------------
+ * Drag'n'drop support
+ *----------------------------------------------------------------------------*/
+/* ext-dnd5: */
+span.fancytree-childcounter {
+ color: #fff;
+ background: #337ab7;
+ border: 1px solid gray;
+ border-radius: 10px;
+ padding: 2px;
+ text-align: center;
+}
+/* ext-dnd: */
+div.fancytree-drag-helper span.fancytree-childcounter,
+div.fancytree-drag-helper span.fancytree-dnd-modifier {
+ display: inline-block;
+ color: #fff;
+ background: #337ab7;
+ border: 1px solid gray;
+ min-width: 10px;
+ height: 10px;
+ line-height: 1;
+ vertical-align: baseline;
+ border-radius: 10px;
+ padding: 2px;
+ text-align: center;
+ font-size: 9px;
+}
+div.fancytree-drag-helper span.fancytree-childcounter {
+ position: absolute;
+ top: -6px;
+ right: -6px;
+}
+div.fancytree-drag-helper span.fancytree-dnd-modifier {
+ background: #5cb85c;
+ border: none;
+ font-weight: bolder;
+}
+div.fancytree-drag-helper.fancytree-drop-accept span.fancytree-drag-helper-img {
+ background-position: -32px -112px;
+}
+div.fancytree-drag-helper.fancytree-drop-reject span.fancytree-drag-helper-img {
+ background-position: -16px -112px;
+}
+/*** Drop marker icon *********************************************************/
+#fancytree-drop-marker {
+ width: 32px;
+ position: absolute;
+ background-position: 0px -128px;
+ margin: 0;
+}
+#fancytree-drop-marker.fancytree-drop-after,
+#fancytree-drop-marker.fancytree-drop-before {
+ width: 64px;
+ background-position: 0px -144px;
+}
+#fancytree-drop-marker.fancytree-drop-copy {
+ background-position: -64px -128px;
+}
+#fancytree-drop-marker.fancytree-drop-move {
+ background-position: -32px -128px;
+}
+/*** Source node while dragging ***********************************************/
+span.fancytree-drag-source.fancytree-drag-remove {
+ opacity: 0.15;
+}
+/*** Target node while dragging cursor is over it *****************************/
+/*------------------------------------------------------------------------------
+ * 'rtl' option
+ *----------------------------------------------------------------------------*/
+.fancytree-container.fancytree-rtl .fancytree-title {
+ /*unicode-bidi: bidi-override;*/
+ /* optional: reverse title letters */
+}
+.fancytree-container.fancytree-rtl span.fancytree-connector,
+.fancytree-container.fancytree-rtl span.fancytree-expander,
+.fancytree-container.fancytree-rtl span.fancytree-icon,
+.fancytree-container.fancytree-rtl span.fancytree-drag-helper-img {
+ background-image: url("../skin-lion/icons-rtl.gif");
+}
+.fancytree-container.fancytree-rtl .fancytree-exp-n span.fancytree-expander,
+.fancytree-container.fancytree-rtl .fancytree-exp-nl span.fancytree-expander {
+ background-image: none;
+}
+.fancytree-container.fancytree-rtl.fancytree-connectors .fancytree-exp-n span.fancytree-expander,
+.fancytree-container.fancytree-rtl.fancytree-connectors .fancytree-exp-nl span.fancytree-expander {
+ background-image: url("../skin-lion/icons-rtl.gif");
+}
+ul.fancytree-container.fancytree-rtl ul {
+ padding: 0 16px 0 0;
+}
+ul.fancytree-container.fancytree-rtl.fancytree-connectors li {
+ background-position: right 0;
+ background-image: url("../skin-lion/vline-rtl.gif");
+}
+ul.fancytree-container.fancytree-rtl li.fancytree-lastsib,
+ul.fancytree-container.fancytree-rtl.fancytree-no-connector > li {
+ background-image: none;
+}
+#fancytree-drop-marker.fancytree-rtl {
+ background-image: url("../skin-lion/icons-rtl.gif");
+}
+/*------------------------------------------------------------------------------
+ * 'table' extension
+ *----------------------------------------------------------------------------*/
+table.fancytree-ext-table {
+ font-family: tahoma, arial, helvetica;
+ font-size: 10pt;
+ border-collapse: collapse;
+ /* ext-ariagrid */
+}
+table.fancytree-ext-table span.fancytree-node {
+ display: inline-block;
+ box-sizing: border-box;
+}
+table.fancytree-ext-table td.fancytree-status-merged {
+ text-align: center;
+ font-style: italic;
+ color: #c0c0c0;
+}
+table.fancytree-ext-table tr.fancytree-statusnode-error td.fancytree-status-merged {
+ color: red;
+}
+table.fancytree-ext-table.fancytree-ext-ariagrid.fancytree-cell-mode > tbody > tr.fancytree-active > td {
+ background-color: #eee;
+}
+table.fancytree-ext-table.fancytree-ext-ariagrid.fancytree-cell-mode > tbody > tr > td.fancytree-active-cell {
+ background-color: #cbe8f6;
+}
+table.fancytree-ext-table.fancytree-ext-ariagrid.fancytree-cell-mode.fancytree-cell-nav-mode > tbody > tr > td.fancytree-active-cell {
+ background-color: #3875d7;
+}
+/*------------------------------------------------------------------------------
+ * 'columnview' extension
+ *----------------------------------------------------------------------------*/
+table.fancytree-ext-columnview tbody tr td {
+ position: relative;
+ border: 1px solid gray;
+ vertical-align: top;
+ overflow: auto;
+}
+table.fancytree-ext-columnview tbody tr td > ul {
+ padding: 0;
+}
+table.fancytree-ext-columnview tbody tr td > ul li {
+ list-style-image: none;
+ list-style-position: outside;
+ list-style-type: none;
+ -moz-background-clip: border;
+ -moz-background-inline-policy: continuous;
+ -moz-background-origin: padding;
+ background-attachment: scroll;
+ background-color: transparent;
+ background-position: 0px 0px;
+ background-repeat: repeat-y;
+ background-image: none;
+ /* no v-lines */
+ margin: 0;
+}
+table.fancytree-ext-columnview span.fancytree-node {
+ position: relative;
+ /* allow positioning of embedded spans */
+ display: inline-block;
+}
+table.fancytree-ext-columnview span.fancytree-node.fancytree-expanded {
+ background-color: #e0e0e0;
+}
+table.fancytree-ext-columnview span.fancytree-node.fancytree-active {
+ background-color: #cbe8f6;
+}
+table.fancytree-ext-columnview .fancytree-has-children span.fancytree-cv-right {
+ position: absolute;
+ right: 3px;
+ background-position: 0px -80px;
+}
+table.fancytree-ext-columnview .fancytree-has-children span.fancytree-cv-right:hover {
+ background-position: -16px -80px;
+}
+/*------------------------------------------------------------------------------
+ * 'filter' extension
+ *----------------------------------------------------------------------------*/
+.fancytree-ext-filter-dimm span.fancytree-node span.fancytree-title {
+ color: #c0c0c0;
+ font-weight: lighter;
+}
+.fancytree-ext-filter-dimm tr.fancytree-submatch span.fancytree-title,
+.fancytree-ext-filter-dimm span.fancytree-node.fancytree-submatch span.fancytree-title {
+ color: black;
+ font-weight: normal;
+}
+.fancytree-ext-filter-dimm tr.fancytree-match span.fancytree-title,
+.fancytree-ext-filter-dimm span.fancytree-node.fancytree-match span.fancytree-title {
+ color: black;
+ font-weight: bold;
+}
+.fancytree-ext-filter-hide tr.fancytree-hide,
+.fancytree-ext-filter-hide span.fancytree-node.fancytree-hide {
+ display: none;
+}
+.fancytree-ext-filter-hide tr.fancytree-submatch span.fancytree-title,
+.fancytree-ext-filter-hide span.fancytree-node.fancytree-submatch span.fancytree-title {
+ color: #c0c0c0;
+ font-weight: lighter;
+}
+.fancytree-ext-filter-hide tr.fancytree-match span.fancytree-title,
+.fancytree-ext-filter-hide span.fancytree-node.fancytree-match span.fancytree-title {
+ color: black;
+ font-weight: normal;
+}
+/* Hide expanders if all child nodes are hidden by filter */
+.fancytree-ext-filter-hide-expanders tr.fancytree-match span.fancytree-expander,
+.fancytree-ext-filter-hide-expanders span.fancytree-node.fancytree-match span.fancytree-expander {
+ visibility: hidden;
+}
+.fancytree-ext-filter-hide-expanders tr.fancytree-submatch span.fancytree-expander,
+.fancytree-ext-filter-hide-expanders span.fancytree-node.fancytree-submatch span.fancytree-expander {
+ visibility: visible;
+}
+.fancytree-ext-childcounter span.fancytree-icon,
+.fancytree-ext-filter span.fancytree-icon,
+.fancytree-ext-childcounter span.fancytree-custom-icon,
+.fancytree-ext-filter span.fancytree-custom-icon {
+ position: relative;
+}
+.fancytree-ext-childcounter span.fancytree-childcounter,
+.fancytree-ext-filter span.fancytree-childcounter {
+ color: #fff;
+ background: #777;
+ border: 1px solid gray;
+ position: absolute;
+ top: -6px;
+ right: -6px;
+ min-width: 10px;
+ height: 10px;
+ line-height: 1;
+ vertical-align: baseline;
+ border-radius: 10px;
+ padding: 2px;
+ text-align: center;
+ font-size: 9px;
+}
+/*------------------------------------------------------------------------------
+ * 'wide' extension
+ *----------------------------------------------------------------------------*/
+ul.fancytree-ext-wide {
+ position: relative;
+ min-width: 100%;
+ z-index: 2;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+ul.fancytree-ext-wide span.fancytree-node > span {
+ position: relative;
+ z-index: 2;
+}
+ul.fancytree-ext-wide span.fancytree-node span.fancytree-title {
+ position: absolute;
+ z-index: 1;
+ left: 0px;
+ min-width: 100%;
+ margin-left: 0;
+ margin-right: 0;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+/*------------------------------------------------------------------------------
+ * 'fixed' extension
+ *----------------------------------------------------------------------------*/
+.fancytree-ext-fixed-wrapper .fancytree-ext-fixed-hidden {
+ display: none;
+}
+.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-scroll-border-bottom {
+ border-bottom: 3px solid rgba(0, 0, 0, 0.75);
+}
+.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-scroll-border-right {
+ border-right: 3px solid rgba(0, 0, 0, 0.75);
+}
+.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-wrapper-tl {
+ position: absolute;
+ overflow: hidden;
+ z-index: 3;
+ top: 0px;
+ left: 0px;
+}
+.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-wrapper-tr {
+ position: absolute;
+ overflow: hidden;
+ z-index: 2;
+ top: 0px;
+}
+.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-wrapper-bl {
+ position: absolute;
+ overflow: hidden;
+ z-index: 2;
+ left: 0px;
+}
+.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-wrapper-br {
+ position: absolute;
+ overflow: scroll;
+ z-index: 1;
+}
+/*******************************************************************************
+ * Styles specific to this skin.
+ *
+ * This section is automatically generated from the `ui-fancytree.less` template.
+ ******************************************************************************/
+/*******************************************************************************
+ * Node titles
+ */
+span.fancytree-title {
+ border: 1px solid transparent;
+ border-radius: 0;
+}
+span.fancytree-focused span.fancytree-title {
+ outline: 1px dotted black;
+}
+span.fancytree-selected span.fancytree-title,
+span.fancytree-active span.fancytree-title {
+ background-color: #D4D4D4;
+}
+span.fancytree-selected span.fancytree-title {
+ font-style: italic;
+}
+.fancytree-treefocus span.fancytree-selected span.fancytree-title,
+.fancytree-treefocus span.fancytree-active span.fancytree-title {
+ color: white;
+ background-color: #3875D7;
+}
+/*******************************************************************************
+ * 'table' extension
+ */
+table.fancytree-ext-table {
+ border-collapse: collapse;
+}
+table.fancytree-ext-table tbody tr.fancytree-focused {
+ background-color: #99DEFD;
+}
+table.fancytree-ext-table tbody tr.fancytree-active {
+ background-color: royalblue;
+}
+table.fancytree-ext-table tbody tr.fancytree-selected {
+ background-color: #99DEFD;
+}
+/*******************************************************************************
+ * 'columnview' extension
+ */
+table.fancytree-ext-columnview tbody tr td {
+ border: 1px solid gray;
+}
+table.fancytree-ext-columnview span.fancytree-node.fancytree-expanded {
+ background-color: #ccc;
+}
+table.fancytree-ext-columnview span.fancytree-node.fancytree-active {
+ background-color: royalblue;
+}
diff --git a/conlite/scripts/fancytree/skin-lion/ui.fancytree.less b/conlite/scripts/fancytree/skin-lion/ui.fancytree.less
new file mode 100644
index 0000000..b28f5c0
--- /dev/null
+++ b/conlite/scripts/fancytree/skin-lion/ui.fancytree.less
@@ -0,0 +1,98 @@
+ /*!
+ * Fancytree "Lion" skin.
+ *
+ * DON'T EDIT THE CSS FILE DIRECTLY, since it is automatically generated from
+ * the LESS templates.
+ */
+
+/*
+ Lion colors:
+ gray highlight bar: #D4D4D4
+ blue highlight-bar and -border #3875D7
+
+*/
+// Import common styles
+@import "../skin-common.less";
+
+
+/*******************************************************************************
+ * Styles specific to this skin.
+ *
+ * This section is automatically generated from the `ui-fancytree.less` template.
+ ******************************************************************************/
+
+// Override the variable after the import.
+// NOTE: Variables are always resolved as the last definition, even if it is
+// after where it is used.
+@fancy-use-sprites: true; // false: suppress all background images (i.e. icons)
+
+@fancy-icon-width: 16px;
+@fancy-icon-height: 16px;
+@fancy-line-height: 16px;
+@fancy-icon-spacing: 3px;
+
+// We need to define this variable here (not in skin-common.less) to make it
+// work with grunt and webpack:
+@fancy-image-prefix: "./skin-lion/";
+
+// Use 'data-uri(...)' to embed the image into CSS instead of linking to 'loading.gif':
+// @fancy-loading-url: data-uri("@{fancy-image-prefix}loading.gif");
+// Set to `true` to use `data-uri(...)` which will embed icons.gif into CSS
+// instead of linking to that file:
+// @fancy-inline-sprites: true;
+
+
+/*******************************************************************************
+ * Node titles
+ */
+span.fancytree-title {
+ border: 1px solid transparent; // reserve some space for status borders
+ border-radius: 0;
+}
+span.fancytree-focused span.fancytree-title {
+ outline: 1px dotted black;
+}
+span.fancytree-selected span.fancytree-title,
+span.fancytree-active span.fancytree-title {
+ background-color: #D4D4D4; // gray
+}
+span.fancytree-selected span.fancytree-title {
+ font-style: italic;
+}
+.fancytree-treefocus span.fancytree-selected span.fancytree-title,
+.fancytree-treefocus span.fancytree-active span.fancytree-title {
+ color: white;
+ background-color: #3875D7; // blue
+}
+
+/*******************************************************************************
+ * 'table' extension
+ */
+table.fancytree-ext-table {
+ border-collapse: collapse;
+ tbody {
+ tr.fancytree-focused {
+ background-color: #99DEFD;
+ }
+ tr.fancytree-active {
+ background-color: royalblue;
+ }
+ tr.fancytree-selected {
+ background-color: #99DEFD;
+ }
+ }
+}
+
+/*******************************************************************************
+ * 'columnview' extension
+ */
+
+table.fancytree-ext-columnview tbody tr td {
+ border: 1px solid gray;
+}
+table.fancytree-ext-columnview span.fancytree-node.fancytree-expanded {
+ background-color: #ccc;
+}
+table.fancytree-ext-columnview span.fancytree-node.fancytree-active {
+ background-color: royalblue;
+}
diff --git a/conlite/scripts/fancytree/skin-lion/ui.fancytree.min.css b/conlite/scripts/fancytree/skin-lion/ui.fancytree.min.css
new file mode 100644
index 0000000..4842990
--- /dev/null
+++ b/conlite/scripts/fancytree/skin-lion/ui.fancytree.min.css
@@ -0,0 +1,6 @@
+/*!
+ * Fancytree "Lion" skin.
+ *
+ * DON'T EDIT THE CSS FILE DIRECTLY, since it is automatically generated from
+ * the LESS templates.
+ */.fancytree-helper-hidden{display:none}.fancytree-helper-indeterminate-cb{color:#777}.fancytree-helper-disabled{color:silver}.fancytree-helper-spin{-webkit-animation:spin 1s infinite linear;animation:spin 1s infinite linear}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}ul.fancytree-container{font-family:tahoma,arial,helvetica;font-size:10pt;white-space:nowrap;padding:3px;margin:0;background-color:#fff;border:1px dotted gray;min-height:0;position:relative}ul.fancytree-container ul{padding:0 0 0 16px;margin:0}ul.fancytree-container ul>li:before{content:none}ul.fancytree-container li{list-style-image:none;list-style-position:outside;list-style-type:none;-moz-background-clip:border;-moz-background-inline-policy:continuous;-moz-background-origin:padding;background-attachment:scroll;background-color:transparent;background-position:0 0;background-repeat:repeat-y;background-image:none;margin:0}ul.fancytree-container li.fancytree-lastsib{background-image:none}.ui-fancytree-disabled ul.fancytree-container{opacity:.5;background-color:silver}ul.fancytree-connectors.fancytree-container li{background-image:url(../skin-lion/vline.gif);background-position:0 0}ul.fancytree-container li.fancytree-lastsib,ul.fancytree-no-connector>li{background-image:none}li.fancytree-animating{position:relative}#fancytree-drop-marker,span.fancytree-checkbox,span.fancytree-drag-helper-img,span.fancytree-empty,span.fancytree-expander,span.fancytree-icon,span.fancytree-vline{width:16px;height:16px;display:inline-block;vertical-align:top;background-repeat:no-repeat;background-image:url(../skin-lion/icons.gif);background-position:0 0}span.fancytree-checkbox,span.fancytree-custom-icon,span.fancytree-expander,span.fancytree-icon{margin-top:0}span.fancytree-custom-icon{width:16px;height:16px;display:inline-block;margin-left:3px;background-position:0 0}img.fancytree-icon{width:16px;height:16px;margin-left:3px;margin-top:0;vertical-align:top;border-style:none}span.fancytree-expander{cursor:pointer}.fancytree-exp-n span.fancytree-expander,.fancytree-exp-nl span.fancytree-expander{background-image:none;cursor:default}.fancytree-connectors .fancytree-exp-n span.fancytree-expander,.fancytree-connectors .fancytree-exp-nl span.fancytree-expander{background-image:url(../skin-lion/icons.gif);margin-top:0}.fancytree-connectors .fancytree-exp-n span.fancytree-expander,.fancytree-connectors .fancytree-exp-n span.fancytree-expander:hover{background-position:0 -64px}.fancytree-connectors .fancytree-exp-nl span.fancytree-expander,.fancytree-connectors .fancytree-exp-nl span.fancytree-expander:hover{background-position:-16px -64px}.fancytree-exp-c span.fancytree-expander{background-position:0 -80px}.fancytree-exp-c span.fancytree-expander:hover{background-position:-16px -80px}.fancytree-exp-cl span.fancytree-expander{background-position:0 -96px}.fancytree-exp-cl span.fancytree-expander:hover{background-position:-16px -96px}.fancytree-exp-cd span.fancytree-expander{background-position:-64px -80px}.fancytree-exp-cd span.fancytree-expander:hover{background-position:-80px -80px}.fancytree-exp-cdl span.fancytree-expander{background-position:-64px -96px}.fancytree-exp-cdl span.fancytree-expander:hover{background-position:-80px -96px}.fancytree-exp-e span.fancytree-expander,.fancytree-exp-ed span.fancytree-expander{background-position:-32px -80px}.fancytree-exp-e span.fancytree-expander:hover,.fancytree-exp-ed span.fancytree-expander:hover{background-position:-48px -80px}.fancytree-exp-edl span.fancytree-expander,.fancytree-exp-el span.fancytree-expander{background-position:-32px -96px}.fancytree-exp-edl span.fancytree-expander:hover,.fancytree-exp-el span.fancytree-expander:hover{background-position:-48px -96px}.fancytree-fade-expander span.fancytree-expander{transition:opacity 1.5s;opacity:0}.fancytree-fade-expander .fancytree-treefocus span.fancytree-expander,.fancytree-fade-expander [class*=fancytree-statusnode-] span.fancytree-expander,.fancytree-fade-expander.fancytree-treefocus span.fancytree-expander,.fancytree-fade-expander:hover span.fancytree-expander{transition:opacity .6s;opacity:1}span.fancytree-checkbox{margin-left:3px;background-position:0 -32px}span.fancytree-checkbox:hover{background-position:-16px -32px}span.fancytree-checkbox.fancytree-radio{background-position:0 -48px}span.fancytree-checkbox.fancytree-radio:hover{background-position:-16px -48px}.fancytree-partsel span.fancytree-checkbox{background-position:-64px -32px}.fancytree-partsel span.fancytree-checkbox:hover{background-position:-80px -32px}.fancytree-partsel span.fancytree-checkbox.fancytree-radio{background-position:-64px -48px}.fancytree-partsel span.fancytree-checkbox.fancytree-radio:hover{background-position:-80px -48px}.fancytree-selected span.fancytree-checkbox{background-position:-32px -32px}.fancytree-selected span.fancytree-checkbox:hover{background-position:-48px -32px}.fancytree-selected span.fancytree-checkbox.fancytree-radio{background-position:-32px -48px}.fancytree-selected span.fancytree-checkbox.fancytree-radio:hover{background-position:-48px -48px}.fancytree-unselectable span.fancytree-checkbox{opacity:.4}.fancytree-unselectable span.fancytree-checkbox:hover{background-position:0 -32px}.fancytree-unselectable span.fancytree-checkbox.fancytree-radio:hover{background-position:0 -48px}.fancytree-unselectable.fancytree-partsel span.fancytree-checkbox:hover{background-position:-64px -32px}.fancytree-unselectable.fancytree-selected span.fancytree-checkbox:hover{background-position:-32px -32px}.fancytree-unselectable.fancytree-selected span.fancytree-checkbox.fancytree-radio:hover{background-position:-32px -48px}.fancytree-container.fancytree-checkbox-auto-hide span.fancytree-checkbox{visibility:hidden}.fancytree-container.fancytree-checkbox-auto-hide .fancytree-node.fancytree-selected span.fancytree-checkbox,.fancytree-container.fancytree-checkbox-auto-hide .fancytree-node:hover span.fancytree-checkbox,.fancytree-container.fancytree-checkbox-auto-hide tr.fancytree-selected td span.fancytree-checkbox,.fancytree-container.fancytree-checkbox-auto-hide tr:hover td span.fancytree-checkbox{visibility:unset}.fancytree-container.fancytree-checkbox-auto-hide.fancytree-treefocus .fancytree-node.fancytree-active span.fancytree-checkbox,.fancytree-container.fancytree-checkbox-auto-hide.fancytree-treefocus tr.fancytree-active td span.fancytree-checkbox{visibility:unset}span.fancytree-icon{margin-left:3px;background-position:0 0}.fancytree-ico-c span.fancytree-icon:hover{background-position:-16px 0}.fancytree-has-children.fancytree-ico-c span.fancytree-icon{background-position:-32px 0}.fancytree-has-children.fancytree-ico-c span.fancytree-icon:hover{background-position:-48px 0}.fancytree-ico-e span.fancytree-icon{background-position:-64px 0}.fancytree-ico-e span.fancytree-icon:hover{background-position:-80px 0}.fancytree-ico-cf span.fancytree-icon{background-position:0 -16px}.fancytree-ico-cf span.fancytree-icon:hover{background-position:-16px -16px}.fancytree-has-children.fancytree-ico-cf span.fancytree-icon{background-position:-32px -16px}.fancytree-has-children.fancytree-ico-cf span.fancytree-icon:hover{background-position:-48px -16px}.fancytree-ico-ef span.fancytree-icon{background-position:-64px -16px}.fancytree-ico-ef span.fancytree-icon:hover{background-position:-80px -16px}.fancytree-loading span.fancytree-expander,.fancytree-loading span.fancytree-expander:hover,.fancytree-statusnode-loading span.fancytree-icon,.fancytree-statusnode-loading span.fancytree-icon:hover,span.fancytree-icon.fancytree-icon-loading{background-image:url(../skin-lion/loading.gif);background-position:0 0}.fancytree-statusnode-error span.fancytree-icon,.fancytree-statusnode-error span.fancytree-icon:hover{background-position:0 -112px}span.fancytree-node{display:inherit;width:100%;margin-top:1px;min-height:16px}span.fancytree-title{color:#000;cursor:pointer;display:inline-block;vertical-align:top;min-height:16px;padding:0 3px 0 3px;margin:0 0 0 3px;border:1px solid transparent;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0}span.fancytree-node.fancytree-error span.fancytree-title{color:red}span.fancytree-childcounter{color:#fff;background:#337ab7;border:1px solid gray;border-radius:10px;padding:2px;text-align:center}div.fancytree-drag-helper span.fancytree-childcounter,div.fancytree-drag-helper span.fancytree-dnd-modifier{display:inline-block;color:#fff;background:#337ab7;border:1px solid gray;min-width:10px;height:10px;line-height:1;vertical-align:baseline;border-radius:10px;padding:2px;text-align:center;font-size:9px}div.fancytree-drag-helper span.fancytree-childcounter{position:absolute;top:-6px;right:-6px}div.fancytree-drag-helper span.fancytree-dnd-modifier{background:#5cb85c;border:none;font-weight:bolder}div.fancytree-drag-helper.fancytree-drop-accept span.fancytree-drag-helper-img{background-position:-32px -112px}div.fancytree-drag-helper.fancytree-drop-reject span.fancytree-drag-helper-img{background-position:-16px -112px}#fancytree-drop-marker{width:32px;position:absolute;background-position:0 -128px;margin:0}#fancytree-drop-marker.fancytree-drop-after,#fancytree-drop-marker.fancytree-drop-before{width:64px;background-position:0 -144px}#fancytree-drop-marker.fancytree-drop-copy{background-position:-64px -128px}#fancytree-drop-marker.fancytree-drop-move{background-position:-32px -128px}span.fancytree-drag-source.fancytree-drag-remove{opacity:.15}.fancytree-container.fancytree-rtl span.fancytree-connector,.fancytree-container.fancytree-rtl span.fancytree-drag-helper-img,.fancytree-container.fancytree-rtl span.fancytree-expander,.fancytree-container.fancytree-rtl span.fancytree-icon{background-image:url(../skin-lion/icons-rtl.gif)}.fancytree-container.fancytree-rtl .fancytree-exp-n span.fancytree-expander,.fancytree-container.fancytree-rtl .fancytree-exp-nl span.fancytree-expander{background-image:none}.fancytree-container.fancytree-rtl.fancytree-connectors .fancytree-exp-n span.fancytree-expander,.fancytree-container.fancytree-rtl.fancytree-connectors .fancytree-exp-nl span.fancytree-expander{background-image:url(../skin-lion/icons-rtl.gif)}ul.fancytree-container.fancytree-rtl ul{padding:0 16px 0 0}ul.fancytree-container.fancytree-rtl.fancytree-connectors li{background-position:right 0;background-image:url(../skin-lion/vline-rtl.gif)}ul.fancytree-container.fancytree-rtl li.fancytree-lastsib,ul.fancytree-container.fancytree-rtl.fancytree-no-connector>li{background-image:none}#fancytree-drop-marker.fancytree-rtl{background-image:url(../skin-lion/icons-rtl.gif)}table.fancytree-ext-table{font-family:tahoma,arial,helvetica;font-size:10pt;border-collapse:collapse}table.fancytree-ext-table span.fancytree-node{display:inline-block;box-sizing:border-box}table.fancytree-ext-table td.fancytree-status-merged{text-align:center;font-style:italic;color:silver}table.fancytree-ext-table tr.fancytree-statusnode-error td.fancytree-status-merged{color:red}table.fancytree-ext-table.fancytree-ext-ariagrid.fancytree-cell-mode>tbody>tr.fancytree-active>td{background-color:#eee}table.fancytree-ext-table.fancytree-ext-ariagrid.fancytree-cell-mode>tbody>tr>td.fancytree-active-cell{background-color:#cbe8f6}table.fancytree-ext-table.fancytree-ext-ariagrid.fancytree-cell-mode.fancytree-cell-nav-mode>tbody>tr>td.fancytree-active-cell{background-color:#3875d7}table.fancytree-ext-columnview tbody tr td{position:relative;border:1px solid gray;vertical-align:top;overflow:auto}table.fancytree-ext-columnview tbody tr td>ul{padding:0}table.fancytree-ext-columnview tbody tr td>ul li{list-style-image:none;list-style-position:outside;list-style-type:none;-moz-background-clip:border;-moz-background-inline-policy:continuous;-moz-background-origin:padding;background-attachment:scroll;background-color:transparent;background-position:0 0;background-repeat:repeat-y;background-image:none;margin:0}table.fancytree-ext-columnview span.fancytree-node{position:relative;display:inline-block}table.fancytree-ext-columnview span.fancytree-node.fancytree-expanded{background-color:#e0e0e0}table.fancytree-ext-columnview span.fancytree-node.fancytree-active{background-color:#cbe8f6}table.fancytree-ext-columnview .fancytree-has-children span.fancytree-cv-right{position:absolute;right:3px;background-position:0 -80px}table.fancytree-ext-columnview .fancytree-has-children span.fancytree-cv-right:hover{background-position:-16px -80px}.fancytree-ext-filter-dimm span.fancytree-node span.fancytree-title{color:silver;font-weight:lighter}.fancytree-ext-filter-dimm span.fancytree-node.fancytree-submatch span.fancytree-title,.fancytree-ext-filter-dimm tr.fancytree-submatch span.fancytree-title{color:#000;font-weight:400}.fancytree-ext-filter-dimm span.fancytree-node.fancytree-match span.fancytree-title,.fancytree-ext-filter-dimm tr.fancytree-match span.fancytree-title{color:#000;font-weight:700}.fancytree-ext-filter-hide span.fancytree-node.fancytree-hide,.fancytree-ext-filter-hide tr.fancytree-hide{display:none}.fancytree-ext-filter-hide span.fancytree-node.fancytree-submatch span.fancytree-title,.fancytree-ext-filter-hide tr.fancytree-submatch span.fancytree-title{color:silver;font-weight:lighter}.fancytree-ext-filter-hide span.fancytree-node.fancytree-match span.fancytree-title,.fancytree-ext-filter-hide tr.fancytree-match span.fancytree-title{color:#000;font-weight:400}.fancytree-ext-filter-hide-expanders span.fancytree-node.fancytree-match span.fancytree-expander,.fancytree-ext-filter-hide-expanders tr.fancytree-match span.fancytree-expander{visibility:hidden}.fancytree-ext-filter-hide-expanders span.fancytree-node.fancytree-submatch span.fancytree-expander,.fancytree-ext-filter-hide-expanders tr.fancytree-submatch span.fancytree-expander{visibility:visible}.fancytree-ext-childcounter span.fancytree-custom-icon,.fancytree-ext-childcounter span.fancytree-icon,.fancytree-ext-filter span.fancytree-custom-icon,.fancytree-ext-filter span.fancytree-icon{position:relative}.fancytree-ext-childcounter span.fancytree-childcounter,.fancytree-ext-filter span.fancytree-childcounter{color:#fff;background:#777;border:1px solid gray;position:absolute;top:-6px;right:-6px;min-width:10px;height:10px;line-height:1;vertical-align:baseline;border-radius:10px;padding:2px;text-align:center;font-size:9px}ul.fancytree-ext-wide{position:relative;min-width:100%;z-index:2;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}ul.fancytree-ext-wide span.fancytree-node>span{position:relative;z-index:2}ul.fancytree-ext-wide span.fancytree-node span.fancytree-title{position:absolute;z-index:1;left:0;min-width:100%;margin-left:0;margin-right:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.fancytree-ext-fixed-wrapper .fancytree-ext-fixed-hidden{display:none}.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-scroll-border-bottom{border-bottom:3px solid rgba(0,0,0,.75)}.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-scroll-border-right{border-right:3px solid rgba(0,0,0,.75)}.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-wrapper-tl{position:absolute;overflow:hidden;z-index:3;top:0;left:0}.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-wrapper-tr{position:absolute;overflow:hidden;z-index:2;top:0}.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-wrapper-bl{position:absolute;overflow:hidden;z-index:2;left:0}.fancytree-ext-fixed-wrapper div.fancytree-ext-fixed-wrapper-br{position:absolute;overflow:scroll;z-index:1}span.fancytree-title{border:1px solid transparent;border-radius:0}span.fancytree-focused span.fancytree-title{outline:1px dotted #000}span.fancytree-active span.fancytree-title,span.fancytree-selected span.fancytree-title{background-color:#d4d4d4}span.fancytree-selected span.fancytree-title{font-style:italic}.fancytree-treefocus span.fancytree-active span.fancytree-title,.fancytree-treefocus span.fancytree-selected span.fancytree-title{color:#fff;background-color:#3875d7}table.fancytree-ext-table{border-collapse:collapse}table.fancytree-ext-table tbody tr.fancytree-focused{background-color:#99defd}table.fancytree-ext-table tbody tr.fancytree-active{background-color:#4169e1}table.fancytree-ext-table tbody tr.fancytree-selected{background-color:#99defd}table.fancytree-ext-columnview tbody tr td{border:1px solid gray}table.fancytree-ext-columnview span.fancytree-node.fancytree-expanded{background-color:#ccc}table.fancytree-ext-columnview span.fancytree-node.fancytree-active{background-color:#4169e1}
\ No newline at end of file
diff --git a/conlite/scripts/fancytree/skin-lion/vline-rtl.gif b/conlite/scripts/fancytree/skin-lion/vline-rtl.gif
new file mode 100644
index 0000000..f9b4232
Binary files /dev/null and b/conlite/scripts/fancytree/skin-lion/vline-rtl.gif differ
diff --git a/conlite/scripts/fancytree/skin-lion/vline.gif b/conlite/scripts/fancytree/skin-lion/vline.gif
new file mode 100644
index 0000000..f9b4232
Binary files /dev/null and b/conlite/scripts/fancytree/skin-lion/vline.gif differ
diff --git a/conlite/templates/standard/html5/file_list.html b/conlite/templates/standard/html5/file_list.html
new file mode 100644
index 0000000..83ba267
--- /dev/null
+++ b/conlite/templates/standard/html5/file_list.html
@@ -0,0 +1,113 @@
+
+
+
+
+ test
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {item_list}
+
+
+
+
+
+
+
+
+
+
+
+