Ext.namespace("Kalitte", "Kalitte.Dashboards.API"); var nVer = navigator.appVersion; var nAgt = navigator.userAgent; var browserName = ''; var fullVersion = 0; var majorVersion = 0; var isAttached = false; var InAjaxCall = false; var WidgetAutoRefreshList = new Array(); var editorUrl = '/Pages/WidgetEditor.aspx'; var msg_Refreshing = 'Güncelleniyor ...'; var msg_Applying = 'Uygulanıyor ...'; var msg_LoadingEditor = 'Editör yükleniyor ...'; var msg_EditTitle = 'Başlığı düzenlemek için tıklayın'; var msg_CloseWidgetQuestion = 'Kapat ?'; var msg_Loading = 'Yükleniyor ...'; if ((verOffset = nAgt.indexOf("MSIE")) != -1) { browserName = "Microsoft Internet Explorer"; fullVersion = parseFloat(nAgt.substring(verOffset + 5)); majorVersion = parseInt('' + fullVersion); } else if ((verOffset = nAgt.indexOf("Opera")) != -1) { browserName = "Opera"; fullVersion = parseFloat(nAgt.substring(verOffset + 6)); majorVersion = parseInt('' + fullVersion); } else if ((verOffset = nAgt.indexOf("Firefox")) != -1) { browserName = "Firefox"; fullVersion = parseFloat(nAgt.substring(verOffset + 8)); majorVersion = parseInt('' + fullVersion); } else if ((nameOffset = nAgt.lastIndexOf(' ') + 1) < (verOffset = nAgt.lastIndexOf('/'))) { browserName = nAgt.substring(nameOffset, verOffset); fullVersion = parseFloat(nAgt.substring(verOffset + 1)); if (!isNaN(fullVersion)) majorVersion = parseInt('' + fullVersion); else { fullVersion = 0; majorVersion = 0; } } if (browserName.toLowerCase() == browserName.toUpperCase() || fullVersion == 0 || majorVersion == 0) { browserName = navigator.appName; fullVersion = parseFloat(nVer); majorVersion = parseInt(nVer); } if (browserName != "Microsoft Internet Explorer") { HTMLAnchorElement.prototype.click = function() { var evt = window.document.createEvent('MouseEvents'); evt.initMouseEvent('click', true, true, this.ownerDocument.defaultView, 1, 0, 0, 0, 0, false, false, false, false, 0, null); this.dispatchEvent(evt); } } Kalitte.Dashboards.API.showWidgetHeaders = function(props) { var portal = Ext.getCmp(props["dashboardId"]); for (var col = 0; col < portal.items.items.length; col++) for (var p = 0; p < portal.items.items[col].items.items.length; p++) { var portlet = portal.items.items[col].items.items[p]; if (portlet.header) portlet.header.show(); } } Kalitte.Dashboards.API.hideWidgetHeaders = function(props) { var portal = Ext.getCmp(props["dashboardId"]); for (var col = 0; col < portal.items.items.length; col++) for (var p = 0; p < portal.items.items[col].items.items.length; p++) { var portlet = portal.items.items[col].items.items[p]; if (portlet.header && portlet.header != false) portlet.header.hide(); } } function doAjaxClick(e) { var el = document.getElementById(e); var postId = e.replace(/_/g, '$'); if (el && browserName != "Firefox") el.click(); else __doPostBack(postId, ''); } function editorWindow(e, props) { var pageUrl = editorUrl + "?ID=" + props['instanceId'] + "&R=" + Math.random() * 100; var handler = props["editorHandle"]; if (handler) { props["editorUrl"] = pageUrl; handler(props); } else { win = new Ext.Window( { layout: 'fit', width: props.commandArg['width'], height: props.commandArg['height'], closeAction: 'hide', plain: true, modal: true, title: props.commandArg['title'], maximizable: true, autoLoad: { showMask: msg_LoadingEditor ? true : false, url: pageUrl, mode: 'iframe', maskMsg: msg_LoadingEditor } }); win.on("maximize", function(el) { var v = Ext.getBody().getViewSize(); el.setSize(v.width, v.height); }); win.on("beforeshow", function(el) { el.alignTo(Ext.getBody(), "c-c"); }); win.on("beforehide", function(el) { EnableAutoRefresh(props['widgetId']); var iFrame = win.body.first(); delete (iFrame); window.EditorWindow = null; }); win.Props = props; window.EditorWindow = win; window.EditorWindow.show(); }; } function AutoRefreshData(key, timerId, props) { this.key = key; this.data = new Object(); this.data.timerId = timerId; this.data.props = props; } function GetAutoRefreshIndex(key) { var index = -1; for (var i = 0; i < WidgetAutoRefreshList.length; i++) if (WidgetAutoRefreshList[i] != null && WidgetAutoRefreshList[i].key == key) { index = i; break; } return index; } function RemoveAutoRefresh(index) { if (WidgetAutoRefreshList[index] == null) return; clearInterval(WidgetAutoRefreshList[index].data.timerId); WidgetAutoRefreshList[index] = null; } function ClearAllAutoRefresh() { for (var i = 0; i < WidgetAutoRefreshList.length; i++) RemoveAutoRefresh(i); WidgetAutoRefreshList = new Array(); } function DisableAutoRefresh(key) { var index = GetAutoRefreshIndex(key); if (index >= 0) WidgetAutoRefreshList[index].enabled = false; } function EnableAutoRefresh(key) { var index = GetAutoRefreshIndex(key); if (index >= 0) WidgetAutoRefreshList[index].enabled = true; } function AutoRefreshEnabled(key) { var index = GetAutoRefreshIndex(key); if (index >= 0) return WidgetAutoRefreshList[index].enabled = !false; else return false; } function CreateAutoRefresh(props) { var key = props["widgetId"]; var handler = function() { AutoRefreshHandler(key, props); }; var index = GetAutoRefreshIndex(key); var interval = props["interval"]; if (index >= 0) { if (interval <= 0) RemoveAutoRefresh(index); else if (interval != WidgetAutoRefreshList[index].data.props["interval"]) { RemoveAutoRefresh(index); if (interval > 0) { var timerId = setInterval(handler, interval); var obj = new AutoRefreshData(key, timerId, props); WidgetAutoRefreshList.push(obj); } } } else if (interval > 0) { var timerId = setInterval(handler, interval); var obj = new AutoRefreshData(key, timerId, props); WidgetAutoRefreshList.push(obj); } } function AutoRefreshHandler(key, props) { props['commandName'] = 'refresh'; if (InAjaxCall) { var func = function() { AutoRefreshHandler(key, props); }; setTimeout(func, 1000); } else if (AutoRefreshEnabled(key) && window.EditorWindow == null) { try { DisableAutoRefresh(key); props['autoRefreshCall'] = true; doWidgetCmd(null, props); } finally { EnableAutoRefresh(key); } } } function CommandData(commandName, arguments, argumentsSerialized) { this.CommandName = commandName; this.Arguments = arguments; } function menuItemCheckHandler(e, props, checked, serverHandler) { props.commandArg["checked"] = checked; serverHandler(e, props); } function doHostCommand(e, props) { var controller = props['hostId'] + "_Controller"; var commandName = props['commandName']; var target = document.getElementById(props['hostId']); var commandData = null; switch (commandName) { case 'close': { if (props.commandArg["confirmClose"] == true) { Ext.MessageBox.confirm('Confirm', msg_CloseWidgetQuestion, function(e) { if (e == "yes") { var w = Ext.getCmp(props.commandArg['widgetId']); commandData = new CommandData('closeDone', { widgetId: w.id }); doServerCommand(controller, props['hostId'] + '_Command', commandData); w.hide(); } }); } else { var w = Ext.getCmp(props.commandArg['widgetId']); commandData = new CommandData('closeDone', { widgetId: w.id }); doServerCommand(controller, props['hostId'] + '_Command', commandData); w.hide(); } break; } case 'drag': { commandData = new CommandData('dragDone', { widgetId: e.panel.id, columnIndex: e.columnIndex, position: e.position }); doServerCommand(controller, props['hostId'] + '_Command', commandData); break; } default: { commandData = new CommandData(commandName, props.commandArg); doServerCommand(controller, props['hostId'] + '_Command', commandData); break; } } } function doWidgetCmd(e, props) { var commandField = document.getElementById(props['widgetId'] + 'Command'); var controller = props['widgetId'] + "Controller"; var widget = Ext.getCmp(props['widgetId']); var target = widget.el.dom; var commandData = null; var commandName = props['commandName']; var msg = msg_Loading; switch (commandName) { case 'refresh': { commandData = new CommandData(commandName, props.commandArg); msg = msg_Refreshing; break; } case 'edit': { props['target'] = target; editorWindow(e, props); break; } case 'collapse': { commandData = new CommandData(commandName, props.commandArg); msg = ''; break; } case 'expand': { commandData = new CommandData(commandName, props.commandArg); msg = ''; break; } default: { commandData = new CommandData(commandName, props.commandArg); break; } } if (commandData != null) { doServerCommand(controller, props['widgetId'] + 'Command', commandData, target, msg); } } function doServerCommand(controllerFieldName, commandFieldName, commandData, target, msg) { var commandField = document.getElementById(commandFieldName); commandField.value = Ext.encode(commandData); if (msg != '' && msg != null) { setLoadMask(target, msg); } doAjaxClick(controllerFieldName); } function setLoadMask(target, msg) { if (isAttached) { var mask = new Ext.LoadMask(target); mask.msg = msg; if (window.widgetMask != null) window.widgetMask.hide(); window.widgetMask = mask; } } function changeWidgetTitle(e, props) { Ext.MessageBox.prompt('Update', 'Widget Title:', function(btn, text) { if (btn == "ok" && e.innerText != text && text != "") { var controller = props['widgetId'] + "Controller"; var commandField = props['widgetId'] + "Command"; e.innerText = text; e.innerHTML = text; doServerCommand(controller, commandField, new CommandData('changeTitle', { title: text }), null, null); } }); } function setWidgetBeforeRender(e, props) { if (!props) return; var widget = e; if (!widget) widget = Ext.getCmp(props['widgetId']); if (!widget) return; for (var key in props) { switch (key) { case "title": { widget.setTitle(props[key]); break; } case "dragable": { widget.draggable = props[key]; break; } case "bodyBorder": { widget.bodyBorder = props[key]; break; } case "border": { widget.border = props[key]; break; } } } } function widgetTitleClicked(e) { if (!e) var e = window.event; if (e != null) { var sp = e.target || e.srcElement; changeWidgetTitle(sp, { widgetId: sp.widgetId }); } } function XBrowserAddHandler(target, eventName, handlerName) { if (target.addEventListener) target.addEventListener(eventName, handlerName, false); else if (target.attachEvent) target.attachEvent("on" + eventName, handlerName); else target["on" + eventName] = handlerName; } function setWidgetAfterRender(ref, e, props) { if (props["readonly"] == false && e.header && props["titleEditable"] == true) { var sp = e.el.dom.getElementsByTagName('span')[0]; sp.style.cursor = "pointer"; sp.title = msg_EditTitle; sp.onclick = widgetTitleClicked; sp.widgetId = props["widgetId"]; } if (props["bodyHeight"] >= 0) { ref.body.setHeight(props["bodyHeight"]); } if (props['bodyCls'] != '') ref.body.addClass(props["bodyCls"]); if (ref.header != false) { if (props['headerCls'] != '') ref.header.addClass(props["headerCls"]); if (props['autoHideHeader'] == 1) { if (ref.collapsed == false) ref.header.setDisplayed('none'); ref.el.dom.__owner = ref; if (browserName == "Microsoft Internet Explorer") { XBrowserAddHandler(ref.el.dom, "mouseenter", function() { widgetMouseEnter(ref) }); XBrowserAddHandler(ref.el.dom, "mouseleave", function() { widgetMouseLeave(ref) }); } else { XBrowserAddHandler(ref.el.dom, "mouseover", function() { widgetMouseEnter(ref) }); XBrowserAddHandler(ref.el.dom, "mouseout", function() { widgetMouseLeave(ref) }); } } } } function doMouseEnterLeaveOnWidget(widget, enter) { if (!widget || widget.header == false) return; var style = enter ? 'block' : 'none'; if (!widget.collapsed && widget.header.dom.style.display != style) { widget.header.setDisplayed(style); } } var widgetMouseEnter = function(w, e) { doMouseEnterLeaveOnWidget(w, true); } var widgetMouseLeave = function(w, e) { doMouseEnterLeaveOnWidget(w, false); } function getninMouseOverWidget(e) { if (!e) var e = window.event; var tg = (window.event) ? e.srcElement : e.target; var dom = null; while (typeof (tg.parentElement) != "undefined" && typeof (tg.__owner) == "undefined") { tg = tg.parentElement; } if (typeof (tg.__owner) != "undefined") return tg.__owner; else return null; } var widgetBodyResize = function(params, width, iheight, e) { var wId = params['widgetId']; var widget = Ext.getCmp(wId); var controller = wId + "Controller"; var commandField = wId + "Command"; if (params['save']) doServerCommand(controller, commandField, new CommandData('resize', { height: iheight }), null, null); widget.body.setHeight(iheight); }; function onActivatePortalTab(a, b) { var p = Ext.getCmp(b); if (p) p.doLayout(); } function WidgetDropInfo(instance, columnIndex, position, widgetInstance) { this.dashboardInstance = instance; this.columnIndex = columnIndex; this.position = position; this.widgetInstance = widgetInstance.substring(widgetInstance.length - 32); } function validateWidgetDrop(e, instance, handler) { var dropInfo = new WidgetDropInfo(instance, e.columnIndex, e.position, e.data.panel.id); if (handler && !handler(dropInfo)) { e.status = false; } return e.status; } function setTabProperties(tab, p) { tab.setTitle(p['title']); tab.on('activate', function() { tab.ownerCt.doLayout(); tab.doLayout(); }, this); tab.on('close', function() { if (!tab.userClose) { var index = 0; for (i = 0; i < tab.ownerCt.items.items.length; i++) { if (tab == tab.ownerCt.items.items[i]) { break; } index++; } doServerCommand(p['clientId'] + '_Controller', p['clientId'] + '_Command', new CommandData("closeTab", { tabIndex: index })); } }, this); } function getTab(tabPanel, p) { var tab = tabPanel.getComponent(p['url']); return tab; } function addTab(tabPanel, p, activate) { var tab = tabPanel.getComponent(p['url']); if (!tab) { tab = tabPanel.add({ id: p['url'], closeAction: 'close', closable: p['closable'], iconCls: p['icon'], bodyStyle: p['bodyStyle'], bodyBorder: p['bodyBorder'], border: p['border'], autoLoad: { showMask: p['showMask'], url: p['url'], mode: 'iframe', maskMsg: p['maskMsg'], scripts: true } }); } if (activate) tabPanel.setActiveTab(tab); } function updateTab(tabPanel, p, id) { var tab = tabPanel.getComponent(id); if (tab != null) setTabProperties(tab, p); } function activateTab(tabPanel, index) { var tab = tabPanel.setActiveTab(index); } function closeTab(tabPanel, id) { var tab = tabPanel.getComponent(id); if (tab) { tab.userClose = true; tabPanel.closeTab(tab); } } function refreshTab(tabPanel, id) { var tab = tabPanel.getComponent(id); if (tab) tab.autoLoad.refresh(); } function BeginRequestHandler(sender, args) { InAjaxCall = true; if (window.widgetMask) window.widgetMask.show(); } function EndRequestHandler(sender, args) { InAjaxCall = false; if (window.widgetMask) { window.widgetMask.hide(); window.widgetMask = null; } } function attachWidgetHandlers() { Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(BeginRequestHandler); Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler); isAttached = true; }