michael@0: /* This Source Code Form is subject to the terms of the Mozilla Public michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this michael@0: * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ michael@0: 'use strict'; michael@0: michael@0: const { Cu } = require('chrome'); michael@0: const { getMostRecentBrowserWindow } = require('sdk/window/utils'); michael@0: const { fromIterator } = require('sdk/util/array'); michael@0: michael@0: const BUILTIN_SIDEBAR_MENUITEMS = exports.BUILTIN_SIDEBAR_MENUITEMS = [ michael@0: 'menu_socialSidebar', michael@0: 'menu_historySidebar', michael@0: 'menu_bookmarksSidebar' michael@0: ]; michael@0: michael@0: function isSidebarShowing(window) { michael@0: window = window || getMostRecentBrowserWindow(); michael@0: let sidebar = window.document.getElementById('sidebar-box'); michael@0: return !sidebar.hidden; michael@0: } michael@0: exports.isSidebarShowing = isSidebarShowing; michael@0: michael@0: function getSidebarMenuitems(window) { michael@0: window = window || getMostRecentBrowserWindow(); michael@0: return fromIterator(window.document.querySelectorAll('#viewSidebarMenu menuitem')); michael@0: } michael@0: exports.getSidebarMenuitems = getSidebarMenuitems; michael@0: michael@0: function getExtraSidebarMenuitems() { michael@0: let menuitems = getSidebarMenuitems(); michael@0: return menuitems.filter(function(mi) { michael@0: return BUILTIN_SIDEBAR_MENUITEMS.indexOf(mi.getAttribute('id')) < 0; michael@0: }); michael@0: } michael@0: exports.getExtraSidebarMenuitems = getExtraSidebarMenuitems; michael@0: michael@0: function makeID(id) { michael@0: return 'jetpack-sidebar-' + id; michael@0: } michael@0: exports.makeID = makeID; michael@0: michael@0: function simulateCommand(ele) { michael@0: let window = ele.ownerDocument.defaultView; michael@0: let { document } = window; michael@0: var evt = document.createEvent('XULCommandEvent'); michael@0: evt.initCommandEvent('command', true, true, window, michael@0: 0, false, false, false, false, null); michael@0: ele.dispatchEvent(evt); michael@0: } michael@0: exports.simulateCommand = simulateCommand; michael@0: michael@0: function simulateClick(ele) { michael@0: let window = ele.ownerDocument.defaultView; michael@0: let { document } = window; michael@0: let evt = document.createEvent('MouseEvents'); michael@0: evt.initMouseEvent('click', true, true, window, michael@0: 0, 0, 0, 0, 0, false, false, false, false, 0, null); michael@0: ele.dispatchEvent(evt); michael@0: } michael@0: exports.simulateClick = simulateClick; michael@0: michael@0: // OSX and Windows exhibit different behaviors when 'checked' is false, michael@0: // so compare against the consistent 'true'. See bug 894809. michael@0: function isChecked(node) { michael@0: return node.getAttribute('checked') === 'true'; michael@0: }; michael@0: exports.isChecked = isChecked;