// if we overflow, we have to reset the button. unfortunately we cannot // use a widget listener because we need to do this *after* the node is // moved, and the event happens before the node is moved. this.update(); let widgetGroup = CustomizableUI.getWidget(this.getAttribute("id")); return widgetGroup.forWindow(window).anchor; let provider = Social._getProviderFromOrigin(this.getAttribute("origin")); return !provider.getPageSize("marks"); return document.getAnonymousElementByAttribute(this, "anonid", "panel"); return this.content.contentWindow; return this.content.contentDocument; return Social._getProviderFromOrigin(this.getAttribute("origin")); return this._isMarked; { this.isMarked = isMarked; }); } this.content.setAttribute("origin", provider.origin); let panel = this.panel; // if customization is currently happening, we may not have a panel // that we can hide if (panel.hidePopup) { panel.hidePopup(); } this.pageData = null; ]]> { messageManager.removeMessageListener("PageMetadata:PageDataResult", _dataFn); this.loadPanel(msg.json, target); }); gBrowser.selectedBrowser.messageManager.sendAsyncMessage("PageMetadata:GetPageData"); return; } // if this is a share of a selected item, get any microdata if (!pageData.microdata && target) { messageManager.addMessageListener("PageMetadata:MicrodataResult", _dataFn = (msg) => { messageManager.removeMessageListener("PageMetadata:MicrodataResult", _dataFn); pageData.microdata = msg.data; this.loadPanel(pageData, target); }); gBrowser.selectedBrowser.messageManager.sendAsyncMessage("PageMetadata:GetMicrodata", null, { target }); return; } this.pageData = pageData; let endpoint = OpenGraphBuilder.generateEndpointURL(URLTemplate, this.pageData); // setup listeners let DOMContentLoaded = (event) => { if (event.target != this.contentDocument) return; this._loading = false; this.content.removeEventListener("DOMContentLoaded", DOMContentLoaded, true); // add our resizer after the dom is ready if (this._useDynamicResizer) { let DynamicResizeWatcher = Cu.import("resource:///modules/Social.jsm", {}).DynamicResizeWatcher; this._dynamicResizer = new DynamicResizeWatcher(); this._dynamicResizer.start(this.panel, this.content); } else if (this._dynamicResizer) { this._dynamicResizer.stop(); this._dynamicResizer = null; } // send the opengraph data let evt = this.contentDocument.createEvent("CustomEvent"); evt.initCustomEvent("OpenGraphData", true, true, JSON.stringify(this.pageData)); this.contentDocument.documentElement.dispatchEvent(evt); let contentWindow = this.contentWindow; let markUpdate = function(event) { // update the annotation based on this event, then update the // icon as well this.isMarked = JSON.parse(event.detail).marked; if (this.isMarked) { Social.markURI(provider.origin, gBrowser.currentURI); } else { Social.unmarkURI(provider.origin, gBrowser.currentURI, () => { this.update(); }); } }.bind(this); let unload = () => { contentWindow.removeEventListener("unload", unload); contentWindow.removeEventListener("socialMarkUpdate", markUpdate); } contentWindow.addEventListener("socialMarkUpdate", markUpdate); contentWindow.addEventListener("unload", unload); } this.content.addEventListener("DOMContentLoaded", DOMContentLoaded, true); this._loading = true; this.content.setAttribute("src", endpoint); ]]> { panel.openPopup(anchor, "bottomcenter topright", 0, 0, false, false); }, 0); Services.telemetry.getHistogramById("SOCIAL_TOOLBAR_BUTTONS").add(2); ]]> { this.content.removeEventListener("load", panelBrowserOnload, true); this.dispatchPanelEvent("socialFrameShow"); if (this._useDynamicResizer) sizeSocialPanelToContent(this.panel, this.content); }; this.content.addEventListener("load", panelBrowserOnload, true); } ]]>