diff options
author | Matt A. Tobin <email@mattatobin.com> | 2018-02-10 04:00:58 -0500 |
---|---|---|
committer | Matt A. Tobin <email@mattatobin.com> | 2018-02-10 04:00:58 -0500 |
commit | deea787c2efbb9c89caec8d9efc023ffafe75613 (patch) | |
tree | 6dbe55f7d24e67ecdcc821b8c5492f6c17217852 /toolkit/mozapps/extensions/content/selectAddons.xml | |
parent | 37d5300335d81cecbecc99812747a657588c63eb (diff) | |
download | UXP-deea787c2efbb9c89caec8d9efc023ffafe75613.tar UXP-deea787c2efbb9c89caec8d9efc023ffafe75613.tar.gz UXP-deea787c2efbb9c89caec8d9efc023ffafe75613.tar.lz UXP-deea787c2efbb9c89caec8d9efc023ffafe75613.tar.xz UXP-deea787c2efbb9c89caec8d9efc023ffafe75613.zip |
Import Tycho's Add-on Manager
Diffstat (limited to 'toolkit/mozapps/extensions/content/selectAddons.xml')
-rw-r--r-- | toolkit/mozapps/extensions/content/selectAddons.xml | 235 |
1 files changed, 235 insertions, 0 deletions
diff --git a/toolkit/mozapps/extensions/content/selectAddons.xml b/toolkit/mozapps/extensions/content/selectAddons.xml new file mode 100644 index 000000000..dbfc0d400 --- /dev/null +++ b/toolkit/mozapps/extensions/content/selectAddons.xml @@ -0,0 +1,235 @@ +<?xml version="1.0"?> + +<!-- 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/. --> + +<!DOCTYPE window [ +<!ENTITY % updateDTD SYSTEM "chrome://mozapps/locale/extensions/selectAddons.dtd"> +<!ENTITY % brandDTD SYSTEM "chrome://branding/locale/brand.dtd"> +%updateDTD; +%brandDTD; +]> + +<bindings xmlns="http://www.mozilla.org/xbl" + xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" + xmlns:xbl="http://www.mozilla.org/xbl"> + + <binding id="addon-select"> + <content> + <xul:hbox class="select-keep select-cell"> + <xul:checkbox class="addon-keep-checkbox" anonid="keep" + xbl:inherits="tooltiptext=name" + oncommand="document.getBindingParent(this).keepChanged();"/> + </xul:hbox> + <xul:hbox class="select-icon select-cell"> + <xul:image class="addon-icon" xbl:inherits="type"/> + </xul:hbox> + <xul:hbox class="select-name select-cell"> + <xul:label class="addon-name" crop="end" style="&select.name.style;" + xbl:inherits="xbl:text=name"/> + </xul:hbox> + <xul:hbox class="select-action select-cell"> + <xul:label class="addon-action-message" style="&select.action.style;" + xbl:inherits="xbl:text=action"/> + <xul:checkbox anonid="update" checked="true" class="addon-action-update" + oncommand="document.getBindingParent(this).updateChanged();" + style="&select.action.style;" xbl:inherits="label=action"/> + </xul:hbox> + <xul:hbox class="select-source select-cell"> + <xul:label class="addon-source" xbl:inherits="xbl:text=source"/> + </xul:hbox> + </content> + + <implementation> + <field name="_addon"/> + <field name="_disabled"/> + <field name="_install"/> + <field name="_wasActive"/> + <field name="_keep">document.getAnonymousElementByAttribute(this, "anonid", "keep");</field> + <field name="_update">document.getAnonymousElementByAttribute(this, "anonid", "update");</field> + <field name="_strings">document.getElementById("strings");</field> + + <property name="action" readonly="true"> + <getter><![CDATA[ + if (!this._keep.checked) { + if (this._wasActive) + return "disable"; + else + return null; + } + + if (this._addon.appDisabled && !this._install) + return "incompatible"; + + if (this._install && (AddonManager.shouldAutoUpdate(this._addon) || this._update.checked)) + return "update"; + + if (this._addon.permissions & AddonManager.PERM_CAN_ENABLE) + return "enable"; + + return null; + ]]></getter> + </property> + + <method name="setAddon"> + <parameter name="aAddon"/> + <parameter name="aInstall"/> + <parameter name="aWasActive"/> + <parameter name="aDistroInstalled"/> + <body><![CDATA[ + this._addon = aAddon; + this._install = aInstall; + this._wasActive = aWasActive; + + this.setAttribute("name", aAddon.name); + this.setAttribute("type", aAddon.type); + + // User and bundled add-ons default to staying enabled, + // others default to disabled. + switch (aAddon.scope) { + case AddonManager.SCOPE_PROFILE: + this._keep.checked = !aAddon.userDisabled; + if (aDistroInstalled) + this.setAttribute("source", this._strings.getString("source.bundled")); + else + this.setAttribute("source", this._strings.getString("source.profile")); + break; + default: + this._keep.checked = false; + this.setAttribute("source", this._strings.getString("source.other")); + } + + this.updateAction(); + ]]></body> + </method> + + <method name="setActionMessage"> + <body><![CDATA[ + if (!this._keep.checked) { + // If the user no longer wants this add-on then it is either being + // disabled or nothing is changing. Don't complicate matters by + // talking about updates for this case + + if (this._wasActive) + this.setAttribute("action", this._strings.getString("action.disabled")); + else + this.setAttribute("action", ""); + + this.removeAttribute("optionalupdate"); + return; + } + + if (this._addon.appDisabled && !this._install) { + // If the add-on is incompatible and there is no update available + // then it will remain disabled + + this.setAttribute("action", this._strings.getString("action.incompatible")); + + this.removeAttribute("optionalupdate"); + return; + } + + if (this._install) { + if (!AddonManager.shouldAutoUpdate(this._addon)) { + this.setAttribute("optionalupdate", "true"); + + // If manual updating for the add-on then display the right + // text depending on whether the update is required to make + // the add-on work or not + if (this._addon.appDisabled) + this.setAttribute("action", this._strings.getString("action.neededupdate")); + else + this.setAttribute("action", this._strings.getString("action.unneededupdate")); + return; + } + + this.removeAttribute("optionalupdate"); + + // If the update is needed to make the add-on compatible then + // say so otherwise just say nothing about it + if (this._addon.appDisabled) { + this.setAttribute("action", this._strings.getString("action.autoupdate")); + return; + } + } + else { + this.removeAttribute("optionalupdate"); + } + + // If the add-on didn't used to be active and it now is (via a + // compatibility update) or it can be enabled then the action is to + // enable the add-on + if (!this._wasActive && (this._addon.isActive || this._addon.permissions & AddonManager.PERM_CAN_ENABLE)) { + this.setAttribute("action", this._strings.getString("action.enabled")); + return; + } + + // In all other cases the add-on is simply remaining enabled + this.setAttribute("action", ""); + ]]></body> + </method> + + <method name="updateAction"> + <body><![CDATA[ + this.setActionMessage(); + let installingUpdate = this._install && + (AddonManager.shouldAutoUpdate(this._addon) || + this._update.checked); + + if (this._keep.checked && (!this._addon.appDisabled || installingUpdate)) + this.setAttribute("active", "true"); + else + this.removeAttribute("active"); + + gSelect.updateButtons(); + ]]></body> + </method> + + <method name="updateChanged"> + <body><![CDATA[ + this.updateAction(); + ]]></body> + </method> + + <method name="keepChanged"> + <body><![CDATA[ + this.updateAction(); + ]]></body> + </method> + + <method name="keep"> + <body><![CDATA[ + this._keep.checked = true; + this.keepChanged(); + ]]></body> + </method> + + <method name="disable"> + <body><![CDATA[ + this._keep.checked = false; + this.keepChanged(); + ]]></body> + </method> + + <method name="apply"> + <body><![CDATA[ + this._addon.userDisabled = !this._keep.checked; + + if (!this._install || !this._keep.checked) + return; + + if (AddonManager.shouldAutoUpdate(this._addon) || this._update.checked) + this._install.install(); + ]]></body> + </method> + </implementation> + </binding> + + <binding id="addon-confirm"> + <content> + <xul:image class="addon-icon" xbl:inherits="type"/> + <xul:label class="addon-name" xbl:inherits="xbl:text=name"/> + </content> + </binding> +</bindings> |