diff --git a/src/extensions/default/CSSShapesEditor/LiveEditorLocalDriver.js b/src/extensions/default/CSSShapesEditor/LiveEditorLocalDriver.js index ae248bb5d0d..a1ec92a29bc 100644 --- a/src/extensions/default/CSSShapesEditor/LiveEditorLocalDriver.js +++ b/src/extensions/default/CSSShapesEditor/LiveEditorLocalDriver.js @@ -86,7 +86,6 @@ define(function (require, exports, module) { } /** - * @private * Inject remote live editor driver and any specified editor providers. * The remote live editor driver mirrors most of the local live editor driver API * to provide an interface to the in-browser live editor. @@ -104,16 +103,16 @@ define(function (require, exports, module) { } /** - * @private * Send instructions to remove the live editor from the page in LivePreview. * @return {$.Promise} */ function remove() { if (_hasEditor === false) { var deferred = $.Deferred(); - return deferred.reject(); + return deferred.reject().promise(); } + _cache.model = undefined; // do not move in _reset(), otherwise the _reconnect() scenario misses the cache and fails _reset(); var expr = _namespace + ".remove()"; return _call(expr); @@ -138,6 +137,10 @@ define(function (require, exports, module) { hasChanged = false, key; + if (!data) { + remove(); + } + // sync the local model snapshot with the remote model _.forEach(data, function (value, key) { if (!_model[key] || !_.isEqual(_model[key], value)) { @@ -155,18 +158,24 @@ define(function (require, exports, module) { /** * @private * Handle failed promises for eval() calls to the inspected page. - * Promises can fail if the user manually refreshes the page or navigates + * Promises fail if the user manually refreshes the page or navigates * because the injected editor files will be lost. + * If this is the case, attempt to reconnect. * - * @param {$.Promise=} result promise result + * Promises also fail because of errors thrown in the remote page. + * If this is the case, remove the editor. */ - function _whenRemoteCallFailed(result) { - if (result) { - return _reconnect(); - } else { - _cache.model = undefined; - return remove(); - } + function _whenRemoteCallFailed() { + // check if the remote editor namespace is still defined on the page + _call(_namespace) + .then(function (response) { + if (response.type === "undefined") { + _reconnect(); + } else { + remove(); + } + }) + .fail(remove); } /** diff --git a/src/extensions/default/CSSShapesEditor/thirdparty/CSSShapesEditorProvider.js b/src/extensions/default/CSSShapesEditor/thirdparty/CSSShapesEditorProvider.js index 15793a6cbd8..490d5bbd729 100644 --- a/src/extensions/default/CSSShapesEditor/thirdparty/CSSShapesEditorProvider.js +++ b/src/extensions/default/CSSShapesEditor/thirdparty/CSSShapesEditorProvider.js @@ -82,7 +82,7 @@ Declared globally within module so it can be removed by Provider.remove() Defined here so it can access scope.inst - Ctrl+T toggles the free transform editor (scale/rotate) + T key toggles the free transform editor (scale/rotate) Esc key turns off free transform editor; quietly ignored if editor was never turned on. @param {Event} e keydown event @@ -92,8 +92,8 @@ if (scope.inst.type !== "polygon") { return; } - // Ctrl+T toggles rotate/scale editor - if (e.ctrlKey && e.keyIdentifier === "U+0054") { + // T key toggles rotate/scale editor + if (e.keyIdentifier === "U+0054") { scope.inst.toggleFreeTransform(); } diff --git a/src/extensions/default/CSSShapesEditor/unittests.js b/src/extensions/default/CSSShapesEditor/unittests.js index 009423245d8..2eccf019075 100644 --- a/src/extensions/default/CSSShapesEditor/unittests.js +++ b/src/extensions/default/CSSShapesEditor/unittests.js @@ -466,17 +466,6 @@ define(function (require, exports, module) { expect(LiveEditorLocalDriver.remove).toHaveBeenCalled(); }); - - it("should call remove() when LivePreview is turned off", function () { - var deferred = $.Deferred(); - spyOn(LiveEditorLocalDriver, "remove").andReturn(deferred.promise()); - - main._setup(); - main._teardown(); - - expect(LiveEditorLocalDriver.remove).toHaveBeenCalled(); - }); - }); describe("Live Preview Workflow", function () {