-
Notifications
You must be signed in to change notification settings - Fork 415
/
jquery-ui.min.js
1 lines (1 loc) · 7.45 KB
/
jquery-ui.min.js
1
define(["jquery","underscore","backbone","backbone-forms"],function($,_,Backbone){(function(){var Form=Backbone.Form,Base=Form.editors.Base,createTemplate=Form.helpers.createTemplate,triggerCancellableEvent=Form.helpers.triggerCancellableEvent,exports={};exports["jqueryui.Date"]=Base.extend({className:"bbf-jui-date",initialize:function(options){Base.prototype.initialize.call(this,options),this.value&&!_.isDate(this.value)&&(this.value=new Date(this.value));if(!this.value){var date=new Date;date.setSeconds(0),date.setMilliseconds(0),this.value=date}},render:function(){var $el=this.$el;$el.html("<input>");var input=$("input",$el);return input.datepicker({dateFormat:"dd/mm/yy",showButtonPanel:!0}),this._observeDatepickerEvents(),exports["jqueryui.Date"].prototype.setValue.call(this,this.value),this},getValue:function(){var input=$("input",this.el),date=input.datepicker("getDate");return date},setValue:function(value){$("input",this.el).datepicker("setDate",value)},focus:function(){if(this.hasFocus)return;this.$("input").datepicker("show")},blur:function(){if(!this.hasFocus)return;this.$("input").datepicker("hide")},_observeDatepickerEvents:function(){var self=this;this.$("input").datepicker("option","onSelect",function(){self.trigger("change",self)}),this.$("input").datepicker("option","onClose",function(){if(!self.hasFocus)return;self.trigger("blur",self)}),this.$("input").datepicker("option","beforeShow",function(){return self.hasFocus?{}:(self.trigger("focus",self),{})})}}),exports["jqueryui.DateTime"]=exports["jqueryui.Date"].extend({className:"bbf-jui-datetime",template:createTemplate("<select>{{hours}}</select> : <select>{{mins}}</select>"),render:function(){function pad(n){return n<10?"0"+n:n}exports["jqueryui.Date"].prototype.render.call(this);var hours=_.range(0,24),hoursOptions=[];_.each(hours,function(hour){hoursOptions.push('<option value="'+hour+'">'+pad(hour)+"</option>")});var minsInterval=this.schema.minsInterval||15,mins=_.range(0,60,minsInterval),minsOptions=[];return _.each(mins,function(min){minsOptions.push('<option value="'+min+'">'+pad(min)+"</option>")}),this.$el.append(this.template({hours:hoursOptions.join(),mins:minsOptions.join()})),this._observeDatepickerEvents(),this.$hours=$("select:eq(0)",this.el),this.$mins=$("select:eq(1)",this.el),this.setValue(this.value),this},getValue:function(){var input=$("input",this.el),date=input.datepicker("getDate");return date.setHours(this.$hours.val()),date.setMinutes(this.$mins.val()),date.setMilliseconds(0),date},setValue:function(date){exports["jqueryui.Date"].prototype.setValue.call(this,date),this.$hours.val(date.getHours()),this.$mins.val(date.getMinutes())}}),exports["jqueryui.List"]=Base.extend({className:"bbf-jui-list",template:createTemplate(' <ul></ul> <div><button class="bbf-list-add">Add</div> '),itemTemplate:createTemplate(' <li rel="{{id}}"> <span class="bbf-list-text">{{text}}</span> <div class="bbf-list-actions"> <button class="bbf-list-edit">Edit</button> <button class="bbf-list-del">Delete</button> </div> </li> '),editorTemplate:createTemplate(' <div class="bbf-field"> <div class="bbf-list-editor"></div> </div> '),events:{"click .bbf-list-add":"addNewItem","click .bbf-list-edit":"editItem","click .bbf-list-del":"deleteItem"},initialize:function(options){Base.prototype.initialize.call(this,options);if(!this.schema)throw"Missing required option 'schema'";this.schema.listType=this.schema.listType||"Text";if(this.schema.listType=="NestedModel"&&!this.schema.model)throw"Missing required option 'schema.model'"},render:function(){var $el=this.$el;$el.html(this.template());var self=this,data=this.value||[],schema=this.schema,itemToString=this.itemToString,itemTemplate=this.itemTemplate,listEl=$("ul",$el);return _.each(data,function(itemData){var text=itemToString.call(self,itemData),li=$(itemTemplate({id:itemData.id||"",text:text}));$.data(li[0],"data",itemData),listEl.append(li)}),schema.sortable!==!1&&(listEl.sortable({axis:"y",cursor:"move",containment:"parent"}),$el.addClass("bbf-list-sortable")),$("button.bbf-list-add",$el).button({text:!1,icons:{primary:"ui-icon-plus"}}),$("button.bbf-list-edit",$el).button({text:!1,icons:{primary:"ui-icon-pencil"}}),$("button.bbf-list-del",$el).button({text:!1,icons:{primary:"ui-icon-trash"}}),this.hasFocus&&this.trigger("blur",this),this},itemToString:function(data){if(!data)return data;var schema=this.schema;if(schema.itemToString)return schema.itemToString(data);if(this.schema.listType=="NestedModel"){var model=new this.schema.model(data);return model.toString()}return data},addNewItem:function(event){event&&event.preventDefault();var self=this;this.openEditor(null,function(value,editor){triggerCancellableEvent(self,"addItem",[value,editor],function(){var text=self.itemToString(value),li=$(self.itemTemplate({id:value.id||"",text:text}));$.data(li[0],"data",value),$("ul",self.el).append(li),$("button.bbf-list-edit",this.el).button({text:!1,icons:{primary:"ui-icon-pencil"}}),$("button.bbf-list-del",this.el).button({text:!1,icons:{primary:"ui-icon-trash"}}),self.trigger("add",self,value),self.trigger("item:change",self,editor),self.trigger("change",self)})})},editItem:function(event){event.preventDefault();var self=this,li=$(event.target).closest("li"),originalValue=$.data(li[0],"data");this.openEditor(originalValue,function(newValue,editor){triggerCancellableEvent(self,"editItem",[newValue,editor],function(){$(".bbf-list-text",li).html(self.itemToString(newValue)),$.data(li[0],"data",newValue),self.trigger("item:change",self,editor),self.trigger("change",self)})})},deleteItem:function(event){function remove(){triggerCancellableEvent(self,"removeItem",[data],function(){li.remove(),self.trigger("remove",self,data),self.trigger("change",self)})}event.preventDefault();var self=this,li=$(event.target).closest("li"),data=$.data(li[0],"data"),confirmDelete=this.schema.confirmDelete?this.schema.confirmDelete:!1,confirmMsg=this.schema.confirmDeleteMsg||"Are you sure?";this.schema.confirmDelete?confirm(confirmMsg)&&remove():remove()},openEditor:function(data,callback){var self=this,schema=this.schema,listType=schema.listType||"Text",editor=Form.helpers.createEditor(listType,{key:"",schema:schema,value:data}).render(),container=this.editorContainer=$(this.editorTemplate());$(".bbf-list-editor",container).html(editor.el);var saveAndClose=function(){var errs=editor.validate();if(errs)return;callback(editor.getValue(),editor),container.dialog("close")},handleEnterPressed=function(event){if(event.keyCode!=13)return;saveAndClose()};$(container).dialog({resizable:!1,modal:!0,width:500,title:data?"Edit item":"New item",buttons:{OK:saveAndClose,Cancel:function(){container.dialog("close")}},close:function(){self.editorContainer=null,$(document).unbind("keydown",handleEnterPressed),editor.remove(),container.remove(),self.trigger("item:close",self,editor),self.trigger("item:blur",self,editor),self.trigger("blur",self)}}),this.trigger("item:open",this,editor),this.trigger("item:focus",this,editor),this.trigger("focus",this),$(document).bind("keydown",handleEnterPressed)},getValue:function(){var data=[];return $("li",this.el).each(function(index,li){data.push($.data(li,"data"))}),data},setValue:function(value){this.value=value,this.render()},focus:function(){if(this.hasFocus)return;var item=this.$("li .bbf-list-edit").first();item.length>0?item.click():this.addNewItem()},blur:function(){if(!this.hasFocus)return;this.editorContainer&&this.editorContainer.dialog("close")}}),_.extend(Form.editors,exports)})()})