/*! * jQuery UI Core @VERSION * http://jqueryui.com * * Copyright 2014 jQuery Foundation and other contributors * Released under the MIT license. * http://jquery.org/license * * http://api.jqueryui.com/category/ui-core/ */ (function( factory ) { if ( typeof define === "function" && define.amd ) { // AMD. Register as an anonymous module. define( [ "jquery" ], factory ); } else { // Browser globals factory( jQuery ); } }(function( $ ) { // $.ui might exist from components with no dependencies, e.g., $.ui.position $.ui = $.ui || {}; $.extend( $.ui, { version: "@VERSION", 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 } }); // plugins $.fn.extend({ 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; }, 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" ); } }); } }); // selectors function focusable( element, isTabIndexNotNaN ) { var map, mapName, img, nodeName = element.nodeName.toLowerCase(); if ( "area" === nodeName ) { map = element.parentNode; mapName = map.name; if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) { return false; } img = $( "img[usemap='#" + mapName + "']" )[ 0 ]; return !!img && visible( img ); } return ( /input|select|textarea|button|object/.test( nodeName ) ? !element.disabled : "a" === nodeName ? element.href || isTabIndexNotNaN : isTabIndexNotNaN) && // the element and all of its ancestors must be visible visible( element ); } function visible( element ) { return $.expr.filters.visible( element ) && !$( element ).parents().addBack().filter(function() { return $.css( this, "visibility" ) === "hidden"; }).length; } $.extend( $.expr[ ":" ], { data: $.expr.createPseudo ? $.expr.createPseudo(function( dataName ) { return function( elem ) { return !!$.data( elem, dataName ); }; }) : // support: jQuery <1.8 function( elem, i, match ) { return !!$.data( elem, match[ 3 ] ); }, focusable: function( element ) { return focusable( element, !isNaN( $.attr( element, "tabindex" ) ) ); }, tabbable: function( element ) { var tabIndex = $.attr( element, "tabindex" ), isTabIndexNaN = isNaN( tabIndex ); return ( isTabIndexNaN || tabIndex >= 0 ) && focusable( element, !isTabIndexNaN ); } }); // support: jQuery <1.8 if ( !$( "" ).outerWidth( 1 ).jquery ) { $.each( [ "Width", "Height" ], function( i, name ) { var side = name === "Width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ], type = name.toLowerCase(), orig = { innerWidth: $.fn.innerWidth, innerHeight: $.fn.innerHeight, outerWidth: $.fn.outerWidth, outerHeight: $.fn.outerHeight }; function reduce( elem, size, border, margin ) { $.each( side, function() { size -= parseFloat( $.css( elem, "padding" + this ) ) || 0; if ( border ) { size -= parseFloat( $.css( elem, "border" + this + "Width" ) ) || 0; } if ( margin ) { size -= parseFloat( $.css( elem, "margin" + this ) ) || 0; } }); return size; } $.fn[ "inner" + name ] = function( size ) { if ( size === undefined ) { return orig[ "inner" + name ].call( this ); } return this.each(function() { $( this ).css( type, reduce( this, size ) + "px" ); }); }; $.fn[ "outer" + name] = function( size, margin ) { if ( typeof size !== "number" ) { return orig[ "outer" + name ].call( this, size ); } return this.each(function() { $( this).css( type, reduce( this, size, true, margin ) + "px" ); }); }; }); } // support: jQuery <1.8 if ( !$.fn.addBack ) { $.fn.addBack = function( selector ) { return this.add( selector == null ? this.prevObject : this.prevObject.filter( selector ) ); }; } // support: jQuery 1.6.1, 1.6.2 (http://bugs.jquery.com/ticket/9413) if ( $( "" ).data( "a-b", "a" ).removeData( "a-b" ).data( "a-b" ) ) { $.fn.removeData = (function( removeData ) { return function( key ) { if ( arguments.length ) { return removeData.call( this, $.camelCase( key ) ); } else { return removeData.call( this ); } }; })( $.fn.removeData ); } // deprecated $.ui.ie = !!/msie [\w.]+/.exec( navigator.userAgent.toLowerCase() ); $.fn.extend({ focus: (function( orig ) { return function( delay, fn ) { return typeof delay === "number" ? this.each(function() { var elem = this; setTimeout(function() { $( elem ).focus(); if ( fn ) { fn.call( elem ); } }, delay ); }) : orig.apply( this, arguments ); }; })( $.fn.focus ), disableSelection: (function() { var eventType = "onselectstart" in document.createElement( "div" ) ? "selectstart" : "mousedown"; return function() { return this.bind( eventType + ".ui-disableSelection", function( event ) { event.preventDefault(); }); }; })(), enableSelection: function() { return this.unbind( ".ui-disableSelection" ); }, zIndex: function( zIndex ) { if ( zIndex !== undefined ) { return this.css( "zIndex", zIndex ); } if ( this.length ) { var elem = $( this[ 0 ] ), position, value; while ( elem.length && elem[ 0 ] !== document ) { // Ignore z-index if position is set to a value where z-index is ignored by the browser // This makes behavior of this function consistent across browsers // WebKit always returns auto if the element is positioned position = elem.css( "position" ); if ( position === "absolute" || position === "relative" || position === "fixed" ) { // IE returns 0 when zIndex is not specified // other browsers return a string // we ignore the case of nested elements with an explicit value of 0 //
value = parseInt( elem.css( "zIndex" ), 10 ); if ( !isNaN( value ) && value !== 0 ) { return value; } } elem = elem.parent(); } } return 0; } }); // $.ui.plugin is deprecated. Use $.widget() extensions instead. $.ui.plugin = { add: function( module, option, set ) { var i, proto = $.ui[ module ].prototype; for ( i in set ) { proto.plugins[ i ] = proto.plugins[ i ] || []; proto.plugins[ i ].push( [ option, set[ i ] ] ); } }, call: function( instance, name, args, allowDisconnected ) { var i, set = instance.plugins[ name ]; if ( !set ) { return; } if ( !allowDisconnected && ( !instance.element[ 0 ].parentNode || instance.element[ 0 ].parentNode.nodeType === 11 ) ) { return; } for ( i = 0; i < set.length; i++ ) { if ( instance.options[ set[ i ][ 0 ] ] ) { set[ i ][ 1 ].apply( instance.element, args ); } } } }; })); /*! * jQuery UI Widget @VERSION * http://jqueryui.com * * Copyright 2014 jQuery Foundation and other contributors * Released under the MIT license. * http://jquery.org/license * * http://api.jqueryui.com/jQuery.widget/ */ (function( factory ) { if ( typeof define === "function" && define.amd ) { // AMD. Register as an anonymous module. define( [ "jquery" ], factory ); } else { // Browser globals factory( jQuery ); } }(function( $ ) { var widget_uuid = 0, widget_slice = Array.prototype.slice; $.cleanData = (function( orig ) { return function( elems ) { var events, elem, i; for ( i = 0; (elem = elems[i]) != null; i++ ) { try { // Only trigger remove when necessary to save time events = $._data( elem, "events" ); if ( events && events.remove ) { $( elem ).triggerHandler( "remove" ); } // http://bugs.jquery.com/ticket/8235 } catch ( e ) {} } orig( elems ); }; })( $.cleanData ); $.widget = function( name, base, prototype ) { var fullName, existingConstructor, constructor, basePrototype, // proxiedPrototype allows the provided prototype to remain unmodified // so that it can be used as a mixin for multiple widgets (#8876) proxiedPrototype = {}, namespace = name.split( "." )[ 0 ]; name = name.split( "." )[ 1 ]; fullName = namespace + "-" + name; if ( !prototype ) { prototype = base; base = $.Widget; } // create selector for plugin $.expr[ ":" ][ fullName.toLowerCase() ] = function( elem ) { return !!$.data( elem, fullName ); }; $[ namespace ] = $[ namespace ] || {}; existingConstructor = $[ namespace ][ name ]; constructor = $[ namespace ][ name ] = function( options, element ) { // allow instantiation without "new" keyword if ( !this._createWidget ) { return new constructor( options, element ); } // allow instantiation without initializing for simple inheritance // must use "new" keyword (the code above always passes args) if ( arguments.length ) { this._createWidget( options, element ); } }; // extend with the existing constructor to carry over any static properties $.extend( constructor, existingConstructor, { version: prototype.version, // copy the object used to create the prototype in case we need to // redefine the widget later _proto: $.extend( {}, prototype ), // track widgets that inherit from this widget in case this widget is // redefined after a widget inherits from it _childConstructors: [] }); basePrototype = new base(); // we need to make the options hash a property directly on the new instance // otherwise we'll modify the options hash on the prototype that we're // inheriting from basePrototype.options = $.widget.extend( {}, basePrototype.options ); $.each( prototype, function( prop, value ) { if ( !$.isFunction( value ) ) { proxiedPrototype[ prop ] = value; return; } proxiedPrototype[ prop ] = (function() { var _super = function() { return base.prototype[ prop ].apply( this, arguments ); }, _superApply = function( args ) { return base.prototype[ prop ].apply( this, args ); }; return function() { var __super = this._super, __superApply = this._superApply, returnValue; this._super = _super; this._superApply = _superApply; returnValue = value.apply( this, arguments ); this._super = __super; this._superApply = __superApply; return returnValue; }; })(); }); constructor.prototype = $.widget.extend( basePrototype, { // TODO: remove support for widgetEventPrefix // always use the name + a colon as the prefix, e.g., draggable:start // don't prefix for widgets that aren't DOM-based widgetEventPrefix: existingConstructor ? (basePrototype.widgetEventPrefix || name) : name }, proxiedPrototype, { constructor: constructor, namespace: namespace, widgetName: name, widgetFullName: fullName }); // If this widget is being redefined then we need to find all widgets that // are inheriting from it and redefine all of them so that they inherit from // the new version of this widget. We're essentially trying to replace one // level in the prototype chain. if ( existingConstructor ) { $.each( existingConstructor._childConstructors, function( i, child ) { var childPrototype = child.prototype; // redefine the child widget using the same prototype that was // originally used, but inherit from the new version of the base $.widget( childPrototype.namespace + "." + childPrototype.widgetName, constructor, child._proto ); }); // remove the list of existing child constructors from the old constructor // so the old child constructors can be garbage collected delete existingConstructor._childConstructors; } else { base._childConstructors.push( constructor ); } $.widget.bridge( name, constructor ); return constructor; }; $.widget.extend = function( target ) { var input = widget_slice.call( arguments, 1 ), inputIndex = 0, inputLength = input.length, key, value; for ( ; inputIndex < inputLength; inputIndex++ ) { for ( key in input[ inputIndex ] ) { value = input[ inputIndex ][ key ]; if ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) { // Clone objects if ( $.isPlainObject( value ) ) { target[ key ] = $.isPlainObject( target[ key ] ) ? $.widget.extend( {}, target[ key ], value ) : // Don't extend strings, arrays, etc. with objects $.widget.extend( {}, value ); // Copy everything else by reference } else { target[ key ] = value; } } } } return target; }; $.widget.bridge = function( name, object ) { var fullName = object.prototype.widgetFullName || name; $.fn[ name ] = function( options ) { var isMethodCall = typeof options === "string", args = widget_slice.call( arguments, 1 ), returnValue = this; // allow multiple hashes to be passed on init options = !isMethodCall && args.length ? $.widget.extend.apply( null, [ options ].concat(args) ) : options; if ( isMethodCall ) { this.each(function() { var methodValue, instance = $.data( this, fullName ); if ( options === "instance" ) { returnValue = instance; return false; } if ( !instance ) { return $.error( "cannot call methods on " + name + " prior to initialization; " + "attempted to call method '" + options + "'" ); } if ( !$.isFunction( instance[options] ) || options.charAt( 0 ) === "_" ) { return $.error( "no such method '" + options + "' for " + name + " widget instance" ); } methodValue = instance[ options ].apply( instance, args ); if ( methodValue !== instance && methodValue !== undefined ) { returnValue = methodValue && methodValue.jquery ? returnValue.pushStack( methodValue.get() ) : methodValue; return false; } }); } else { this.each(function() { var instance = $.data( this, fullName ); if ( instance ) { instance.option( options || {} ); if ( instance._init ) { instance._init(); } } else { $.data( this, fullName, new object( options, this ) ); } }); } return returnValue; }; }; $.Widget = function( /* options, element */ ) {}; $.Widget._childConstructors = []; $.Widget.prototype = { widgetName: "widget", widgetEventPrefix: "", defaultElement: "
", options: { disabled: false, // callbacks create: null }, _createWidget: function( options, element ) { element = $( element || this.defaultElement || this )[ 0 ]; this.element = $( element ); this.uuid = widget_uuid++; this.eventNamespace = "." + this.widgetName + this.uuid; this.bindings = $(); this.hoverable = $(); this.focusable = $(); if ( element !== this ) { $.data( element, this.widgetFullName, this ); this._on( true, this.element, { remove: function( event ) { if ( event.target === element ) { this.destroy(); } } }); this.document = $( element.style ? // element within the document element.ownerDocument : // element is window or document element.document || element ); this.window = $( this.document[0].defaultView || this.document[0].parentWindow ); } this.options = $.widget.extend( {}, this.options, this._getCreateOptions(), options ); this._create(); this._trigger( "create", null, this._getCreateEventData() ); this._init(); }, _getCreateOptions: $.noop, _getCreateEventData: $.noop, _create: $.noop, _init: $.noop, destroy: function() { this._destroy(); // we can probably remove the unbind calls in 2.0 // all event bindings should go through this._on() this.element .unbind( this.eventNamespace ) .removeData( this.widgetFullName ) // support: jquery <1.6.3 // http://bugs.jquery.com/ticket/9413 .removeData( $.camelCase( this.widgetFullName ) ); this.widget() .unbind( this.eventNamespace ) .removeAttr( "aria-disabled" ) .removeClass( this.widgetFullName + "-disabled " + "ui-state-disabled" ); // clean up events and states this.bindings.unbind( this.eventNamespace ); this.hoverable.removeClass( "ui-state-hover" ); this.focusable.removeClass( "ui-state-focus" ); }, _destroy: $.noop, widget: function() { return this.element; }, option: function( key, value ) { var options = key, parts, curOption, i; if ( arguments.length === 0 ) { // don't return a reference to the internal hash return $.widget.extend( {}, this.options ); } if ( typeof key === "string" ) { // handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } } options = {}; parts = key.split( "." ); key = parts.shift(); if ( parts.length ) { curOption = options[ key ] = $.widget.extend( {}, this.options[ key ] ); for ( i = 0; i < parts.length - 1; i++ ) { curOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {}; curOption = curOption[ parts[ i ] ]; } key = parts.pop(); if ( arguments.length === 1 ) { return curOption[ key ] === undefined ? null : curOption[ key ]; } curOption[ key ] = value; } else { if ( arguments.length === 1 ) { return this.options[ key ] === undefined ? null : this.options[ key ]; } options[ key ] = value; } } this._setOptions( options ); return this; }, _setOptions: function( options ) { var key; for ( key in options ) { this._setOption( key, options[ key ] ); } return this; }, _setOption: function( key, value ) { this.options[ key ] = value; if ( key === "disabled" ) { this.widget() .toggleClass( this.widgetFullName + "-disabled", !!value ); // If the widget is becoming disabled, then nothing is interactive if ( value ) { this.hoverable.removeClass( "ui-state-hover" ); this.focusable.removeClass( "ui-state-focus" ); } } return this; }, enable: function() { return this._setOptions({ disabled: false }); }, disable: function() { return this._setOptions({ disabled: true }); }, _on: function( suppressDisabledCheck, element, handlers ) { var delegateElement, instance = this; // no suppressDisabledCheck flag, shuffle arguments if ( typeof suppressDisabledCheck !== "boolean" ) { handlers = element; element = suppressDisabledCheck; suppressDisabledCheck = false; } // no element argument, shuffle and use this.element if ( !handlers ) { handlers = element; element = this.element; delegateElement = this.widget(); } else { element = delegateElement = $( element ); this.bindings = this.bindings.add( element ); } $.each( handlers, function( event, handler ) { function handlerProxy() { // allow widgets to customize the disabled handling // - disabled as an array instead of boolean // - disabled class as method for disabling individual parts if ( !suppressDisabledCheck && ( instance.options.disabled === true || $( this ).hasClass( "ui-state-disabled" ) ) ) { return; } return ( typeof handler === "string" ? instance[ handler ] : handler ) .apply( instance, arguments ); } // copy the guid so direct unbinding works if ( typeof handler !== "string" ) { handlerProxy.guid = handler.guid = handler.guid || handlerProxy.guid || $.guid++; } var match = event.match( /^([\w:-]*)\s*(.*)$/ ), eventName = match[1] + instance.eventNamespace, selector = match[2]; if ( selector ) { delegateElement.delegate( selector, eventName, handlerProxy ); } else { element.bind( eventName, handlerProxy ); } }); }, _off: function( element, eventName ) { eventName = (eventName || "").split( " " ).join( this.eventNamespace + " " ) + this.eventNamespace; element.unbind( eventName ).undelegate( eventName ); // Clear the stack to avoid memory leaks (#10056) this.bindings = $( this.bindings.not( element ).get() ); this.focusable = $( this.focusable.not( element ).get() ); this.hoverable = $( this.hoverable.not( element ).get() ); }, _delay: function( handler, delay ) { function handlerProxy() { return ( typeof handler === "string" ? instance[ handler ] : handler ) .apply( instance, arguments ); } var instance = this; return setTimeout( handlerProxy, delay || 0 ); }, _hoverable: function( element ) { this.hoverable = this.hoverable.add( element ); this._on( element, { mouseenter: function( event ) { $( event.currentTarget ).addClass( "ui-state-hover" ); }, mouseleave: function( event ) { $( event.currentTarget ).removeClass( "ui-state-hover" ); } }); }, _focusable: function( element ) { this.focusable = this.focusable.add( element ); this._on( element, { focusin: function( event ) { $( event.currentTarget ).addClass( "ui-state-focus" ); }, focusout: function( event ) { $( event.currentTarget ).removeClass( "ui-state-focus" ); } }); }, _trigger: function( type, event, data ) { var prop, orig, callback = this.options[ type ]; data = data || {}; event = $.Event( event ); event.type = ( type === this.widgetEventPrefix ? type : this.widgetEventPrefix + type ).toLowerCase(); // the original event may come from any element // so we need to reset the target on the new event event.target = this.element[ 0 ]; // copy original event properties over to the new event orig = event.originalEvent; if ( orig ) { for ( prop in orig ) { if ( !( prop in event ) ) { event[ prop ] = orig[ prop ]; } } } this.element.trigger( event, data ); return !( $.isFunction( callback ) && callback.apply( this.element[0], [ event ].concat( data ) ) === false || event.isDefaultPrevented() ); } }; $.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) { $.Widget.prototype[ "_" + method ] = function( element, options, callback ) { if ( typeof options === "string" ) { options = { effect: options }; } var hasOptions, effectName = !options ? method : options === true || typeof options === "number" ? defaultEffect : options.effect || defaultEffect; options = options || {}; if ( typeof options === "number" ) { options = { duration: options }; } hasOptions = !$.isEmptyObject( options ); options.complete = callback; if ( options.delay ) { element.delay( options.delay ); } if ( hasOptions && $.effects && $.effects.effect[ effectName ] ) { element[ method ]( options ); } else if ( effectName !== method && element[ effectName ] ) { element[ effectName ]( options.duration, options.easing, callback ); } else { element.queue(function( next ) { $( this )[ method ](); if ( callback ) { callback.call( element[ 0 ] ); } next(); }); } }; }); return $.widget; })); /*! * jQuery UI Mouse @VERSION * http://jqueryui.com * * Copyright 2014 jQuery Foundation and other contributors * Released under the MIT license. * http://jquery.org/license * * http://api.jqueryui.com/mouse/ */ (function( factory ) { if ( typeof define === "function" && define.amd ) { // AMD. Register as an anonymous module. define([ "jquery", "./widget" ], factory ); } else { // Browser globals factory( jQuery ); } }(function( $ ) { var mouseHandled = false; $( document ).mouseup( function() { mouseHandled = false; }); return $.widget("ui.mouse", { version: "@VERSION", options: { cancel: "input,textarea,button,select,option", distance: 1, delay: 0 }, _mouseInit: function() { var that = this; this.element .bind("mousedown." + this.widgetName, function(event) { return that._mouseDown(event); }) .bind("click." + this.widgetName, function(event) { if (true === $.data(event.target, that.widgetName + ".preventClickEvent")) { $.removeData(event.target, that.widgetName + ".preventClickEvent"); event.stopImmediatePropagation(); return false; } }); this.started = false; }, // TODO: make sure destroying one instance of mouse doesn't mess with // other instances of mouse _mouseDestroy: function() { this.element.unbind("." + this.widgetName); if ( this._mouseMoveDelegate ) { this.document .unbind("mousemove." + this.widgetName, this._mouseMoveDelegate) .unbind("mouseup." + this.widgetName, this._mouseUpDelegate); } }, _mouseDown: function(event) { // don't let more than one widget handle mouseStart if ( mouseHandled ) { return; } this._mouseMoved = false; // we may have missed mouseup (out of window) (this._mouseStarted && this._mouseUp(event)); this._mouseDownEvent = event; var that = this, btnIsLeft = (event.which === 1), // event.target.nodeName works around a bug in IE 8 with // disabled inputs (#7620) elIsCancel = (typeof this.options.cancel === "string" && event.target.nodeName ? $(event.target).closest(this.options.cancel).length : false); if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) { return true; } this.mouseDelayMet = !this.options.delay; if (!this.mouseDelayMet) { this._mouseDelayTimer = setTimeout(function() { that.mouseDelayMet = true; }, this.options.delay); } if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) { this._mouseStarted = (this._mouseStart(event) !== false); if (!this._mouseStarted) { event.preventDefault(); return true; } } // Click event may never have fired (Gecko & Opera) if (true === $.data(event.target, this.widgetName + ".preventClickEvent")) { $.removeData(event.target, this.widgetName + ".preventClickEvent"); } // these delegates are required to keep context this._mouseMoveDelegate = function(event) { return that._mouseMove(event); }; this._mouseUpDelegate = function(event) { return that._mouseUp(event); }; this.document .bind( "mousemove." + this.widgetName, this._mouseMoveDelegate ) .bind( "mouseup." + this.widgetName, this._mouseUpDelegate ); event.preventDefault(); mouseHandled = true; return true; }, _mouseMove: function(event) { // Only check for mouseups outside the document if you've moved inside the document // at least once. This prevents the firing of mouseup in the case of IE<9, which will // fire a mousemove event if content is placed under the cursor. See #7778 // Support: IE <9 if ( this._mouseMoved ) { // IE mouseup check - mouseup happened when mouse was out of window if ($.ui.ie && ( !document.documentMode || document.documentMode < 9 ) && !event.button) { return this._mouseUp(event); // Iframe mouseup check - mouseup occurred in another document } else if ( !event.which ) { return this._mouseUp( event ); } } if ( event.which || event.button ) { this._mouseMoved = true; } if (this._mouseStarted) { this._mouseDrag(event); return event.preventDefault(); } if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) { this._mouseStarted = (this._mouseStart(this._mouseDownEvent, event) !== false); (this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event)); } return !this._mouseStarted; }, _mouseUp: function(event) { this.document .unbind( "mousemove." + this.widgetName, this._mouseMoveDelegate ) .unbind( "mouseup." + this.widgetName, this._mouseUpDelegate ); if (this._mouseStarted) { this._mouseStarted = false; if (event.target === this._mouseDownEvent.target) { $.data(event.target, this.widgetName + ".preventClickEvent", true); } this._mouseStop(event); } mouseHandled = false; return false; }, _mouseDistanceMet: function(event) { return (Math.max( Math.abs(this._mouseDownEvent.pageX - event.pageX), Math.abs(this._mouseDownEvent.pageY - event.pageY) ) >= this.options.distance ); }, _mouseDelayMet: function(/* event */) { return this.mouseDelayMet; }, // These are placeholder methods, to be overriden by extending plugin _mouseStart: function(/* event */) {}, _mouseDrag: function(/* event */) {}, _mouseStop: function(/* event */) {}, _mouseCapture: function(/* event */) { return true; } }); })); /*! * jQuery UI Position @VERSION * http://jqueryui.com * * Copyright 2014 jQuery Foundation and other contributors * Released under the MIT license. * http://jquery.org/license * * http://api.jqueryui.com/position/ */ (function( factory ) { if ( typeof define === "function" && define.amd ) { // AMD. Register as an anonymous module. define( [ "jquery" ], factory ); } else { // Browser globals factory( jQuery ); } }(function( $ ) { (function() { $.ui = $.ui || {}; var cachedScrollbarWidth, supportsOffsetFractions, max = Math.max, abs = Math.abs, round = Math.round, 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 = { 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; return { element: withinElement, isWindow: isWindow, isDocument: isDocument, offset: withinElement.offset() || { left: 0, top: 0 }, scrollLeft: withinElement.scrollLeft(), scrollTop: withinElement.scrollTop(), // support: jQuery 1.6.x // jQuery 1.6 doesn't support .outerWidth/Height() on documents or windows width: isWindow || isDocument ? withinElement.width() : withinElement.outerWidth(), height: isWindow || isDocument ? withinElement.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 ]; // if the browser doesn't support fractions, then round for consistent results if ( !supportsOffsetFractions ) { position.left = round( position.left ); position.top = round( position.top ); } 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 ( ( position.top + myOffset + atOffset + offset) > overTop && ( 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 ( ( position.top + myOffset + atOffset + offset) > overBottom && ( 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 ); } } }; // fraction support test (function() { var testElement, testElementParent, testElementStyle, offsetLeft, i, body = document.getElementsByTagName( "body" )[ 0 ], div = document.createElement( "div" ); //Create a "fake body" for testing based on method used in jQuery.support testElement = document.createElement( body ? "div" : "body" ); testElementStyle = { visibility: "hidden", width: 0, height: 0, border: 0, margin: 0, background: "none" }; if ( body ) { $.extend( testElementStyle, { position: "absolute", left: "-1000px", top: "-1000px" }); } for ( i in testElementStyle ) { testElement.style[ i ] = testElementStyle[ i ]; } testElement.appendChild( div ); testElementParent = body || document.documentElement; testElementParent.insertBefore( testElement, testElementParent.firstChild ); div.style.cssText = "position: absolute; left: 10.7432222px;"; offsetLeft = $( div ).offset().left; supportsOffsetFractions = offsetLeft > 10 && offsetLeft < 11; testElement.innerHTML = ""; testElementParent.removeChild( testElement ); })(); })(); return $.ui.position; })); /*! * jQuery UI Draggable @VERSION * http://jqueryui.com * * Copyright 2014 jQuery Foundation and other contributors * Released under the MIT license. * http://jquery.org/license * * http://api.jqueryui.com/draggable/ */ (function( factory ) { if ( typeof define === "function" && define.amd ) { // AMD. Register as an anonymous module. define([ "jquery", "./core", "./mouse", "./widget" ], factory ); } else { // Browser globals factory( jQuery ); } }(function( $ ) { $.widget("ui.draggable", $.ui.mouse, { version: "@VERSION", widgetEventPrefix: "drag", options: { addClasses: true, appendTo: "parent", axis: false, connectToSortable: false, containment: false, cursor: "auto", cursorAt: false, grid: false, handle: false, helper: "original", iframeFix: false, opacity: false, refreshPositions: false, revert: false, revertDuration: 500, scope: "default", scroll: true, scrollSensitivity: 20, scrollSpeed: 20, snap: false, snapMode: "both", snapTolerance: 20, stack: false, zIndex: false, // callbacks drag: null, start: null, stop: null }, _create: function() { if ( this.options.helper === "original" ) { this._setPositionRelative(); } if (this.options.addClasses){ this.element.addClass("ui-draggable"); } if (this.options.disabled){ this.element.addClass("ui-draggable-disabled"); } this._setHandleClassName(); this._mouseInit(); }, _setOption: function( key, value ) { this._super( key, value ); if ( key === "handle" ) { this._removeHandleClassName(); this._setHandleClassName(); } }, _destroy: function() { if ( ( this.helper || this.element ).is( ".ui-draggable-dragging" ) ) { this.destroyOnClear = true; return; } this.element.removeClass( "ui-draggable ui-draggable-dragging ui-draggable-disabled" ); this._removeHandleClassName(); this._mouseDestroy(); }, _mouseCapture: function(event) { var o = this.options; this._blurActiveElement( event ); // among others, prevent a drag on a resizable-handle if (this.helper || o.disabled || $(event.target).closest(".ui-resizable-handle").length > 0) { return false; } //Quit if we're not on a valid handle this.handle = this._getHandle(event); if (!this.handle) { return false; } this._blockFrames( o.iframeFix === true ? "iframe" : o.iframeFix ); return true; }, _blockFrames: function( selector ) { this.iframeBlocks = this.document.find( selector ).map(function() { var iframe = $( this ); return $( "
" ) .css( "position", "absolute" ) .appendTo( iframe.parent() ) .outerWidth( iframe.outerWidth() ) .outerHeight( iframe.outerHeight() ) .offset( iframe.offset() )[ 0 ]; }); }, _unblockFrames: function() { if ( this.iframeBlocks ) { this.iframeBlocks.remove(); delete this.iframeBlocks; } }, _blurActiveElement: function( event ) { var document = this.document[ 0 ]; // Only need to blur if the event occurred on the draggable itself, see #10527 if ( !this.handleElement.is( event.target ) ) { return; } // support: IE9 // IE9 throws an "Unspecified error" accessing document.activeElement from an '); if (options.previewPosition == 'after') { iFrame.insertAfter(footer); } else { iFrame.insertBefore(header); } previewWindow = iFrame[iFrame.length - 1].contentWindow || frame[iFrame.length - 1]; } } else if (altKey === true) { // Thx Stephen M. Redd for the IE8 fix if (iFrame) { iFrame.remove(); } else { previewWindow.close(); } previewWindow = iFrame = false; } if (!options.previewAutoRefresh) { refreshPreview(); } } // refresh Preview window function refreshPreview() { renderPreview(); } function renderPreview() { var phtml; if (options.previewParserPath !== '') { $.ajax( { type: 'POST', url: options.previewParserPath, data: options.previewParserVar+'='+encodeURIComponent($$.val()), success: function(data) { writeInPreview( localize(data, 1) ); } } ); } else { if (!template) { $.ajax( { url: options.previewTemplatePath, success: function(data) { writeInPreview( localize(data, 1).replace(//g, $$.val()) ); } } ); } } return false; } function writeInPreview(data) { if (previewWindow.document) { try { sp = previewWindow.document.documentElement.scrollTop } catch(e) { sp = 0; } previewWindow.document.open(); previewWindow.document.write(data); previewWindow.document.close(); previewWindow.document.documentElement.scrollTop = sp; } if (options.previewInWindow) { previewWindow.focus(); } } // set keys pressed function keyPressed(e) { shiftKey = e.shiftKey; altKey = e.altKey; ctrlKey = (!(e.altKey && e.ctrlKey)) ? e.ctrlKey : false; if (e.type === 'keydown') { if (ctrlKey === true) { li = $('a[accesskey="'+String.fromCharCode(e.keyCode)+'"]', header).parent('li'); if (li.length !== 0) { ctrlKey = false; setTimeout(function() { li.triggerHandler('mousedown'); },1); return false; } } if (e.keyCode === 13 || e.keyCode === 10) { // Enter key if (ctrlKey === true) { // Enter + Ctrl ctrlKey = false; markup(options.onCtrlEnter); return options.onCtrlEnter.keepDefault; } else if (shiftKey === true) { // Enter + Shift shiftKey = false; markup(options.onShiftEnter); return options.onShiftEnter.keepDefault; } else { // only Enter markup(options.onEnter); return options.onEnter.keepDefault; } } if (e.keyCode === 9) { // Tab key if (shiftKey == true || ctrlKey == true || altKey == true) { // Thx Dr Floob. return false; } if (caretOffset !== -1) { get(); caretOffset = $$.val().length - caretOffset; set(caretOffset, 0); caretOffset = -1; return false; } else { markup(options.onTab); return options.onTab.keepDefault; } } } } init(); }); }; $.fn.markItUpRemove = function() { return this.each(function() { var $$ = $(this).unbind().removeClass('markItUpEditor'); $$.parent('div').parent('div.markItUp').parent('div').replaceWith($$); } ); }; $.markItUp = function(settings) { var options = { target:false }; $.extend(options, settings); if (options.target) { return $(options.target).each(function() { $(this).focus(); $(this).trigger('insertion', [options]); }); } else { $('textarea').trigger('insertion', [options]); } }; })(jQuery); !function(n,r){"object"==typeof exports&&"undefined"!=typeof module?module.exports=r():"function"==typeof define&&define.amd?define("underscore",r):(n="undefined"!=typeof globalThis?globalThis:n||self,function(){var t=n._,e=n._=r();e.noConflict=function(){return n._=t,e}}())}(this,(function(){ // Underscore.js 1.13.6 // https://underscorejs.org // (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors // Underscore may be freely distributed under the MIT license. var n="1.13.6",r="object"==typeof self&&self.self===self&&self||"object"==typeof global&&global.global===global&&global||Function("return this")()||{},t=Array.prototype,e=Object.prototype,u="undefined"!=typeof Symbol?Symbol.prototype:null,o=t.push,i=t.slice,a=e.toString,f=e.hasOwnProperty,c="undefined"!=typeof ArrayBuffer,l="undefined"!=typeof DataView,s=Array.isArray,p=Object.keys,v=Object.create,h=c&&ArrayBuffer.isView,y=isNaN,d=isFinite,g=!{toString:null}.propertyIsEnumerable("toString"),b=["valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"],m=Math.pow(2,53)-1;function j(n,r){return r=null==r?n.length-1:+r,function(){for(var t=Math.max(arguments.length-r,0),e=Array(t),u=0;u=0&&t<=m}}function J(n){return function(r){return null==r?void 0:r[n]}}var G=J("byteLength"),H=K(G),Q=/\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/;var X=c?function(n){return h?h(n)&&!q(n):H(n)&&Q.test(a.call(n))}:C(!1),Y=J("length");function Z(n,r){r=function(n){for(var r={},t=n.length,e=0;e":">",'"':""","'":"'","`":"`"},$n=zn(Ln),Cn=zn(_n(Ln)),Kn=tn.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g},Jn=/(.)^/,Gn={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},Hn=/\\|'|\r|\n|\u2028|\u2029/g;function Qn(n){return"\\"+Gn[n]}var Xn=/^\s*(\w|\$)+\s*$/;var Yn=0;function Zn(n,r,t,e,u){if(!(e instanceof r))return n.apply(t,u);var o=Mn(n.prototype),i=n.apply(o,u);return _(i)?i:o}var nr=j((function(n,r){var t=nr.placeholder,e=function(){for(var u=0,o=r.length,i=Array(o),a=0;a1)er(a,r-1,t,e),u=e.length;else for(var f=0,c=a.length;f0&&(t=r.apply(this,arguments)),n<=1&&(r=null),t}}var cr=nr(fr,2);function lr(n,r,t){r=Pn(r,t);for(var e,u=nn(n),o=0,i=u.length;o0?0:u-1;o>=0&&o0?a=o>=0?o:Math.max(o+f,a):f=o>=0?Math.min(o+1,f):o+f+1;else if(t&&o&&f)return e[o=t(e,u)]===u?o:-1;if(u!=u)return(o=r(i.call(e,a,f),$))>=0?o+a:-1;for(o=n>0?a:f-1;o>=0&&o0?0:i-1;for(u||(e=r[o?o[a]:a],a+=n);a>=0&&a=3;return r(n,Rn(t,u,4),e,o)}}var wr=_r(1),Ar=_r(-1);function xr(n,r,t){var e=[];return r=Pn(r,t),mr(n,(function(n,t,u){r(n,t,u)&&e.push(n)})),e}function Sr(n,r,t){r=Pn(r,t);for(var e=!tr(n)&&nn(n),u=(e||n).length,o=0;o=0}var Er=j((function(n,r,t){var e,u;return D(r)?u=r:(r=Bn(r),e=r.slice(0,-1),r=r[r.length-1]),jr(n,(function(n){var o=u;if(!o){if(e&&e.length&&(n=Nn(n,e)),null==n)return;o=n[r]}return null==o?o:o.apply(n,t)}))}));function Br(n,r){return jr(n,Dn(r))}function Nr(n,r,t){var e,u,o=-1/0,i=-1/0;if(null==r||"number"==typeof r&&"object"!=typeof n[0]&&null!=n)for(var a=0,f=(n=tr(n)?n:jn(n)).length;ao&&(o=e);else r=Pn(r,t),mr(n,(function(n,t,e){((u=r(n,t,e))>i||u===-1/0&&o===-1/0)&&(o=n,i=u)}));return o}var Ir=/[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g;function Tr(n){return n?U(n)?i.call(n):S(n)?n.match(Ir):tr(n)?jr(n,Tn):jn(n):[]}function kr(n,r,t){if(null==r||t)return tr(n)||(n=jn(n)),n[Un(n.length-1)];var e=Tr(n),u=Y(e);r=Math.max(Math.min(r,u),0);for(var o=u-1,i=0;i1&&(e=Rn(e,r[1])),r=an(n)):(e=qr,r=er(r,!1,!1),n=Object(n));for(var u=0,o=r.length;u1&&(t=r[1])):(r=jr(er(r,!1,!1),String),e=function(n,t){return!Mr(r,t)}),Ur(n,e,t)}));function zr(n,r,t){return i.call(n,0,Math.max(0,n.length-(null==r||t?1:r)))}function Lr(n,r,t){return null==n||n.length<1?null==r||t?void 0:[]:null==r||t?n[0]:zr(n,n.length-r)}function $r(n,r,t){return i.call(n,null==r||t?1:r)}var Cr=j((function(n,r){return r=er(r,!0,!0),xr(n,(function(n){return!Mr(r,n)}))})),Kr=j((function(n,r){return Cr(n,r)}));function Jr(n,r,t,e){A(r)||(e=t,t=r,r=!1),null!=t&&(t=Pn(t,e));for(var u=[],o=[],i=0,a=Y(n);ir?(e&&(clearTimeout(e),e=null),a=c,i=n.apply(u,o),e||(u=o=null)):e||!1===t.trailing||(e=setTimeout(f,l)),i};return c.cancel=function(){clearTimeout(e),a=0,e=u=o=null},c},debounce:function(n,r,t){var e,u,o,i,a,f=function(){var c=Wn()-u;r>c?e=setTimeout(f,r-c):(e=null,t||(i=n.apply(a,o)),e||(o=a=null))},c=j((function(c){return a=this,o=c,u=Wn(),e||(e=setTimeout(f,r),t&&(i=n.apply(a,o))),i}));return c.cancel=function(){clearTimeout(e),e=o=a=null},c},wrap:function(n,r){return nr(r,n)},negate:ar,compose:function(){var n=arguments,r=n.length-1;return function(){for(var t=r,e=n[r].apply(this,arguments);t--;)e=n[t].call(this,e);return e}},after:function(n,r){return function(){if(--n<1)return r.apply(this,arguments)}},before:fr,once:cr,findKey:lr,findIndex:pr,findLastIndex:vr,sortedIndex:hr,indexOf:dr,lastIndexOf:gr,find:br,detect:br,findWhere:function(n,r){return br(n,kn(r))},each:mr,forEach:mr,map:jr,collect:jr,reduce:wr,foldl:wr,inject:wr,reduceRight:Ar,foldr:Ar,filter:xr,select:xr,reject:function(n,r,t){return xr(n,ar(Pn(r)),t)},every:Sr,all:Sr,some:Or,any:Or,contains:Mr,includes:Mr,include:Mr,invoke:Er,pluck:Br,where:function(n,r){return xr(n,kn(r))},max:Nr,min:function(n,r,t){var e,u,o=1/0,i=1/0;if(null==r||"number"==typeof r&&"object"!=typeof n[0]&&null!=n)for(var a=0,f=(n=tr(n)?n:jn(n)).length;ae||void 0===t)return 1;if(t -1) { days_in_month = 30; } else { days_in_month = 31; } var flags = { // Day d: this.zeropad(day), D: EE.lang.date.days[dow], j: day, l: EE.lang.date.days[dow], N: (dow == 0) ? 7 : dow, S: suffix, w: dow, z: doy, // Week W: Math.ceil((((date - new Date(date.getFullYear(), 0, 1)) / 86400000) + new Date(date.getFullYear(), 0, 1).getDay()+1)/7), // Month F: EE.lang.date.months.full[month-1], m: this.zeropad(month), M: EE.lang.date.months.abbreviated[month-1], n: month, t: days_in_month, // Year L: (new Date(year, 1, 29).getMonth() == 1) ? 1 : 0, // o: year, Y: year, y: date.getFullYear().toString().substr(2,2), // Time a: (date.getHours() < 12) ? 'am' : 'pm', A: (date.getHours() < 12) ? 'AM' : 'PM', // B: '???', g: hour, G: date.getHours(), h: this.zeropad(hour), H: this.zeropad(date.getHours()), i: this.zeropad(minute), s: this.zeropad(date.getSeconds()), u: date.getMilliseconds(), // Timezone // e: foo, // I: foo, // O: foo, // P: foo, // T: foo, Z: date.getTimezoneOffset() * 60 * -1, // Full Date/Time // c: foo, // r: foo, U: Math.floor(date.getTime() / 1000) }; // hat tip: http://stevenlevithan.com/assets/misc/date.format.js var date_format_regex = /%d|%D|%j|%l|%N|%S|%w|%z|%W|%F|%m|%M|%n|%t|%L|%o|%Y|%y|%a|%A|%B|%g|%G|%h|%H|%i|%s|%u|%e|%I|%O|%P|%T|%Z|%c|%r|%U|"[^"]*"|'[^']*'/g; return mask.replace(date_format_regex, function (match) { match = match.replace('%', ''); return match in flags ? flags[match] : match.slice(1, match.length - 1); }); }, Calendar: { calendars: [], element: null, // showing year: 2010, month: 0, init: function(element) { var d; var selected = null, year = null, month = null; this.element = element; this.calendars = []; var that = this; if ($('.date-picker-wrap').length == 0) { var parent = $('body'); // Likely front end if ($('input[name=ACT]').length) { parent = $(this.element).closest('form'); } var _picker = $('
'); _picker.appendTo(parent); var _pickerWidth = _picker.width(); // listen for clicks on elements classed with .date-picker-next $('.date-picker-clip-inner').on('click', '.date-picker-next', function(e){ EE.cp.datePicker.Month.next(); // animate the scrolling of .date-picker-clip forwards // to the next .date-picker-item $('.date-picker-clip').animate({ scrollLeft: '+='+(_pickerWidth+10) }, 200); // stop page from reloading // the source window and appending # to the URI e.preventDefault(); }); // listen for clicks on elements classed with .date-picker-back $('.date-picker-clip-inner').on('click', '.date-picker-prev', function(e){ EE.cp.datePicker.Month.prev(); // animate the scrolling of .date-picker-clip backwards // to the previous .date-picker-item $('.date-picker-clip').animate({ scrollLeft: '-='+(_pickerWidth+10) }, 200); // stop page from reloading // the source window and appending # to the URI e.preventDefault(); }); // listen for clicks on elements classed with .date-picker-back $('.date-picker-clip-inner').on('click', '.date-picker-item td a', function(e){ $('.date-picker-item td.act').removeClass('act'); $(this).closest('td').addClass('act'); if ($(that.element).val()) { var d = new Date($(that.element).data('timestamp') * 1000); var lastDayOfCurrentMonth = new Date(that.year, that.month + 1, 0).getDate() var dateToSet = lastDayOfCurrentMonth <= $(this).text() ? lastDayOfCurrentMonth : $(this).text() d = new Date(that.year, that.month, dateToSet) } else { var d = new Date(that.year, that.month, $(this).text()); } var now = new Date(); d.setHours(now.getHours()); d.setMinutes(now.getMinutes()); d.setSeconds(now.getSeconds()); var date_format = EE.date.date_format; // Allow custom date format via data-date-format parameter if ($(that.element).data('dateFormat')) { date_format = $(that.element).data('dateFormat'); } $(that.element).val(EE.cp.datePicker.get_formatted_date(d, date_format)).trigger('change'); $(that.element).data('timestamp', EE.cp.datePicker.get_formatted_date(d, '%U')); $(that.element).focus(); $('.date-picker-wrap').toggle(); e.preventDefault(); e.stopPropagation(); }); $('.date-picker-wrap').on('click', '.date-picker-today-button', function(e){ $('.date-picker-item td.act').removeClass('act'); $(this).closest('td').addClass('act'); var d = new Date(); var date_format = EE.date.date_format; // Allow custom date format via data-date-format parameter if ($(that.element).data('dateFormat')) { date_format = $(that.element).data('dateFormat'); } $(that.element).val(EE.cp.datePicker.get_formatted_date(d, date_format)).trigger('change'); $(that.element).data('timestamp', EE.cp.datePicker.get_formatted_date(d, '%U')); $(that.element).focus(); $('.date-picker-wrap').toggle(); e.preventDefault(); e.stopPropagation(); }); // Prevent manual scrolling of the huge inner clip div $('.date-picker-clip-inner').on('mousewheel', function(e){ e.preventDefault(); }); } if ($(this.element).val()) { var timestamp = $(this.element).data('timestamp'); if ( ! timestamp) { // this part we need to parse date formats like dd/mm/yyyy and dd-mm-yyyy // and don't get NAN as a result, when user put date manualy, not form date_pickare var date_format = $(this.element).data('dateFormat') // Split date to check date format without time var split_date = date_format.split(' '); var only_date = split_date[0]; var other_date_info = split_date.splice(1); other_date_info.join(' ') var newDay, newDay_index, newMonth, newMonth_index, newYear; var val = $(this.element).val(); if (only_date == '%j/%n/%Y') { // value without day val = val.substring(val.indexOf('/') + 1); // check if DAY has 1 or 2 numbers (1 or 01) newDay_index = $(this.element).val().indexOf('/'); // get DAY newDay = $(this.element).val().substring(0, newDay_index); // check if MONTH has 1 or 2 numbers (9 or 09) newMonth_index = val.indexOf('/'); // get MONTH newMonth = val.substring(0, newMonth_index); // get YEAR newYear = val.substring(newMonth_index+1); var date = [newMonth + '/' + newDay + '/' + newYear]; date = date.toString(); d = new Date(Date.parse(date)); } else if (only_date == '%j-%n-%Y') { // value without day val = val.substring(val.indexOf('-') + 1); // check if DAY has 1 or 2 numbers (1 or 01) newDay_index = $(this.element).val().indexOf('-'); // get DAY newDay = $(this.element).val().substring(0, newDay_index); // check if MONTH has 1 or 2 numbers (9 or 09) newMonth_index = val.indexOf('-'); // get MONTH newMonth = val.substring(0, newMonth_index); // get YEAR newYear = val.substring(newMonth_index+1); var date = [newMonth + '-' + newDay + '-' + newYear]; date = date.toString(); d = new Date(Date.parse(date)); } else { d = new Date(Date.parse($(this.element).val())); } }else { d = new Date(timestamp * 1000); } selected = d.getDate(); year = d.getFullYear(); month = d.getMonth(); } else { d = new Date(); year = d.getFullYear(); month = d.getMonth(); } var html = this.generate(year, month); if (html != null) { $('.date-picker-clip-inner').html(html); if (selected) { $('.date-picker-item td:contains(' + selected + ')').each(function(){ if ($(this).text() == selected) { $('.date-picker-item td.act').removeClass('act'); $(this).addClass('act'); } }); } } }, generate: function(year, month) { // Set variables this.month = month; this.year = year; if (this.calendars.indexOf(year + '-' + month) > -1) { return null; } var total = EE.cp.datePicker.Month.total_days(year, month), total_last = EE.cp.datePicker.Month.total_days(year, month - 1), leading = EE.cp.datePicker.Month.first_day(year, month), trailing = 7 - ((leading + total) % 7), today = new Date, prev = (month - 1 > -1) ? month - 1 : 11, next = (month + 1 < 12) ? month + 1 : 0; trailing = (trailing == 7) ? 0 : trailing; var preamble = [ '
', '
', '' + EE.lang.date.months.abbreviated[prev] + '', '

' + EE.lang.date.months.full[month] + ' ' + year + '

', '' + EE.lang.date.months.abbreviated[next] + '', '
', '', '', '', '', '', '', '', '', '', '' ], closing = [ '
' + EE.lang.date.days[0] + '' + EE.lang.date.days[1] + '' + EE.lang.date.days[2] + '' + EE.lang.date.days[3] + '' + EE.lang.date.days[4] + '' + EE.lang.date.days[5] + '' + EE.lang.date.days[6] + '
', '
' ]; var out = [''], out_i = 1, days_added = 0; // Leading dimmed for (var i = 0; i < leading; i++) { out[out_i++] = ''; days_added++; } // Main calendar for (var j = 0; j < total; j++) { if (days_added && days_added % 7 === 0) { out[out_i++] = ''; out[out_i++] = ''; } if (today.getFullYear() == year && today.getMonth() == month && today.getDate() == (j + 1) && ! $(this.element).data('timestamp')) { out[out_i++] = ''; } else { out[out_i++] = ''; } out[out_i++] = j + 1; out[out_i++] = ''; days_added++; } // Trailing dimmed for (var k = 0; k < trailing; k++) { out[out_i++] = ''; days_added++; } out[out_i++] = ''; this.calendars.push(year + '-' + month); return preamble.join('') + out.join('') + closing.join(''); } }, Month: { select: function(month) { var d = new Date(EE.cp.datePicker.Calendar.year, month); return EE.cp.datePicker.Calendar.generate(d.getFullYear(), d.getMonth()); }, prev: function() { var html = this.select(EE.cp.datePicker.Calendar.month - 1); if (html != null) { $('.date-picker-clip-inner').prepend(html); var pos = $('.date-picker-clip').scrollLeft(); $('.date-picker-clip').scrollLeft(pos + 280); } }, next: function() { var html = this.select(EE.cp.datePicker.Calendar.month + 1); if (html != null) { $('.date-picker-clip-inner').append(html); } }, total_days: function(year, month) { return 32 - new Date(year, month, 32).getDate(); }, first_day: function(year, month) { return new Date(year, month, 1).getDay(); } }, Day: { select: function(day) { var days_in_month = $('.week a').not('.dim'), l = days_in_month.length; if (isNaN(day)) { day = days_in_month.index(day) + 1; } if (day > 0 && day <= l) { Calendar.select(day - 1); } return false; } }, bind: function (elements) { if ( ! (elements instanceof jQuery)) { return } elements.on('focus', function() { // find the position of the input clicked var pos = $(this).offset(); EE.cp.datePicker.Calendar.init(this); // position and toggle the .date-picker-wrap relative to the input clicked $('.date-picker-wrap').css({ 'top': pos.top + 45, 'left': pos.left }).show(); $('.date-picker-clip').scrollLeft(0); }); } }; $(document).ready(function () { EE.cp.datePicker.bind($('input[rel="date-picker"]').not('.grid-input-form input')); // Date fields inside a Grid need to be bound when a new row is added if (typeof Grid !== 'undefined') { Grid.bind('date', 'display', function(cell) { EE.cp.datePicker.bind($('input[rel="date-picker"]', cell)); }); } // Date fields inside a Fluid Field need to be bound when a new field is added if (typeof FluidField === "object") { FluidField.on('date', 'add', function(field) { EE.cp.datePicker.bind($('input[rel="date-picker"]', field)); }); } $(document).on('focus', 'input,select,button', function(e) { EE.cp.datePicker.bind($('input[rel="date-picker"]').not('.grid-input-form input')); // Date fields inside a Grid need to be bound when a new row is added if (typeof Grid !== 'undefined') { Grid.bind('date', 'display', function(cell) { EE.cp.datePicker.bind($('input[rel="date-picker"]', cell)); }); } // Date fields inside a Fluid Field need to be bound when a new field is added if (typeof FluidField === "object") { FluidField.on('date', 'add', function(field) { EE.cp.datePicker.bind($('input[rel="date-picker"]', field)); }); } if ( ! ($(e.target).attr('rel') == 'date-picker') && ! $(e.target).closest('.date-picker-wrap').length) { $('.date-picker-wrap').hide(); } }); $(document).on('click', function(e) { if ( ! ($(e.target).attr('rel') == 'date-picker') && ! $(e.target).closest('.date-picker-wrap').length) { $('.date-picker-wrap').hide(); } }); }); /*! * This source file is part of the open source project * ExpressionEngine (https://expressionengine.com) * * @link https://expressionengine.com/ * @copyright Copyright (c) 2003-2023, Packet Tide, LLC (https://www.packettide.com) * @license https://expressionengine.com/license Licensed under Apache License, Version 2.0 */ (function($) { "use strict"; function zeroPad(number) { number = number.toString(); if (number.length < 2) { return '0' + number; } return number; } EE.formatDate = function(date, config) { date = date || new Date(); config = $.extend({ time_format: '12', include_seconds: 'n' }, config); var hours = date.getHours(), minutes = zeroPad(date.getMinutes()), seconds = zeroPad(date.getSeconds()), segments = [], suffix = ''; if (config.time_format == "12") { suffix = (hours < 12) ? ' AM': ' PM'; hours = hours % 12 || 12; } segments.push(hours); segments.push(minutes); if (config.include_seconds == 'y') { segments.push(seconds); } return " '" + segments.join(':') + suffix + "'"; }; EE.date_obj_time = EE.formatDate(new Date(), EE.date); })(jQuery); function liveUrlTitle(event){ var title_field, url_title_field; /* If event is present, we'll try to make sure we're only affecting the URL title field inside this form */ if (event) { title_field = event.target; for (var i = 0; i < document.forms.length; i++) { if (document.forms[i].contains(title_field)) { url_title_field = document.forms[i].querySelector('#url_title'); } } } else { title_field = document.getElementById("title"); url_title_field = document.getElementById("url_title"); } var defaultTitle = EE.publish.default_entry_title; var NewText = title_field.value; if (defaultTitle != '') { if (NewText.substr(0, defaultTitle.length) == defaultTitle) { NewText = NewText.substr(defaultTitle.length); } } NewText = NewText.toLowerCase(); var separator = "_"; /* Foreign Character Attempt */ var NewTextTemp = ''; for(var pos=0; pos= 32 && c < 128) { NewTextTemp += NewText.charAt(pos); } else { if (c == '223') {NewTextTemp += 'ss'; continue;}if (c == '192') {NewTextTemp += 'a'; continue;}if (c == '193') {NewTextTemp += 'a'; continue;}if (c == '194') {NewTextTemp += 'a'; continue;}if (c == '195') {NewTextTemp += 'a'; continue;}if (c == '196') {NewTextTemp += 'a'; continue;}if (c == '224') {NewTextTemp += 'a'; continue;}if (c == '225') {NewTextTemp += 'a'; continue;}if (c == '226') {NewTextTemp += 'a'; continue;}if (c == '229') {NewTextTemp += 'a'; continue;}if (c == '227') {NewTextTemp += 'ae'; continue;}if (c == '228') {NewTextTemp += 'ae'; continue;}if (c == '230') {NewTextTemp += 'ae'; continue;}if (c == '199') {NewTextTemp += 'c'; continue;}if (c == '231') {NewTextTemp += 'c'; continue;}if (c == '200') {NewTextTemp += 'e'; continue;}if (c == '201') {NewTextTemp += 'e'; continue;}if (c == '202') {NewTextTemp += 'e'; continue;}if (c == '203') {NewTextTemp += 'e'; continue;}if (c == '232') {NewTextTemp += 'e'; continue;}if (c == '233') {NewTextTemp += 'e'; continue;}if (c == '234') {NewTextTemp += 'e'; continue;}if (c == '235') {NewTextTemp += 'e'; continue;}if (c == '204') {NewTextTemp += 'i'; continue;}if (c == '205') {NewTextTemp += 'i'; continue;}if (c == '206') {NewTextTemp += 'i'; continue;}if (c == '207') {NewTextTemp += 'i'; continue;}if (c == '236') {NewTextTemp += 'i'; continue;}if (c == '237') {NewTextTemp += 'i'; continue;}if (c == '238') {NewTextTemp += 'i'; continue;}if (c == '239') {NewTextTemp += 'i'; continue;}if (c == '241') {NewTextTemp += 'n'; continue;}if (c == '242') {NewTextTemp += 'o'; continue;}if (c == '210') {NewTextTemp += 'o'; continue;}if (c == '211') {NewTextTemp += 'o'; continue;}if (c == '212') {NewTextTemp += 'o'; continue;}if (c == '213') {NewTextTemp += 'o'; continue;}if (c == '243') {NewTextTemp += 'o'; continue;}if (c == '244') {NewTextTemp += 'o'; continue;}if (c == '245') {NewTextTemp += 'o'; continue;}if (c == '246') {NewTextTemp += 'oe'; continue;}if (c == '249') {NewTextTemp += 'u'; continue;}if (c == '217') {NewTextTemp += 'u'; continue;}if (c == '218') {NewTextTemp += 'u'; continue;}if (c == '219') {NewTextTemp += 'u'; continue;}if (c == '220') {NewTextTemp += 'u'; continue;}if (c == '250') {NewTextTemp += 'u'; continue;}if (c == '251') {NewTextTemp += 'u'; continue;}if (c == '252') {NewTextTemp += 'ue'; continue;}if (c == '255') {NewTextTemp += 'y'; continue;}if (c == '257') {NewTextTemp += 'aa'; continue;}if (c == '269') {NewTextTemp += 'ch'; continue;}if (c == '275') {NewTextTemp += 'ee'; continue;}if (c == '291') {NewTextTemp += 'gj'; continue;}if (c == '299') {NewTextTemp += 'ii'; continue;}if (c == '311') {NewTextTemp += 'kj'; continue;}if (c == '316') {NewTextTemp += 'lj'; continue;}if (c == '326') {NewTextTemp += 'nj'; continue;}if (c == '353') {NewTextTemp += 'sh'; continue;}if (c == '363') {NewTextTemp += 'uu'; continue;}if (c == '382') {NewTextTemp += 'zh'; continue;}if (c == '256') {NewTextTemp += 'aa'; continue;}if (c == '268') {NewTextTemp += 'ch'; continue;}if (c == '274') {NewTextTemp += 'ee'; continue;}if (c == '290') {NewTextTemp += 'gj'; continue;}if (c == '298') {NewTextTemp += 'ii'; continue;}if (c == '310') {NewTextTemp += 'kj'; continue;}if (c == '315') {NewTextTemp += 'lj'; continue;}if (c == '325') {NewTextTemp += 'nj'; continue;}if (c == '352') {NewTextTemp += 'sh'; continue;}if (c == '362') {NewTextTemp += 'uu'; continue;}if (c == '381') {NewTextTemp += 'zh'; continue;} } } var multiReg = new RegExp(separator + '{2,}', 'g'); NewText = NewTextTemp; NewText = NewText.replace('/<(.*?)>/g', ''); NewText = NewText.replace(/\s+/g, separator); NewText = NewText.replace(/\//g, separator); NewText = NewText.replace(/[^a-z0-9\-\._]/g,''); NewText = NewText.replace(/\+/g, separator); NewText = NewText.replace(multiReg, separator); NewText = NewText.replace(/-$/g,''); NewText = NewText.replace(/_$/g,''); NewText = NewText.replace(/^_/g,''); NewText = NewText.replace(/^-/g,''); if (url_title_field) { url_title_field.value = EE.publish.url_title_prefix + NewText; } else { document.forms['cform'].elements['url_title'].value = EE.publish.url_title_prefix + NewText; }} var smiley_map = {};function insert_smiley(smiley, field_id) {var el = document.getElementsByName(field_id)[0], newStart;if ( ! el && smiley_map[field_id]) {el = document.getElementById(smiley_map[field_id]);if ( ! el)return false;}el.focus();smiley = " " + smiley;if ('selectionStart' in el) {newStart = el.selectionStart + smiley.length;el.value = el.value.substr(0, el.selectionStart) +smiley +el.value.substr(el.selectionEnd, el.value.length);el.setSelectionRange(newStart, newStart);}else if (document.selection) {document.selection.createRange().text = smiley;}} /*! * This source file is part of the open source project * ExpressionEngine (https://expressionengine.com) * * @link https://expressionengine.com/ * @copyright Copyright (c) 2003-2023, Packet Tide, LLC (https://www.packettide.com) * @license https://expressionengine.com/license Licensed under Apache License, Version 2.0 */ var selField = false, selMode = "normal"; //Dynamically set the textarea name function setFieldName(which) { if (which != selField) { selField = which; clear_state(); tagarray = new Array(); usedarray = new Array(); running = 0; } } // Insert tag function taginsert(item, tagOpen, tagClose) { // Determine which tag we are dealing with var which = eval('item.name'); if ( ! selField) { $.ee_notice(no_cursor); return false; } var theSelection = false, result = false, theField = document.getElementById('entryform')[selField]; if (selMode == 'guided') { data = prompt(enter_text, ""); if ((data != null) && (data != "")) { result = tagOpen + data + tagClose; } } // Is this a Windows user? // If so, add tags around selection if (document.selection) { theSelection = document.selection.createRange().text; theField.focus(); if (theSelection) { document.selection.createRange().text = (result == false) ? tagOpen + theSelection + tagClose : result; } else { document.selection.createRange().text = (result == false) ? tagOpen + tagClose : result; } theSelection = ''; theField.blur(); theField.focus(); return; } else if ( ! isNaN(theField.selectionEnd)) { var newStart, scrollPos = theField.scrollTop, selLength = theField.textLength, selStart = theField.selectionStart, selEnd = theField.selectionEnd; if (selEnd <= 2 && typeof(selLength) != 'undefined') { selEnd = selLength; } var s1 = (theField.value).substring(0,selStart), s2 = (theField.value).substring(selStart, selEnd). s3 = (theField.value).substring(selEnd, selLength); if (result == false) { newStart = selStart + tagOpen.length + s2.length + tagClose.length; theField.value = (result == false) ? s1 + tagOpen + s2 + tagClose + s3 : result; } else { newStart = selStart + result.length; theField.value = s1 + result + s3; } theField.focus(); theField.selectionStart = newStart; theField.selectionEnd = newStart; theField.scrollTop = scrollPos; return; } else if (selMode == 'guided') { curField = document.submit_post[selfField]; curField.value += result; curField.blur(); curField.focus(); return; } // Add single open tags if (item == 'other') { eval("document.getElementById('entryform')." + selField + ".value += tagOpen"); } else if (eval(which) == 0) { var result = tagOpen; eval("document.getElementById('entryform')." + selField + ".value += result"); eval(which + " = 1"); arraypush(tagarray, tagClose); arraypush(usedarray, which); running++; styleswap(which); } else { // Close tags n = 0; for (i = 0 ; i < tagarray.length; i++ ) { if (tagarray[i] == tagClose) { n = i; running--; while (tagarray[n]) { closeTag = arraypop(tagarray); eval("document.getElementById('entryform')." + selField + ".value += closeTag"); } while (usedarray[n]) { clearState = arraypop(usedarray); eval(clearState + " = 0"); document.getElementById(clearState).className = 'htmlButtonA'; } } } if (running <= 0 && document.getElementById('close_all').className == 'htmlButtonB') { document.getElementById('close_all').className = 'htmlButtonA'; } } curField = eval("document.getElementById('entryform')." + selField); curField.blur(); curField.focus(); } $(document).ready(function() { $(".js_show").show(); $(".js_hide").hide(); if (typeof(EE.publish) !== 'undefined' && EE.publish.markitup !== undefined && EE.publish.markitup.fields !== undefined) { $.each(EE.publish.markitup.fields, function(key, value) { $("#"+key).markItUp(mySettings); }); } if (typeof(EE.publish) !== 'undefined' && EE.publish.smileys === true) { $("a.glossary_link").click(function(){ $(this).parent().siblings('.glossary_content').slideToggle("fast"); $(this).parent().siblings('.smileyContent .spellcheck_content').hide(); return false; }); $('a.smiley_link').toggle(function() { which = $(this).attr('id').substr(12); $('#smiley_table_'+which).slideDown('fast', function() { $(this).css('display', ''); }); }, function() { $('#smiley_table_'+which).slideUp('fast'); }); $(this).parent().siblings('.glossary_content, .spellcheck_content').hide(); $('.glossary_content a').click(function(){ $.markItUp({ replaceWith:$(this).attr('title')}); return false; }); } $(".btn_plus a").click(function(){ return confirm(EE.lang.confirm_exit, ""); }); // inject the collapse button into the formatting buttons list $(".markItUpHeader ul").prepend("
  • \"Close
  • "); $(".close_formatting_buttons a").toggle( function() { $(this).parent().parent().children(":not(.close_formatting_buttons)").hide(); $(this).parent().parent().css("height", "13px"); $(this).children("img").attr("src", EE.THEME_URL+"images/publish_plus.png"); }, function () { $(this).parent().parent().children().show(); $(this).parent().parent().css("height", "auto"); $(this).children("img").attr("src", EE.THEME_URL+"images/publish_minus.gif"); } ); var field_for_writemode_publish = ""; if (typeof(EE.publish) !== 'undefined' && EE.publish.show_write_mode === true) { $("#write_mode_textarea").markItUp(myWritemodeSettings); } $(".write_mode_trigger").click(function(){ if ($(this).attr("id").match(/^id_\d+$/)) { field_for_writemode_publish = "field_"+$(this).attr("id"); } else { field_for_writemode_publish = $(this).attr("id").replace(/id_/, ''); } // put contents from other page into here $("#write_mode_textarea").val($("#"+field_for_writemode_publish).val()); $("#write_mode_textarea").focus(); return false; }); });