editor: plugins/core - remove & type change list actions return new document fragment
[fnpeditor.git] / src / fnpjs / actions.js
index d369ff0..f380ed6 100644 (file)
@@ -3,7 +3,11 @@ define(function(require) {
 'use strict';
 
 var _ = require('libs/underscore'),
 'use strict';
 
 var _ = require('libs/underscore'),
-    Backbone = require('libs/backbone');
+    Backbone = require('libs/backbone'),
+    logging = require('fnpjs/logging/logging');
+
+var logger = logging.getLogger('fnpjs.actions');
+
 
 var Action = function(fqName, definition, config, appObject) {
     this.fqName = fqName;
 
 var Action = function(fqName, definition, config, appObject) {
     this.fqName = fqName;
@@ -52,7 +56,12 @@ _.extend(Action.prototype, Backbone.Events, {
     getState: function() {
         var gotState;
         if(!this._cache) {
     getState: function() {
         var gotState;
         if(!this._cache) {
-            gotState = this.definition.getState.call(this, this.params);
+            try {
+                gotState = this.definition.getState.call(this, this.params);
+            } catch(e) {
+                logger.exception(e);
+                return;
+            }
             if(typeof gotState === 'boolean') {
                 gotState = {allowed: gotState};
             }
             if(typeof gotState === 'boolean') {
                 gotState = {allowed: gotState};
             }
@@ -63,10 +72,11 @@ _.extend(Action.prototype, Backbone.Events, {
         }
         return this._cache;
     },
         }
         return this._cache;
     },
-    execute: function() {
+    execute: function(callback) {
         var state = this.getState();
         var state = this.getState();
+        callback = callback || function() {};
         if(state.allowed) {
         if(state.allowed) {
-            return state.execute.call(this, this.params, this.appObject);
+            return state.execute.call(this, callback, this.params, this.appObject);
         }
         throw new Error('Execution not allowed');
     }
         }
         throw new Error('Execution not allowed');
     }