/** * sets up all listeners * @constructor Home */ var Home = (function (home) { 'use strict'; var ns = home; // The initialize function must be run to activate elements ns.initialize = function (reason) { // enable premium features if (Process.control.sankey.premium) { DomUtils.hide(Process.control.buttons.export, false); } // this will be activated in a future version // perhaps in a premium version Process.control.buttons.export.addEventListener('click' , function () { // export a drive file DomUtils.hide('spinner', false); Process.control.buttons.export = true; var drapp = "Driv" + "eApp"; var current = Process.control.watching.watcher.getCurrent(); if (current) { var pack = { options:Process.control.watching.watcher.getCurrent(), dataSource:current.dataSource, data:current.data }; try { var file = drapp.createFile('x', JSON.stringify(pack)); App.toast("Chart data exported", file.getName() + "(" + file.getName() + ")"); } catch(err) { App.showNotification ("Error exporting file",err); } } DomUtils.hide('spinner', true); Process.control.buttons.export.disabled = false; }); Process.control.buttons.generate.addEventListener('click',function () { // spin the cursor DomUtils.hide ('spinner',false); // disable the button Process.control.buttons.generate.disabled = true; Provoke.run("Server","generateTestData",Process.control.sankey.testData) .then (function (result) { App.toast ("Sample data generated","You can delete this sheet at any time"); finallyPromise(); }) ['catch'](function (err) { App.showNotification ("Failed to generate sample data", err); finallyPromise(); }); function finallyPromise () { DomUtils.hide ('spinner', true); Process.control.buttons.generate.disabled = false; } }); // insert in sheet Process.control.buttons.insert.addEventListener('click', function () { try { Client.insertImage ( CanvasConvert.svgToPng (Process.control.code.svg.value)); } catch (err) { App.showNotification ('Error converting image to PNG format', err); } }); // if the close button exists then do it. if (Process.control.buttons.close) { Process.control.buttons.close.addEventListener('click', function () { google.script.host.close(); }); } // watch out for exiting the tab var toggles = document.querySelectorAll('[data-mui-controls="' + Process.control.tabs.settings.id + '"]'); toggles[0].addEventListener ('mui.tabs.hidestart',function () { if (Process.applyElementer()) { // this would have returned true if any changes happened Process.drawChart(); }; }); // which settings to use var elementer = Process.control.sankey.elementer; var elems = elementer.getElements(); // this is about applying different settings Process.control.buttons.apply.addEventListener('click', function () { // just use the current settings Process.control.buttons.apply.disabled=true; Object.keys(Process.control.sankey.store).forEach(function(d) { try { if (elems.controls[d] && elems.controls[d].checked) { elementer.applySettings(Process.control.sankey.store[d]); // make default values visible for height/width if(!parseInt(elems.controls.previewHeight.value,10)){ elems.controls.previewHeight.value = Process.control.chart.defOptions.height; } if(!parseInt(elems.controls.previewWidth.value,10)){ elems.controls.previewWidth.value = Process.control.chart.defOptions.width; } Sankey.mapSettings(elementer); Process.drawChart(); App.toast ("Settings restored", "Your chart has been reformatted"); } } catch (err) { App.showNotification ("Control element error detected on settings " + d, err); } }); }); // this is about enabling the apply button if anything different is selected var buts = ['apply','manage']; ['use-group','manage-group'].forEach (function (g,i) { DomUtils.getGroup (g).forEach(function(d) { d.addEventListener('change', function () { Process.control.buttons[buts[i]].disabled=false; }); }); }); // this is an apply button // since they have already been applied then Apply = dont reset when exiting the settings page Process.control.buttons.reset.forEach(function(d) { d.addEventListener('click',function() { Process.control.sankey.store.reset[d.id.match(/resetButton_(\w+)-elem/)[1]] = null; d.disabled = true; }); }); //this us about saving and clearing settings in property stores Process.control.buttons.manage.addEventListener('click', function () { // get all the elements Process.control.buttons.manage.disabled=true; var elementer = Process.control.sankey.elementer; var elems = elementer.getElements(); var current = elementer.getCurrent(); if (elems.controls.makePermanent.checked) { Provoke.run('Props','setDocument', elementer.getCurrent()) .then (function (result) { Process.control.sankey.store.useDocument = current; elems.controls.useDocument.disabled = false; App.toast ("Settings saved", "Current settings will be applied to all charts in this document in future"); }) ['catch'](function(err) { App.showNotification("Error setting document properties",err); }); } else if (elems.controls.makeDefault.checked) { // write to user user properties Provoke.run('Props','setUser', elementer.getCurrent()) .then (function (result) { Process.control.sankey.store.useUser = current; elems.controls.useUser.disabled = false; App.toast ("Settings saved", "Current settings will be used as default for all your charts in documents without their own settings"); }) ['catch'](function(err) { App.showNotification("Error setting user properties",err); }); } else if (elems.controls.clearPermanent.checked) { // remove perm settings from document, user properties and apply factory values Provoke.run ('Props', 'removeDocument') .then(function (result) { Process.control.sankey.store.useDocument = null; elems.controls.useDocument.disabled = true; App.toast ("Settings cleared", "Document settings have been removed"); }) ['catch'](function(err) { App.showNotification("Error removing documentproperties",err); }); } else if (elems.controls.clearDefault.checked) { // remove perm settings from document, user properties and apply factory values Provoke.run ('Props', 'removeUser') .then(function (result) { Process.control.sankey.store.useUser = null; elems.controls.useUser.disabled = true; App.toast ("Settings cleared", "Your default settings have been removed"); }) ['catch'](function(err) { App.showNotification("Error removing user properties",err); }); } else { App.showNotification ("radio group has nothing checked ","manage-group"); } }); // drop downs for field names Object.keys(Process.control.activeHeadings).forEach (function (k) { Process.control.activeHeadings[k].elem.addEventListener ('change' , function () { Process.selectFields(); Process.drawChart(true); }); },false); // type of input data radio buttons ['selectedRange','wholeSheet'].forEach (function (d) { Process.control.buttons[d].addEventListener ('change' , function () { // change the polling scope if (Process.control.buttons[d].checked) { Process.control.watching.watcher.getWatching().domain.scope = d === "selectedRange" ? "Active" : "Sheet"; } Process.selectFields(); Process.drawChart(true); }); },false); }; return home; })(Home || {});