From 73c5b8291fc5eec3eac1b92361695e9e148dd798 Mon Sep 17 00:00:00 2001
From: Amanda Ghassaei <amandaghassaei@gmail.com>
Date: Sat, 7 Mar 2015 12:12:30 -0500
Subject: [PATCH] save as modal

---
 css/main.css          |  1 -
 js/menus/Navbar.js    | 13 ++++++++++---
 js/models/AppState.js |  6 ++----
 js/models/Lattice.js  |  5 +++--
 main.html             | 23 +++++++++++++++++++++--
 5 files changed, 36 insertions(+), 12 deletions(-)

diff --git a/css/main.css b/css/main.css
index 24b0d487..f912b18d 100644
--- a/css/main.css
+++ b/css/main.css
@@ -145,4 +145,3 @@ hr {
   border-color: #888 -moz-use-text-color #888;
 }
 
-
diff --git a/js/menus/Navbar.js b/js/menus/Navbar.js
index adbaae9c..203c1be5 100644
--- a/js/menus/Navbar.js
+++ b/js/menus/Navbar.js
@@ -8,12 +8,13 @@
 
 NavBar = Backbone.View.extend({
 
-    el: "#globalNav",
+    el: "body",
 
     events: {
         "click #showHideMenu":                          "_setMenuVis",
         "click .menuHoverControls":                     "_setNavSelection",
-        "click #saveAsJSON":                                "_saveAs",
+        "click #saveJSON":                              "_save",
+        "click #saveAsJSON":                            "_saveAs",
         "click #importJSON":                            "_importJSON",
         "change #jsonInput":                            "_selectJSONFiles",
     },
@@ -90,11 +91,17 @@ NavBar = Backbone.View.extend({
         })();
     },
 
-    _saveAs: function(e){
+    _save: function(e){
         e.preventDefault();
         dmaGlobals.lattice.saveAsJSON();
     },
 
+    _saveAs: function(e){
+        e.preventDefault();
+        var fileName = $("#saveAsFileName").val();
+        dmaGlobals.lattice.saveAsJSON(fileName);
+    },
+
     _uiStuff: function(){
         var $logo = $("#logo");
         $logo.mouseover(function(){
diff --git a/js/models/AppState.js b/js/models/AppState.js
index 61830789..60b3f1bd 100644
--- a/js/models/AppState.js
+++ b/js/models/AppState.js
@@ -114,11 +114,9 @@ AppState = Backbone.Model.extend({
 //        console.log(e.keyCode);
         switch(e.keyCode){
             case 16://shift
-                e.preventDefault();
                 this.set("shift", state);
                 break;
             case 68://d delete mode
-                e.preventDefault();
                 if (this.get("cellMode") == "cell") this.set("deleteMode", state);//only for cell mode
                 else this.set("deleteMode", false);
                 break;
@@ -135,14 +133,14 @@ AppState = Backbone.Model.extend({
                 this.lattice.set("inverseMode", !this.lattice.get("inverseMode"));
                 break;
             case 83://s save
-                e.preventDefault();
                 if (e.ctrlKey || e.metaKey){//command
+                    e.preventDefault();
                     dmaGlobals.lattice.saveAsJSON();
                 }
                 break;
             case 79://o open
-                e.preventDefault();
                 if (e.ctrlKey || e.metaKey){//command
+                    e.preventDefault();
                     $("#jsonInput").click();
                 }
                 break;
diff --git a/js/models/Lattice.js b/js/models/Lattice.js
index 95c04a78..801b59aa 100644
--- a/js/models/Lattice.js
+++ b/js/models/Lattice.js
@@ -454,10 +454,11 @@ Lattice = Backbone.Model.extend({
         }
     },
 
-    saveAsJSON: function(){
+    saveAsJSON: function(name){
+        if (!name) name = "lattice";
         var data = JSON.stringify(_.omit(this.toJSON(), ["highlighter", "basePlane"]));
         var blob = new Blob([data], {type: "text/plain;charset=utf-8"});
-        saveAs(blob, "lattice.json");
+        saveAs(blob, name + ".json");
     },
 
     loadFromJSON: function(data){
diff --git a/main.html b/main.html
index fffec280..34886801 100644
--- a/main.html
+++ b/main.html
@@ -95,9 +95,10 @@
           <a href="#" class="dropdown-toggle" data-toggle="dropdown">File <b class="caret"></b></a>
           <span class="dropdown-arrow"></span>
           <ul class="dropdown-menu">
+            <li><a id="saveJSON" href="#">Save Lattice JSON</a></li>
+            <li><a data-toggle="modal" data-target="#saveAsModel" href="#">Save As...</a></li>
             <li><a id="importJSON" href="#">Import Lattice JSON</a></li>
-            <li><a id="saveAsJSON" href="#">Save Lattice JSON</a></li>
-            <li><a href="#">Something else here</a></li>
+            <li><a id="exportSTL" href="#">Export STL</a></li>
             <li class="divider"></li>
             <li><a href="#">Separated link</a></li>
           </ul>
@@ -113,6 +114,24 @@
 
 </nav>
 
+<div class="modal fade" id="saveAsModel" tabindex="-1" role="dialog" aria-labelledby="basicModal" aria-hidden="true">
+    <div class="modal-dialog modal-sm">
+        <div class="modal-content">
+            <div class="modal-header">
+            <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
+            <p class="modal-title" id="myModalLabel">Enter File Name</p>
+            </div>
+            <div class="modal-body">
+                <input id="saveAsFileName" type="text" value="lattice" placeholder="Enter file name" class="form-control">
+            </div>
+            <div class="modal-footer">
+                <button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
+                <button type="button" id="saveAsJSON" class="btn btn-primary">Save</button>
+            </div>
+        </div>
+    </div>
+</div>
+
 <div id="menuWrapper"><div id="menuHeader"></div><div id="menuContent"></div></div>
 
 <div id="about" class="row navMenu">
-- 
GitLab