diff options
| author | Fabien Pinckaers <fp@openerp.com> | 2018-08-05 22:31:32 +0200 |
|---|---|---|
| committer | Fabien Pinckaers <fp@openerp.com> | 2018-08-06 00:29:51 +0200 |
| commit | 7c8ab8a574cdef9f8fe3c2df3b2b56e9a03ef79b (patch) | |
| tree | 2f50331d7d6df5de8e87543adaf402cf2981177c /odoo | |
| parent | 0a6353216b0428941491fc8ebde58a47985955ea (diff) | |
[IMP] base: improve kanban of modules, cards not clickable (top-right menu)
[NEW] base: show enterprise module, with an 'upgrade' button
[IMP] *: some modules renaming, and improved copywriting of manifest
[IMP] *: utm on links to odoo.com
Diffstat (limited to 'odoo')
24 files changed, 271 insertions, 17 deletions
diff --git a/odoo/addons/base/__manifest__.py b/odoo/addons/base/__manifest__.py index 637656cb70a..d47214a5ce9 100644 --- a/odoo/addons/base/__manifest__.py +++ b/odoo/addons/base/__manifest__.py @@ -46,6 +46,7 @@ The kernel of Odoo, needed for all installation. 'views/ir_qweb_widget_templates.xml', 'views/ir_module_views.xml', 'data/ir_module_category_data.xml', + 'data/ir_module_module.xml', 'report/ir_module_reports.xml', 'report/ir_module_report_templates.xml', 'wizard/base_module_update_views.xml', diff --git a/odoo/addons/base/data/base_data.sql b/odoo/addons/base/data/base_data.sql index 67d2fb9ada5..760205e3a89 100644 --- a/odoo/addons/base/data/base_data.sql +++ b/odoo/addons/base/data/base_data.sql @@ -64,6 +64,7 @@ CREATE TABLE ir_module_module ( license character varying(32), sequence integer DEFAULT 100, auto_install boolean default False, + to_buy boolean default False, primary key(id) ); ALTER TABLE ir_module_module add constraint name_uniq unique (name); diff --git a/odoo/addons/base/data/ir_module_category_data.xml b/odoo/addons/base/data/ir_module_category_data.xml index 9ee32afd9dd..64ae170d68a 100644 --- a/odoo/addons/base/data/ir_module_category_data.xml +++ b/odoo/addons/base/data/ir_module_category_data.xml @@ -161,6 +161,13 @@ <field name="sequence">25</field> </record> + <record model="ir.module.category" id="module_category_helpdesk"> + <field name="name">After-Sales</field> + <field name="description">After-sales services</field> + <field name="sequence">2</field> + </record> + + <record model="ir.module.category" id="module_category_theme"> <field name="name">Theme</field> <field name="exclusive" eval="1"/> diff --git a/odoo/addons/base/data/ir_module_module.xml b/odoo/addons/base/data/ir_module_module.xml new file mode 100644 index 00000000000..0cd9dd6189a --- /dev/null +++ b/odoo/addons/base/data/ir_module_module.xml @@ -0,0 +1,239 @@ +<?xml version="1.0" encoding="utf-8"?> +<odoo> + <data> + + <record model="ir.module.module" id="base.module_web_studio"> + <field name="name">web_studio</field> + <field name="shortdesc">Studio</field> + <field name="sequence">17</field> + <field name="category_id" ref="base.module_category_administration"/> + <field name="application" eval="True"/> + <field name="summary">Create and Customize Applications</field> + <field name="license">OEEL-1</field> + <field name="author">Odoo S.A.</field> + <field name="to_buy" eval="True"/> + <field name="icon">/base/static/img/icons/web_studio.png</field> + <field name="website">https://odoo.com/page/studio?utm_source=db&utm_medium=module</field> + </record> + + <record model="ir.module.module" id="base.module_timesheet_grid"> + <field name="name">timesheet_grid</field> + <field name="shortdesc">Timesheets</field> + <field name="sequence">11</field> + <field name="category_id" ref="base.module_category_hr_timesheet"/> + <field name="application" eval="True"/> + <field name="summary">Track time & costs</field> + <field name="license">OEEL-1</field> + <field name="author">Odoo S.A.</field> + <field name="to_buy" eval="True"/> + <field name="icon">/base/static/img/icons/timesheet_grid.png</field> + <field name="website">https://www.odoo.com/page/timesheet-mobile-app?utm_source=db&utm_medium=module</field> + </record> + + <record model="ir.module.module" id="base.module_account_accountant"> + <field name="name">account_accountant</field> + <field name="sequence">15</field> + <field name="shortdesc">Accounting</field> + <field name="category_id" ref="base.module_category_accounting_and_finance"/> + <field name="application" eval="True"/> + <field name="summary">Accounting, Taxes, Budgets, Assets...</field> + <field name="license">OEEL-1</field> + <field name="author">Odoo S.A.</field> + <field name="to_buy" eval="True"/> + <field name="icon">/base/static/img/icons/account_accountant.png</field> + <field name="website">https://www.odoo.com/page/accounting?utm_source=db&utm_medium=module</field> + </record> + + <record model="ir.module.module" id="base.module_helpdesk"> + <field name="name">helpdesk</field> + <field name="shortdesc">Helpdesk</field> + <field name="sequence">65</field> + <field name="category_id" ref="base.module_category_helpdesk"/> + <field name="application" eval="True"/> + <field name="summary">Track support tickets</field> + <field name="license">OEEL-1</field> + <field name="author">Odoo S.A.</field> + <field name="to_buy" eval="True"/> + <field name="icon">/base/static/img/icons/helpdesk.png</field> + <field name="website">https://www.odoo.com/page/helpdesk?utm_source=db&utm_medium=module</field> + </record> + + <record model="ir.module.module" id="base.module_hr_appraisal"> + <field name="name">hr_appraisal</field> + <field name="shortdesc">Appraisal</field> + <field name="category_id" ref="base.module_category_hr_appraisal"/> + <field name="application" eval="True"/> + <field name="summary">Assess your employees</field> + <field name="license">OEEL-1</field> + <field name="author">Odoo S.A.</field> + <field name="to_buy" eval="True"/> + <field name="icon">/base/static/img/icons/hr_appraisal.png</field> + <field name="website">https://www.odoo.com/page/appraisal?utm_source=db&utm_medium=module</field> + </record> + + <record model="ir.module.module" id="base.module_marketing_automation"> + <field name="name">marketing_automation</field> + <field name="shortdesc">Marketing Automation</field> + <field name="sequence">111</field> + <field name="category_id" ref="base.module_category_mass_mailing"/> + <field name="application" eval="True"/> + <field name="summary">Build automated mailing campaigns</field> + <field name="license">OEEL-1</field> + <field name="author">Odoo S.A.</field> + <field name="to_buy" eval="True"/> + <field name="icon">/base/static/img/icons/marketing_automation.png</field> + <field name="website">https://www.odoo.com/page/marketing-automation?utm_source=db&utm_medium=module</field> + </record> + + <record model="ir.module.module" id="base.module_mrp_plm"> + <field name="name">mrp_plm</field> + <field name="shortdesc">Product Lifecycle Management (PLM)</field> + <field name="category_id" ref="base.module_category_manufacturing"/> + <field name="sequence">17</field> + <field name="application" eval="True"/> + <field name="summary">PLM, ECOs, Versions</field> + <field name="license">OEEL-1</field> + <field name="author">Odoo S.A.</field> + <field name="to_buy" eval="True"/> + <field name="icon">/base/static/img/icons/mrp_plm.png</field> + <field name="website">https://www.odoo.com/page/mrp-plm?utm_source=db&utm_medium=module</field> + </record> + + <record model="ir.module.module" id="base.module_quality_control"> + <field name="name">quality_control</field> + <field name="shortdesc">Quality</field> + <field name="sequence">17</field> + <field name="category_id" ref="base.module_category_manufacturing"/> + <field name="application" eval="True"/> + <field name="summary">Quality Alerts, Control Points</field> + <field name="license">OEEL-1</field> + <field name="author">Odoo S.A.</field> + <field name="to_buy" eval="True"/> + <field name="icon">/base/static/img/icons/quality_control.png</field> + <field name="website">https://www.odoo.com/page/quality-management-software?utm_source=db&utm_medium=module</field> + </record> + + <record model="ir.module.module" id="base.module_sale_ebay"> + <field name="name">sale_ebay</field> + <field name="shortdesc">eBay Connector</field> + <field name="category_id" ref="base.module_category_sales_management"/> + <field name="application" eval="True"/> + <field name="summary">Sell on eBay easily</field> + <field name="license">OEEL-1</field> + <field name="author">Odoo S.A.</field> + <field name="to_buy" eval="True"/> + <field name="icon">/base/static/img/icons/sale_ebay.png</field> + <field name="website">https://www.odoo.com/page/sales?utm_source=db&utm_medium=module</field> + </record> + + <record model="ir.module.module" id="base.module_project_forecast"> + <field name="name">project_forecast</field> + <field name="shortdesc">Project Forecast</field> + <field name="category_id" ref="base.module_category_project_management"/> + <field name="application" eval="True"/> + <field name="summary">Project forecasts, resource allocation</field> + <field name="license">OEEL-1</field> + <field name="author">Odoo S.A.</field> + <field name="to_buy" eval="True"/> + <field name="icon">/base/static/img/icons/project_forecast.png</field> + <field name="website">https://www.odoo.com/page/project?utm_source=db&utm_medium=module</field> + </record> + + <record model="ir.module.module" id="base.module_sale_subscription"> + <field name="name">sale_subscription</field> + <field name="shortdesc">Subscriptions</field> + <field name="category_id" ref="base.module_category_sales_management"/> + <field name="application" eval="True"/> + <field name="summary">MRR, Churn, Recurring payments</field> + <field name="license">OEEL-1</field> + <field name="author">Odoo S.A.</field> + <field name="to_buy" eval="True"/> + <field name="icon">/base/static/img/icons/sale_subscription.png</field> + <field name="website">https://www.odoo.com/page/subscriptions?utm_source=db&utm_medium=module</field> + </record> + + <record model="ir.module.module" id="base.module_sign"> + <field name="name">sign</field> + <field name="shortdesc">Sign</field> + <field name="category_id" ref="base.module_category_sign"/> + <field name="application" eval="True"/> + <field name="summary">Send documents to sign online</field> + <field name="license">OEEL-1</field> + <field name="author">Odoo S.A.</field> + <field name="to_buy" eval="True"/> + <field name="icon">/base/static/img/icons/sign.png</field> + <field name="website">https://www.odoo.com/page/sign?utm_source=db&utm_medium=module</field> + </record> + + <record model="ir.module.module" id="base.module_stock_barcode"> + <field name="name">stock_barcode</field> + <field name="shortdesc">Barcode</field> + <field name="sequence">14</field> + <field name="category_id" ref="base.module_category_warehouse_management"/> + <field name="application" eval="True"/> + <field name="summary">Barcode scanner for warehouses</field> + <field name="license">OEEL-1</field> + <field name="author">Odoo S.A.</field> + <field name="to_buy" eval="True"/> + <field name="icon">/base/static/img/icons/stock_barcode.png</field> + <field name="website">https://www.odoo.com/page/warehouse?utm_source=db&utm_medium=module</field> + </record> + + <record model="ir.module.module" id="base.module_voip"> + <field name="name">voip</field> + <field name="shortdesc">VoIP</field> + <field name="sequence">100</field> + <field name="category_id" ref="base.module_category_sales_management"/> + <field name="application" eval="True"/> + <field name="summary">Call using VoIP</field> + <field name="license">OEEL-1</field> + <field name="author">Odoo S.A.</field> + <field name="to_buy" eval="True"/> + <field name="icon">/base/static/img/icons/voip.png</field> + <field name="website">https://www.odoo.com/page/crm?utm_source=db&utm_medium=module</field> + </record> + + <record model="ir.module.module" id="base.module_website_calendar"> + <field name="name">website_calendar</field> + <field name="shortdesc">Appointments</field> + <field name="category_id" ref="base.module_category_sales_management"/> + <field name="application" eval="True"/> + <field name="summary">Online appointments scheduler</field> + <field name="license">OEEL-1</field> + <field name="author">Odoo S.A.</field> + <field name="to_buy" eval="True"/> + <field name="icon">/base/static/img/icons/website_calendar.png</field> + <field name="website">https://www.odoo.com/page/appointments?utm_source=db&utm_medium=module</field> + </record> + + <record model="ir.module.module" id="base.module_mrp_workorder"> + <field name="name">mrp_workorder</field> + <field name="sequence">16</field> + <field name="shortdesc">MRP II</field> + <field name="category_id" ref="base.module_category_manufacturing"/> + <field name="application" eval="True"/> + <field name="summary">Work Orders, Planing, Routing</field> + <field name="license">OEEL-1</field> + <field name="author">Odoo S.A.</field> + <field name="to_buy" eval="True"/> + <field name="icon">/base/static/img/icons/mrp_workorder.png</field> + <field name="website">https://www.odoo.com/page/mrp-cloud-software?utm_source=db&utm_medium=module</field> + </record> + + <record model="ir.module.module" id="base.module_web_mobile"> + <field name="name">web_mobile</field> + <field name="sequence">220</field> + <field name="shortdesc">Android & iPhone</field> + <field name="category_id" ref="base.module_category_administration"/> + <field name="application" eval="True"/> + <field name="summary">Support for Android & iOS Apps</field> + <field name="license">OEEL-1</field> + <field name="author">Odoo S.A.</field> + <field name="to_buy" eval="True"/> + <field name="icon">/base/static/img/icons/web_mobile.png</field> + <field name="website">https://play.google.com/store/apps/details?id=com.odoo.mobile</field> + </record> + + + </data> +</odoo> diff --git a/odoo/addons/base/models/ir_module.py b/odoo/addons/base/models/ir_module.py index caf9a51ca87..96ad1370808 100644 --- a/odoo/addons/base/models/ir_module.py +++ b/odoo/addons/base/models/ir_module.py @@ -292,6 +292,7 @@ class Module(models.Model): application = fields.Boolean('Application', readonly=True) icon = fields.Char('Icon URL') icon_image = fields.Binary(string='Icon', compute='_get_icon_image') + to_buy = fields.Boolean('Odoo Enterprise Module', default=False) _sql_constraints = [ ('name_uniq', 'UNIQUE (name)', 'The name of the module must be unique!'), @@ -685,7 +686,7 @@ class Module(models.Model): values = self.get_values_from_terp(terp) if mod: - updated_values = {} + updated_values = {'to_buy': False} for key in values: old = getattr(mod, key) updated = tools.ustr(values[key]) if isinstance(values[key], pycompat.string_types) else values[key] diff --git a/odoo/addons/base/static/img/icons/account_accountant.png b/odoo/addons/base/static/img/icons/account_accountant.png Binary files differnew file mode 100644 index 00000000000..9f0c5c6dad4 --- /dev/null +++ b/odoo/addons/base/static/img/icons/account_accountant.png diff --git a/odoo/addons/base/static/img/icons/helpdesk.png b/odoo/addons/base/static/img/icons/helpdesk.png Binary files differnew file mode 100644 index 00000000000..da83205e710 --- /dev/null +++ b/odoo/addons/base/static/img/icons/helpdesk.png diff --git a/odoo/addons/base/static/img/icons/hr_appraisal.png b/odoo/addons/base/static/img/icons/hr_appraisal.png Binary files differnew file mode 100644 index 00000000000..9728a68221a --- /dev/null +++ b/odoo/addons/base/static/img/icons/hr_appraisal.png diff --git a/odoo/addons/base/static/img/icons/marketing_automation.png b/odoo/addons/base/static/img/icons/marketing_automation.png Binary files differnew file mode 100644 index 00000000000..018a04f691e --- /dev/null +++ b/odoo/addons/base/static/img/icons/marketing_automation.png diff --git a/odoo/addons/base/static/img/icons/mrp_plm.png b/odoo/addons/base/static/img/icons/mrp_plm.png Binary files differnew file mode 100644 index 00000000000..4e74a62b9e0 --- /dev/null +++ b/odoo/addons/base/static/img/icons/mrp_plm.png diff --git a/odoo/addons/base/static/img/icons/mrp_workorder.png b/odoo/addons/base/static/img/icons/mrp_workorder.png Binary files differnew file mode 100644 index 00000000000..c8ecda7cfc2 --- /dev/null +++ b/odoo/addons/base/static/img/icons/mrp_workorder.png diff --git a/odoo/addons/base/static/img/icons/project_forecast.png b/odoo/addons/base/static/img/icons/project_forecast.png Binary files differnew file mode 100644 index 00000000000..cfa73818cd5 --- /dev/null +++ b/odoo/addons/base/static/img/icons/project_forecast.png diff --git a/odoo/addons/base/static/img/icons/quality_control.png b/odoo/addons/base/static/img/icons/quality_control.png Binary files differnew file mode 100644 index 00000000000..302e23dd4e8 --- /dev/null +++ b/odoo/addons/base/static/img/icons/quality_control.png diff --git a/odoo/addons/base/static/img/icons/sale_ebay.png b/odoo/addons/base/static/img/icons/sale_ebay.png Binary files differnew file mode 100644 index 00000000000..bd83ea1cb94 --- /dev/null +++ b/odoo/addons/base/static/img/icons/sale_ebay.png diff --git a/odoo/addons/base/static/img/icons/sale_subscription.png b/odoo/addons/base/static/img/icons/sale_subscription.png Binary files differnew file mode 100644 index 00000000000..d77f97979bc --- /dev/null +++ b/odoo/addons/base/static/img/icons/sale_subscription.png diff --git a/odoo/addons/base/static/img/icons/sign.png b/odoo/addons/base/static/img/icons/sign.png Binary files differnew file mode 100644 index 00000000000..332788e6294 --- /dev/null +++ b/odoo/addons/base/static/img/icons/sign.png diff --git a/odoo/addons/base/static/img/icons/stock_barcode.png b/odoo/addons/base/static/img/icons/stock_barcode.png Binary files differnew file mode 100644 index 00000000000..41297d6a972 --- /dev/null +++ b/odoo/addons/base/static/img/icons/stock_barcode.png diff --git a/odoo/addons/base/static/img/icons/timesheet_grid.png b/odoo/addons/base/static/img/icons/timesheet_grid.png Binary files differnew file mode 100644 index 00000000000..fa79f0327ff --- /dev/null +++ b/odoo/addons/base/static/img/icons/timesheet_grid.png diff --git a/odoo/addons/base/static/img/icons/voip.png b/odoo/addons/base/static/img/icons/voip.png Binary files differnew file mode 100644 index 00000000000..32e9057ddc2 --- /dev/null +++ b/odoo/addons/base/static/img/icons/voip.png diff --git a/odoo/addons/base/static/img/icons/web_mobile.png b/odoo/addons/base/static/img/icons/web_mobile.png Binary files differnew file mode 100644 index 00000000000..8eb7f8b4423 --- /dev/null +++ b/odoo/addons/base/static/img/icons/web_mobile.png diff --git a/odoo/addons/base/static/img/icons/web_studio.png b/odoo/addons/base/static/img/icons/web_studio.png Binary files differnew file mode 100644 index 00000000000..761e6d1fcfe --- /dev/null +++ b/odoo/addons/base/static/img/icons/web_studio.png diff --git a/odoo/addons/base/static/img/icons/website_calendar.png b/odoo/addons/base/static/img/icons/website_calendar.png Binary files differnew file mode 100644 index 00000000000..e03b8ac63b6 --- /dev/null +++ b/odoo/addons/base/static/img/icons/website_calendar.png diff --git a/odoo/addons/base/static/src/css/modules.css b/odoo/addons/base/static/src/css/modules.css index bbda49fd6cc..47216367186 100644 --- a/odoo/addons/base/static/src/css/modules.css +++ b/odoo/addons/base/static/src/css/modules.css @@ -13,12 +13,6 @@ padding-left: 85px; } -.oe_module_action .float-right { - position: absolute; - bottom: 8px; - right: 8px; -} - .oe_module_desc h4 { margin: 0; font-size: 13px; @@ -27,7 +21,7 @@ .oe_module_name > span { color: #999999; - height: 36px; + min-height: 26px; line-height: 1.2; display: inline-block; } diff --git a/odoo/addons/base/views/ir_module_views.xml b/odoo/addons/base/views/ir_module_views.xml index df5a741065a..2bb22ec606a 100644 --- a/odoo/addons/base/views/ir_module_views.xml +++ b/odoo/addons/base/views/ir_module_views.xml @@ -66,7 +66,8 @@ By <field name="author" class="oe_inline" placeholder="Author Name"/> </h3> <div> - <button name="button_immediate_install" states="uninstalled" string="Install" type="object" class="btn btn-primary"/> + <button name="button_immediate_install" string="Install" attrs="{'invisible': ['|', ('to_buy','=',True), ('state','!=', 'uninstalled')]}" type="object" class="btn btn-primary"/> + <a href="https://odoo.com/pricing?utm_source=db&utm_medium=module" class="btn btn-primary" states="uninstalled" attrs="{'invisible': [('to_buy','=',False)]}" role="button">Upgrade</a> <button name="button_immediate_upgrade" states="installed" string="Upgrade" type="object" class="btn btn-primary"/> <button name="button_discover" string="Discover" type="object" attrs="{'invisible':['|', ('website', '=', False), ('application', '=', False)]}" class="btn btn-secondary"/> <button name="button_uninstall_wizard" states="installed" string="Uninstall" type="object" class="btn btn-secondary"/> @@ -83,6 +84,7 @@ <field name="website" widget="url" attrs="{'invisible':[('website','=',False)]}"/> <field name="category_id" widget="selection"/> <field name="summary"/> + <field name="to_buy" invisible="1"/> </group> <group> <field name="name"/> @@ -139,6 +141,7 @@ <field name="shortdesc"/> <field name="name" groups="base.group_no_one"/> <field name="author"/> + <field name="website"/> <field name="installed_version"/> <field name="state"/> <field name="category_id" invisible="1"/> @@ -151,6 +154,7 @@ <field name="arch" type="xml"> <kanban create="false"> <field name="icon"/> + <field name="to_buy"/> <field name="name"/> <field name="state"/> <field name="summary"/> @@ -158,13 +162,14 @@ <field name="application"/> <templates> <t t-name="kanban-box"> - <div class="oe_module_vignette oe_kanban_global_click"> + <div class="oe_module_vignette"> <t t-set="installed" t-value="record.state.raw_value == 'installed'"/> <div t-if="installed or record.website.raw_value and record.application.raw_value" class="o_dropdown_kanban dropdown"> <a class="dropdown-toggle o-no-caret btn" data-toggle="dropdown" href="#" role="button" aria-label="Dropdown menu" title="Dropdown menu"> <span class="fa fa-ellipsis-v"/> </a> <div class="dropdown-menu" role="menu" aria-labelledby="dLabel"> + <a type="edit" class="dropdown-item">More Info</a> <a t-if="record.website.raw_value and record.application.raw_value" role="menuitem" class="dropdown-item" t-att-href="record.website.raw_value" target="_blank">Discover</a> <a t-if="installed" name="button_immediate_upgrade" type="object" role="menuitem" class="dropdown-item">Upgrade</a> <a t-if="installed" name="button_uninstall_wizard" type="object" role="menuitem" class="dropdown-item">Uninstall</a> @@ -172,16 +177,22 @@ </div> <img t-attf-src="#{record.icon.value}" class="oe_module_icon" alt="Icon"/> <div class="oe_module_desc" t-att-title="record.shortdesc.value"> - <h4 class="o_kanban_record_title"><field name="shortdesc"/></h4> + <h4 class="o_kanban_record_title"> + <field name="shortdesc"/>&nbsp; + <code groups="base.group_no_one"><field name="name"/></code> + </h4> <p class="oe_module_name"> - <t t-if="record.summary.raw_value"><field name="summary"/><br/></t> + <t t-if="record.summary.raw_value"><field name="summary"/></t> </p> <div class="oe_module_action"> - <code groups="base.group_no_one"><small><field name="name"/></small></code> - <button type="object" class="btn btn-primary float-right" name="button_immediate_install" states="uninstalled">Install</button> - <span t-if="installed" class="float-right text-muted mr8">Installed</span> - <button states="to remove" type="object" class="btn btn-primary float-right" name="button_uninstall_cancel">Cancel UnInstall</button> - <button states="to install" type="object" class="btn btn-primary float-right" name="button_install_cancel">Cancel Install</button> + + <button name="button_discover" type="object" attrs="{'invisible':[('website', '=', False)]}" class="btn btn-secondary float-right">Discover</button> + <button type="object" class="btn btn-primary" name="button_immediate_install" states="uninstalled" t-if="! record.to_buy.raw_value">Install</button> + <a href="https://odoo.com/pricing?utm_source=db&utm_medium=module" class="btn btn-info" states="uninstalled" t-if="record.to_buy.raw_value" role="button">Upgrade</a> + + <div t-if="installed" class="text-muted mt8 float-left">Installed</div> + <button states="to remove" type="object" class="btn btn-primary" name="button_uninstall_cancel">Cancel UnInstall</button> + <button states="to install" type="object" class="btn btn-primary" name="button_install_cancel">Cancel Install</button> </div> </div> </div> |
