/*global window kampfer console localStorage*/ kampfer.require('Class'); kampfer.require('JSON'); kampfer.require('BlobBuilder'); kampfer.require('saveAs'); kampfer.require('mindMap.Node'); kampfer.require('mindMap.Map'); kampfer.require('mindMap.MapManager'); kampfer.require('mindMap.MapsManager'); kampfer.require('mindMap.OpenMapDialog'); kampfer.require('mindMap.RenameMapDialog'); kampfer.provide('mindMap.command'); kampfer.provide('mindMap.map'); kampfer.provide('mindMap.mapManager'); kampfer.provide('mindMap.mapsManager'); kampfer.mindMap.map = null; kampfer.mindMap.mapManager = null; kampfer.mindMap.mapsManager = new kampfer.mindMap.MapsManager('mindMap'); kampfer.mindMap.command.Base = kampfer.Class.extend({ initializer : function() {}, execute : function() {}, unExecute : function() {}, needPush : false, dispose : function() {} }); kampfer.mindMap.command.CreateNewMap = kampfer.mindMap.command.Base.extend({ initializer : function(data, view) { this.data = data; this.view = view; }, execute : function() { kampfer.mindMap.mapManager = new kampfer.mindMap.MapManager(this.data); kampfer.mindMap.map = new kampfer.mindMap.Map(kampfer.mindMap.mapManager); this.view.addChild(kampfer.mindMap.map, true); }, dispose : function() { delete this.view; delete this.data; } }); kampfer.mindMap.command.CreateNewMap.isAvailable = function() { if(kampfer.mindMap.map || kampfer.mindMap.mapManager) { return false; } return true; }; kampfer.mindMap.command.CreateNewMap.shortcut = 'ctrl+m'; kampfer.mindMap.command.SaveMapInStorage = kampfer.mindMap.command.Base.extend({ initializer : function(data, view) { if(!kampfer.mindMap.command.OpenMapInStorage.renameMapDialog) { kampfer.mindMap.command.OpenMapInStorage.renameMapDialog = new kampfer.mindMap.RenameMapDialog(kampfer.mindMap.mapsManager, view); kampfer.events.addListener(kampfer.mindMap.command.OpenMapInStorage.renameMapDialog, 'ok', function(event, name) { kampfer.mindMap.mapManager.setMapName(name); document.title = name; var map = kampfer.mindMap.mapManager.getMapData(); kampfer.mindMap.mapsManager.saveMapToLocalStorage(map); kampfer.mindMap.mapManager._isModified = false; }); } }, execute : function() { if( !kampfer.mindMap.mapManager.getMapName() ) { kampfer.mindMap.command.OpenMapInStorage.renameMapDialog.show(); } else { var map = kampfer.mindMap.mapManager.getMapData(); kampfer.mindMap.mapManager._isModified = false; kampfer.mindMap.mapsManager.saveMapToLocalStorage(map); } } }); kampfer.mindMap.command.SaveMapInStorage.isAvailable = function() { if(kampfer.mindMap.map && kampfer.mindMap.mapManager) { return true; } return false; }; kampfer.mindMap.command.SaveMapInStorage.shortcut = 'ctrl+s'; kampfer.mindMap.command.SaveMapInDisk = kampfer.mindMap.command.Base.extend({ execute : function() { var content = JSON.stringify( kampfer.mindMap.mapManager.getMapData() ); var mapName = kampfer.mindMap.mapManager.getMapName(); //The standard W3C File API BlobBuilder interface is not available in all browsers. //BlobBuilder.js is a cross-browser BlobBuilder implementation that solves this. var bb = new kampfer.BlobBuilder(); bb.append(content); kampfer.saveAs( bb.getBlob('text/plain;charset=utf-8'), mapName + '.json' ); } }); kampfer.mindMap.command.SaveMapInDisk.isAvailable = kampfer.mindMap.command.SaveMapInStorage.isAvailable; kampfer.mindMap.command.SaveMapInDisk.shortcut = 'shift+ctrl+s'; kampfer.mindMap.command.OpenMapInDisk = kampfer.mindMap.command.Base.extend({ initializer : function(data, view) { if(!kampfer.mindMap.command.OpenMapInStorage.input) { var input = kampfer.mindMap.command.OpenMapInStorage.input = document.getElementById('mapJson'); kampfer.events.addListener(input, 'change', function(e){ if (window.File && window.FileReader && window.FileList && window.Blob) { var files = e.target.files; var onloadHandler = function(e) { var result = e.target.result; var data = JSON.parse(result); kampfer.mindMap.mapManager = new kampfer.mindMap.MapManager(data); kampfer.mindMap.map = new kampfer.mindMap.Map(kampfer.mindMap.mapManager); view.addChild(kampfer.mindMap.map, true); }; for(var i = 0, f; (f = files[i]); i++) { var reader = new FileReader(); reader.onload = onloadHandler; reader.readAsText(f); } } else { alert('html5 files api'); } }); } }, execute : function(data, view) { kampfer.events.dispatch(kampfer.mindMap.command.OpenMapInStorage.input, 'click'); } }); kampfer.mindMap.command.OpenMapInDisk.isAvailable = kampfer.mindMap.command.CreateNewMap.isAvailable; kampfer.mindMap.command.OpenMapInStorage = kampfer.mindMap.command.Base.extend({ initializer : function(data, view) { kampfer.mindMap.command.OpenMapInStorage.openMapDialog = new kampfer.OpenMapDialog(kampfer.mindMap.mapsManager, view); }, execute : function() { kampfer.mindMap.command.OpenMapInStorage.openMapDialog.show(); } }); kampfer.mindMap.command.OpenMapInStorage.isAvailable = kampfer.mindMap.command.CreateNewMap.isAvailable; kampfer.mindMap.command.CreateNewRootNode = kampfer.mindMap.command.Base.extend({ initializer : function(data) { var nodeData = kampfer.mindMap.mapManager.createNode(), window = kampfer.mindMap.map.getParent(); nodeData.offset.x = data.pageX + window.scrollLeft(); nodeData.offset.y = data.pageY + window.scrollTop(); this.nodeData = nodeData; }, execute : function() { var node = new kampfer.mindMap.Node(this.nodeData), parent; if(this.nodeData.parent) { parent = kampfer.mindMap.map.getChild(this.nodeData.parent); } else { parent = kampfer.mindMap.map; } kampfer.mindMap.mapManager.addNode(this.nodeData); parent.addChild(node, true); }, unExecute : function() { var parent; if(this.nodeData.parent) { parent = kampfer.mindMap.map.getChild(this.nodeData.parent); } else { parent = kampfer.mindMap.map; } parent.removeChild(this.nodeData.id, true); kampfer.mindMap.mapManager.deleteNode(this.nodeData.id); }, dispose : function() { delete this.nodeData; }, needPush : true }); kampfer.mindMap.command.CreateNewRootNode.isAvailable = function() { if(kampfer.mindMap.map) { return true; } return false; }; kampfer.mindMap.command.AppendChildNode = kampfer.mindMap.command.CreateNewRootNode.extend({ initializer : function() { var nodeData = kampfer.mindMap.mapManager.createNode(); nodeData.parent = kampfer.mindMap.map.currentNode.getId(); this.nodeData = nodeData; } }); kampfer.mindMap.command.AppendChildNode.isAvailable = function() { if(kampfer.mindMap.map.currentNode) { return true; } return false; }; kampfer.mindMap.command.DeleteNode = kampfer.mindMap.command.Base.extend({ initializer : function(data) { var id = kampfer.mindMap.map.currentNode.getId(); this.nodeData = kampfer.mindMap.mapManager.getNode(id); }, needPush : true, execute : function() { var parent; if(this.nodeData.parent) { parent = kampfer.mindMap.map.getChild(this.nodeData.parent); } else { parent = kampfer.mindMap.map; } parent.removeChild(this.nodeData.id, true); kampfer.mindMap.mapManager.deleteNode(this.nodeData.id); }, unExecute : function() { var node = new kampfer.mindMap.Node(this.nodeData), parent; if(this.nodeData.parent) { parent = kampfer.mindMap.map.getChild(this.nodeData.parent); } else { parent = kampfer.mindMap.map; } kampfer.mindMap.mapManager.addNode(this.nodeData); parent.addChild(node, true); }, dispose : function() { delete this.nodeData; } }); kampfer.mindMap.command.DeleteNode.isAvailable = function() { if(!kampfer.mindMap.map || !kampfer.mindMap.map.currentNode) { return false; } return true; }; kampfer.mindMap.command.SaveNodePosition = kampfer.mindMap.command.Base.extend({ initializer : function(data) { var id = data.nodeId, nodeData = kampfer.mindMap.mapManager.getNode(id); this.oriX = nodeData.offset.x; this.oriY = nodeData.offset.y; this.newX = data.x; this.newY = data.y; this.nodeData = nodeData; }, needPush : true, execute : function() { kampfer.mindMap.map.getChild(this.nodeData.id).moveTo(this.newX, this.newY); kampfer.mindMap.mapManager.setNodePosition(this.nodeData.id, this.newX, this.newY); }, unExecute : function() { kampfer.mindMap.map.getChild(this.nodeData.id).moveTo(this.oriX, this.oriY); kampfer.mindMap.mapManager.setNodePosition(this.nodeData.id, this.oriX, this.oriY); }, dispose : function() { delete this.nodeData; delete this.oriY; delete this.oriX; delete this.newX; delete this.newY; } }); kampfer.mindMap.command.EditNodeContent = kampfer.mindMap.command.Base.extend({ execute : function() { kampfer.mindMap.map.currentNode.getCaption().insertTextarea(); } }); kampfer.mindMap.command.SaveNodeContent = kampfer.mindMap.command.Base.extend({ initializer : function(data) { this.nodeId = data.nodeId; var view = kampfer.mindMap.map.getChild(this.nodeId); this.oriContent = view.getCaption().getContent(); this.newContent = view.getCaption().getTextareaValue(); }, needPush : true, execute : function() { kampfer.mindMap.map.getChild(this.nodeId).getCaption().setContent(this.newContent); kampfer.mindMap.mapManager.setNodeContent(this.nodeId, this.newContent); }, unExecute : function() { kampfer.mindMap.map.getChild(this.nodeId).getCaption().setContent(this.oriContent); kampfer.mindMap.mapManager.setNodeContent(this.nodeId, this.oriContent); }, dispose : function() { delete this.view; delete this.oriContent; delete this.newContent; } }); kampfer.mindMap.command.Copy = kampfer.mindMap.command.Base.extend({ execute : function() { var nodeId = kampfer.mindMap.map.currentNode.getId(); var node = kampfer.mindMap.mapManager.createNode( kampfer.mindMap.mapManager.getNode(nodeId) ); kampfer.mindMap.mapsManager.setClipboard(node); } }); kampfer.mindMap.command.Copy.isAvailable = function() { if(!kampfer.mindMap.map || !kampfer.mindMap.map.currentNode) { return false; } return true; }; kampfer.mindMap.command.Copy.shortcut = 'ctrl+c'; kampfer.mindMap.command.Cut = kampfer.mindMap.command.DeleteNode.extend({ execute : function() { kampfer.mindMap.command.Cut.superClass.execute.apply(this); var node = kampfer.mindMap.mapManager.createNode(this.nodeData); kampfer.mindMap.mapsManager.setClipboard(node); } }); kampfer.mindMap.command.Cut.isAvailable = kampfer.mindMap.command.DeleteNode.isAvailable; kampfer.mindMap.command.Cut.shortcut = 'ctrl+z'; kampfer.mindMap.command.Paste = kampfer.mindMap.command.CreateNewRootNode.extend({ initializer : function(data) { this.nodeData = kampfer.mindMap.mapsManager.getClipboard(); //重置所有id kampfer.mindMap.mapManager.traverseNode(this.nodeData, function(node) { node.id = kampfer.mindMap.mapManager.generateUniqueId(); node.parent = null; if(node.children) { var child, i = 0; while( (child = node.children[i++]) ) { child.parent = node.id; } } }); if(kampfer.mindMap.map.currentNode) { this.nodeData.parent = kampfer.mindMap.map.currentNode.getId(); } if(!this.nodeData.parent) { var window = kampfer.mindMap.map.getParent(); this.nodeData.offset.x = data.pageX + window.scrollLeft(); this.nodeData.offset.y = data.pageY + window.scrollTop(); } } }); kampfer.mindMap.command.Paste.isAvailable = function() { var clipboard = kampfer.mindMap.mapsManager.getClipboard(); if( !kampfer.mindMap.map || !clipboard || clipboard.length <= 0) { return false; } return true; }; kampfer.mindMap.command.Paste.shortcut = 'ctrl+v';