1 line
18 KiB
JavaScript
1 line
18 KiB
JavaScript
var Dashboard={grid:null,elem_id:"",element:null,elem_dom:null,rand:null,interval:null,current_name:null,markdown_editors:[],all_cards:[],all_widgets:[],edit_mode:false,embed:false,ajax_cards:false,context:"core",markdown_contents:[],dash_width:0,cell_margin:3,cols:26,cache_key:"",display:function(a){var e=typeof a!=="undefined"?a:{};var t={cols:24,rows:24,cell_length:40,cell_margin:5,rand:"",embed:false,ajax_cards:true,all_cards:[],context:"core"};e=Object.assign({},t,e);this.rand=e.rand;this.elem_id="#dashboard-"+e.rand;this.element=$(Dashboard.elem_id);this.elem_dom=Dashboard.element[0];this.current_name=$(this.elem_id+" .dashboard_select").val()||e.current;this.embed=e.embed;this.ajax_cards=e.ajax_cards;this.all_cards=e.all_cards;this.all_widgets=e.all_widgets;this.context=e.context;this.dash_width=this.element.width();this.cell_margin=e.cell_margin;this.cols=e.cols;this.cache_key=e.cache_key||"";$("#grid-stack-"+e.rand).gridstack({column:e.cols,maxRow:e.rows+1,verticalMargin:this.cell_margin,float:true,animate:false,draggable:{cancel:"textarea"}});Dashboard.grid=$("#grid-stack-"+e.rand).data("gridstack");Dashboard.grid.setStatic(true);Dashboard.generateCss();Dashboard.initFilters();if(Dashboard.ajax_cards){Dashboard.getCardsAjax()}if(!Dashboard.ajax_cards){Dashboard.fitNumbers();Dashboard.animateNumbers()}$("#dashboard-"+e.rand+" .toolbar .dashboard_select").change((function(){Dashboard.current_name=$(this).val();var a=$(this).find("option:selected").text();$(".dashboard-name").val(a);Dashboard.refreshDashboard();Dashboard.setLastDashboard();Dashboard.initFilters()}));$("#dashboard-"+e.rand+" .toolbar .add-dashboard").click((function(){Dashboard.addForm()}));$(document).on("submit",".display-add-dashboard-form",(function(a){a.preventDefault();$(".ui-dialog-content").dialog("close");var e=$(this);var t={};$.each(e.closest(".display-add-dashboard-form").serializeArray(),(function(){t[this.name]=this.value}));Dashboard.addNew(t)}));$("#dashboard-"+e.rand+" .toolbar .delete-dashboard").click((function(){Dashboard.delete()}));$("#dashboard-"+e.rand+" .toolbar .clone-dashboard").click((function(){Dashboard.clone()}));$("#dashboard-"+e.rand+" .toolbar .open-embed").click((function(){$('<div title="'+__("Share or embed this dashboard")+'"></div>').load(CFG_GLPI.root_doc+"/ajax/dashboard.php",{action:"display_embed_form",dashboard:Dashboard.current_name},(function(){$(this).dialog({width:300,modal:true,open:function(){$(this).find("input").first().focus()}})}))}));$("#dashboard-"+e.rand+" .toolbar .edit-dashboard").click((function(){var a=!$(this).hasClass("active");Dashboard.setEditMode(a)}));var r="#dashboard-"+e.rand+" .toggle-fullscreen";$(r).click((function(){Dashboard.toggleFullscreenMode($(this))}));$(document).on("fullscreenchange webkitfullscreenchange mozfullscreenchange MSFullscreenChange",(function(){if(!document.webkitIsFullScreen&&!document.mozFullScreen&&!document.msFullscreenElement!==null){Dashboard.disableFullscreenMode()}}));$("#dashboard-"+e.rand+" .toolbar .night-mode").click((function(){$(this).toggleClass("active");Dashboard.element.toggleClass("nightmode")}));$("#dashboard-"+e.rand+" .toolbar .auto-refresh").click((function(){$(this).toggleClass("active");var a=$(this).hasClass("active");if(a){var e=parseInt(CFG_GLPI.refresh_ticket_list)*60||30;Dashboard.interval=setInterval((function(){Dashboard.refreshDashboard()}),e*1e3)}else{clearInterval(Dashboard.interval)}}));var d;$(window).on("resize",(function(a){if(a.target.constructor.name!=="Window"){return}window.clearTimeout(d);d=window.setTimeout((function(){Dashboard.generateCss();Dashboard.fitNumbers();Dashboard.animateNumbers()}),200)}));$(document).on("click",".display-rights-form .save_rights",(function(){$(".ui-dialog-content").dialog("close");var a=$(this);var e={};$.each(a.closest(".display-rights-form").serializeArray(),(function(){var a=this.value.split("-");var t=a[0];var r=a[1];if(!(t in e)){e[t]=[]}e[t].push(r)}));$.ajax({method:"POST",url:CFG_GLPI.root_doc+"/ajax/dashboard.php",data:{action:"save_rights",dashboard:Dashboard.current_name,rights:e}})}));$("#grid-stack-"+e.rand).on("dragstop",(function(){Dashboard.saveDashboard()}));$("#grid-stack-"+e.rand).on("gsresizestop",(function(a,e){Dashboard.saveDashboard();var t=$(e).find(".ct-chart");if(t.length>0){t[0].__chartist__.update()}Dashboard.fitNumbers($(e));Dashboard.animateNumbers($(e))}));$(document).on("click","#dashboard-"+e.rand+" .delete-item",(function(){var a=$(this);var e=a.closest(".grid-stack-item");Dashboard.grid.removeWidget(e);Dashboard.saveDashboard()}));$(document).on("click","#dashboard-"+e.rand+" .refresh-item",(function(){var a=$(this);var e=a.closest(".grid-stack-item");var t=e.data("gs-id");Dashboard.getCardsAjax("[data-gs-id="+t+"]")}));$(document).on("click","#dashboard-"+e.rand+" .edit-item",(function(){var a=$(this);var e=a.parent().parent(".grid-stack-item");var t=e.data("card-options");$(".ui-dialog-content").dialog("close");$('<div title="'+__("Edit this card")+'"></div>').load(CFG_GLPI.root_doc+"/ajax/dashboard.php",{action:"display_edit_widget",gridstack_id:e.data("gs-id"),card_id:t.card_id,x:e.data("gs-x"),y:e.data("gs-y"),width:e.data("gs-width"),height:e.data("gs-height"),card_options:t},(function(){$(this).dialog({width:"auto",modal:true,open:function(){$(this).find("input[type=submit]").first().focus()}})}))}));$(document).on("click","#dashboard-"+e.rand+" .cell-add",(function(){var a=$(this);$(".ui-dialog-content").dialog("close");$('<div title="'+__("Add a card")+'"></div>').load(CFG_GLPI.root_doc+"/ajax/dashboard.php",{action:"display_add_widget",x:a.data("x"),y:a.data("y")},(function(){$(this).dialog({width:"auto",modal:true,open:function(){$(this).find("input[type=submit]").first().focus()}})}))}));$(document).on("submit",".display-widget-form ",(function(a){a.preventDefault();var e=$(this);var t=e.has(".edit-widget").length>0;Dashboard.setWidgetFromForm(e,t)}));$(document).on("click","#dashboard-"+e.rand+" .filters_toolbar .add-filter",(function(){$(".ui-dialog-content").dialog("close");var a=Dashboard.getFiltersFromStorage();var e=Object.keys(a);$('<div title="'+__("Add a filter")+'"></div>').load(CFG_GLPI.root_doc+"/ajax/dashboard.php",{action:"display_add_filter",used:e},(function(){$(this).dialog({width:"auto",modal:true,open:function(){$(this).find("input[type=submit]").first().focus()}})}))}));$(document).on("submit",".display-filter-form ",(function(a){a.preventDefault();var e=$(this);Dashboard.setFilterFromForm(e)}));$(document).on("click","#dashboard-"+e.rand+" .filters_toolbar .delete-filter",(function(){var a=$(this).closest(".filter");var e=a.data("filter-id");a.remove();var t=Dashboard.getFiltersFromStorage();delete t[e];Dashboard.setFiltersInStorage(t);Dashboard.refreshCardsImpactedByFilter(e)}));$(document).on("click",".save-dashboard-name ",(function(a){a.preventDefault();$(".dashboard_select option[value="+Dashboard.current_name+"]").text($(".dashboard-name").val());Dashboard.saveDashboard();$(".display-message").addClass("success").text(__("Saved")).show("fade").delay(2e3).hide("fade")}));$(document).on("select2:select",".display-widget-form select[name=card_id]",(function(a){var e=a.params.data;var t=e.id;var r=$(this).closest(".field").siblings(".widgettype_field");var d=Dashboard.all_cards[t].widgettype;var i=d.length===1;r.show().find("input[type=radio]").next("label").css("display","none").end().filter("[value='"+d.join("'],[value='")+"']").prop("checked",i).trigger("change").next("label").css("display","inline-block")}));$(document).on("change",".display-widget-form [name=widgettype]",(function(){var a=$(this);var e=a.val();var t=Dashboard.all_widgets[e];var r=t.gradient||false;var d=t.pointlbl||false;var i=t.limit||false;var o=t.width||2;var s=t.height||2;a.closest(".field").siblings(".gradient_field").hide().toggle(r).end().siblings(".pointlbl_field").hide().toggle(d).end().siblings(".limit_field").hide().toggle(i).end();var n=a.closest(".field").siblings('[name="width"]');var l=a.closest(".field").siblings('[name="height"]');if(n.val()==0){n.val(o)}if(l.val()==0){l.val(s)}}));$(document).on("input",".card.markdown textarea.markdown_content",(function(){Dashboard.saveMarkdown($(this))}))},saveMarkdown:function(a){var e=a.closest(".grid-stack-item");var t=a.val();var r=e.data("gs-id");e.addClass("dirty");Dashboard.markdown_contents[r]=t},setWidgetFromForm:function(a,e){e=e||false;$(".ui-dialog-content").dialog("close");var t={};$.each(a.serializeArray(),(function(){t[this.name]=this.value}));if(t.card_id==="0"){return false}t.card_options=t.card_options||{};if(typeof t.card_options==="string"){t.card_options=JSON.parse(t.card_options)}t.card_options.color=t.color||null;t.card_options.widgettype=t.widgettype||null;t.card_options.use_gradient=t.use_gradient||0;t.card_options.point_labels=t.point_labels||0;t.card_options.limit=t.limit||7;if(t.card_id==="markdown_editable"&&!("markdown_content"in t.card_options)){t.card_options.markdown_content=""}if(e===true){if(t.old_id==="0"){return false}var r=$(".grid-stack-item[data-gs-id="+t.old_id+"]");Dashboard.grid.removeWidget(r)}var d=getUuidV4();t.gridstack_id=t.card_id+"_"+d;t.card_options.card_id=t.card_id;t.card_options.gridstack_id=t.gridstack_id;var i=t.card_options;i.force=true;var o=Dashboard.addWidget(t);$.ajax({method:"GET",url:CFG_GLPI.root_doc+"/ajax/dashboard.php",data:{action:"get_card",dashboard:Dashboard.current_name,card_id:t.card_id,cache_key:Dashboard.cache_key,args:i}}).done((function(a){o.children(".grid-stack-item-content").append(a);Dashboard.fitNumbers(o);Dashboard.animateNumbers(o);Dashboard.saveDashboard()}))},addWidget:function(a){var e=a.gridstack_id;var t=a.x||-1;var r=a.y||-1;var d=a.width||2;var i=a.height||2;var o=a.card_options||{};var s=' <div class="grid-stack-item"> <span class="controls"> <i class="refresh-item fas fa-sync-alt" title="'+__("Refresh this card")+'"></i> <i class="edit-item fas fa-edit" title="'+__("Edit this card")+'"></i> <i class="delete-item fas fa-times" title="'+__("Delete this card")+'"></i> </span> <div class="grid-stack-item-content"> </div> </div>';var n=Dashboard.grid.addWidget(s,t,r,d,i,t<0||r<0,undefined,undefined,undefined,undefined,e);n.data("card-options",o);return n},setFilterFromForm:function(a){$(".ui-dialog-content").dialog("close");var e={};$.each(a.serializeArray(),(function(){e[this.name]=this.value}));$.ajax({method:"GET",url:CFG_GLPI.root_doc+"/ajax/dashboard.php",data:{action:"get_filter",filter_id:e.filter_id}}).done((function(a){$(".filters").append(a);Dashboard.saveFilter(e.filter_id,[])}))},refreshDashboard:function(){var a=$(Dashboard.elem_id+" .grid-stack");Dashboard.grid.removeAll();$.get({url:CFG_GLPI.root_doc+"/ajax/dashboard.php",data:{dashboard:Dashboard.current_name,action:"get_dashboard_items",embed:Dashboard.embed?1:0}}).done((function(e){a.prepend(e);a.find(".grid-stack-item").each((function(){Dashboard.grid.makeWidget($(this))}));if(Dashboard.ajax_cards){Dashboard.getCardsAjax()}}))},setLastDashboard:function(){$.ajax({method:"POST",url:CFG_GLPI.root_doc+"/ajax/dashboard.php",data:{dashboard:Dashboard.current_name,page:(location.origin+location.pathname).replace(CFG_GLPI.url_base,""),action:"set_last_dashboard"}})},saveFilter:function(a,e){var t=Dashboard.getFiltersFromStorage();t[a]=e;Dashboard.setFiltersInStorage(t);Dashboard.refreshCardsImpactedByFilter(a)},refreshCardsImpactedByFilter:function(a){$(".dashboard .card.filter-"+a).each((function(){var a=$(this).closest(".grid-stack-item");var e=a.data("gs-id");Dashboard.getCardsAjax("[data-gs-id="+e+"]")}))},saveDashboard:function(a){a=a|false;var e=$.makeArray(Dashboard.element.find(".grid-stack-item:visible:not(.grid-stack-placeholder)")).map((function(a){var e=$(a).data("_gridstack_node");var t=$(a).data("card-options");if(_.keys(Dashboard.markdown_contents).length>0&&e.id in Dashboard.markdown_contents){t.markdown_content=Dashboard.markdown_contents[e.id]}return e?{gridstack_id:e.id,card_id:t.card_id,x:e.x,y:e.y,width:e.width,height:e.height,card_options:t}:null}));$.ajax({method:"POST",url:CFG_GLPI.root_doc+"/ajax/dashboard.php",data:{action:"save_items",dashboard:Dashboard.current_name,items:e,title:$(".dashboard-name").val()}}).done((function(){if(a){Dashboard.refreshDashboard()}}))},fitNumbers:function(a){a=a||$("body");var e=.96;if(this.dash_width<=700||this.grid.container.hasClass("grid-stack-one-column-mode")){e=1.8}a.find(".big-number").find(".formatted-number").fitText(e);a.find(".summary-numbers").find(".formatted-number").fitText(e-.65);a.find(".summary-numbers").find(".line .label").fitText(e-.2);a.find(".big-number").find(".label").fitText(e-.2)},animateNumbers:function(a){a=a||$("body");a.find(".multiple-numbers, .summary-numbers, .big-number").find(".formatted-number").each((function(){var a=$(this);var e=a.data("precision");var t=a.children(".number");var r=a.children(".suffix").text();jQuery({Counter:0}).animate({Counter:t.text()},{duration:800,easing:"swing",step:function(){t.text(this.Counter.toFixed(e))+r}})}))},setEditMode:function(a){Dashboard.edit_mode=typeof a=="undefined"?true:a;var e=$(Dashboard.elem_id+" .toolbar .fa-edit");e.toggleClass("active",a);Dashboard.element.toggleClass("edit-mode",a);Dashboard.grid.setStatic(!a);sortable(".filters",a?"enable":"disable");if(!Dashboard.edit_mode){var t=$(".grid-stack-item.dirty");if(t.length>0){Dashboard.saveDashboard(true)}}},toggleFullscreenMode:function(a){var e=!a.hasClass("active");Dashboard.element.toggleClass("fullscreen").find(".night-mode").toggle(e);a.toggleClass("active");if(e){Dashboard.setEditMode(false)}if(e){GoInFullscreen(Dashboard.elem_dom)}else{GoOutFullscreen()}},disableFullscreenMode:function(){Dashboard.element.removeClass("fullscreen").find(".night-mode").hide().end().find(".toggle-fullscreen").removeClass("active");GoOutFullscreen()},clone:function(){$.post({url:CFG_GLPI.root_doc+"/ajax/dashboard.php",data:{dashboard:Dashboard.current_name,action:"clone_dashboard"},dataType:"json"}).done((function(a){Dashboard.addNewDashbardInSelect(a.title,a.key)}))},delete:function(){var a=__("Are you sure you want to delete the dashboard %s ?").replace("%s",Dashboard.current_name);if(window.confirm(a,__("Delete this dashboard"))){$.post({url:CFG_GLPI.root_doc+"/ajax/dashboard.php",data:{action:"delete_dashboard",dashboard:Dashboard.current_name}}).done((function(){$("#dashboard-"+Dashboard.rand+" .toolbar .dashboard_select").find("option[value='"+Dashboard.current_name+"']").remove().end().prop("selectedIndex",0).trigger("change")}))}},addForm:function(){$(".ui-dialog-content").dialog("close");$('<div title="'+__("Add a new dashboard")+'"></div>').load(CFG_GLPI.root_doc+"/ajax/dashboard.php",{action:"add_new"},(function(){$(this).dialog({width:"auto",modal:true,open:function(){$(this).find("input").first().focus()}})}))},addNew:function(a){$.post({url:CFG_GLPI.root_doc+"/ajax/dashboard.php",data:{action:"save_new_dashboard",title:a.title,context:Dashboard.context}}).done((function(e){Dashboard.addNewDashbardInSelect(a.title,e);Dashboard.setEditMode(true)}))},addNewDashbardInSelect:function(a,e){var t=new Option(a,e,false,true);$("#dashboard-"+Dashboard.rand+" .toolbar .dashboard_select").append(t).trigger("change")},getCardsAjax:function(a){a=a||"";var e=[];$(".grid-stack-item:not(.lock-bottom)"+a).each((function(){var t=$(this);var r=t.data("card-options");var d=t.data("gs-id");var i=r.card_id||t.data("gs-id");r.gridstack_id=d;if("markdown_content"in r){Dashboard.markdown_contents[d]=r.markdown_content}var o=Dashboard.getFiltersFromStorage();r.apply_filters=o;e.push($.get(CFG_GLPI.root_doc+"/ajax/dashboard.php",{action:"get_card",dashboard:Dashboard.current_name,card_id:i,force:a.length>0?1:0,embed:Dashboard.embed?1:0,args:r,cache_key:Dashboard.cache_key}).then((function(a){t.children(".grid-stack-item-content").html(a);Dashboard.fitNumbers(t);Dashboard.animateNumbers(t)})).fail((function(){t.html("<div class='empty-card card-error'><i class='fas fa-exclamation-triangle'></i></div>")})))}));return e},easter:function(){var a=$(Dashboard.elem_id+" .grid-stack .grid-stack-item .card");setInterval((function(){var e="#"+((1<<24)*Math.random()|0).toString(16);var t=Math.floor(Math.random()*a.length)+1;var r=a[t];$(r).css("background-color",e)}),10)},generateCss:function(){var a=Math.floor(this.element.width());var e=a/this.cols;var t=e;var r=a/this.cols+this.cell_margin;var d=100/this.cols;var i=" "+this.elem_id+" .cell-add { width: "+e+"px; height: "+r+"px; } "+this.elem_id+" .grid-guide { background-size: "+e+"px "+r+"px; bottom: "+r+"px; }";for(var o=0;o<this.cols;o++){var s=o*d;var n=(o+1)*d;i+=this.elem_id+" .grid-stack > .grid-stack-item[data-gs-x='"+o+"'] { left: "+s+"%; } "+this.elem_id+" .grid-stack > .grid-stack-item[data-gs-width='"+(o+1)+"'] { min-width: "+d+"%; width: "+n+"%; }"}$("#gs_inline_css_"+this.rand).remove();if(a>700){$("<style id='gs_inline_css_"+this.rand+"'></style>").prop("type","text/css").html(i).appendTo("head")}else{t=60}this.grid.cellHeight(t)},initFilters:function(){if($(".filters").length===0){return}var a=Dashboard.getFiltersFromStorage();$.each(a,(function(e,t){if(Array.isArray(t)&&t.length==0){a[e]=""}}));$.get({url:CFG_GLPI.root_doc+"/ajax/dashboard.php",data:{action:"get_dashboard_filters",filters:a}}).done((function(a){$(".filters").html(a);$(document).trigger("glpiDasbhoardInitFilter");sortable(".filters",{placeholderClass:"filter-placeholder"})[0].addEventListener("sortupdate",(function(a){var e=$(a.detail.destination.items).filter(".filter");var t=Dashboard.getFiltersFromStorage();var r={};$.each(e,(function(){var a=$(this).data("filter-id");r[a]=t[a]}));Dashboard.setFiltersInStorage(r)}));sortable(".filters","disable")}))},getFiltersFromStorage:function(a){a=a||false;var e=JSON.parse(localStorage.getItem("glpi_dashboard_filters"));var t=false;if(e==null){e={};t=true}if("current_name"in Dashboard&&Dashboard.current_name!=null&&!(Dashboard.current_name in e)){e[Dashboard.current_name]={};t=true}if(t){localStorage.setItem("glpi_dashboard_filters",JSON.stringify(e))}if(a){return e}return e[Dashboard.current_name]},setFiltersInStorage:function(a){var e=Dashboard.getFiltersFromStorage(true);if(Dashboard.current_name.length>0){e[Dashboard.current_name]=a}return localStorage.setItem("glpi_dashboard_filters",JSON.stringify(e))}}; |