define([ "dojo/_base/declare", "dojo/on", "dojo/query", "dojo/dom-construct", "dijit/_WidgetBase", "dijit/_TemplatedMixin", "dojo/text!./templates/Reports.html", "./_reportDialog" ], function (declare, on, query, domConstruct, _WidgetBase, _TemplatedMixin, template, _reportDialog) { return declare("app.widgets.Reports", [_WidgetBase, _TemplatedMixin], { templateString: template, map: null, config: null, reportDialogs: {}, postCreate: function () { this.inherited(arguments); this.initReportLinks(this.config); this._attachEventHandlers(); }, _attachEventHandlers: function () { var self = this; this.own( query("a", this.domNode).on("click", function(e) { e.preventDefault(); var reportType = this.getAttribute("data-report-type"); if(reportType) self.showReport(reportType); }) ); }, initReportLinks: function(config) { if(!config||!config.reports) return; for(var i = 0; i < config.reports.length; i++) { this._createLink(config.reports[i]); } }, _createLink: function(reportObj) { if(!reportObj) return; var li = domConstruct.create("li"); var a = domConstruct.create("a", { href: "#", title: reportObj.type || "", }, li); a.setAttribute("data-report-type", reportObj.type); var aText = document.createTextNode(reportObj.type); a.appendChild(aText); var iconSpan = domConstruct.create("span", { "class": "icon fa fa-chevron-right" }, a); this.LinksNode.appendChild(li); this.reportDialogs[reportObj.type] = { config: reportObj, dialog: null }; }, showReport: function(type) { if(!type) return; var reportDialog = this.reportDialogs[type]; if(reportDialog && !reportDialog.dialog) { reportDialog.dialog = new _reportDialog({config: reportDialog.config}); } reportDialog.dialog.show(); } }); });