diff --git a/src/app/directives/keytable.directive.js b/src/app/directives/keytable.directive.js index c7f08432..a8def63f 100644 --- a/src/app/directives/keytable.directive.js +++ b/src/app/directives/keytable.directive.js @@ -64,7 +64,7 @@ } function add(key, value, fixed) { - vm.rows.push({key:key, value:value, fixed:fixed===true}); + vm.rows.push({key:key, value:JSON.stringify(value), fixed:fixed===true}); } function remove(i) { @@ -85,8 +85,10 @@ if (! r.key) continue; var value = r.value; - if (!isNaN(value) && value !== '') { - value = parseFloat(value); + try { + value = JSON.parse(value); + } catch (e) { + // keep value as string } vm.model[r.key] = value; diff --git a/src/app/pages/editor/modals/editfolder.controller.js b/src/app/pages/editor/modals/editfolder.controller.js index a658f111..07a1ae2a 100644 --- a/src/app/pages/editor/modals/editfolder.controller.js +++ b/src/app/pages/editor/modals/editfolder.controller.js @@ -1,4 +1,4 @@ -(function() { +(function () { 'use strict'; angular @@ -15,19 +15,21 @@ ]; function EditFolderController($scope, - $window, - $state, - $stateParams, - dialogService, - notificationService) { + $window, + $state, + $stateParams, + dialogService, + notificationService) { var vm = this; vm.action = 'New'; vm.folder = null; vm.blacklist = null; vm.folderList = null; vm.original = null; + vm.showExport = false; vm.save = save; vm.remove = remove; + vm.removeTrees = removeTrees; _active(); @@ -39,6 +41,9 @@ vm.folder = folder.copy(); vm.original = folder; vm.action = 'Update'; + p._selectedFolder = folder; + console.log("EditFolderController:", folder); + vm.showExport = folder.category === "tree"; } else { vm.folder = new b3e.Folder(); vm.folder.category = 'tree'; @@ -46,7 +51,7 @@ var blacklist = []; var folderList = []; - p.folders.each(function(folder) { + p.folders.each(function (folder) { if (folder.name !== vm.folder.name) { blacklist.push(folder.name); if (vm.original != null && @@ -77,12 +82,69 @@ $state.go('editor'); } + function removeTrees() { + dialogService. + confirm( + 'Remove folder and sub Trees?', + 'Are you sure you want to remove this folder?\n\nNote: all blocks using this folder will be removed.' + ).then(function () { + var p = $window.editor.project.get(); + console.log("removeTrees.p", p); + console.log("removeTrees.vm.original", vm.original); + p.folders.remove(vm.original); + var reli = [] + + if (vm.original.category === "tree") { + p.trees.each(function (tree) { + console.log("removeTrees.tree", tree); + console.log("removeTrees.tree.folder", tree._root._parent); + + if (vm.original.name === tree._root._parent) { + reli.push(tree); + } + }, this); + for (var index = 0; index < reli.length; index++) { + var tree = reli[index]; + p.trees.remove(tree); + console.log("removeTrees.trees.remove:", tree); + } + // reli.forEach(function(tree) { + // p.trees.remove(tree); + // console.log("removeTrees.trees.remove:", tree); + // }); + } else { + p.nodes.each(function (node) { + if (node.isDefault) { + return + } + console.log("removeTrees.node", node); + // console.log("removeTrees.node.folder", node._root._parent) + + if (vm.original.name === node.parent) { + reli.push(node); + } + }, this); + for (var i = 0; i < reli.length; i++) { + var node = reli[i]; + p.nodes.remove(node); + console.log("removeTrees.nodes.remove:", node); + }; + } + + notificationService.success( + 'folder removed', + 'The folder has been removed from this project.' + ); + $state.go('editor'); + }); + } + function remove() { dialogService. confirm( - 'Remove folder?', + 'Remove folder?', 'Are you sure you want to remove this folder?\n\nNote: all blocks using this folder will be removed.' - ).then(function() { + ).then(function () { var p = $window.editor.project.get(); p.folders.remove(vm.original); notificationService.success( diff --git a/src/app/pages/editor/modals/editfolder.html b/src/app/pages/editor/modals/editfolder.html index 517bd986..ea49f44d 100644 --- a/src/app/pages/editor/modals/editfolder.html +++ b/src/app/pages/editor/modals/editfolder.html @@ -55,6 +55,8 @@

{{editfolder.action}} folder

+ + diff --git a/src/app/pages/editor/modals/export.controller.js b/src/app/pages/editor/modals/export.controller.js index 65b40aee..41fcaa3a 100644 --- a/src/app/pages/editor/modals/export.controller.js +++ b/src/app/pages/editor/modals/export.controller.js @@ -44,7 +44,7 @@ var e = $window.editor.export; if (vm.type === 'project' && vm.format === 'json') { - _createJson(e.projectToData()); + _createJson(e.projectToDataByTree()); } else if (vm.type === 'tree' && vm.format === 'json') { _createJson(e.treeToData()); @@ -52,6 +52,9 @@ else if (vm.type === 'nodes' && vm.format === 'json') { _createJson(e.nodesToData()); } + else if (vm.type === 'folder' && vm.format === 'json') { + _createJson(e.folderToData()); + } } function _createJson(data) { diff --git a/src/app/pages/editor/modals/import.controller.js b/src/app/pages/editor/modals/import.controller.js index 233dec30..c143901a 100644 --- a/src/app/pages/editor/modals/import.controller.js +++ b/src/app/pages/editor/modals/import.controller.js @@ -54,7 +54,7 @@ try { if (vm.type === 'project' && vm.format === 'json') { - i.projectAsData(data.data); + i.projectAsData(data); } else if (vm.type === 'tree' && vm.format === 'json') { i.treeAsData(data); diff --git a/src/assets/less/variables.less b/src/assets/less/variables.less index c58e90a5..7a592ff1 100644 --- a/src/assets/less/variables.less +++ b/src/assets/less/variables.less @@ -29,7 +29,7 @@ @z-notification: 50; // SIZES ====================================================================== -@size-sidebar: 250px; +@size-sidebar: 400px; @size-menubar: 35px; @size-page-content: 700px+@size-sidebar; diff --git a/src/assets/libs/behavior3js-0.1.0.min.js b/src/assets/libs/behavior3js-0.1.0.min.js index f3502edd..de848a9a 100644 --- a/src/assets/libs/behavior3js-0.1.0.min.js +++ b/src/assets/libs/behavior3js-0.1.0.min.js @@ -1720,7 +1720,7 @@ var p = Sequence.prototype; * @readonly **/ p.name = 'Sequence'; - + p.description = '顺序执行子节点,当子节点返回SUCCESS,直接访问下一个子节点;所有子节点都返回SUCCESS,Sequence节点才返回SUCCESS;当有子节点返回FAILURE,则后续子节点不再执行,Sequence节点直接返回FAILURE,类似于逻辑与的概念。'; /** * Tick method. * @@ -1796,7 +1796,7 @@ var p = Priority.prototype * @readonly **/ p.name = 'Priority'; - + p.description = '就是Selector节点,选择执行子节点,当子节点返回FAILURE,访问下一个子节点,当所有子节点都返回FAILURE,Priority节点返回FAILURE;当有子节点返回SUCCESS,则后续子节点不再执行,Priority节点直接返回SUCCESS,类似于逻辑或的概念。'; /** * Tick method. * @@ -1872,7 +1872,7 @@ var p = MemSequence.prototype * @readonly **/ p.name = 'MemSequence'; - + p.description = 'MemSequence节点的逻辑和Sequence一样,这里涉及到一个b3.RUNNING的返回值。MemSequence却会记住之前在Running的子节点,下次遍历的时候,直接从Running的那个子节点开始,这可以很方便的继续之前中断的逻辑决策。' /** * Open method. * @@ -1962,6 +1962,7 @@ var p = MemPriority.prototype; * @readonly **/ p.name = 'MemPriority'; + p.description = 'MemPriority节点的逻辑和Priority一样,然后Running的却会记住之前在Running的子节点,下次遍历的时候,直接从Running的那个子节点开始,这可以很方便的继续之前中断的逻辑决策。' /** * Open method. @@ -2051,6 +2052,7 @@ var p = Inverter.prototype; * @readonly **/ p.name = 'Inverter'; + p.descriptions = '' /** * Tick method. @@ -2130,6 +2132,7 @@ var p = Limiter.prototype; * @readonly **/ p.name = 'Limiter'; + p.descriptions = '' /** * Node title. Default to `Limit X Activations`. Used in Editor. @@ -2267,6 +2270,7 @@ var p = MaxTime.prototype; * @readonly **/ p.name = 'MaxTime'; + p.descriptions = '' /** * Node title. Default to `Max XXms`. Used in Editor. @@ -2402,6 +2406,7 @@ var p = Repeater.prototype; * @readonly **/ p.name = 'Repeater'; + p.descriptions = '' /** * Node title. Default to `Repeat XXx`. Used in Editor. @@ -2536,6 +2541,7 @@ var p = RepeatUntilFailure.prototype; * @readonly **/ p.name = 'RepeatUntilFailure'; + p.descriptions = '' /** * Node title. Default to `Repeat Until Failure`. @@ -2670,6 +2676,7 @@ var p = RepeatUntilSuccess.prototype; * @readonly **/ p.name = 'RepeatUntilSuccess'; + p.descriptions = '' /** * Node title. Default to `Repeat Until Success`. @@ -2802,6 +2809,7 @@ var p = Error.prototype; * @readonly **/ p.name = 'Error'; + p.descriptions = '' /** * Tick method. @@ -2868,6 +2876,7 @@ var p = Failer.prototype; * @readonly **/ p.name = 'Failer'; + p.descriptions = '' /** * Tick method. @@ -2934,6 +2943,7 @@ var p = Runner.prototype; * @readonly **/ p.name = 'Runner'; + p.descriptions = '' /** * Tick method. @@ -3000,6 +3010,7 @@ var p = Succeeder.prototype; * @readonly **/ p.name = 'Succeeder'; + p.descriptions = '' /** * Tick method. @@ -3066,6 +3077,7 @@ var p = Wait.prototype; * @readonly **/ p.name = 'Wait'; + p.descriptions = '' /** * Node title. Default to `Wait XXms`. Used in Editor. diff --git a/src/editor/draw/symbols.js b/src/editor/draw/symbols.js index 1cccf781..a2b09881 100644 --- a/src/editor/draw/symbols.js +++ b/src/editor/draw/symbols.js @@ -118,8 +118,12 @@ }; b3e.draw.textSymbol = function(block, settings) { + var title = block.getTitle(); + if (title.substr(0,3) == "Mem"){ + title = "✷" + title.substr(3); + } var text = new createjs.Text( - block.getTitle(), + title, '18px Arial', settings.get('block_symbol_color') ); @@ -128,6 +132,14 @@ var bounds = text.getBounds(); text.regY = bounds.height/2; +/* +如果this.name中有Mem那就把星号加上去 + shape.graphics.setStrokeStyle(swidth, 'round'); + shape.graphics.beginStroke(scolor); + shape.graphics.beginFill(scolor); + shape.graphics.drawPolyStar(0, -ssize*0.75, ssize/2, 6, ssize/10, 0); +*/ + // text.x = -block._width/2; // text.y = -block._height/2; diff --git a/src/editor/editor/managers/ExportManager.js b/src/editor/editor/managers/ExportManager.js index f55c6045..c828ba90 100644 --- a/src/editor/editor/managers/ExportManager.js +++ b/src/editor/editor/managers/ExportManager.js @@ -1,44 +1,44 @@ -b3e.editor.ExportManager = function(editor) { +b3e.editor.ExportManager = function (editor) { "use strict"; function getBlockChildrenIds(block) { var conns = block._outConnections.slice(0); if (editor._settings.get('layout') === 'horizontal') { - conns.sort(function(a, b) { - return a._outBlock.y - - b._outBlock.y; + conns.sort(function (a, b) { + return a._outBlock.y - + b._outBlock.y; }); } else { - conns.sort(function(a, b) { - return a._outBlock.x - - b._outBlock.x; + conns.sort(function (a, b) { + return a._outBlock.x - + b._outBlock.x; }); } var nodes = []; - for (var i=0; i