diff options
Diffstat (limited to 'devtools/client/webaudioeditor/includes.js')
-rw-r--r-- | devtools/client/webaudioeditor/includes.js | 110 |
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; +} |