1 /** 2 * Creates a new OpenDocumentView. This view shows a dialog from which the user 3 * can select a mind map from the local storage or a hard disk. 4 * 5 * @constructor 6 */ 7 mindmaps.OpenDocumentView = function() { 8 var self = this; 9 10 // create dialog 11 var $dialog = $("#template-open").tmpl().dialog({ 12 autoOpen : false, 13 modal : true, 14 zIndex : 5000, 15 width : 550, 16 close : function() { 17 $(this).dialog("destroy"); 18 $(this).remove(); 19 } 20 }); 21 22 $dialog.find("input").bind("change", function(e) { 23 if (self.openExernalFileClicked) { 24 self.openExernalFileClicked(e); 25 } 26 }); 27 28 var $table = $dialog.find(".localstorage-filelist"); 29 $table.delegate("a.title", "click", function() { 30 if (self.documentClicked) { 31 var t = $(this).tmplItem(); 32 self.documentClicked(t.data); 33 } 34 }).delegate("a.delete", "click", function() { 35 if (self.deleteDocumentClicked) { 36 var t = $(this).tmplItem(); 37 self.deleteDocumentClicked(t.data); 38 } 39 }); 40 41 /** 42 * Render list of documents in the local storage 43 * 44 * @param {mindmaps.Document[]} docs 45 */ 46 this.render = function(docs) { 47 // empty list and insert list of documents 48 var $list = $(".document-list", $dialog).empty(); 49 50 $("#template-open-table-item").tmpl(docs, { 51 format : function(date) { 52 var day = date.getDate(); 53 var month = date.getMonth() + 1; 54 var year = date.getFullYear(); 55 return day + "/" + month + "/" + year; 56 } 57 }).appendTo($list); 58 }; 59 60 /** 61 * Shows the dialog. 62 * 63 * @param {mindmaps.Document[]} docs 64 */ 65 this.showOpenDialog = function(docs) { 66 this.render(docs); 67 $dialog.dialog("open"); 68 }; 69 70 /** 71 * Hides the dialog. 72 */ 73 this.hideOpenDialog = function() { 74 $dialog.dialog("close"); 75 }; 76 }; 77 78 /** 79 * Creates a new OpenDocumentPresenter. The presenter can load documents from 80 * the local storage or hard disk. 81 * 82 * @constructor 83 * @param {mindmaps.EventBus} eventBus 84 * @param {mindmaps.MindMapModel} mindmapModel 85 * @param {mindmaps.OpenDocumentView} view 86 */ 87 mindmaps.OpenDocumentPresenter = function(eventBus, mindmapModel, view) { 88 89 // TODO experimental, catch errrs 90 // http://www.w3.org/TR/FileAPI/#dfn-filereader 91 /** 92 * View callback: external file has been selected. Try to read and parse a 93 * valid mindmaps Document. 94 * 95 * @ignore 96 */ 97 view.openExernalFileClicked = function(e) { 98 var files = e.target.files; 99 var file = files[0]; 100 101 var reader = new FileReader(); 102 reader.onload = function() { 103 var doc = mindmaps.Document.fromJSON(reader.result); 104 mindmapModel.setDocument(doc); 105 view.hideOpenDialog(); 106 }; 107 108 reader.readAsText(file); 109 }; 110 111 /** 112 * View callback: A document in the local storage list has been clicked. 113 * Load the document and close view. 114 * 115 * @ignore 116 * @param {mindmaps.Document} doc 117 */ 118 view.documentClicked = function(doc) { 119 mindmapModel.setDocument(doc); 120 view.hideOpenDialog(); 121 }; 122 123 /** 124 * View callback: The delete link the local storage list has been clicked. 125 * Delete the document, and render list again. 126 * 127 * @ignore 128 * @param {mindmaps.Document} doc 129 */ 130 view.deleteDocumentClicked = function(doc) { 131 // TODO event 132 mindmaps.LocalDocumentStorage.deleteDocument(doc); 133 134 // re-render view 135 var docs = mindmaps.LocalDocumentStorage.getDocuments(); 136 view.render(docs); 137 }; 138 139 /** 140 * Initialize. 141 */ 142 this.go = function() { 143 var docs = mindmaps.LocalDocumentStorage.getDocuments(); 144 docs.sort(mindmaps.Document.sortByModifiedDateDescending); 145 view.showOpenDialog(docs); 146 }; 147 };