/** * Created by aghassaei on 1/7/15. */ define(['jquery', 'underscore', 'backbone', 'fileSaver', 'navViewMenu', 'appState', 'plist'], function($, _, Backbone, fileSaver, NavViewMenu, appState, plist){ return Backbone.View.extend({ el: "body", events: { "click #showHideMenu": "_setMenuVisibility", "click .menuHoverControls": "_setNavSelection", "shown.bs.modal .modal": "_showModal", "hide.bs.modal .modal": "_hideModal", "click .saveJSON": "_save", "click .saveAsJSON": "_saveAs", // "change #saveAsFileName": "_saveAs",//detect enter key "click #exportSTL": "_saveSTL", "click .importJSON": "_importJSON", "change #jsonInput": "_selectJSONFiles", "click .jsonFile": "_loadJSON", "click #viewMenuDropdown": "_renderViewMenu", "click #videoRendering": "_videoRenderingSetup" }, initialize: function(){ this.viewMenu = new NavViewMenu({model:this.model}); _.bindAll(this, "_setMenuVisibility", "_setNavSelection"); this.listenTo(this.model, "change:currentNav", this._updateNavSelectionUI); this._logo(); this._updateNavSelectionUI(); }, _setMenuVisibility: function(e){ e.preventDefault(); var state = this.model.get("menuIsVisible"); this.model.set("menuIsVisible", !state); $(e.target).blur(); }, _setNavSelection: function(e){ var navSelection = $(e.target).data("menuId"); if (navSelection == "about") { $(e.target).blur(); return; } e.preventDefault(); if (navSelection == "navSim"){//choose which simulation package to pull up this.model.set("currentNav", appState.get("materialClass") + "NavSim"); return; } else if (navSelection == "navAssemble"){//choose which assembly package to pull up if (this.model.get("materialClass") == "dna") navSelection = "navDNAAssemble"; } if (navSelection) this.model.set("currentNav", navSelection); }, _updateNavSelectionUI: function(){ this._deselectAllNavItems(); var navSelection = this.model.get("currentNav"); if (plist.allMenus[navSelection].parent) navSelection = plist.allMenus[navSelection].parent; _.each($(".menuHoverControls"), function(link){ var $link = $(link); if ($link.data("menuId") == navSelection) $link.parent().addClass("open");//highlight }); }, _logo: function(){ var $logo = $("#logo"); $logo.mouseover(function(){ $logo.attr("src","assets/imgs/logo-active.png"); }); $logo.mouseout(function(){ $logo.attr("src","assets/imgs/logo.png"); }); }, _deselectAllNavItems: function(){ $(".open").removeClass("open");//no highlight }, _showModal: function(e){ var input = $(e.target).find("input.filename"); input.focus(); input.select(); }, _hideModal: function(e){ $(e.target).find("input.filename").blur(); }, _renderViewMenu: function(){ this.viewMenu.render(); }, _videoRenderingSetup: function(e){ e.preventDefault(); window.resizeTo(1000, 700);//todo this doesn't work }, _save: function(e){ e.preventDefault(); fileSaver.save(); }, _saveAs: function(e){ e.preventDefault(); var fileName = $("#saveAsFileName").val(); fileSaver.save(fileName); $('#saveAsModel').modal('hide'); }, _saveSTL: function(e){ e.preventDefault(); fileSaver.saveSTL(); }, _importJSON: function(e){ e.preventDefault(); $("#jsonInput").click(); }, _selectJSONFiles: function(e){ e.preventDefault(); var input = $(e.target), numFiles = input.get(0).files ? input.get(0).files.length : 1, label = input.val().replace(/\\/g, '/').replace(/.*\//, ''); this._readDataURL(numFiles, label, input.get(0).files); input.val(""); }, _readDataURL: function(numFiles, filename, files){ if (numFiles>1) console.warn("too many files selected"); var reader = new FileReader(); reader.readAsText(files[0]); reader.onload = (function() { return function(e) { var extension = filename.substr(filename.length - 5); if (extension == ".json"){ fileSaver.loadFile(JSON.parse(e.target.result)); } else console.warn("file type not recognized"); } })(); }, _loadJSON: function(e){ e.preventDefault(); var url = "data/" + $(e.target).data("file"); $.getJSON( url, function(data) { fileSaver.loadFile(data); }); } }); });