mirror of
https://github.com/hyperion-project/hyperion.ng.git
synced 2023-10-10 13:36:59 +02:00
8d7137136b
* update * update * tabs test * update * test * ... * fix editor * update ui * fix visual glitch if help is off * fix fadecandy error and th [skip ci]
1 line
6.2 KiB
JavaScript
1 line
6.2 KiB
JavaScript
"undefined"==typeof gj&&(gj={}),gj.widget=function(){var a=this;a.xhr=null,a.generateGUID=function(){function a(){return Math.floor(65536*(1+Math.random())).toString(16).substring(1)}return a()+a()+"-"+a()+"-"+a()+"-"+a()+"-"+a()+a()+a()}},gj.widget.prototype.init=function(a,b){var c,d,e;d=$.extend(!0,{},this.getHTMLConfig()||{}),$.extend(!0,d,a||{}),e=this.getConfig(d,b),this.attr("data-guid",e.guid),this.data(e);for(c in e)gj[b].events.hasOwnProperty(c)&&(this.on(c,e[c]),delete e[c]);for(plugin in gj[b].plugins)gj[b].plugins.hasOwnProperty(plugin)&&gj[b].plugins[plugin].configure(this,e,d);return this},gj.widget.prototype.getConfig=function(a,b){var c,d,e;c=$.extend(!0,{},gj[b].config.base),d=a.uiLibrary||c.uiLibrary,gj[b].config[d]&&$.extend(!0,c,gj[b].config[d]);for(e in gj[b].plugins)gj[b].plugins.hasOwnProperty(e)&&($.extend(!0,c,gj[b].plugins[e].config.base),gj[b].plugins[e].config[d]&&$.extend(!0,c,gj[b].plugins[e].config[d]));return $.extend(!0,c,a),c.guid||(c.guid=this.generateGUID()),c},gj.widget.prototype.getHTMLConfig=function(){var a=this.data(),b=this[0].attributes;return b.width&&(a.width=b.width.nodeValue),b.height&&(a.height=b.height.nodeValue),b.align&&(a.align=b.align.nodeValue),a&&a.source&&(a.dataSource=a.source,delete a.source),a},gj.widget.prototype.createDoneHandler=function(){var a=this;return function(b){"string"==typeof b&&JSON&&(b=JSON.parse(b)),gj[a.data("type")].methods.render(a,b)}},gj.widget.prototype.createErrorHandler=function(){return function(a){a&&a.statusText&&"abort"!==a.statusText&&alert(a)}},gj.widget.prototype.reload=function(a){var b,c,d=this.data();return void 0===d.dataSource&&gj[this.data("type")].methods.useHtmlDataSource(this,d),$.extend(d.params,a),$.isArray(d.dataSource)?(c=gj[this.data("type")].methods.filter(this),gj[this.data("type")].methods.render(this,c)):"string"==typeof d.dataSource?(b={url:d.dataSource,data:d.params},this.xhr&&this.xhr.abort(),this.xhr=$.ajax(b).done(this.createDoneHandler()).fail(this.createErrorHandler())):"object"==typeof d.dataSource&&(d.dataSource.data||(d.dataSource.data={}),$.extend(d.dataSource.data,d.params),b=$.extend(!0,{},d.dataSource),"json"===b.dataType&&"object"==typeof b.data&&(b.data=JSON.stringify(b.data)),b.success||(b.success=this.createDoneHandler()),b.error||(b.error=this.createErrorHandler()),this.xhr&&this.xhr.abort(),this.xhr=$.ajax(b)),this},gj.documentManager={events:{},subscribeForEvent:function(a,b,c){if(gj.documentManager.events[a]&&0!==gj.documentManager.events[a].length){if(gj.documentManager.events[a][b])throw"Event "+a+" for widget with guid='"+b+"' is already attached.";gj.documentManager.events[a].push({widgetId:b,callback:c})}else gj.documentManager.events[a]=[{widgetId:b,callback:c}],$(document).on(a,gj.documentManager.executeCallbacks)},executeCallbacks:function(a){var b=gj.documentManager.events[a.type];if(b)for(var c=0;c<b.length;c++)b[c].callback(a)},unsubscribeForEvent:function(a,b){var c=!1,d=gj.documentManager.events[a];if(d)for(var e=0;e<d.length;e++)d[e].widgetId===b&&(d.splice(e,1),c=!0,0===d.length&&($(document).off(a),delete gj.documentManager.events[a]));if(!c)throw'The "'+a+'" for widget with guid="'+b+"\" can't be removed."}},"undefined"==typeof gj.draggable&&(gj.draggable={}),gj.draggable.config={base:{handle:void 0,vertical:!0,horizontal:!0}},gj.draggable.methods={init:function(a){var b,c=this;return gj.widget.prototype.init.call(this,a,"draggable"),c.attr("data-draggable","true"),b=gj.draggable.methods.getHandleElement(c),b.on("mousedown",function(a){c.attr("data-draggable-dragging",!0),c.removeAttr("data-draggable-x"),c.removeAttr("data-draggable-y"),"aboslute"!==c.css("position")&&c.css("position","absolute"),gj.documentManager.subscribeForEvent("mousemove",c.data("guid"),gj.draggable.methods.createMouseMoveHandler(c))}),gj.documentManager.subscribeForEvent("mouseup",c.data("guid"),gj.draggable.methods.createMouseUpHandler(c)),c},getHandleElement:function(a){var b=a.data("handle");return b&&b.length?b:a},createMouseUpHandler:function(a){return function(b){"true"===a.attr("data-draggable-dragging")&&(a.attr("data-draggable-dragging",!1),gj.documentManager.unsubscribeForEvent("mousemove",a.data("guid")),gj.draggable.events.stop(a,b))}},createMouseMoveHandler:function(a){return function(b){var c,d,e,f,g,h;"true"===a.attr("data-draggable-dragging")&&(c=gj.draggable.methods.mouseX(b),d=gj.draggable.methods.mouseY(b),g=a.attr("data-draggable-x"),h=a.attr("data-draggable-y"),g&&h?(e=a.data("horizontal")?c-parseInt(g,10):0,f=a.data("vertical")?d-parseInt(h,10):0,!1!==gj.draggable.events.drag(a,e,f)&&gj.draggable.methods.move(a,e,f)):gj.draggable.events.start(a),a.attr("data-draggable-x",c),a.attr("data-draggable-y",d))}},move:function(a,b,c){var d=a.get(0),e=d.style.top?parseInt(d.style.top):a.position().top,f=d.style.left?parseInt(d.style.left):a.position().left;d.style.top=e+c+"px",d.style.left=f+b+"px"},mouseX:function(a){if(a){if(a.pageX)return a.pageX;if(a.clientX)return a.clientX+(document.documentElement.scrollLeft?document.documentElement.scrollLeft:document.body.scrollLeft)}return null},mouseY:function(a){if(a){if(a.pageY)return a.pageY;if(a.clientY)return a.clientY+(document.documentElement.scrollTop?document.documentElement.scrollTop:document.body.scrollTop)}return null},destroy:function(a){return"true"===a.attr("data-draggable")&&(gj.documentManager.unsubscribeForEvent("mouseup",a.data("guid")),a.removeData(),a.removeAttr("data-guid"),a.removeAttr("data-draggable"),a.off("drag").off("start").off("stop"),gj.draggable.methods.getHandleElement(a).off("mousedown")),a}},gj.draggable.events={drag:function(a,b,c){return a.triggerHandler("drag",[{top:c,left:b}])},start:function(a){a.triggerHandler("start")},stop:function(a,b){a.triggerHandler("stop",[b])}},gj.draggable.widget=function(a,b){var c=this,d=gj.draggable.methods;return c.destroy=function(){return d.destroy(this)},$.extend(a,c),"true"!==a.attr("data-draggable")&&d.init.apply(a,b),a},gj.draggable.widget.prototype=new gj.widget,gj.draggable.widget.constructor=gj.draggable.widget,function(a){a.fn.draggable=function(a){var b;if(this&&this.length){if("object"!=typeof a&&a){if(b=new gj.draggable.widget(this,null),b[a])return b[a].apply(this,Array.prototype.slice.call(arguments,1));throw"Method "+a+" does not exist."}return new gj.draggable.widget(this,arguments)}}}(jQuery); |