123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185 |
- /* 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 { Front, FrontClassWithSpec } = require("devtools/shared/protocol");
- const {
- getIndentationFromPrefs,
- getIndentationFromString
- } = require("devtools/shared/indentation");
- const {
- originalSourceSpec,
- mediaRuleSpec,
- styleSheetSpec,
- styleSheetsSpec
- } = require("devtools/shared/specs/stylesheets");
- const promise = require("promise");
- const { Task } = require("devtools/shared/task");
- const events = require("sdk/event/core");
- /**
- * The client-side counterpart for an OriginalSourceActor.
- */
- const OriginalSourceFront = FrontClassWithSpec(originalSourceSpec, {
- initialize: function (client, form) {
- Front.prototype.initialize.call(this, client, form);
- this.isOriginalSource = true;
- },
- form: function (form, detail) {
- if (detail === "actorid") {
- this.actorID = form;
- return;
- }
- this.actorID = form.actor;
- this._form = form;
- },
- get href() {
- return this._form.url;
- },
- get url() {
- return this._form.url;
- }
- });
- exports.OriginalSourceFront = OriginalSourceFront;
- /**
- * Corresponding client-side front for a MediaRuleActor.
- */
- const MediaRuleFront = FrontClassWithSpec(mediaRuleSpec, {
- initialize: function (client, form) {
- Front.prototype.initialize.call(this, client, form);
- this._onMatchesChange = this._onMatchesChange.bind(this);
- events.on(this, "matches-change", this._onMatchesChange);
- },
- _onMatchesChange: function (matches) {
- this._form.matches = matches;
- },
- form: function (form, detail) {
- if (detail === "actorid") {
- this.actorID = form;
- return;
- }
- this.actorID = form.actor;
- this._form = form;
- },
- get mediaText() {
- return this._form.mediaText;
- },
- get conditionText() {
- return this._form.conditionText;
- },
- get matches() {
- return this._form.matches;
- },
- get line() {
- return this._form.line || -1;
- },
- get column() {
- return this._form.column || -1;
- },
- get parentStyleSheet() {
- return this.conn.getActor(this._form.parentStyleSheet);
- }
- });
- exports.MediaRuleFront = MediaRuleFront;
- /**
- * StyleSheetFront is the client-side counterpart to a StyleSheetActor.
- */
- const StyleSheetFront = FrontClassWithSpec(styleSheetSpec, {
- initialize: function (conn, form) {
- Front.prototype.initialize.call(this, conn, form);
- 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;
- },
- 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;
- },
- /**
- * Get the indentation to use for edits to this style sheet.
- *
- * @return {Promise} A promise that will resolve to a string that
- * should be used to indent a block in this style sheet.
- */
- guessIndentation: function () {
- let prefIndent = getIndentationFromPrefs();
- if (prefIndent) {
- let {indentUnit, indentWithTabs} = prefIndent;
- return promise.resolve(indentWithTabs ? "\t" : " ".repeat(indentUnit));
- }
- return Task.spawn(function* () {
- let longStr = yield this.getText();
- let source = yield longStr.string();
- let {indentUnit, indentWithTabs} = getIndentationFromString(source);
- return indentWithTabs ? "\t" : " ".repeat(indentUnit);
- }.bind(this));
- }
- });
- exports.StyleSheetFront = StyleSheetFront;
- /**
- * The corresponding Front object for the StyleSheetsActor.
- */
- const StyleSheetsFront = FrontClassWithSpec(styleSheetsSpec, {
- initialize: function (client, tabForm) {
- Front.prototype.initialize.call(this, client);
- this.actorID = tabForm.styleSheetsActor;
- this.manage(this);
- }
- });
- exports.StyleSheetsFront = StyleSheetsFront;
|