Files
2026-02-07 15:48:27 +08:00

1 line
21 KiB
JavaScript

(function($,window,document,undefined){var pluginName="jarvisWidgets";function Plugin(element,options){this.obj=$(element);this.o=$.extend({},$.fn[pluginName].defaults,options);this.objId=this.obj.attr("id");this.pwCtrls=".jarviswidget-ctrls";this.widget=this.obj.find(this.o.widgets);this.toggleClass=this.o.toggleClass.split("|");this.editClass=this.o.editClass.split("|");this.fullscreenClass=this.o.fullscreenClass.split("|");this.customClass=this.o.customClass.split("|");this.init()}Plugin.prototype={_settings:function(){var self=this;storage=!!function(){var result,uid=+new Date;try{localStorage.setItem(uid,uid);result=localStorage.getItem(uid)==uid;localStorage.removeItem(uid);return result}catch(e){}}()&&localStorage;if(storage&&self.o.localStorage){if(self.o.ajaxnav===true){widget_url=location.hash.replace(/^#/,"");keySettings="Plugin_settings_"+widget_url+"_"+self.objId;getKeySettings=localStorage.getItem(keySettings);keyPosition="Plugin_position_"+widget_url+"_"+self.objId;getKeyPosition=localStorage.getItem(keyPosition)}else{keySettings="jarvisWidgets_settings_"+location.pathname+"_"+self.objId;getKeySettings=localStorage.getItem(keySettings);keyPosition="jarvisWidgets_position_"+location.pathname+"_"+self.objId;getKeyPosition=localStorage.getItem(keyPosition)}}if(("ontouchstart" in window)||window.DocumentTouch&&document instanceof DocumentTouch){clickEvent="touchstart"}else{clickEvent="click"}},_runLoaderWidget:function(elm){var self=this;if(self.o.indicator===true){elm.parents(self.o.widgets).find(".jarviswidget-loader").stop(true,true).fadeIn(100).delay(self.o.indicatorTime).fadeOut(100)}},_getPastTimestamp:function(t){var self=this;var da=new Date(t);tsMonth=da.getMonth()+1;tsDay=da.getDate();tsYear=da.getFullYear();tsHours=da.getHours();tsMinutes=da.getMinutes();tsSeconds=da.getUTCSeconds();if(tsMonth<10){var tsMonth="0"+tsMonth}if(tsDay<10){var tsDay="0"+tsDay}if(tsHours<10){var tsHours="0"+tsHours}if(tsMinutes<10){var tsMinutes="0"+tsMinutes}if(tsSeconds<10){var tsSeconds="0"+tsSeconds}var format=self.o.timestampFormat.replace(/%d%/g,tsDay).replace(/%m%/g,tsMonth).replace(/%y%/g,tsYear).replace(/%h%/g,tsHours).replace(/%i%/g,tsMinutes).replace(/%s%/g,tsSeconds);return format},_loadAjaxFile:function(awidget,file,loader){var self=this;awidget.find(".widget-body").load(file,function(response,status,xhr){var $this=$(this);if(status=="error"){$this.html('<h4 class="alert alert-danger">'+self.o.labelError+"<b> "+xhr.status+" "+xhr.statusText+"</b></h4>")}if(status=="success"){var aPalceholder=awidget.find(self.o.timestampPlaceholder);if(aPalceholder.length){aPalceholder.html(self._getPastTimestamp(new Date()))}if(typeof self.o.afterLoad=="function"){self.o.afterLoad.call(this,awidget)}}});self._runLoaderWidget(loader)},_saveSettingsWidget:function(){var self=this;self._settings();if(storage&&self.o.localStorage){var storeSettings=[];self.obj.find(self.o.widgets).each(function(){var storeSettingsStr={};storeSettingsStr.id=$(this).attr("id");storeSettingsStr.style=$(this).attr("data-widget-attstyle");storeSettingsStr.title=$(this).children("header").children("h2").text();storeSettingsStr.hidden=($(this).is(":hidden")?1:0);storeSettingsStr.collapsed=($(this).hasClass("jarviswidget-collapsed")?1:0);storeSettings.push(storeSettingsStr)});var storeSettingsObj=JSON.stringify({widget:storeSettings});if(getKeySettings!=storeSettingsObj){localStorage.setItem(keySettings,storeSettingsObj)}}if(typeof self.o.onSave=="function"){self.o.onSave.call(this,null,storeSettingsObj)}},_savePositionWidget:function(){var self=this;self._settings();if(storage&&self.o.localStorage){var mainArr=[];self.obj.find(self.o.grid+".sortable-grid").each(function(){var subArr=[];$(this).children(self.o.widgets).each(function(){var subObj={};subObj.id=$(this).attr("id");subArr.push(subObj)});var out={section:subArr};mainArr.push(out)});var storePositionObj=JSON.stringify({grid:mainArr});if(getKeyPosition!=storePositionObj){localStorage.setItem(keyPosition,storePositionObj,null)}}if(typeof self.o.onSave=="function"){self.o.onSave.call(this,storePositionObj)}},init:function(){var self=this;self._settings();if(!$("#"+self.objId).length){alert("It looks like your using a class instead of an ID, dont do that!")}if(self.o.rtl===true){$("body").addClass("rtl")}$(self.o.grid).each(function(){if($(this).find(self.o.widgets).length){$(this).addClass("sortable-grid")}});if(storage&&self.o.localStorage&&getKeyPosition){var jsonPosition=JSON.parse(getKeyPosition);for(var key in jsonPosition.grid){var changeOrder=self.obj.find(self.o.grid+".sortable-grid").eq(key);for(var key2 in jsonPosition.grid[key].section){changeOrder.append($("#"+jsonPosition.grid[key].section[key2].id))}}}if(storage&&self.o.localStorage&&getKeySettings){var jsonSettings=JSON.parse(getKeySettings);for(var key in jsonSettings.widget){var widgetId=$("#"+jsonSettings.widget[key].id);if(jsonSettings.widget[key].style){widgetId.removeClassPrefix("jarviswidget-color-").addClass(jsonSettings.widget[key].style).attr("data-widget-attstyle",""+jsonSettings.widget[key].style+"")}if(jsonSettings.widget[key].hidden==1){widgetId.hide(1)}else{widgetId.show(1).removeAttr("data-widget-hidden")}if(jsonSettings.widget[key].collapsed==1){widgetId.addClass("jarviswidget-collapsed").children("div").hide(1)}if(widgetId.children("header").children("h2").text()!=jsonSettings.widget[key].title){widgetId.children("header").children("h2").text(jsonSettings.widget[key].title)}}}self.widget.each(function(){var tWidget=$(this);var thisHeader=$(this).children("header");if(!thisHeader.parent().attr("role")){if(tWidget.data("widget-hidden")===true){tWidget.hide()}if(tWidget.data("widget-collapsed")===true){tWidget.addClass("jarviswidget-collapsed").children("div").hide()}if(self.o.customButton===true&&tWidget.data("widget-custombutton")===undefined&&self.customClass[0].length!=0){var customBtn='<a href="javascript:void(0);" class="button-icon jarviswidget-custom-btn"><i class="'+self.customClass[0]+'"></i></a>'}else{customBtn=""}if(self.o.deleteButton===true&&tWidget.data("widget-deletebutton")===undefined){var deleteBtn='<a href="javascript:void(0);" class="button-icon jarviswidget-delete-btn" rel="tooltip" title="Delete" data-placement="bottom"><i class="'+self.o.deleteClass+'"></i></a>'}else{deleteBtn=""}if(self.o.editButton===true&&tWidget.data("widget-editbutton")===undefined){var editBtn='<a href="javascript:void(0);" class="button-icon jarviswidget-edit-btn" rel="tooltip" title="Edit Title" data-placement="bottom"><i class="'+self.editClass[0]+'"></i></a>'}else{editBtn=""}if(self.o.fullscreenButton===true&&tWidget.data("widget-fullscreenbutton")===undefined){var fullscreenBtn='<a href="javascript:void(0);" class="button-icon jarviswidget-fullscreen-btn" rel="tooltip" title="Fullscreen" data-placement="bottom"><i class="'+self.fullscreenClass[0]+'"></i></a>'}else{fullscreenBtn=""}if(self.o.colorButton===true&&tWidget.data("widget-colorbutton")===undefined){var widgetcolorBtn='<a data-toggle="dropdown" class="dropdown-toggle color-box selector" href="javascript:void(0);"></a><ul class="dropdown-menu arrow-box-up-right color-select pull-right"><li><span class="bg-color-green" data-widget-setstyle="jarviswidget-color-green" rel="tooltip" data-placement="left" data-original-title="Green Grass"></span></li><li><span class="bg-color-greenDark" data-widget-setstyle="jarviswidget-color-greenDark" rel="tooltip" data-placement="top" data-original-title="Dark Green"></span></li><li><span class="bg-color-greenLight" data-widget-setstyle="jarviswidget-color-greenLight" rel="tooltip" data-placement="top" data-original-title="Light Green"></span></li><li><span class="bg-color-purple" data-widget-setstyle="jarviswidget-color-purple" rel="tooltip" data-placement="top" data-original-title="Purple"></span></li><li><span class="bg-color-magenta" data-widget-setstyle="jarviswidget-color-magenta" rel="tooltip" data-placement="top" data-original-title="Magenta"></span></li><li><span class="bg-color-pink" data-widget-setstyle="jarviswidget-color-pink" rel="tooltip" data-placement="right" data-original-title="Pink"></span></li><li><span class="bg-color-pinkDark" data-widget-setstyle="jarviswidget-color-pinkDark" rel="tooltip" data-placement="left" data-original-title="Fade Pink"></span></li><li><span class="bg-color-blueLight" data-widget-setstyle="jarviswidget-color-blueLight" rel="tooltip" data-placement="top" data-original-title="Light Blue"></span></li><li><span class="bg-color-teal" data-widget-setstyle="jarviswidget-color-teal" rel="tooltip" data-placement="top" data-original-title="Teal"></span></li><li><span class="bg-color-blue" data-widget-setstyle="jarviswidget-color-blue" rel="tooltip" data-placement="top" data-original-title="Ocean Blue"></span></li><li><span class="bg-color-blueDark" data-widget-setstyle="jarviswidget-color-blueDark" rel="tooltip" data-placement="top" data-original-title="Night Sky"></span></li><li><span class="bg-color-darken" data-widget-setstyle="jarviswidget-color-darken" rel="tooltip" data-placement="right" data-original-title="Night"></span></li><li><span class="bg-color-yellow" data-widget-setstyle="jarviswidget-color-yellow" rel="tooltip" data-placement="left" data-original-title="Day Light"></span></li><li><span class="bg-color-orange" data-widget-setstyle="jarviswidget-color-orange" rel="tooltip" data-placement="bottom" data-original-title="Orange"></span></li><li><span class="bg-color-orangeDark" data-widget-setstyle="jarviswidget-color-orangeDark" rel="tooltip" data-placement="bottom" data-original-title="Dark Orange"></span></li><li><span class="bg-color-red" data-widget-setstyle="jarviswidget-color-red" rel="tooltip" data-placement="bottom" data-original-title="Red Rose"></span></li><li><span class="bg-color-redLight" data-widget-setstyle="jarviswidget-color-redLight" rel="tooltip" data-placement="bottom" data-original-title="Light Red"></span></li><li><span class="bg-color-white" data-widget-setstyle="jarviswidget-color-white" rel="tooltip" data-placement="right" data-original-title="Purity"></span></li><li><a href="javascript:void(0);" class="jarviswidget-remove-colors" data-widget-setstyle="" rel="tooltip" data-placement="bottom" data-original-title="Reset widget color to default">Remove</a></li></ul>';thisHeader.prepend('<div class="widget-toolbar">'+widgetcolorBtn+"</div>")}else{widgetcolorBtn=""}if(self.o.toggleButton===true&&tWidget.data("widget-togglebutton")===undefined){if(tWidget.data("widget-collapsed")===true||tWidget.hasClass("jarviswidget-collapsed")){var toggleSettings=self.toggleClass[1]}else{toggleSettings=self.toggleClass[0]}var toggleBtn='<a href="#" class="button-icon jarviswidget-toggle-btn" rel="tooltip" title="Collapse" data-placement="bottom"><i class="'+toggleSettings+'"></i></a>'}else{toggleBtn=""}if(self.o.refreshButton===true&&tWidget.data("widget-refreshbutton")!=false&&tWidget.data("widget-load")){var refreshBtn='<a href="#" class="button-icon jarviswidget-refresh-btn" data-loading-text="&nbsp;&nbsp;Loading...&nbsp;" rel="tooltip" title="Refresh" data-placement="bottom"><i class="'+self.o.refreshButtonClass+'"></i></a>'}else{refreshBtn=""}var formatButtons=self.o.buttonOrder.replace(/%refresh%/g,refreshBtn).replace(/%delete%/g,deleteBtn).replace(/%custom%/g,customBtn).replace(/%fullscreen%/g,fullscreenBtn).replace(/%edit%/g,editBtn).replace(/%toggle%/g,toggleBtn);if(refreshBtn!=""||deleteBtn!=""||customBtn!=""||fullscreenBtn!=""||editBtn!=""||toggleBtn!=""){thisHeader.prepend('<div class="jarviswidget-ctrls">'+formatButtons+"</div>")}if(self.o.sortable===true&&tWidget.data("widget-sortable")===undefined){tWidget.addClass("jarviswidget-sortable")}if(tWidget.find(self.o.editPlaceholder).length){tWidget.find(self.o.editPlaceholder).find("input").val($.trim(thisHeader.children("h2").text()))}thisHeader.append('<span class="jarviswidget-loader"><i class="fa fa-refresh fa-spin"></i></span>');tWidget.attr("role","widget").children("div").attr("role","content").prev("header").attr("role","heading").children("div").attr("role","menu")}});if(self.o.buttonsHidden===true){$(self.o.pwCtrls).hide()}$(".jarviswidget header [rel=tooltip]").tooltip();self.obj.find("[data-widget-load]").each(function(){var thisItem=$(this),thisItemHeader=thisItem.children(),pathToFile=thisItem.data("widget-load"),reloadTime=thisItem.data("widget-refresh")*1000,ajaxLoader=thisItem.children();if(!thisItem.find(".jarviswidget-ajax-placeholder").length){thisItem.children("widget-body").append('<div class="jarviswidget-ajax-placeholder">'+self.o.loadingLabel+"</div>");if(thisItem.data("widget-refresh")>0){self._loadAjaxFile(thisItem,pathToFile,thisItemHeader);setInterval(function(){self._loadAjaxFile(thisItem,pathToFile,thisItemHeader)},reloadTime)}else{self._loadAjaxFile(thisItem,pathToFile,thisItemHeader)}}});if(self.o.sortable===true&&jQuery.ui){var sortItem=self.obj.find(".sortable-grid").not("[data-widget-excludegrid]");sortItem.sortable({items:sortItem.find(".jarviswidget-sortable"),connectWith:sortItem,placeholder:self.o.placeholderClass,cursor:"move",revert:true,opacity:self.o.opacity,delay:200,cancel:".button-icon, #jarviswidget-fullscreen-mode > div",zIndex:10000,handle:self.o.dragHandle,forcePlaceholderSize:true,forceHelperSize:true,update:function(event,ui){self._runLoaderWidget(ui.item.children());self._savePositionWidget();if(typeof self.o.onChange=="function"){self.o.onChange.call(this,ui.item)}}})}if(self.o.buttonsHidden===true){self.widget.children("header").hover(function(){$(this).children(self.o.pwCtrls).stop(true,true).fadeTo(100,1)},function(){$(this).children(self.o.pwCtrls).stop(true,true).fadeTo(100,0)})}self._clickEvents();$(self.o.deleteSettingsKey).on(clickEvent,this,function(e){if(storage&&self.o.localStorage){var cleared=confirm(self.o.settingsKeyLabel);if(cleared){localStorage.removeItem(keySettings)}}e.preventDefault()});$(self.o.deletePositionKey).on(clickEvent,this,function(e){if(storage&&self.o.localStorage){var cleared=confirm(self.o.positionKeyLabel);if(cleared){localStorage.removeItem(keyPosition)}}e.preventDefault()});if(storage&&self.o.localStorage){if(getKeySettings===null||getKeySettings.length<1){self._saveSettingsWidget()}if(getKeyPosition===null||getKeyPosition.length<1){self._savePositionWidget()}}},_clickEvents:function(){var self=this;self._settings();self.widget.on(clickEvent,".jarviswidget-toggle-btn",function(e){var tWidget=$(this);var pWidget=tWidget.parents(self.o.widgets);self._runLoaderWidget(tWidget);if(pWidget.hasClass("jarviswidget-collapsed")){tWidget.children().removeClass(self.toggleClass[1]).addClass(self.toggleClass[0]).parents(self.o.widgets).removeClass("jarviswidget-collapsed").children("[role=content]").slideDown(self.o.toggleSpeed,function(){self._saveSettingsWidget()})}else{tWidget.children().removeClass(self.toggleClass[0]).addClass(self.toggleClass[1]).parents(self.o.widgets).addClass("jarviswidget-collapsed").children("[role=content]").slideUp(self.o.toggleSpeed,function(){self._saveSettingsWidget()})}if(typeof self.o.onToggle=="function"){self.o.onToggle.call(this,pWidget)}e.preventDefault()});function heightFullscreen(){if($("#jarviswidget-fullscreen-mode").length){var heightWindow=$(window).height();var heightHeader=$("#jarviswidget-fullscreen-mode").find(self.o.widgets).children("header").height();$("#jarviswidget-fullscreen-mode").find(self.o.widgets).children("div").height(heightWindow-heightHeader-15)}}self.widget.on(clickEvent,".jarviswidget-fullscreen-btn",function(e){var thisWidget=$(this).parents(self.o.widgets);var thisWidgetContent=thisWidget.children("div");self._runLoaderWidget($(this));if($("#jarviswidget-fullscreen-mode").length){$(".nooverflow").removeClass("nooverflow");thisWidget.unwrap("<div>").children("div").removeAttr("style").end().find(".jarviswidget-fullscreen-btn").children().removeClass(self.fullscreenClass[1]).addClass(self.fullscreenClass[0]).parents(self.pwCtrls).children("a").show();if(thisWidgetContent.hasClass("jarviswidget-visible")){thisWidgetContent.hide().removeClass("jarviswidget-visible")}}else{$("body").addClass("nooverflow");thisWidget.wrap('<div id="jarviswidget-fullscreen-mode"/>').parent().find(".jarviswidget-fullscreen-btn").children().removeClass(self.fullscreenClass[0]).addClass(self.fullscreenClass[1]).parents(self.pwCtrls).children("a:not(.jarviswidget-fullscreen-btn)").hide();if(thisWidgetContent.is(":hidden")){thisWidgetContent.show().addClass("jarviswidget-visible")}}heightFullscreen();if(typeof self.o.onFullscreen=="function"){self.o.onFullscreen.call(this,thisWidget)}e.preventDefault()});$(window).resize(function(){heightFullscreen()});self.widget.on(clickEvent,".jarviswidget-edit-btn",function(e){var tWidget=$(this).parents(self.o.widgets);self._runLoaderWidget($(this));if(tWidget.find(self.o.editPlaceholder).is(":visible")){$(this).children().removeClass(self.editClass[1]).addClass(self.editClass[0]).parents(self.o.widgets).find(self.o.editPlaceholder).slideUp(self.o.editSpeed,function(){self._saveSettingsWidget()})}else{$(this).children().removeClass(self.editClass[0]).addClass(self.editClass[1]).parents(self.o.widgets).find(self.o.editPlaceholder).slideDown(self.o.editSpeed)}if(typeof self.o.onEdit=="function"){self.o.onEdit.call(this,tWidget)}e.preventDefault()});$(self.o.editPlaceholder).find("input").keyup(function(){$(this).parents(self.o.widgets).children("header").children("h2").text($(this).val())});self.widget.on(clickEvent,"[data-widget-setstyle]",function(e){var val=$(this).data("widget-setstyle");var styles="";$(this).parents(self.o.editPlaceholder).find("[data-widget-setstyle]").each(function(){styles+=$(this).data("widget-setstyle")+" "});$(this).parents(self.o.widgets).attr("data-widget-attstyle",""+val+"").removeClassPrefix("jarviswidget-color-").addClass(val);self._runLoaderWidget($(this));self._saveSettingsWidget();e.preventDefault()});self.widget.on(clickEvent,".jarviswidget-custom-btn",function(e){var w=$(this).parents(self.o.widgets);self._runLoaderWidget($(this));if($(this).children("."+self.customClass[0]).length){$(this).children().removeClass(self.customClass[0]).addClass(self.customClass[1]);if(typeof self.o.customStart=="function"){self.o.customStart.call(this,w)}}else{$(this).children().removeClass(self.customClass[1]).addClass(self.customClass[0]);if(typeof self.o.customEnd=="function"){self.o.customEnd.call(this,w)}}self._saveSettingsWidget();e.preventDefault()});self.widget.on(clickEvent,".jarviswidget-delete-btn",function(e){var tWidget=$(this).parents(self.o.widgets);var removeId=tWidget.attr("id");var widTitle=tWidget.children("header").children("h2").text();$.SmartMessageBox({title:"<i class='fa fa-times' style='color:#ed1c24'></i> "+self.o.labelDelete+' "'+widTitle+'"',content:"Warning: This action cannot be undone",buttons:"[No][Yes]"},function(ButtonPressed){if(ButtonPressed=="Yes"){self._runLoaderWidget($(this));$("#"+removeId).fadeOut(self.o.deleteSpeed,function(){$(this).remove();if(typeof self.o.onDelete=="function"){self.o.onDelete.call(this,tWidget)}})}});e.preventDefault()});self.widget.on(clickEvent,".jarviswidget-refresh-btn",function(e){var rItem=$(this).parents(self.o.widgets),pathToFile=rItem.data("widget-load"),ajaxLoader=rItem.children(),btn=$(this);btn.button("loading");ajaxLoader.addClass("widget-body-ajax-loading");setTimeout(function(){btn.button("reset");ajaxLoader.removeClass("widget-body-ajax-loading");self._loadAjaxFile(rItem,pathToFile,ajaxLoader)},1000);e.preventDefault()})},destroy:function(){var self=this;self.widget.off("click",self._clickEvents());self.obj.removeData(pluginName)}};$.fn[pluginName]=function(option){return this.each(function(){var $this=$(this);var data=$this.data(pluginName);var options=typeof option=="object"&&option;if(!data){$this.data(pluginName,(data=new Plugin(this,options)))}if(typeof option=="string"){data[option]()}})};$.fn[pluginName].defaults={grid:"section",widgets:".jarviswidget",localStorage:true,deleteSettingsKey:"",settingsKeyLabel:"Reset settings?",deletePositionKey:"",positionKeyLabel:"Reset position?",sortable:true,buttonsHidden:false,toggleButton:true,toggleClass:"min-10 | plus-10",toggleSpeed:200,onToggle:function(){},deleteButton:true,deleteClass:"trashcan-10",deleteSpeed:200,onDelete:function(){},editButton:true,editPlaceholder:".jarviswidget-editbox",editClass:"pencil-10 | delete-10",editSpeed:200,onEdit:function(){},colorButton:true,fullscreenButton:true,fullscreenClass:"fullscreen-10 | normalscreen-10",fullscreenDiff:3,onFullscreen:function(){},customButton:true,customClass:"",customStart:function(){},customEnd:function(){},buttonOrder:"%refresh% %delete% %custom% %edit% %fullscreen% %toggle%",opacity:1,dragHandle:"> header",placeholderClass:"jarviswidget-placeholder",indicator:true,indicatorTime:600,ajax:true,loadingLabel:"loading...",timestampPlaceholder:".jarviswidget-timestamp",timestampFormat:"Last update: %m%/%d%/%y% %h%:%i%:%s%",refreshButton:true,refreshButtonClass:"refresh-10",labelError:"Sorry but there was a error:",labelUpdated:"Last Update:",labelRefresh:"Refresh",labelDelete:"Delete widget:",afterLoad:function(){},rtl:false,onChange:function(){},onSave:function(){},ajaxnav:true};$.fn.removeClassPrefix=function(prefix){this.each(function(i,it){var classes=it.className.split(" ").map(function(item){return item.indexOf(prefix)===0?"":item});it.className=$.trim(classes.join(" "))});return this}})(jQuery,window,document);