diff options
Diffstat (limited to 'devtools/shared/fronts/styleeditor.js')
-rw-r--r-- | devtools/shared/fronts/styleeditor.js | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/devtools/shared/fronts/styleeditor.js b/devtools/shared/fronts/styleeditor.js new file mode 100644 index 000000000..5feb6df1b --- /dev/null +++ b/devtools/shared/fronts/styleeditor.js @@ -0,0 +1,113 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +"use strict"; + +const { SimpleStringFront } = require("devtools/shared/fronts/string"); +const { Front, FrontClassWithSpec } = require("devtools/shared/protocol"); +const { + oldStyleSheetSpec, + styleEditorSpec +} = require("devtools/shared/specs/styleeditor"); +const promise = require("promise"); +const defer = require("devtools/shared/defer"); +const events = require("sdk/event/core"); + +/** + * StyleSheetFront is the client-side counterpart to a StyleSheetActor. + */ +const OldStyleSheetFront = FrontClassWithSpec(oldStyleSheetSpec, { + initialize: function (conn, form, ctx, detail) { + Front.prototype.initialize.call(this, conn, form, ctx, detail); + + this._onPropertyChange = this._onPropertyChange.bind(this); + events.on(this, "property-change", this._onPropertyChange); + }, + + destroy: function () { + events.off(this, "property-change", this._onPropertyChange); + + Front.prototype.destroy.call(this); + }, + + _onPropertyChange: function (property, value) { + this._form[property] = value; + }, + + form: function (form, detail) { + if (detail === "actorid") { + this.actorID = form; + return; + } + this.actorID = form.actor; + this._form = form; + }, + + getText: function () { + let deferred = defer(); + + events.once(this, "source-load", (source) => { + let longStr = new SimpleStringFront(source); + deferred.resolve(longStr); + }); + this.fetchSource(); + + return deferred.promise; + }, + + getOriginalSources: function () { + return promise.resolve([]); + }, + + get href() { + return this._form.href; + }, + get nodeHref() { + return this._form.nodeHref; + }, + get disabled() { + return !!this._form.disabled; + }, + get title() { + return this._form.title; + }, + get isSystem() { + return this._form.system; + }, + get styleSheetIndex() { + return this._form.styleSheetIndex; + }, + get ruleCount() { + return this._form.ruleCount; + } +}); + +exports.OldStyleSheetFront = OldStyleSheetFront; + +/** + * The corresponding Front object for the StyleEditorActor. + */ +const StyleEditorFront = FrontClassWithSpec(styleEditorSpec, { + initialize: function (client, tabForm) { + Front.prototype.initialize.call(this, client); + this.actorID = tabForm.styleEditorActor; + this.manage(this); + }, + + getStyleSheets: function () { + let deferred = defer(); + + events.once(this, "document-load", (styleSheets) => { + deferred.resolve(styleSheets); + }); + this.newDocument(); + + return deferred.promise; + }, + + addStyleSheet: function (text) { + return this.newStyleSheet(text); + } +}); + +exports.StyleEditorFront = StyleEditorFront; |