EVOLUTION-MANAGER
Edit File: jquery.gravy.min.js
(function(){(function($){if(!window.Djblets){window.Djblets={}}if($.support.touch===undefined){$.support.touch="ontouchstart"in window||navigator.msMaxTouchPoints}$.fn.extend({setVisible:function(visible){return $(this).each(function(){if(visible){$(this).show()}else{$(this).hide()}})},move:function(left,top,posType){return $(this).each(function(){$(this).css({left:left,top:top});if(posType){$(this).css("position",posType)}})},scrollIntoView:function(){var $document=$(document),$window=$(window);return $(this).each(function(){var $this=$(this),offset=$this.offset(),scrollLeft=$document.scrollLeft(),scrollTop=$document.scrollTop(),elLeft=scrollLeft+$window.width()-(offset.left+$this.outerWidth(true)),elTop=scrollTop+$window.height()-(offset.top+$this.outerHeight(true));if(elLeft<0){$window.scrollLeft(scrollLeft-elLeft)}if(elTop<0){$window.scrollTop(scrollTop-elTop)}})}});$.fn.getExtents=function(types,sides){var val=0;this.each(function(){var self=$(this),value,type,side,prop,t,s,i;for(t=0;t<types.length;t++){type=types.charAt(t);for(s=0;s<sides.length;s++){side=sides.charAt(s);if(type==="b"){type="border"}else if(type==="m"){type="margin"}else if(type==="p"){type="padding"}if(side==="l"||side==="left"){side="Left"}else if(side==="r"||side==="right"){side="Right"}else if(side==="t"||side==="top"){side="Top"}else if(side==="b"||side==="bottom"){side="Bottom"}prop=type+side;if(type==="border"){prop+="Width"}value=self.css(prop);if(value.indexOf(".")===-1){i=parseInt(value,10)}else{i=parseFloat(value,10)}if(!isNaN(i)){val+=i}}}});return val};$.fn.positionToSide=function(el,options){var offset=$(el).offset(),thisWidth=this.outerWidth(),thisHeight=this.outerHeight(),elWidth=el.width(),elHeight=el.height(),scrollLeft=$(document).scrollLeft(),scrollTop=$(document).scrollTop(),scrollWidth=$(window).width(),scrollHeight=$(window).height();options=$.extend({side:"b",xDistance:options.distance||0,yDistance:options.distance||0,xOffset:0,yOffset:0,fitOnScreen:false},options);return $(this).each(function(){var bestLeft=null,bestTop=null,side,left,top,i;for(i=0;i<options.side.length;i++){side=options.side.charAt(i);left=null;top=null;if(side==="t"){top=offset.top-thisHeight-options.yDistance}else if(side==="b"){top=offset.top+elHeight+options.yDistance}else if(side==="l"){left=offset.left-thisWidth-options.xDistance}else if(side==="r"){left=offset.left+elWidth+options.xDistance}else{continue}if(left!==null&&left>=scrollLeft&&left+thisWidth-scrollLeft<scrollWidth||top!==null&&top>=scrollTop&&top+thisHeight-scrollTop<scrollHeight){bestLeft=left;bestTop=top;break}else if(bestLeft===null&&bestTop===null){bestLeft=left;bestTop=top}}if(bestLeft===null){bestLeft=offset.left+options.xOffset}if(bestTop===null){bestTop=offset.top+options.yOffset}if(options.fitOnScreen){bestLeft=Math.max(Math.min(bestLeft,scrollLeft+scrollWidth-thisWidth),scrollLeft);bestTop=Math.max(Math.min(bestTop,scrollTop+scrollHeight-thisHeight),scrollTop)}$(this).move(bestLeft,bestTop,"absolute")})};$.fn.delay=function(msec){return $(this).each(function(){var self=$(this);self.queue(function(){window.setTimeout(function(){self.dequeue()},msec)})})};$.fn.proxyTouchEvents=function(events){var stateKey="gravy-proxy-touch-state";function simulateMouseEvent(event,type,touch,relatedTarget){var mouseEvent=document.createEvent("MouseEvent");mouseEvent.initMouseEvent(type,true,true,window,1,touch.screenX,touch.screenY,touch.clientX,touch.clientY,false,false,false,false,0,relatedTarget||null);if(!event.target.dispatchEvent(mouseEvent)){event.preventDefault()}}events=events||"touchstart touchmove touchend";return $(this).bind(events,function(event){var $this=$(this),touches=event.originalEvent.changedTouches,firstTouch,hoverEl,touchState;if(touches.length!==1){return}firstTouch=event.originalEvent.changedTouches[0];switch(event.type){case"touchstart":$this.data(stateKey,{lastEl:document.elementFromPoint(firstTouch.clientX,firstTouch.clientY)});simulateMouseEvent(event,"mousedown",firstTouch);break;case"touchmove":touchState=$this.data(stateKey);hoverEl=document.elementFromPoint(firstTouch.clientX,firstTouch.clientY);if(touchState.lastEl!==hoverEl){simulateMouseEvent(event,"mouseout",firstTouch,touchState.lastEl);touchState.lastEl=hoverEl;simulateMouseEvent(event,"mouseover",firstTouch,hoverEl)}simulateMouseEvent(event,"mousemove",firstTouch);break;case"touchend":case"touchcancel":simulateMouseEvent(event,"mouseup",firstTouch);$this.data(stateKey,null);break}})};$.extend(String.prototype,{strip:function(){return this.replace(/^\s+/,"").replace(/\s+$/,"")},stripTags:function(){return this.replace(/<\/?[^>]+>/gi,"")},htmlEncode:function(){if(this===""){return""}str=this.replace(/&/g,"&");str=str.replace(/</g,"<");str=str.replace(/>/g,">");return str},htmlDecode:function(){if(this===""){return""}str=this.replace(/&/g,"&");str=str.replace(/</g,"<");str=str.replace(/>/g,">");return str},truncate:function(numChars){numChars=numChars||100;var str=this.toString();if(this.length>numChars){str=this.substring(0,numChars-3);i=str.lastIndexOf(".");if(i!==-1){str=str.substring(0,i+1)}str+="..."}return str}})})(jQuery);(function($){$.fn.retinaGravatar=function(){if(window.devicePixelRatio>1){$(this).each(function(){var $el=$(this);$el.attr("src",Djblets.getGravatarForDisplay($el.attr("src"))).removeClass("gravatar").addClass("gravatar-retina")})}return this};Djblets.getGravatarForDisplay=function(url){if(window.devicePixelRatio>1){var parts=url.split("?",2),params,param,baseurl,size,i;if(parts.length===2){baseurl=parts[0];params=parts[1].split("&");for(i=0;i<params.length;i++){param=params[i].split("=",2);if(param.length===2&¶m[0]==="s"){size=parseInt(param[1],10);params[i]="s="+Math.floor(size*window.devicePixelRatio)}}url=baseurl+"?"+params.join("&")}else{console.log("Failed to parse URL for gravatar "+url)}}return url}})(jQuery);(function($){$.widget("ui.autoSizeTextArea",{options:{fadeSpeedMS:200,growOnKeyUp:true,minHeight:100},_init:function(){var self=this;this._proxyEl=$("<pre/>").appendTo("body").move(-1e4,-1e4,"absolute");this._proxyEl.css({"white-space":"pre-wrap","word-wrap":"break-word",font:this.element.css("font"),border:0,margin:0,padding:0});this.element.css("overflow","hidden");this.oldLength=this.element.val().length;if(this.options.growOnKeyUp){this.element.keyup(function(){self.autoSize()})}},destroy:function(){this._proxyEl.remove();$.Widget.prototype.destroy.call(this)},autoSize:function(force,animate,animateFrom){var needsResize=false,$el=this.element,el=$el[0],newLength=$el.val().length,newHeight=0,curHeight=$el.height(),normHeight=el.scrollHeight+(curHeight-el.clientHeight),targetHeight;if(normHeight!==curHeight){needsResize=true;newHeight=normHeight}else if(this.oldLength>newLength||force){needsResize=true;this._proxyEl.width($el.width()).move(-1e4,-1e4).text(this.element.val()+"\n");newHeight=this._proxyEl.innerHeight()}if(needsResize){targetHeight=Math.max(this.options.minHeight-$el.getExtents("p","tb"),newHeight);if(animate){$el.height(animateFrom).animate({height:targetHeight},this.options.fadeSpeedMS).triggerHandler("resize")}else{$el.height(targetHeight).triggerHandler("resize")}}this.oldLength=newLength},setMinHeight:function(minHeight){this.options.minHeight=minHeight;this.autoSize(true)}})})(jQuery);(function($){$.widget("ui.inlineEditor",{options:{cls:"",deferEventSetup:false,editIconPath:null,editIconClass:null,enabled:true,extraHeight:100,fadeSpeedMS:200,focusOnOpen:true,forceOpen:false,formatResult:null,hasRawValue:false,matchHeight:true,multiline:false,notifyUnchangedCompletion:false,promptOnCancel:true,rawValue:null,showButtons:true,showEditIcon:true,startOpen:false,stripTags:false,useEditIconOnly:false,createMultilineField:function(){return $("<textarea/>").autoSizeTextArea()},setFieldValue:function(editor,value){editor._field.val(value)},getFieldValue:function(editor){return editor._field.val()},isFieldDirty:function(editor,initialValue){var value=editor.options.getFieldValue(editor)||"",normValue=(editor.options.hasRawValue?value:value.htmlEncode())||"";return normValue.length!==initialValue.length||normValue!==initialValue}},_create:function(){var self=this,saveButton,cancelButton,isDragging;this._initialValue=null;this._editing=false;this._dirty=false;this._dirtyCalcScheduled=false;this._form=$("<form/>").addClass("inline-editor-form "+this.options.cls).css("display","inline").insertBefore(this.element).hide();if(this.options.multiline){this._field=this.options.createMultilineField(this).on("resize",_.bind(function(){this.element.triggerHandler("resize")},this))}else{this._field=$('<input type="text"/>')}this._isTextArea=this._field[0].tagName==="TEXTAREA";if(!this.options.deferEventSetup){this.setupEvents()}this._buttons=null;if(this.options.showButtons){if(this.options.multiline){this._buttons=$("<div/>")}else{this._buttons=$("<span/>")}this._buttons.addClass("buttons").appendTo(this._form);this._buttons.hide();saveButton=$('<input type="button"/>').val(gettext("OK")).addClass("save").appendTo(this._buttons).click(function(){self.submit()});cancelButton=$('<input type="button"/>').val(gettext("Cancel")).addClass("cancel").appendTo(this._buttons).click(function(){self.cancel()})}this._editIcon=null;if(this.options.showEditIcon){this._editIcon=$("<a/>").attr({href:"#",role:"button","aria-label":gettext("Edit this field")}).addClass("editicon").click(function(){self.startEdit();return false});if(this.options.editIconPath){this._editIcon.append('<img src="'+this.options.editIconPath+'"/>')}else if(this.options.editIconClass){this._editIcon.append('<div class="'+this.options.editIconClass+'"></div>')}if(this.options.showRequiredFlag){this._editIcon.append($("<span/>").attr({"aria-label":gettext("This field is required"),title:gettext("This field is required")}).addClass("required-flag").text("*"))}if(this.options.multiline){if(this.element[0].id){this._editIcon.appendTo($("label[for="+this.element[0].id+"]"))}}else{this._editIcon.insertAfter(this.element)}}if(!this.options.useEditIconOnly){isDragging=true;this.element.on("click","a",function(e){e.stopPropagation()}).click(function(){if(!isDragging){self.startEdit()}isDragging=true;return false}).mousedown(function(){isDragging=false;$(this).one("mousemove",function(){isDragging=true})}).mouseup(function(){$(this).unbind("mousemove")})}$(window).resize(function(){self._fitWidthToParent()});if(this.options.forceOpen||this.options.startOpen){self.startEdit(true)}if(this.options.enabled){self.enable()}else{self.disable()}},setupEvents:function(){var self=this;this._field.prependTo(this._form).keydown(function(e){e.stopPropagation();var keyCode=e.keyCode?e.keyCode:e.charCode?e.charCode:e.which;switch(keyCode){case $.ui.keyCode.ENTER:if(!self.options.forceOpen&&(!self.options.multiline||e.ctrlKey)){self.submit()}if(!self.options.multiline){e.preventDefault()}break;case $.ui.keyCode.ESCAPE:if(!self.options.forceOpen){self.cancel()}break;case 83:case 115:if(e.ctrlKey){self.submit();return false}break;default:break}}).keypress(function(e){e.stopPropagation()}).keyup(function(){self._scheduleUpdateDirtyState();return false})},enable:function(){if(this._editing){this.showEditor()}if(this._editIcon){this._editIcon.show()}this.options.enabled=true},disable:function(){if(this._editing){this.hideEditor()}if(this._editIcon){this._editIcon.hide()}this.options.enabled=false},startEdit:function(preventAnimation){var value;if(this._editing||!this.options.enabled){return}if(this.options.hasRawValue){this._initialValue=this.options.rawValue;value=this._initialValue}else{this._initialValue=this.element.text();value=this._normalizeText(this._initialValue).htmlDecode()}this._editing=true;this.options.setFieldValue(this,value);this.element.triggerHandler("beginEditPreShow");this.showEditor(preventAnimation);this.element.triggerHandler("beginEdit")},save:function(){var value=this.value(),encodedValue=value.htmlEncode(),initialValue=this._initialValue;this._updateDirtyState();if(this._dirty){this.element.html($.isFunction(this.options.formatResult)?this.options.formatResult(encodedValue):encodedValue);this._initialValue=this.element.text()}if(this._dirty||this.options.notifyUnchangedCompletion){this.element.triggerHandler("complete",[value,initialValue]);if(this.options.hasRawValue){this.options.rawValue=value}}else{this.element.triggerHandler("cancel",[this._initialValue])}},submit:function(){this.save();this.hideEditor()},cancel:function(force){if(!force&&this.options.promptOnCancel&&this.dirty()){if(confirm(gettext("You have unsaved changes. Are you sure you want to discard them?"))){this.cancel(true)}return}this.hideEditor();this.element.triggerHandler("cancel",[this._initialValue])},field:function(){return this._field},value:function(){return this.options.getFieldValue(this)},setValue:function(value){this.options.setFieldValue(this,value);this._updateDirtyState()},buttons:function(){return this._buttons},editing:function(){return this._editing},showEditor:function(preventAnimation){var self=this,elHeight,newHeight;if(this._editIcon){if(this.options.multiline&&!preventAnimation){this._editIcon.fadeOut(this.options.fadeSpeedMS)}else{this._editIcon.hide()}}this.element.hide();this._form.show();if(this.options.multiline){elHeight=this.element.outerHeight();newHeight=elHeight+this.options.extraHeight;this._fitWidthToParent();if(this._isTextArea){if(this.options.matchHeight){this._field.autoSizeTextArea("setMinHeight",newHeight).css("overflow","hidden");if(preventAnimation){this._field.height(newHeight)}else{this._field.height(elHeight).animate({height:newHeight},this.options.fadeSpeedMS)}}else{this._field.autoSizeTextArea("autoSize",true,false,elHeight)}}if(this._buttons){this._buttons.show()}}else if(this._buttons){this._buttons.show()}this._field.queue(function(){if(self.options.multiline&&self._isTextArea){self._field.css("overflow","auto")}self._fitWidthToParent();if(self.options.focusOnOpen){self._field.focus()}if(!self.options.multiline){self._field[0].select()}self._field.dequeue()})},hideEditor:function(){var self=this;if(self.options.forceOpen){return}this._field.blur();if(this._buttons){this._buttons.hide()}if(this._editIcon){if(this.options.multiline){this._editIcon.fadeIn(this.options.fadeSpeedMS)}else{this._editIcon.show()}}if(this.options.multiline&&this.options.matchHeight&&this._editing&&this._isTextArea){this._field.css("overflow","hidden").animate({height:this.element.outerHeight()},this.options.fadeSpeedMS)}this._field.queue(function(){self.element.show();self._form.hide();self._field.dequeue()});this._editing=false;this._updateDirtyState()},dirty:function(){if(this._dirtyCalcScheduled){this._updateDirtyState()}return this._dirty},_scheduleUpdateDirtyState:_.throttle(function(){this._dirtyCalcScheduled=true;_.defer(this._updateDirtyState)},200),_updateDirtyState:function(){var curDirtyState=this._editing&&this.options.isFieldDirty(this,this._normalizeText(this._initialValue));if(this._dirty!==curDirtyState){this._dirty=curDirtyState;this.element.triggerHandler("dirtyStateChanged",[this._dirty])}this._dirtyCalcScheduled=false},_fitWidthToParent:function(){var buttonsWidth=0,formParent,parentTextAlign,isLeftAligned,buttonsDisplay,boxSizing,extentTypes;if(!this._editing){return}if(this.options.multiline){this._field.css({"-webkit-box-sizing":"border-box","-moz-box-sizing":"border-box","box-sizing":"border-box",width:"100%"})}else{formParent=this._form.parent();parentTextAlign=formParent.css("text-align");isLeftAligned=parentTextAlign==="left";if(!isLeftAligned){formParent.css("text-align","left")}boxSizing=this._field.css("box-sizing");if(boxSizing==="border-box"){extentTypes="m"}else if(boxSizing==="padding-box"){extentTypes="p"}else{extentTypes="bmp"}if(this._buttons){buttonsDisplay=this._buttons.css("display");if(buttonsDisplay==="inline"||buttonsDisplay==="inline-block"){buttonsWidth=this._buttons.outerWidth()}}this._field.width(0).outerWidth(formParent.innerWidth()-(this._form.offset().left-formParent.offset().left)-this._field.getExtents(extentTypes,"lr")-buttonsWidth);if(!isLeftAligned){formParent.css("text-align",parentTextAlign)}}},_normalizeText:function(str){if(this.options.stripTags){str=str.replace(/<br>/g,"\n");str=str.stripTags().strip()}if(!this.options.multiline){str=str.replace(/\s{2,}/g," ")}return str}});$.ui.inlineEditor.getter="dirty field value";$.expr[":"].inlineEditorDirty=function(a){return $(a).inlineEditor("dirty")}})(jQuery);(function($){$.widget("ui.modalBox",{options:{buttons:[$('<input type="button" />').val(gettext("Close"))],container:"body",discardOnClose:true,fadeBackground:true,modalBoxButtonsClass:"modalbox-buttons",modalBoxContentsClass:"modalbox-contents",modalBoxTitleClass:"modalbox-title",stretchX:false,stretchY:false,title:null},_init:function(){var self=this;if(this.options.fadeBackground){this.bgbox=$("<div/>").addClass("modalbox-bg").appendTo(this.options.container).css({"background-color":"#000",opacity:0}).move(0,0,"fixed").width("100%").height("100%").keydown(function(e){e.stopPropagation()})}this.box=$("<div/>").addClass("modalbox").move(0,0,"absolute").keydown(function(e){e.stopPropagation()});if(this.options.boxID){this.box.attr("id",this.options.boxID)}this.inner=$("<div/>").appendTo(this.box).addClass("modalbox-inner").css({position:"relative",width:"100%",height:"100%"});if(this.options.title){this.titleBox=$("<h1/>").appendTo(this.inner).addClass(this.options.modalBoxTitleClass).text(this.options.title)}this.element.appendTo(this.inner).addClass(this.options.modalBoxContentsClass).bind("DOMSubtreeModified",function(){self.resize()});this._buttons=$("<div/>").appendTo(this.inner).addClass(this.options.modalBoxButtonsClass).click(function(e){if(e.target.tagName==="INPUT"&&!e.target.disabled){self.element.modalBox("destroy")}});this.box.appendTo(this.options.container);$.each(this.options.buttons,function(){$(this).appendTo(self._buttons)});if(this.options.fadeBackground){this.bgbox.fadeTo(350,.85)}$(window).bind("resize.modalbox",function(){self.resize()});this.resize()},destroy:function(){var self=this;if(!this.element.data("modalBox")){return}this.element.removeData("modalBox").unbind("resize.modalbox").css("position","static");if(this.options.fadeBackground){this.bgbox.fadeOut(350,function(){self.bgbox.remove()})}if(!this.options.discardOnClose){this.element.appendTo(this.options.container)}this.box.remove()},buttons:function(){return this._buttons},resize:function(){var marginHoriz=$("body").getExtents("m","lr"),marginVert=$("body").getExtents("m","tb"),winWidth=$(window).width()-marginHoriz,winHeight=$(window).height()-marginVert;if(this.options.stretchX){this.box.width(winWidth-this.box.getExtents("bmp","lr")-marginHoriz)}if(this.options.stretchY){this.box.height(winHeight-this.box.getExtents("bmp","tb")-marginVert);this.element.height(this._buttons.position().top-this.element.position().top-this.element.getExtents("m","tb"))}else{this.box.height(this.element.position().top+this.element.outerHeight(true)+this._buttons.outerHeight(true))}this.box.move(Math.ceil((winWidth-this.box.outerWidth(true))/2),Math.ceil((winHeight-this.box.outerHeight(true))/2),"fixed");this.element.triggerHandler("resize")}});$.ui.modalBox.getter="buttons"})(jQuery);(function($){$.tooltip=function($el,options){options=$.extend({side:"b"},options);var self=$("<div/>").addClass("tooltip").hide().appendTo("body");$el.mouseenter(function(){if(self.children()){self.positionToSide($el,{side:options.side,distance:10}).show()}}).mouseleave(function(){self.hide()});return self}})(jQuery);(function($){var queues={},queuesInProgress={};$.funcQueue=function(name){var self=this;if(!queues[name]){queues[name]=[]}this.add=function(func,context){if(func){queues[name].push([func,context])}};this.next=function(){var info,func,context;if(queuesInProgress[name]){info=queues[name].shift();if(info){func=info[0];context=info[1];func.call(context)}else{queuesInProgress[name]=false}}};this.start=function(){if(!queuesInProgress[name]&&queues[name].length>0){queuesInProgress[name]=true;self.next()}};this.clear=function(){queues[name]=[];queuesInProgress[name]=false};return this}})(jQuery);$.fn.bindClass=function(model,modelPropName,className,options){function updateClassName(){var value=model.get(modelPropName);if(options&&options.inverse){value=!value}if(value){this.addClass(className)}else{this.removeClass(className)}}model.on("change:"+modelPropName,updateClassName,this);updateClassName.call(this);return this};$.fn.bindProperty=function(elPropName,model,modelPropName,options){function updateElementProp(){var value=model.get(modelPropName);if(options.radioValue!==undefined){value=options.radioValue===value}if(options.inverse){value=!value}if(elPropName==="text"||elPropName==="html"){if($this[elPropName]()!==value){$this[elPropName](value===undefined||value===null?"":value)}}else if($this.prop(elPropName)!==value){$this.prop(elPropName,value)}}var $this=this;options=_.defaults(options||{},{modelToElement:true,elementToModel:true,inverse:false,radioValue:undefined});if(options.modelToElement){model.on("change:"+modelPropName,updateElementProp);updateElementProp()}if(options.elementToModel){$this.on("change",function(){var value=elPropName==="text"||elPropName==="html"?$this[elPropName]():$this.prop(elPropName);if(options.inverse){value=!value}if(options.radioValue!==undefined){if(value){value=options.radioValue}else{return}}model.set(modelPropName,value)})}return $this};$.fn.bindVisibility=function(model,modelPropName,options){function updateVisibility(){var value=model.get(modelPropName);if(options&&options.inverse){value=!value}this.setVisible(value)}model.on("change:"+modelPropName,updateVisibility,this);updateVisibility.call(this);return this}}).call(this);