diff options
Diffstat (limited to 'ext/fg/js/popup-factory.js')
| -rw-r--r-- | ext/fg/js/popup-factory.js | 52 | 
1 files changed, 38 insertions, 14 deletions
diff --git a/ext/fg/js/popup-factory.js b/ext/fg/js/popup-factory.js index 1dc7d61e..7d6f9846 100644 --- a/ext/fg/js/popup-factory.js +++ b/ext/fg/js/popup-factory.js @@ -30,16 +30,19 @@ class PopupFactory {      prepare() {          api.crossFrame.registerHandlers([ -            ['getOrCreatePopup',   {async: false, handler: this._onApiGetOrCreatePopup.bind(this)}], -            ['setOptionsContext',  {async: true,  handler: this._onApiSetOptionsContext.bind(this)}], -            ['hide',               {async: false, handler: this._onApiHide.bind(this)}], -            ['isVisible',          {async: true,  handler: this._onApiIsVisibleAsync.bind(this)}], -            ['setVisibleOverride', {async: true,  handler: this._onApiSetVisibleOverride.bind(this)}], -            ['containsPoint',      {async: true,  handler: this._onApiContainsPoint.bind(this)}], -            ['showContent',        {async: true,  handler: this._onApiShowContent.bind(this)}], -            ['setCustomCss',       {async: false, handler: this._onApiSetCustomCss.bind(this)}], -            ['clearAutoPlayTimer', {async: false, handler: this._onApiClearAutoPlayTimer.bind(this)}], -            ['setContentScale',    {async: false, handler: this._onApiSetContentScale.bind(this)}] +            ['getOrCreatePopup',     {async: false, handler: this._onApiGetOrCreatePopup.bind(this)}], +            ['setOptionsContext',    {async: true,  handler: this._onApiSetOptionsContext.bind(this)}], +            ['hide',                 {async: false, handler: this._onApiHide.bind(this)}], +            ['isVisible',            {async: true,  handler: this._onApiIsVisibleAsync.bind(this)}], +            ['setVisibleOverride',   {async: true,  handler: this._onApiSetVisibleOverride.bind(this)}], +            ['containsPoint',        {async: true,  handler: this._onApiContainsPoint.bind(this)}], +            ['showContent',          {async: true,  handler: this._onApiShowContent.bind(this)}], +            ['setCustomCss',         {async: false, handler: this._onApiSetCustomCss.bind(this)}], +            ['clearAutoPlayTimer',   {async: false, handler: this._onApiClearAutoPlayTimer.bind(this)}], +            ['setContentScale',      {async: false, handler: this._onApiSetContentScale.bind(this)}], +            ['updateTheme',          {async: false, handler: this._onApiUpdateTheme.bind(this)}], +            ['setCustomOuterCss',    {async: false, handler: this._onApiSetCustomOuterCss.bind(this)}], +            ['setChildrenSupported', {async: false, handler: this._onApiSetChildrenSupported.bind(this)}]          ]);      } @@ -82,7 +85,11 @@ class PopupFactory {          }          const popup = new Popup(id, depth, this._frameId, ownerFrameId);          if (parent !== null) { -            popup.setParent(parent); +            if (parent.child !== null) { +                throw new Error('Parent popup already has a child'); +            } +            popup.parent = parent; +            parent.child = popup;          }          this._popups.set(id, popup);          popup.prepare(); @@ -151,6 +158,21 @@ class PopupFactory {          return popup.setContentScale(scale);      } +    _onApiUpdateTheme({id}) { +        const popup = this._getPopup(id); +        return popup.updateTheme(); +    } + +    _onApiSetCustomOuterCss({id, css, useWebExtensionApi}) { +        const popup = this._getPopup(id); +        return popup.setCustomOuterCss(css, useWebExtensionApi); +    } + +    _onApiSetChildrenSupported({id, value}) { +        const popup = this._getPopup(id); +        return popup.setChildrenSupported(value); +    } +      // Private functions      _getPopup(id) { @@ -167,8 +189,9 @@ class PopupFactory {      }      _convertPopupPointToRootPagePoint(popup, x, y) { -        if (popup.parent !== null) { -            const popupRect = popup.parent.getFrameRect(); +        const parent = popup.parent; +        if (parent !== null) { +            const popupRect = parent.getFrameRect();              x += popupRect.x;              y += popupRect.y;          } @@ -176,6 +199,7 @@ class PopupFactory {      }      _popupCanShow(popup) { -        return popup.parent === null || popup.parent.isVisibleSync(); +        const parent = popup.parent; +        return parent === null || parent.isVisibleSync();      }  }  |