summaryrefslogtreecommitdiffstats
path: root/devtools/client/webaudioeditor/includes.js
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/client/webaudioeditor/includes.js')
-rw-r--r--devtools/client/webaudioeditor/includes.js110
1 files changed, 110 insertions, 0 deletions
diff --git a/devtools/client/webaudioeditor/includes.js b/devtools/client/webaudioeditor/includes.js
new file mode 100644
index 000000000..c0b727800
--- /dev/null
+++ b/devtools/client/webaudioeditor/includes.js
@@ -0,0 +1,110 @@
+/* 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";
+
+var { classes: Cc, interfaces: Ci, utils: Cu, results: Cr } = Components;
+
+const { loader, require } = Cu.import("resource://devtools/shared/Loader.jsm", {});
+const { XPCOMUtils } = require("resource://gre/modules/XPCOMUtils.jsm");
+const { EventTarget } = require("sdk/event/target");
+const { Task } = require("devtools/shared/task");
+const { Class } = require("sdk/core/heritage");
+const EventEmitter = require("devtools/shared/event-emitter");
+const DevToolsUtils = require("devtools/shared/DevToolsUtils");
+const Services = require("Services");
+const { gDevTools } = require("devtools/client/framework/devtools");
+const { LocalizationHelper } = require("devtools/shared/l10n");
+const { ViewHelpers } = require("devtools/client/shared/widgets/view-helpers");
+
+const STRINGS_URI = "devtools/client/locales/webaudioeditor.properties";
+const L10N = new LocalizationHelper(STRINGS_URI);
+
+loader.lazyRequireGetter(this, "LineGraphWidget",
+ "devtools/client/shared/widgets/LineGraphWidget");
+
+// `AUDIO_NODE_DEFINITION` defined in the controller's initialization,
+// which describes all the properties of an AudioNode
+var AUDIO_NODE_DEFINITION;
+
+// Override DOM promises with Promise.jsm helpers
+const { defer, all } = require("promise");
+
+/* Events fired on `window` to indicate state or actions*/
+const EVENTS = {
+ // Fired when the first AudioNode has been created, signifying
+ // that the AudioContext is being used and should be tracked via the editor.
+ START_CONTEXT: "WebAudioEditor:StartContext",
+
+ // When the devtools theme changes.
+ THEME_CHANGE: "WebAudioEditor:ThemeChange",
+
+ // When the UI is reset from tab navigation.
+ UI_RESET: "WebAudioEditor:UIReset",
+
+ // When a param has been changed via the UI and successfully
+ // pushed via the actor to the raw audio node.
+ UI_SET_PARAM: "WebAudioEditor:UISetParam",
+
+ // When a node is to be set in the InspectorView.
+ UI_SELECT_NODE: "WebAudioEditor:UISelectNode",
+
+ // When the inspector is finished setting a new node.
+ UI_INSPECTOR_NODE_SET: "WebAudioEditor:UIInspectorNodeSet",
+
+ // When the inspector is finished rendering in or out of view.
+ UI_INSPECTOR_TOGGLED: "WebAudioEditor:UIInspectorToggled",
+
+ // When an audio node is finished loading in the Properties tab.
+ UI_PROPERTIES_TAB_RENDERED: "WebAudioEditor:UIPropertiesTabRendered",
+
+ // When an audio node is finished loading in the Automation tab.
+ UI_AUTOMATION_TAB_RENDERED: "WebAudioEditor:UIAutomationTabRendered",
+
+ // When the Audio Context graph finishes rendering.
+ // Is called with two arguments, first representing number of nodes
+ // rendered, second being the number of edge connections rendering (not counting
+ // param edges), followed by the count of the param edges rendered.
+ UI_GRAPH_RENDERED: "WebAudioEditor:UIGraphRendered",
+
+ // Called when the inspector splitter is moved and resized.
+ UI_INSPECTOR_RESIZE: "WebAudioEditor:UIInspectorResize"
+};
+XPCOMUtils.defineConstant(this, "EVENTS", EVENTS);
+
+/**
+ * The current target and the Web Audio Editor front, set by this tool's host.
+ */
+var gToolbox, gTarget, gFront;
+
+/**
+ * Convenient way of emitting events from the panel window.
+ */
+EventEmitter.decorate(this);
+
+/**
+ * DOM query helper.
+ */
+function $(selector, target = document) { return target.querySelector(selector); }
+function $$(selector, target = document) { return target.querySelectorAll(selector); }
+
+/**
+ * Takes an iterable collection, and a hash. Return the first
+ * object in the collection that matches the values in the hash.
+ * From Backbone.Collection#findWhere
+ * http://backbonejs.org/#Collection-findWhere
+ */
+function findWhere(collection, attrs) {
+ let keys = Object.keys(attrs);
+ for (let model of collection) {
+ if (keys.every(key => model[key] === attrs[key])) {
+ return model;
+ }
+ }
+ return void 0;
+}
+
+function mixin(source, ...args) {
+ args.forEach(obj => Object.keys(obj).forEach(prop => source[prop] = obj[prop]));
+ return source;
+}