diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/Notify_min_js.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/Notify_min_js.xml index d2bb80cfe01df5b60ae1e6ea6876ba5cd50409f0..3ec79778d5aae42c0849ef040c27574e87261bf3 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/Notify_min_js.xml +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/Notify_min_js.xml @@ -242,7 +242,7 @@ </item> <item> <key> <string>serial</string> </key> - <value> <string>961.21883.33309.38348</string> </value> + <value> <string>961.21937.16299.41642</string> </value> </item> <item> <key> <string>state</string> </key> @@ -260,7 +260,7 @@ </tuple> <state> <tuple> - <float>1502445194.86</float> + <float>1507899148.22</float> <string>UTC</string> </tuple> </state> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_erp5_configurator_html.html b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_erp5_configurator_html.html new file mode 100644 index 0000000000000000000000000000000000000000..1db714aaf40bba49c726ca38e83463ee67cce173 --- /dev/null +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_erp5_configurator_html.html @@ -0,0 +1,35 @@ +<!doctype html> +<html> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + + <title>OfficeJS Monitor Page ERP5 Jio Config</title> + + <script src="rsvp.js"></script> + <script src="renderjs.js"></script> + <script src="gadget_erp5_page_ojsm_erp5_configurator.js"></script> + </head> + + <body> + <article class="ui-content ui-body-c"> + <section class="ui-content-header-plain"> + <h3 class="ui-content-title ui-body-c"> + <span class="ui-icon ui-icon-custom ui-icon-database"> </span> + Your ERP5 Connection parameters + </h3> + </section> + <p>You have to be logged in this ERP5 prior to synchronising</p> + </article> + <br> + <form class="save_form ui-body-c" novalidate> + <button type="submit" class="ui-btn ui-btn-b ui-btn-inline + ui-icon-edit ui-btn-icon-right ui-screen-hidden"></button> + <div data-gadget-url="gadget_erp5_form.html" + data-gadget-scope="form_view" + data-gadget-sandbox="public"> + </div> + </form> + <br> + </body> +</html> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_erp5_configurator_html.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_erp5_configurator_html.xml new file mode 100644 index 0000000000000000000000000000000000000000..e3cc07bcc6526cb58f204aee93cd68aeebe05012 --- /dev/null +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_erp5_configurator_html.xml @@ -0,0 +1,332 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Web Page" module="erp5.portal_type"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_Access_contents_information_Permission</string> </key> + <value> + <tuple> + <string>Anonymous</string> + <string>Assignee</string> + <string>Assignor</string> + <string>Associate</string> + <string>Auditor</string> + <string>Manager</string> + <string>Owner</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Add_portal_content_Permission</string> </key> + <value> + <tuple> + <string>Assignee</string> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Change_local_roles_Permission</string> </key> + <value> + <tuple> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Modify_portal_content_Permission</string> </key> + <value> + <tuple> + <string>Assignee</string> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_View_Permission</string> </key> + <value> + <tuple> + <string>Anonymous</string> + <string>Assignee</string> + <string>Assignor</string> + <string>Associate</string> + <string>Auditor</string> + <string>Manager</string> + <string>Owner</string> + </tuple> + </value> + </item> + <item> + <key> <string>categories</string> </key> + <value> + <tuple> + <string>classification/collaborative/team</string> + </tuple> + </value> + </item> + <item> + <key> <string>content_md5</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>text/html</string> </value> + </item> + <item> + <key> <string>default_reference</string> </key> + <value> <string>gadget_erp5_page_ojsm_erp5_configurator.html</string> </value> + </item> + <item> + <key> <string>description</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>gadget_erp5_page_ojsm_erp5_configurator_html</string> </value> + </item> + <item> + <key> <string>language</string> </key> + <value> <string>en</string> </value> + </item> + <item> + <key> <string>portal_type</string> </key> + <value> <string>Web Page</string> </value> + </item> + <item> + <key> <string>short_title</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string>Gadget OJS Monitor ERP5 Configurator</string> </value> + </item> + <item> + <key> <string>version</string> </key> + <value> <string>001</string> </value> + </item> + <item> + <key> <string>workflow_history</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="2" aka="AAAAAAAAAAI="> + <pickle> + <global name="PersistentMapping" module="Persistence.mapping"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> + <dictionary> + <item> + <key> <string>document_publication_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> + </value> + </item> + <item> + <key> <string>edit_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> + </value> + </item> + <item> + <key> <string>processing_status_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent> + </value> + </item> + </dictionary> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="3" aka="AAAAAAAAAAM="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> + </pickle> + <pickle> + <tuple> + <none/> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>publish_alive</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1508247471.55</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + <item> + <key> <string>validation_state</string> </key> + <value> <string>published_alive</string> </value> + </item> + </dictionary> + </list> + </tuple> + </pickle> + </record> + <record id="4" aka="AAAAAAAAAAQ="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> + </pickle> + <pickle> + <tuple> + <none/> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>edit</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>serial</string> </key> + <value> <string>962.54628.50882.58453</string> </value> + </item> + <item> + <key> <string>state</string> </key> + <value> <string>current</string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1508258766.54</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + </dictionary> + </list> + </tuple> + </pickle> + </record> + <record id="5" aka="AAAAAAAAAAU="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> + </pickle> + <pickle> + <tuple> + <none/> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>detect_converted_file</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>external_processing_state</string> </key> + <value> <string>converted</string> </value> + </item> + <item> + <key> <string>serial</string> </key> + <value> <string>0.0.0.0</string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1508247428.16</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + </dictionary> + </list> + </tuple> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_erp5_configurator_js.js b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_erp5_configurator_js.js new file mode 100644 index 0000000000000000000000000000000000000000..43ce9a65a0e4efbac3c0ec9151a7dffa883c8965 --- /dev/null +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_erp5_configurator_js.js @@ -0,0 +1,92 @@ +/*global window, rJS */ +/*jslint nomen: true, indent: 2, maxerr: 3*/ +(function (window, rJS) { + "use strict"; + + rJS(window) + .setState({ + erp5_url: "https://vifib.erp5.net/web_site_module/renderjs_runner" + }) + ///////////////////////////////////////////////////////////////// + // Acquired methods + ///////////////////////////////////////////////////////////////// + .declareAcquiredMethod("updateHeader", "updateHeader") + .declareAcquiredMethod("getUrlFor", "getUrlFor") + .declareAcquiredMethod("redirect", "redirect") + .declareAcquiredMethod("setSetting", "setSetting") + + ///////////////////////////////////////// + // Form submit + ///////////////////////////////////////// + .onEvent('submit', function () { + var gadget = this, + master_url; + return gadget.getDeclaredGadget('form_view') + .push(function (form_gadget) { + return form_gadget.getContent(); + }) + .push(function (content) { + master_url = content.erp5_url + "/hateoas/"; + return gadget.setSetting("hateoas_url", master_url); + }) + .push(function () { + return gadget.redirect({command: "display", options: { + page: "ojsm_import_export", + auto_sync: "erp5", + url: master_url + }}); + }); + }) + + .declareMethod("triggerSubmit", function () { + return this.element.querySelector('button[type="submit"]').click(); + }) + + .declareMethod("render", function () { + var gadget = this; + + return gadget.getDeclaredGadget('form_view') + .push(function (form_gadget) { + return form_gadget.render({ + erp5_document: { + "_embedded": {"_view": { + "my_erp5_url": { + "description": "", + "title": "Connection Url", + "default": gadget.state.erp5_url, + "css_class": "", + "required": 1, + "editable": 1, + "key": "erp5_url", + "hidden": 0, + "type": "StringField" + } + }}, + "_links": { + "type": { + // form_list display portal_type in header + name: "" + } + } + }, + form_definition: { + group_list: [[ + "top", + [["my_erp5_url"]] + ]] + } + }); + }) + .push(function () { + return gadget.getUrlFor({command: 'display', options: {page: 'ojsm_import_export'}}); + }) + .push(function (url) { + return gadget.updateHeader({ + page_title: "Connect To ERP5 Storage", + back_url: url, + submit_action: true, + panel_action: false + }); + }); + }); +}(window, rJS)); diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_erp5_configurator_js.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_erp5_configurator_js.xml new file mode 100644 index 0000000000000000000000000000000000000000..6c1a4bab8f11a414b1f7b44a532356d8fbb2ca9c --- /dev/null +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_erp5_configurator_js.xml @@ -0,0 +1,340 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Web Script" module="erp5.portal_type"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_Access_contents_information_Permission</string> </key> + <value> + <tuple> + <string>Anonymous</string> + <string>Assignee</string> + <string>Assignor</string> + <string>Associate</string> + <string>Auditor</string> + <string>Manager</string> + <string>Owner</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Add_portal_content_Permission</string> </key> + <value> + <tuple> + <string>Assignee</string> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Change_local_roles_Permission</string> </key> + <value> + <tuple> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Modify_portal_content_Permission</string> </key> + <value> + <tuple> + <string>Assignee</string> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_View_Permission</string> </key> + <value> + <tuple> + <string>Anonymous</string> + <string>Assignee</string> + <string>Assignor</string> + <string>Associate</string> + <string>Auditor</string> + <string>Manager</string> + <string>Owner</string> + </tuple> + </value> + </item> + <item> + <key> <string>categories</string> </key> + <value> + <tuple> + <string>classification/collaborative/team</string> + </tuple> + </value> + </item> + <item> + <key> <string>content_md5</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>text/javascript</string> </value> + </item> + <item> + <key> <string>default_reference</string> </key> + <value> <string>gadget_erp5_page_ojsm_erp5_configurator.js</string> </value> + </item> + <item> + <key> <string>description</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>gadget_erp5_page_ojsm_erp5_configurator_js</string> </value> + </item> + <item> + <key> <string>language</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>portal_type</string> </key> + <value> <string>Web Script</string> </value> + </item> + <item> + <key> <string>short_title</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string>OfficeJS Monitoring Page ERP5 Configurator JS</string> </value> + </item> + <item> + <key> <string>url_string</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>version</string> </key> + <value> <string>001</string> </value> + </item> + <item> + <key> <string>workflow_history</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="2" aka="AAAAAAAAAAI="> + <pickle> + <global name="PersistentMapping" module="Persistence.mapping"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> + <dictionary> + <item> + <key> <string>document_publication_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> + </value> + </item> + <item> + <key> <string>edit_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> + </value> + </item> + <item> + <key> <string>processing_status_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent> + </value> + </item> + </dictionary> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="3" aka="AAAAAAAAAAM="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> + </pickle> + <pickle> + <tuple> + <none/> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>publish_alive</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1508251150.88</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + <item> + <key> <string>validation_state</string> </key> + <value> <string>published_alive</string> </value> + </item> + </dictionary> + </list> + </tuple> + </pickle> + </record> + <record id="4" aka="AAAAAAAAAAQ="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> + </pickle> + <pickle> + <tuple> + <none/> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>edit</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>serial</string> </key> + <value> <string>962.55724.5208.57309</string> </value> + </item> + <item> + <key> <string>state</string> </key> + <value> <string>current</string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1508343284.75</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + </dictionary> + </list> + </tuple> + </pickle> + </record> + <record id="5" aka="AAAAAAAAAAU="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> + </pickle> + <pickle> + <tuple> + <none/> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>detect_converted_file</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>external_processing_state</string> </key> + <value> <string>converted</string> </value> + </item> + <item> + <key> <string>serial</string> </key> + <value> <string>0.0.0.0</string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1508247692.75</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + </dictionary> + </list> + </tuple> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_hosting_subscription_list_html.html b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_hosting_subscription_list_html.html new file mode 100644 index 0000000000000000000000000000000000000000..e48b703ab44871ff11001a1b0db84e8d82339efe --- /dev/null +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_hosting_subscription_list_html.html @@ -0,0 +1,20 @@ +<!doctype html> +<html> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + + <title>Monitoring Hosting Subscription List</title> + + <link href="gadget_officejs_monitoring_custom.css" rel="stylesheet" type="text/css"/> + + <script src="rsvp.js"></script> + <script src="renderjs.js"></script> + + <script src="gadget_erp5_page_ojsm_hosting_subscription_list.js"></script> + </head> + + <body> + <div data-gadget-url="gadget_erp5_pt_form_list.html" data-gadget-scope="form_list"></div> + </body> +</html> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_hosting_subscription_list_html.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_hosting_subscription_list_html.xml similarity index 96% rename from bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_hosting_subscription_list_html.xml rename to bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_hosting_subscription_list_html.xml index 03f407a71d4df9d98a0f24cb3c869189126df24f..051ce28b4f3399da838a143abcabff8ab0a49217 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_hosting_subscription_list_html.xml +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_hosting_subscription_list_html.xml @@ -80,7 +80,7 @@ </item> <item> <key> <string>default_reference</string> </key> - <value> <string>gadget_monitoring_hosting_subscription_list.html</string> </value> + <value> <string>gadget_erp5_page_ojsm_hosting_subscription_list.html</string> </value> </item> <item> <key> <string>description</string> </key> @@ -90,7 +90,7 @@ </item> <item> <key> <string>id</string> </key> - <value> <string>gadget_monitoring_hosting_subscription_list_html</string> </value> + <value> <string>gadget_erp5_page_ojsm_hosting_subscription_list_html</string> </value> </item> <item> <key> <string>language</string> </key> @@ -243,7 +243,7 @@ </item> <item> <key> <string>serial</string> </key> - <value> <string>961.6384.703.48554</string> </value> + <value> <string>962.48791.22929.44424</string> </value> </item> <item> <key> <string>state</string> </key> @@ -261,7 +261,7 @@ </tuple> <state> <tuple> - <float>1501862298.92</float> + <float>1507902208.04</float> <string>UTC</string> </tuple> </state> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_hosting_subscription_list_js.js b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_hosting_subscription_list_js.js new file mode 100644 index 0000000000000000000000000000000000000000..68238183673996f5d2e10877c782a0fe6646a629 --- /dev/null +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_hosting_subscription_list_js.js @@ -0,0 +1,246 @@ +/*global window, rJS, RSVP */ +/*jslint nomen: true, indent: 2, maxerr: 3*/ +(function (window, rJS, RSVP) { + "use strict"; + + var gadget_klass = rJS(window); + + function getHostingData(gadget, filter) { + // optimized way to fetch hosting subscription list + var hosting_dict = {}, + instance_dict = {}, + total_rows = 0; + return gadget.jio_allDocs(filter) + .push(function (result) { + var i; + total_rows = result.data.total_rows; + for (i = 0; i < result.data.total_rows; i += 1) { + hosting_dict[result.data.rows[i].id] = { + id: result.data.rows[i].id, + value: { + url: result.data.rows[i].value.url, + status: "WARNING", + date: 'Not Synchronized', + title: result.data.rows[i].value.title, + amount: 0 + } + }; + } + return gadget.jio_allDocs({ + query: '(portal_type:"opml-outline") OR (portal_type:"global")', + select_list: [ + "parent_url", + "status", + "parent_id", + "date", + "portal_type" + ] + }); + }) + .push(function (result) { + var i, + key, + item, + row_list = []; + for (i = 0; i < result.data.total_rows; i += 1) { + if (result.data.rows[i].value.portal_type === 'opml-outline') { + if (hosting_dict.hasOwnProperty(result.data.rows[i].value.parent_url)) { + instance_dict[result.data.rows[i].id] = { + parent_id: result.data.rows[i].value.parent_url + }; + } + } + } + for (i = 0; i < result.data.total_rows; i += 1) { + if (result.data.rows[i].value.portal_type === 'global') { + if (instance_dict.hasOwnProperty(result.data.rows[i].value.parent_id)) { + instance_dict[result.data.rows[i].value.parent_id].date = + result.data.rows[i].value.date; + instance_dict[result.data.rows[i].value.parent_id].status = + result.data.rows[i].value.status; + } + } + } + //calculate hosting subscription status + for (key in instance_dict) { + if (instance_dict.hasOwnProperty(key)) { + item = hosting_dict[instance_dict[key].parent_id].value; + item.amount += 1; + if (item.status !== "ERROR") { + item.status = instance_dict[key].status || "WARNING"; + } + item.date = instance_dict[key].date || 'Not Synchronized'; + item.synced = item.status !== "WARNING" ? "YES" : "NO"; + } + } + for (key in hosting_dict) { + if (hosting_dict.hasOwnProperty(key)) { + row_list.push(hosting_dict[key]); + } + } + return {data: {total_rows: total_rows, rows: row_list}}; + }); + } + + gadget_klass + .declareAcquiredMethod("getSetting", "getSetting") + .declareAcquiredMethod("redirect", "redirect") + .declareAcquiredMethod("reload", "reload") + .declareAcquiredMethod("getUrlFor", "getUrlFor") + .declareAcquiredMethod("updateHeader", "updateHeader") + .declareAcquiredMethod("renderApplication", "renderApplication") + .declareAcquiredMethod('jio_allDocs', 'jio_allDocs') + + .allowPublicAcquisition("getUrlFor", function (param_list) { + if (param_list[0].options.jio_key !== undefined && + param_list[0].options.query.indexOf('portal_type:"opml"') !== -1) { + param_list[0].options.page = "ojsm_hosting_subscription_view"; + param_list[0].options.opml_key = param_list[0].options.jio_key; + } + return this.getUrlFor(param_list[0]); + }) + + .allowPublicAcquisition("jio_allDocs", function (param_list) { + var gadget = this; + return getHostingData(gadget, param_list[0]) + .push(function (result) { + var i, value, len = result.data.total_rows; + for (i = 0; i < len; i += 1) { + if (result.data.rows[i].value.hasOwnProperty("date")) { + result.data.rows[i].value.date = { + allow_empty_time: 0, + ampm_time_style: 0, + css_class: "date_field", + date_only: 0, + description: "The Date", + editable: 0, + hidden: 0, + hidden_day_is_last_day: 0, + "default": new Date(result.data.rows[i].value.date).toUTCString(), + key: "date", + required: 0, + timezone_style: 0, + title: "Status Date", + type: "DateTimeField" + }; + result.data.rows[i].value["listbox_uid:list"] = { + key: "listbox_uid:list", + value: 2713 + }; + } + if (result.data.rows[i].value.hasOwnProperty("status")) { + result.data.rows[i].value.status = { + css_class: "", + description: "The Status", + hidden: 0, + "default": result.data.rows[i].value.status, + key: "status", + url: "gadget_erp5_field_status.html", + title: "Status", + type: "GadgetField" + }; + result.data.rows[i].value["listbox_uid:list"] = { + key: "listbox_uid:list", + value: 2713 + }; + } + } + return result; + }); + }) + + ///////////////////////////////////////////////////////////////// + // declared methods + ///////////////////////////////////////////////////////////////// + + .declareMethod("triggerSubmit", function () { + var argument_list = arguments; + return this.getDeclaredGadget('form_list') + .push(function (gadget) { + return gadget.triggerSubmit.apply(gadget, argument_list); + }); + }) + .declareMethod("render", function (options) { + return this.changeState({ + options: options, + latest_reload_time: new Date().getTime() + }); + }) + .onStateChange(function () { + var gadget = this, + lines_limit; + return new RSVP.Queue() + .push(function () { + return gadget.getSetting("listbox_lines_limit", 100); + }) + .push(function (listbox_lines_limit) { + lines_limit = listbox_lines_limit; + return gadget.getDeclaredGadget('form_list'); + }) + .push(function (form_list) { + var column_list = [ + ['title', 'Hosting Subscription'], + ['amount', 'Instance Amount'], + ['date', 'Status Date'], + ['synced', 'Synced?'], + ['status', 'Status'] + ]; + return form_list.render({ + erp5_document: { + "_embedded": {"_view": { + "listbox": { + "column_list": column_list, + "show_anchor": 0, + "default_params": {}, + "editable": 0, + "editable_column_list": [], + "key": "hosting_subscription_listbox", + "lines": lines_limit, + "list_method": "portal_catalog", + "query": "urn:jio:allDocs?query=%28portal_type%3A%22" + + "opml" + "%22%29AND%28active%3A%22" + + "true" + "%22%29", + "portal_type": [], + "search_column_list": [['title', 'Hosting Subscription']], + "sort_column_list": [['title', 'Hosting Subscription']], + "sort": [["title", "ascending"]], + "title": "Hosting Subscriptions", + "command": "index", + "type": "ListBox" + } + }}, + "_links": { + "type": { + // form_list display portal_type in header + name: "" + } + } + }, + form_definition: { + group_list: [[ + "bottom", + [["listbox"]] + ]] + } + }); + }) + .push(function (result) { + return gadget.updateHeader({ + page_title: "Hosting Subscriptions Status", + filter_action: true + }); + }); + }) + + .onLoop(function () { + var gadget = this; + + return gadget.getSetting('latest_sync_time') + .push(function (latest_sync_time) { + if (latest_sync_time > gadget.state.latest_reload_time) { + return gadget.changeState({latest_reload_time: new Date().getTime()}); + } + }); + }, 30000); + +}(window, rJS, RSVP)); \ No newline at end of file diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_hosting_subscription_list_js.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_hosting_subscription_list_js.xml similarity index 96% rename from bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_hosting_subscription_list_js.xml rename to bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_hosting_subscription_list_js.xml index d97a956e819004e23cd1797cf64b9a5740b35b5f..a261a9e887151b32855fb207f3aac88b28651b75 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_hosting_subscription_list_js.xml +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_hosting_subscription_list_js.xml @@ -80,7 +80,7 @@ </item> <item> <key> <string>default_reference</string> </key> - <value> <string>gadget_monitoring_hosting_subscription_list.js</string> </value> + <value> <string>gadget_erp5_page_ojsm_hosting_subscription_list.js</string> </value> </item> <item> <key> <string>description</string> </key> @@ -90,7 +90,7 @@ </item> <item> <key> <string>id</string> </key> - <value> <string>gadget_monitoring_hosting_subscription_list_js</string> </value> + <value> <string>gadget_erp5_page_ojsm_hosting_subscription_list_js</string> </value> </item> <item> <key> <string>language</string> </key> @@ -108,7 +108,7 @@ </item> <item> <key> <string>title</string> </key> - <value> <string>Monitoring Hosting Subscription list Js</string> </value> + <value> <string>Monitoring Hosting Subscription list JS</string> </value> </item> <item> <key> <string>version</string> </key> @@ -239,7 +239,7 @@ </item> <item> <key> <string>serial</string> </key> - <value> <string>961.36732.50199.26692</string> </value> + <value> <string>963.19077.52757.17169</string> </value> </item> <item> <key> <string>state</string> </key> @@ -257,7 +257,7 @@ </tuple> <state> <tuple> - <float>1503333754.52</float> + <float>1510052055.87</float> <string>UTC</string> </tuple> </state> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_hosting_subscription_view_html.html b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_hosting_subscription_view_html.html new file mode 100644 index 0000000000000000000000000000000000000000..e452ecc271c17c044a14da748d35fa4890fcfacf --- /dev/null +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_hosting_subscription_view_html.html @@ -0,0 +1,39 @@ +<!doctype html> +<html> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + + <title>Monitoring Hosting Subscription View</title> + + <link href="gadget_officejs_monitoring_custom.css" rel="stylesheet" type="text/css"/> + + <script src="rsvp.js"></script> + <script src="renderjs.js"></script> + <script src="gadget_erp5_page_ojsm_hosting_subscription_view.js"></script> + + </head> + + <body> + <br/> + <article class="ui-content ui-body-c"> + <section class="ui-content-header-plain"> + <h3 class="ui-content-title ui-body-c"> + <span class="ui-icon ui-icon-custom ui-icon-cubes"> </span> + <span class="hosting-title"></span> + </h3> + </section> + <section class="ui-body-c ui-content-section"> + <p class="text-info">To change monitor password, go to <i>Monitoring Configuration</i>.</p> + <div class="parameters-box"> + </div> + </section> + </article> + <div class="bottom"> + <div data-gadget-url="gadget_erp5_form.html" + data-gadget-scope="form_list" + data-gadget-sandbox="public"> + </div> + </div> + </body> +</html> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_hosting_subscription_view_html.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_hosting_subscription_view_html.xml similarity index 97% rename from bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_hosting_subscription_view_html.xml rename to bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_hosting_subscription_view_html.xml index 6a68c32b1c96a486762770492f9293f229cacc8b..2d2e310fbe1604ce1c7135979fa449eae1860e44 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_hosting_subscription_view_html.xml +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_hosting_subscription_view_html.xml @@ -83,7 +83,7 @@ </item> <item> <key> <string>default_reference</string> </key> - <value> <string>gadget_monitoring_hosting_subscription_view.html</string> </value> + <value> <string>gadget_erp5_page_ojsm_hosting_subscription_view.html</string> </value> </item> <item> <key> <string>description</string> </key> @@ -93,7 +93,7 @@ </item> <item> <key> <string>id</string> </key> - <value> <string>gadget_monitoring_hosting_subscription_view_html</string> </value> + <value> <string>gadget_erp5_page_ojsm_hosting_subscription_view_html</string> </value> </item> <item> <key> <string>language</string> </key> @@ -246,7 +246,7 @@ </item> <item> <key> <string>serial</string> </key> - <value> <string>961.40879.58115.22357</string> </value> + <value> <string>962.46060.41528.54152</string> </value> </item> <item> <key> <string>state</string> </key> @@ -264,7 +264,7 @@ </tuple> <state> <tuple> - <float>1503583096.3</float> + <float>1507901514.08</float> <string>UTC</string> </tuple> </state> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_hosting_subscription_view_js.js b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_hosting_subscription_view_js.js new file mode 100644 index 0000000000000000000000000000000000000000..9bdf4d3b4dd6749a6759bdc971fb2f94106ea7b8 --- /dev/null +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_hosting_subscription_view_js.js @@ -0,0 +1,309 @@ +/*global window, rJS, document, Handlebars, Rusha */ +/*jslint nomen: true, indent: 2, maxerr: 3*/ +(function (window, rJS, document, Handlebars, Rusha) { + "use strict"; + + var gadget_klass = rJS(window), + templater = gadget_klass.__template_element, + rusha = new Rusha(); + + function generateHash(str) { + return rusha.digestFromString(str); + } + + gadget_klass + .setState({ + ouline_list: "", + opml: "" + }) + .ready(function (g) { + g.props = {}; + g.props.parameter_form_list = []; + }) + .declareAcquiredMethod("redirect", "redirect") + .declareAcquiredMethod("getSetting", "getSetting") + .declareAcquiredMethod("setSetting", "setSetting") + .declareAcquiredMethod("updateHeader", "updateHeader") + .declareAcquiredMethod('jio_allDocs', 'jio_allDocs') + .declareAcquiredMethod('jio_get', 'jio_get') + .declareAcquiredMethod("getUrlFor", "getUrlFor") + .declareAcquiredMethod("notifySubmitting", "notifySubmitting") + .declareAcquiredMethod("notifySubmitted", 'notifySubmitted') + //.declareAcquiredMethod("notifyError", 'notifyError') + + .allowPublicAcquisition("jio_allDocs", function (param_list) { + var gadget = this; + param_list[0].select_list.push('_links'); + param_list[0].select_list.push('parameters'); + return gadget.jio_allDocs(param_list[0]) + .push(function (result) { + return gadget.changeState({instance_dict: result}); + }) + .push(function () { + var result = gadget.state.instance_dict, + i, value, len = result.data.total_rows; + for (i = 0; i < len; i += 1) { + if (result.data.rows[i].value.hasOwnProperty("date")) { + value = new Date(result.data.rows[i].value.date); + result.data.rows[i].value.date = { + allow_empty_time: 0, + ampm_time_style: 0, + css_class: "date_field", + date_only: 0, + description: "The Date", + editable: 0, + hidden: 0, + hidden_day_is_last_day: 0, + "default": value.toUTCString(), + key: "date", + required: 0, + timezone_style: 0, + title: "Status Date", + type: "DateTimeField" + }; + result.data.rows[i].value["listbox_uid:list"] = { + key: "listbox_uid:list", + value: 2713 + }; + } + if (result.data.rows[i].value.hasOwnProperty("status")) { + value = result.data.rows[i].value.status; + result.data.rows[i].value.status = { + css_class: "", + description: "The Status", + hidden: 0, + "default": value, + key: "status", + url: "gadget_erp5_field_status.html", + title: "Status", + type: "GadgetField" + }; + result.data.rows[i].value["listbox_uid:list"] = { + key: "listbox_uid:list", + value: 2713 + }; + } + } + return result; + }); + }) + + .declareMethod("render", function (options) { + var gadget = this; + return gadget.updateHeader({ + title: 'Hosting Subscriptions View' + }) + .push(function () { + return gadget.jio_get(options.opml_key); + }) + .push(function (opml_doc) { + return gadget.changeState({opml: opml_doc}); + }) + .push(function () { + return gadget.jio_allDocs({ + query: '(portal_type:"opml-outline") AND (parent_id:"' + + generateHash(options.opml_key) + '")' + }); + }) + .push(function (ouline_list) { + return gadget.changeState({ouline_list: ouline_list.data.rows}); + }); + }) + + .onEvent('submit', function () { + var gadget = this, + i, + promise_list = []; + for (i = 0; i < gadget.props.parameter_form_list.length; i += 1) { + promise_list.push(gadget.props.parameter_form_list[i].getLiveParameters()); + } + return gadget.notifySubmitting() + .push(function () { + return RSVP.all(promise_list); + }) + .push(function (result_list) { + var i, + ok_to_save = true, + promise_list = []; + for (i = 0; i < result_list.length; i += 1) { + if (result_list[i].status !== 'OK') { + ok_to_save = false; + break; + } + promise_list.push(gadget.props.parameter_form_list[i].saveContent()); + } + if (ok_to_save) { + return RSVP.all(promise_list); + } + // One of storage failed, cancel save to be consistent + return result_list; + }) + .push(function (result_list) { + var msg_list = [], + i; + for (i = 0; i < result_list.length; i += 1) { + if (result_list[i].status !== "OK") { + msg_list.push(result_list[i].stage + " from " + result_list[i].url); + } + } + if (msg_list.length > 0) { + return RSVP.all([ + gadget.notifySubmitted('Error while ' + msg_list.join('; ')) + ]); + } + return RSVP.all([ + gadget.notifySubmitted('Parameters Updated') + ]); + }); + }) + + .declareMethod("triggerSubmit", function () { + return this.element.querySelector('button[type="submit"]').click(); + }) + + .onStateChange(function (modification_dict) { + var gadget = this; + if (!modification_dict.hasOwnProperty('ouline_list') && + !modification_dict.hasOwnProperty('instance_dict')) { + return; + } + if (modification_dict.hasOwnProperty('instance_dict')) { + // render parameter form + + return new RSVP.Queue() + .push(function () { + var promise_list = [], + i, + element = gadget.element.querySelector('.parameters-box'), + gadget_element; + + //cleanup + while (element.hasChildNodes()) { + element.removeChild(element.lastChild); + } + + for (i = 0; i < gadget.state.instance_dict.data.total_rows; i += 1) { + gadget_element = document.createElement("div"); + element.appendChild(gadget_element); + promise_list.push( + gadget.declareGadget("gadget_officejs_monitoring_parameter_view.html", + { + element: gadget_element, + scope: 'p_' + gadget.state.instance_dict.data.rows[i].id, + sandbox: "public" + } + ) + ); + } + return RSVP.all(promise_list); + }) + .push(function (parameter_gadget_list) { + var i, + promise_list = []; + for (i = 0; i < parameter_gadget_list.length; i += 1) { + gadget.props.parameter_form_list = parameter_gadget_list; + promise_list.push( + parameter_gadget_list[i].render({ + url: gadget.state.instance_dict.data.rows[i].value._links.private_url.href + .replace('jio_private', 'private') + '/config', + basic_login: gadget.state.opml.basic_login, + title: "Parameters " + gadget.state.instance_dict.data.rows[i].value.title, + parameters: gadget.state.instance_dict.data.rows[i].value.parameters + }) + ); + } + return RSVP.all(promise_list); + }); + } + return new RSVP.Queue() + .push(function () { + return gadget.getDeclaredGadget('form_list'); + }) + .push(function (form_list) { + var column_list = [ + ['title', 'Instance Title'], + ['date', 'Status Date'], + ['status', 'Status'] + ], + j, + key_list = [], + instance_query = '(portal_type:"global")'; + + if (gadget.state.ouline_list.length === 0) { + return; + } + for (j = 0; j < gadget.state.ouline_list.length; j += 1) { + key_list.push('(parent_id:"' + gadget.state.ouline_list[j].id + '")'); + } + instance_query += '(' + key_list.join('OR') + ')'; + return form_list.render({ + erp5_document: { + "_embedded": {"_view": { + "listbox": { + "column_list": column_list, + "show_anchor": 0, + "default_params": {}, + "editable": 0, + "editable_column_list": [], + "key": "software_instance_listbox", + "lines": 20, + "list_method": "portal_catalog", + "query": "urn:jio:allDocs?query=" + escape(instance_query), + "portal_type": [], + "search_column_list": [], + "sort_column_list": column_list, + "sort": [["title", "ascending"]], + "title": "Software Instances", + "hide_sort": true, + "type": "ListBox" + } + }}, + "_links": { + "type": { + // form_list display portal_type in header + name: "" + } + } + }, + form_definition: { + group_list: [[ + "bottom", + [["listbox"]] + ]] + } + }); + }) + .push(function () { + return RSVP.all([ + gadget.getUrlFor({command: 'history_previous'}), + gadget.getUrlFor({command: 'store_and_change', options: { + page: "ojsm_jump", + jio_key: gadget.state.opml.url, + title: gadget.state.opml.title, + view_title: "Related OPML", + search_page: "ojsm_status_list" + }}) + ]); + }) + .push(function (url_list) { + if (gadget.state.ouline_list.length === 0) { + gadget.element.querySelector('.hosting-title').textContent = + gadget.state.opml.title + " - Not synchronized!"; + return gadget.updateHeader({ + page_title: "Hosting Subscription: " + gadget.state.opml.title, + selection_url: url_list[0], + jump_url: url_list[1] + }); + } + gadget.element.querySelector('.hosting-title').textContent = + gadget.state.opml.title; + return gadget.updateHeader({ + page_title: "Hosting Subscription: " + gadget.state.opml.title, + selection_url: url_list[0], + jump_url: url_list[1], + save_action: true + }); + }); + }); + +}(window, rJS, document, Handlebars, Rusha)); \ No newline at end of file diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_hosting_subscription_view_js.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_hosting_subscription_view_js.xml similarity index 97% rename from bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_hosting_subscription_view_js.xml rename to bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_hosting_subscription_view_js.xml index ab87e70ecc47fa0ec54274f530202976f4390884..a8cf961744160c33f6c25eb7311b0e65532a17ff 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_hosting_subscription_view_js.xml +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_hosting_subscription_view_js.xml @@ -83,7 +83,7 @@ </item> <item> <key> <string>default_reference</string> </key> - <value> <string>gadget_monitoring_hosting_subscription_view.js</string> </value> + <value> <string>gadget_erp5_page_ojsm_hosting_subscription_view.js</string> </value> </item> <item> <key> <string>description</string> </key> @@ -93,7 +93,7 @@ </item> <item> <key> <string>id</string> </key> - <value> <string>gadget_monitoring_hosting_subscription_view_js</string> </value> + <value> <string>gadget_erp5_page_ojsm_hosting_subscription_view_js</string> </value> </item> <item> <key> <string>language</string> </key> @@ -242,7 +242,7 @@ </item> <item> <key> <string>serial</string> </key> - <value> <string>961.40930.22839.30634</string> </value> + <value> <string>963.1690.33865.32955</string> </value> </item> <item> <key> <string>state</string> </key> @@ -260,7 +260,7 @@ </tuple> <state> <tuple> - <float>1503585188.82</float> + <float>1509095405.67</float> <string>UTC</string> </tuple> </state> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_import_export_html.html b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_import_export_html.html new file mode 100644 index 0000000000000000000000000000000000000000..41f967855049a3e3b0f9ce5c74525eaac3e68f47 --- /dev/null +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_import_export_html.html @@ -0,0 +1,68 @@ +<!doctype html> +<html> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + + <title>OfficeJS Monitor Import Export</title> + <link href="gadget_officejs_monitoring_custom.css" rel="stylesheet" type="text/css"/> + + <script src="rsvp.js"></script> + <script src="renderjs.js"></script> + <script src="handlebars.js"></script> + <script src="jsen.min.js" type="text/javascript"></script> + <script src="gadget_erp5_page_ojsm_import_export.js"></script> + <script id="template-message-error" type="text/x-handlebars-template"> + <p><span class='ui-text-{{status}}'>{{message}}</span></p> + </script> + <script id="template-section-title" type="text/x-handlebars-template"> + <span class="ui-icon ui-icon-custom ui-icon-{{icon}}"> </span> + {{title}} + </script> + <script id="storage-selection" type="text/x-handlebars-template"> + <br> + <article class="ui-content ui-body-c"> + <section class="ui-content-header-plain"> + <h3 class="ui-content-title ui-body-c"> + <span class="ui-icon ui-icon-custom ui-icon-database"> </span> + Load Settings from remote Storage + </h3> + </section> + <section class="ui-body-c ui-content-section"> + <div class="storage-selection"> + <ul data-role="listview" data-theme="c" class="document-listview ui-listview-inset ui-corner-all"> + {{#each documentlist}} + <li><a class="ui-body-inherit" href="{{link}}">{{title}}</a></li> + {{/each}} + </ul> + </div> + </section> + </article> + </script> + </head> + + <body> + <article class="ui-content ui-body-c document-access"> + <section class="ui-content-header-plain"> + <h3 class="ui-content-title ui-body-c"> + + </h3> + </section> + <section class="ui-body-c ui-content-section"> + <form class="save_form ui-body-c" novalidate> + <button type="submit" class="ui-btn ui-btn-b ui-btn-inline + ui-icon-edit ui-btn-icon-right ui-screen-hidden"></button> + <div class="ui-message-alert"></div> + <div data-gadget-url="gadget_erp5_form.html" + data-gadget-scope="form_view" + data-gadget-sandbox="public"> + </div> + </form> + </section> + </article> + <br/> + <div class="storage-list"> + </div> + <div data-gadget-url="gadget_erp5_jio.html" data-gadget-scope="erp5_gadget" data-gadget-sandbox="public"></div> + </body> +</html> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_import_export_html.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_import_export_html.xml new file mode 100644 index 0000000000000000000000000000000000000000..dbe9df9d9a1fb57dd1dfaceb5a7b8a093a2ec18b --- /dev/null +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_import_export_html.xml @@ -0,0 +1,332 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Web Page" module="erp5.portal_type"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_Access_contents_information_Permission</string> </key> + <value> + <tuple> + <string>Anonymous</string> + <string>Assignee</string> + <string>Assignor</string> + <string>Associate</string> + <string>Auditor</string> + <string>Manager</string> + <string>Owner</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Add_portal_content_Permission</string> </key> + <value> + <tuple> + <string>Assignee</string> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Change_local_roles_Permission</string> </key> + <value> + <tuple> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Modify_portal_content_Permission</string> </key> + <value> + <tuple> + <string>Assignee</string> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_View_Permission</string> </key> + <value> + <tuple> + <string>Anonymous</string> + <string>Assignee</string> + <string>Assignor</string> + <string>Associate</string> + <string>Auditor</string> + <string>Manager</string> + <string>Owner</string> + </tuple> + </value> + </item> + <item> + <key> <string>categories</string> </key> + <value> + <tuple> + <string>classification/collaborative/team</string> + </tuple> + </value> + </item> + <item> + <key> <string>content_md5</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>text/html</string> </value> + </item> + <item> + <key> <string>default_reference</string> </key> + <value> <string>gadget_erp5_page_ojsm_import_export.html</string> </value> + </item> + <item> + <key> <string>description</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>gadget_erp5_page_ojsm_import_export_html</string> </value> + </item> + <item> + <key> <string>language</string> </key> + <value> <string>en</string> </value> + </item> + <item> + <key> <string>portal_type</string> </key> + <value> <string>Web Page</string> </value> + </item> + <item> + <key> <string>short_title</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string>Gadget OJS Monitor Import Export</string> </value> + </item> + <item> + <key> <string>version</string> </key> + <value> <string>001</string> </value> + </item> + <item> + <key> <string>workflow_history</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="2" aka="AAAAAAAAAAI="> + <pickle> + <global name="PersistentMapping" module="Persistence.mapping"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> + <dictionary> + <item> + <key> <string>document_publication_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> + </value> + </item> + <item> + <key> <string>edit_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> + </value> + </item> + <item> + <key> <string>processing_status_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent> + </value> + </item> + </dictionary> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="3" aka="AAAAAAAAAAM="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> + </pickle> + <pickle> + <tuple> + <none/> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>publish_alive</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1506442401.49</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + <item> + <key> <string>validation_state</string> </key> + <value> <string>published_alive</string> </value> + </item> + </dictionary> + </list> + </tuple> + </pickle> + </record> + <record id="4" aka="AAAAAAAAAAQ="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> + </pickle> + <pickle> + <tuple> + <none/> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>edit</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>serial</string> </key> + <value> <string>962.55732.38278.12270</string> </value> + </item> + <item> + <key> <string>state</string> </key> + <value> <string>current</string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1509023688.31</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + </dictionary> + </list> + </tuple> + </pickle> + </record> + <record id="5" aka="AAAAAAAAAAU="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> + </pickle> + <pickle> + <tuple> + <none/> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>detect_converted_file</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>external_processing_state</string> </key> + <value> <string>converted</string> </value> + </item> + <item> + <key> <string>serial</string> </key> + <value> <string>0.0.0.0</string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1506442331.2</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + </dictionary> + </list> + </tuple> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_import_export_js.js b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_import_export_js.js new file mode 100644 index 0000000000000000000000000000000000000000..f5abba0e0690c3bd1db4d94f5808a388ea720e5f --- /dev/null +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_import_export_js.js @@ -0,0 +1,464 @@ +/*global window, rJS, RSVP, jsen, Rusha, Handlebars, atob */ +/*jslint nomen: true, indent: 2, maxerr: 3*/ +(function (window, rJS, RSVP, jsen, Rusha, Handlebars, atob) { + "use strict"; + + var gadget_klass = rJS(window), + templater = gadget_klass.__template_element, + notify_msg_template = Handlebars.compile( + templater.getElementById("template-message-error").innerHTML + ), + storage_selection = Handlebars.compile( + templater.getElementById("storage-selection").innerHTML + ), + header_title = Handlebars.compile( + templater.getElementById("template-section-title").innerHTML + ); + + function getMonitorSetting(gadget) { + return gadget.jio_allDocs({ + select_list: ["basic_login", "url", "title", "active"], + query: '(portal_type:"opml")' + }) + .push(function (opml_result) { + var i, + opml_dict = {opml_description_list: []}; + for (i = 0; i < opml_result.data.total_rows; i+= 1) { + opml_dict.opml_description_list.push(opml_result.data.rows[i].value); + } + return opml_dict; + }); + } + + function validateJsonConfiguration(json_value, uses_old_schema) { + var validate, + json_schema = { + "$schema": "http://json-schema.org/draft-04/schema#", + "type" : "object", + "properties": { + "opml_description_list": { + "description": "list of monitor opml URL", + "type": "array", + "required": ['basic_login', "url", "title"], + "items": { + "type": "object", + "properties": { + "url": { + "description": "OPML URL", + "type": "string" + }, + "title": { + "description": "OPML title", + "type": "string" + }, + "basic_login": { + "description": "credentials hash string", + "type": "string" + }, + "active": { + "description": "OPML active state", + "type": "boolean", + "default": true + } + }, + "additionalProperties": false + } + } + }, + "additionalProperties": false + }, + old_json_schema = { + "$schema": "http://json-schema.org/draft-04/schema#", + "type" : "object", + "properties": { + "opml_description": { + "description": "list of monitor opml URL", + "type": "array", + "items": { + "type": "object", + "properties": { + "href": { + "description": "OPML URL", + "type": "string" + }, + "title": { + "description": "OPML title", + "type": "string" + } + }, + "additionalProperties": false + } + }, + "monitor_url": { + "description": "list of registered monitor instance URL", + "type": "array", + "required": ['hash', "url", "parent_url"], + "items": { + "type": "object", + "properties": { + "hash": { + "description": "hash string", + "type": "string" + }, + "login": { + "description": "login", + "type": "string", + "default": "" + }, + "url": { + "description": "url of monitor instance", + "type": "string" + }, + "parent_url": { + "description": "URL to parent instance", + "type": "string" + } + }, + "additionalProperties": false + } + } + }, + + "additionalProperties": false + }; + + return new RSVP.Queue() + .push(function () { + if (uses_old_schema !== undefined && uses_old_schema === true) { + validate = jsen(old_json_schema); + } else { + validate = jsen(json_schema); + } + return validate(json_value); + }); + } + + function importMonitorConfiguration(gadget, config) { + var is_old_schema = false; + gadget.state.message.textContent = ""; + return new RSVP.Queue() + .push(function (form_doc) { + var configuration_dict; + if (typeof config === 'string') { + try { + configuration_dict = JSON.parse(config); + } catch (e) { + gadget.state.message + .innerHTML = notify_msg_template({ + status: 'error', + message: 'Error: Invalid json content!' + }); + return; + } + } else { + configuration_dict = config; + } + return validateJsonConfiguration(configuration_dict) + .push(function (validate_result) { + if (!validate_result) { + // try validation on old setting format + is_old_schema = true; + return validateJsonConfiguration(configuration_dict, true); + } + return validate_result; + }) + .push(function (validate_result) { + var settings_queue = new RSVP.Queue(), + not_imported = "", + item, + cred_list, + i, + j; + + function pushSetting(id, config) { + settings_queue + .push(function () { + return gadget.jio_put(id, config); + }) + .push(undefined, function (error) { + throw error; + }); + } + if (validate_result) { + if (is_old_schema) { + //return settings_queue; + for (i = 0; i < configuration_dict.opml_description.length; i += 1) { + item = { + title: configuration_dict.opml_description[i].title, + url: configuration_dict.opml_description[i].href, + active: true, + portal_type: "opml" + }; + for (j = 0; j < configuration_dict.monitor_url.length; j += 1) { + if (configuration_dict.monitor_url[j].parent_url === + configuration_dict.opml_description[i].href) { + item.basic_login = configuration_dict.monitor_url[j].hash; + cred_list = atob(item.basic_login).split(':'); + item.username = cred_list[0]; + item.password = cred_list[1]; + // XXX - all monitors password in opml should be the same + break; + } + } + if (item.basic_login !== undefined) { + pushSetting(item.url, item); + } else { + not_imported += "OPML [" + configuration_dict.opml_description[i].title + + "] was not imported, bad configuration...<br/>"; + } + } + } else { + for (i = 0; i < configuration_dict.opml_description_list.length; i += 1) { + item = configuration_dict.opml_description_list[i]; + item.portal_type = "opml"; + cred_list = atob(item.basic_login).split(':'); + item.username = cred_list[0]; + item.password = cred_list[1]; + pushSetting(item.url, item); + } + } + return settings_queue + .push(function () { + if (not_imported !== "") { + gadget.state.message + .innerHTML = notify_msg_template({ + status: 'error', + message: not_imported + }); + return false; + } + return true; + }); + } else { + gadget.state.message + .innerHTML = notify_msg_template({ + status: 'error', + message: 'Error: Content is not a valid Monitoring Json configuration!' + }); + return false; + } + }) + .push(function (status) { + if (status) { + return gadget.redirect({ + "command": "display", + "options": {"page": "settings_configurator"} + }); + } + }); + }); + } + + gadget_klass + ///////////////////////////// + // state + ///////////////////////////// + .setState({ + message: "", + config: "", + is_export: false, + options: "", + erp5_gadget: "" + }) + .ready(function (g) { + return g.getDeclaredGadget('erp5_gadget') + .push(function (erp5_gadget) { + return g.changeState({erp5_gadget: erp5_gadget}); + }); + }) + ///////////////////////////////////////////////////////////////// + // Acquired methods + ///////////////////////////////////////////////////////////////// + .declareAcquiredMethod("updateHeader", "updateHeader") + .declareAcquiredMethod("getSetting", "getSetting") + .declareAcquiredMethod("setSetting", "setSetting") + .declareAcquiredMethod("getUrlFor", "getUrlFor") + .declareAcquiredMethod("redirect", "redirect") + .declareAcquiredMethod("jio_allDocs", "jio_allDocs") + .declareAcquiredMethod("jio_put", "jio_put") + + ///////////////////////////////////////////////////////////////// + // declared methods + ///////////////////////////////////////////////////////////////// + .onEvent('submit', function () { + var gadget = this; + return gadget.getDeclaredGadget('form_view') + .push(function (form_gadget) { + return form_gadget.getContent(); + }) + .push(function (form_doc) { + return importMonitorConfiguration(gadget, form_doc.config); + }); + }) + + .declareMethod("triggerSubmit", function () { + return this.element.querySelector('button[type="submit"]').click(); + }) + + .declareMethod("render", function (options) { + var gadget = this, + is_exporter = options.exporter === "true", + message_element = gadget.element.querySelector('.ui-message-alert'); + message_element.textContent = ""; + if (options.url && !options.url.endsWith('/')) { + options.url += '/'; + } + if (is_exporter) { + return new RSVP.Queue() + .push(function () { + return getMonitorSetting(gadget); + }) + .push(function (configuration_dict) { + return gadget.changeState({ + options: options, + is_exporter: is_exporter, + config: JSON.stringify(configuration_dict), + message: message_element, + sync: undefined + }); + }); + } + + return gadget.changeState({ + options: options, + is_exporter: is_exporter, + config: "", + message: message_element, + sync: options.auto_sync, + storage_url: options.url + }); + }) + .onStateChange(function () { + var gadget = this; + if (gadget.state.options === "") { + return; + } + return RSVP.Queue() + .push(function () { + var title_content; + + if (gadget.state.is_exporter) { + title_content = header_title({ + title: "Export Monitor Configurations", + icon: "download" + }); + } else { + title_content = header_title({ + title: "Import Monitor Configurations", + icon: "upload" + }); + } + gadget.element.querySelector(".document-access h3").innerHTML = title_content; + return gadget.getDeclaredGadget('form_view'); + }) + .push(function (form_view) { + return form_view.render({ + erp5_document: { + "_embedded": {"_view": { + "my_config": { + "description": "Monitoring Settings Content (json format)", + "title": "Settings Content (JSON)", + "default": gadget.state.config || "", + "css_class": "", + "required": 1, + "editable": 1, + "key": "config", + "hidden": 0, + "type": "TextAreaField" + } + }}, + "_links": { + "type": { + // form_list display portal_type in header + name: "" + } + } + }, + form_definition: { + group_list: [[ + "left", + [["my_config"]] + ]] + } + }); + }) + .push(function () { + var new_options = JSON.parse(JSON.stringify(gadget.state.options)); + new_options.exporter = !gadget.state.is_exporter; + new_options.auto_sync = undefined; + new_options.url = undefined; + return RSVP.all([ + gadget.getUrlFor({command: "display", options: new_options}), + gadget.state.is_exporter + ]); + }) + .push(function (result) { + var parameters = { + page_title: "Monitoring Import-Export", + export_url: result[1] ? undefined : result[0], + import_url: result[1] ? result[0] : undefined + }; + if (!result[1]) { + parameters.submit_action = true; + parameters.panel_action = false; + } + return gadget.updateHeader(parameters); + }) + .push(function () { + var div = gadget.element.querySelector('.storage-list'); + if (gadget.state.is_exporter) { + while (div.firstChild) { + div.removeChild(div.firstChild); + } + return; + } + return gadget.getUrlFor({command: "display", options: {page: "ojsm_erp5_configurator", type: "erp5"}}) + .push(function (url) { + gadget.element.querySelector('.storage-list').innerHTML = storage_selection({ + documentlist: [{ + "link": url, + "title": "SlapOS Master ERP5" + }] + }); + }); + }) + .push(function () { + if (gadget.state.sync === "erp5" && gadget.state.storage_url) { + // start import from erp5 now + return gadget.setSetting("hateoas_url", gadget.state.storage_url) + .push(function () { + return gadget.state.erp5_gadget.createJio(); + }) + .push(function () { + // force login if not logged yet + return gadget.state.erp5_gadget.get("document2"); + }) + .push(undefined, function () { + return false; + }) + .push(function () { + // load monitoring information. + return gadget.state.erp5_gadget.getAttachment( + 'hosting_subscription_module', + gadget.state.storage_url + 'hosting_subscription_module' + + "/Base_getMonitoringInstanceParameterDictAsJson" + ); + }) + .push(undefined, function () { + gadget.state.message + .innerHTML = notify_msg_template({ + status: 'error', + message: 'Error: Failed to get Monitor Configuration from URL: ' + + gadget.state.storage_url + }); + return undefined; + }) + .push(function (result) { + if (result !== undefined) { + return importMonitorConfiguration(gadget, result); + } + }); + } + }); + }); +}(window, rJS, RSVP, jsen, Rusha, Handlebars, atob)); diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_import_export_js.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_import_export_js.xml new file mode 100644 index 0000000000000000000000000000000000000000..35a4e592d8e7b38f15e6e5963eb164837a6beb03 --- /dev/null +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_import_export_js.xml @@ -0,0 +1,340 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Web Script" module="erp5.portal_type"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_Access_contents_information_Permission</string> </key> + <value> + <tuple> + <string>Anonymous</string> + <string>Assignee</string> + <string>Assignor</string> + <string>Associate</string> + <string>Auditor</string> + <string>Manager</string> + <string>Owner</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Add_portal_content_Permission</string> </key> + <value> + <tuple> + <string>Assignee</string> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Change_local_roles_Permission</string> </key> + <value> + <tuple> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Modify_portal_content_Permission</string> </key> + <value> + <tuple> + <string>Assignee</string> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_View_Permission</string> </key> + <value> + <tuple> + <string>Anonymous</string> + <string>Assignee</string> + <string>Assignor</string> + <string>Associate</string> + <string>Auditor</string> + <string>Manager</string> + <string>Owner</string> + </tuple> + </value> + </item> + <item> + <key> <string>categories</string> </key> + <value> + <tuple> + <string>classification/collaborative/team</string> + </tuple> + </value> + </item> + <item> + <key> <string>content_md5</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>text/javascript</string> </value> + </item> + <item> + <key> <string>default_reference</string> </key> + <value> <string>gadget_erp5_page_ojsm_import_export.js</string> </value> + </item> + <item> + <key> <string>description</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>gadget_erp5_page_ojsm_import_export_js</string> </value> + </item> + <item> + <key> <string>language</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>portal_type</string> </key> + <value> <string>Web Script</string> </value> + </item> + <item> + <key> <string>short_title</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string>OfficeJS Monitoring Import Export JS</string> </value> + </item> + <item> + <key> <string>url_string</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>version</string> </key> + <value> <string>001</string> </value> + </item> + <item> + <key> <string>workflow_history</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="2" aka="AAAAAAAAAAI="> + <pickle> + <global name="PersistentMapping" module="Persistence.mapping"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> + <dictionary> + <item> + <key> <string>document_publication_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> + </value> + </item> + <item> + <key> <string>edit_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> + </value> + </item> + <item> + <key> <string>processing_status_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent> + </value> + </item> + </dictionary> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="3" aka="AAAAAAAAAAM="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> + </pickle> + <pickle> + <tuple> + <none/> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>publish_alive</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1506444427.15</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + <item> + <key> <string>validation_state</string> </key> + <value> <string>published_alive</string> </value> + </item> + </dictionary> + </list> + </tuple> + </pickle> + </record> + <record id="4" aka="AAAAAAAAAAQ="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> + </pickle> + <pickle> + <tuple> + <none/> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>edit</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>serial</string> </key> + <value> <string>963.1954.36775.16384</string> </value> + </item> + <item> + <key> <string>state</string> </key> + <value> <string>current</string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1509024244.66</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + </dictionary> + </list> + </tuple> + </pickle> + </record> + <record id="5" aka="AAAAAAAAAAU="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> + </pickle> + <pickle> + <tuple> + <none/> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>detect_converted_file</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>external_processing_state</string> </key> + <value> <string>converted</string> </value> + </item> + <item> + <key> <string>serial</string> </key> + <value> <string>0.0.0.0</string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1506444397.32</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + </dictionary> + </list> + </tuple> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_jump_html.html b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_jump_html.html new file mode 100644 index 0000000000000000000000000000000000000000..fb7953375cdfd15cdfd5c8236ef70503489853df --- /dev/null +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_jump_html.html @@ -0,0 +1,33 @@ +<!DOCTYPE html> +<html> + <head> + <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> + <meta name="viewport" content="width=device-width, user-scalable=no" /> + <title>ERP5 Page Monitoring Jump</title> + + <!-- renderjs --> + <script src="rsvp.js" type="text/javascript"></script> + <script src="renderjs.js" type="text/javascript"></script> + <script src="handlebars.js" type="text/javascript"></script> + + <script src="gadget_erp5_page_ojsm_jump.js" type="text/javascript"></script> + + <script id="table-template" type="text/x-handlebars-template"> + <section class="ui-content-header-plain"> + <h3 class="ui-content-title ui-body-c" data-i18n="[last]{{definition_i18n}}"> + <span class="ui-icon ui-icon-custom ui-icon-plane"> </span> + {{definition_title}} + </h3> + </section> + + <ul data-role="listview" data-theme="c" data-inset="true" class="document-listview"> + {{#each documentlist}} + <li><a data-i18n="{{i18n}}" class="ui-body-inherit" href="{{link}}">{{title}}</a></li> + {{/each}} + </ul> + </script> + + </head> + <body> + </body> +</html> \ No newline at end of file diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_jump_html.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_jump_html.xml new file mode 100644 index 0000000000000000000000000000000000000000..24a6ffdf1d7f59273dd5cb55e6725af12f2dc5ef --- /dev/null +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_jump_html.xml @@ -0,0 +1,332 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Web Page" module="erp5.portal_type"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_Access_contents_information_Permission</string> </key> + <value> + <tuple> + <string>Anonymous</string> + <string>Assignee</string> + <string>Assignor</string> + <string>Associate</string> + <string>Auditor</string> + <string>Manager</string> + <string>Owner</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Add_portal_content_Permission</string> </key> + <value> + <tuple> + <string>Assignee</string> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Change_local_roles_Permission</string> </key> + <value> + <tuple> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Modify_portal_content_Permission</string> </key> + <value> + <tuple> + <string>Assignee</string> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_View_Permission</string> </key> + <value> + <tuple> + <string>Anonymous</string> + <string>Assignee</string> + <string>Assignor</string> + <string>Associate</string> + <string>Auditor</string> + <string>Manager</string> + <string>Owner</string> + </tuple> + </value> + </item> + <item> + <key> <string>categories</string> </key> + <value> + <tuple> + <string>classification/collaborative/team</string> + </tuple> + </value> + </item> + <item> + <key> <string>content_md5</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>text/html</string> </value> + </item> + <item> + <key> <string>default_reference</string> </key> + <value> <string>gadget_erp5_page_ojsm_jump.html</string> </value> + </item> + <item> + <key> <string>description</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>gadget_erp5_page_ojsm_jump_html</string> </value> + </item> + <item> + <key> <string>language</string> </key> + <value> <string>en</string> </value> + </item> + <item> + <key> <string>portal_type</string> </key> + <value> <string>Web Page</string> </value> + </item> + <item> + <key> <string>short_title</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string>Gadget Officejs Monitoring Jump</string> </value> + </item> + <item> + <key> <string>version</string> </key> + <value> <string>001</string> </value> + </item> + <item> + <key> <string>workflow_history</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="2" aka="AAAAAAAAAAI="> + <pickle> + <global name="PersistentMapping" module="Persistence.mapping"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> + <dictionary> + <item> + <key> <string>document_publication_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> + </value> + </item> + <item> + <key> <string>edit_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> + </value> + </item> + <item> + <key> <string>processing_status_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent> + </value> + </item> + </dictionary> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="3" aka="AAAAAAAAAAM="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> + </pickle> + <pickle> + <tuple> + <none/> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>publish_alive</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1508939183.78</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + <item> + <key> <string>validation_state</string> </key> + <value> <string>published_alive</string> </value> + </item> + </dictionary> + </list> + </tuple> + </pickle> + </record> + <record id="4" aka="AAAAAAAAAAQ="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> + </pickle> + <pickle> + <tuple> + <none/> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>edit</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>serial</string> </key> + <value> <string>963.539.38470.23978</string> </value> + </item> + <item> + <key> <string>state</string> </key> + <value> <string>current</string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1508940730.13</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + </dictionary> + </list> + </tuple> + </pickle> + </record> + <record id="5" aka="AAAAAAAAAAU="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> + </pickle> + <pickle> + <tuple> + <none/> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>detect_converted_file</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>external_processing_state</string> </key> + <value> <string>converted</string> </value> + </item> + <item> + <key> <string>serial</string> </key> + <value> <string>0.0.0.0</string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1508938860.04</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + </dictionary> + </list> + </tuple> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_jump_js.js b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_jump_js.js new file mode 100644 index 0000000000000000000000000000000000000000..dc12c1e2e5785b9fb7b8a62cd0d6522241bb18f1 --- /dev/null +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_jump_js.js @@ -0,0 +1,77 @@ +/*global window, rJS, RSVP, Handlebars */ +/*jslint nomen: true, indent: 2, maxerr: 3 */ +(function (window, rJS, RSVP, Handlebars) { + "use strict"; + + var gadget_klass = rJS(window), + source = gadget_klass.__template_element + .getElementById("table-template") + .innerHTML, + table_template = Handlebars.compile(source); + + gadget_klass + + ///////////////////////////////////////////////////////////////// + // Acquired methods + ///////////////////////////////////////////////////////////////// + .declareAcquiredMethod("getSetting", "getSetting") + .declareAcquiredMethod("getUrlFor", "getUrlFor") + .declareAcquiredMethod("translateHtml", "translateHtml") + .declareAcquiredMethod("updateHeader", "updateHeader") + + ///////////////////////////////////////////////////////////////// + // declared methods + ///////////////////////////////////////////////////////////////// + .declareMethod("render", function (options) { + var gadget = this, + promise_list = []; + + options.page = options.jump_page; + promise_list.push(gadget.getUrlFor({command: "display", options: options})); + if (options.title !== undefined && + options.search_page !== undefined) { + promise_list.push(gadget.getUrlFor({command: "change", options: { + page: options.search_page, + extended_search: options.title + }})); + } + return new RSVP.Queue() + .push(function () { + return RSVP.all(promise_list); + }) + .push(function (result_list) { + var i, + tab_list = []; + + tab_list.push({ + title: options.view_title || options.jio_key, + link: result_list[0], + i18n: options.view_title || options.jio_key + }); + if (result_list.length > 1) { + tab_list.push({ + title: options.title + " Promises", + link: result_list[1], + i18n: options.title + " Promises" + }); + } + return RSVP.all([ + gadget.translateHtml(table_template({ + definition_title: "Jumps", + documentlist: tab_list, + definition_i18n: "Jumps" + })), + gadget.getUrlFor({command: 'history_previous'}) + ]); + }) + .push(function (last_result_list) { + gadget.element.innerHTML = last_result_list[0]; + + return gadget.updateHeader({ + back_url: last_result_list[1], + page_title: options.title + ": Jump to URL" + }); + }); + }); + +}(window, rJS, RSVP, Handlebars)); \ No newline at end of file diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_jump_js.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_jump_js.xml new file mode 100644 index 0000000000000000000000000000000000000000..fe191b3c0cb77e24bec6d0023928e1cad0438740 --- /dev/null +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_jump_js.xml @@ -0,0 +1,328 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Web Script" module="erp5.portal_type"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_Access_contents_information_Permission</string> </key> + <value> + <tuple> + <string>Anonymous</string> + <string>Assignee</string> + <string>Assignor</string> + <string>Associate</string> + <string>Auditor</string> + <string>Manager</string> + <string>Owner</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Add_portal_content_Permission</string> </key> + <value> + <tuple> + <string>Assignee</string> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Change_local_roles_Permission</string> </key> + <value> + <tuple> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Modify_portal_content_Permission</string> </key> + <value> + <tuple> + <string>Assignee</string> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_View_Permission</string> </key> + <value> + <tuple> + <string>Anonymous</string> + <string>Assignee</string> + <string>Assignor</string> + <string>Associate</string> + <string>Auditor</string> + <string>Manager</string> + <string>Owner</string> + </tuple> + </value> + </item> + <item> + <key> <string>categories</string> </key> + <value> + <tuple> + <string>classification/collaborative/team</string> + </tuple> + </value> + </item> + <item> + <key> <string>content_md5</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>default_reference</string> </key> + <value> <string>gadget_erp5_page_ojsm_jump.js</string> </value> + </item> + <item> + <key> <string>description</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>gadget_erp5_page_ojsm_jump_js</string> </value> + </item> + <item> + <key> <string>language</string> </key> + <value> <string>en</string> </value> + </item> + <item> + <key> <string>portal_type</string> </key> + <value> <string>Web Script</string> </value> + </item> + <item> + <key> <string>short_title</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string>Gadget ERP5 Officejs Monitoring Jump JS</string> </value> + </item> + <item> + <key> <string>version</string> </key> + <value> <string>001</string> </value> + </item> + <item> + <key> <string>workflow_history</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="2" aka="AAAAAAAAAAI="> + <pickle> + <global name="PersistentMapping" module="Persistence.mapping"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> + <dictionary> + <item> + <key> <string>document_publication_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> + </value> + </item> + <item> + <key> <string>edit_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> + </value> + </item> + <item> + <key> <string>processing_status_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent> + </value> + </item> + </dictionary> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="3" aka="AAAAAAAAAAM="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> + </pickle> + <pickle> + <tuple> + <none/> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>publish_alive</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1508939174.14</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + <item> + <key> <string>validation_state</string> </key> + <value> <string>published_alive</string> </value> + </item> + </dictionary> + </list> + </tuple> + </pickle> + </record> + <record id="4" aka="AAAAAAAAAAQ="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> + </pickle> + <pickle> + <tuple> + <none/> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>edit</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>serial</string> </key> + <value> <string>963.1691.38549.3618</string> </value> + </item> + <item> + <key> <string>state</string> </key> + <value> <string>current</string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1509095381.18</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + </dictionary> + </list> + </tuple> + </pickle> + </record> + <record id="5" aka="AAAAAAAAAAU="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> + </pickle> + <pickle> + <tuple> + <none/> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>detect_converted_file</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>external_processing_state</string> </key> + <value> <string>converted</string> </value> + </item> + <item> + <key> <string>serial</string> </key> + <value> <string>0.0.0.0</string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1508938943.66</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + </dictionary> + </list> + </tuple> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_opml_add_html.html b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_opml_add_html.html new file mode 100644 index 0000000000000000000000000000000000000000..534fc98428f5ed3faef95a38e3a798c82a1e6144 --- /dev/null +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_opml_add_html.html @@ -0,0 +1,32 @@ +<!doctype html> +<html> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + + <title>OfficeJS Monitor Add OPML</title> + <link href="gadget_officejs_monitoring_custom.css" rel="stylesheet" type="text/css"/> + + <script src="rsvp.js"></script> + <script src="renderjs.js"></script> + <script src="handlebars.js"></script> + <script src="gadget_officejs_monitoring_global.js"></script> + <script src="gadget_erp5_page_ojsm_opml_add.js"></script> + <script id="template-message-error" type="text/x-handlebars-template"> + <p><span class='ui-text-{{status}}'>{{message}}</span></p> + </script> + </head> + + <body> + <div data-gadget-url="gadget_officejs_monitoring_jio.html" data-gadget-scope="jio_gadget" data-gadget-sandbox="public"></div> + <form class="save_form ui-body-c" novalidate> + <button type="submit" class="ui-btn ui-btn-b ui-btn-inline + ui-icon-edit ui-btn-icon-right ui-screen-hidden"></button> + <div class="ui-message-alert"></div> + <div data-gadget-url="gadget_erp5_form.html" + data-gadget-scope="form_view" + data-gadget-sandbox="public"> + </div> + </form> + </body> +</html> \ No newline at end of file diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_software_instance_view_html.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_opml_add_html.xml similarity index 94% rename from bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_software_instance_view_html.xml rename to bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_opml_add_html.xml index f41fb5ac5d310882c40b6911893c2144cd4ea85b..bb86598dac9135429fb5e261604003f71ca37912 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_software_instance_view_html.xml +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_opml_add_html.xml @@ -83,7 +83,7 @@ </item> <item> <key> <string>default_reference</string> </key> - <value> <string>gadget_monitoring_software_instance_view.html</string> </value> + <value> <string>gadget_erp5_page_ojsm_opml_add.html</string> </value> </item> <item> <key> <string>description</string> </key> @@ -93,7 +93,7 @@ </item> <item> <key> <string>id</string> </key> - <value> <string>gadget_monitoring_software_instance_view_html</string> </value> + <value> <string>gadget_erp5_page_ojsm_opml_add_html</string> </value> </item> <item> <key> <string>language</string> </key> @@ -113,14 +113,18 @@ </item> <item> <key> <string>title</string> </key> - <value> <string>Monitoring Software Instance View</string> </value> + <value> <string>OfficeJS Add New OPML</string> </value> </item> <item> - <key> <string>version</string> </key> + <key> <string>url_string</string> </key> <value> <none/> </value> </item> + <item> + <key> <string>version</string> </key> + <value> <string>001</string> </value> + </item> <item> <key> <string>workflow_history</string> </key> <value> @@ -201,7 +205,7 @@ </tuple> <state> <tuple> - <float>1464251887.79</float> + <float>1506071769.76</float> <string>UTC</string> </tuple> </state> @@ -246,7 +250,7 @@ </item> <item> <key> <string>serial</string> </key> - <value> <string>961.59699.24642.30873</string> </value> + <value> <string>963.1898.2167.63078</string> </value> </item> <item> <key> <string>state</string> </key> @@ -264,7 +268,7 @@ </tuple> <state> <tuple> - <float>1504711023.3</float> + <float>1509020790.01</float> <string>UTC</string> </tuple> </state> @@ -321,7 +325,7 @@ </tuple> <state> <tuple> - <float>1464250270.25</float> + <float>1506071722.5</float> <string>UTC</string> </tuple> </state> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_opml_add_js.js b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_opml_add_js.js new file mode 100644 index 0000000000000000000000000000000000000000..566bae1a2121564c8e12adca3da31bd37013b3cf --- /dev/null +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_opml_add_js.js @@ -0,0 +1,239 @@ +/*global window, rJS, RSVP, Handlebars, OPMLManage */ +/*jslint nomen: true, indent: 2, maxerr: 3 */ +(function (window, rJS, RSVP, Handlebars, OPMLManage) { + "use strict"; + + var gadget_klass = rJS(window), + templater = gadget_klass.__template_element, + notify_msg_template = Handlebars.compile( + templater.getElementById("template-message-error").innerHTML + ), + opml_global = OPMLManage; + + gadget_klass + ///////////////////////////// + // state + ///////////////////////////// + .setState({ + message: "", + redirect: true + }) + ///////////////////////////// + // ready + ///////////////////////////// + .ready(function (gadget) { + return opml_global.init(gadget, notify_msg_template); + }) + ///////////////////////////////////////////////////////////////// + // Acquired methods + ///////////////////////////////////////////////////////////////// + .declareAcquiredMethod("updateHeader", "updateHeader") + .declareAcquiredMethod("getSetting", "getSetting") + .declareAcquiredMethod("getUrlFor", "getUrlFor") + .declareAcquiredMethod("redirect", "redirect") + .declareAcquiredMethod("jio_put", "jio_put") + .declareAcquiredMethod("notifySubmitting", "notifySubmitting") + .declareAcquiredMethod("notifySubmitted", 'notifySubmitted') + + ///////////////////////////////////////////////////////////////// + // declared methods + ///////////////////////////////////////////////////////////////// + .onEvent('submit', function () { + var gadget = this, + doc; + return new RSVP.Queue() + .push(function () { + return gadget.getDeclaredGadget('form_view'); + }) + .push(function (form_gadget) { + return form_gadget.getContent(); + }) + .push(function (form_doc) { + doc = form_doc; + if (!opml_global.validateHttpUrl(form_doc.url)) { + gadget.state.message + .innerHTML = notify_msg_template({ + status: 'error', + message: "'" + form_doc.url + "' is not a valid OPML URL" + }); + return false; + } + if (!form_doc.username || !form_doc.password) { + gadget.state.message + .innerHTML = notify_msg_template({ + status: 'error', + message: 'Username and password fields are required!' + }); + return false; + } + if (form_doc.new_password && + form_doc.new_password !== form_doc.confirm_new_password) { + gadget.state.message + .innerHTML = notify_msg_template({ + status: 'error', + message: 'The new password and it confirmation are differents!' + }); + return false; + } + return true; + }) + .push(function (state) { + if (state) { + return gadget.notifySubmitting() + .push(function () { + doc.title = ""; + return opml_global.saveOPML(doc, true); + }) + .push(function (status) { + var msg = 'Document Updated'; + if (!status) { + msg = 'Document update failed'; + } + return RSVP.all([ + gadget.notifySubmitted(msg), + status + ]); + }) + .push(function (result_list) { + if (result_list[1] && gadget.state.redirect) { + return gadget.redirect({ + "command": "change", + "options": {"page": "ojsm_status_list"} + }); + } + }); + } + }); + }) + + .declareMethod("triggerSubmit", function () { + return this.element.querySelector('button[type="submit"]').click(); + }) + + .declareMethod("render", function (options) { + var gadget = this; + return RSVP.Queue() + .push(function () { + return RSVP.all([ + gadget.getDeclaredGadget('form_view'), + gadget.getSetting('portal_type') + ]); + }) + .push(function (result) { + return result[0].render({ + erp5_document: { + "_embedded": {"_view": { + "my_url": { + "description": "", + "title": "OPML URL", + "default": options.url || "", + "css_class": "", + "required": 1, + "editable": 1, + "key": "url", + "hidden": 0, + "type": "StringField" + }, + "my_username": { + "description": "Username for access private URLs", + "title": "Username", + "default": options.username || "", + "css_class": "", + "required": 1, + "editable": 1, + "key": "username", + "hidden": 0, + "type": "StringField" + }, + "my_password": { + "description": "Password for access private URLs", + "title": "Password", + "default": options.password || "", + "css_class": "", + "required": 1, + "editable": 1, + "key": "password", + "hidden": 0, + "type": "PasswordField" + }, + "my_portal_type": { + "description": "The name of a document in ERP5", + "title": "Portal Type", + "default": result[1], + "css_class": "", + "required": 1, + "editable": 1, + "key": "portal_type", + "hidden": 1, + "type": "StringField" + }, + "my_active": { + "description": "Sync this opml or not", + "title": "Active (Auto Sync)", + "default": 1, + "css_class": "", + "required": 1, + "editable": 1, + "key": "active", + "hidden": 1, + "type": "CheckBoxField" + }, + "my_new_password": { + "description": "Change current OPML password", + "title": "New Password", + "default": "", + "css_class": "", + "required": 1, + "editable": 1, + "key": "new_password", + "hidden": (options.chg_passwd || '' === true) ? 0 : 1, + "type": "PasswordField" + }, + "my_confirm_new_password": { + "description": "Confirm new OPML password", + "title": "Confirm New Password", + "default": "", + "css_class": "", + "required": 1, + "editable": 1, + "key": "confirm_new_password", + "hidden": (options.chg_passwd || '' === true) ? 0 : 1, + "type": "PasswordField" + }, + }}, + "_links": { + "type": { + // form_list display portal_type in header + name: "" + } + } + }, + form_definition: { + group_list: [[ + "left", + [["my_url"], ["my_username"], ["my_password"], + ["my_portal_type"], ["my_active"], + ["my_new_password"], ["my_confirm_new_password"]] + ]] + } + }); + }) + .push(function () { + var new_options; + + if (options.chg_passwd === 'true') { + return undefined; + } + new_options = JSON.parse(JSON.stringify(options)); + new_options.chg_passwd = 'true'; + return gadget.getUrlFor({command: "change", options: new_options}); + }) + .push(function (chg_pwd_url) { + return gadget.updateHeader({ + page_title: "Add OPML", + save_action: true, + change_password: chg_pwd_url + }); + }); + }); +}(window, rJS, RSVP, Handlebars, OPMLManage)); diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_breadcrumb_js.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_opml_add_js.xml similarity index 93% rename from bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_breadcrumb_js.xml rename to bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_opml_add_js.xml index b3a0c4d503573b141ecbfdbe85799dad40ce8487..0b84bebec0ac1adbe545e7ff953e8ec4f170361f 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_breadcrumb_js.xml +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_opml_add_js.xml @@ -83,7 +83,7 @@ </item> <item> <key> <string>default_reference</string> </key> - <value> <string>gadget_monitoring_breadcrumb.js</string> </value> + <value> <string>gadget_erp5_page_ojsm_opml_add.js</string> </value> </item> <item> <key> <string>description</string> </key> @@ -93,7 +93,7 @@ </item> <item> <key> <string>id</string> </key> - <value> <string>gadget_monitoring_breadcrumb_js</string> </value> + <value> <string>gadget_erp5_page_ojsm_opml_add_js</string> </value> </item> <item> <key> <string>language</string> </key> @@ -113,14 +113,18 @@ </item> <item> <key> <string>title</string> </key> - <value> <string>Monitoring Breadcrumb JS</string> </value> + <value> <string>OfficeJS Monitoring Add OPML JS</string> </value> </item> <item> - <key> <string>version</string> </key> + <key> <string>url_string</string> </key> <value> <none/> </value> </item> + <item> + <key> <string>version</string> </key> + <value> <string>001</string> </value> + </item> <item> <key> <string>workflow_history</string> </key> <value> @@ -201,7 +205,7 @@ </tuple> <state> <tuple> - <float>1502444254.8</float> + <float>1506075175.77</float> <string>UTC</string> </tuple> </state> @@ -246,7 +250,7 @@ </item> <item> <key> <string>serial</string> </key> - <value> <string>961.21922.6098.18551</string> </value> + <value> <string>963.1933.16122.39953</string> </value> </item> <item> <key> <string>state</string> </key> @@ -264,7 +268,7 @@ </tuple> <state> <tuple> - <float>1502445069.05</float> + <float>1509023050.17</float> <string>UTC</string> </tuple> </state> @@ -287,9 +291,7 @@ <dictionary> <item> <key> <string>action</string> </key> - <value> - <none/> - </value> + <value> <string>detect_converted_file</string> </value> </item> <item> <key> <string>actor</string> </key> @@ -305,7 +307,7 @@ </item> <item> <key> <string>external_processing_state</string> </key> - <value> <string>empty</string> </value> + <value> <string>converted</string> </value> </item> <item> <key> <string>serial</string> </key> @@ -323,7 +325,7 @@ </tuple> <state> <tuple> - <float>1502444184.21</float> + <float>1506072210.95</float> <string>UTC</string> </tuple> </state> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_main_html.html b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_opml_delete_html.html similarity index 56% rename from bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_main_html.html rename to bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_opml_delete_html.html index 4bcf15f64f68e7f2215b7c4c9792db5019d0e5c1..8af540d30f2bf588254924cdb047fc29e66ff2f3 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_main_html.html +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_opml_delete_html.html @@ -4,17 +4,13 @@ <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> - <title>Monitoring Main Page</title> - - <link href="gadget_monitoring_custom.css" rel="stylesheet" type="text/css"/> + <title>OfficeJS Monitor Delete OPML</title> <script src="rsvp.js"></script> <script src="renderjs.js"></script> - - <script src="gadget_monitoring_main.js"></script> - + <script src="gadget_erp5_page_ojsm_opml_delete.js"></script> </head> <body> </body> -</html> +</html> \ No newline at end of file diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_opml_delete_html.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_opml_delete_html.xml new file mode 100644 index 0000000000000000000000000000000000000000..c9ce2e375d1ed1de648bb1fc8bc92b887f909ba1 --- /dev/null +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_opml_delete_html.xml @@ -0,0 +1,340 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Web Page" module="erp5.portal_type"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_Access_contents_information_Permission</string> </key> + <value> + <tuple> + <string>Anonymous</string> + <string>Assignee</string> + <string>Assignor</string> + <string>Associate</string> + <string>Auditor</string> + <string>Manager</string> + <string>Owner</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Add_portal_content_Permission</string> </key> + <value> + <tuple> + <string>Assignee</string> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Change_local_roles_Permission</string> </key> + <value> + <tuple> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Modify_portal_content_Permission</string> </key> + <value> + <tuple> + <string>Assignee</string> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_View_Permission</string> </key> + <value> + <tuple> + <string>Anonymous</string> + <string>Assignee</string> + <string>Assignor</string> + <string>Associate</string> + <string>Auditor</string> + <string>Manager</string> + <string>Owner</string> + </tuple> + </value> + </item> + <item> + <key> <string>categories</string> </key> + <value> + <tuple> + <string>classification/collaborative/public</string> + </tuple> + </value> + </item> + <item> + <key> <string>content_md5</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>text/html</string> </value> + </item> + <item> + <key> <string>default_reference</string> </key> + <value> <string>gadget_erp5_page_ojsm_opml_delete.html</string> </value> + </item> + <item> + <key> <string>description</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>gadget_erp5_page_ojsm_opml_delete_html</string> </value> + </item> + <item> + <key> <string>language</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>portal_type</string> </key> + <value> <string>Web Page</string> </value> + </item> + <item> + <key> <string>short_title</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string>OfficeJS Monitoring Delete OPML</string> </value> + </item> + <item> + <key> <string>url_string</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>version</string> </key> + <value> <string>001</string> </value> + </item> + <item> + <key> <string>workflow_history</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="2" aka="AAAAAAAAAAI="> + <pickle> + <global name="PersistentMapping" module="Persistence.mapping"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> + <dictionary> + <item> + <key> <string>document_publication_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> + </value> + </item> + <item> + <key> <string>edit_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> + </value> + </item> + <item> + <key> <string>processing_status_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent> + </value> + </item> + </dictionary> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="3" aka="AAAAAAAAAAM="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> + </pickle> + <pickle> + <tuple> + <none/> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>publish_alive</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1507823127.57</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + <item> + <key> <string>validation_state</string> </key> + <value> <string>published_alive</string> </value> + </item> + </dictionary> + </list> + </tuple> + </pickle> + </record> + <record id="4" aka="AAAAAAAAAAQ="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> + </pickle> + <pickle> + <tuple> + <none/> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>edit</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>serial</string> </key> + <value> <string>963.643.58620.34440</string> </value> + </item> + <item> + <key> <string>state</string> </key> + <value> <string>current</string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1508945525.85</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + </dictionary> + </list> + </tuple> + </pickle> + </record> + <record id="5" aka="AAAAAAAAAAU="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> + </pickle> + <pickle> + <tuple> + <none/> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>detect_converted_file</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>external_processing_state</string> </key> + <value> <string>converted</string> </value> + </item> + <item> + <key> <string>serial</string> </key> + <value> <string>0.0.0.0</string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1506439508.28</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + </dictionary> + </list> + </tuple> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_opml_delete_js.js b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_opml_delete_js.js new file mode 100644 index 0000000000000000000000000000000000000000..51b76fcadb55f5083c96dc369dc0cc98c3a68f8a --- /dev/null +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_opml_delete_js.js @@ -0,0 +1,32 @@ +/*global window, rJS, RSVP, Handlebars */ +/*jslint nomen: true, indent: 2, maxerr: 3 */ +(function (window, rJS, RSVP, Handlebars) { + "use strict"; + + rJS(window) + + ///////////////////////////////////////////////////////////////// + // Acquired methods + ///////////////////////////////////////////////////////////////// + .declareAcquiredMethod("redirect", "redirect") + .declareAcquiredMethod("jio_remove", "jio_remove") + .declareAcquiredMethod("notifySubmitting", "notifySubmitting") + .declareAcquiredMethod("notifySubmitted", 'notifySubmitted') + + .declareMethod("render", function (options) { + var gadget = this; + + return gadget.notifySubmitting() + .push(function () { + return gadget.jio_remove(options.jio_key); + }) + .push(function () { + return gadget.notifySubmitted("Document Deleted"); + }) + .push(function () { + return gadget.redirect({command: 'change', options: { + page: options.return_url || 'settings_configurator' + }}); + }); + }); +}(window, rJS, RSVP, Handlebars)); diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_opml_delete_js.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_opml_delete_js.xml new file mode 100644 index 0000000000000000000000000000000000000000..354c6016877058fce26ebae01a06a4213702191c --- /dev/null +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_opml_delete_js.xml @@ -0,0 +1,340 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Web Script" module="erp5.portal_type"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_Access_contents_information_Permission</string> </key> + <value> + <tuple> + <string>Anonymous</string> + <string>Assignee</string> + <string>Assignor</string> + <string>Associate</string> + <string>Auditor</string> + <string>Manager</string> + <string>Owner</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Add_portal_content_Permission</string> </key> + <value> + <tuple> + <string>Assignee</string> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Change_local_roles_Permission</string> </key> + <value> + <tuple> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Modify_portal_content_Permission</string> </key> + <value> + <tuple> + <string>Assignee</string> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_View_Permission</string> </key> + <value> + <tuple> + <string>Anonymous</string> + <string>Assignee</string> + <string>Assignor</string> + <string>Associate</string> + <string>Auditor</string> + <string>Manager</string> + <string>Owner</string> + </tuple> + </value> + </item> + <item> + <key> <string>categories</string> </key> + <value> + <tuple> + <string>classification/collaborative/public</string> + </tuple> + </value> + </item> + <item> + <key> <string>content_md5</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>text/javascript</string> </value> + </item> + <item> + <key> <string>default_reference</string> </key> + <value> <string>gadget_erp5_page_ojsm_opml_delete.js</string> </value> + </item> + <item> + <key> <string>description</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>gadget_erp5_page_ojsm_opml_delete_js</string> </value> + </item> + <item> + <key> <string>language</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>portal_type</string> </key> + <value> <string>Web Script</string> </value> + </item> + <item> + <key> <string>short_title</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string>OfficeJS Monitoring Delete OPML JS</string> </value> + </item> + <item> + <key> <string>url_string</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>version</string> </key> + <value> <string>001</string> </value> + </item> + <item> + <key> <string>workflow_history</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="2" aka="AAAAAAAAAAI="> + <pickle> + <global name="PersistentMapping" module="Persistence.mapping"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> + <dictionary> + <item> + <key> <string>document_publication_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> + </value> + </item> + <item> + <key> <string>edit_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> + </value> + </item> + <item> + <key> <string>processing_status_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent> + </value> + </item> + </dictionary> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="3" aka="AAAAAAAAAAM="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> + </pickle> + <pickle> + <tuple> + <none/> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>publish_alive</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1507823114.3</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + <item> + <key> <string>validation_state</string> </key> + <value> <string>published_alive</string> </value> + </item> + </dictionary> + </list> + </tuple> + </pickle> + </record> + <record id="4" aka="AAAAAAAAAAQ="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> + </pickle> + <pickle> + <tuple> + <none/> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>edit</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>serial</string> </key> + <value> <string>963.642.61316.20292</string> </value> + </item> + <item> + <key> <string>state</string> </key> + <value> <string>current</string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1508945461.31</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + </dictionary> + </list> + </tuple> + </pickle> + </record> + <record id="5" aka="AAAAAAAAAAU="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> + </pickle> + <pickle> + <tuple> + <none/> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>detect_converted_file</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>external_processing_state</string> </key> + <value> <string>converted</string> </value> + </item> + <item> + <key> <string>serial</string> </key> + <value> <string>0.0.0.0</string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1507823085.55</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + </dictionary> + </list> + </tuple> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_processes_view_html.html b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_processes_view_html.html new file mode 100644 index 0000000000000000000000000000000000000000..475530001f84edf29356a5d2090a7a6983cb600f --- /dev/null +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_processes_view_html.html @@ -0,0 +1,47 @@ +<!doctype html> +<html> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + + <title>Monitoring Process View Page</title> + + <link href="gadget_officejs_monitoring_custom.css" rel="stylesheet" type="text/css"/> + + <script src="notify.min.js"></script> + <script src="rsvp.js"></script> + <script src="renderjs.js"></script> + + <script id="infobox-widget-template" type="text/x-handlebars-template"> + {{#each resource_list}} + <div class="infobox"> + <div class="infobox-icon"> + <span class="ui-icon ui-icon-custom ui-icon-{{icon_name}}"></span> + </div> + <div class="infobox-data"> + <span class="infobox-data-number">{{value}}</span> + <div class="infobox-content">{{title}}</div> + </div> + </div> + {{/each}} + </script> + + <script src="gadget_erp5_page_ojsm_processes_view.js"></script> + + </head> + + <body> + <div data-gadget-url="gadget_officejs_monitoring_jio.html" data-gadget-scope="jio_gadget" data-gadget-sandbox="public"></div> + <div class="center"> + <div class="padding-lr-10 infobox-container"> + </div> + <h2 class="header-notice"><i class="ui-icon ui-icon-custom ui-icon-info"></i> Processes information will be reloaded automatically every minutes.</h2> + </div> + <form> + <div data-gadget-url="gadget_erp5_form.html" + data-gadget-scope="form_view" + data-gadget-sandbox="public"> + </div> + </form> + </body> +</html> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_process_view_html.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_processes_view_html.xml similarity index 96% rename from bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_process_view_html.xml rename to bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_processes_view_html.xml index f752b14a2db99bfa2639a13aac91b6ebf33dc141..96a52a812d5e23be1a3b81d81569f506a224a219 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_process_view_html.xml +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_processes_view_html.xml @@ -80,7 +80,7 @@ </item> <item> <key> <string>default_reference</string> </key> - <value> <string>gadget_monitoring_process_view.html</string> </value> + <value> <string>gadget_erp5_page_ojsm_processes_view.html</string> </value> </item> <item> <key> <string>description</string> </key> @@ -90,7 +90,7 @@ </item> <item> <key> <string>id</string> </key> - <value> <string>gadget_monitoring_process_view_html</string> </value> + <value> <string>gadget_erp5_page_ojsm_processes_view_html</string> </value> </item> <item> <key> <string>language</string> </key> @@ -110,7 +110,7 @@ </item> <item> <key> <string>title</string> </key> - <value> <string>Gadget Monitoring Process View</string> </value> + <value> <string>Gadget Monitoring Processes View</string> </value> </item> <item> <key> <string>version</string> </key> @@ -243,7 +243,7 @@ </item> <item> <key> <string>serial</string> </key> - <value> <string>961.17754.56595.43520</string> </value> + <value> <string>962.46066.30387.47069</string> </value> </item> <item> <key> <string>state</string> </key> @@ -261,7 +261,7 @@ </tuple> <state> <tuple> - <float>1502194340.06</float> + <float>1507902085.76</float> <string>UTC</string> </tuple> </state> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_processes_view_js.js b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_processes_view_js.js new file mode 100644 index 0000000000000000000000000000000000000000..ac0c3e00c1867488cc73cfca6dd4b6e57953c1de --- /dev/null +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_processes_view_js.js @@ -0,0 +1,241 @@ +/*global window, rJS, RSVP, URI, location, $, + loopEventListener, btoa */ +/*jslint nomen: true, indent: 2, maxerr: 3*/ +(function (window, rJS, $, RSVP) { + "use strict"; + + var gadget_klass = rJS(window), + templater = gadget_klass.__template_element, + infobox_widget_template = Handlebars.compile( + templater.getElementById("infobox-widget-template").innerHTML + ); + + gadget_klass + .setState({ + opml: "", + opml_outline: "" + }) + .ready(function (gadget) { + gadget.property_dict = { + process_state: "monitor_process_resource.status", + monitor_process_state: "monitor_resource.status" + }; + }) + .ready(function (gadget) { + return gadget.getDeclaredGadget("jio_gadget") + .push(function (jio_gadget) { + gadget.property_dict.jio_gadget = jio_gadget; + }); + }) + .declareMethod('render', function (options) { + var gadget = this; + + return gadget.jio_get(options.key) + .push(function (outline) { + return gadget.changeState({opml_outline: outline}); + }) + .push(function () { + return gadget.jio_get(gadget.state.opml_outline.parent_url); + }) + .push(function (opml_doc) { + return gadget.changeState({opml: opml_doc}); + }) + .push(function () { + return RSVP.all([ + gadget.getUrlFor({command: 'history_previous'}), + gadget.getUrlFor({command: 'change', options: { + page: 'ojsm_resources_view', + key: gadget.state.opml_outline.reference + }}) + ]); + }) + .push(function (url_list) { + return gadget.updateHeader({ + page_title: gadget.state.opml_outline.title + ": Processes View", + front_url: url_list[0], + resources_url: url_list[1] + }); + }) + .push(function () { + var key, + promise_list = []; + gadget.property_dict.jio_gadget.createJio({ + type: "webhttp", + // XXX fix URL + url: (gadget.state.opml_outline.url + .replace("jio_private", "private") + + 'documents/'), + basic_login: gadget.state.opml.basic_login + }); + return gadget.property_dict.jio_gadget + .get(gadget.property_dict.monitor_process_state); + }) + .push(undefined, function (error) { + console.error(error); + $.notify( + "Error: Failed to download data files!", + { + position: "top right", + autoHideDelay: 7000, + className: "error" + } + ); + return undefined; + }) + .push(function (average_result) { + if (average_result !== undefined) { + return gadget.changeState({ + average_state: average_result + }); + } + }); + }) + .declareAcquiredMethod("updateHeader", "updateHeader") + .declareAcquiredMethod('jio_get', 'jio_get') + .declareAcquiredMethod("getUrlFor", "getUrlFor") + + .allowPublicAcquisition("jio_allDocs", function (param_list) { + var gadget = this, + result = {data: {total_rows: 0, rows: []}}; + return gadget.property_dict.jio_gadget.get(gadget.property_dict.process_state) + .push(function (process_list) { + var i; + result.data.total_rows = process_list.length; + for (i = 0; i < process_list.length; i += 1) { + result.data.rows.push({ + id: "process_t" + i, + value: { + process: process_list[i].name || '-', + pid: process_list[i].pid, + user: process_list[i].user || '-', + date: process_list[i].date || '-', + cpu_load: process_list[i].cpu_percent, + cpu_threads: process_list[i].cpu_num_threads, + memory_used: process_list[i].memory_rss, + memory_percent: process_list[i].memory_percent + } + }); + } + return result; + }); + }) + + .onStateChange(function (change_dict) { + var gadget = this, + monitor_resource_list, + resource_state_content; + if (!change_dict.hasOwnProperty('average_state')) { + return; + } + monitor_resource_list = [ + { + title: "CPU Used", + icon_name: "bolt", + value: change_dict.average_state.cpu_percent + " %" + }, + { + title: "CPU Used Time", + icon_name: "clock-o", + value: change_dict.average_state.cpu_time + " min" + }, + { + title: "CPU Num Threads", + icon_name: "dashboard", + value: change_dict.average_state.cpu_num_threads + }, + { + title: "Used Memory", + icon_name: "ticket", + value: change_dict.average_state.memory_rss + " Mo" + }, + { + title: "Memory Used", + icon_name: "pie-chart", + value: change_dict.average_state.memory_percent + " %" + }/*, + { + title: "Disk Used", + icon_name: "hdd-o", + value: change_dict.average_state.disk_used + " Mo" + }*/ + ]; + resource_state_content = infobox_widget_template({ + resource_list: monitor_resource_list + }); + gadget.element.querySelector(".infobox-container") + .innerHTML = resource_state_content; + + return new RSVP.Queue() + .push(function () { + return gadget.getDeclaredGadget('form_view'); + }) + .push(function (form_view) { + var column_list = [ + ['process', 'process'], + ['pid', 'PID'], + ['user', 'User'], + ['date', 'Create Date'], + ['cpu_load', 'CPU %'], + ['cpu_threads', 'CPU Threads'], + ['memory_used', 'Memory (Mo)'], + ['memory_percent', 'Memory %'] + ]; + return form_view.render({ + erp5_document: { + "_embedded": {"_view": { + "listbox": { + "column_list": column_list, + "show_anchor": 0, + "default_params": {}, + "editable": 0, + "editable_column_list": [], + "key": "field_listbox", + "lines": 200, + "list_method": "portal_catalog", + "query": "urn:jio:allDocs?query=portal_type%3A%22" + + "process_consumption" + "%22", + "portal_type": [], + "search_column_list": [], + "sort_column_list": [], + "sort": [], + "title": "Instance Processes Consumption", + "command": "reload", + "type": "ListBox" + } + }}, + "_links": { + "type": { + // form_list display portal_type in header + name: "" + } + } + }, + form_definition: { + group_list: [[ + "bottom", + [["listbox"]] + ]] + } + }); + }); + }) + + .onLoop(function () { + var gadget = this; + + return gadget.property_dict.jio_gadget + .get(gadget.property_dict.monitor_process_state) + .push(undefined, function (error) { + console.error(error); + return undefined; + }) + .push(function (average_result) { + if (average_result !== undefined) { + return gadget.changeState({ + average_state: average_result + }); + } + }); + }, 65000); + +}(window, rJS, $, RSVP)); \ No newline at end of file diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_process_view_js.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_processes_view_js.xml similarity index 96% rename from bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_process_view_js.xml rename to bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_processes_view_js.xml index eef628bebe5af9c9177eb7b511e518d2bb4be08d..91b97ef9e3556a1023403b587b8fee2f3d650de4 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_process_view_js.xml +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_processes_view_js.xml @@ -80,7 +80,7 @@ </item> <item> <key> <string>default_reference</string> </key> - <value> <string>gadget_monitoring_process_view.js</string> </value> + <value> <string>gadget_erp5_page_ojsm_processes_view.js</string> </value> </item> <item> <key> <string>description</string> </key> @@ -90,7 +90,7 @@ </item> <item> <key> <string>id</string> </key> - <value> <string>gadget_monitoring_process_view_js</string> </value> + <value> <string>gadget_erp5_page_ojsm_processes_view_js</string> </value> </item> <item> <key> <string>language</string> </key> @@ -108,7 +108,7 @@ </item> <item> <key> <string>title</string> </key> - <value> <string>Gadget Monitoring Process JS</string> </value> + <value> <string>Gadget Monitoring Processes JS</string> </value> </item> <item> <key> <string>version</string> </key> @@ -239,7 +239,7 @@ </item> <item> <key> <string>serial</string> </key> - <value> <string>961.21883.33309.38348</string> </value> + <value> <string>963.16563.15280.46899</string> </value> </item> <item> <key> <string>state</string> </key> @@ -257,7 +257,7 @@ </tuple> <state> <tuple> - <float>1502445069.11</float> + <float>1510052139.85</float> <string>UTC</string> </tuple> </state> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_resources_view_html.html b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_resources_view_html.html new file mode 100644 index 0000000000000000000000000000000000000000..5b71188fc29205cde196ddf1766daa265f1fd0ee --- /dev/null +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_resources_view_html.html @@ -0,0 +1,49 @@ +<!doctype html> +<html> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + + <title>Monitoring Resource View Page</title> + + <link href="gadget_officejs_monitoring_custom.css" rel="stylesheet" type="text/css"/> + + <script src="notify.min.js"></script> + <script src="rsvp.js"></script> + <script src="renderjs.js"></script> + <!--<script src="handlebars.js"></script>--> + + <!--<script id="graph-label-widget-template" type="text/x-handlebars-template"> + <fieldset class="graph-state-labels" data-role="controlgroup"> + {{#each label_list}} + <input type="checkbox" name="{{id}}" id="{{id}}" checked=""> + <label for="{{id}}" style="color: {{color}};" class="{{graph}}" rel="{{index}}">{{name}}</label> + {{/each}} + </fieldset> + </script>--> + + <script src="gadget_erp5_page_ojsm_resources_view.js"></script> + </head> + + <body> + <div data-gadget-url="gadget_officejs_monitoring_jio.html" data-gadget-scope="jio_gadget" data-gadget-sandbox="public"></div> + <h2 class="header-notice"><i class="ui-icon ui-icon-custom ui-icon-info"></i> Graph content will be reloaded automatically every minutes.</h2> + <!--<ul class="ui-grid-column ui-grid-column-5 graph_cpu"> + <li class="ui-grid-span-5 custom-grid-wrap graph-cell"> + <div data-gadget-url="gadget_erp5_graph.html" data-gadget-scope="graph_cpu" class="graph graph-h-medium" data-gadget-sandbox="public"></div> + </li> + <li class="ui-grid-span-1 custom-grid-wrap graph-cell"> + + </li> + </ul>--> + <div class="ui-grid-a ui-responsive"> + <div data-gadget-url="gadget_field_graph_dygraph.html" data-gadget-scope="graph_cpu" class="graph graph-h-medium" data-gadget-sandbox="public"></div> + </div> + <div class="ui-grid-b ui-responsive"> + <div data-gadget-url="gadget_field_graph_dygraph.html" data-gadget-scope="graph_io" class="graph graph-h-medium" data-gadget-sandbox="public"></div> + </div> + <div class="ui-grid-a ui-responsive"> + <div data-gadget-url="gadget_field_graph_dygraph.html" data-gadget-scope="graph_memory_used" class="graph graph-h-medium" data-gadget-sandbox="public"></div> + </div> + </body> +</html> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_message_log_html.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_resources_view_html.xml similarity index 95% rename from bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_message_log_html.xml rename to bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_resources_view_html.xml index ab4cd8e70dff98dc10b181195ad56e0545fb1679..ae3dfc5c946fecaa0b7889767c46726ef32ce782 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_message_log_html.xml +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_resources_view_html.xml @@ -83,7 +83,7 @@ </item> <item> <key> <string>default_reference</string> </key> - <value> <string>gadget_monitoring_message_log.html</string> </value> + <value> <string>gadget_erp5_page_ojsm_resources_view.html</string> </value> </item> <item> <key> <string>description</string> </key> @@ -93,7 +93,7 @@ </item> <item> <key> <string>id</string> </key> - <value> <string>gadget_monitoring_message_log_html</string> </value> + <value> <string>gadget_erp5_page_ojsm_resources_view_html</string> </value> </item> <item> <key> <string>language</string> </key> @@ -113,7 +113,7 @@ </item> <item> <key> <string>title</string> </key> - <value> <string>Monitoring Log List</string> </value> + <value> <string>Gadget OJS Monitoring Resources View</string> </value> </item> <item> <key> <string>version</string> </key> @@ -201,7 +201,7 @@ </tuple> <state> <tuple> - <float>1467736090.49</float> + <float>1507116490.54</float> <string>UTC</string> </tuple> </state> @@ -246,7 +246,7 @@ </item> <item> <key> <string>serial</string> </key> - <value> <string>952.24422.29891.16622</string> </value> + <value> <string>962.36002.50044.8055</string> </value> </item> <item> <key> <string>state</string> </key> @@ -264,7 +264,7 @@ </tuple> <state> <tuple> - <float>1467963489.81</float> + <float>1507902037.02</float> <string>UTC</string> </tuple> </state> @@ -321,7 +321,7 @@ </tuple> <state> <tuple> - <float>1467735613.0</float> + <float>1507111456.51</float> <string>UTC</string> </tuple> </state> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_resources_view_js.js b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_resources_view_js.js new file mode 100644 index 0000000000000000000000000000000000000000..88cf509a7750e3e51551e866cc13424d9d5e058f --- /dev/null +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_resources_view_js.js @@ -0,0 +1,446 @@ +/*global window, rJS, RSVP, Handlebars, $, console */ +/*jslint nomen: true, indent: 2, maxerr: 3*/ +(function (window, rJS, RSVP, $, console) { + "use strict"; + + var gadget_klass = rJS(window); + + + function loadGraphData(gadget, key) { + var resource_key = gadget.property_dict.ressource_dict[key]; + return gadget.property_dict.jio_gadget.get(resource_key) + .push(undefined, function (error) { + console.log(error); + $.notify( + "Error: Failed to download resource file '" + resource_key + + "' from URL: " + gadget.state.opml_outline.url, + { + position: "top right", + autoHideDelay: 7000, + className: "error" + } + ); + return { + data: [] + }; + }) + .push(function (jio_element) { + gadget.property_dict.date_window = getDateWindow(gadget.property_dict.mem_data.data); + if (!jio_element.hasOwnProperty('data')) { + return {data: []}; + } + switch (key) { + case "memory_resource": + gadget.property_dict.mem_data = jio_element; + break; + case "cpu_resource": + gadget.property_dict.process_data = jio_element; + break; + case "io_resource": + gadget.property_dict.io_data = jio_element; + break; + } + return jio_element; + }); + } + + function updateIOData(gadget, date_window) { + var i, + element, + prev_element, + date_diff, + line_list = [], + data_list = [], + axis_dict = {}; + + function convertElement(element) { + var element_list = element.split(','); + return [ + element_list[0], + parseFloat(element_list[1].trim()), + parseFloat(element_list[2].trim()), + element_list[3].trim() + ]; + } + //"date, io rw counter, io cycles counter, disk used" + line_list = ["date", "io rw count (Kb/s)", "io cycles count (/1000)"]; //, "disk used"]; + axis_dict["0"] = { + "title": "IO resources usage", + "scale_type": "linear", + "value_type": "date", + "zoom_range": date_window + }; + for (i = 1; i < line_list.length; i += 1) { + line_list[i] = line_list[i].trim(); + data_list.push({ + value_dict: {"0": [], "1": []}, + type: "surface", + axis_mapping_id_dict: {"1": "1_" + i}, + title: line_list[i] + }); + axis_dict["1_" + i] = {"title": line_list[i], "position": "right"}; + } + if (gadget.property_dict.io_data.data.length > 2) { + prev_element = convertElement(gadget.property_dict.io_data.data[1]); + for (i = 2; i < gadget.property_dict.io_data.data.length; i += 1) { + element = convertElement(gadget.property_dict.io_data.data[i]); + date_diff = (new Date(element[0]).getTime() - new Date(prev_element[0]).getTime()) / 1000; + // XXX - repeating date everytime + data_list[0].value_dict["0"].push(element[0]); + data_list[0].value_dict["1"].push((element[1] - prev_element[1]) / (1024 * date_diff)); + // XXX - repeating date everytime + data_list[1].value_dict["0"].push(element[0]); + data_list[1].value_dict["1"].push((element[2] - prev_element[2]) / 1000); + // XXX - repeating date everytime + /*data_list[2].value_dict["0"].push(element[0]); + data_list[2].value_dict["1"].push(element[3]);*/ + prev_element = element; + } + } + return { + value:{ + data: data_list, + layout: { + axis_dict : axis_dict, + title: "IO resources usage" + } + } + }; + } + + function getDateWindow(data) { + var max_date, + begin_date, + end_date, + date_window = []; + if (data.length > 0) { + max_date = data[data.length - 1].split(',')[0]; + begin_date = new Date(max_date); + end_date = new Date(max_date); + begin_date.setHours(begin_date.getHours() -2); + date_window = [Date.parse(begin_date), Date.parse(end_date)]; + } + return date_window; + } + + function updateGraph (gadget) { + return new RSVP.Queue() + .push(function () { + var key, + promise_list = []; + for (key in gadget.property_dict.ressource_dict) { + promise_list.push(loadGraphData(gadget, key)); + } + return RSVP.all(promise_list); + }) + .push(function () { + var data = updateIOData(gadget, gadget.property_dict.date_window); + return gadget.property_dict.graph_io.render(data); + }) + .push(function () { + var data_list = [], + axis_dict = {}, + line_list, + i, + j; + + axis_dict = { + "0": { + "title": "Memory resources usage (Mo)", + "scale_type": "linear", + "value_type": "date", + "zoom_range": gadget.property_dict.date_window + }, + "1_2": { + "title": "Memory used percent", + "position": "right" + }, + "1_1": { + "title": "Memory used", + "position": "right" + } + }; + /*data_list.push({ + value_dict: {"0": [], "1": []}, + type: "surface", + axis_mapping_id_dict: {"1": "1_1"}, + title: "Memory used percent" + });*/ + data_list.push({ + value_dict: {"0": [], "1": []}, + type: "surface", + axis_mapping_id_dict: {"1": "1_2"}, + title: "Memory used" + }); + for (i = 1; i < gadget.property_dict.mem_data.data.length; i += 1) { + line_list = gadget.property_dict.mem_data.data[i].split(','); + data_list[0].value_dict["0"].push(line_list[0]); + data_list[0].value_dict["1"].push(line_list[2]); + } + return gadget.property_dict.graph_mem_used.render({ + value:{ + data: data_list, + layout: { + axis_dict : axis_dict, + title: "Memory resources usage" + } + } + }); + }) + .push(function () { + var data_list = [], + axis_dict = {}, + previous_time = 0, + line_list, + cpu_time_index = -1, + i, + j; + + function getCPUTime(current) { + var increment = 0; + if (previous_time === 0) { + previous_time = current; + return 0; + } + increment = current - previous_time; + previous_time = current; + return increment; + } + + //"date, total process, CPU percent, CPU time, CPU threads" + if (gadget.property_dict.process_data.data.length > 0) { + line_list = gadget.property_dict.process_data.data[0].split(','); + } else { + line_list = ["date", "total process", "CPU percent", + "CPU time", "CPU threads"]; + } + axis_dict["0"] = { + "title": "Process resources usage", + "scale_type": "linear", + "value_type": "date", + "zoom_range": gadget.property_dict.date_window + }; + for (i = 1; i < line_list.length; i += 1) { + line_list[i] = line_list[i].trim(); + data_list.push({ + value_dict: {"0": [], "1": []}, + type: "line", + axis_mapping_id_dict: {"1": "1_" + i}, + title: line_list[i] + }); + if (line_list[i] === "CPU time") { + cpu_time_index = i; + } + axis_dict["1_" + i] = {"title": line_list[i], "position": "right"}; + } + for (i = 1; i < gadget.property_dict.process_data.data.length; i += 1) { + line_list = gadget.property_dict.process_data.data[i].split(','); + for (j = 1; j < line_list.length; j += 1) { + // XXX - repeating date everytime + data_list[j - 1].value_dict["0"].push(line_list[0]); + if (j === cpu_time_index) { + data_list[j - 1].value_dict["1"].push(getCPUTime(line_list[j])); + } else { + data_list[j - 1].value_dict["1"].push(line_list[j]); + } + } + } + return gadget.property_dict.graph_cpu.render({ + value:{ + data: data_list, + layout: { + axis_dict : axis_dict, + title: "Process resources usage" + } + } + }); + }); + } + + gadget_klass + .setState({ + opml: "", + opml_outline: "" + }) + .ready(function (gadget) { + gadget.property_dict = {}; + gadget.property_dict.render_deferred = RSVP.defer(); + gadget.property_dict.ressource_dict = { + memory_resource: "monitor_resource_memory.data", + cpu_resource: "monitor_resource_process.data", + io_resource: "monitor_resource_io.data" + }; + }) + .ready(function (gadget) { + return gadget.getDeclaredGadget("graph_memory_used") + .push(function (graph_memory_used) { + gadget.property_dict.graph_mem_used = graph_memory_used; + }); + }) + .ready(function (gadget) { + return gadget.getDeclaredGadget("graph_cpu") + .push(function (graph_cpu) { + gadget.property_dict.graph_cpu = graph_cpu; + gadget.property_dict.graph_cpu_label_list = []; + }); + }) + .ready(function (gadget) { + return gadget.getDeclaredGadget("graph_io") + .push(function (graph_io) { + gadget.property_dict.graph_io = graph_io; + }); + }) + .ready(function (gadget) { + return gadget.getDeclaredGadget("jio_gadget") + .push(function (jio_gadget) { + gadget.property_dict.jio_gadget = jio_gadget; + }); + }) + .declareMethod("render", function (options) { + var gadget = this; + + gadget.property_dict.document_key = options.key; + return gadget.jio_get(options.key) + .push(function (outline) { + return gadget.changeState({opml_outline: outline}); + }) + .push(function () { + return gadget.jio_get(gadget.state.opml_outline.parent_url); + }) + .push(function (opml_doc) { + return gadget.changeState({opml: opml_doc}); + }) + .push(function () { + return RSVP.all([ + gadget.getUrlFor({command: 'history_previous'}), + gadget.getUrlFor({command: 'change', options: { + page: 'ojsm_processes_view', + key: gadget.state.opml_outline.reference + }}) + ]); + }) + .push(function (url_list) { + return gadget.updateHeader({ + page_title: gadget.state.opml_outline.title + ": Resources Consumption View", + front_url: url_list[0], + processes_url: url_list[1] + }); + }) + .push(function () { + gadget.property_dict.jio_gadget.createJio({ + type: "webhttp", + // XXX Fix URL + url: (gadget.state.opml_outline.url + .replace("jio_private", "private") + + 'documents/'), + basic_login: gadget.state.opml.basic_login + }); + gadget.property_dict.mem_data = {data: []}; + gadget.property_dict.process_data = {data: []}; + gadget.property_dict.io_data = {data: []}; + return gadget.property_dict.render_deferred.resolve(); + }); + }) + + .declareAcquiredMethod("updateHeader", "updateHeader") + .declareAcquiredMethod('jio_get', 'jio_get') + .declareAcquiredMethod("getUrlFor", "getUrlFor") + + .onLoop(function () { + return updateGraph(this); + }, 65000) + + ///////////////////////////////////////////////////////////////// + // declared service + ///////////////////////////////////////////////////////////////// + .declareService(function () { + var gadget = this, + date_window = []; + + /*function toggleSerieVisibility(evt) { + var checkbox = evt.target.nextSibling, + index = $(evt.target).attr('rel'); + if ($(checkbox).prop("checked")) { + $(checkbox).prop("checked", false).checkboxradio("refresh"); + } else { + $(checkbox).prop("checked", true).checkboxradio("refresh"); + } + return gadget.property_dict.graph_cpu.setVisibility(parseInt(index, 10), $(checkbox).prop("checked")) + .push(function () { + return evt; + }); + }*/ + + return new RSVP.Queue() + .push(function () { + return gadget.property_dict.render_deferred.promise; + }) + /**.push(function () { + return gadget.property_dict.graph_cpu.render( + gadget.property_dict.process_data.data.join('\n'), + { + xlabel: '<span class="graph-label"><i class="fa fa-line-chart"></i> Process resources usage</span>', + labelsDivStyles: { 'textAlign': 'right' }, + dateWindow: date_window, + }, + "customInteractionModel" + ); + }) + .push(function () { + var label_list = gadget.property_dict.graph_cpu_label_list, + element = 'graph_cpu'; + if (gadget.property_dict.graph_cpu_label_list.length > 0) { + label_list = label_list.slice(1); // remove date column + return gadget.property_dict.graph_cpu.getColors() + .push(function (color_list) { + var label_content, + name_list = [], + i; + for (i = 0; i < label_list.length; i += 1) { + name_list.push({ + name: label_list[i], + id: "label_" + label_list[i].trim().replace(/\s/g, '_'), + color: color_list[i], + graph: element, + index: i + }); + } + label_content = graph_labels_widget({ + label_list: name_list + }); + gadget.property_dict.element.querySelector(".ui-panel-overview ." + element + " .ui-grid-span-1") + .innerHTML = label_content; + return $(gadget.property_dict.element.querySelectorAll("[data-role=controlgroup]")) + .controlgroup().controlgroup("refresh"); + }); + } + }) + .push(function () { + var promise_list = [], + element_list = gadget.property_dict.element.querySelectorAll("label.graph_cpu"), + i; + for (i = 0; i < element_list.length; i += 1) { + promise_list.push( + loopEventListener( + element_list[i], + 'click', + false, + toggleSerieVisibility + ) + ); + if ($(element_list[i]).attr('for').toLowerCase() !== 'label_cpu_percent' && $(element_list[i]).attr('for').toLowerCase() !== 'label_total_process') { + promise_list.push(gadget.property_dict.graph_cpu.setVisibility( + parseInt($(element_list[i]).attr('rel'), 10), false) + ); + promise_list.push($(element_list[i]).click()); + } + } + RSVP.all(promise_list); + return updateGraphTimer(); + })**/ + .push(function () { + return updateGraph(gadget); + }); + }); + +}(window, rJS, RSVP, $, console)); \ No newline at end of file diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_resources_view_js.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_resources_view_js.xml new file mode 100644 index 0000000000000000000000000000000000000000..40cb66f0d5ba48c69a74ad12c520e0a1df64bfc8 --- /dev/null +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_resources_view_js.xml @@ -0,0 +1,332 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Web Script" module="erp5.portal_type"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_Access_contents_information_Permission</string> </key> + <value> + <tuple> + <string>Anonymous</string> + <string>Assignee</string> + <string>Assignor</string> + <string>Associate</string> + <string>Auditor</string> + <string>Manager</string> + <string>Owner</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Add_portal_content_Permission</string> </key> + <value> + <tuple> + <string>Assignee</string> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Change_local_roles_Permission</string> </key> + <value> + <tuple> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Modify_portal_content_Permission</string> </key> + <value> + <tuple> + <string>Assignee</string> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_View_Permission</string> </key> + <value> + <tuple> + <string>Anonymous</string> + <string>Assignee</string> + <string>Assignor</string> + <string>Associate</string> + <string>Auditor</string> + <string>Manager</string> + <string>Owner</string> + </tuple> + </value> + </item> + <item> + <key> <string>categories</string> </key> + <value> + <tuple> + <string>classification/collaborative/public</string> + </tuple> + </value> + </item> + <item> + <key> <string>content_md5</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>text/javascript</string> </value> + </item> + <item> + <key> <string>default_reference</string> </key> + <value> <string>gadget_erp5_page_ojsm_resources_view.js</string> </value> + </item> + <item> + <key> <string>description</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>gadget_erp5_page_ojsm_resources_view_js</string> </value> + </item> + <item> + <key> <string>language</string> </key> + <value> <string>en</string> </value> + </item> + <item> + <key> <string>portal_type</string> </key> + <value> <string>Web Script</string> </value> + </item> + <item> + <key> <string>short_title</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string>Gadget Monitoring Resources View JS</string> </value> + </item> + <item> + <key> <string>version</string> </key> + <value> <string>001</string> </value> + </item> + <item> + <key> <string>workflow_history</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="2" aka="AAAAAAAAAAI="> + <pickle> + <global name="PersistentMapping" module="Persistence.mapping"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> + <dictionary> + <item> + <key> <string>document_publication_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> + </value> + </item> + <item> + <key> <string>edit_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> + </value> + </item> + <item> + <key> <string>processing_status_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent> + </value> + </item> + </dictionary> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="3" aka="AAAAAAAAAAM="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> + </pickle> + <pickle> + <tuple> + <none/> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>publish_alive</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1507116486.61</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + <item> + <key> <string>validation_state</string> </key> + <value> <string>published_alive</string> </value> + </item> + </dictionary> + </list> + </tuple> + </pickle> + </record> + <record id="4" aka="AAAAAAAAAAQ="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> + </pickle> + <pickle> + <tuple> + <none/> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>edit</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>serial</string> </key> + <value> <string>962.64762.24229.58760</string> </value> + </item> + <item> + <key> <string>state</string> </key> + <value> <string>current</string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1508860480.94</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + </dictionary> + </list> + </tuple> + </pickle> + </record> + <record id="5" aka="AAAAAAAAAAU="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> + </pickle> + <pickle> + <tuple> + <none/> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>detect_converted_file</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>external_processing_state</string> </key> + <value> <string>converted</string> </value> + </item> + <item> + <key> <string>serial</string> </key> + <value> <string>0.0.0.0</string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1507116464.83</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + </dictionary> + </list> + </tuple> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_software_instance_list_html.html b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_software_instance_list_html.html new file mode 100644 index 0000000000000000000000000000000000000000..c8d0e780342eed54128a831bec1436279d7d7ead --- /dev/null +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_software_instance_list_html.html @@ -0,0 +1,20 @@ +<!doctype html> +<html> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + + <title>Monitoring Software Instances</title> + + <link href="gadget_officejs_monitoring_custom.css" rel="stylesheet" type="text/css"/> + + <script src="rsvp.js"></script> + <script src="renderjs.js"></script> + <script src="gadget_erp5_page_ojsm_software_instance_list.js"></script> + + </head> + + <body> + <div data-gadget-url="gadget_erp5_pt_form_list.html" data-gadget-scope="form_list"></div> + </body> +</html> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_software_instance_list_html.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_software_instance_list_html.xml new file mode 100644 index 0000000000000000000000000000000000000000..789f33fafbe7d1a69d32288fb78103930ebe2cfd --- /dev/null +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_software_instance_list_html.xml @@ -0,0 +1,336 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Web Page" module="erp5.portal_type"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_Access_contents_information_Permission</string> </key> + <value> + <tuple> + <string>Anonymous</string> + <string>Assignee</string> + <string>Assignor</string> + <string>Associate</string> + <string>Auditor</string> + <string>Manager</string> + <string>Owner</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Add_portal_content_Permission</string> </key> + <value> + <tuple> + <string>Assignee</string> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Change_local_roles_Permission</string> </key> + <value> + <tuple> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Modify_portal_content_Permission</string> </key> + <value> + <tuple> + <string>Assignee</string> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_View_Permission</string> </key> + <value> + <tuple> + <string>Anonymous</string> + <string>Assignee</string> + <string>Assignor</string> + <string>Associate</string> + <string>Auditor</string> + <string>Manager</string> + <string>Owner</string> + </tuple> + </value> + </item> + <item> + <key> <string>categories</string> </key> + <value> + <tuple> + <string>classification/collaborative/public</string> + </tuple> + </value> + </item> + <item> + <key> <string>content_md5</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>text/html</string> </value> + </item> + <item> + <key> <string>default_reference</string> </key> + <value> <string>gadget_erp5_page_ojsm_software_instance_list.html</string> </value> + </item> + <item> + <key> <string>description</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>gadget_erp5_page_ojsm_software_instance_list_html</string> </value> + </item> + <item> + <key> <string>language</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>portal_type</string> </key> + <value> <string>Web Page</string> </value> + </item> + <item> + <key> <string>short_title</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string>Gadget OJS Monitoring Software Instance List</string> </value> + </item> + <item> + <key> <string>version</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>workflow_history</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="2" aka="AAAAAAAAAAI="> + <pickle> + <global name="PersistentMapping" module="Persistence.mapping"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> + <dictionary> + <item> + <key> <string>document_publication_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> + </value> + </item> + <item> + <key> <string>edit_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> + </value> + </item> + <item> + <key> <string>processing_status_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent> + </value> + </item> + </dictionary> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="3" aka="AAAAAAAAAAM="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> + </pickle> + <pickle> + <tuple> + <none/> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>publish_alive</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1507039000.34</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + <item> + <key> <string>validation_state</string> </key> + <value> <string>published_alive</string> </value> + </item> + </dictionary> + </list> + </tuple> + </pickle> + </record> + <record id="4" aka="AAAAAAAAAAQ="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> + </pickle> + <pickle> + <tuple> + <none/> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>edit</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>serial</string> </key> + <value> <string>962.34404.44119.35515</string> </value> + </item> + <item> + <key> <string>state</string> </key> + <value> <string>current</string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1507901852.14</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + </dictionary> + </list> + </tuple> + </pickle> + </record> + <record id="5" aka="AAAAAAAAAAU="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> + </pickle> + <pickle> + <tuple> + <none/> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>detect_converted_file</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>external_processing_state</string> </key> + <value> <string>converted</string> </value> + </item> + <item> + <key> <string>serial</string> </key> + <value> <string>0.0.0.0</string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1507038898.04</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + </dictionary> + </list> + </tuple> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_software_instance_list_js.js b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_software_instance_list_js.js new file mode 100644 index 0000000000000000000000000000000000000000..20bda084f499270a2f114878983ad9a53c97ddd9 --- /dev/null +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_software_instance_list_js.js @@ -0,0 +1,160 @@ +/*global window, rJS, RSVP */ +/*jslint nomen: true, indent: 2, maxerr: 3*/ +(function (window, rJS, RSVP) { + "use strict"; + + rJS(window) + .declareAcquiredMethod("updateHeader", "updateHeader") + .declareAcquiredMethod("redirect", "redirect") + .declareAcquiredMethod("reload", "reload") + .declareAcquiredMethod("getSetting", "getSetting") + .declareAcquiredMethod("setSetting", "setSetting") + .declareAcquiredMethod("getUrlFor", "getUrlFor") + .declareAcquiredMethod("jio_allDocs", "jio_allDocs") + + .allowPublicAcquisition("jio_allDocs", function (param_list) { + var gadget = this; + return gadget.jio_allDocs(param_list[0]) + .push(function (result) { + var i, value, len = result.data.total_rows; + for (i = 0; i < len; i += 1) { + if (result.data.rows[i].value.hasOwnProperty("date")) { + value = new Date(result.data.rows[i].value.date); + result.data.rows[i].value.date = { + allow_empty_time: 0, + ampm_time_style: 0, + css_class: "date_field", + date_only: 0, + description: "The Date", + editable: 0, + hidden: 0, + hidden_day_is_last_day: 0, + "default": value.toUTCString(), + key: "date", + required: 0, + timezone_style: 0, + title: "Status Date", + type: "DateTimeField" + }; + result.data.rows[i].value["listbox_uid:list"] = { + key: "listbox_uid:list", + value: 2713 + }; + } + if (result.data.rows[i].value.hasOwnProperty("status")) { + value = result.data.rows[i].value.status; + result.data.rows[i].value.status = { + css_class: "", + description: "The Status", + hidden: 0, + "default": value, + key: "status", + url: "gadget_erp5_field_status.html", + title: "Status", + type: "GadgetField" + }; + result.data.rows[i].value["listbox_uid:list"] = { + key: "listbox_uid:list", + value: 2713 + }; + } + } + return result; + }); + }) + + ///////////////////////////////////////////////////////////////// + // declared methods + ///////////////////////////////////////////////////////////////// + + .declareMethod("triggerSubmit", function () { + var argument_list = arguments; + return this.getDeclaredGadget('form_list') + .push(function (gadget) { + return gadget.triggerSubmit.apply(gadget, argument_list); + }); + }) + .declareMethod("render", function (options) { + return this.changeState({ + options: options, + latest_reload_time: new Date().getTime() + }); + }) + .onStateChange(function () { + var gadget = this, + lines_limit; + + return new RSVP.Queue() + .push(function () { + return gadget.getSetting("listbox_lines_limit", 100); + }) + .push(function (listbox_lines_limit) { + lines_limit = listbox_lines_limit; + return gadget.getDeclaredGadget('form_list'); + }) + .push(function (form_list) { + var column_list = [ + ['title', 'Instance Title'], + ['hosting-title', 'Hosting Subscription'], + ['date', 'Status Date'], + ['status', 'Status'] + ]; + return form_list.render({ + erp5_document: { + "_embedded": {"_view": { + "listbox": { + "column_list": column_list, + "show_anchor": 0, + "default_params": {}, + "editable": 0, + "editable_column_list": [], + "key": "software_instance_listbox", + "lines": lines_limit, + "list_method": "portal_catalog", + "query": "urn:jio:allDocs?query=portal_type%3A%22" + + "global" + "%22", + "portal_type": [], + "search_column_list": column_list, + "sort_column_list": column_list, + "sort": [["hosting-title", "ascending"]], + "title": "Software Instances", + "type": "ListBox" + } + }}, + "_links": { + "type": { + // form_list display portal_type in header + name: "" + } + } + }, + form_definition: { + group_list: [[ + "bottom", + [["listbox"]] + ]] + } + }); + }) + .push(function (result) { + return gadget.updateHeader({ + page_title: "Software Instances Status", + filter_action: true + }); + }); + }) + + .onLoop(function () { + var gadget = this; + + console.log("ONloop..."); + return gadget.getSetting('latest_sync_time') + .push(function (latest_sync_time) { + if (latest_sync_time > gadget.state.latest_reload_time) { + return gadget.changeState({latest_reload_time: new Date().getTime()}); + } + }); + }, 30000); + +}(window, rJS, RSVP)); + diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_software_instance_list_js.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_software_instance_list_js.xml new file mode 100644 index 0000000000000000000000000000000000000000..adab4e72eefa6486cf419f9049ee3a645ed0a477 --- /dev/null +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_software_instance_list_js.xml @@ -0,0 +1,332 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Web Script" module="erp5.portal_type"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_Access_contents_information_Permission</string> </key> + <value> + <tuple> + <string>Anonymous</string> + <string>Assignee</string> + <string>Assignor</string> + <string>Associate</string> + <string>Auditor</string> + <string>Manager</string> + <string>Owner</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Add_portal_content_Permission</string> </key> + <value> + <tuple> + <string>Assignee</string> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Change_local_roles_Permission</string> </key> + <value> + <tuple> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Modify_portal_content_Permission</string> </key> + <value> + <tuple> + <string>Assignee</string> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_View_Permission</string> </key> + <value> + <tuple> + <string>Anonymous</string> + <string>Assignee</string> + <string>Assignor</string> + <string>Associate</string> + <string>Auditor</string> + <string>Manager</string> + <string>Owner</string> + </tuple> + </value> + </item> + <item> + <key> <string>categories</string> </key> + <value> + <tuple> + <string>classification/collaborative/public</string> + </tuple> + </value> + </item> + <item> + <key> <string>content_md5</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>text/javascript</string> </value> + </item> + <item> + <key> <string>default_reference</string> </key> + <value> <string>gadget_erp5_page_ojsm_software_instance_list.js</string> </value> + </item> + <item> + <key> <string>description</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>gadget_erp5_page_ojsm_software_instance_list_js</string> </value> + </item> + <item> + <key> <string>language</string> </key> + <value> <string>en</string> </value> + </item> + <item> + <key> <string>portal_type</string> </key> + <value> <string>Web Script</string> </value> + </item> + <item> + <key> <string>short_title</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string>Monitoring Software Instance List Gadget JS</string> </value> + </item> + <item> + <key> <string>version</string> </key> + <value> <string>001</string> </value> + </item> + <item> + <key> <string>workflow_history</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="2" aka="AAAAAAAAAAI="> + <pickle> + <global name="PersistentMapping" module="Persistence.mapping"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> + <dictionary> + <item> + <key> <string>document_publication_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> + </value> + </item> + <item> + <key> <string>edit_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> + </value> + </item> + <item> + <key> <string>processing_status_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent> + </value> + </item> + </dictionary> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="3" aka="AAAAAAAAAAM="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> + </pickle> + <pickle> + <tuple> + <none/> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>publish_alive</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1507039210.34</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + <item> + <key> <string>validation_state</string> </key> + <value> <string>published_alive</string> </value> + </item> + </dictionary> + </list> + </tuple> + </pickle> + </record> + <record id="4" aka="AAAAAAAAAAQ="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> + </pickle> + <pickle> + <tuple> + <none/> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>edit</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>serial</string> </key> + <value> <string>963.19079.34809.6058</string> </value> + </item> + <item> + <key> <string>state</string> </key> + <value> <string>current</string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1510051687.96</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + </dictionary> + </list> + </tuple> + </pickle> + </record> + <record id="5" aka="AAAAAAAAAAU="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> + </pickle> + <pickle> + <tuple> + <none/> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>detect_converted_file</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>external_processing_state</string> </key> + <value> <string>converted</string> </value> + </item> + <item> + <key> <string>serial</string> </key> + <value> <string>0.0.0.0</string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1507039010.86</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + </dictionary> + </list> + </tuple> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_status_list_html.html b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_status_list_html.html new file mode 100644 index 0000000000000000000000000000000000000000..1b1983dd50e40edafec1852ad40881b2aeb09496 --- /dev/null +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_status_list_html.html @@ -0,0 +1,18 @@ +<!doctype html> +<html> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + + <title>Monitoring Promises Status</title> + <link href="gadget_officejs_monitoring_custom.css" rel="stylesheet" type="text/css"/> + + <script src="rsvp.js"></script> + <script src="renderjs.js"></script> + <script src="gadget_erp5_page_ojsm_status_list.js"></script> + </head> + + <body> + <div data-gadget-url="gadget_erp5_pt_form_list.html" data-gadget-scope="form_list" data-gadget-sandbox="public"></div> + </body> +</html> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_log_widget_html.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_status_list_html.xml similarity index 95% rename from bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_log_widget_html.xml rename to bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_status_list_html.xml index 27def4d645bbf44dc9b33b2f5ae54ab848029fa2..f0f441ab6daba831e73764af74aa047c377461e5 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_log_widget_html.xml +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_status_list_html.xml @@ -83,7 +83,7 @@ </item> <item> <key> <string>default_reference</string> </key> - <value> <string>gadget_monitoring_log_widget.html</string> </value> + <value> <string>gadget_erp5_page_ojsm_status_list.html</string> </value> </item> <item> <key> <string>description</string> </key> @@ -93,7 +93,7 @@ </item> <item> <key> <string>id</string> </key> - <value> <string>gadget_monitoring_log_widget_html</string> </value> + <value> <string>gadget_erp5_page_ojsm_status_list_html</string> </value> </item> <item> <key> <string>language</string> </key> @@ -113,7 +113,7 @@ </item> <item> <key> <string>title</string> </key> - <value> <string>Monitoring Log Widget</string> </value> + <value> <string>Gadget OJS Monitoring Promise Status List</string> </value> </item> <item> <key> <string>version</string> </key> @@ -201,7 +201,7 @@ </tuple> <state> <tuple> - <float>1467723907.57</float> + <float>1506516313.96</float> <string>UTC</string> </tuple> </state> @@ -246,7 +246,7 @@ </item> <item> <key> <string>serial</string> </key> - <value> <string>952.23189.41799.51933</string> </value> + <value> <string>962.53042.7222.55944</string> </value> </item> <item> <key> <string>state</string> </key> @@ -264,7 +264,7 @@ </tuple> <state> <tuple> - <float>1467735725.37</float> + <float>1508235749.35</float> <string>UTC</string> </tuple> </state> @@ -321,7 +321,7 @@ </tuple> <state> <tuple> - <float>1467723676.69</float> + <float>1506516149.14</float> <string>UTC</string> </tuple> </state> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_status_list_js.js b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_status_list_js.js new file mode 100644 index 0000000000000000000000000000000000000000..a0066fc430946586de0f664b85d610983c6c931b --- /dev/null +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_status_list_js.js @@ -0,0 +1,183 @@ +/*global window, rJS, RSVP */ +/*jslint nomen: true, indent: 2, maxerr: 3*/ +(function (window, rJS, RSVP) { + "use strict"; + + rJS(window) + .declareAcquiredMethod("updateHeader", "updateHeader") + .declareAcquiredMethod("redirect", "redirect") + .declareAcquiredMethod("getSetting", "getSetting") + .declareAcquiredMethod("setSetting", "setSetting") + .declareAcquiredMethod("jio_allDocs", "jio_allDocs") + + .allowPublicAcquisition("jio_allDocs", function (param_list) { + var gadget = this; + return gadget.jio_allDocs(param_list[0]) + .push(function (result) { + var i, j, tmp, value, len = result.data.total_rows; + for (i = 0; i < len; i += 1) { + if (result.data.rows[i].value.hasOwnProperty("lastBuildDate")) { + value = new Date(result.data.rows[i].value.lastBuildDate); + result.data.rows[i].value.lastBuildDate = { + allow_empty_time: 0, + ampm_time_style: 0, + css_class: "date_field", + date_only: 0, + description: "The Date", + editable: 0, + hidden: 0, + hidden_day_is_last_day: 0, + "default": value.toUTCString(), + key: "lastBuildDate", + required: 0, + timezone_style: 0, + title: "Promise Date", + type: "DateTimeField" + }; + result.data.rows[i].value["listbox_uid:list"] = { + key: "listbox_uid:list", + value: 2713 + }; + } + if (result.data.rows[i].value.hasOwnProperty("description")) { + tmp = result.data.rows[i].value.description.split('\n'); + value = ""; + for (j = 1; j < tmp.length; j += 1) { + // first line of text is the date and status + if (!value && tmp[j].trim() !== "") { + value += tmp[j].slice(0, 30); + if (tmp[j].length >= 30 || j + 1 < tmp.length) { + // a part of text is not shown + value += "..."; + } + } + } + result.data.rows[i].value.description = value; + } + if (result.data.rows[i].value.hasOwnProperty("category")) { + value = result.data.rows[i].value.category; + result.data.rows[i].value.category = { + css_class: "", + description: "The Status", + hidden: 0, + "default": value, + key: "category", + url: "gadget_erp5_field_status.html", + title: "Status", + type: "GadgetField" + }; + result.data.rows[i].value["listbox_uid:list"] = { + key: "listbox_uid:list", + value: 2713 + }; + } + } + return result; + }); + }) + + ///////////////////////////////////////////////////////////////// + // declared methods + ///////////////////////////////////////////////////////////////// + + .declareMethod("triggerSubmit", function () { + var argument_list = arguments; + return this.getDeclaredGadget('form_list') + .push(function (gadget) { + return gadget.triggerSubmit.apply(gadget, argument_list); + }); + }) + .declareMethod("render", function (options) { + return this.changeState({ + options: options, + latest_reload_time: new Date().getTime() + }); + }) + .onStateChange(function () { + var gadget = this, + lines_limit; + + return new RSVP.Queue() + .push(function () { + return gadget.getSetting("latest_sync_time"); + }) + .push(function (latest_sync_time) { + if (latest_sync_time === undefined) { + // no sync yet + return gadget.redirect({command: "display", options: {page: "ojsm_import_export"}}); + } + }) + .push(function () { + return gadget.getSetting("listbox_lines_limit", 50); + }) + .push(function (listbox_lines_limit) { + lines_limit = listbox_lines_limit; + return gadget.getDeclaredGadget('form_list'); + }) + .push(function (form_list) { + var column_list = [ + ['source', 'Promise'], + ['channel_item', 'Software Instance'], + ['channel', 'Hosting Subscription'], + ['lastBuildDate', 'Promise Date'], + ['description', 'Message'], + ['category', 'Status'] + ]; + return form_list.render({ + erp5_document: { + "_embedded": {"_view": { + "listbox": { + "column_list": column_list, + "show_anchor": 0, + "default_params": {}, + "editable": 0, + "editable_column_list": [], + "key": "field_listbox", + "lines": lines_limit, + "list_method": "portal_catalog", + "query": "urn:jio:allDocs?query=portal_type%3A%22" + + "promise" + "%22", + "portal_type": [], + "search_column_list": column_list, + "sort_column_list": column_list, + "sort": [["category", "ascending"], ["channel", "ascending"]], + "title": "Monitoring Promises", + "type": "ListBox" + } + }}, + "_links": { + "type": { + // form_list display portal_type in header + name: "" + } + } + }, + form_definition: { + group_list: [[ + "bottom", + [["listbox"]] + ]] + } + }); + }) + .push(function (result) { + return gadget.updateHeader({ + page_title: "Monitoring Promises Status", + filter_action: true + }); + }); + }) + + .onLoop(function () { + var gadget = this; + + return gadget.getSetting('latest_sync_time') + .push(function (latest_sync_time) { + if (latest_sync_time > gadget.state.latest_reload_time) { + return gadget.changeState({latest_reload_time: new Date().getTime()}); + } + }); + }, 30000); + +}(window, rJS, RSVP)); + diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_message_log_js.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_status_list_js.xml similarity index 95% rename from bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_message_log_js.xml rename to bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_status_list_js.xml index bb4da5e31d0788c3220960587f7ccddd26eb42ff..a4608a7650b83fa34fb366e7e19ce1e5138ef97a 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_message_log_js.xml +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_status_list_js.xml @@ -83,7 +83,7 @@ </item> <item> <key> <string>default_reference</string> </key> - <value> <string>gadget_monitoring_message_log.js</string> </value> + <value> <string>gadget_erp5_page_ojsm_status_list.js</string> </value> </item> <item> <key> <string>description</string> </key> @@ -93,7 +93,7 @@ </item> <item> <key> <string>id</string> </key> - <value> <string>gadget_monitoring_message_log_js</string> </value> + <value> <string>gadget_erp5_page_ojsm_status_list_js</string> </value> </item> <item> <key> <string>language</string> </key> @@ -111,7 +111,7 @@ </item> <item> <key> <string>title</string> </key> - <value> <string>Monitoring Erros Logs Gadget JS</string> </value> + <value> <string>Monitoring Promise Status List Gadget JS</string> </value> </item> <item> <key> <string>version</string> </key> @@ -197,7 +197,7 @@ </tuple> <state> <tuple> - <float>1467735483.04</float> + <float>1506516418.22</float> <string>UTC</string> </tuple> </state> @@ -242,7 +242,7 @@ </item> <item> <key> <string>serial</string> </key> - <value> <string>961.21883.33309.38348</string> </value> + <value> <string>963.16563.15280.46899</string> </value> </item> <item> <key> <string>state</string> </key> @@ -260,7 +260,7 @@ </tuple> <state> <tuple> - <float>1502445069.11</float> + <float>1510052474.13</float> <string>UTC</string> </tuple> </state> @@ -317,7 +317,7 @@ </tuple> <state> <tuple> - <float>1467735415.5</float> + <float>1506516385.15</float> <string>UTC</string> </tuple> </state> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_synchronize_html.html b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_synchronize_html.html new file mode 100644 index 0000000000000000000000000000000000000000..fd064310bbb49b89609b588598f9a9a8f3d49489 --- /dev/null +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_synchronize_html.html @@ -0,0 +1,17 @@ +<!doctype html> +<html> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + + <title>OfficeJS Monitor Page synchronize</title> + + <script src="rsvp.js"></script> + <script src="renderjs.js"></script> + <script src="gadget_erp5_page_ojsm_synchronize.js"></script> + </head> + + <body> + <div data-gadget-url="gadget_officejs_monitoring_sync.html" data-gadget-scope="sync_gadget" data-gadget-sandbox="public"></div> + </body> +</html> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_synchronize_html.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_synchronize_html.xml new file mode 100644 index 0000000000000000000000000000000000000000..8e8ae6309c95133ef7db27c6343c81fc9ac27ae7 --- /dev/null +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_synchronize_html.xml @@ -0,0 +1,332 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Web Page" module="erp5.portal_type"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_Access_contents_information_Permission</string> </key> + <value> + <tuple> + <string>Anonymous</string> + <string>Assignee</string> + <string>Assignor</string> + <string>Associate</string> + <string>Auditor</string> + <string>Manager</string> + <string>Owner</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Add_portal_content_Permission</string> </key> + <value> + <tuple> + <string>Assignee</string> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Change_local_roles_Permission</string> </key> + <value> + <tuple> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Modify_portal_content_Permission</string> </key> + <value> + <tuple> + <string>Assignee</string> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_View_Permission</string> </key> + <value> + <tuple> + <string>Anonymous</string> + <string>Assignee</string> + <string>Assignor</string> + <string>Associate</string> + <string>Auditor</string> + <string>Manager</string> + <string>Owner</string> + </tuple> + </value> + </item> + <item> + <key> <string>categories</string> </key> + <value> + <tuple> + <string>classification/collaborative/team</string> + </tuple> + </value> + </item> + <item> + <key> <string>content_md5</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>text/html</string> </value> + </item> + <item> + <key> <string>default_reference</string> </key> + <value> <string>gadget_erp5_page_ojsm_synchronize.html</string> </value> + </item> + <item> + <key> <string>description</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>gadget_erp5_page_ojsm_synchronize_html</string> </value> + </item> + <item> + <key> <string>language</string> </key> + <value> <string>en</string> </value> + </item> + <item> + <key> <string>portal_type</string> </key> + <value> <string>Web Page</string> </value> + </item> + <item> + <key> <string>short_title</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string>Gadget OJS Monitor Synchronize</string> </value> + </item> + <item> + <key> <string>version</string> </key> + <value> <string>001</string> </value> + </item> + <item> + <key> <string>workflow_history</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="2" aka="AAAAAAAAAAI="> + <pickle> + <global name="PersistentMapping" module="Persistence.mapping"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> + <dictionary> + <item> + <key> <string>document_publication_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> + </value> + </item> + <item> + <key> <string>edit_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> + </value> + </item> + <item> + <key> <string>processing_status_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent> + </value> + </item> + </dictionary> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="3" aka="AAAAAAAAAAM="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> + </pickle> + <pickle> + <tuple> + <none/> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>publish_alive</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1508158905.14</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + <item> + <key> <string>validation_state</string> </key> + <value> <string>published_alive</string> </value> + </item> + </dictionary> + </list> + </tuple> + </pickle> + </record> + <record id="4" aka="AAAAAAAAAAQ="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> + </pickle> + <pickle> + <tuple> + <none/> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>edit</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>serial</string> </key> + <value> <string>962.53016.6432.29064</string> </value> + </item> + <item> + <key> <string>state</string> </key> + <value> <string>current</string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1508155694.63</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + </dictionary> + </list> + </tuple> + </pickle> + </record> + <record id="5" aka="AAAAAAAAAAU="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> + </pickle> + <pickle> + <tuple> + <none/> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>detect_converted_file</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>external_processing_state</string> </key> + <value> <string>converted</string> </value> + </item> + <item> + <key> <string>serial</string> </key> + <value> <string>0.0.0.0</string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1508145466.78</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + </dictionary> + </list> + </tuple> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_synchronize_js.js b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_synchronize_js.js new file mode 100644 index 0000000000000000000000000000000000000000..8e7cdd5811fb163f2de649131de05e8a0d9846c5 --- /dev/null +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_synchronize_js.js @@ -0,0 +1,29 @@ +/*global window, rJS */ +/*jslint nomen: true, indent: 2, maxerr: 3*/ +(function (window, rJS) { + "use strict"; + + rJS(window) + ///////////////////////////////////////////////////////////////// + // Acquired methods + ///////////////////////////////////////////////////////////////// + .declareAcquiredMethod("updateHeader", "updateHeader") + .declareAcquiredMethod("redirect", "redirect") + + .declareMethod("render", function () { + var gadget = this; + return this.updateHeader({ + page_title: "Monitoring Synchronization" + }) + .push(function () { + return gadget.getDeclaredGadget('sync_gadget') + .push(function (sync_gadget) { + // start synchronization now if possible (not running already) + return sync_gadget.registerSync({now: true}); + }); + }) + .push(function () { + gadget.redirect({command: "change", options: {page: "ojsm_status_list"}}); + }); + }); +}(window, rJS)); diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_software_instance_view_js.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_synchronize_js.xml similarity index 94% rename from bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_software_instance_view_js.xml rename to bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_synchronize_js.xml index e94c93b94fcaeaa915903ff367f60e1d6e64e899..3142a0987d9f91415dad68d3fc6c8922a00b8b3e 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_software_instance_view_js.xml +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_ojsm_synchronize_js.xml @@ -83,7 +83,7 @@ </item> <item> <key> <string>default_reference</string> </key> - <value> <string>gadget_monitoring_software_instance_view.js</string> </value> + <value> <string>gadget_erp5_page_ojsm_synchronize.js</string> </value> </item> <item> <key> <string>description</string> </key> @@ -93,7 +93,7 @@ </item> <item> <key> <string>id</string> </key> - <value> <string>gadget_monitoring_software_instance_view_js</string> </value> + <value> <string>gadget_erp5_page_ojsm_synchronize_js</string> </value> </item> <item> <key> <string>language</string> </key> @@ -113,14 +113,18 @@ </item> <item> <key> <string>title</string> </key> - <value> <string>Monitoring Software Instance View JS</string> </value> + <value> <string>OfficeJS Monitoring Page Synchronze JS</string> </value> </item> <item> - <key> <string>version</string> </key> + <key> <string>url_string</string> </key> <value> <none/> </value> </item> + <item> + <key> <string>version</string> </key> + <value> <string>001</string> </value> + </item> <item> <key> <string>workflow_history</string> </key> <value> @@ -201,7 +205,7 @@ </tuple> <state> <tuple> - <float>1464252015.64</float> + <float>1508158885.64</float> <string>UTC</string> </tuple> </state> @@ -246,7 +250,7 @@ </item> <item> <key> <string>serial</string> </key> - <value> <string>961.59703.38142.44032</string> </value> + <value> <string>962.53085.48571.55790</string> </value> </item> <item> <key> <string>state</string> </key> @@ -264,7 +268,7 @@ </tuple> <state> <tuple> - <float>1504711794.22</float> + <float>1508159965.22</float> <string>UTC</string> </tuple> </state> @@ -321,7 +325,7 @@ </tuple> <state> <tuple> - <float>1464251854.13</float> + <float>1508155724.51</float> <string>UTC</string> </tuple> </state> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_settings_configurator_html.html b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_settings_configurator_html.html new file mode 100644 index 0000000000000000000000000000000000000000..e9daffce8e67297c0d037ff876f10beed6568b5b --- /dev/null +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_settings_configurator_html.html @@ -0,0 +1,49 @@ +<!DOCTYPE html> +<html> + <head> + <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> + <meta name="viewport" content="width=device-width, user-scalable=no" /> + <title>ERP5 Page Monitoring Settings Configurator</title> + + <!-- renderjs --> + <script src="rsvp.js" type="text/javascript"></script> + <script src="renderjs.js" type="text/javascript"></script> + <script src="handlebars.js" type="text/javascript"></script> + + <script src="gadget_erp5_page_settings_configurator.js" type="text/javascript"></script> + + <script id="template-message-error" type="text/x-handlebars-template"> + <p><span class='ui-text-{{status}}'>{{message}}</span></p> + </script> + + </head> + <body> + <div data-gadget-url="gadget_officejs_monitoring_jio.html" data-gadget-scope="jio_gadget" data-gadget-sandbox="public"></div> + <article class="ui-content ui-body-c"> + <section class="ui-content-header-plain"> + <h3 class="ui-content-title ui-body-c"> + <span class="ui-icon ui-icon-custom ui-icon-gear"> </span> + Monitoring Configurations + </h3> + </section> + </article> + <br/> + <form class="save_form ui-body-c" novalidate> + <button type="submit" class="ui-btn ui-btn-b ui-btn-inline + ui-icon-edit ui-btn-icon-right ui-screen-hidden"></button> + <div class="ui-message-alert"></div> + <div data-gadget-url="gadget_erp5_form.html" + data-gadget-scope="form_view" + data-gadget-sandbox="public"> + </div> + </form> + <div class="ui-field-contain"> + <div class="left"> + <button class="danger-button" id="destroyOPML" data-i18n="Remove All OPML"> + Remove All OPML + </button> + <span><i data-i18n="with all associated data">with all associated data</i></span> + </div> + </div> + </body> +</html> \ No newline at end of file diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_settings_configurator_html.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_settings_configurator_html.xml new file mode 100644 index 0000000000000000000000000000000000000000..a192562b6f557e203be660c0648e75214dc1baf4 --- /dev/null +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_settings_configurator_html.xml @@ -0,0 +1,332 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Web Page" module="erp5.portal_type"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_Access_contents_information_Permission</string> </key> + <value> + <tuple> + <string>Anonymous</string> + <string>Assignee</string> + <string>Assignor</string> + <string>Associate</string> + <string>Auditor</string> + <string>Manager</string> + <string>Owner</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Add_portal_content_Permission</string> </key> + <value> + <tuple> + <string>Assignee</string> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Change_local_roles_Permission</string> </key> + <value> + <tuple> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Modify_portal_content_Permission</string> </key> + <value> + <tuple> + <string>Assignee</string> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_View_Permission</string> </key> + <value> + <tuple> + <string>Anonymous</string> + <string>Assignee</string> + <string>Assignor</string> + <string>Associate</string> + <string>Auditor</string> + <string>Manager</string> + <string>Owner</string> + </tuple> + </value> + </item> + <item> + <key> <string>categories</string> </key> + <value> + <tuple> + <string>classification/collaborative/team</string> + </tuple> + </value> + </item> + <item> + <key> <string>content_md5</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>text/html</string> </value> + </item> + <item> + <key> <string>default_reference</string> </key> + <value> <string>gadget_erp5_page_settings_configurator.html</string> </value> + </item> + <item> + <key> <string>description</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>gadget_erp5_page_settings_configurator_html</string> </value> + </item> + <item> + <key> <string>language</string> </key> + <value> <string>en</string> </value> + </item> + <item> + <key> <string>portal_type</string> </key> + <value> <string>Web Page</string> </value> + </item> + <item> + <key> <string>short_title</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string>Gadget Officejs Monitoring Settings Configurator</string> </value> + </item> + <item> + <key> <string>version</string> </key> + <value> <string>001</string> </value> + </item> + <item> + <key> <string>workflow_history</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="2" aka="AAAAAAAAAAI="> + <pickle> + <global name="PersistentMapping" module="Persistence.mapping"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> + <dictionary> + <item> + <key> <string>document_publication_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> + </value> + </item> + <item> + <key> <string>edit_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> + </value> + </item> + <item> + <key> <string>processing_status_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent> + </value> + </item> + </dictionary> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="3" aka="AAAAAAAAAAM="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> + </pickle> + <pickle> + <tuple> + <none/> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>publish_alive</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1509441539.56</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + <item> + <key> <string>validation_state</string> </key> + <value> <string>published_alive</string> </value> + </item> + </dictionary> + </list> + </tuple> + </pickle> + </record> + <record id="4" aka="AAAAAAAAAAQ="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> + </pickle> + <pickle> + <tuple> + <none/> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>edit</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>serial</string> </key> + <value> <string>963.8904.14589.19234</string> </value> + </item> + <item> + <key> <string>state</string> </key> + <value> <string>current</string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1509441500.96</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + </dictionary> + </list> + </tuple> + </pickle> + </record> + <record id="5" aka="AAAAAAAAAAU="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> + </pickle> + <pickle> + <tuple> + <none/> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>detect_converted_file</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>external_processing_state</string> </key> + <value> <string>converted</string> </value> + </item> + <item> + <key> <string>serial</string> </key> + <value> <string>0.0.0.0</string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1509441105.7</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + </dictionary> + </list> + </tuple> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_settings_configurator_js.js b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_settings_configurator_js.js new file mode 100644 index 0000000000000000000000000000000000000000..d6ae8758a555d01b474faa735e318315506f3660 --- /dev/null +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_settings_configurator_js.js @@ -0,0 +1,309 @@ +/*global window, rJS, RSVP, Handlebars */ +/*jslint nomen: true, indent: 2, maxerr: 3*/ +(function (window, rJS, RSVP, Handlebars) { + "use strict"; + + var gadget_klass = rJS(window), + templater = gadget_klass.__template_element, + + notify_msg_template = Handlebars.compile( + templater.getElementById("template-message-error").innerHTML + ); + + gadget_klass + .declareAcquiredMethod("updateHeader", "updateHeader") + .declareAcquiredMethod("redirect", "redirect") + .declareAcquiredMethod("getSetting", "getSetting") + .declareAcquiredMethod("setSetting", "setSetting") + .declareAcquiredMethod("jio_allDocs", "jio_allDocs") + .declareAcquiredMethod("jio_remove", "jio_remove") + .declareAcquiredMethod("getUrlFor", "getUrlFor") + .declareAcquiredMethod("notifySubmitting", "notifySubmitting") + .declareAcquiredMethod("notifySubmitted", 'notifySubmitted') + + .allowPublicAcquisition("jio_allDocs", function (param_list) { + var gadget = this, + destroy_element = gadget.element.querySelector("#destroyOPML"); + return gadget.jio_allDocs(param_list[0]) + .push(function (result) { + var i, value, len = result.data.total_rows; + if (result.data.total_rows === 0) { + destroy_element.setAttribute("disabled", "disabled"); + } else if (destroy_element.getAttribute("disabled") === "disabled") { + destroy_element.setAttribute("disabled", ""); + } + for (i = 0; i < len; i += 1) { + if (result.data.rows[i].value.hasOwnProperty("active")) { + result.data.rows[i].value.active = { + css_class: "", + description: "Is Enabled", + hidden: 0, + "default": result.data.rows[i].value.active.toString(), + key: "active", + url: "gadget_erp5_field_status.html", + title: "Enabled", + type: "GadgetField" + }; + result.data.rows[i].value["listbox_uid:list"] = { + key: "listbox_uid:list", + value: 2713 + }; + } + } + return result; + }); + }) + + ///////////////////////////////////////////////////////////////// + // declared methods + ///////////////////////////////////////////////////////////////// + + .onEvent('click', function (event) { + var gadget = this, + element = gadget.element.querySelector("#destroyOPML"); + + function removeAllOPML(result) { + var remove_queue = new RSVP.Queue(), + i; + + function remove_opml(id) { + remove_queue + .push(function () { + return gadget.jio_remove(id); + }); + } + + for (i = 0; i < result.data.total_rows; i += 1) { + remove_opml(result.data.rows[i].id); + } + return remove_queue; + } + + if (element.getAttribute('rel') === 'destroying' && + event.target.id !== "destroyOPML") { + element.setAttribute('rel', ''); + if (element.textContent.startsWith('[Confirm] ')) { + element.textContent = element.textContent.slice(10, element.textContent.length); + } + } + + if (event.target.id === "destroyOPML") { + if (element.getAttribute('rel') !== 'destroying') { + element.setAttribute('rel', 'destroying'); + element.textContent = "[Confirm] " + element.textContent; + return; + } + + return gadget.notifySubmitting() + .push(function () { + element.setAttribute("disabled", "disabled"); + return gadget.jio_allDocs({ + query: 'portal_type: "opml"', + select_list: ['title'] + }); + }) + .push(function (result) { + return removeAllOPML(result); + }) + .push(function () { + return RSVP.all([ + gadget.notifySubmitted('All OPML removed') + ]); + }) + .push(function () { + element.textContent = element.textContent.slice(10, element.textContent.length); + return gadget.redirect({"command": "reload"}); + }); + } + event.returnValue = true; + }) + .onEvent('submit', function () { + var gadget = this, + doc; + return gadget.notifySubmitting() + .push(function () { + return gadget.getDeclaredGadget('form_view'); + }) + .push(function (form_gadget) { + return form_gadget.getContent(); + }) + .push(function (form_doc) { + doc = form_doc; + return gadget.setSetting('sync_check_offline', + doc.check_online_access === 1 ? 'true' : 'false'); + }) + .push(function () { + return gadget.setSetting('sync_data_interval', + parseInt(doc.auto_sync_interval, 10)); + }) + .push(function () { + return gadget.setSetting('listbox_lines_limit', + parseInt(doc.listbox_lines_limit, 10)); + }) + .push(function () { + return RSVP.all([ + gadget.notifySubmitted('Parameters Updated') + ]); + }); + }) + + .declareMethod("triggerSubmit", function (event) { + return this.element.querySelector('form button[type="submit"]').click(); + }) + .declareMethod("render", function (options) { + var gadget = this, + last_sync_time, + sync_data_interval, + check_online_access, + listbox_lines_limit; + + if (options.url) { + // backward compatibility redirect to add opml + options.page = "ojsm_opml_add"; + return gadget.redirect({"command": "change", "options": options}); + } + + return new RSVP.Queue() + .push(function () { + return gadget.getSetting('listbox_lines_limit', 20); + }) + .push(function (lines_limit) { + listbox_lines_limit = lines_limit; + return gadget.getSetting('sync_data_interval', 300000); + }) + .push(function (sync_interval) { + sync_data_interval = sync_interval; + return gadget.getSetting('latest_sync_time', ''); + }) + .push(function (latest_sync_time) { + last_sync_time = latest_sync_time; + return gadget.getSetting("sync_check_offline", "true"); + }) + .push(function (sync_check_offline) { + if (sync_check_offline === "true" || sync_check_offline === true || + sync_check_offline === undefined) { + check_online_access = "true"; + } else { + check_online_access = "false"; + } + return RSVP.all([ + gadget.getDeclaredGadget('form_view'), + gadget.getSetting("portal_type") + ]); + }) + .push(function (result) { + var column_list = [ + ['title', 'OPML Title'], + ['url', 'Url'], + ['active', 'Enable Sync'] + ]; + return result[0].render({ + erp5_document: { + "_embedded": {"_view": { + "your_last_sync_date": { + "description": "", + "title": "Last sync date", + "default": new Date(last_sync_time).toUTCString(), + "css_class": "", + "required": 0, + "editable": 0, + "key": "last_sync_date", + "hidden": last_sync_time !== '' ? 0 : 1, + "timezone_style": 0, + "date_only": 0, + "type": "DateTimeField" + }, + "my_auto_sync_interval": { + "description": "", + "title": "Auto Sync Time Interval", + "default": (sync_data_interval) + "", + "items": [["5 min", "300000"], ["10 min", "600000"], + ["15 min", "900000"], ["20 min", "1200000"], + ["30 min", "1800000"], ["1 h", "3600000"], + ["2 h", "7200000"]], + "editable": 1, + "key": "auto_sync_interval", + "hidden": 0, + "type": "ListField" + }, + "my_listbox_lines_limit": { + "description": "Listbox Items lines per pages", + "title": "Listbox Items lines", + "default": (listbox_lines_limit) + "", + "items": [["20 lines per page", "20"], ["50 lines per page", "50"], + ["100 lines per page", "100"], ["200 lines per page", "200"], + ["500 lines per page", "500"]], + "editable": 1, + "key": "listbox_lines_limit", + "hidden": 0, + "type": "ListField" + }, + "my_check_online_access": { + "description": "Check Online Access Before Sync", + "title": "Check Online Access", + "default": check_online_access, + "css_class": "", + "editable": 1, + "key": "check_online_access", + "hidden": 0, + "type": "CheckBoxField" + }, + "listbox": { + "column_list": column_list, + "show_anchor": 0, + "default_params": {}, + "editable": 1, + "editable_column_list": [], + "key": "monitoring_setting_listbox", + "lines": 20, + "list_method": "portal_catalog", + "query": "urn:jio:allDocs?query=portal_type%3A%22" + + result[1] + "%22", + "portal_type": [], + "search_column_list": column_list, + "sort_column_list": column_list, + "sort": [['title', 'descending']], + "title": "OPML Documents", + "type": "ListBox" + } + }}, + "_links": { + "type": { + // form_list display portal_type in header + name: "" + } + } + }, + form_definition: { + group_list: [[ + "left", + [["your_last_sync_date"], ["my_auto_sync_interval"], + ["my_listbox_lines_limit"], ["my_check_online_access"]] + ], + [ + "right", + [] + ], + [ + "bottom", + [["listbox"]] + ]] + } + }); + }) + .push(function () { + return RSVP.all([ + gadget.getUrlFor({command: "change", options: {"page": "ojsm_opml_add"}}), + gadget.getSetting('document_title') + ]); + }) + .push(function (result) { + return gadget.updateHeader({ + page_title: result[1], + save_action: true, + add_url: result[0] + }); + }); + }); + +}(window, rJS, RSVP, Handlebars)); diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/jquery.magnific-popup.min.js.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_settings_configurator_js.xml similarity index 93% rename from bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/jquery.magnific-popup.min.js.xml rename to bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_settings_configurator_js.xml index e8cbd43e9f98d921820536950e7f63e2a6954d18..f76a074239420729ee6568ab7a2dbd3426596759 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/jquery.magnific-popup.min.js.xml +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_erp5_page_settings_configurator_js.xml @@ -24,6 +24,7 @@ <key> <string>_Add_portal_content_Permission</string> </key> <value> <tuple> + <string>Assignee</string> <string>Assignor</string> <string>Manager</string> </tuple> @@ -42,6 +43,8 @@ <key> <string>_Modify_portal_content_Permission</string> </key> <value> <tuple> + <string>Assignee</string> + <string>Assignor</string> <string>Manager</string> </tuple> </value> @@ -76,7 +79,7 @@ </item> <item> <key> <string>default_reference</string> </key> - <value> <string>jquery.magnific-popup.min.js</string> </value> + <value> <string>gadget_erp5_page_settings_configurator.js</string> </value> </item> <item> <key> <string>description</string> </key> @@ -86,7 +89,7 @@ </item> <item> <key> <string>id</string> </key> - <value> <string>jquery.magnific-popup.min.js</string> </value> + <value> <string>gadget_erp5_page_settings_configurator_js</string> </value> </item> <item> <key> <string>language</string> </key> @@ -104,7 +107,7 @@ </item> <item> <key> <string>title</string> </key> - <value> <string>jquery.magnific-popup.min.js</string> </value> + <value> <string>Gadget Officejs Monitoring Settings Configurator JS</string> </value> </item> <item> <key> <string>version</string> </key> @@ -164,7 +167,7 @@ <dictionary> <item> <key> <string>action</string> </key> - <value> <string>publish</string> </value> + <value> <string>publish_alive</string> </value> </item> <item> <key> <string>actor</string> </key> @@ -190,7 +193,7 @@ </tuple> <state> <tuple> - <float>1455013750.58</float> + <float>1509441101.54</float> <string>UTC</string> </tuple> </state> @@ -199,7 +202,7 @@ </item> <item> <key> <string>validation_state</string> </key> - <value> <string>published</string> </value> + <value> <string>published_alive</string> </value> </item> </dictionary> </list> @@ -235,7 +238,7 @@ </item> <item> <key> <string>serial</string> </key> - <value> <string>949.2001.9682.56849</string> </value> + <value> <string>963.8902.10923.27409</string> </value> </item> <item> <key> <string>state</string> </key> @@ -253,7 +256,7 @@ </tuple> <state> <tuple> - <float>1455013520.53</float> + <float>1509441073.68</float> <string>UTC</string> </tuple> </state> @@ -310,7 +313,7 @@ </tuple> <state> <tuple> - <float>1455013439.31</float> + <float>1509440963.17</float> <string>UTC</string> </tuple> </state> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_application_panel_html.html b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_application_panel_html.html deleted file mode 100644 index 2a3d77d57b323ccf19eef7f3dc3246f7cd8edb05..0000000000000000000000000000000000000000 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_application_panel_html.html +++ /dev/null @@ -1,56 +0,0 @@ -<!DOCTYPE html> -<html> - <head> - <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> - <meta name="viewport" content="width=device-width, user-scalable=no" /> - <title>Monitoring Panel Gadget</title> - - <link rel="stylesheet" href="magnific-popup.css"> - <link href="gadget_monitoring_custom.css" rel="stylesheet" type="text/css"/> - <!-- renderjs --> - <script src="rsvp.js" type="text/javascript"></script> - <script src="renderjs.js" type="text/javascript"></script> - <script src="handlebars.js" type="text/javascript"></script> - <script src="gadget_global.js" type="text/javascript"></script> - <script src="jquery.js" type="text/javascript"></script> - <script src="jquerymobile.js" type="text/javascript"></script> - - <script id="panel-template-header" type="text/x-handlebars-template"> - <div data-role="header" class="ui-bar-inherit"> - <div class="ui-controlgroup ui-controlgroup-horizontal ui-btn-left"> - <div class="ui-controlgroup-controls"> - <form action="#" method="post"> - <input type="submit" data-i18n="[value]Close" data-icon="delete" data-iconpos="notext" value="Close" /> - </form> - </div> - </div> - <img class="ui-title" alt="SlapOS Monitoring" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAB2klEQVRIS62V8TkDURDEZyughKhAVEAqQAXoICoQFaACOkAFkgpEB1EBKhjf7+zL90SORG7/SXLZN7M7s/su1BK2tyUdSupVKTNJk4jgc6WIxSzbAF5JOvoF4UHSZURM/2L5RmD7VNJtHvqQtAWQpAtJj9lReU7aWUTc/UYyJ7A9zMpfJEH0JOkmIka2LWkgqZ9kfAd4NzsZtZE0BLaR414S4AeSIDuNiJ5tQJ9LtbbR/y6Jx5L2JR1HBLL9iELAIUwFjANUVJu7eJB8ciaS8OEtInaWElS6kwgoRATaU+F7dnCeYBTBEBD8BxnPlvoRttHyRBLmIQ0HniKi9geiYZka283vBMYvYoxsi11AUCrvM9+2SWr0/2sEV/kfAiaEVstMA8xIXqc0RbJV8EoOeHsUXAiQpyagbaaJ+ceLdYICkZxFHEGA5ixUw5gSoXFDUHuxCottzrFDc4JiMm1h3GsCdUZQlgxg9KYbNrUbgtzkspEAoyG/8WFziZKgXAcYzcJM04tuCJKk3KTNiHXaQZmOnAAuLXzpzoN6/PJNxiMmij2AaJ1Abpb0a0zbTlbzvA54nTuIiHErQWX+f66KWXlvLyWwTYu8rTaNSRsBF2An0UbAFGHWpjH9BL0Y7d/fY0bVAAAAAElFTkSuQmCC"/> - <div class="ui-controlgroup ui-controlgroup-horizontal ui-btn-right"> - <div class="ui-controlgroup-controls"> - <a href="#" class="ui-btn ui-btn-icon-notext ui-icon-home" data-i18n="Home">Home</a> - </div> - </div> - </div> - </script> - - - <script id="panel-template-body" type="text/x-handlebars-template"> - <div class="ui-content"> - <ul data-role="listview" class="ui-listview"> - <li><a href="#page=status_list"><i class="fa fa-th-list"></i><span data-i18n="Promises Status">Promises Status</span></a></li> - <li><a href="#page=software_instance_list"><i class="fa fa-cube"></i><span data-i18n="Software Instances">Software Instances</span></a></li> - <li><a href="#page=hosting_subscription_list"><i class="fa fa-globe"></i><span data-i18n="Hosting Subscriptions">Hosting Subscriptions</span></a></li> - <li><a href="#page=settings_configurator"><i class="fa fa-cog"></i><span data-i18n="Monitoring Configuration">Monitoring Configuration</span></a></li> - <li><a href="#page=import_export"><i class="fa fa-exchange"></i><span data-i18n="Import / Export">Import / Export</span></a></li> - </ul> - </div> - </script> - - <!-- custom script --> - <script src="gadget_monitoring_application_panel.js" type="text/javascript"></script> - - </head> - <body> - <div class="jqm-navmenu-panel"></div> - </body> -</html> \ No newline at end of file diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_application_panel_html.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_application_panel_html.xml deleted file mode 100644 index d69874d9541064bad43e7ee0945963524730b0c6..0000000000000000000000000000000000000000 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_application_panel_html.xml +++ /dev/null @@ -1,327 +0,0 @@ -<?xml version="1.0"?> -<ZopeData> - <record id="1" aka="AAAAAAAAAAE="> - <pickle> - <global name="Web Page" module="erp5.portal_type"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>_Access_contents_information_Permission</string> </key> - <value> - <tuple> - <string>Anonymous</string> - <string>Assignee</string> - <string>Assignor</string> - <string>Associate</string> - <string>Auditor</string> - <string>Manager</string> - <string>Owner</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Add_portal_content_Permission</string> </key> - <value> - <tuple> - <string>Assignor</string> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Change_local_roles_Permission</string> </key> - <value> - <tuple> - <string>Assignor</string> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Modify_portal_content_Permission</string> </key> - <value> - <tuple> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_View_Permission</string> </key> - <value> - <tuple> - <string>Anonymous</string> - <string>Assignee</string> - <string>Assignor</string> - <string>Associate</string> - <string>Auditor</string> - <string>Manager</string> - <string>Owner</string> - </tuple> - </value> - </item> - <item> - <key> <string>categories</string> </key> - <value> - <tuple> - <string>classification/collaborative/team</string> - </tuple> - </value> - </item> - <item> - <key> <string>content_md5</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>content_type</string> </key> - <value> <string>text/html</string> </value> - </item> - <item> - <key> <string>default_reference</string> </key> - <value> <string>gadget_monitoring_application_panel.html</string> </value> - </item> - <item> - <key> <string>description</string> </key> - <value> <string>Monitoring access</string> </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>gadget_monitoring_application_panel_html</string> </value> - </item> - <item> - <key> <string>language</string> </key> - <value> <string>en</string> </value> - </item> - <item> - <key> <string>portal_type</string> </key> - <value> <string>Web Page</string> </value> - </item> - <item> - <key> <string>short_title</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>title</string> </key> - <value> <string>Monitoring Application Panel Gadget</string> </value> - </item> - <item> - <key> <string>version</string> </key> - <value> <string>001</string> </value> - </item> - <item> - <key> <string>workflow_history</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> - </value> - </item> - </dictionary> - </pickle> - </record> - <record id="2" aka="AAAAAAAAAAI="> - <pickle> - <global name="PersistentMapping" module="Persistence.mapping"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>data</string> </key> - <value> - <dictionary> - <item> - <key> <string>document_publication_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> - </value> - </item> - <item> - <key> <string>edit_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> - </value> - </item> - <item> - <key> <string>processing_status_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent> - </value> - </item> - </dictionary> - </value> - </item> - </dictionary> - </pickle> - </record> - <record id="3" aka="AAAAAAAAAAM="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>publish</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>zope</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1452070905.39</float> - <string>UTC</string> - </tuple> - </state> - </object> - </value> - </item> - <item> - <key> <string>validation_state</string> </key> - <value> <string>published</string> </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> - <record id="4" aka="AAAAAAAAAAQ="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>edit</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>zope</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>serial</string> </key> - <value> <string>961.18024.28096.15445</string> </value> - </item> - <item> - <key> <string>state</string> </key> - <value> <string>current</string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1502440118.68</float> - <string>UTC</string> - </tuple> - </state> - </object> - </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> - <record id="5" aka="AAAAAAAAAAU="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>detect_converted_file</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>zope</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>external_processing_state</string> </key> - <value> <string>converted</string> </value> - </item> - <item> - <key> <string>serial</string> </key> - <value> <string>0.0.0.0</string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1452070813.26</float> - <string>UTC</string> - </tuple> - </state> - </object> - </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_application_panel_js.js b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_application_panel_js.js deleted file mode 100644 index df8b5bb9999b9274493c4e747baef6d1bc2b06e0..0000000000000000000000000000000000000000 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_application_panel_js.js +++ /dev/null @@ -1,104 +0,0 @@ -/*jslint nomen: true, indent: 2, maxerr: 3 */ -/*global window, rJS, Handlebars, jQuery, RSVP, loopEventListener */ -(function (window, rJS, Handlebars, $, RSVP, loopEventListener) { - "use strict"; - - var gadget_klass = rJS(window), - source_header = gadget_klass.__template_element - .getElementById("panel-template-header") - .innerHTML, - panel_template_header = Handlebars.compile(source_header), - source_body = gadget_klass.__template_element - .getElementById("panel-template-body") - .innerHTML, - panel_template_body = Handlebars.compile(source_body); - - gadget_klass - - .declareAcquiredMethod("translateHtml", "translateHtml") - - // Assign the element to a variable - // Init local properties - .ready(function (g) { - g.props = {}; - }) - - - .ready(function (g) { - return g.getElement() - .push(function (element) { - g.props.element = element; - g.props.jelement = $(element.querySelector("div")); - }); - }) - - .ready(function (g) { - g.props.jelement.panel({ - display: "overlay", - position: "left", - theme: "b" - // animate: false - }); - }) - - - .ready(function (g) { - /*return g.translateHtml(panel_template_header() + panel_template_body()) - .push(function (my_translated_or_plain_html) { - g.props.jelement.html(my_translated_or_plain_html); - g.props.jelement.trigger("create"); - });*/ - var plain_html = panel_template_header() + panel_template_body(); - g.props.jelement.html(plain_html); - g.props.jelement.trigger("create"); - }) - - .declareMethod('toggle', function () { - this.props.jelement.panel("toggle"); - }) - - .declareMethod('close', function () { - this.props.jelement.panel("close"); - }) - - .declareMethod('render', function () { - return; - }) - - ///////////////////////////////////////////////////////////////// - // declared services - ///////////////////////////////////////////////////////////////// - .declareService(function () { - var panel_gadget, - form_list, - event_list, - i, - len; - - - function formSubmit() { - panel_gadget.toggle(); - } - - panel_gadget = this; - form_list = panel_gadget.props.element.querySelectorAll('form'); - event_list = []; - - // XXX: not robust - Will break when search field is active - for (i = 0, len = form_list.length; i < len; i += 1) { - event_list[i] = loopEventListener( - form_list[i], - 'submit', - false, - formSubmit - ); - } - - return new RSVP.Queue() - .push(function () { - return RSVP.all(event_list); - }); - }); - - -}(window, rJS, Handlebars, jQuery, RSVP, loopEventListener)); \ No newline at end of file diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_application_panel_js.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_application_panel_js.xml deleted file mode 100644 index 106e907135158b33e534dda7f265e14fb5348556..0000000000000000000000000000000000000000 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_application_panel_js.xml +++ /dev/null @@ -1,329 +0,0 @@ -<?xml version="1.0"?> -<ZopeData> - <record id="1" aka="AAAAAAAAAAE="> - <pickle> - <global name="Web Script" module="erp5.portal_type"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>_Access_contents_information_Permission</string> </key> - <value> - <tuple> - <string>Anonymous</string> - <string>Assignee</string> - <string>Assignor</string> - <string>Associate</string> - <string>Auditor</string> - <string>Manager</string> - <string>Owner</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Add_portal_content_Permission</string> </key> - <value> - <tuple> - <string>Assignor</string> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Change_local_roles_Permission</string> </key> - <value> - <tuple> - <string>Assignor</string> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Modify_portal_content_Permission</string> </key> - <value> - <tuple> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_View_Permission</string> </key> - <value> - <tuple> - <string>Anonymous</string> - <string>Assignee</string> - <string>Assignor</string> - <string>Associate</string> - <string>Auditor</string> - <string>Manager</string> - <string>Owner</string> - </tuple> - </value> - </item> - <item> - <key> <string>categories</string> </key> - <value> - <tuple> - <string>classification/collaborative/team</string> - </tuple> - </value> - </item> - <item> - <key> <string>content_md5</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>content_type</string> </key> - <value> <string>text/javascript</string> </value> - </item> - <item> - <key> <string>default_reference</string> </key> - <value> <string>gadget_monitoring_application_panel.js</string> </value> - </item> - <item> - <key> <string>description</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>gadget_monitoring_application_panel_js</string> </value> - </item> - <item> - <key> <string>language</string> </key> - <value> <string>en</string> </value> - </item> - <item> - <key> <string>portal_type</string> </key> - <value> <string>Web Script</string> </value> - </item> - <item> - <key> <string>short_title</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>title</string> </key> - <value> <string>Monitoring Application Panel Gadget JS</string> </value> - </item> - <item> - <key> <string>version</string> </key> - <value> <string>001</string> </value> - </item> - <item> - <key> <string>workflow_history</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> - </value> - </item> - </dictionary> - </pickle> - </record> - <record id="2" aka="AAAAAAAAAAI="> - <pickle> - <global name="PersistentMapping" module="Persistence.mapping"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>data</string> </key> - <value> - <dictionary> - <item> - <key> <string>document_publication_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> - </value> - </item> - <item> - <key> <string>edit_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> - </value> - </item> - <item> - <key> <string>processing_status_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent> - </value> - </item> - </dictionary> - </value> - </item> - </dictionary> - </pickle> - </record> - <record id="3" aka="AAAAAAAAAAM="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>publish</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>zope</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1457543185.33</float> - <string>UTC</string> - </tuple> - </state> - </object> - </value> - </item> - <item> - <key> <string>validation_state</string> </key> - <value> <string>published</string> </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> - <record id="4" aka="AAAAAAAAAAQ="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>edit</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>zope</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>serial</string> </key> - <value> <string>961.21883.33309.38348</string> </value> - </item> - <item> - <key> <string>state</string> </key> - <value> <string>current</string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1502445069.04</float> - <string>UTC</string> - </tuple> - </state> - </object> - </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> - <record id="5" aka="AAAAAAAAAAU="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>detect_converted_file</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>zope</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>external_processing_state</string> </key> - <value> <string>converted</string> </value> - </item> - <item> - <key> <string>serial</string> </key> - <value> <string>0.0.0.0</string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1457543137.74</float> - <string>UTC</string> - </tuple> - </state> - </object> - </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_breadcrumb_html.html b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_breadcrumb_html.html deleted file mode 100644 index 3555f55d759a98b6c855b6a8e964231eb1140e30..0000000000000000000000000000000000000000 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_breadcrumb_html.html +++ /dev/null @@ -1,33 +0,0 @@ -<!DOCTYPE html> -<html> - <head> - <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> - <meta name="viewport" content="width=device-width, user-scalable=no" /> - <title>Monitoring Breadcrumb</title> - - <!-- renderjs --> - <script src="rsvp.js"></script> - <script src="renderjs.js"></script> - <script src="handlebars.js"></script> - - <script id="breadcrumb-template" type="text/x-handlebars-template"> - {{#if icon }} - <i class="fa fa-{{icon}}" aria-hidden="true"></i> - {{/if}} - {{#each url_list}} - {{#if url }} - <span><a href="{{url}}" title="{{title}}">{{title}}</a></span><span>></span> - {{else}} - <span>{{ title }}</span> - {{/if}} - {{/each}} - </script> - - <!-- custom script --> - <script src="gadget_monitoring_breadcrumb.js" type="text/javascript"></script> - - </head> - <body> - <div class="monitoring-breadcrumb"></div> - </body> -</html> \ No newline at end of file diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_breadcrumb_html.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_breadcrumb_html.xml deleted file mode 100644 index 09674760ffd03d44729dfd1d3abd23645f9236b0..0000000000000000000000000000000000000000 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_breadcrumb_html.xml +++ /dev/null @@ -1,327 +0,0 @@ -<?xml version="1.0"?> -<ZopeData> - <record id="1" aka="AAAAAAAAAAE="> - <pickle> - <global name="Web Page" module="erp5.portal_type"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>_Access_contents_information_Permission</string> </key> - <value> - <tuple> - <string>Anonymous</string> - <string>Assignee</string> - <string>Assignor</string> - <string>Associate</string> - <string>Auditor</string> - <string>Manager</string> - <string>Owner</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Add_portal_content_Permission</string> </key> - <value> - <tuple> - <string>Assignor</string> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Change_local_roles_Permission</string> </key> - <value> - <tuple> - <string>Assignor</string> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Modify_portal_content_Permission</string> </key> - <value> - <tuple> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_View_Permission</string> </key> - <value> - <tuple> - <string>Anonymous</string> - <string>Assignee</string> - <string>Assignor</string> - <string>Associate</string> - <string>Auditor</string> - <string>Manager</string> - <string>Owner</string> - </tuple> - </value> - </item> - <item> - <key> <string>categories</string> </key> - <value> - <tuple> - <string>classification/collaborative/team</string> - </tuple> - </value> - </item> - <item> - <key> <string>content_md5</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>content_type</string> </key> - <value> <string>text/html</string> </value> - </item> - <item> - <key> <string>default_reference</string> </key> - <value> <string>gadget_monitoring_breadcrumb.html</string> </value> - </item> - <item> - <key> <string>description</string> </key> - <value> <string>Monitoring breadcrumb</string> </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>gadget_monitoring_breadcrumb_html</string> </value> - </item> - <item> - <key> <string>language</string> </key> - <value> <string>en</string> </value> - </item> - <item> - <key> <string>portal_type</string> </key> - <value> <string>Web Page</string> </value> - </item> - <item> - <key> <string>short_title</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>title</string> </key> - <value> <string>Monitoring breadcrumb</string> </value> - </item> - <item> - <key> <string>version</string> </key> - <value> <string>001</string> </value> - </item> - <item> - <key> <string>workflow_history</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> - </value> - </item> - </dictionary> - </pickle> - </record> - <record id="2" aka="AAAAAAAAAAI="> - <pickle> - <global name="PersistentMapping" module="Persistence.mapping"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>data</string> </key> - <value> - <dictionary> - <item> - <key> <string>document_publication_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> - </value> - </item> - <item> - <key> <string>edit_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> - </value> - </item> - <item> - <key> <string>processing_status_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent> - </value> - </item> - </dictionary> - </value> - </item> - </dictionary> - </pickle> - </record> - <record id="3" aka="AAAAAAAAAAM="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>publish</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>zope</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1455027214.58</float> - <string>UTC</string> - </tuple> - </state> - </object> - </value> - </item> - <item> - <key> <string>validation_state</string> </key> - <value> <string>published</string> </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> - <record id="4" aka="AAAAAAAAAAQ="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>edit</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>zope</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>serial</string> </key> - <value> <string>961.17556.16247.16128</string> </value> - </item> - <item> - <key> <string>state</string> </key> - <value> <string>current</string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1502183719.23</float> - <string>UTC</string> - </tuple> - </state> - </object> - </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> - <record id="5" aka="AAAAAAAAAAU="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>detect_converted_file</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>zope</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>external_processing_state</string> </key> - <value> <string>converted</string> </value> - </item> - <item> - <key> <string>serial</string> </key> - <value> <string>0.0.0.0</string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1455027149.24</float> - <string>UTC</string> - </tuple> - </state> - </object> - </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_breadcrumb_js.js b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_breadcrumb_js.js deleted file mode 100644 index aff6a75dfcfec6ff4c2d028d2168319aabf83730..0000000000000000000000000000000000000000 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_breadcrumb_js.js +++ /dev/null @@ -1,30 +0,0 @@ -/*global document, window, rJS, Handlebars */ -/*jslint nomen: true, indent: 2, maxerr: 3*/ -(function (window, document, rJS, Handlebars) { - "use strict"; - - var gadget_klass = rJS(window), - templater = gadget_klass.__template_element, - breadcrumb_template = Handlebars.compile( - templater.getElementById("breadcrumb-template").innerHTML - ); - - gadget_klass - .declareMethod("render", function (options) { - var gadget = this, - i, - content; - if (options.url_list === undefined) { - options.url_list = []; - } - content = breadcrumb_template({ - url_list: options.url_list, - icon: options.icon || '' - }); - - gadget.element.querySelector('.monitoring-breadcrumb') - .innerHTML = content; - return; - }); - -}(window, document, rJS, Handlebars)); \ No newline at end of file diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_custom_css.css b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_custom_css.css deleted file mode 100644 index 4d64481d6c5bd9eaa88d57858bd7a2d0c00c3c2c..0000000000000000000000000000000000000000 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_custom_css.css +++ /dev/null @@ -1,956 +0,0 @@ -html head + body.ui-overlay-a, html head + body.ui-overlay-a .ui-page, html head + body.ui-overlay-a .ui-page .ui-panel-wrapper { - background: #FBFBFB; -} - -html .ui-panel .ui-listview li a, html .ui-panel .ui-listview li div.ui-btn { - /* padding: .4em 2.75em .4em 1em; */ - padding: .4em 0.75em !important; -} -html .ui-panel .ui-listview li a span, html .ui-panel .ui-listview li div.ui-btn span { - padding-left: 15px; -} -.ui-mobile .ui-page-active { - overflow-x: visible; -} -html div[role='main'] > div.ui-content { - padding: 5px; -} - - - - -/* -html .ui-bar-a, html .ui-bar-a .ui-bar-inherit, html body .ui-body-a .ui-bar-inherit, html body .ui-group-theme-a .ui-bar-inherit { - background-color: #49227D; -} -html head + body .ui-bar-a .ui-btn:hover, html head + body .ui-body-a .ui-btn:hover, html head + body .ui-btn.ui-btn-a:hover, html head + body .ui-group-theme-a .ui-btn:hover, html head + body .ui-group-theme-a .ui-btn.ui-btn-a:hover, html head + body .ui-group-theme-a .ui-btn.ui-btn-a:active, html head + body .ui-bar-a .ui-btn:active, html head + body .ui-body-a .ui-btn:active, html head + body .ui-btn.ui-btn-a:active, html head + body .ui-group-theme-a .ui-btn:active, html head + body .ui-group-theme-a .ui-btn-a:active, html head + body .ui-bar-a .ui-btn.ui-btn-active, html head + body .ui-body-a .ui-btn.ui-btn-active, html head + body .ui-btn.ui-btn-a.ui-btn-active, html head + body .ui-group-theme-a .ui-btn-active, html head + body .ui-group-theme-a .ui-btn-a.ui-btn-active { - background-color: #19023E; - background: #19023E; -} -*/ -.ui-grid-container > ul, .ui-grid-container > ul li { - list-style: none outside none; - margin-left: 0; - margin-right: 0; - padding: 0; -} -html .ui-grid-container > ul.ui-grid-column-5 > li:nth-child(-n+2).ui-grid-span-4 { - width: 80%; -} -html .ui-grid-container > ul.ui-grid-column-5 > .ui-grid-span-1 { - width: 20%; -} - -html .ui-title .ui-title-bold { - font-weight: bold; -} - -.ui-grid-container > ul > li:first-child { - clear: left; -} -.ui-grid-container > ul > li { - float: left; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - -ms-box-sizing: border-box; - box-sizing: border-box; -} -/*.ui-grid-container .ui-grid-a .ui-block-a, .ui-grid-container .ui-grid-a .ui-block-a { - padding: 10px 15px; -} -.ui-grid-container .ui-grid-b .ui-block-a, .ui-grid-container .ui-grid-b .ui-block-b { - padding: 10px 15px; -}*/ -/* -@media (max-width: 32em) -html.ui-mobile .ui-grid-container.ui-responsive > ul > li, html.ui-mobile .ui-grid-container.ui-responsive > ul[class*="ui-grid-column"] > li { - width: 100%; -}*/ - -.margin-0 {margin: 0} -.padding-5 {padding: 5px;} -.padding-10 {padding: 10px;} -.padding-15 {padding: 15px;} -.padding-20 {padding: 20px;} -.padding-tb-5 {padding: 10px 0;} -.padding-tb-10 {padding: 10px 0;} -.padding-tb-20 {padding: 20px 0;} -.padding-lr-5 {padding: 0 5px;} -.padding-lr-10 {padding: 0 10px;} -.padding-lr-20 {padding: 0 20px;} -.padding-lrb-20 {padding: 0 20px 20px;} -.border-gray { border: 1px solid #C3C3C3; border-radius: 3px;} -.ui-text{ - padding: 0 10px; -} -.ui-text-pre { - white-space: pre-wrap; -} -.ui-text-left {text-align: left;} -.ui-text-right {text-align: right;} -.ui-text-center { - text-align: center; -} -.ui-text-ERROR, .ui-text-error { - color: #DC4343; -} -.ui-text-INFO, .ui-text-info { - color: #DC4343; -} -.ui-text-OK, .ui-text-ok { - color: green; -} -.ui-text-WARNING, .ui-text-warning { - color: #cea813; - text-shadow: 1px 0px 0px rgb(224, 224, 116); -} - -.ui-text-desabled { - color: rgba(128, 128, 128, 0.66); -} - -.text-data { - height: 120px; - color: #596167; -} - -.text-overview { - max-width: 200px; - white-space: nowrap; - text-overflow: ellipsis; - overflow: hidden; -} - -.header-notice { - margin-top: 5px; - margin-left: 20px; - color: #5C676D; - font-size: .95em; -} - -.ui-content .ui-table { - border: 1px solid rgba(0,0,0,.05); -} - -.ui-panel-overview { - background: #fff; - margin: 15px 10px 20px 10px; - border: 1px solid #f1f5fc; - border-radius: 4px; -} - -.overview-content { - padding: 0 20px 20px; -} -.overview-header { - padding: 5px; -} - -.overview-header > .content-title { - color: #535354; - background-color: transparent; - padding: 10px 15px 5px 15px; - line-height: 16px; -} - -.overview-header > .content-title:after { - content: ""; - display: block; - clear: both; - border-bottom: 1px solid #ddd; - padding-top: 10px; -} - -.content-title > .overview-title { - float: left; - display: block; - font-size: 18px; - line-height: 18px; -} - -.content-title > .overview-title a { - text-decoration: none; -} - -.content-title > .commands { - display: block; - padding: 0; - margin: 0; - float: right; - font-size: 1.2em; -} - -.content-details { - padding: 20px; -} -.content-details h2:first-child { - margin-top: 0; -} - -.content-details .ui-block-a { - font-weight: bold; - padding: 5px; -} -.content-details .ui-block-b { - font-weight: normal; - padding: 5px; - white-space: nowrap; -} - -html .ui-panel-overview table { - border: 1px solid rgba(0,0,0,.05); - border-bottom: none; -} - -html .content-details table tr th, html .content-details table tr td { - padding: 7px; -} -/*html .content-details .instances-parameters table tr td { - padding: 0 0 0 10px; -}*/ -html .content-details .instances-parameters table tr td:first-child { - width: 25%; -} -html .content-details .instances-parameters table tr td:last-child { - padding: 0; - width: 50px; -} -html .promise-list table tr { - cursor: pointer; -} -.promise-list { - padding: 10px; -} - -.ui-table-custom tr td, .ui-table-custom tr td { - padding: .2em .3em; - vertical-align: middle; -} - -table tr .prop-edit { - cursor: pointer; -} - -.header-form-overview { - padding: 0 10px; -} - -.ui-panel-overview .panel-body { - padding: 15px; - padding-top: 0; - line-height: 26px; -} -.overview-header .ui-field-contain, .listbox-header .ui-field-contain { - padding-left: 5px; -} -.ui-content .ui-panel-overview .ui-listview-inset { - margin: 1em 0; - margin-top: 0.1em; -} - -.ui-content-sections { - margin-top: 1em; - padding: 1em; - -webkit-border-radius: .3125em; - border-radius: .3125em; - border: 1px solid #A2A2A2; -} - -html head + body h2.section-title { - margin: 0; - margin-top: 40px; - color: #557186; - margin-left: 2px; -} - -html head + body h2.section-title > span { - font-size: 22px; - padding-left: 10px; -} - -html head + body .ui-panel-overview > h2 { - font-weight: bold; - font-size: 105%; - padding: 0 15px; -} - -.ui-status-icon { - display: inline-block; -} -.ui-status-icon:before { - display: inline-block; - content: ""; - vertical-align: middle; - height: 2.5em; - width: 2.5em; - cursor: pointer; - background: #DC4343; -} - -.ui-status-icon-fx:before { - height: 3.5em; - width: 3.5em; -} - -.ui-status-text, a span.ui-status-text { - font-weight: bold; - padding-left: 7px; - font-size: 1.09em; - /*top: 13px; - left: 40px; - position: absolute;*/ -} - -.ui-status-ok:before, .ui-status-OK:before { - background: green; -} -.ui-status-error:before, .ui-status-ERROR:before { - background: #DC4343; -} -.ui-status-warning:before, .ui-status-WARNING:before { - background: #f0ad4e; -} -.status-text-ok:before, .status-text-OK:before { - color: green; -} -.status-text-error:before, .status-text-ERROR:before { - color: #DC4343; -} -.status-text-warning:before, .status-text-WARNING:before { - color: #f0ad4e; -} - -.label-warning, .label-WARNING { - background-color: #f0ad4e; -} -.label-error, .label-ERROR { - background-color: #DC4343; -} -.label-ok, .label-OK { - background-color: green; -} -.label-info, .label-INFO { - background-color: #79c1d9; -} -.label { - display: inline; - padding: .4em .8em; - font-weight: 700; - line-height: 2.1em; - color: #fff; - text-align: center; - white-space: nowrap; - vertical-align: baseline; - border-radius: .25em; -} -.label-text { - display: block; - margin: .6em 0 .4em; - font-weight: 400; - font-size: 16px; - text-transform: capitalize; -} - -.ui-content-hidden { - display: none; -} - -.ui-listview-container { - padding: 10px; -} -.ui-block-a .ui-listview-container:first-child, .ui-block-b .ui-listview-container:first-child, .ui-block-c .ui-listview-container:first-child { - padding-top: 0; -} -.ui-panel-overview .ui-listview-container { - padding: 0; -} -.ui-listview-container ul { - padding: 0; -} -.ui-listview-container ul li a.ui-btn { - text-align: left; -} -ul li .ui-collapse-content { - background-color: #fff; - border-color: #ddd; - color: #333; - text-shadow: 0 1px 0 #f3f3f3; - margin: 0; - padding: .5em 1em; - border-right-width: 1px; - border-left-width: 1px; - border-top-width: 1px; - border-bottom-width: 0; - border-style: solid; -} -ul li:last-child .ui-collapse-content { - border-top-width: 0; - -webkit-border-bottom-right-radius: inherit; - border-bottom-right-radius: inherit; - -webkit-border-bottom-left-radius: inherit; - border-bottom-left-radius: inherit; -} - -ul li .ui-collapse-content fieldset > div, ul li .ui-collapse-content fieldset > span { - padding: 5px 0; -} - -.controlgroup-textinput{ - padding-top:.22em; - padding-bottom:.22em; -} - -.ui-promise-title > h2 { - color: #797979; - background-color: transparent; - /*border-bottom: 1px solid #ddd;*/ - font-size: 1.1em !important; - padding-bottom: .2em; - margin: 0 0 .7375em; -} - -.ui-instance-title > h2 { - color: #194173; -} -.ui-instance-title span { - padding-left: 5px; -} -.ui-content .ui-promise-content .ui-promise-title > h2, .ui-content .ui-responsive .ui-instance-title > h2 { - font-size: 1.1em; -} - -.overview-header .ui-input-text input, .listbox-header .ui-input-text input { - padding: .6em; -} - -#promise-overview .ui-block-b, #promise-overview .ui-block-a, #promise-overview .ui-block-c { - padding: 10px; -} - -.ui-table-columntoggle-btn {display: none;} - -.ui-icon-grid:after { - content: "\f00b"; -} -.ui-icon-bullets:after { - content: "\f009"; -} - -.column-check { - width: 54px; - padding-top: 5px; -} - -.listbox-filter-panel, .overview-filter-panel { - padding: 1em; - padding-top: .1em; -} -html.ui-mobile body .listbox-filter-panel h2, html.ui-mobile body .listbox-filter-panel h3 { - font-weight: bold; -} -body .listbox-filter-panel h2{ - text-align: center; - font-size: 110%; -} -body .listbox-filter-panel h3{ - text-align: left; - font-size: 105%; -} - -html table tbody td a, html table tbody th a { - padding: .4em .75em; -} -html table tbody td a.inline-link, html table tbody th a.inline-link { - margin: -8px; - margin-top: -6px; -} -html .custom-grid-wrap table thead tr th { - font-weight: 800; -} - -/* LEGEND CHART */ -.legend { - list-style: none; - font-size: 12px; -} -.legend ul li { - list-style: none; -} -.legend:before { - display: block; - content: ""; - clear: both; -} -.legend li { - float: left; - font-size: 12px; - padding-right: 10px; -} -.legend li span { - display: inline-block; - height: 10px; - width: 10px; - margin-right: 5px; -} - -/* Graph */ -.graph { - margin: 20px 0; - position: relative; -} -.graph-label { - font-size: 75%; -} -.dygraph-xlabel { - font-size: 110%; - color: #344558; - padding: 8px 0; -} -.graph-full { - margin: 0 20px; - position: relative; -} -.graph-medium { - height: 320px; - width: 98%; -} -.graph-h-medium { - height: 320px; - width: 98%; - margin: 30px; -} -.ui-grid-column .graph-state-labels { - margin: 10px; -} -.ui-grid-column .graph-state-labels label{ - font-weight: normal; -} - -.hosting-block, .content-medium { - width: 80%; -} - -/* INfo Box */ -.infobox { - display: inline-block; - height: 54px; - color: #555; - background-color: #FFF; - box-shadow: none; - margin: -1px 0 0 -1px; - margin: 5px 0; - padding: 8px 3px 6px 9px; - border: 1px solid; - border-color: #D8D8D8; - vertical-align: middle; - text-align: left; - position: relative; - /*cursor: pointer;*/ -} -.infobox:hover { - background: rgba(128, 128, 128, .1); -} - -.infobox>.infobox-icon { - display: inline-block; - vertical-align: top; - padding-top: 10px; - width: 44px; -} - -.infobox>.infobox-data { - display: inline-block; - border-width: 0; - font-size: 13px; - text-align: left; - line-height: 21px; - min-width: 130px; - padding-left: 8px; - position: relative; - top: 0; -} - -.infobox>.infobox-data>.infobox-data-number { - display: block; - font-size: 22px; - margin: 2px 0 4px; - position: relative; - text-shadow: 1px 1px 0 rgba(0,0,0,.15); -} - -.infobox .infobox-content { - color: #555; - max-width: 140px; -} - -/* Log Box */ - -.logbox { - padding: 15px 20px 20px; -} - -.logbox .description { - padding-bottom: 15px; - border-bottom: 1px dashed #e6e6e6; - display: block; - color: #7b7b7b; -} - -.logbox tr { - line-height: 23px; - border-bottom: 1px solid #e6e6e6; -} - -.logbox tr td { - color: #7b7b7b; - padding: 10px; - cursor: pointer; -} - -.tooltipster-shadow { - border-radius: 5px; - background: #fff; - box-shadow: 0px 0px 14px rgba(0,0,0,0.3); - color: #2c2c2c; -} -.tooltipster-shadow .tooltipster-content { - font-family: 'Arial', sans-serif; - font-size: 14px; - line-height: 16px; - padding: 8px 10px; -} - -span.tooltipster-icon { - display: block; - cursor: help; - margin-left: 4px; - background: #0078c9; - border: 3px solid #0078c9; - width: 2.3em; - height: 2.3em; - padding: 0.4em 0 0; - border-radius: 100%; - box-sizing: border-box; - color: #fff; - font-size: 0.6em; - line-height: 1em; - font-weight: 700; - text-align: center; - margin: -0.3em 0 0 0; - float: right; - clear: right; -} - -span.tooltipster-icon:hover { - background: #fff; - color: #5d6365; - border: 3px solid #5d6365; - cursor: pointer; -} - -.tooltipster-light { - border-radius: 5px; - border: 1px solid #cccccc; - background: #ededed; - color: #666666; -} -.tooltipster-light .tooltipster-content { - font-family: Arial, sans-serif; - font-size: 14px; - line-height: 16px; - padding: 8px 10px; -} -.tooltipster-light .tooltipster-content p, .tooltipster-shadow .tooltipster-content p { - margin: 5px; - font-size: 12px; -} - -html .tooltipster-base table{ - border: 1px solid rgba(0,0,0,.05); -} - -html .tooltipster-base table td, html .tooltipster-base table th { - padding: 5px; -} - -html table.instance-overview tr td > a.selected { - border-left: 4px solid #93D2B8; - border-color: #93D2B8; -} - -html table.instance-overview td:first-child > a, html table.instance-overview td:first-child > a:hover { - border-left: 4px solid transparent; -} - -.login-box { - position: fixed; - top: 35%; - left: 50%; - margin-top: -50px; - margin-left: -150px; - width: 320px; -} - -/* Hpanel box for hosting subscription */ -.hpanel { - background-color: none; - border: none; - box-shadow: none; - margin-bottom: 25px; -} - -.hpanel .panel-body { - min-height: 150px; - background: #fff; - border: 1px solid #e4e5e7; - color: #6a6c6f; - border-radius: 2px; - padding: 20px; - position: relative; -} - -.hpanel > .panel-footer { - color: inherit; - border: 1px solid #e4e5e7; - border-top: none; - font-size: 90%; - background: #f7f9fa; - padding: 10px 15px; -} - -.panel-header { - padding: 10px 5px; - color: #6a6c6f; - text-transform: uppercase; - font-weight: 600; -} - -.panel-footer { - padding: 10px 15px; - background-color: #f5f5f5; - border-top: 1px solid #ddd; - border-bottom-right-radius: 3px; - border-bottom-left-radius: 3px; -} - -.hpanel .panel-body > h2:first-child { - margin-top: 0; - color: #6a6c6f; - text-transform: uppercase; - font-weight: 600; - float: left; -} - -.panel-body:before, .panel-body:after { - display: table; - content: " "; -} - -.panel-body:after { - clear: both; -} - - -/* Magnific Popup */ -.white-popup { - position: relative; - background: #FFF; - padding: 20px; - width: auto; - max-width: 300px; - margin: 20px auto; -} - -/* Alert box custom */ -.alert { - padding: 8px 35px 8px 14px; - margin-bottom: 8px; - margin-top: 8px; - color: #c09853; - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); - background-color: #fcf8e3; - border: 1px solid #fbeed5; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - white-space: pre-line; -} - -.alert-heading { - color: inherit; -} - -.alert .close { - position: relative; - top: -2px; - right: -21px; - line-height: 18px; -} - -.alert-success { - color: #468847; - background-color: #dff0d8; - border-color: #d6e9c6; -} - -.alert-danger, -.alert-error { - color: #b94a48; - background-color: #f2dede; - border-color: #eed3d7; -} - -.alert-info { - color: #3a87ad; - background-color: #d9edf7; - border-color: #bce8f1; -} - -.alert-block > p, -.alert-block > ul { -margin-bottom: 0; -} - -.alert-block p + p { -margin-top: 5px; -} - -/******** LOADER *******************/ - -.loader { - height: 4px; - width: 100%; - position: relative; - overflow: hidden; - background-color: #ddd; -} -.loader:before{ - display: block; - position: absolute; - content: ""; - left: -200px; - width: 200px; - height: 4px; - background-color: #2980b9; - animation: loading 2s linear infinite; -} - -@keyframes loading { - from {left: -200px; width: 30%;} - 50% {width: 30%;} - 70% {width: 70%;} - 80% { left: 50%;} - 95% {left: 120%;} - to {left: 100%;} -} - -.signal { - border: 4px solid #024352; - border-radius: 50px; - height: 50px; - left: 50%; - margin: -15px 0 0 -15px; - /*opacity: 0;*/ - position: absolute; - top: 40px; - width: 50px; - /*animation: pulsate .5s ease-out; - animation-iteration-count: infinite;*/ - animation: rotate 0.8s infinite linear; - border-right-color: transparent; - z-index: 100; -} - -@keyframes rotate { - 0% { transform: rotate(0deg); } - 100% { transform: rotate(360deg); } -} - -@keyframes pulsate { - 0% { - transform: scale(.1); - opacity: 0.0; - } - 50% { - opacity: 1; - } - 100% { - transform: scale(1.2); - opacity: 0; - } -} - -.loadbox { - width: 100%; - overflow: auto; - position: relative; - cursor: pointer; - border: 1px solid #efefef; - background-color: #f1f1f1; -} - -.load-content { - overflow: auto; - min-height: 250px; - background-color: #fff; -} - -html body div.loadbox .loadwait > a { - color: #335d77; - text-decoration: none; - font-size: 1.5em; - text-align: center; - display: block; - margin: 99px auto; - padding: 15px; - width: 40%; - cursor: pointer; - border: 1px solid #dadada; -} - -/************** Media @ **********************/ -@media all and (max-width: 62em) { - .m-hidden { - display: none; - } - form.search .ui-block-a { - width: 60%; - float: left; - } - form.search .ui-block-b { - width: 40%; - float:left; - } - .ui-panel-overview { - margin: 15px 0 20px 0; - } - html .ui-content { - padding: .1em; - } - html .jqm-navmenu-panel .ui-content { - padding: 1em; - } - .graph { - margin: 10px 0; - } - .graph-full { - margin: 0 10px; - } - .hosting-block, .content-medium { - width: 100%; - } - html table:not(.ui-responsive) tbody tr td:first-child a, html table:not(ui-responsive) tbody tr th:first-child a { - position: relative; - } - html .content-details .instances-parameters table tr td { - padding: 10px 0 10px 10px; - } - .content-details { - padding: 10px; - } - table td .prop-edit { - padding: 5px; - max-height: 2.05em; - } -} - diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_document_edit_html.html b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_document_edit_html.html deleted file mode 100644 index dc31800c06fb3692b30aaf122409b41b9a5f3188..0000000000000000000000000000000000000000 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_document_edit_html.html +++ /dev/null @@ -1,57 +0,0 @@ -<!DOCTYPE html> -<html> - <head> - <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> - <meta name="viewport" content="width=device-width, user-scalable=no" /> - <title>Monitoring Document Edit Page</title> - - <link rel="stylesheet" href="magnific-popup.css"> - <link href="gadget_monitoring_custom.css" rel="stylesheet" type="text/css"/> - <!-- renderjs --> - <script src="rsvp.js" type="text/javascript"></script> - <script src="renderjs.js" type="text/javascript"></script> - - <script id="login-toltip-template" type="text/x-handlebars-template"> - </script> - - <script id="monitor-parameters-template" type="text/x-handlebars-template"> - {{#each parameter_list}} - <span class="label-text">{{title}}:</span> - {{#if key}} - <input type="text" name="{{key}}" placeholder="{{title}}" value="{{value}}" data-mini="true"> - {{else}} - <input type="text" name="{{key}}" placeholder="{{title}}" value="{{value}}" data-mini="true" disabled="disabled"> - {{/if}} - {{/each}} - </script> - - <!-- magnific-popup --> - <script src="jquery.magnific-popup.min.js" type="text/javascript"></script> - <!-- custom script --> - <script src="gadget_monitoring_document_edit.js" type="text/javascript"></script> - - </head> - <body> - <div data-gadget-url="gadget_monitoring_jio.html" data-gadget-scope="jio_gadget" data-gadget-sandbox="public"></div> - <div class="white-popup mfp-hide"> - <div class="ui-promise-title"><h2 style="font-size: 1.1em;"></h2></div> - <form> - <div data-role="content"> - <div class="form-controlgroup"> - - </div> - </div> - <div class="padding-5"> - <span class="ui-text-error"></span> - </div> - <div> - <button type="button" class="ui-btn ui-corner-all ui-btn-inline cancel"><i class="fa fa-times"></i> Cancel</button> - <button type="submit" class="ui-btn ui-corner-all ui-btn-inline save"><i class="fa fa-floppy-o"></i> Save</button> - <div class="ui-content-hidden spinner"> - <i class="fa fa-spinner fa-spin"></i> - </div> - </div> - </form> - </div> - </body> -</html> \ No newline at end of file diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_document_edit_js.js b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_document_edit_js.js deleted file mode 100644 index 01e44090c42e3452b012cf175139eab7fda4ea3f..0000000000000000000000000000000000000000 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_document_edit_js.js +++ /dev/null @@ -1,173 +0,0 @@ -/*global document, window, rJS, $ */ -/*jslint nomen: true, indent: 2, maxerr: 3*/ -(function (window, document, rJS, $) { - "use strict"; - - var gadget_klass = rJS(window), - templater = gadget_klass.__template_element, - parameters_widget_template = Handlebars.compile( - templater.getElementById("monitor-parameters-template").innerHTML - ); - - function getFormDataList(formElement, parameter_list) { - var i, - formData_list = []; - for (i = 0; i < parameter_list.length; i += 1) { - formData_list.push(parameter_list[i]); - if (parameter_list[i].key) { - // Editable fields - if (formElement.querySelector('input[name="' + parameter_list[i].key + '"]').value !== undefined) { - formData_list[i].value = formElement.querySelector('input[name="' + - parameter_list[i].key + '"]').value; - } - } - } - return formData_list; - } - - function saveDocument(gadget, document_id, jio_document) { - // Authenticate before save - return gadget.props.jio_gadget.put(document_id, jio_document) - .push(function (result) { - return {status: 'OK'}; - }, function (error) { - console.log(error); - return {status: 'ERROR', code: error.target.status}; - }); - } - - gadget_klass - .ready(function (g) { - g.props = {}; - return g.getElement() - .push(function (element) { - g.props.element = element; - g.props.deferred = RSVP.defer(); - }); - }) - .ready(function (gadget) { - return gadget.getDeclaredGadget("jio_gadget") - .push(function (jio_gadget) { - gadget.props.jio_gadget = jio_gadget; - }); - }) - .declareMethod("render", function (options) { - var gadget = this; - return new RSVP.Queue() - .push(function () { - gadget.props.jio_gadget.createJio({ - type: "query", - sub_storage: { - type: "drivetojiomapping", - sub_storage: { - type: "dav", - url: options.url, - basic_login: options.basic_login - } - } - }); - gadget.props.options = options; - return gadget.props.deferred.resolve(); - }); - }) - .declareMethod("popupEdit", function (options, updateMethod) { - var gadget = this, - title = 'Edit - ' + options.title, - html_form = ''; - html_form = parameters_widget_template({ - parameter_list: options.parameters || [] - }); - - gadget.props.element.querySelector('.form-controlgroup') - .innerHTML = html_form; - gadget.props.element.querySelector('.ui-promise-title h2') - .textContent = title; - - return new RSVP.Queue() - .push(function () { - return $.magnificPopup.open({ - items: { - src: '.white-popup', - type: 'inline' - }, - closeBtnInside: true, - callbacks: { - open: function() { - return new RSVP.Queue() - .push(function () { - return $('.white-popup form').trigger("create"); - }) - .push(function () { - var promise_list = []; - - promise_list.push(loopEventListener( - document.querySelector('.mfp-content form .cancel'), - 'click', - false, - function (evt) { - return $.magnificPopup.close(); - } - )); - promise_list.push(loopEventListener( - document.querySelector('.mfp-content form .save'), - 'click', - false, - function (evt) { - var data = getFormDataList( - document.querySelector('.mfp-content form'), - options.parameters); - return new RSVP.Queue() - .push(function () { - $(document.querySelector('.mfp-content spinner')) - .toggleClass('ui-content-hidden'); - return RSVP.all([saveDocument( - gadget, - options.document_id, - data - )]); - }) - .push(function (result) { - if (result[0].status === 'ERROR') { - document.querySelector('.mfp-content .ui-text-error') - .innerHTML = 'ERROR ' + result[0].code + - ': Failed to save your document! ' + - "Parameters cannot be saved in Offline mode."; - } else { - $.magnificPopup.close(); - return updateMethod(data);} - }) - .push(function () { - $(document.querySelector('.mfp-content spinner')) - .toggleClass('ui-content-hidden'); - }); - } - )); - return RSVP.all(promise_list); - }); - }, - close: function() { - // Will fire when popup is closed - $('.white-popup').remove(); - } - } - }); - }) - .push(function () { - return gadget.props.deferred.resolve(); - }); - }) - - - .declareService(function () { - var gadget = this; - - return new RSVP.Queue() - .push(function () { - return gadget.props.deferred.promise; - }) - .push(function () { - - }); - }); - -}(window, document, rJS, $)); \ No newline at end of file diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_header_html.html b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_header_html.html deleted file mode 100644 index f6bbc52720532e1c7ecc9169c1f4c94a5c95e4be..0000000000000000000000000000000000000000 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_header_html.html +++ /dev/null @@ -1,52 +0,0 @@ -<!DOCTYPE html> -<html> - <head> - <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> - <meta name="viewport" content="width=device-width, user-scalable=no" /> - <title>OfficeJS Header</title> - - <!-- renderjs --> - <script src="rsvp.js" type="text/javascript"></script> - <script src="renderjs.js" type="text/javascript"></script> - <script src="handlebars.js" type="text/javascript"></script> - <script src="gadget_global.js" type="text/javascript"></script> - - <!-- custom script --> - <script src="gadget_monitoring_header.js" type="text/javascript"></script> - - <script id="header-title-link-template" type="text/x-handlebars-template"><a data-i18n="{{title}}" class="ui-btn ui-btn-icon-left ui-icon-arrow-down" href="{{url}}">{{title}}</a></script> - <script id="header-title-template" type="text/x-handlebars-template"><span data-i18n="{{title}}" class="ui-title-bold">{{title}}</span></script> - - <script id="header-link-template" type="text/x-handlebars-template"> - {{#if url}} - <a role="button" data-i18n="{{title}}" href="{{url}}" class="responsive ui-btn ui-icon-{{icon}} ui-btn-icon-left ui-first-child ui-last-child {{class}}">{{title}}</a> - {{else}} - <button data-i18n="{{title}}" class='responsive ui-btn ui-icon-{{icon}} ui-btn-icon-left ui-first-child ui-last-child {{class}}'>{{title}}</button> - {{/if}} - </script> - - <script id="header-button-template" type="text/x-handlebars-template"> - <form><button name='{{name}}' data-i18n="{{title}}" type='submit' class='responsive ui-btn ui-icon-{{icon}} ui-btn-icon-left ui-first-child ui-last-child {{class}}'>{{title}}</button></form> - </script> - - </head> - <body> - <div data-gadget-url="gadget_monitoring_sync.html" data-gadget-scope="sync_gadget" data-gadget-sandbox="public"></div> - <!--div data-role="header" data-theme="a" class="ui-header ui-bar-a" data-position="fixed" data-tap-toggle="false"--> - <div data-role="header" data-position="fixed" data-theme="a" class="ui-header ui-bar-a" data-tap-toggle="false"> - - <div class="ui-controlgroup ui-controlgroup-horizontal ui-btn-left"> - <div class="ui-controlgroup-controls"> - </div> - </div> - <h1 class="ui-title"></h1> - - <div class="ui-controlgroup ui-controlgroup-horizontal ui-btn-right"> - <div class="ui-controlgroup-controls"> - </div> - </div> - - </div> - - </body> -</html> \ No newline at end of file diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_header_html.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_header_html.xml deleted file mode 100644 index 29bc5f0025769e4897a052465eee1bbf1ed18202..0000000000000000000000000000000000000000 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_header_html.xml +++ /dev/null @@ -1,329 +0,0 @@ -<?xml version="1.0"?> -<ZopeData> - <record id="1" aka="AAAAAAAAAAE="> - <pickle> - <global name="Web Page" module="erp5.portal_type"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>_Access_contents_information_Permission</string> </key> - <value> - <tuple> - <string>Anonymous</string> - <string>Assignee</string> - <string>Assignor</string> - <string>Associate</string> - <string>Auditor</string> - <string>Manager</string> - <string>Owner</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Add_portal_content_Permission</string> </key> - <value> - <tuple> - <string>Assignor</string> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Change_local_roles_Permission</string> </key> - <value> - <tuple> - <string>Assignor</string> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Modify_portal_content_Permission</string> </key> - <value> - <tuple> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_View_Permission</string> </key> - <value> - <tuple> - <string>Anonymous</string> - <string>Assignee</string> - <string>Assignor</string> - <string>Associate</string> - <string>Auditor</string> - <string>Manager</string> - <string>Owner</string> - </tuple> - </value> - </item> - <item> - <key> <string>categories</string> </key> - <value> - <tuple> - <string>classification/collaborative/team</string> - </tuple> - </value> - </item> - <item> - <key> <string>content_md5</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>content_type</string> </key> - <value> <string>text/html</string> </value> - </item> - <item> - <key> <string>default_reference</string> </key> - <value> <string>gadget_monitoring_header.html</string> </value> - </item> - <item> - <key> <string>description</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>gadget_monitoring_header_html</string> </value> - </item> - <item> - <key> <string>language</string> </key> - <value> <string>en</string> </value> - </item> - <item> - <key> <string>portal_type</string> </key> - <value> <string>Web Page</string> </value> - </item> - <item> - <key> <string>short_title</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>title</string> </key> - <value> <string>Gadget Monitoring Header</string> </value> - </item> - <item> - <key> <string>version</string> </key> - <value> <string>001</string> </value> - </item> - <item> - <key> <string>workflow_history</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> - </value> - </item> - </dictionary> - </pickle> - </record> - <record id="2" aka="AAAAAAAAAAI="> - <pickle> - <global name="PersistentMapping" module="Persistence.mapping"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>data</string> </key> - <value> - <dictionary> - <item> - <key> <string>document_publication_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> - </value> - </item> - <item> - <key> <string>edit_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> - </value> - </item> - <item> - <key> <string>processing_status_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent> - </value> - </item> - </dictionary> - </value> - </item> - </dictionary> - </pickle> - </record> - <record id="3" aka="AAAAAAAAAAM="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>publish</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>zope</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1452260349.19</float> - <string>UTC</string> - </tuple> - </state> - </object> - </value> - </item> - <item> - <key> <string>validation_state</string> </key> - <value> <string>published</string> </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> - <record id="4" aka="AAAAAAAAAAQ="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>edit</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>zope</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>serial</string> </key> - <value> <string>961.18061.23530.41557</string> </value> - </item> - <item> - <key> <string>state</string> </key> - <value> <string>current</string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1502378533.63</float> - <string>UTC</string> - </tuple> - </state> - </object> - </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> - <record id="5" aka="AAAAAAAAAAU="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>detect_converted_file</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>zope</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>external_processing_state</string> </key> - <value> <string>converted</string> </value> - </item> - <item> - <key> <string>serial</string> </key> - <value> <string>0.0.0.0</string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1452260293.17</float> - <string>UTC</string> - </tuple> - </state> - </object> - </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_header_js.js b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_header_js.js deleted file mode 100644 index 5777d26e10ccc731d29016ff8f440aaec284fb1f..0000000000000000000000000000000000000000 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_header_js.js +++ /dev/null @@ -1,348 +0,0 @@ -/*jslint nomen: true, indent: 2, maxerr: 3 */ -/*global window, rJS, Handlebars, document, loopEventListener, RSVP */ -(function (window, rJS, Handlebars, document, loopEventListener, RSVP) { - "use strict"; - - ///////////////////////////////////////////////////////////////// - // Handlebars - ///////////////////////////////////////////////////////////////// - // Precompile the templates while loading the first gadget instance - var gadget_klass = rJS(window), - - header_title_source = gadget_klass.__template_element - .getElementById("header-title-template") - .innerHTML, - header_title_template = Handlebars.compile(header_title_source), - - header_title_link_source = gadget_klass.__template_element - .getElementById("header-title-link-template") - .innerHTML, - header_title_link_template = Handlebars.compile(header_title_link_source), - - header_button_source = gadget_klass.__template_element - .getElementById("header-button-template") - .innerHTML, - header_button_template = Handlebars.compile(header_button_source), - header_link_source = gadget_klass.__template_element - .getElementById("header-link-template") - .innerHTML, - header_link_template = Handlebars.compile(header_link_source); - - gadget_klass - ///////////////////////////////////////////////////////////////// - // ready - ///////////////////////////////////////////////////////////////// - // Init local properties - .ready(function (g) { - g.props = {}; - g.stats = { - loaded: false, - modified: false, - submitted: true, - error: false, - options: {} - }; - }) - - // Assign the element to a variable - .ready(function (g) { - return g.getElement() - .push(function (element) { - g.props.element = element; - g.props.left_link = element.querySelector(".ui-btn-left > div"); - g.props.right_link = element.querySelector(".ui-btn-right > div"); - g.props.title_element = element.querySelector("h1"); - g.props.start_deferred = RSVP.defer(); - }); - }) - - .ready(function (g) { - return g.getDeclaredGadget("sync_gadget") - .push(function (sync_gadget) { - g.props.sync_gadget = sync_gadget; - }); - }) - -/* - .ready(function (g) { - return g.render(g.stats.options); - }) -*/ - ////////////////////////////////////////////// - // acquired methods - ////////////////////////////////////////////// - .declareAcquiredMethod("translateHtml", "translateHtml") - .declareAcquiredMethod("getUrlFor", "getUrlFor") - .declareAcquiredMethod("triggerSubmit", "triggerSubmit") - .declareAcquiredMethod("triggerPanel", "triggerPanel") - - ///////////////////////////////////////////////////////////////// - // declared methods - ///////////////////////////////////////////////////////////////// -/* - .declareMethod('notifyError', function () { - this.stats.loaded = true; - this.stats.submitted = true; - this.stats.error = true; - var gadget = this; - return this.render(this.stats.options) - .push(function () { - gadget.stats.error = false; - }); - }) - .declareMethod('notifyUpdate', function () { - return this.render(this.stats.options); - }) -*/ - .declareMethod('notifyLoading', function () { - if (this.stats.loaded) { - this.stats.loaded = false; - return this.render(this.stats.options); - } - }) - .declareMethod('notifyLoaded', function () { - if (!this.stats.loaded) { - this.stats.loaded = true; - return this.render(this.stats.options); - } - }) - - .declareMethod('notifyChange', function () { - if (!this.stats.modified) { - this.stats.modified = true; - return this.render(this.stats.options); - } - }) - .declareMethod('notifySubmitting', function () { - if (this.stats.submitted) { - this.stats.submitted = false; - return this.render(this.stats.options); - } - }) - .declareMethod('notifySubmitted', function () { - if (!this.stats.submitted) { - this.stats.submitted = true; - // Change modify here, to allow user to redo some modification and being correctly notified - this.stats.modified = false; - return this.render(this.stats.options); - } - }) - - .declareMethod('render', function (options) { - var gadget = this, - possible_left_link_list = [ - // ['menu_url', 'Menu', 'bars'], - ['selection_url', 'Back', 'arrow-left'], - ['view_url', 'View', 'check'], - ['cancel_url', 'Cancel', 'times'], - ['back_url', 'Back', 'arrow-left'] - ], - possible_left_button_list = [ - ['panel_action', 'Menu', 'bars', 'panel'] - ], - possible_right_link_list = [ - ['edit_url', 'Edit', 'pencil'], - ['add_url', 'Add', 'plus'], - ['new_url', 'New', 'plus'], - ['refresh_url', 'Refresh', 'refresh'] - ], - possible_right_button_list = [ - ['save_action', 'Save', 'check', 'submit'], - ['submit_action', 'Proceed', 'check', 'submit'] - ], - i, - klass, - //left_link = { - // title: "Menu", - // icon: "bars", - // url: "#leftpanel", - // class: "ui-disabled" - // }, - left_link, - left_button, - right_link, - right_button, - default_right_text, - default_right_icon = "", - title_link = {}, - promise_list = []; - - gadget.stats.options = options; - // Handle main title - if (options.hasOwnProperty("title")) { - title_link.title = options.title; - // Updating globally the page title. Does not follow RenderJS philosophy, but, it is enough for now - document.title = title_link.title; - } - if (options.hasOwnProperty("breadcrumb_url")) { - title_link.url = options.breadcrumb_url; - promise_list.push(gadget.translateHtml(header_title_link_template(title_link))); - } else { - promise_list.push(gadget.translateHtml(header_title_template(title_link))); - } - - // Handle left link - for (i = 0; i < possible_left_link_list.length; i += 1) { - if (options.hasOwnProperty(possible_left_link_list[i][0])) { - klass = ""; - if (!options[possible_left_link_list[i][0]]) { - klass = "ui-disabled"; - } - left_link = { - title: possible_left_link_list[i][1], - icon: possible_left_link_list[i][2], - url: options[possible_left_link_list[i][0]], - class: klass - }; - } - } - for (i = 0; i < possible_left_button_list.length; i += 1) { - if (options.hasOwnProperty(possible_left_button_list[i][0]) - && options[possible_left_button_list[i][0]]) { - left_button = { - title: possible_left_button_list[i][1], - icon: possible_left_button_list[i][2], - name: possible_left_button_list[i][3] - }; - } - } - if (left_button !== undefined) { - promise_list.push(gadget.translateHtml(header_button_template(left_button))); - } else if (left_link === undefined) { - promise_list.push(gadget.translateHtml("")); - } else { - promise_list.push(gadget.translateHtml(header_link_template(left_link))); - } - - // Handle right link - if (gadget.stats.error) { - default_right_icon = "exclamation"; - } else if (!gadget.stats.loaded) { - default_right_icon = "spinner"; - // Show default loading information - right_link = { - title: "Loading", - icon: default_right_icon, - url: "", - class: "ui-disabled ui-icon-spin" - }; - } else if (!gadget.stats.submitted) { - default_right_icon = "spinner"; - } else if (gadget.stats.modified) { - default_right_text = "Save"; - default_right_icon = "warning"; - } - for (i = 0; i < possible_right_link_list.length; i += 1) { - if (options.hasOwnProperty(possible_right_link_list[i][0])) { - klass = ""; - if (!options[possible_right_link_list[i][0]]) { - klass = "ui-disabled"; - } - right_link = { - title: possible_right_link_list[i][1], - icon: default_right_icon || possible_right_link_list[i][2], - url: options[possible_right_link_list[i][0]], - class: klass - }; - } - } - for (i = 0; i < possible_right_button_list.length; i += 1) { - if (options.hasOwnProperty(possible_right_button_list[i][0]) - && options[possible_right_button_list[i][0]]) { - right_button = { - title: default_right_text || possible_right_button_list[i][1], - icon: default_right_icon || possible_right_button_list[i][2], - name: possible_right_button_list[i][3] - }; - if (gadget.stats.error) { - right_button.class = "ui-disabled"; - } - } - } - if (right_button !== undefined) { - promise_list.push(gadget.translateHtml(header_button_template(right_button))); - } else if (right_link !== undefined) { - promise_list.push(gadget.translateHtml(header_link_template(right_link))); - } else { - promise_list.push(gadget.translateHtml("")); - } - - // sync button - promise_list.push(gadget.translateHtml(header_link_template({ - title: "Sync", - icon: "refresh", - url: "", - class: "sync-all" - }))); - - return new RSVP.Queue() - .push(function () { - return RSVP.all(promise_list); - }) - .push(function (my_translated_html_list) { - gadget.props.title_element.innerHTML = my_translated_html_list[0]; - gadget.props.left_link.innerHTML = my_translated_html_list[1]; - gadget.props.right_link.innerHTML = my_translated_html_list[2]; - gadget.props.left_link.innerHTML += my_translated_html_list[3]; - }) - .push(function () { - return gadget.props.start_deferred.resolve(); - }); - }) - - ////////////////////////////////////////////// - // handle button click - ////////////////////////////////////////////// - .declareService(function () { - var gadget = this; - - function formSubmit(evt) { - var button = evt.target[0], - name = button.getAttribute("name"); - if (name === "panel") { - return gadget.triggerPanel(); - } - if (name === "submit") { - return gadget.triggerSubmit(); - } - throw new Error("Unsupported button " + name); - } - - return new RSVP.Queue() - .push(function () { - return gadget.props.start_deferred.promise; - }) - .push(function () { - // set auto sync timer - return gadget.props.sync_gadget.startSync(); - }) - .push(function () { - var promise_list = []; - - /*promise_list.push(loopEventListener( - gadget.element.querySelector('.sync-all'), - 'click', - false, - function () { - return gadget.props.sync_gadget.startSync({now: true}); - } - ));*/ - promise_list.push( - $(gadget.element). - on("click", "button.sync-all", function () { - return gadget.props.sync_gadget.startSync({now: true}); - }) - ); - // Listen to form submit - promise_list.push(loopEventListener( - gadget.element, - 'submit', - false, - formSubmit - )); - - return RSVP.all(promise_list); - }); - }); - -}(window, rJS, Handlebars, document, loopEventListener, RSVP)); \ No newline at end of file diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_header_js.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_header_js.xml deleted file mode 100644 index b8ab747f469b6bc7306dfd559c90366410c7f8ff..0000000000000000000000000000000000000000 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_header_js.xml +++ /dev/null @@ -1,329 +0,0 @@ -<?xml version="1.0"?> -<ZopeData> - <record id="1" aka="AAAAAAAAAAE="> - <pickle> - <global name="Web Script" module="erp5.portal_type"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>_Access_contents_information_Permission</string> </key> - <value> - <tuple> - <string>Anonymous</string> - <string>Assignee</string> - <string>Assignor</string> - <string>Associate</string> - <string>Auditor</string> - <string>Manager</string> - <string>Owner</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Add_portal_content_Permission</string> </key> - <value> - <tuple> - <string>Assignor</string> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Change_local_roles_Permission</string> </key> - <value> - <tuple> - <string>Assignor</string> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Modify_portal_content_Permission</string> </key> - <value> - <tuple> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_View_Permission</string> </key> - <value> - <tuple> - <string>Anonymous</string> - <string>Assignee</string> - <string>Assignor</string> - <string>Associate</string> - <string>Auditor</string> - <string>Manager</string> - <string>Owner</string> - </tuple> - </value> - </item> - <item> - <key> <string>categories</string> </key> - <value> - <tuple> - <string>classification/collaborative/team</string> - </tuple> - </value> - </item> - <item> - <key> <string>content_md5</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>content_type</string> </key> - <value> <string>text/javascript</string> </value> - </item> - <item> - <key> <string>default_reference</string> </key> - <value> <string>gadget_monitoring_header.js</string> </value> - </item> - <item> - <key> <string>description</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>gadget_monitoring_header_js</string> </value> - </item> - <item> - <key> <string>language</string> </key> - <value> <string>en</string> </value> - </item> - <item> - <key> <string>portal_type</string> </key> - <value> <string>Web Script</string> </value> - </item> - <item> - <key> <string>short_title</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>title</string> </key> - <value> <string>Gadget Monitoring Header JS</string> </value> - </item> - <item> - <key> <string>version</string> </key> - <value> <string>001</string> </value> - </item> - <item> - <key> <string>workflow_history</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> - </value> - </item> - </dictionary> - </pickle> - </record> - <record id="2" aka="AAAAAAAAAAI="> - <pickle> - <global name="PersistentMapping" module="Persistence.mapping"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>data</string> </key> - <value> - <dictionary> - <item> - <key> <string>document_publication_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> - </value> - </item> - <item> - <key> <string>edit_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> - </value> - </item> - <item> - <key> <string>processing_status_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent> - </value> - </item> - </dictionary> - </value> - </item> - </dictionary> - </pickle> - </record> - <record id="3" aka="AAAAAAAAAAM="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>publish</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>zope</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1452260201.8</float> - <string>UTC</string> - </tuple> - </state> - </object> - </value> - </item> - <item> - <key> <string>validation_state</string> </key> - <value> <string>published</string> </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> - <record id="4" aka="AAAAAAAAAAQ="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>edit</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>zope</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>serial</string> </key> - <value> <string>961.21883.33309.38348</string> </value> - </item> - <item> - <key> <string>state</string> </key> - <value> <string>current</string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1502445069.06</float> - <string>UTC</string> - </tuple> - </state> - </object> - </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> - <record id="5" aka="AAAAAAAAAAU="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>detect_converted_file</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>zope</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>external_processing_state</string> </key> - <value> <string>converted</string> </value> - </item> - <item> - <key> <string>serial</string> </key> - <value> <string>0.0.0.0</string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1452260156.14</float> - <string>UTC</string> - </tuple> - </state> - </object> - </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_hosting_subscription_list_html.html b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_hosting_subscription_list_html.html deleted file mode 100644 index a4dfb1e6e440b53e6eb03aa21db17bb1d2dda1c5..0000000000000000000000000000000000000000 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_hosting_subscription_list_html.html +++ /dev/null @@ -1,71 +0,0 @@ -<!doctype html> -<html> - <head> - <meta charset="utf-8"> - <meta name="viewport" content="width=device-width, initial-scale=1"> - - <title>Monitoring Hosting Subscription</title> - - <link href="gadget_monitoring_custom.css" rel="stylesheet" type="text/css"/> - - <script src="rsvp.js"></script> - <script src="renderjs.js"></script> - - <script id="template-hostings-list" type="text/x-handlebars-template"> - {{#each hosting_list}} - <tr> - <td> - <a class="ui-link" href="{{href}}"><span class="label label-{{status}}">{{status}}</span></a> - </td> - <td> - <a class="ui-link" href="{{href}}">{{title}}</a> - </td> - <td class="m-hidden"> - <a class="ui-link" href="{{href}}">{{date}}</a> - </td> - <td class="m-hidden"> - <a class="ui-link" href="{{href}}">{{amount}}</a> - </td> - </tr> - {{/each}} - </script> - - <script src="gadget_monitoring_hosting_subscription_list.js"></script> - </head> - - <body> - <!--<div data-gadget-url="gadget_monitoring_document_edit.html" data-gadget-scope="config_gadget" data-gadget-sandbox="public"></div>--> - <div class="ui-panel-overview hosting-list" style="min-height: 450px;"> - <div class="overview-header"> - <div class='content-title ui-instance-title'> - <div class="overview-title"> - <i class="fa fa-globe"></i> <span>Hosting Subscriptions</span> - </div> - <div class="commands"> - </div> - </div> - </div> - <div class="overview-content"> - - <div class="ui-listview-container"> - <table class="ui-responsive ui-body-c ui-table-inset instance-overview"> - <thead class="ui-bar-inherit"> - <tr> - <th class="padding-10">Status</th> - <th>Hosting Subscription Name</th> - <th class="m-hidden">Status Date</th> - <th class="m-hidden">Software Instance Amount</th> - </tr> - </thead> - <tbody> - - </tbody> - <tfoot class="ui-bar-inherit"></tfoot> - </table> - </div> - - </div> - </div> - - </body> -</html> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_hosting_subscription_list_js.js b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_hosting_subscription_list_js.js deleted file mode 100644 index e4b7eb460a58ad1b53221f7080cc41aafb64b22f..0000000000000000000000000000000000000000 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_hosting_subscription_list_js.js +++ /dev/null @@ -1,186 +0,0 @@ -/*global window, rJS, Handlebars */ -/*jslint nomen: true, indent: 2, maxerr: 3*/ -(function (window, rJS, Handlebars) { - "use strict"; - - var gadget_klass = rJS(window), - templater = gadget_klass.__template_element, - - hosting_widget_template = Handlebars.compile( - templater.getElementById("template-hostings-list").innerHTML - ); - - function getHostingData(gadget) { - // optimized way to fetch hosting subscription list - var hosting_dict = {}, - instance_dict = {}; - return gadget.jio_allDocs({ - select_list: ["basic_login", "url", "title"], - query: '(portal_type:"opml") AND (active:true)', - sort_on: [["title", "descending"]] - }) - .push(function (result) { - var i; - for (i = 0; i < result.data.total_rows; i += 1) { - hosting_dict[result.data.rows[i].id] = { - url: result.data.rows[i].value.url, - basic_login: result.data.rows[i].value.basic_login, - status: "WARNING", - date: 'Not Synchronized', - title: result.data.rows[i].value.title, - amount: 0 - }; - } - return gadget.jio_allDocs({ - query: '(portal_type:"opml-outline")', - select_list: [ - "parent_url" - ] - }); - }) - .push(function (result) { - var i; - for (i = 0; i <result.data.total_rows; i += 1) { - if (hosting_dict.hasOwnProperty(result.data.rows[i].value.parent_url)) { - instance_dict[result.data.rows[i].id] = { - parent_id: result.data.rows[i].value.parent_url - }; - } - } - return gadget.jio_allDocs({ - query: '(portal_type:"global")', - select_list: [ - "status", - "parent_id", - "date" - ] - }); - }) - .push(function (result) { - var i; - for (i = 0; i < result.data.total_rows; i += 1) { - if (instance_dict.hasOwnProperty(result.data.rows[i].value.parent_id)) { - instance_dict[result.data.rows[i].value.parent_id].date = - result.data.rows[i].value.date; - instance_dict[result.data.rows[i].value.parent_id].status = - result.data.rows[i].value.status; - } - } - }) - .push(function () { - //build hosting subscription data - var key, - item; - for (key in instance_dict) { - if (instance_dict.hasOwnProperty(key)) { - item = hosting_dict[instance_dict[key].parent_id]; - item.amount += 1; - if (item.status !== "ERROR") { - item.status = instance_dict[key].status; - } - item.date = instance_dict[key].date; - } - } - return gadget.changeState({opml_dict: hosting_dict}); - }); - } - - gadget_klass - .setState({ - render_deferred: "", - opml_dict: "" - }) - .ready(function (gadget) { - gadget.props = {}; - return gadget.changeState({"render_deferred": RSVP.defer()}); - }) - .declareAcquiredMethod("getSetting", "getSetting") - .declareAcquiredMethod("setSetting", "setSetting") - .declareAcquiredMethod("updateHeader", "updateHeader") - .declareAcquiredMethod("renderApplication", "renderApplication") - .declareAcquiredMethod('jio_allDocs', 'jio_allDocs') - .declareMethod("render", function (options) { - var gadget = this; - - gadget.props.options = options; - return gadget.updateHeader({ - title: 'Monitoring Hosting Subscriptions' - }) - .push(function () { - return getHostingData(gadget); - }) - .push(function () { - var content, - key, - hosting_list = [], - cred_list; - - for (key in gadget.state.opml_dict) { - if (gadget.state.opml_dict.hasOwnProperty(key)) { - if (gadget.state.opml_dict[key].date === 'Not Synchronized') { - cred_list = atob(gadget.state.opml_dict[key].basic_login).split(':'); - gadget.state.opml_dict[key].href = '#page=settings_configurator' + - '&tab=add&url=' + gadget.state.opml_dict[key].url + - '&username=' + cred_list[0] + '&password=' + cred_list[1]; - } else { - gadget.state.opml_dict[key].href = "#page=hosting_subscription_view&key=" + - gadget.state.opml_dict[key].url; - } - } - hosting_list.push(gadget.state.opml_dict[key]); - } - content = hosting_widget_template({ - hosting_list: hosting_list - }); - gadget.element.querySelector('.hosting-list table tbody') - .innerHTML = content; - - return gadget.state.render_deferred.resolve(); - }); - }) - - - .declareService(function () { - var gadget = this, - current_sync_date; - - return new RSVP.Queue() - .push(function () { - return gadget.state.render_deferred.promise; - }) - .push(function () { - return gadget.getSetting('latest_sync_time'); - }) - .push(function (sync_time) { - current_sync_date = sync_time; - return gadget.getSetting('status_list_refresh_id'); - }) - .push(function (timer_id) { - var new_timer_id; - if (timer_id) { - clearInterval(timer_id); - } - new_timer_id = setInterval(function() { - var hash = window.location.toString().split('#')[1], - scroll_position, - doc = document.documentElement; - if (hash.indexOf('page=hosting_subscription_list') >= 0) { - return gadget.getSetting('latest_sync_time') - .push(function (sync_time) { - if (sync_time > current_sync_date) { - scroll_position = (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0); - current_sync_date = sync_time; - return gadget.renderApplication({args: gadget.props.options}) - .push(function () { - $(document).scrollTop(scroll_position); - }); - } - }); - } - }, 60000); - return gadget.setSetting('status_list_refresh_id', new_timer_id); - }); - - }); - -}(window, rJS, Handlebars)); \ No newline at end of file diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_hosting_subscription_view_html.html b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_hosting_subscription_view_html.html deleted file mode 100644 index 71d0f244c58cb50de0d1c111915dc1f615631fba..0000000000000000000000000000000000000000 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_hosting_subscription_view_html.html +++ /dev/null @@ -1,161 +0,0 @@ -<!doctype html> -<html> - <head> - <meta charset="utf-8"> - <meta name="viewport" content="width=device-width, initial-scale=1"> - - <title>Monitoring Hosting Subscription View</title> - - <link href="gadget_monitoring_custom.css" rel="stylesheet" type="text/css"/> - - <script src="rsvp.js"></script> - <script src="renderjs.js"></script> - - <script id="instance-details-widget-overview" type="text/x-handlebars-template"> - {{#if status_list_url}} - <!--<div data-role="controlgroup"> - <a class="ui-btn ui-corner-all" href="{{status_list_url}}" title="Promises"><i class="fa fa-check-square"></i> Promises</a> - </div>--> - {{/if}} - <div class="ui-listview-container"> - <ul data-role="listview" class="ui-listview-outer" data-inset="true"> - {{#each instance_list}} - <li> - <a href="#" class="ui-btn ui-btn-icon-right ui-icon-plus"> - <span class="ui-status-icon ui-status-{{status}}"></span> - <span class="ui-status-text">{{title}}</span> - </a> - <div class="ui-collapse-content ui-content-hidden"> - <fieldset> - <div> - <div style="float: left; margin-right: 10px;"> - <fieldset data-role="controlgroup" data-type="horizontal"> - {{#if ../status_list_url}} - <a class="ui-btn ui-corner-all ui-btn-inline ui-mini" href="{{../status_list_url}}" title="Instance Promises List"><i class="fa fa-check-square"></i> Promises</a> - {{/if}} - {{#if instance_url}} - <a class="ui-btn ui-corner-all ui-btn-inline ui-mini" href="{{instance_url}}" title="Access Software Instance"><i class="fa fa-cube"></i> Instance</a> - {{/if}} - <!-- - {{#if public_url}} - <a class="ui-btn ui-corner-all ui-btn-inline ui-mini" target='_blank' href="{{public_url}}" title="Public Logs Directory"><i class="fa fa-folder-open-o"></i> Public Logs</a> - {{/if}} - {{#if private_url}} - <a class="ui-btn ui-corner-all ui-btn-inline ui-mini" target='_blank' href="{{private_url}}" title="Browse Private Logs Directory"><i class="fa fa-lock"></i> Private Logs</a> - {{/if}} - --> - </fieldset> - </div> - <div style="float: left"> - <fieldset data-role="controlgroup" data-type="horizontal"> - {{#if rss_url}} - <a class="ui-btn ui-corner-all ui-btn-inline ui-mini" target='_blank' href="{{rss_url}}" title="RSS"><i class="fa f-2x fa-rss-square"></i></a> - {{/if}} - {{#if resource_url }} - <a href="{{resource_url}}" class="ui-btn ui-corner-all ui-btn-inline ui-mini" title="Instance Resource comsumption"><i class="fa f-2x fa-pie-chart"> Ressources</i></a> - {{/if}} - {{#if process_url }} - <a href="{{process_url}}" class="ui-btn ui-corner-all ui-btn-inline ui-mini" title="Processes usage"><i class="fa f-2x fa-list-alt"></i> Processes</a> - {{/if}} - </fieldset> - </div> - <div class="clear"></div> - </div> - <table data-role="table" data-mode="columntoggle" class="ui-responsive table-stroke"> - <tr> - <th><i class="fa fa-tachometer"></i> <strong>Status</strong></th> - <td><span class="label label-{{status}}">{{status}}</span></td> - <td>{{date}}</td> - </tr> - - {{#with instance}} - <tr> - <th><i class="fa fa-desktop"></i> <strong>Computer</strong></th> - <td title="Computer Reference">{{computer}}</td> - <td title="Partition Reference">{{partition}}</td> - </tr> - <tr> - <th><i class="fa fa-globe"></i> <strong>IP Addresses</strong></th> - <td title="IPv4">{{ipv4}}</td> - <td title="IPv6">{{ipv6}}</td> - </tr> - <tr> - <th><i class="fa fa-square-o" aria-hidden="true"></i> <strong>Software Type</strong></th> - <td title="Software type">{{software-type}}</td> - <td><a style="padding: 0; min-height: initial;" href="{{software-release}}" title="{{software-release}}" target='_blank'>Click to open <i class="fa fa-external-link"></i></a></td> - </tr> - {{/with}} - </table> - {{#if warning}} - <p class="ui-text-error"><i class="fa fa-info-circle" aria-hidden="true"></i> Status was changed to WARNING as last sync of this instance failed.</p> - {{/if}} - </fieldset> - </div> - </li> - {{/each}} - </ul> - </div> - </script> - - <script id="parameters-widget-template" type="text/x-handlebars-template"> - {{#if parameter_list}} - {{#each parameter_list}} - {{#if parameters}} - <h3 class="margin-0 padding-tb-10">{{title}} <i class="fa fa-angle-up"></i></h3> - <table data-role="table" data-mode="columntoggle" class="table-stroke" title="{{title}}"> - {{#each parameters}} - <tr> - <td><strong>{{title}}</strong></td> - {{#if key}} - <td class="v-{{key}}">{{value}}</td> - {{else}} - <td>{{value}}</td> - {{/if}} - <td class="ui-text-center"> - {{#if key}} - <a rel="{{../index}}" class="prop-edit" title='Edit this value'><i class="fa fa-pencil"></i></a> - {{else}} - <a><span class="ui-text-desabled" title='Edit this value'><i class="fa fa-pencil"></i></span></a> - {{/if}} - </td> - </tr> - {{/each}} - </table> - {{/if}} - {{/each}} - <div class="alert alert-info ui-content-hidden">Your changes will be persistent in this screen after the next sync!</div> - {{else}} - <h2>No parameters.</h2> - {{/if}} - </script> - - <script src="gadget_monitoring_hosting_subscription_view.js"></script> - - </head> - - <body> - <div class="ui-responsive hosting-block"> - <div class="signal ui-content-hidden"></div> - <div class="ui-panel-overview"> - <div class="overview-header"> - <div class='content-title ui-instance-title'> - <div class="overview-title"> - <i class="fa fa-share-alt"></i> <span></span> - </div> - <div class="commands"> - </div> - </div> - </div> - <div class="content-details"> - <h2><i class="fa fa-wrench"></i> <strong>Monitoring Parameters</strong></h2> - <div style="overflow: auto;" class="padding-lr-10 instances-parameters"> - </div> - <div class="padding-5"></div> - <h2><i class="fa fa-cubes"></i> <strong>Software Instances Status</strong></h2> - <div class="instances-status"> - </div> - </div> - </div> - </div> - </body> -</html> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_hosting_subscription_view_js.js b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_hosting_subscription_view_js.js deleted file mode 100644 index 2581d50aeffb118158f74429ac2f0c30b4ccc9e2..0000000000000000000000000000000000000000 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_hosting_subscription_view_js.js +++ /dev/null @@ -1,278 +0,0 @@ -/*global window, rJS, btoa, Handlebars, $, Rusha */ -/*jslint nomen: true, indent: 2, maxerr: 3*/ -(function (window, rJS, btoa, Handlebars, $, Rusha) { - "use strict"; - - var gadget_klass = rJS(window), - templater = gadget_klass.__template_element, - - parameters_widget_template = Handlebars.compile( - templater.getElementById("parameters-widget-template").innerHTML - ), - instance_widget_template = Handlebars.compile( - templater.getElementById("instance-details-widget-overview").innerHTML - ), - rusha = new Rusha(); - - function generateHash(str) { - return rusha.digestFromString(str); - } - - function getInstanceDict(gadget, monitor_dict) { - var private_url = monitor_dict._links.private_url.href - .replace("jio_private", "private"), - public_url = monitor_dict._links.public_url.href - .replace("jio_public", "public"), - pass_url = "https://" + atob(gadget.state.opml.basic_login) + - "@" + private_url.split("//")[1], - i; - - for (i = 0; i < monitor_dict.parameters.length; i += 1) { - if (monitor_dict.parameters[i].key === "monitor-password") { - // disabled edit of monitor password from here!! - monitor_dict.parameters[i].key = ""; - } - } - - return { - key: monitor_dict.reference, - title: monitor_dict.title, - date: monitor_dict.date, - status: monitor_dict.status, - instance: monitor_dict._embedded.instance || '', - public_url: public_url, - private_url: pass_url, - rss_url: monitor_dict._links.rss_url.href || '', - resource_url: "#page=resource_view&key=" + monitor_dict.parent_id, - process_url: "#page=process_view&key=" + monitor_dict.parent_id, - instance_url: "#page=software_instance_view&key=" + monitor_dict.reference, - parameters: monitor_dict.parameters, - warning: (monitor_dict.status.toUpperCase() === "WARNING") ? true : false - }; - } - - gadget_klass - .setState({ - render_deferred: "", - opml: "", - instance_list: "" - }) - .ready(function (gadget) { - gadget.props = {}; - return gadget.changeState({"render_deferred": RSVP.defer()}); - }) - .declareAcquiredMethod("redirect", "redirect") - .declareAcquiredMethod("getSetting", "getSetting") - .declareAcquiredMethod("setSetting", "setSetting") - .declareAcquiredMethod("updateHeader", "updateHeader") - .declareAcquiredMethod('jio_allDocs', 'jio_allDocs') - .declareAcquiredMethod('jio_get', 'jio_get') - .declareMethod("render", function (options) { - var gadget = this; - gadget.props.options = options; - return gadget.updateHeader({ - title: 'Hosting Subscriptions View' - }) - .push(function () { - return gadget.jio_get(options.key); - }) - .push(function (opml_doc) { - return gadget.changeState({opml: opml_doc}); - }) - .push(function () { - return gadget.jio_allDocs({ - query: '(portal_type:"opml-outline") AND (parent_id:"' + - generateHash(options.key) + '")' - }); - }) - .push(function (ouline_list) { - var j, - promise_list = []; - for (j = 0; j < ouline_list.data.total_rows; j += 1) { - // fetch all instances - promise_list.push( - gadget.jio_allDocs({ - select_list: [ - "reference", - "parent_id", - "status", - "date", - "_embedded", - "_links", - "parameters", - "title"], - query: '(portal_type:"global") AND (parent_id:"' + - ouline_list.data.rows[j].id + '")' - }) - ); - } - return RSVP.all(promise_list); - }) - .push(function (document_list) { - var parameter_content, - instance_list = [], - parameter_list = [], - status_url = '', - instance_dict, - i, - instance_content; - - gadget.element.querySelector('.hosting-block .overview-title span') - .textContent = gadget.state.opml.title; - - for (i = 0; i < document_list.length; i += 1) { - // Only one instance per opml-outline - if (document_list[i].data.total_rows === 1) { - instance_dict = getInstanceDict( - gadget, - document_list[i].data.rows[0].value - ); - instance_list.push(instance_dict); - if (document_list[i].data.rows[0].value.hasOwnProperty('parameters')) { - parameter_list.push({ - title: document_list[i].data.rows[0].value.title, - parameters: instance_dict.parameters, - base_url: document_list[i].data.rows[0].value - ._links.private_url.href || '', - index: i - }); - } - } - } - status_url = "#page=status_list&search=" + gadget.state.opml.title - + "&reset_filter=1"; - parameter_content = parameters_widget_template({ - parameter_list: parameter_list - }); - instance_content = instance_widget_template({ - instance_list: instance_list, - status_list_url: status_url - }); - - gadget.element.querySelector('.hosting-block .instances-parameters') - .innerHTML = parameter_content; - gadget.element.querySelector('.hosting-block .instances-status') - .innerHTML = instance_content; - return gadget.changeState({instance_list: instance_list}); - }) - .push(function () { - return gadget.state.render_deferred.resolve(); - }) - .push(function () { - $(".hosting-block .signal").addClass("ui-content-hidden"); - return $(gadget.element.querySelectorAll('.hosting-block .ui-listview-outer')).listview().listview("refresh"); - }); - }) - - .declareService(function () { - var gadget = this; - - function bindOnClick(element) { - var fieldset = $(element.parentNode.querySelector('.ui-collapse-content')), - line = $(element); - if (line.hasClass('ui-icon-plus')) { - line.removeClass('ui-icon-plus'); - line.addClass('ui-icon-minus'); - } else { - line.removeClass('ui-icon-minus'); - line.addClass('ui-icon-plus'); - } - if (fieldset !== undefined) { - fieldset.toggleClass('ui-content-hidden'); - } - return false; - } - - function updateParameterBox(parameter_list, title) { - var element = gadget.element.querySelector('table[title="' + title + '"]'), - i; - - if (!element) { - return; - } - for (i = 0; i < parameter_list.length; i += 1) { - if (!parameter_list[i].key) { - continue; - } - element.querySelector('.v-' + parameter_list[i].key) - .textContent = parameter_list[i].value; - } - } - - function editMonitorProps (element) { - var index = parseInt($(element).attr('rel'), 10), - promise_list = []; - - if (isNaN(index) || gadget.state.instance_list.length < index) { - return; - } - - return new RSVP.Queue() - .push(function () { - if (gadget.props.config_gadget) { - return gadget.dropGadget('config_gadget'); - } - return false; - }) - .push(function () { - gadget.props.config_gadget = null; - return gadget.declareGadget("gadget_monitoring_document_edit.html", - { - element: gadget.element, - scope: 'config_gadget', - sandbox: "public" - } - ); - }) - .push(function (config_gadget) { - gadget.props.config_gadget = config_gadget; - return gadget.props.config_gadget.render({ - url: gadget.state.instance_list[index].private_url + - '/config', - basic_login: gadget.state.opml.basic_login - }); - }) - .push(function () { - return gadget.props.config_gadget.popupEdit({ - title: gadget.state.instance_list[index].title, - parameters: gadget.state.instance_list[index].parameters, - document_id: 'config.tmp' - }, function (data) { - gadget.state.instance_list[index].parameters = data; - updateParameterBox(data, gadget.state.instance_list[index].title); - $(gadget.element.querySelector('.alert-info')) - .removeClass('ui-content-hidden'); - }); - }); - } - - return new RSVP.Queue() - .push(function () { - return gadget.state.render_deferred.promise; - }) - .push(function () { - var promise_list = [], - element_list = gadget.element.querySelectorAll('.hosting-block .ui-listview-container li > a'), - edit_list = gadget.element.querySelectorAll('.hosting-block .prop-edit'), - i; - for (i = 0; i < element_list.length; i += 1) { - promise_list.push(loopEventListener( - element_list[i], - 'click', - false, - bindOnClick.bind(gadget, element_list[i]) - )); - } - for (i = 0; i < edit_list.length; i += 1) { - promise_list.push(loopEventListener( - edit_list[i], - 'click', - false, - editMonitorProps.bind(gadget, edit_list[i]) - )); - } - return RSVP.all(promise_list); - }); - }); - -}(window, rJS, btoa, Handlebars, $, Rusha)); \ No newline at end of file diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_import_export_html.html b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_import_export_html.html deleted file mode 100644 index b8e86289bf1f7c447d60afe0fe1ea29887bc1c81..0000000000000000000000000000000000000000 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_import_export_html.html +++ /dev/null @@ -1,66 +0,0 @@ -<!DOCTYPE html> -<html> - <head> - <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> - <meta name="viewport" content="width=device-width, user-scalable=no" /> - <title>Monitoring Configurator</title> - - <!-- renderjs --> - <script src="rsvp.js" type="text/javascript"></script> - <script src="renderjs.js" type="text/javascript"></script> - <script src="jsen.min.js" type="text/javascript"></script> - - <script src="gadget_monitoring_import_export.js" type="text/javascript"></script> - </head> - <body> - <div data-role="tabs" class="config-tabs"> - <div data-role="navbar"> - <ul> - <li><a href="#config-import" data-ajax="false">Import Settings</a></li> - <li><a href="#config-export" data-ajax="false">Export Settings</a></li> - </ul> - </div> - <div id="config-export" class="ui-body-c ui-content"> - <h2 class="section-title"><i class="fa fa-download fa-2x"></i><span data-i18n="">Save Monitoring Configuration</span></h2> - <div class="ui-body-c ui-content-sections"> - <div class="ui-field-contain"> - <label data-i18n="Setting Content:">Settings Content (json format):</label> - <textarea name="settings-data" class="text-data"></textarea> - </div> - </div> - <div class="select-storage ui-controlgroup ui-controlgroup-horizontal"> - <div class="ui-grid-b ui-responsive"> - <div class="ui-block-a"></div> - <div class="ui-block-b"> - </div> - <div class="ui-block-c"> - <button data-i18n="Reload Settings" class="ui-btn-btn-right btn-reload">Reload Settings</button> - </div> - </div> - </div> - </div> - <div id="config-import" class="ui-body-c ui-content"> - <h2 class="section-title"><i class="fa fa-upload fa-2x"></i><span data-i18n="">Load Your Monitoring Configuration</span></h2> - <div class="ui-body-c ui-content-sections"> - <div class="ui-field-contain"> - <label data-i18n="Setting Content:">Settings Content (json format):</label> - <textarea name="settings-data-input" class="text-data"></textarea> - </div> - </div> - <div class="alert alert-error ui-content-hidden"></div> - <div class="select-storage ui-controlgroup ui-controlgroup-horizontal"> - <div class="ui-grid-b ui-responsive"> - <div class="ui-block-a"></div> - <div class="ui-block-b padding-lr-10"> - <button data-i18n="Continue" class="ui-btn-btn-right btn-continue ui-content-hidden">Continue</button> - </div> - <div class="ui-block-c"> - <button data-i18n="Reload Settings" class="ui-btn-btn-right btn-save">Import Settings</button> - </div> - </div> - </div> - </div> - </div> - - </body> -</html> \ No newline at end of file diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_import_export_html.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_import_export_html.xml deleted file mode 100644 index b24889dd1dd72da40afb4a334e3cbeede1606f56..0000000000000000000000000000000000000000 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_import_export_html.xml +++ /dev/null @@ -1,329 +0,0 @@ -<?xml version="1.0"?> -<ZopeData> - <record id="1" aka="AAAAAAAAAAE="> - <pickle> - <global name="Web Page" module="erp5.portal_type"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>_Access_contents_information_Permission</string> </key> - <value> - <tuple> - <string>Anonymous</string> - <string>Assignee</string> - <string>Assignor</string> - <string>Associate</string> - <string>Auditor</string> - <string>Manager</string> - <string>Owner</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Add_portal_content_Permission</string> </key> - <value> - <tuple> - <string>Assignor</string> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Change_local_roles_Permission</string> </key> - <value> - <tuple> - <string>Assignor</string> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Modify_portal_content_Permission</string> </key> - <value> - <tuple> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_View_Permission</string> </key> - <value> - <tuple> - <string>Anonymous</string> - <string>Assignee</string> - <string>Assignor</string> - <string>Associate</string> - <string>Auditor</string> - <string>Manager</string> - <string>Owner</string> - </tuple> - </value> - </item> - <item> - <key> <string>categories</string> </key> - <value> - <tuple> - <string>classification/collaborative/public</string> - </tuple> - </value> - </item> - <item> - <key> <string>content_md5</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>content_type</string> </key> - <value> <string>text/html</string> </value> - </item> - <item> - <key> <string>default_reference</string> </key> - <value> <string>gadget_monitoring_import_export.html</string> </value> - </item> - <item> - <key> <string>description</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>gadget_monitoring_import_export_html</string> </value> - </item> - <item> - <key> <string>language</string> </key> - <value> <string>en</string> </value> - </item> - <item> - <key> <string>portal_type</string> </key> - <value> <string>Web Page</string> </value> - </item> - <item> - <key> <string>short_title</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>title</string> </key> - <value> <string>Monitoring Import Export</string> </value> - </item> - <item> - <key> <string>version</string> </key> - <value> <string>001</string> </value> - </item> - <item> - <key> <string>workflow_history</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> - </value> - </item> - </dictionary> - </pickle> - </record> - <record id="2" aka="AAAAAAAAAAI="> - <pickle> - <global name="PersistentMapping" module="Persistence.mapping"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>data</string> </key> - <value> - <dictionary> - <item> - <key> <string>document_publication_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> - </value> - </item> - <item> - <key> <string>edit_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> - </value> - </item> - <item> - <key> <string>processing_status_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent> - </value> - </item> - </dictionary> - </value> - </item> - </dictionary> - </pickle> - </record> - <record id="3" aka="AAAAAAAAAAM="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>publish</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>zope</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1459337186.91</float> - <string>UTC</string> - </tuple> - </state> - </object> - </value> - </item> - <item> - <key> <string>validation_state</string> </key> - <value> <string>published</string> </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> - <record id="4" aka="AAAAAAAAAAQ="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>edit</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>zope</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>serial</string> </key> - <value> <string>961.17814.51531.60586</string> </value> - </item> - <item> - <key> <string>state</string> </key> - <value> <string>current</string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1502201633.04</float> - <string>UTC</string> - </tuple> - </state> - </object> - </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> - <record id="5" aka="AAAAAAAAAAU="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>detect_converted_file</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>zope</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>external_processing_state</string> </key> - <value> <string>converted</string> </value> - </item> - <item> - <key> <string>serial</string> </key> - <value> <string>0.0.0.0</string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1459337116.02</float> - <string>UTC</string> - </tuple> - </state> - </object> - </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_import_export_js.js b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_import_export_js.js deleted file mode 100644 index 3b573b1042932422a557a40713239a2c69d98e3e..0000000000000000000000000000000000000000 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_import_export_js.js +++ /dev/null @@ -1,302 +0,0 @@ -/*global window, rJS, RSVP, jsen, Rusha, $ */ -/*jslint nomen: true, indent: 2, maxerr: 3*/ -(function (window, rJS, RSVP, jsen, Rusha, $) { - "use strict"; - - function getMonitorSetting(gadget) { - return gadget.jio_allDocs({ - select_list: ["basic_login", "url", "title", "active"], - query: '(portal_type:"opml")' - }) - .push(function (opml_result) { - var i, - opml_dict = {opml_description_list: []}; - for (i = 0; i < opml_result.data.total_rows; i+= 1) { - opml_dict.opml_description_list.push(opml_result.data.rows[i].value); - } - return opml_dict; - }); - } - - function validateJsonConfiguration(json_value, uses_old_schema) { - var validate, - json_schema = { - "$schema": "http://json-schema.org/draft-04/schema#", - "type" : "object", - "properties": { - "opml_description_list": { - "description": "list of monitor opml URL", - "type": "array", - "required": ['basic_login', "url", "title"], - "items": { - "type": "object", - "properties": { - "url": { - "description": "OPML URL", - "type": "string" - }, - "title": { - "description": "OPML title", - "type": "string" - }, - "basic_login": { - "description": "credentials hash string", - "type": "string" - }, - "active": { - "description": "OPML active state", - "type": "boolean", - "default": true - } - }, - "additionalProperties": false - } - } - }, - "additionalProperties": false - }, - old_json_schema = { - "$schema": "http://json-schema.org/draft-04/schema#", - "type" : "object", - "properties": { - "opml_description": { - "description": "list of monitor opml URL", - "type": "array", - "items": { - "type": "object", - "properties": { - "href": { - "description": "OPML URL", - "type": "string" - }, - "title": { - "description": "OPML title", - "type": "string" - } - }, - "additionalProperties": false - } - }, - "monitor_url": { - "description": "list of registered monitor instance URL", - "type": "array", - "required": ['hash', "url", "parent_url"], - "items": { - "type": "object", - "properties": { - "hash": { - "description": "hash string", - "type": "string" - }, - "login": { - "description": "login", - "type": "string", - "default": "" - }, - "url": { - "description": "url of monitor instance", - "type": "string" - }, - "parent_url": { - "description": "URL to parent instance", - "type": "string" - } - }, - "additionalProperties": false - } - } - }, - - "additionalProperties": false - }; - - return new RSVP.Queue() - .push(function () { - if (uses_old_schema !== undefined && uses_old_schema === true) { - validate = jsen(old_json_schema); - } else { - validate = jsen(json_schema); - } - return validate(json_value); - }); - } - - var gadget_klass = rJS(window), - hashCode = new Rusha().digestFromString; - - gadget_klass - .setState({deferred: ""}) - .ready(function (g) { - return g.changeState({deferred: RSVP.defer()}); - }) - .declareAcquiredMethod("getSetting", "getSetting") - .declareAcquiredMethod("setSetting", "setSetting") - .declareAcquiredMethod("redirect", "redirect") - .declareAcquiredMethod("jio_allDocs", "jio_allDocs") - .declareAcquiredMethod("jio_put", "jio_put") - .declareAcquiredMethod("updateHeader", "updateHeader") - .declareMethod("render", function (options) { - var gadget = this, - url_description_dict; - return gadget.updateHeader({ - title: "Monitoring OPML Import/Export" - }) - .push(function () { - return getMonitorSetting(gadget); - }) - .push(function (setting_dict) { - $(gadget.element.querySelector('textarea[name="settings-data"]')) - .val(JSON.stringify(setting_dict)); - return gadget.state.deferred.resolve(); - }); - }) - - - .declareService(function () { - var gadget = this, - is_old_schema = false; - - return new RSVP.Queue() - .push(function () { - return gadget.state.deferred.promise; - }) - .push(function () { - return $(gadget.element.querySelector("a[href='#config-import']")).trigger('click'); - }) - .push(function () { - var promise_list = []; - promise_list.push(loopEventListener( - gadget.element.querySelector('.btn-reload'), - 'click', - true, - function () { - return new RSVP.Queue() - .push(function () { - return getMonitorSetting(gadget); - }) - .push(function (setting_dict) { - $(gadget.element.querySelector('textarea[name="settings-data"]')) - .val(JSON.stringify(setting_dict)); - }); - } - )); - - promise_list.push(loopEventListener( - gadget.element.querySelector('.btn-continue'), - 'click', - true, - function () { - return gadget.redirect({ - page: 'settings_configurator', - tab: 'manage' - }); - } - )); - - promise_list.push(loopEventListener( - gadget.element.querySelector('.btn-save'), - 'click', - true, - function () { - var json_string = $(gadget.element.querySelector('textarea[name="settings-data-input"]')).val(), - configuration_dict, - monitor_url_dict = {}, - monitor_opml_url_dict = {}, - error_msg = '', - i; - - try { - configuration_dict = JSON.parse(json_string); - } catch (e) { - return $(gadget.element.querySelector('.alert-error')) - .removeClass('ui-content-hidden') - .html('Error: Invalid json content!'); - } - - return validateJsonConfiguration(configuration_dict) - .push(function (validate_result) { - if (!validate_result) { - // try validation on old setting format - is_old_schema = true; - return validateJsonConfiguration(configuration_dict, true); - } - return validate_result; - }) - .push(function (validate_result) { - var settings_queue = new RSVP.Queue(), - not_imported = "", - item, - i, - j; - - function pushSetting(id, config) { - settings_queue - .push(function () { - return gadget.jio_put(id, config); - }) - .push(undefined, function (error) { - throw error; - }); - } - if (validate_result) { - if (is_old_schema) { - //return settings_queue; - for (i = 0; i < configuration_dict.opml_description.length; i += 1) { - item = { - title: configuration_dict.opml_description[i].title, - url: configuration_dict.opml_description[i].href, - active: true, - portal_type: "opml" - }; - for (j = 0; j < configuration_dict.monitor_url.length; j += 1) { - if (configuration_dict.monitor_url[j].parent_url === - configuration_dict.opml_description[i].href) { - item.basic_login = configuration_dict.monitor_url[j].hash; - // XXX - all monitors password in opml should be the same - break; - } - } - if (item.basic_login !== undefined) { - pushSetting(item.url, item); - } else { - not_imported += "OPML [" + configuration_dict.opml_description[i].title + - "] was not imported, bad configuration...<br/>"; - } - } - } else { - for (i = 0; i < configuration_dict.opml_description_list.length; i += 1) { - item = configuration_dict.opml_description_list[i]; - item.portal_type = "opml"; - pushSetting(item.url, item); - } - } - return settings_queue - .push(function () { - if (not_imported !== "") { - $(gadget.element.querySelector('.alert-error')) - .removeClass('ui-content-hidden') - .html(not_imported); - return false; - } - return true; - }); - } else { - $(gadget.element.querySelector('.alert-error')) - .removeClass('ui-content-hidden') - .html('Error: Content is not a valid Monitoring Json configuration!'); - return false; - } - }) - .push(function (status) { - if (status) { - return gadget.redirect({ - page: 'status_list' - }); - } - }); - } - )); - }); - }); - -}(window, rJS, RSVP, jsen, Rusha, $)); \ No newline at end of file diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_import_export_js.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_import_export_js.xml deleted file mode 100644 index 0c1b77b9045e32d3c1866ff61f806350341af202..0000000000000000000000000000000000000000 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_import_export_js.xml +++ /dev/null @@ -1,329 +0,0 @@ -<?xml version="1.0"?> -<ZopeData> - <record id="1" aka="AAAAAAAAAAE="> - <pickle> - <global name="Web Script" module="erp5.portal_type"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>_Access_contents_information_Permission</string> </key> - <value> - <tuple> - <string>Anonymous</string> - <string>Assignee</string> - <string>Assignor</string> - <string>Associate</string> - <string>Auditor</string> - <string>Manager</string> - <string>Owner</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Add_portal_content_Permission</string> </key> - <value> - <tuple> - <string>Assignor</string> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Change_local_roles_Permission</string> </key> - <value> - <tuple> - <string>Assignor</string> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Modify_portal_content_Permission</string> </key> - <value> - <tuple> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_View_Permission</string> </key> - <value> - <tuple> - <string>Anonymous</string> - <string>Assignee</string> - <string>Assignor</string> - <string>Associate</string> - <string>Auditor</string> - <string>Manager</string> - <string>Owner</string> - </tuple> - </value> - </item> - <item> - <key> <string>categories</string> </key> - <value> - <tuple> - <string>classification/collaborative/public</string> - </tuple> - </value> - </item> - <item> - <key> <string>content_md5</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>content_type</string> </key> - <value> <string>text/javascript</string> </value> - </item> - <item> - <key> <string>default_reference</string> </key> - <value> <string>gadget_monitoring_import_export.js</string> </value> - </item> - <item> - <key> <string>description</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>gadget_monitoring_import_export_js</string> </value> - </item> - <item> - <key> <string>language</string> </key> - <value> <string>en</string> </value> - </item> - <item> - <key> <string>portal_type</string> </key> - <value> <string>Web Script</string> </value> - </item> - <item> - <key> <string>short_title</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>title</string> </key> - <value> <string>Monitoring Import Export Gadget JS</string> </value> - </item> - <item> - <key> <string>version</string> </key> - <value> <string>001</string> </value> - </item> - <item> - <key> <string>workflow_history</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> - </value> - </item> - </dictionary> - </pickle> - </record> - <record id="2" aka="AAAAAAAAAAI="> - <pickle> - <global name="PersistentMapping" module="Persistence.mapping"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>data</string> </key> - <value> - <dictionary> - <item> - <key> <string>document_publication_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> - </value> - </item> - <item> - <key> <string>edit_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> - </value> - </item> - <item> - <key> <string>processing_status_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent> - </value> - </item> - </dictionary> - </value> - </item> - </dictionary> - </pickle> - </record> - <record id="3" aka="AAAAAAAAAAM="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>publish</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>zope</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1459338522.11</float> - <string>UTC</string> - </tuple> - </state> - </object> - </value> - </item> - <item> - <key> <string>validation_state</string> </key> - <value> <string>published</string> </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> - <record id="4" aka="AAAAAAAAAAQ="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>edit</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>zope</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>serial</string> </key> - <value> <string>961.21935.10239.63812</string> </value> - </item> - <item> - <key> <string>state</string> </key> - <value> <string>current</string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1502465428.35</float> - <string>UTC</string> - </tuple> - </state> - </object> - </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> - <record id="5" aka="AAAAAAAAAAU="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>detect_converted_file</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>zope</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>external_processing_state</string> </key> - <value> <string>converted</string> </value> - </item> - <item> - <key> <string>serial</string> </key> - <value> <string>0.0.0.0</string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1459338433.74</float> - <string>UTC</string> - </tuple> - </state> - </object> - </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_log_widget_html.html b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_log_widget_html.html deleted file mode 100644 index 3dd8cc9374f3ab6dc1b41c4f10c915eac11b3bd4..0000000000000000000000000000000000000000 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_log_widget_html.html +++ /dev/null @@ -1,21 +0,0 @@ -<!doctype html> -<html> - <head> - <meta charset="utf-8"> - <meta name="viewport" content="width=device-width, initial-scale=1"> - - <title>Monitoring Logs Widget</title> - - <link href="gadget_monitoring_custom.css" rel="stylesheet" type="text/css"/> - - <script src="rsvp.js"></script> - <script src="renderjs.js"></script> - - <script src="gadget_monitoring_log_widget.js"></script> - - </head> - - <body> - <div data-gadget-url="gadget_monitoring_jio.html" data-gadget-scope="jio_gadget" data-gadget-sandbox="public"></div> - </body> -</html> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_log_widget_js.js b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_log_widget_js.js deleted file mode 100644 index 14c95a78bc0f3ae226e1361ee1d73215d40c79c7..0000000000000000000000000000000000000000 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_log_widget_js.js +++ /dev/null @@ -1,107 +0,0 @@ -/*global window, rJS, btoa */ -/*jslint nomen: true, indent: 2, maxerr: 3*/ -(function (window, rJS) { - "use strict"; - - var gadget_klass = rJS(window); - - function getMessageList(gadget, limit) { - - return gadget.getDeclaredGadget("jio_gadget") - .push(function (jio_gadget) { - return jio_gadget.get("logs"); - }) - .push(function (doc) { - var error_list = [], - key_list, - size, - i; - if (doc === undefined) { - doc = {}; - } - key_list = Object.keys(doc).reverse(); - size = key_list.length; - if (size < limit) { - limit = size; - } - if (limit === undefined) { - limit = 150; - } - for (i = 0; i < limit; i += 1) { - error_list.push(doc[key_list[i]]); - } - return error_list; - }, function (error) { - if (error.status_code === 404) { - return []; - } - throw error; - }); - } - - function log(gadget, logs) { - var jio_gadget; - return gadget.getDeclaredGadget("jio_gadget") - .push(function (result) { - jio_gadget = result; - return jio_gadget.get("logs"); - }) - .push(undefined, function (error) { - if (error.status_code === 404) { - return {}; - } - throw error; - }) - .push(function (doc) { - var value, - d = new Date(), - key = d.getTime(), - key_list = Object.keys(doc), - size = key_list.length; - if (logs === undefined) { - logs = {}; - } - if (size >= 150) { - // Reduce logs amount to not exceed the limit. - delete doc[key_list[0]]; - } - value = { - date: d.toISOString().slice(0,10) + ' ' + d.getHours() + ':' + d.getMinutes() + ':' + d.getSeconds(), - title: logs.title || '', - message: logs.message.replace(/\n/g, '<br/>') || '', - type: (logs.type || 'ERROR').toUpperCase(), - method: logs.method || '' - }; - doc[key] = value; - return jio_gadget.put('logs', doc); - }); - } - - gadget_klass - .ready(function (g) { - g.props = {}; - }) - .ready(function (g) { - return g.getDeclaredGadget("jio_gadget") - .push(function (jio_gadget) { - return jio_gadget.createJio({ - type: "indexeddb", - database: "setting" - }, false); - }); - }) - .declareMethod('log', function (logs) { - var gadget = this; - return log(gadget, logs); - }) - .declareMethod('getMessageList', function (limit) { - var gadget = this; - return getMessageList(gadget, limit); - }) - .declareService(function () { - var gadget = this; - - - }); - -}(window, rJS)); \ No newline at end of file diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_main_html.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_main_html.xml deleted file mode 100644 index 4e8f2a24f696772f8b6c2c5a7e10fb1a5bcd7b4a..0000000000000000000000000000000000000000 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_main_html.xml +++ /dev/null @@ -1,333 +0,0 @@ -<?xml version="1.0"?> -<ZopeData> - <record id="1" aka="AAAAAAAAAAE="> - <pickle> - <global name="Web Page" module="erp5.portal_type"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>_Access_contents_information_Permission</string> </key> - <value> - <tuple> - <string>Anonymous</string> - <string>Assignee</string> - <string>Assignor</string> - <string>Associate</string> - <string>Auditor</string> - <string>Manager</string> - <string>Owner</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Add_portal_content_Permission</string> </key> - <value> - <tuple> - <string>Assignor</string> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Change_local_roles_Permission</string> </key> - <value> - <tuple> - <string>Assignor</string> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Modify_portal_content_Permission</string> </key> - <value> - <tuple> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_View_Permission</string> </key> - <value> - <tuple> - <string>Anonymous</string> - <string>Assignee</string> - <string>Assignor</string> - <string>Associate</string> - <string>Auditor</string> - <string>Manager</string> - <string>Owner</string> - </tuple> - </value> - </item> - <item> - <key> <string>categories</string> </key> - <value> - <tuple> - <string>classification/collaborative/public</string> - </tuple> - </value> - </item> - <item> - <key> <string>content_md5</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>content_type</string> </key> - <value> <string>text/html</string> </value> - </item> - <item> - <key> <string>default_reference</string> </key> - <value> <string>gadget_monitoring_main.html</string> </value> - </item> - <item> - <key> <string>description</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>gadget_monitoring_main_html</string> </value> - </item> - <item> - <key> <string>language</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>portal_type</string> </key> - <value> <string>Web Page</string> </value> - </item> - <item> - <key> <string>short_title</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>title</string> </key> - <value> <string>Monitoring Main</string> </value> - </item> - <item> - <key> <string>version</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>workflow_history</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> - </value> - </item> - </dictionary> - </pickle> - </record> - <record id="2" aka="AAAAAAAAAAI="> - <pickle> - <global name="PersistentMapping" module="Persistence.mapping"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>data</string> </key> - <value> - <dictionary> - <item> - <key> <string>document_publication_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> - </value> - </item> - <item> - <key> <string>edit_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> - </value> - </item> - <item> - <key> <string>processing_status_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent> - </value> - </item> - </dictionary> - </value> - </item> - </dictionary> - </pickle> - </record> - <record id="3" aka="AAAAAAAAAAM="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>publish</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>zope</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1452872039.63</float> - <string>UTC</string> - </tuple> - </state> - </object> - </value> - </item> - <item> - <key> <string>validation_state</string> </key> - <value> <string>published</string> </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> - <record id="4" aka="AAAAAAAAAAQ="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>edit</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>zope</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>serial</string> </key> - <value> <string>951.17777.16093.25088</string> </value> - </item> - <item> - <key> <string>state</string> </key> - <value> <string>current</string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1463744746.17</float> - <string>UTC</string> - </tuple> - </state> - </object> - </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> - <record id="5" aka="AAAAAAAAAAU="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>detect_converted_file</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>zope</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>external_processing_state</string> </key> - <value> <string>converted</string> </value> - </item> - <item> - <key> <string>serial</string> </key> - <value> <string>0.0.0.0</string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1452870585.14</float> - <string>UTC</string> - </tuple> - </state> - </object> - </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_main_js.js b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_main_js.js deleted file mode 100644 index 029660941b7c520f98ceab3b661c16e8391f1f10..0000000000000000000000000000000000000000 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_main_js.js +++ /dev/null @@ -1,30 +0,0 @@ -/*global window, rJS, btoa */ -/*jslint nomen: true, indent: 2, maxerr: 3*/ -(function (window, rJS) { - "use strict"; - - var gadget_klass = rJS(window); - - gadget_klass - .ready(function (g) { - g.props = {}; - }) - .declareAcquiredMethod("redirect", "redirect") - .declareAcquiredMethod("jio_allDocs", "jio_allDocs") - .declareMethod("render", function (options) { - var gadget = this, - current_display; - return gadget.jio_allDocs({query: 'portal_type:"opml"', limit: [0, 1]}) - .push(function (opml_result) { - if (opml_result.data.total_rows === 0) { - return gadget.redirect({ - page: 'import_export' - }); - } - return gadget.redirect({ - page: 'status_list' - }); - }); - }); - -}(window, rJS)); \ No newline at end of file diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_main_js.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_main_js.xml deleted file mode 100644 index b51dd86c97a12e985f9cbfece4d0cd6feb697f2d..0000000000000000000000000000000000000000 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_main_js.xml +++ /dev/null @@ -1,329 +0,0 @@ -<?xml version="1.0"?> -<ZopeData> - <record id="1" aka="AAAAAAAAAAE="> - <pickle> - <global name="Web Script" module="erp5.portal_type"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>_Access_contents_information_Permission</string> </key> - <value> - <tuple> - <string>Anonymous</string> - <string>Assignee</string> - <string>Assignor</string> - <string>Associate</string> - <string>Auditor</string> - <string>Manager</string> - <string>Owner</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Add_portal_content_Permission</string> </key> - <value> - <tuple> - <string>Assignor</string> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Change_local_roles_Permission</string> </key> - <value> - <tuple> - <string>Assignor</string> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Modify_portal_content_Permission</string> </key> - <value> - <tuple> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_View_Permission</string> </key> - <value> - <tuple> - <string>Anonymous</string> - <string>Assignee</string> - <string>Assignor</string> - <string>Associate</string> - <string>Auditor</string> - <string>Manager</string> - <string>Owner</string> - </tuple> - </value> - </item> - <item> - <key> <string>categories</string> </key> - <value> - <tuple> - <string>classification/collaborative/public</string> - </tuple> - </value> - </item> - <item> - <key> <string>content_md5</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>content_type</string> </key> - <value> <string>text/javascript</string> </value> - </item> - <item> - <key> <string>default_reference</string> </key> - <value> <string>gadget_monitoring_main.js</string> </value> - </item> - <item> - <key> <string>description</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>gadget_monitoring_main_js</string> </value> - </item> - <item> - <key> <string>language</string> </key> - <value> <string>en</string> </value> - </item> - <item> - <key> <string>portal_type</string> </key> - <value> <string>Web Script</string> </value> - </item> - <item> - <key> <string>short_title</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>title</string> </key> - <value> <string>Monitoring Main Interface Gadget JS</string> </value> - </item> - <item> - <key> <string>version</string> </key> - <value> <string>001</string> </value> - </item> - <item> - <key> <string>workflow_history</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> - </value> - </item> - </dictionary> - </pickle> - </record> - <record id="2" aka="AAAAAAAAAAI="> - <pickle> - <global name="PersistentMapping" module="Persistence.mapping"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>data</string> </key> - <value> - <dictionary> - <item> - <key> <string>document_publication_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> - </value> - </item> - <item> - <key> <string>edit_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> - </value> - </item> - <item> - <key> <string>processing_status_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent> - </value> - </item> - </dictionary> - </value> - </item> - </dictionary> - </pickle> - </record> - <record id="3" aka="AAAAAAAAAAM="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>publish</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>zope</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1452872923.25</float> - <string>UTC</string> - </tuple> - </state> - </object> - </value> - </item> - <item> - <key> <string>validation_state</string> </key> - <value> <string>published</string> </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> - <record id="4" aka="AAAAAAAAAAQ="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>edit</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>zope</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>serial</string> </key> - <value> <string>961.21883.33309.38348</string> </value> - </item> - <item> - <key> <string>state</string> </key> - <value> <string>current</string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1502445069.1</float> - <string>UTC</string> - </tuple> - </state> - </object> - </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> - <record id="5" aka="AAAAAAAAAAU="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>detect_converted_file</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>zope</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>external_processing_state</string> </key> - <value> <string>converted</string> </value> - </item> - <item> - <key> <string>serial</string> </key> - <value> <string>0.0.0.0</string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1452870669.24</float> - <string>UTC</string> - </tuple> - </state> - </object> - </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_message_log_html.html b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_message_log_html.html deleted file mode 100644 index 5e0761389e043ce6530dee82529b66f3b15061f2..0000000000000000000000000000000000000000 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_message_log_html.html +++ /dev/null @@ -1,61 +0,0 @@ -<!doctype html> -<html> - <head> - <meta charset="utf-8"> - <meta name="viewport" content="width=device-width, initial-scale=1"> - - <title>Monitoring Errors Page</title> - - <link href="gadget_monitoring_custom.css" rel="stylesheet" type="text/css"/> - - <script src="rsvp.js"></script> - <script src="renderjs.js"></script> - - <script id="template-error-list" type="text/x-handlebars-template"> - {{#each error_list}} - <tr class="tooltip" title="<h2 class='ui-promise-title '><strong>{{title}}</strong><h2><br/><p><strong>On {{date}}:<br/></strong>{{message}}</p>"> - <td> - <span class="label label-{{type}}">{{type}}</span> - </td> - <td class="title"> - <span>{{title}}</span> - </td> - <td class="m-hidden"> - <span>{{date}}</span> - </td> - <td class="m-hidden"> - <span>{{method}}</span> - </td> - </tr> - {{/each}} - </script> - - <script src="gadget_monitoring_message_log.js"></script> - <script src="gadget_monitoring_tooltipster.min.js" type="text/javascript"></script> - - </head> - - <body> - <div data-gadget-url="gadget_monitoring_log_widget.html" data-gadget-scope="log_gadget" data-gadget-sandbox="public"></div> - <div class="ui-panel-overview error-list" style="min-height: 450px;"> - <div class="overview-header"> - <div class='content-title ui-instance-title'> - <div class="overview-title"> - <i class="fa fa-newspaper-o" aria-hidden="true"></i> <span>Monitoring Messages and Errors</span> - </div> - <div class="commands"> - <a href="#"><i class="fa fa-refresh" aria-hidden="true"></i></a> - </div> - </div> - </div> - <div class="overview-content"> - <div class="logbox"> - <table> - <tbody></tbody> - </table> - </div> - - </div> - </div> - </body> -</html> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_message_log_js.js b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_message_log_js.js deleted file mode 100644 index 3bd542bded6ac74b221ef69bfd9a4968a79ce5c8..0000000000000000000000000000000000000000 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_message_log_js.js +++ /dev/null @@ -1,85 +0,0 @@ -/*global window, rJS, btoa */ -/*jslint nomen: true, indent: 2, maxerr: 3*/ -(function (window, rJS) { - "use strict"; - - var gadget_klass = rJS(window), - templater = gadget_klass.__template_element, - - error_log_template = Handlebars.compile( - templater.getElementById("template-error-list").innerHTML - ); - - gadget_klass - .ready(function (g) { - g.props = {}; - return g.getElement() - .push(function (element) { - g.props.element = element; - g.props.deferred = RSVP.defer(); - }); - }) - .ready(function (g) { - return g.getDeclaredGadget("log_gadget") - .push(function (log_gadget) { - g.props.log_gadget = log_gadget; - }); - }) - .declareAcquiredMethod("redirect", "redirect") - .declareMethod("render", function (options) { - var gadget = this; - return gadget.props.log_gadget.getMessageList(150) - .push(function (error_list) { - - var content = error_log_template({error_list: error_list}); - gadget.props.element.querySelector('.logbox table tbody') - .innerHTML = content; - }); - }) - .declareService(function () { - var gadget = this; - return new RSVP.Queue() - .push(function () { - $('.tooltip').tooltipster({ - animation: 'fade', - delay: 200, - theme: 'tooltipster-shadow', - touchDevices: true, - interactive: true, - trigger: 'click', - contentAsHTML: true, - minWidth: 300 - }); - }) - .push(function () { - var promise_list = []; - promise_list.push(loopEventListener( - gadget.props.element.querySelector('.commands a'), - 'click', - false, - function (evt) { - return gadget.props.log_gadget.getMessageList(150) - .push(function (error_list) { - var content = error_log_template({error_list: error_list}); - gadget.props.element.querySelector('.logbox table tbody') - .innerHTML = content; - $('.tooltip').tooltipster({ - animation: 'fade', - delay: 200, - theme: 'tooltipster-shadow', - touchDevices: true, - interactive: true, - trigger: 'click', - contentAsHTML: true, - minWidth: 300 - }); - }); - } - )); - - return RSVP.all(promise_list); - }); - - }); - -}(window, rJS)); \ No newline at end of file diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_process_view_html.html b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_process_view_html.html deleted file mode 100644 index 5fc47e2ba446089ece95f594f54d270a634272ad..0000000000000000000000000000000000000000 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_process_view_html.html +++ /dev/null @@ -1,73 +0,0 @@ -<!doctype html> -<html> - <head> - <meta charset="utf-8"> - <meta name="viewport" content="width=device-width, initial-scale=1"> - - <title>Monitoring Process View Page</title> - - <link href="gadget_monitoring_custom.css" rel="stylesheet" type="text/css"/> - - <script src="notify.min.js"></script> - <script src="rsvp.js"></script> - <script src="renderjs.js"></script> - - <script id="infobox-widget-template" type="text/x-handlebars-template"> - {{#each resource_list}} - <div class="infobox"> - <div class="infobox-icon"> - <i class="fa fa-{{icon_name}} fa-2x"></i> - </div> - <div class="infobox-data"> - <span class="infobox-data-number">{{value}}</span> - <div class="infobox-content">{{title}}</div> - </div> - </div> - {{/each}} - </script> - - <script id="monitor-process-widget-template" type="text/x-handlebars-template"> - <table class="ui-responsive ui-body-c ui-table-inset custom-force-list"> - <thead class="ui-bar-inherit"> - <tr> - {{#each column_list}} - <th>{{title}}</th> - {{/each}} - </tr> - </thead> - <tbody> - {{#each row_list}} - <tr title='{{message}}'> - {{#each cell_list}} - {{#if href}} - <td class='{{class}}'><a class="ui-link" href="{{href}}">{{value}}</a></td> - {{else}} - <td class='{{class}}'><a class="ui-link">{{value}}</a></td> - {{/if}} - {{/each}} - </tr> - {{/each}} - </tbody> - <tfoot class="ui-bar-inherit"></tfoot> - </table> - </script> - - <script src="gadget_monitoring_process_view.js"></script> - - </head> - - <body> - <div data-gadget-url="gadget_monitoring_jio.html" data-gadget-scope="jio_gadget" data-gadget-sandbox="public"></div> - <div class="ui-promise-title"> - <h2> - <div data-gadget-url="gadget_monitoring_breadcrumb.html" data-gadget-scope="breadcrumb_gadget" data-gadget-sandbox="public"></div> - </h2> - </div> - <div class="padding-lr-10 infobox-container"> - </div> - <h2 class="header-notice"><i class="fa fa-info" aria-hidden="true"></i> Processes information will be reloaded automatically every minutes.</h2> - <div class="ui-panel-overview ui-grid-container process-all"> - - </div> - </body> -</html> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_process_view_js.js b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_process_view_js.js deleted file mode 100644 index 9b6b5dfbf4965abbfae20dab9e54be35e5c3d261..0000000000000000000000000000000000000000 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_process_view_js.js +++ /dev/null @@ -1,402 +0,0 @@ -/*global window, rJS, RSVP, URI, location, $, - loopEventListener, btoa */ -/*jslint nomen: true, indent: 2, maxerr: 3*/ -(function (window, rJS, $, RSVP) { - "use strict"; - - var gadget_klass = rJS(window), - templater = gadget_klass.__template_element, - process_list_widget = Handlebars.compile( - templater.getElementById("monitor-process-widget-template").innerHTML - ), - infobox_widget_template = Handlebars.compile( - templater.getElementById("infobox-widget-template").innerHTML - ), - hashCode = new Rusha().digestFromString; - - gadget_klass - .setState({ - opml: "", - opml_outline: "", - breadcrumb_gadget: "" - }) - .ready(function (gadget) { - return gadget.getElement() - .push(function (element) { - gadget.property_dict = { - render_deferred: RSVP.defer(), - process_state: "monitor_process_resource.status", - monitor_process_state: "monitor_resource.status", - element: element - }; - }); - }) - .ready(function (gadget) { - return gadget.getDeclaredGadget("jio_gadget") - .push(function (jio_gadget) { - gadget.property_dict.jio_gadget = jio_gadget; - }); - }) - .ready(function (gadget) { - return gadget.getDeclaredGadget("breadcrumb_gadget") - .push(function (breadcrumb_gadget) { - return gadget.changeState({breadcrumb_gadget: breadcrumb_gadget}); - }); - }) - .declareMethod('render', function (options) { - var gadget = this; - - return gadget.updateHeader({ - title: "Monitoring processes view" - }) - .push(function () { - return gadget.jio_get(options.key); - }) - .push(function (outline) { - return gadget.changeState({opml_outline: outline}); - }) - .push(function () { - return gadget.jio_allDocs({ - select_list: ["basic_login", "url", "title"], - query: '(portal_type:"opml") AND (url:"' + - gadget.state.opml_outline.parent_url + '")' - }); - }) - .push(function (opml_doc) { - return gadget.changeState({opml: opml_doc.data.rows[0].value}); - }) - .push(function () { - return gadget.state.breadcrumb_gadget.render({ - icon: "", - url_list: [ - { - title: gadget.state.opml.title, - url: "#page=hosting_subscription_view&key=" + - gadget.state.opml.url - }, - { - title: gadget.state.opml_outline.title, - url: "#page=software_instance_view&key=" + - gadget.state.opml_outline.reference - }, - { - title: "Processes" - } - ] - }); - }) - .push(function () { - var key, - promise_list = []; - gadget.property_dict.jio_gadget.createJio({ - type: "webhttp", - url: (gadget.state.opml_outline.url - .replace("jio_private", "private") + - 'documents/').replace("jio_private", "private"), - basic_login: gadget.state.opml.basic_login - }); - return gadget.property_dict.jio_gadget - .get(gadget.property_dict.process_state); - }) - .push(undefined, function(error) { - console.error(error); - $.notify( - "Error: Failed to download processes data file!", - { - position: "top right", - autoHideDelay: 7000, - className: "error" - } - ); - return undefined; - }) - .push(function (process_list) { - var row_list = [], - column_list = [], - process_content, - i; - column_list = [ - {title: "Process"}, - {title: "pid"}, - {title: "user"}, - {title: "create date"}, - {title: "CPU %"}, - {title: "threads"}, - {title: "Memory (Mo)"}, - {title: "Memory %"}]; - if(process_list) { - for (i = 0; i < process_list.length; i += 1) { - row_list.push({ - message: (process_list[i].command || []).join(' '), - cell_list: [ - { - value: process_list[i].name || '-', - href: '', - "class": '' - }, - { - value: process_list[i].pid, - href: '', - "class": '' - }, - { - value: process_list[i].user || '-', - href: '', - "class": '' - }, - { - value: process_list[i].date || '-', - href: '', - "class": '' - }, - { - value: process_list[i].cpu_percent, - href: '', - "class": '' - }, - { - value: process_list[i].cpu_num_threads, - href: '', - "class": '' - }, - { - value: process_list[i].memory_rss, - href: '', - "class": '' - }, - { - value: process_list[i].memory_percent, - href: '', - "class": '' - } - ] - }); - } - } - process_content = process_list_widget({ - column_list: column_list, - row_list: row_list - }); - gadget.element.querySelector(".process-all") - .innerHTML = process_content; - }) - .push(function () { - return gadget.property_dict.jio_gadget.get(gadget.property_dict.monitor_process_state); - }) - .push(undefined, function(error) { - console.log(error); - $.notify( - "Error: Failed to get resource comsumption data!", - { - position:"top right", - autoHideDelay: 5000, - className: "error" - } - ); - return { - cpu_percent: 0, - cpu_num_threads: 0, - cpu_time: 0, - memory_rss: 0, - memory_percent: 0, - disk_used: 0 - }; - }) - .push(function (monitor_state) { - var monitor_resource_list = [], - resource_state_content; - if (monitor_state) { - monitor_resource_list = [ - { - title: "CPU Used", - icon_name: "bolt", - value: monitor_state.cpu_percent + " %" - }, - { - title: "CPU Used Time", - icon_name: "clock-o", - value: monitor_state.cpu_time + " min" - }, - { - title: "CPU Num Threads", - icon_name: "dashboard", - value: monitor_state.cpu_num_threads - }, - { - title: "Used Memory", - icon_name: "ticket", - value: monitor_state.memory_rss + " Mo" - }, - { - title: "Memory Used", - icon_name: "pie-chart", - value: monitor_state.memory_percent + " %" - }, - { - title: "Disk Used", - icon_name: "hdd-o", - value: monitor_state.disk_used + " Mo" - } - ]; - } - resource_state_content = infobox_widget_template({ - resource_list: monitor_resource_list - }); - gadget.element.querySelector(".infobox-container") - .innerHTML = resource_state_content; - return gadget.property_dict.render_deferred.resolve(); - }); - }) - .declareAcquiredMethod("getSetting", "getSetting") - .declareAcquiredMethod("updateHeader", "updateHeader") - .declareAcquiredMethod('jio_allDocs', 'jio_allDocs') - .declareAcquiredMethod('jio_get', 'jio_get') - - ///////////////////////////////////////////////////////////////// - // declared service - ///////////////////////////////////////////////////////////////// - .declareService(function () { - var gadget = this; - - function updateProcessTimer() { - if (gadget.property_dict.loading && gadget.property_dict.timer) { - clearInterval(gadget.property_dict.timer); - } - - gadget.property_dict.timer = setInterval(function(){ - var hash = window.location.toString().split('#')[1]; - if (hash.indexOf('page=process_view') < 0) { - clearInterval(gadget.property_dict.timer); - return; - } - return gadget.property_dict.jio_gadget.get(gadget.property_dict.process_state) - .push(function (process_list) { - var row_list = [], - column_list = [], - process_content, - i; - column_list = [ - {title: "Process"}, - {title: "pid"}, - {title: "user"}, - {title: "create date"}, - {title: "CPU %"}, - {title: "threads"}, - {title: "Memory (Mo)"}, - {title: "Memory %"}]; - if(process_list) { - for (i = 0; i < process_list.length; i += 1) { - row_list.push({ - message: (process_list[i].command || []).join(' '), - cell_list: [ - { - value: process_list[i].name || '-', - href: '', - "class": '' - }, - { - value: process_list[i].pid, - href: '', - "class": '' - }, - { - value: process_list[i].user || '-', - href: '', - "class": '' - }, - { - value: process_list[i].date || '-', - href: '', - "class": '' - }, - { - value: process_list[i].cpu_percent, - href: '', - "class": '' - }, - { - value: process_list[i].cpu_num_threads, - href: '', - "class": '' - }, - { - value: process_list[i].memory_rss, - href: '', - "class": '' - }, - { - value: process_list[i].memory_percent, - href: '', - "class": '' - } - ] - }); - } - } - process_content = process_list_widget({ - column_list: column_list, - row_list: row_list - }); - gadget.element.querySelector(".process-all") - .innerHTML = process_content; - return ''; - }) - .push(function () { - return gadget.property_dict.jio_gadget.get(gadget.property_dict.monitor_process_state); - }) - .push(function (monitor_state) { - var monitor_resource_list = [], - resource_state_content; - if (monitor_state) { - monitor_resource_list = [ - { - title: "CPU Used", - icon_name: "bolt", - value: monitor_state.cpu_percent + " %" - }, - { - title: "CPU Used Time", - icon_name: "clock-o", - value: monitor_state.cpu_time + " min" - }, - { - title: "CPU Num Threads", - icon_name: "dashboard", - value: monitor_state.cpu_num_threads - }, - { - title: "Used Memory", - icon_name: "ticket", - value: monitor_state.memory_rss + " Mo" - }, - { - title: "Memory Used", - icon_name: "pie-chart", - value: monitor_state.memory_percent + " %" - }, - { - title: "Disk Used", - icon_name: "hdd-o", - value: monitor_state.disk_used + " Mo" - } - ]; - } - resource_state_content = infobox_widget_template({ - resource_list: monitor_resource_list - }); - gadget.element.querySelector(".infobox-container") - .innerHTML = resource_state_content; - }); - }, - 65000); - } - return new RSVP.Queue() - .push(function () { - return gadget.property_dict.render_deferred.promise; - }) - .push(function () { - return updateProcessTimer(); - }); - }); - -}(window, rJS, $, RSVP)); \ No newline at end of file diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_promise_interface_html.html b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_promise_interface_html.html deleted file mode 100644 index de75b484a4e43e583c1f8347c01d0ecc688faa31..0000000000000000000000000000000000000000 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_promise_interface_html.html +++ /dev/null @@ -1,221 +0,0 @@ -<!doctype html> -<html> - <head> - <meta charset="utf-8"> - <meta name="viewport" content="width=device-width, initial-scale=1"> - - <title>Monitoring Promise Status Page</title> - - <link href="gadget_monitoring_custom.css" rel="stylesheet" type="text/css"/> - - <script src="rsvp.js"></script> - <script src="renderjs.js"></script> - - <script src="gadget_monitoring_promise_interface.js"></script> - - <script id="promise-widget-template" type="text/x-handlebars-template"> - {{#with element}} - {{#if warning}} - <p class="ui-text-error"><i class="fa fa-info-circle" aria-hidden="true"></i> Status was changed to WARNING as last sync of this instance failed.</p> - {{/if}} - <table data-role="table" data-mode="columntoggle" class="table-stroke"> - <tr> - <th><i class="fa fa-tachometer"></i> Promise Status</th> - <td><span class="label label-{{status}}">{{status}}</span></td> - </tr> - <tr> - <th><i class="fa fa-calendar"></i> Status Since</th> - <td title="The date of this status.">{{status_date}}</td> - </tr> - <tr> - <th><i class="fa fa-clock-o"></i> Report Date</th> - <td title="The date when the promise result was collected.">{{start-date}}</td> - </tr> - <tr> - <th><i class="fa fa-file-o" aria-hidden="true"></i> Promise name</th> - <td>{{title}}</td> - </tr> - </table> - <br> - <h2>Promise Output message</h2> - <div style="border: 1px solid rgba(0,0,0,0.1); margin-top: 10px;"> - <div class="ui-body"> - {{#if message}} - <p class="ui-text ui-text-pre"><strong>{{status}}</strong>: {{message}}</p> - {{else}} - <p><strong>No output message!</strong></p> - {{/if}} - </div> - </div> - <br/> - {{/with}} - </script> - - <script id="pinstance-widget-template" type="text/x-handlebars-template"> - <h2><i class="fa fa-cubes"></i><strong> Software Instance State</strong></h2> - <table data-role="table" data-mode="columntoggle" class="table-stroke"> - <tr> - <th><i class="fa fa-tachometer"></i> Full Instance Status</th> - <td><span class="label label-{{status}}">{{status}}</span></td> - </tr> - <tr title="Hosting Subscription"> - <th><i class="fa fa-puzzle-piece"></i> H. Subscription</th> - <td title="Hosting Subscription title"><a class="inline-link" href="{{hosting_url}}">{{root_title}}</a></td> - </tr> - <tr> - <th><i class="fa fa-cube"></i> Instance Name</th> - <td title="Software Instance title"><a class="inline-link" href="{{instance_url}}">{{title}}</a></td> - </tr> - <tr> - <th><i class="fa fa-clock-o"></i> Report Date</th> - <td title="The date when the instance status was collected.">{{date}}</td> - </tr> - <tr> - <th><i class="fa fa-line-chart" aria-hidden="true"></i> Promises Errors</th> - <td title="Percentage of promises errors in Software Instance">{{errors}}</td> - </tr> - <tr> - <th><i class="fa fa-line-chart" aria-hidden="true"></i> Promises Success</th> - <td title="Percentage of promises success in Software Instance">{{success}}</td> - </tr> - </table> - {{#with instance}} - <br> - <h2><i class="fa fa-cubes"></i><strong> Software Instance Info</strong></h2> - <table data-role="table" data-mode="columntoggle" class="table-stroke"> - <tr> - <th>Computer Reference</th> - <td>{{computer}}</td> - </tr> - <tr> - <th>Computer Partition</th> - <td>{{partition}}</td> - </tr> - <tr> - <th>IPv4</th> - <td>{{ipv4}}</td> - </tr> - <tr> - <th>IPv6</th> - <td>{{ipv6}}</td> - </tr> - <tr> - <th>Software Type</th> - <td>{{software-type}}</td> - </tr> - <tr> - <th>Software Release</th> - <td><a class="inline-link" href="{{software-release}}" title="{{software-release}}" target='_blank'>Click to open <i class="fa fa-external-link"></i></a></td> - </tr> - <tr> - <th><i class="fa fa-folder-open-o"></i> Public Logs</th> - <td><a class="inline-link" target='_blank' href="{{../public_url}}" title="Public Logs">Click to open <i class="fa fa-external-link"></i></a></td> - </tr> - <tr> - <th><i class="fa fa-folder-open-o"></i> Private Logs</th> - <td><a class="inline-link" target='_blank' href="{{../private_url}}" title="Private Logs">Click to open <i class="fa fa-external-link"></i></a></td> - </tr> - </table> - {{/with}} - </script> - - <script id="plinks-widget-template" type="text/x-handlebars-template"> - <h2><i class="fa fa-external-link"></i> <strong>Web Directories Access</strong></h2> - <div class="ui-field-contain"> - <fieldset data-role="controlgroup" data-type="horizontal"> - {{#if public_url}} - <a class="ui-btn ui-corner-all ui-btn-inline ui-mini" target='_blank' href="{{public_url}}" title="Public Directory"><i class="fa fa-folder-open-o"></i> Public Folder</a> - {{/if}} - {{#if private_url}} - <a class="ui-btn ui-corner-all ui-btn-inline ui-mini" target='_blank' href="{{private_url}}" title="Private Directory"><i class="fa fa-lock"></i> Private Folder</a> - {{/if}} - </fieldset> - </div> - </script> - - <script id="phistory-widget-template" type="text/x-handlebars-template"> - <h2><i class="fa fa-history"></i> <strong>Promise Status History</strong></h2> - <div class="loadbox"> - <div class="signal ui-content-hidden"></div> - <div class="loadwait"> - <a>Load History</a> - </div> - </div> - </script> - - <script id="load-history-template" type="text/x-handlebars-template"> - <div class="signal ui-content-hidden"></div> - {{#if history_list}} - <div class="load-content" style="max-height: 300px;"> - <table data-role="table" data-mode="columntoggle" class="table-stroke"> - {{#each history_list}} - <tr title="{{message}}"> - <td style="text-align: center;"><i class="fa fa-circle status-text-{{status}}"></i></td> - <td style="text-align: center;">{{start-date}}</td> - <td class="text-overview">{{message}}</td> - </tr> - {{/each}} - </table> - <div> - {{else}} - <div class="loadwait"> - <a>No History Found!</a> - </div> - {{/if}} - </script> - - </head> - - <body> - <div data-gadget-url="gadget_monitoring_jio.html" data-gadget-scope="jio_gadget" data-gadget-sandbox="public"></div> - <div class="ui-panel-overview"> - <div class="overview-details"> - <div class="overview-header"> - <div class='content-title ui-instance-title'> - <div class="overview-title"> - <div data-gadget-url="gadget_monitoring_breadcrumb.html" data-gadget-scope="breadcrumb_gadget" data-gadget-sandbox="public"></div> - </div> - <div class="commands"> - - </div> - </div> - </div> - <div class="content-details"> - <div class="ui-grid-a ui-responsive"> - <div class="ui-block-a"> - <h2><i class="fa fa-check" aria-hidden="true"></i> <strong>Promise Result View</strong></h2> - </div> - <div class="ui-block-b"> - <div class="promise-instance"> - </div> - <div class="promise-links"> - </div> - </div> - </div> - </div> - </div> - </div> - <!--<div class="ui-promise-content"> - <div class="ui-promise-body"> - <div class="ui-promise-title"> - <h2></h2> - </div> - <div id="promise-overview" class="custom-grid-wrap"> - <div class="custom-grid ui-corner-all ui-shadow ui-body-inherit"> - <div class="ui-grid-a ui-responsive" style="padding: 15px;"> - <div class="ui-block-a"> - <h2><i class="fa fa-check" aria-hidden="true"></i> <strong>Promise Result View</strong></h2> - </div> - <div class="ui-block-b"> - <div class="promise-instance"> - </div> - <div class="promise-links"> - </div> - </div> - </div> - </div> - </div> - </div> - </div>--> - </body> -</html> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_promise_interface_html.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_promise_interface_html.xml deleted file mode 100644 index 880ca954b4c180650aac7223a294b5c223d3c3e2..0000000000000000000000000000000000000000 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_promise_interface_html.xml +++ /dev/null @@ -1,333 +0,0 @@ -<?xml version="1.0"?> -<ZopeData> - <record id="1" aka="AAAAAAAAAAE="> - <pickle> - <global name="Web Page" module="erp5.portal_type"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>_Access_contents_information_Permission</string> </key> - <value> - <tuple> - <string>Anonymous</string> - <string>Assignee</string> - <string>Assignor</string> - <string>Associate</string> - <string>Auditor</string> - <string>Manager</string> - <string>Owner</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Add_portal_content_Permission</string> </key> - <value> - <tuple> - <string>Assignor</string> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Change_local_roles_Permission</string> </key> - <value> - <tuple> - <string>Assignor</string> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Modify_portal_content_Permission</string> </key> - <value> - <tuple> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_View_Permission</string> </key> - <value> - <tuple> - <string>Anonymous</string> - <string>Assignee</string> - <string>Assignor</string> - <string>Associate</string> - <string>Auditor</string> - <string>Manager</string> - <string>Owner</string> - </tuple> - </value> - </item> - <item> - <key> <string>categories</string> </key> - <value> - <tuple> - <string>classification/collaborative/public</string> - </tuple> - </value> - </item> - <item> - <key> <string>content_md5</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>content_type</string> </key> - <value> <string>text/html</string> </value> - </item> - <item> - <key> <string>default_reference</string> </key> - <value> <string>gadget_monitoring_promise_interface.html</string> </value> - </item> - <item> - <key> <string>description</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>gadget_monitoring_promise_interface_html</string> </value> - </item> - <item> - <key> <string>language</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>portal_type</string> </key> - <value> <string>Web Page</string> </value> - </item> - <item> - <key> <string>short_title</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>title</string> </key> - <value> <string>Monitoring Promise Interface</string> </value> - </item> - <item> - <key> <string>version</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>workflow_history</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> - </value> - </item> - </dictionary> - </pickle> - </record> - <record id="2" aka="AAAAAAAAAAI="> - <pickle> - <global name="PersistentMapping" module="Persistence.mapping"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>data</string> </key> - <value> - <dictionary> - <item> - <key> <string>document_publication_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> - </value> - </item> - <item> - <key> <string>edit_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> - </value> - </item> - <item> - <key> <string>processing_status_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent> - </value> - </item> - </dictionary> - </value> - </item> - </dictionary> - </pickle> - </record> - <record id="3" aka="AAAAAAAAAAM="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>publish</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>zope</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1451404814.61</float> - <string>UTC</string> - </tuple> - </state> - </object> - </value> - </item> - <item> - <key> <string>validation_state</string> </key> - <value> <string>published</string> </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> - <record id="4" aka="AAAAAAAAAAQ="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>edit</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>zope</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>serial</string> </key> - <value> <string>961.21883.33309.38348</string> </value> - </item> - <item> - <key> <string>state</string> </key> - <value> <string>current</string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1504086738.54</float> - <string>UTC</string> - </tuple> - </state> - </object> - </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> - <record id="5" aka="AAAAAAAAAAU="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>detect_converted_file</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>zope</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>external_processing_state</string> </key> - <value> <string>converted</string> </value> - </item> - <item> - <key> <string>serial</string> </key> - <value> <string>0.0.0.0</string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1451404394.52</float> - <string>UTC</string> - </tuple> - </state> - </object> - </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_promise_interface_js.js b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_promise_interface_js.js deleted file mode 100644 index 0c773aa56c08655b204a5408791a5ab850077052..0000000000000000000000000000000000000000 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_promise_interface_js.js +++ /dev/null @@ -1,449 +0,0 @@ -/*global window, rJS, RSVP, Handlebars, $ - loopEventListener, btoa */ -/*jslint nomen: true, indent: 2, maxerr: 3*/ -(function (window, rJS, Handlebars, RSVP, $) { - "use strict"; - - var gadget_klass = rJS(window), - templater = gadget_klass.__template_element, - promise_widget_template = Handlebars.compile( - templater.getElementById("promise-widget-template").innerHTML - ), - instance_widget_template = Handlebars.compile( - templater.getElementById("pinstance-widget-template").innerHTML - ), - links_widget_template = Handlebars.compile( - templater.getElementById("plinks-widget-template").innerHTML - ), - history_widget_template = Handlebars.compile( - templater.getElementById("phistory-widget-template").innerHTML - ), - load_history_template = Handlebars.compile( - templater.getElementById("load-history-template").innerHTML - ); - - function formatDate(d){ - function addZero(n){ - return n < 10 ? '0' + n : '' + n; - } - - return d.getFullYear() + "-" + addZero(d.getMonth()+1) - + "-" + addZero(d.getDate()) + " " + addZero(d.getHours()) - + ":" + addZero(d.getMinutes()) + ":" + addZero(d.getSeconds()); - } - - gadget_klass - .setState({ - jio_gadget: "", - promise: "", - opml_outline: "", - opml: "", - instance: "", - breadcrumb_gadget: "" - }) - .ready(function (gadget) { - gadget.property_dict = { - render_deferred: RSVP.defer() - }; - }) - .ready(function (gadget) { - return gadget.getDeclaredGadget("jio_gadget") - .push(function (jio_gadget) { - return gadget.changeState({"jio_gadget": jio_gadget}); - }); - }) - .ready(function (gadget) { - return gadget.getDeclaredGadget("breadcrumb_gadget") - .push(function (breadcrumb_gadget) { - return gadget.changeState({breadcrumb_gadget: breadcrumb_gadget}); - }); - }) - /*.ready(function (gadget) { - return gadget.getDeclaredGadget("chart0") - .push(function (chart0) { - gadget.property_dict.chart0 = chart0; - }); - })*/ - /*.ready(function (gadget) { - return gadget.getDeclaredGadget("chart1") - .push(function (chart1) { - gadget.property_dict.chart1 = chart1; - }); - })*/ - .declareMethod('render', function (options) { - var gadget = this, - global_state, - url_options = $.extend(true, {}, options); - url_options.t = Date.now() / 1000 | 0; - return gadget.getUrlFor(url_options) - .push(function (refresh_url) { - //var back_url = '#page=main&t=' + (Date.now() / 1000 | 0); - return RSVP.all([ - gadget.updateHeader({ - title: 'Monitoring Promise View', - //back_url: back_url, - //panel_action: false, - refresh_url: refresh_url - }) - ]); - }) - .push(function () { - return gadget.jio_get(options.key); - }) - .push(function (promise_document) { - return gadget.changeState({promise: promise_document}); - }) - .push(function () { - // Get opml_document - return gadget.jio_allDocs({ - select_list: [ - "parent_url", - "parent_id", - "title", - "opml_title", - "portal_type", - "_links", - "_embedded", - "state", - "status", - "reference", - "date" - ], - query: '((portal_type:"opml-outline") AND (reference:"' + - gadget.state.promise.parent_id + '")) OR' + - '((portal_type:"global") AND (parent_id:"' + - gadget.state.promise.parent_id + '"))' - }, function (error) { - console.log(error); - return {}; - }); - }) - .push(function (result_list) { - var promise_list = [], - i; - for (i = 0; i < result_list.data.total_rows; i += 1) { - if (result_list.data.rows[i].value.portal_type === "opml-outline") { - promise_list.push(gadget.changeState({ - opml_outline: result_list.data.rows[i].value - })); - } else { - promise_list.push(gadget.changeState({ - instance: result_list.data.rows[i].value - })); - } - } - return RSVP.all(promise_list); - }) - .push(function () { - return gadget.jio_allDocs({ - select_list: ["basic_login", "url", "title"], - query: '(portal_type:"opml") AND (url:"' + - gadget.state.opml_outline.parent_url + '")' - }); - }) - .push(function (opml_doc) { - return gadget.changeState({opml: opml_doc.data.rows[0].value}); - }) - .push(function () { - return gadget.state.breadcrumb_gadget.render({ - icon: "check-square", - url_list: [ - { - title: gadget.state.opml.title, - url: "#page=hosting_subscription_view&key=" + - gadget.state.opml.url - }, - { - title: gadget.state.instance.title, - url: "#page=software_instance_view&key=" + - gadget.state.instance.reference, - }, - { - title: gadget.state.promise.source, - } - ] - }); - }) - .push(function () { - var content, - element, - promise_list = [], - instance_content, - links_content, - amount = 0, - history_content, - pass_url = ''; - - // fix URLs - gadget.state.instance._links.private_url.href = gadget.state.instance. - _links.private_url.href.replace("jio_private", "private"); - gadget.state.instance._links.public_url.href = gadget.state.instance. - _links.public_url.href.replace("jio_public", "public"); - pass_url = "https://" + atob(gadget.state.opml.basic_login) + - "@" + gadget.state.instance._links.private_url.href.split("//")[1]; - - element = { - status: gadget.state.promise.category, - status_date: formatDate(new Date(gadget.state.promise.pubDate)), - title: gadget.state.promise.source, - "start-date": formatDate(new Date(gadget.state.promise.lastBuildDate)), - message: gadget.state.promise.comments, - warning: (gadget.state.promise.category === "WARNING") ? true : false - }; - gadget.property_dict.promise_dict = element; - - element.state = (element.status.toLowerCase() === 'error') ? - 'red' : (element.status.toLowerCase() === 'warning') ? 'warning' : 'ok'; - if (element['change-time']) { - element.status_date = formatDate(new Date(element['change-time']*1000)); - } - content = promise_widget_template({ - element: element - }); - gadget.element.querySelector(".content-details .ui-block-a") - .innerHTML += content; - - amount = gadget.state.instance.state.warning + - gadget.state.instance.state.error + - gadget.state.instance.state.success; - - instance_content = instance_widget_template({ - title: gadget.state.instance.title, - root_title: gadget.state.opml_outline.opml_title, - status: gadget.state.instance.status, - date: gadget.state.instance.date, - errors: gadget.state.instance.state.error + "/" + amount, - warning: gadget.state.instance.state.warning + "/" + amount, - success: gadget.state.instance.state.success + "/" + amount, - instance: gadget.state.instance._embedded.instance, - instance_url: "#page=software_instance_view&key=" + - gadget.state.instance.reference, - hosting_url: "#page=hosting_subscription_view&key=" + - gadget.state.opml.url, - public_url: gadget.state.instance._links.public_url.href, - private_url: pass_url - }); - links_content = links_widget_template({ - public_url: gadget.state.instance._links.public_url.href, - private_url: pass_url - }); - gadget.element.querySelector(".content-details .ui-block-b .promise-instance") - .innerHTML += instance_content; - /*gadget.element.querySelector(".content-details .ui-block-b .promise-links") - .innerHTML += links_content;*/ - history_content = history_widget_template({history_list: []}); - gadget.element.querySelector(".content-details .ui-block-a") - .innerHTML += history_content; - }) - .push(function () { - return gadget.state.jio_gadget.createJio({ - type: "webhttp", - url: gadget.state.promise.source_url.replace("jio_public", "public") - }); - }) - .push(function () { - return gadget.property_dict.render_deferred.resolve(); - }); - /* - .push(function () { - return gadget.property_dict.login_gadget.loginRedirect( - global_state._links.private_url.href, - options, - global_state.title, - global_state['hosting-title']); - }) - .push(function (cred) { - var jio_options, - jio_key = "monitor_state.data", - data_url = global_state._links.private_url.href + 'data/'; - - jio_options = { - type: "query", - sub_storage: { - type: "drivetojiomapping", - sub_storage: { - type: "dav", - url: data_url, - basic_login: cred.hash - } - } - }; - gadget.property_dict.jio_gadget.createJio(jio_options, false); - return gadget.property_dict.jio_gadget.get(jio_key); - }) - .push(function (monitor_state) { - var data = { - labels: [], - datasets: [ - { - label: "SUCCESS", - fillColor: "rgba(21, 246, 21, 0)", - strokeColor: "rgba(21, 246, 21,1)", - pointColor: "rgba(21, 246, 21,1)", - pointStrokeColor: "#fff", - pointHighlightFill: "#fff", - pointHighlightStroke: "rgba(21, 246, 21,1)", - data: [] - }, - { - label: "ERROR", - fillColor: "rgba(255, 14, 44, 0)", - strokeColor: "rgba(255, 14, 44, 1)", - pointColor: "rgba(255, 14, 44, 1)", - pointStrokeColor: "#fff", - pointHighlightFill: "#fff", - pointHighlightStroke: "rgba(255, 14, 44, 1)", - data: [] - }, - { - label: "WARNING", - fillColor: "rgba(239, 196, 56,0)", - strokeColor: "rgba(239, 196, 56,1)", - pointColor: "rgba(239, 196, 56,1)", - pointStrokeColor: "#fff", - pointHighlightFill: "#fff", - pointHighlightStroke: "rgba(239, 196, 56,1)", - data: [] - } - ] - }, - i, - tmp, - start = 0; - - if (monitor_state.hasOwnProperty('data')) { - if (monitor_state.data.length > 20) { - start = monitor_state.data.length - 20; - } - for (i = start; i < monitor_state.data.length; i += 1) { - tmp = monitor_state.data[i].split(','); - data.labels.push(tmp[0]); - data.datasets[0].data.push(tmp[1]); - data.datasets[1].data.push(tmp[2]); - data.datasets[2].data.push(tmp[3]); - } - } - return gadget.property_dict.chart1.render({ - type: 'line', - config: { - bezierCurve: false, - responsive: true - }, - data: data - }); - }) - .push(function () { - var data = { - labels: [global_state.date], - datasets: [ - { - label: "SUCCESS", - fillColor: "rgba(21, 246, 21, 0.7)", - strokeColor: "rgba(21, 246, 21,1)", - pointColor: "rgba(21, 246, 21,1)", - pointStrokeColor: "#fff", - pointHighlightFill: "#fff", - pointHighlightStroke: "rgba(21, 246, 21,1)", - data: [global_state.state.success], - name: "success" - }, - { - label: "ERROR", - fillColor: "rgba(255, 14, 44, 0.7)", - strokeColor: "rgba(255, 14, 44, 1)", - pointColor: "rgba(255, 14, 44, 1)", - pointStrokeColor: "#fff", - pointHighlightFill: "#fff", - pointHighlightStroke: "rgba(255, 14, 44, 1)", - data: [global_state.state.error], - name: "error" - }, - { - label: "WARNING", - fillColor: "rgba(239, 196, 56,0.7)", - strokeColor: "rgba(239, 196, 56,1)", - pointColor: "rgba(239, 196, 56,1)", - pointStrokeColor: "#fff", - pointHighlightFill: "#fff", - pointHighlightStroke: "rgba(239, 196, 56,1)", - data: [global_state.state.warning], - name: "warning" - } - ] - }; - return gadget.property_dict.chart0.render({ - type: 'bar', - config: { - bezierCurve: false, - responsive: true, - barDatasetSpacing: 20 - }, - data: data - }); - })*/ - }) - .declareAcquiredMethod("updateHeader", "updateHeader") - .declareAcquiredMethod('getUrlFor', 'getUrlFor') - .declareAcquiredMethod('jio_get', 'jio_get') - .declareAcquiredMethod('jio_allDocs', 'jio_allDocs') - //.declareAcquiredMethod('loginRedirect', 'loginRedirect') - .declareService(function () { - var gadget = this, - promise_list = []; - - promise_list.push(loopEventListener( - gadget.element.querySelector('.loadbox'), - 'click', - false, - function (evt) { - return new RSVP.Queue() - .push(function () { - var text = gadget.element.querySelector('.loadbox .loadwait a'); - $(".loadbox .signal").removeClass("ui-content-hidden"); - if (text) { - text.textContent = "Loading..."; - } - }) - .push(function () { - var history_content; - - return gadget.state.jio_gadget.get( - gadget.state.promise.source + ".history" - ) - .push(undefined, function (error) { - console.log(error); - return undefined; - }) - .push(function (status_history) { - var i, - start_index = 0, - history_size, - history_list = []; - - $(".loadbox .signal").addClass("ui-content-hidden"); - if (status_history && status_history.hasOwnProperty('data')) { - if (history_size > 600) { - start_index = history_size - 600; - } - history_size = status_history.data.length; - for (i = start_index; i < history_size; i += 1) { - history_list.push(status_history.data[i]); - } - history_list.reverse(); - } - history_content = load_history_template({ - history_list: history_list - }); - gadget.element.querySelector(".loadbox") - .innerHTML = history_content; - return $('.loadbox table').table().table("refresh"); - }); - }); - } - )); - - return RSVP.all(promise_list); - }); - - -}(window, rJS, Handlebars, RSVP, $)); \ No newline at end of file diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_promise_interface_js.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_promise_interface_js.xml deleted file mode 100644 index 17a0e21bda4f8e44eabfe67d92a7a42896accb0f..0000000000000000000000000000000000000000 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_promise_interface_js.xml +++ /dev/null @@ -1,333 +0,0 @@ -<?xml version="1.0"?> -<ZopeData> - <record id="1" aka="AAAAAAAAAAE="> - <pickle> - <global name="Web Script" module="erp5.portal_type"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>_Access_contents_information_Permission</string> </key> - <value> - <tuple> - <string>Anonymous</string> - <string>Assignee</string> - <string>Assignor</string> - <string>Associate</string> - <string>Auditor</string> - <string>Manager</string> - <string>Owner</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Add_portal_content_Permission</string> </key> - <value> - <tuple> - <string>Assignor</string> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Change_local_roles_Permission</string> </key> - <value> - <tuple> - <string>Assignor</string> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Modify_portal_content_Permission</string> </key> - <value> - <tuple> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_View_Permission</string> </key> - <value> - <tuple> - <string>Anonymous</string> - <string>Assignee</string> - <string>Assignor</string> - <string>Associate</string> - <string>Auditor</string> - <string>Manager</string> - <string>Owner</string> - </tuple> - </value> - </item> - <item> - <key> <string>categories</string> </key> - <value> - <tuple> - <string>classification/collaborative/public</string> - </tuple> - </value> - </item> - <item> - <key> <string>content_md5</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>content_type</string> </key> - <value> <string>text/javascript</string> </value> - </item> - <item> - <key> <string>default_reference</string> </key> - <value> <string>gadget_monitoring_promise_interface.js</string> </value> - </item> - <item> - <key> <string>description</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>gadget_monitoring_promise_interface_js</string> </value> - </item> - <item> - <key> <string>language</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>portal_type</string> </key> - <value> <string>Web Script</string> </value> - </item> - <item> - <key> <string>short_title</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>title</string> </key> - <value> <string>Monitoring Promise Interface Gadget JS</string> </value> - </item> - <item> - <key> <string>version</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>workflow_history</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> - </value> - </item> - </dictionary> - </pickle> - </record> - <record id="2" aka="AAAAAAAAAAI="> - <pickle> - <global name="PersistentMapping" module="Persistence.mapping"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>data</string> </key> - <value> - <dictionary> - <item> - <key> <string>document_publication_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> - </value> - </item> - <item> - <key> <string>edit_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> - </value> - </item> - <item> - <key> <string>processing_status_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent> - </value> - </item> - </dictionary> - </value> - </item> - </dictionary> - </pickle> - </record> - <record id="3" aka="AAAAAAAAAAM="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>publish</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>zope</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1451404822.04</float> - <string>UTC</string> - </tuple> - </state> - </object> - </value> - </item> - <item> - <key> <string>validation_state</string> </key> - <value> <string>published</string> </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> - <record id="4" aka="AAAAAAAAAAQ="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>edit</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>zope</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>serial</string> </key> - <value> <string>961.21935.10239.63812</string> </value> - </item> - <item> - <key> <string>state</string> </key> - <value> <string>current</string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1502465018.5</float> - <string>UTC</string> - </tuple> - </state> - </object> - </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> - <record id="5" aka="AAAAAAAAAAU="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>detect_converted_file</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>zope</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>external_processing_state</string> </key> - <value> <string>converted</string> </value> - </item> - <item> - <key> <string>serial</string> </key> - <value> <string>0.0.0.0</string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1451404453.83</float> - <string>UTC</string> - </tuple> - </state> - </object> - </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_resource_view_html.html b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_resource_view_html.html deleted file mode 100644 index f9fdf036b743fbd6a10b95d3260382793b57c61c..0000000000000000000000000000000000000000 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_resource_view_html.html +++ /dev/null @@ -1,65 +0,0 @@ -<!doctype html> -<html> - <head> - <meta charset="utf-8"> - <meta name="viewport" content="width=device-width, initial-scale=1"> - - <title>Monitoring Resource View Page</title> - - <link href="gadget_monitoring_custom.css" rel="stylesheet" type="text/css"/> - - <script src="notify.min.js"></script> - <script src="rsvp.js"></script> - <script src="renderjs.js"></script> - <script src="handlebars.js"></script> - - <script id="graph-label-widget-template" type="text/x-handlebars-template"> - <fieldset class="graph-state-labels" data-role="controlgroup"> - {{#each label_list}} - <input type="checkbox" name="{{id}}" id="{{id}}" checked=""> - <label for="{{id}}" style="color: {{color}};" class="{{graph}}" rel="{{index}}">{{name}}</label> - {{/each}} - </fieldset> - </script> - - <script src="gadget_monitoring_resource_view.js"></script> - </head> - - <body> - <div data-gadget-url="gadget_monitoring_jio.html" data-gadget-scope="jio_gadget" data-gadget-sandbox="public"></div> - <div class="ui-panel-overview ui-grid-container"> - <div class="overview-details"> - <div class="overview-header"> - <div class='content-title ui-instance-title'> - <div class="overview-title"> - <div data-gadget-url="gadget_monitoring_breadcrumb.html" data-gadget-scope="breadcrumb_gadget" data-gadget-sandbox="public"></div> - </div> - <div class="commands"> - </div> - </div> - </div> - </div> - <h2 class="header-notice"><i class="fa fa-info" aria-hidden="true"></i> Graph content will be reloaded automatically every minutes.</h2> - <!--<ul class="ui-grid-column ui-grid-column-5 graph_cpu"> - <li class="ui-grid-span-5 custom-grid-wrap graph-cell"> - <div data-gadget-url="gadget_erp5_graph.html" data-gadget-scope="graph_cpu" class="graph graph-h-medium" data-gadget-sandbox="public"></div> - </li> - <li class="ui-grid-span-1 custom-grid-wrap graph-cell"> - - </li> - </ul>--> - <div class="ui-grid-a ui-responsive"> - <div data-gadget-url="gadget_field_graph_dygraph.html" data-gadget-scope="graph_cpu" class="graph graph-h-medium" data-gadget-sandbox="public"></div> - </div> - <div class="ui-grid-a ui-responsive"> - <div data-gadget-url="gadget_field_graph_dygraph.html" data-gadget-scope="graph_memory_used" class="graph graph-h-medium" data-gadget-sandbox="public"></div> - </div> - <div class="ui-grid-b ui-responsive"> - <div data-gadget-url="gadget_field_graph_dygraph.html" data-gadget-scope="graph_io" class="graph graph-h-medium" data-gadget-sandbox="public"></div> - </div> - <div class='graph-footer'> - - </div> - </div> - </body> -</html> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_resource_view_html.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_resource_view_html.xml deleted file mode 100644 index 9ae1830a7cfc618f37a5e95596bad7706c3d10e0..0000000000000000000000000000000000000000 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_resource_view_html.xml +++ /dev/null @@ -1,333 +0,0 @@ -<?xml version="1.0"?> -<ZopeData> - <record id="1" aka="AAAAAAAAAAE="> - <pickle> - <global name="Web Page" module="erp5.portal_type"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>_Access_contents_information_Permission</string> </key> - <value> - <tuple> - <string>Anonymous</string> - <string>Assignee</string> - <string>Assignor</string> - <string>Associate</string> - <string>Auditor</string> - <string>Manager</string> - <string>Owner</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Add_portal_content_Permission</string> </key> - <value> - <tuple> - <string>Assignor</string> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Change_local_roles_Permission</string> </key> - <value> - <tuple> - <string>Assignor</string> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Modify_portal_content_Permission</string> </key> - <value> - <tuple> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_View_Permission</string> </key> - <value> - <tuple> - <string>Anonymous</string> - <string>Assignee</string> - <string>Assignor</string> - <string>Associate</string> - <string>Auditor</string> - <string>Manager</string> - <string>Owner</string> - </tuple> - </value> - </item> - <item> - <key> <string>categories</string> </key> - <value> - <tuple> - <string>classification/collaborative/public</string> - </tuple> - </value> - </item> - <item> - <key> <string>content_md5</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>content_type</string> </key> - <value> <string>text/html</string> </value> - </item> - <item> - <key> <string>default_reference</string> </key> - <value> <string>gadget_monitoring_resource_view.html</string> </value> - </item> - <item> - <key> <string>description</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>gadget_monitoring_resource_view_html</string> </value> - </item> - <item> - <key> <string>language</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>portal_type</string> </key> - <value> <string>Web Page</string> </value> - </item> - <item> - <key> <string>short_title</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>title</string> </key> - <value> <string>Gadget Monitoring Resource View</string> </value> - </item> - <item> - <key> <string>version</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>workflow_history</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> - </value> - </item> - </dictionary> - </pickle> - </record> - <record id="2" aka="AAAAAAAAAAI="> - <pickle> - <global name="PersistentMapping" module="Persistence.mapping"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>data</string> </key> - <value> - <dictionary> - <item> - <key> <string>document_publication_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> - </value> - </item> - <item> - <key> <string>edit_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> - </value> - </item> - <item> - <key> <string>processing_status_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent> - </value> - </item> - </dictionary> - </value> - </item> - </dictionary> - </pickle> - </record> - <record id="3" aka="AAAAAAAAAAM="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>publish</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>zope</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1454340235.34</float> - <string>UTC</string> - </tuple> - </state> - </object> - </value> - </item> - <item> - <key> <string>validation_state</string> </key> - <value> <string>published</string> </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> - <record id="4" aka="AAAAAAAAAAQ="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>edit</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>zope</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>serial</string> </key> - <value> <string>961.59537.30226.3259</string> </value> - </item> - <item> - <key> <string>state</string> </key> - <value> <string>current</string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1504704987.14</float> - <string>UTC</string> - </tuple> - </state> - </object> - </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> - <record id="5" aka="AAAAAAAAAAU="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>detect_converted_file</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>zope</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>external_processing_state</string> </key> - <value> <string>converted</string> </value> - </item> - <item> - <key> <string>serial</string> </key> - <value> <string>0.0.0.0</string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1454340130.62</float> - <string>UTC</string> - </tuple> - </state> - </object> - </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_resource_view_js.js b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_resource_view_js.js deleted file mode 100644 index 03a8d2d3dbcac4f6149e4c534291f276444338b1..0000000000000000000000000000000000000000 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_resource_view_js.js +++ /dev/null @@ -1,488 +0,0 @@ -/*global window, rJS, RSVP, Handlebars, $, console */ -/*jslint nomen: true, indent: 2, maxerr: 3*/ -(function (window, rJS, RSVP, Handlebars, $, console) { - "use strict"; - - var gadget_klass = rJS(window), - templater = gadget_klass.__template_element, - graph_labels_widget = Handlebars.compile( - templater.getElementById("graph-label-widget-template").innerHTML - ); - - gadget_klass - .setState({ - opml: "", - opml_outline: "", - breadcrumb_gadget: "" - }) - .ready(function (gadget) { - gadget.property_dict = {}; - return gadget.getElement() - .push(function (element) { - gadget.property_dict.element = element; - gadget.property_dict.render_deferred = RSVP.defer(); - gadget.property_dict.ressource_dict = { - memory_resource: "monitor_resource_memory.data", - cpu_resource: "monitor_resource_process.data", - io_resource: "monitor_resource_io.data" - }; - }); - }) - .ready(function (gadget) { - return gadget.getDeclaredGadget("breadcrumb_gadget") - .push(function (breadcrumb_gadget) { - return gadget.changeState({breadcrumb_gadget: breadcrumb_gadget}); - }); - }) - .ready(function (gadget) { - return gadget.getDeclaredGadget("graph_memory_used") - .push(function (graph_memory_used) { - gadget.property_dict.graph_mem_used = graph_memory_used; - }); - }) - .ready(function (gadget) { - return gadget.getDeclaredGadget("graph_cpu") - .push(function (graph_cpu) { - gadget.property_dict.graph_cpu = graph_cpu; - gadget.property_dict.graph_cpu_label_list = []; - }); - }) - .ready(function (gadget) { - return gadget.getDeclaredGadget("graph_io") - .push(function (graph_io) { - gadget.property_dict.graph_io = graph_io; - }); - }) - .ready(function (gadget) { - return gadget.getDeclaredGadget("jio_gadget") - .push(function (jio_gadget) { - gadget.property_dict.jio_gadget = jio_gadget; - }); - }) - .declareMethod("render", function (options) { - var gadget = this; - - gadget.property_dict.document_key = options.key; - return gadget.updateHeader({ - title: "Monitoring resources view" - }) - .push(function () { - return gadget.jio_get(options.key); - }) - .push(function (outline) { - return gadget.changeState({opml_outline: outline}); - }) - .push(function () { - return gadget.jio_allDocs({ - select_list: ["basic_login", "url", "title"], - query: '(portal_type:"opml") AND (url:"' + - gadget.state.opml_outline.parent_url + '")' - }); - }) - .push(function (opml_doc) { - return gadget.changeState({opml: opml_doc.data.rows[0].value}); - }) - .push(function () { - return gadget.state.breadcrumb_gadget.render({ - icon: "desktop", - url_list: [ - { - title: gadget.state.opml.title, - url: "#page=hosting_subscription_view&key=" + - gadget.state.opml.url - }, - { - title: gadget.state.opml_outline.title, - url: "#page=software_instance_view&key=" + - gadget.state.opml_outline.reference - }, - { - title: "Resource consumption" - } - ] - }); - }) - .push(function () { - gadget.property_dict.jio_gadget.createJio({ - type: "webhttp", - url: (gadget.state.opml_outline.url - .replace("jio_private", "private") + - 'documents/').replace("jio_private", "private"), - basic_login: gadget.state.opml.basic_login - }); - gadget.property_dict.mem_data = {data: []}; - gadget.property_dict.process_data = {data: []}; - gadget.property_dict.io_data = {data: []}; - return gadget.property_dict.render_deferred.resolve(); - }); - }) - - .declareAcquiredMethod("updateHeader", "updateHeader") - .declareAcquiredMethod('jio_allDocs', 'jio_allDocs') - .declareAcquiredMethod('jio_get', 'jio_get') - - ///////////////////////////////////////////////////////////////// - // declared service - ///////////////////////////////////////////////////////////////// - .declareService(function () { - var gadget = this, - date_window = []; - - /*function toggleSerieVisibility(evt) { - var checkbox = evt.target.nextSibling, - index = $(evt.target).attr('rel'); - if ($(checkbox).prop("checked")) { - $(checkbox).prop("checked", false).checkboxradio("refresh"); - } else { - $(checkbox).prop("checked", true).checkboxradio("refresh"); - } - return gadget.property_dict.graph_cpu.setVisibility(parseInt(index, 10), $(checkbox).prop("checked")) - .push(function () { - return evt; - }); - }*/ - - function loadGraphData(key) { - var resource_key = gadget.property_dict.ressource_dict[key]; - return gadget.property_dict.jio_gadget.get(resource_key) - .push(undefined, function (error) { - console.log(error); - $.notify( - "Error: Failed to download resource file '" + resource_key + - "' from URL: " + gadget.state.opml_outline.url, - { - position: "top right", - autoHideDelay: 7000, - className: "error" - } - ); - return { - data: [] - }; - }) - .push(function (jio_element) { - date_window = getDateWindow(gadget.property_dict.mem_data.data); - if (!jio_element.hasOwnProperty('data')) { - return {data: []}; - } - switch (key) { - case "memory_resource": - gadget.property_dict.mem_data = jio_element; - break; - case "cpu_resource": - gadget.property_dict.process_data = jio_element; - break; - case "io_resource": - gadget.property_dict.io_data = jio_element; - break; - } - return jio_element; - }); - } - - function updateIOData(date_window) { - var i, - element, - prev_element, - date_diff, - line_list = [], - data_list = [], - axis_dict = {}; - - function convertElement(element) { - var element_list = element.split(','); - return [ - element_list[0], - parseFloat(element_list[1].trim()), - parseFloat(element_list[2].trim()), - element_list[3].trim() - ]; - } - //"date, io rw counter, io cycles counter, disk used" - line_list = ["date", "io rw count (Kb/s)", "io cycles count (/1000)"]; //, "disk used"]; - axis_dict["0"] = { - "title": "IO resources usage", - "scale_type": "linear", - "value_type": "date", - "zoom_range": date_window - }; - for (i = 1; i < line_list.length; i += 1) { - line_list[i] = line_list[i].trim(); - data_list.push({ - value_dict: {"0": [], "1": []}, - type: "surface", - axis_mapping_id_dict: {"1": "1_" + i}, - title: line_list[i] - }); - axis_dict["1_" + i] = {"title": line_list[i], "position": "right"}; - } - if (gadget.property_dict.io_data.data.length > 2) { - prev_element = convertElement(gadget.property_dict.io_data.data[1]); - for (i = 2; i < gadget.property_dict.io_data.data.length; i += 1) { - element = convertElement(gadget.property_dict.io_data.data[i]); - date_diff = (new Date(element[0]).getTime() - new Date(prev_element[0]).getTime()) / 1000; - // XXX - repeating date everytime - data_list[0].value_dict["0"].push(element[0]); - data_list[0].value_dict["1"].push((element[1] - prev_element[1]) / (1024 * date_diff)); - // XXX - repeating date everytime - data_list[1].value_dict["0"].push(element[0]); - data_list[1].value_dict["1"].push((element[2] - prev_element[2]) / 1000); - // XXX - repeating date everytime - /*data_list[2].value_dict["0"].push(element[0]); - data_list[2].value_dict["1"].push(element[3]);*/ - prev_element = element; - } - } - return { - value:{ - data: data_list, - layout: { - axis_dict : axis_dict, - title: "IO resources usage" - } - } - }; - } - - function getDateWindow(data) { - var max_date, - begin_date, - end_date, - date_window = []; - if (data.length > 0) { - max_date = data[data.length - 1].split(',')[0]; - begin_date = new Date(max_date); - end_date = new Date(max_date); - begin_date.setHours(begin_date.getHours() -2); - date_window = [Date.parse(begin_date), Date.parse(end_date)]; - } - return date_window; - } - - function updateGraph () { - return new RSVP.Queue() - .push(function () { - var key, - promise_list = []; - for (key in gadget.property_dict.ressource_dict) { - promise_list.push(loadGraphData(key)); - } - return RSVP.all(promise_list); - }) - .push(function () { - var data = updateIOData(date_window); - return gadget.property_dict.graph_io.render(data); - }) - .push(function () { - var data_list = [], - axis_dict = {}, - line_list, - i, - j; - - axis_dict = { - "0": { - "title": "Memory resources usage (Mo)", - "scale_type": "linear", - "value_type": "date", - "zoom_range": date_window - }, - "1_2": { - "title": "Memory used percent", - "position": "right" - }, - "1_1": { - "title": "Memory used", - "position": "right" - } - }; - /*data_list.push({ - value_dict: {"0": [], "1": []}, - type: "surface", - axis_mapping_id_dict: {"1": "1_1"}, - title: "Memory used percent" - });*/ - data_list.push({ - value_dict: {"0": [], "1": []}, - type: "surface", - axis_mapping_id_dict: {"1": "1_2"}, - title: "Memory used" - }); - for (i = 1; i < gadget.property_dict.mem_data.data.length; i += 1) { - line_list = gadget.property_dict.mem_data.data[i].split(','); - data_list[0].value_dict["0"].push(line_list[0]); - data_list[0].value_dict["1"].push(line_list[2]); - } - return gadget.property_dict.graph_mem_used.render({ - value:{ - data: data_list, - layout: { - axis_dict : axis_dict, - title: "Memory resources usage" - } - } - }); - }) - .push(function () { - var data_list = [], - axis_dict = {}, - previous_time = 0, - line_list, - cpu_time_index = -1, - i, - j; - - function getCPUTime(current) { - var increment = 0; - if (previous_time === 0) { - previous_time = current; - return 0; - } - increment = current - previous_time; - previous_time = current; - return increment; - } - - //"date, total process, CPU percent, CPU time, CPU threads" - if (gadget.property_dict.process_data.data.length > 0) { - line_list = gadget.property_dict.process_data.data[0].split(','); - } else { - line_list = ["date", "total process", "CPU percent", - "CPU time", "CPU threads"]; - } - axis_dict["0"] = { - "title": "Process resources usage", - "scale_type": "linear", - "value_type": "date", - "zoom_range": date_window - }; - for (i = 1; i < line_list.length; i += 1) { - line_list[i] = line_list[i].trim(); - data_list.push({ - value_dict: {"0": [], "1": []}, - type: "line", - axis_mapping_id_dict: {"1": "1_" + i}, - title: line_list[i] - }); - if (line_list[i] === "CPU time") { - cpu_time_index = i; - } - axis_dict["1_" + i] = {"title": line_list[i], "position": "right"}; - } - for (i = 1; i < gadget.property_dict.process_data.data.length; i += 1) { - line_list = gadget.property_dict.process_data.data[i].split(','); - for (j = 1; j < line_list.length; j += 1) { - // XXX - repeating date everytime - data_list[j - 1].value_dict["0"].push(line_list[0]); - if (j === cpu_time_index) { - data_list[j - 1].value_dict["1"].push(getCPUTime(line_list[j])); - } else { - data_list[j - 1].value_dict["1"].push(line_list[j]); - } - } - } - return gadget.property_dict.graph_cpu.render({ - value:{ - data: data_list, - layout: { - axis_dict : axis_dict, - title: "Process resources usage" - } - } - }); - }); - } - - function updateGraphTimer() { - if (gadget.property_dict.timer) { - clearInterval(gadget.property_dict.timer); - } - gadget.property_dict.timer = setInterval(function(){ - var hash = window.location.toString().split('#')[1]; - console.log(hash + " KEY=" + gadget.property_dict.document_key); - if (hash.indexOf('page=resource_view') < 0 || - hash.indexOf(gadget.property_dict.document_key) < 0) { - clearInterval(gadget.property_dict.timer); - return; - } - updateGraph(); - }, - 65000); - } - - return new RSVP.Queue() - .push(function () { - return gadget.property_dict.render_deferred.promise; - }) - /**.push(function () { - return gadget.property_dict.graph_cpu.render( - gadget.property_dict.process_data.data.join('\n'), - { - xlabel: '<span class="graph-label"><i class="fa fa-line-chart"></i> Process resources usage</span>', - labelsDivStyles: { 'textAlign': 'right' }, - dateWindow: date_window, - }, - "customInteractionModel" - ); - }) - .push(function () { - var label_list = gadget.property_dict.graph_cpu_label_list, - element = 'graph_cpu'; - if (gadget.property_dict.graph_cpu_label_list.length > 0) { - label_list = label_list.slice(1); // remove date column - return gadget.property_dict.graph_cpu.getColors() - .push(function (color_list) { - var label_content, - name_list = [], - i; - for (i = 0; i < label_list.length; i += 1) { - name_list.push({ - name: label_list[i], - id: "label_" + label_list[i].trim().replace(/\s/g, '_'), - color: color_list[i], - graph: element, - index: i - }); - } - label_content = graph_labels_widget({ - label_list: name_list - }); - gadget.property_dict.element.querySelector(".ui-panel-overview ." + element + " .ui-grid-span-1") - .innerHTML = label_content; - return $(gadget.property_dict.element.querySelectorAll("[data-role=controlgroup]")) - .controlgroup().controlgroup("refresh"); - }); - } - }) - .push(function () { - var promise_list = [], - element_list = gadget.property_dict.element.querySelectorAll("label.graph_cpu"), - i; - for (i = 0; i < element_list.length; i += 1) { - promise_list.push( - loopEventListener( - element_list[i], - 'click', - false, - toggleSerieVisibility - ) - ); - if ($(element_list[i]).attr('for').toLowerCase() !== 'label_cpu_percent' && $(element_list[i]).attr('for').toLowerCase() !== 'label_total_process') { - promise_list.push(gadget.property_dict.graph_cpu.setVisibility( - parseInt($(element_list[i]).attr('rel'), 10), false) - ); - promise_list.push($(element_list[i]).click()); - } - } - RSVP.all(promise_list); - return updateGraphTimer(); - })**/ - .push(function () { - return updateGraph(); - }) - .push(function () { - return updateGraphTimer(); - }); - }); - -}(window, rJS, RSVP, Handlebars, $, console)); \ No newline at end of file diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_resource_view_js.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_resource_view_js.xml deleted file mode 100644 index d84c8307015466d23789255b3d5522a25b5f1d17..0000000000000000000000000000000000000000 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_resource_view_js.xml +++ /dev/null @@ -1,329 +0,0 @@ -<?xml version="1.0"?> -<ZopeData> - <record id="1" aka="AAAAAAAAAAE="> - <pickle> - <global name="Web Script" module="erp5.portal_type"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>_Access_contents_information_Permission</string> </key> - <value> - <tuple> - <string>Anonymous</string> - <string>Assignee</string> - <string>Assignor</string> - <string>Associate</string> - <string>Auditor</string> - <string>Manager</string> - <string>Owner</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Add_portal_content_Permission</string> </key> - <value> - <tuple> - <string>Assignor</string> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Change_local_roles_Permission</string> </key> - <value> - <tuple> - <string>Assignor</string> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Modify_portal_content_Permission</string> </key> - <value> - <tuple> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_View_Permission</string> </key> - <value> - <tuple> - <string>Anonymous</string> - <string>Assignee</string> - <string>Assignor</string> - <string>Associate</string> - <string>Auditor</string> - <string>Manager</string> - <string>Owner</string> - </tuple> - </value> - </item> - <item> - <key> <string>categories</string> </key> - <value> - <tuple> - <string>classification/collaborative/public</string> - </tuple> - </value> - </item> - <item> - <key> <string>content_md5</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>content_type</string> </key> - <value> <string>text/javascript</string> </value> - </item> - <item> - <key> <string>default_reference</string> </key> - <value> <string>gadget_monitoring_resource_view.js</string> </value> - </item> - <item> - <key> <string>description</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>gadget_monitoring_resource_view_js</string> </value> - </item> - <item> - <key> <string>language</string> </key> - <value> <string>en</string> </value> - </item> - <item> - <key> <string>portal_type</string> </key> - <value> <string>Web Script</string> </value> - </item> - <item> - <key> <string>short_title</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>title</string> </key> - <value> <string>Gadget Monitoring Resource View JS</string> </value> - </item> - <item> - <key> <string>version</string> </key> - <value> <string>001</string> </value> - </item> - <item> - <key> <string>workflow_history</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> - </value> - </item> - </dictionary> - </pickle> - </record> - <record id="2" aka="AAAAAAAAAAI="> - <pickle> - <global name="PersistentMapping" module="Persistence.mapping"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>data</string> </key> - <value> - <dictionary> - <item> - <key> <string>document_publication_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> - </value> - </item> - <item> - <key> <string>edit_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> - </value> - </item> - <item> - <key> <string>processing_status_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent> - </value> - </item> - </dictionary> - </value> - </item> - </dictionary> - </pickle> - </record> - <record id="3" aka="AAAAAAAAAAM="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>publish</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>zope</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1454340318.24</float> - <string>UTC</string> - </tuple> - </state> - </object> - </value> - </item> - <item> - <key> <string>validation_state</string> </key> - <value> <string>published</string> </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> - <record id="4" aka="AAAAAAAAAAQ="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>edit</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>zope</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>serial</string> </key> - <value> <string>961.61208.24795.20087</string> </value> - </item> - <item> - <key> <string>state</string> </key> - <value> <string>current</string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1504801600.39</float> - <string>UTC</string> - </tuple> - </state> - </object> - </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> - <record id="5" aka="AAAAAAAAAAU="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>detect_converted_file</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>zope</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>external_processing_state</string> </key> - <value> <string>converted</string> </value> - </item> - <item> - <key> <string>serial</string> </key> - <value> <string>0.0.0.0</string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1454340276.13</float> - <string>UTC</string> - </tuple> - </state> - </object> - </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_router_html.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_router_html.xml deleted file mode 100644 index b89e72e974f642a574d018b99a86197fb84f2cf5..0000000000000000000000000000000000000000 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_router_html.xml +++ /dev/null @@ -1,329 +0,0 @@ -<?xml version="1.0"?> -<ZopeData> - <record id="1" aka="AAAAAAAAAAE="> - <pickle> - <global name="Web Page" module="erp5.portal_type"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>_Access_contents_information_Permission</string> </key> - <value> - <tuple> - <string>Anonymous</string> - <string>Assignee</string> - <string>Assignor</string> - <string>Associate</string> - <string>Auditor</string> - <string>Manager</string> - <string>Owner</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Add_portal_content_Permission</string> </key> - <value> - <tuple> - <string>Assignor</string> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Change_local_roles_Permission</string> </key> - <value> - <tuple> - <string>Assignor</string> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Modify_portal_content_Permission</string> </key> - <value> - <tuple> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_View_Permission</string> </key> - <value> - <tuple> - <string>Anonymous</string> - <string>Assignee</string> - <string>Assignor</string> - <string>Associate</string> - <string>Auditor</string> - <string>Manager</string> - <string>Owner</string> - </tuple> - </value> - </item> - <item> - <key> <string>categories</string> </key> - <value> - <tuple> - <string>classification/collaborative/public</string> - </tuple> - </value> - </item> - <item> - <key> <string>content_md5</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>content_type</string> </key> - <value> <string>text/html</string> </value> - </item> - <item> - <key> <string>default_reference</string> </key> - <value> <string>gadget_monitoring_router.html</string> </value> - </item> - <item> - <key> <string>description</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>gadget_monitoring_router_html</string> </value> - </item> - <item> - <key> <string>language</string> </key> - <value> <string>en</string> </value> - </item> - <item> - <key> <string>portal_type</string> </key> - <value> <string>Web Page</string> </value> - </item> - <item> - <key> <string>short_title</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>title</string> </key> - <value> <string>Monitoring router Gadget</string> </value> - </item> - <item> - <key> <string>version</string> </key> - <value> <string>001</string> </value> - </item> - <item> - <key> <string>workflow_history</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> - </value> - </item> - </dictionary> - </pickle> - </record> - <record id="2" aka="AAAAAAAAAAI="> - <pickle> - <global name="PersistentMapping" module="Persistence.mapping"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>data</string> </key> - <value> - <dictionary> - <item> - <key> <string>document_publication_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> - </value> - </item> - <item> - <key> <string>edit_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> - </value> - </item> - <item> - <key> <string>processing_status_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent> - </value> - </item> - </dictionary> - </value> - </item> - </dictionary> - </pickle> - </record> - <record id="3" aka="AAAAAAAAAAM="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>publish</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>zope</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1451385288.5</float> - <string>UTC</string> - </tuple> - </state> - </object> - </value> - </item> - <item> - <key> <string>validation_state</string> </key> - <value> <string>published</string> </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> - <record id="4" aka="AAAAAAAAAAQ="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>edit</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>zope</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>serial</string> </key> - <value> <string>961.6384.703.48554</string> </value> - </item> - <item> - <key> <string>state</string> </key> - <value> <string>current</string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1502207781.7</float> - <string>UTC</string> - </tuple> - </state> - </object> - </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> - <record id="5" aka="AAAAAAAAAAU="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>detect_converted_file</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>zope</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>external_processing_state</string> </key> - <value> <string>converted</string> </value> - </item> - <item> - <key> <string>serial</string> </key> - <value> <string>0.0.0.0</string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1451384955.3</float> - <string>UTC</string> - </tuple> - </state> - </object> - </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_router_js.js b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_router_js.js deleted file mode 100644 index c0eed442337a153064dc0f3ef40f7dfb2992b5b6..0000000000000000000000000000000000000000 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_router_js.js +++ /dev/null @@ -1,118 +0,0 @@ -/*global window, rJS, loopEventListener, document, RSVP */ -/*jslint nomen: true, indent: 2, maxerr: 3*/ -(function (window, rJS, loopEventListener, document, RSVP) { - "use strict"; - - var gadget_klass = rJS(window), - MAIN_PAGE_PREFIX = "gadget_monitoring_", - DEFAULT_PAGE = "main", - REDIRECT_TIMEOUT = 5000; - - function listenHashChange(gadget) { - function extractHashAndDispatch(evt) { - var hash = (evt.newURL || window.location.toString()).split('#')[1], - subhashes, - subhash, - keyvalue, - index, - args = {}; - if (hash !== undefined) { - subhashes = hash.split('&'); - for (index in subhashes) { - if (subhashes.hasOwnProperty(index)) { - subhash = subhashes[index]; - if (subhash !== '') { - keyvalue = subhash.split('='); - if (keyvalue.length === 2) { - args[decodeURIComponent(keyvalue[0])] = decodeURIComponent(keyvalue[1]); - } - } - } - } - } - - return gadget.renderApplication({ - args: args - }); - - } - - var result = loopEventListener(window, 'hashchange', false, - extractHashAndDispatch), - event = document.createEvent("Event"); - event.initEvent('hashchange', true, true); - event.newURL = window.location.toString(); - window.dispatchEvent(event); - return result; - } - - gadget_klass - - .ready(function (gadget) { - gadget.props = { - start_deferred: RSVP.defer() - }; - }) - - .declareMethod("getCommandUrlFor", function (options) { - var prefix = '', - result, - key; - result = "#"; - for (key in options) { - if (options.hasOwnProperty(key) && options[key] !== undefined) { - // Don't keep empty values - result += prefix + encodeURIComponent(key) + "=" + encodeURIComponent(options[key]); - prefix = '&'; - } - } - return result; - }) - - .declareMethod('redirect', function (options) { - return this.getCommandUrlFor(options) - .push(function (hash) { - window.location.replace(hash); - // prevent returning unexpected response - // wait for the hash change to occur - // fail if nothing happens - return RSVP.timeout(REDIRECT_TIMEOUT); - }); - }) - - .declareMethod('route', function (options) { - var gadget = this, - args = options.args; - gadget.options = options; - if (args.page === undefined || args.page === '') { - args.page = DEFAULT_PAGE; - } - if (args.page === "view") { - return { - url: "gadget_monitoring_promise_interface.html", - options: args - }; - } - return { - url: MAIN_PAGE_PREFIX + args.page + ".html", - options: args - }; - }) - - .declareAcquiredMethod('renderApplication', 'renderApplication') - .declareMethod('start', function () { - this.props.start_deferred.resolve(); - }) - - .declareService(function () { - var gadget = this; - return new RSVP.Queue() - .push(function () { - return gadget.props.start_deferred.promise; - }) - .push(function () { - return listenHashChange(gadget); - }); - }); - -}(window, rJS, loopEventListener, document, RSVP)); \ No newline at end of file diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_router_js.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_router_js.xml deleted file mode 100644 index c88da3467200bc3e3275b29e4edcd39ad64649b8..0000000000000000000000000000000000000000 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_router_js.xml +++ /dev/null @@ -1,329 +0,0 @@ -<?xml version="1.0"?> -<ZopeData> - <record id="1" aka="AAAAAAAAAAE="> - <pickle> - <global name="Web Script" module="erp5.portal_type"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>_Access_contents_information_Permission</string> </key> - <value> - <tuple> - <string>Anonymous</string> - <string>Assignee</string> - <string>Assignor</string> - <string>Associate</string> - <string>Auditor</string> - <string>Manager</string> - <string>Owner</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Add_portal_content_Permission</string> </key> - <value> - <tuple> - <string>Assignor</string> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Change_local_roles_Permission</string> </key> - <value> - <tuple> - <string>Assignor</string> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Modify_portal_content_Permission</string> </key> - <value> - <tuple> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_View_Permission</string> </key> - <value> - <tuple> - <string>Anonymous</string> - <string>Assignee</string> - <string>Assignor</string> - <string>Associate</string> - <string>Auditor</string> - <string>Manager</string> - <string>Owner</string> - </tuple> - </value> - </item> - <item> - <key> <string>categories</string> </key> - <value> - <tuple> - <string>classification/collaborative/public</string> - </tuple> - </value> - </item> - <item> - <key> <string>content_md5</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>content_type</string> </key> - <value> <string>text/javascript</string> </value> - </item> - <item> - <key> <string>default_reference</string> </key> - <value> <string>gadget_monitoring_router.js</string> </value> - </item> - <item> - <key> <string>description</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>gadget_monitoring_router_js</string> </value> - </item> - <item> - <key> <string>language</string> </key> - <value> <string>en</string> </value> - </item> - <item> - <key> <string>portal_type</string> </key> - <value> <string>Web Script</string> </value> - </item> - <item> - <key> <string>short_title</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>title</string> </key> - <value> <string>Monitoring router Gadget JS</string> </value> - </item> - <item> - <key> <string>version</string> </key> - <value> <string>001</string> </value> - </item> - <item> - <key> <string>workflow_history</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> - </value> - </item> - </dictionary> - </pickle> - </record> - <record id="2" aka="AAAAAAAAAAI="> - <pickle> - <global name="PersistentMapping" module="Persistence.mapping"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>data</string> </key> - <value> - <dictionary> - <item> - <key> <string>document_publication_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> - </value> - </item> - <item> - <key> <string>edit_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> - </value> - </item> - <item> - <key> <string>processing_status_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent> - </value> - </item> - </dictionary> - </value> - </item> - </dictionary> - </pickle> - </record> - <record id="3" aka="AAAAAAAAAAM="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>publish</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>zope</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1451385300.46</float> - <string>UTC</string> - </tuple> - </state> - </object> - </value> - </item> - <item> - <key> <string>validation_state</string> </key> - <value> <string>published</string> </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> - <record id="4" aka="AAAAAAAAAAQ="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>edit</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>zope</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>serial</string> </key> - <value> <string>961.21883.33309.38348</string> </value> - </item> - <item> - <key> <string>state</string> </key> - <value> <string>current</string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1502445069.13</float> - <string>UTC</string> - </tuple> - </state> - </object> - </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> - <record id="5" aka="AAAAAAAAAAU="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>detect_converted_file</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>zope</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>external_processing_state</string> </key> - <value> <string>converted</string> </value> - </item> - <item> - <key> <string>serial</string> </key> - <value> <string>0.0.0.0</string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1451384895.89</float> - <string>UTC</string> - </tuple> - </state> - </object> - </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_settings_configurator_html.html b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_settings_configurator_html.html deleted file mode 100644 index 09055897f972c8484528174d614584956325e948..0000000000000000000000000000000000000000 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_settings_configurator_html.html +++ /dev/null @@ -1,187 +0,0 @@ -<!DOCTYPE html> -<html> - <head> - <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> - <meta name="viewport" content="width=device-width, user-scalable=no" /> - <title>Monitoring Configurator</title> - - <!-- renderjs --> - <script src="rsvp.js" type="text/javascript"></script> - <script src="renderjs.js" type="text/javascript"></script> - - <script id="template-opmlurl-list" type="text/x-handlebars-template"> - {{#each opml_list}} - <tr> - <td class="column-check ui-text-center padding-10"> - <input type="checkbox" name="opmlurl" value="{{key}}"> - </td> - <td> - <a class="ui-link" href="{{href}}">{{link}}</a> - </td> - <td> - <a class="ui-link" href="{{href}}">{{title}}</a> - </td> - <td> - <a class="ui-link" href="{{href}}">{{status}}</a> - </td> - </tr> - {{/each}} - </script> - - <script id="template-message-error" type="text/x-handlebars-template"> - <p><span class='ui-text-{{status}}'>{{text}}</span></p> - </script> - - <script src="gadget_monitoring_settings_configurator.js" type="text/javascript"></script> - </head> - <body> - <div data-gadget-url="gadget_monitoring_jio.html" data-gadget-scope="jio_gadget" data-gadget-sandbox="public"></div> - <div data-gadget-url="gadget_monitoring_sync.html" data-gadget-scope="sync_gadget" data-gadget-sandbox="public"></div> - <div data-role="tabs" class="config-tabs"> - <div data-role="navbar"> - <ul> - <li><a href="#config-manage" data-ajax="false">Monitor Configuration</a></li> - <li><a href="#config-add" data-ajax="false">Add Monitor OPML</a></li> - </ul> - </div> - <div id="config-add" class="ui-body-c ui-content"> - <article class="ui-content ui-body-c"> - <section class="ui-content-header-plain"> - <h3 class="ui-content-title ui-body-c"> - <span class="ui-icon ui-icon-custom ui-icon-database"> </span> - Monitor OPML configuration - </h3> - </section> - <form class="opml"> - <section class="ui-body-c ui-content-sections"> - <div class="ui-form"> - <div class="ui-field-contain"> - <label data-i18n="OPML URL:">OPML URL:</label> - <input type="url" name="url" required value=""/> - </div> - </div> - <div class="auth-block"> - <div class="ui-form"> - <div class="ui-field-contain"> - <label data-i18n="Username:">Username:</label> - <input type="text" name="username" required value=""/> - </div> - </div> - <div class="ui-form"> - <div class="ui-field-contain"> - <label data-i18n="Password:">Password</label> - <input type="password" name="password" required value=""/> - </div> - </div> - <label class="configure-auth"> - <input type="checkbox" name="configure-newpwd">Show/hide update password form - </label> - <div class="new-password" style="display: none"> - <div class="ui-form"> - <div class="ui-field-contain"> - <label data-i18n="New Password:">New Password:</label> - <input type="password" name="new_password" required value="-"/> - </div> - </div> - <div class="ui-form"> - <div class="ui-field-contain"> - <label data-i18n="Confirm New Password:">Confirm New Password:</label> - <input type="password" name="new_password_confirm" required value="-"/> - </div> - </div> - </div> - </div> - </section> - <div class="alert alert-error ui-content-hidden"></div> - <div class="ui-grid-b ui-responsive"> - <div class="ui-block-a"></div> - <div class="ui-block-b"> - <div class="ui-content-hidden ui-text-right padding-10 spinner"> - <i class="fa fa-spinner fa-2x fa-spin"></i> - </div> - </div> - <div class="ui-block-c"> - <button type="submit" data-i18n="Add OPML" class="ui-btn-btn-right">Add OPML</button> - </div> - </div> - </form> - </article> - </div> - <div id="config-manage"> - <div class="ui-responsive content-medium"> - <div class="ui-panel-overview" style="min-height: 450px;"> - <div class="overview-header"> - <div class='content-title ui-instance-title'> - <div class="overview-title"> - <i class="fa fa-link"></i><span>Monitoring OPML List</span> - </div> - <div class="commands"> - </div> - </div> - </div> - <div class="overview-content"> - - <div class="ui-listview-container"> - <table class="ui-responsive ui-body-c ui-table-inset opml-tablelinks"> - <thead class="ui-bar-inherit"> - <tr> - <th class="padding-10"><input type="checkbox" name="opml-all" value="all"></th> - <th>OPML URL</th> - <th>Hosting Subscription Name</th> - <th>Status</th> - </tr> - </thead> - <tbody> - - </tbody> - <tfoot class="ui-bar-inherit"></tfoot> - </table> - </div> - <div class="padding-10 msgtext-box"></div> - <legend><strong>With OPML Selection:</strong></legend> - <div class="padding-lr-10"> - <a href="#" class="ui-btn ui-corner-all ui-btn-inline opml-state"><i class="fa fa-check-square-o"></i> Enable/disable</a> - <a href="#" class="ui-btn ui-corner-all ui-btn-inline opml-delete"><i class="fa fa-trash"></i> Delete</a> - <a href="#" class="ui-btn ui-corner-all ui-btn-inline opml-test"><i class="fa fa-globe" aria-hidden="true"></i> Test URL Access</a> - <span class="ui-content-hidden padding-10 loadspinner"> - <i class="fa fa-spinner fa-2x fa-spin"></i> - </span> - </div> - <div> - <legend><strong>Auto Sync Time Interval:</strong></legend> - <div class="padding-lr-10"> - <fieldset class="sync-interval-controlgroup" data-role="controlgroup" data-type="horizontal"> - <input type="radio" name="sync-data-timer" id="sync-data-5m" value="300000" checked="checked"> - <label for="sync-data-5m">5 mn</label> - <input type="radio" name="sync-data-timer" id="sync-data-10m" value="600000"> - <label for="sync-data-10m">10 mn</label> - <input type="radio" name="sync-data-timer" id="sync-data-20m" value="1200000"> - <label for="sync-data-20m">20 mn</label> - <input type="radio" name="sync-data-timer" id="sync-data-30m" value="1800000"> - <label for="sync-data-30m">30 mn</label> - <input type="radio" name="sync-data-timer" id="sync-data-1h" value="3600000"> - <label for="sync-data-1h">1 h</label> - </fieldset> - <p>Last sync date: <span class="last-sync"></span></p> - </div> - <legend><strong>Check Online Access Before Sync:</strong></legend> - <div class="padding-lr-10"> - <fieldset data-role="controlgroup" data-type="horizontal"> - <select name="sync-check-offline" id="sync-check-offline" data-role="slider" data-mini="true"> - <option value="off">Off</option> - <option value="on">On</option> - </select> - </fieldset> - </div> - <h2><strong>Manual Sync:</strong></h2> - <div class="padding-lr-10"> - <button class="ui-btn ui-corner-all ui-btn-inline sync-all"><i class="fa fa-download"></i> <span>Sync Data Now</span></button> - </div> - </div> - </div> - </div> - </div> - </div> - </div> - </body> -</html> \ No newline at end of file diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_settings_configurator_html.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_settings_configurator_html.xml deleted file mode 100644 index 3ac0a3dfc8c3265ea760549bf004e2a2a5a89455..0000000000000000000000000000000000000000 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_settings_configurator_html.xml +++ /dev/null @@ -1,329 +0,0 @@ -<?xml version="1.0"?> -<ZopeData> - <record id="1" aka="AAAAAAAAAAE="> - <pickle> - <global name="Web Page" module="erp5.portal_type"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>_Access_contents_information_Permission</string> </key> - <value> - <tuple> - <string>Anonymous</string> - <string>Assignee</string> - <string>Assignor</string> - <string>Associate</string> - <string>Auditor</string> - <string>Manager</string> - <string>Owner</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Add_portal_content_Permission</string> </key> - <value> - <tuple> - <string>Assignor</string> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Change_local_roles_Permission</string> </key> - <value> - <tuple> - <string>Assignor</string> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Modify_portal_content_Permission</string> </key> - <value> - <tuple> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_View_Permission</string> </key> - <value> - <tuple> - <string>Anonymous</string> - <string>Assignee</string> - <string>Assignor</string> - <string>Associate</string> - <string>Auditor</string> - <string>Manager</string> - <string>Owner</string> - </tuple> - </value> - </item> - <item> - <key> <string>categories</string> </key> - <value> - <tuple> - <string>classification/collaborative/public</string> - </tuple> - </value> - </item> - <item> - <key> <string>content_md5</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>content_type</string> </key> - <value> <string>text/html</string> </value> - </item> - <item> - <key> <string>default_reference</string> </key> - <value> <string>gadget_monitoring_settings_configurator.html</string> </value> - </item> - <item> - <key> <string>description</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>gadget_monitoring_settings_configurator_html</string> </value> - </item> - <item> - <key> <string>language</string> </key> - <value> <string>en</string> </value> - </item> - <item> - <key> <string>portal_type</string> </key> - <value> <string>Web Page</string> </value> - </item> - <item> - <key> <string>short_title</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>title</string> </key> - <value> <string>Monitoring Settings Configuration</string> </value> - </item> - <item> - <key> <string>version</string> </key> - <value> <string>001</string> </value> - </item> - <item> - <key> <string>workflow_history</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> - </value> - </item> - </dictionary> - </pickle> - </record> - <record id="2" aka="AAAAAAAAAAI="> - <pickle> - <global name="PersistentMapping" module="Persistence.mapping"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>data</string> </key> - <value> - <dictionary> - <item> - <key> <string>document_publication_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> - </value> - </item> - <item> - <key> <string>edit_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> - </value> - </item> - <item> - <key> <string>processing_status_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent> - </value> - </item> - </dictionary> - </value> - </item> - </dictionary> - </pickle> - </record> - <record id="3" aka="AAAAAAAAAAM="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>publish</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>zope</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1451385866.1</float> - <string>UTC</string> - </tuple> - </state> - </object> - </value> - </item> - <item> - <key> <string>validation_state</string> </key> - <value> <string>published</string> </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> - <record id="4" aka="AAAAAAAAAAQ="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>edit</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>zope</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>serial</string> </key> - <value> <string>961.52563.23676.54306</string> </value> - </item> - <item> - <key> <string>state</string> </key> - <value> <string>current</string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1504526479.13</float> - <string>UTC</string> - </tuple> - </state> - </object> - </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> - <record id="5" aka="AAAAAAAAAAU="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>detect_converted_file</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>zope</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>external_processing_state</string> </key> - <value> <string>converted</string> </value> - </item> - <item> - <key> <string>serial</string> </key> - <value> <string>0.0.0.0</string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1451385783.42</float> - <string>UTC</string> - </tuple> - </state> - </object> - </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_settings_configurator_js.js b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_settings_configurator_js.js deleted file mode 100644 index 3be721aa3bfa950292958965febb42498c5842ae..0000000000000000000000000000000000000000 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_settings_configurator_js.js +++ /dev/null @@ -1,858 +0,0 @@ -/*global window, rJS, btoa, RSVP, $, XMLHttpRequest */ -/*jslint nomen: true, indent: 2, maxerr: 3*/ -(function (window, rJS, RSVP, $, btoa, XMLHttpRequest) { - "use strict"; - - var gadget_klass = rJS(window), - templater = gadget_klass.__template_element, - - opml_url_template = Handlebars.compile( - templater.getElementById("template-opmlurl-list").innerHTML - ), - notify_msg_template = Handlebars.compile( - templater.getElementById("template-message-error").innerHTML - ); - - function validateHttpUrl(value) { - if (/\(?(?:(http|https):\/\/)(?:((?:[^\W\s]|\.|-|[:]{1})+)@{1})?((?:www.)?(?:[^\W\s]|\.|-)+[\.][^\W\s]{2,4}|localhost|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}|\[[\dabcedf:]+\])(?::(\d*))?([\/]?[^\s\?]*[\/]{1})*(?:\/?([^\s\n\?\[\]\{\}\#]*(?:(?=\.)){1}|[^\s\n\?\[\]\{\}\.\#]*)?([\.]{1}[^\s\?\#]*)?)?(?:\?{1}([^\s\n\#\[\]]*))?([\#][^\s\n]*)?\)?/i.test(value)) { - return true; - } - return false; - } - - function formatDate(d) { - function addZero(n) { - return n < 10 ? '0' + n : '' + n; - } - - return d.getFullYear() + "-" + addZero(d.getMonth()+1) - + "-" + addZero(d.getDate()) + " " + addZero(d.getHours()) - + ":" + addZero(d.getMinutes()) + ":" + addZero(d.getSeconds()); - } - - function checkCredential(gadget, url, title, hash) { - var ouput; - // Verify if login and password are correct for this URL - if (url === undefined) { - return {status: 'OK'}; - } - return testUrl(url, hash) - .then(function(result) { - return result; - }, function(error) { - var ko_msg = { - status: 'KO', - msg: error.msg + ' (' + url + ')', - title: title - }; - return ko_msg; - }); - } - - function testOPmlUrl(gadget, url, title) { - return testUrl(url) - .push(function (result) { - if (result.status !== "OK") { - var text = result.code + ": " + url + " [ " + title + " ] is not reachable!", - message_content = notify_msg_template({ - text: text, - status: "error" - }); - gadget.element.querySelector('.msgtext-box') - .innerHTML += message_content; - return false; - } - return true; - }); - } - - function loadOPMLConfiguration(gadget) { - return gadget.jio_allDocs({ - query: 'portal_type:"opml"', - select_list: ['title', 'url', 'active', 'basic_login'], - sort_on: [["title", "ascending"]] - }) - .push(function (result) { - var i, - opml_list = [], - cred_list, - content; - for (i = 0; i < result.data.total_rows; i += 1) { - cred_list = atob(result.data.rows[i].value.basic_login).split(":"); - opml_list.push({ - key: result.data.rows[i].value.title + "#" + - result.data.rows[i].value.url, - href: "#page=settings_configurator&url=" + - result.data.rows[i].value.url + - '&tab=add&password=' + cred_list[1] + - '&username=' + cred_list[0], - link: result.data.rows[i].value.url, - title: result.data.rows[i].value.title || '', - status: (result.data.rows[i].value.active) ? "Enabled" : "Disabled" - }); - } - content = opml_url_template({opml_list: opml_list}); - gadget.element.querySelector(".opml-tablelinks > tbody") - .innerHTML = content; - return gadget.changeState({"opml_list": opml_list}); - }); - } - - function testUrl(url, credential_hash) { - return new RSVP.Queue() - .push(function () { - return new RSVP.Promise(function (resolve, reject) { - var xhr = new XMLHttpRequest(); - - xhr.onload = function (event) { - var response = event.target; - if (response.status === 200) { - resolve({status: 'OK'}); - } else { - reject({ - status: 'ERROR', - msg: new Error("XHR: " + response.status + ": " + response.statusText) - }); - } - }; - - xhr.onerror = function (e) { - reject({ - status: 'ERROR', - msg: e.target.status + ": " + e.target.statusText - }); - }; - - xhr.open("GET", url, true); - //xhr.withCredentials = true; - if (credential_hash !== undefined) { - xhr.setRequestHeader('Authorization', 'Basic ' + credential_hash); - } - xhr.send(""); - }); - }); - } - - function changeMonitorPassword(gadget, base_url, title, basic_login, - password) { - var url = base_url, - jio_gadget, - jio_options; - - url += (url.endsWith('/') ? '':'/') + 'config/'; - gadget.props.gindex += 1; - return gadget.declareGadget("gadget_monitoring_jio.html", - { - element: gadget.element, - scope: 'jio_' + gadget.props.gindex + "_gadget", - sandbox: "public" - } - ).push(function(new_gadget) { - jio_gadget = new_gadget; - jio_gadget.createJio({ - type: "query", - sub_storage: { - type: "drivetojiomapping", - sub_storage: { - type: "dav", - url: url, - basic_login: basic_login - } - } - }); - return jio_gadget.get('config'); - }) - .push(function (doc) { - var i; - if (doc) { - for (i = 0; i < doc.length; i += 1) { - if (doc[i].key === 'monitor-password') { - doc[i].value = password; - return jio_gadget.put('config.tmp', doc); - } - } - } - return new Error("Cannot get document 'config.json' at : " % url); - }) - .push(function () { - return {status: 'OK'}; - }, function (error) { - console.log(error); - return { - status: 'ERROR', - code: error.target.status, - url: base_url, - title: title - }; - }); - - } - - gadget_klass - ///////////////////////////// - // state - ///////////////////////////// - .setState({ - deferred: "", - sync_gadget: "", - selected: "", - jio_gadget: "", - opml_list: "" - }) - ///////////////////////////// - // ready - ///////////////////////////// - .ready(function (gadget) { - gadget.props = {gindex: 0}; - return new RSVP.Queue() - .push(function () { - return gadget.changeState({deferred: RSVP.defer()}); - }) - .push(function () { - return gadget.getDeclaredGadget("sync_gadget") - .push(function (sync_gadget) { - return gadget.changeState({"sync_gadget": sync_gadget}); - }); - }) - .push(function () { - return gadget.getDeclaredGadget("jio_gadget") - .push(function (jio_gadget) { - return gadget.changeState({"jio_gadget": jio_gadget}); - }); - }); - }) - .declareAcquiredMethod("updateHeader", "updateHeader") - .declareAcquiredMethod("redirect", "redirect") - .declareAcquiredMethod("reload", "reload") - .declareAcquiredMethod("getSetting", "getSetting") - .declareAcquiredMethod("setSetting", "setSetting") - .declareAcquiredMethod("jio_put", "jio_put") - .declareAcquiredMethod("jio_allDocs", "jio_allDocs") - .declareAcquiredMethod("jio_get", "jio_get") - .declareAcquiredMethod("jio_remove", "jio_remove") - .declareMethod("render", function (options) { - var gadget = this; - return gadget.updateHeader({ - title: "Configure monitoring OPML"/*, - back_url: "#page=main", - panel_action: false*/ - }) - .push(function () { - return loadOPMLConfiguration(gadget); - }) - .push(function () { - var i; - if (options.url !== undefined && options.url !== '') { - gadget.element.querySelector("input[name='url']") - .value = options.url; - if (options.username !== undefined && options.username !== '' && - options.password !== undefined && options.password !== '') { - //gadget.props.username = options.username; - //gadget.props.password = options.password; - gadget.element.querySelector("input[name='username']") - .value = options.username; - gadget.element.querySelector("input[name='password']") - .value = options.password; - } - } - return gadget.getSetting('latest_sync_time'); - }) - .push(function (latest_sync_time) { - if (latest_sync_time !== undefined) { - gadget.element.querySelector(".last-sync") - .textContent = formatDate(new Date(latest_sync_time)); - } else { - gadget.element.querySelector(".last-sync") - .textContent = '--'; - } - }) - .push(function () { - if (!options.tab) { - if (!options.url) { - options.tab = 'manage'; - } else { - options.tab = 'add'; - } - } - return gadget.changeState({"selected": options.tab}); - }) - .push(function () { - return gadget.state.deferred.resolve(); - }); - }) - - ///////////////////////////////////////// - // Form submit - ///////////////////////////////////////// - .declareService(function () { - var gadget = this, - sync_checkbox_list, - online_select_element, - alert_box, - i; - - function setSyncTimerInterval(element) { - var timer; - if ($(element).prop('checked')) { - timer = parseInt($(element).val(), 10); - if (timer && !isNaN(timer)) { - return new RSVP.Queue() - .push(function () { - return gadget.setSetting('sync_data_interval', timer); - }); - } - } - } - - function setSelectSyncTime(time_interval) { - var element_id = "#sync-data-"; - if (time_interval === 300000) { - element_id += "5m"; - } else if (time_interval === 600000) { - element_id += "10m"; - } else if (time_interval === 1200000) { - element_id += "20m"; - } else if (time_interval === 1800000) { - element_id += "30m"; - } else if (time_interval === 3600000) { - element_id += "1h"; - } - $(element_id).prop('checked', true); - return $(gadget.element.querySelector(".sync-interval-controlgroup")) - .controlgroup().controlgroup("refresh"); - } - - function getSelectedOPMLList() { - var key_list = [], - opml_selector = ".opml-tablelinks tr td input[type='checkbox']", - check_list, - i; - check_list = gadget.element.querySelectorAll(opml_selector); - if (!check_list) { - return []; - } - for (i = 0; i < check_list.length; i += 1) { - if ($(check_list[i]).prop('checked')) { - key_list.push($(check_list[i]).prop('value')); - } - } - return key_list; - } - - function setFormValue(data) { - if (data === undefined) { - data = {}; - } - gadget.element - .querySelector("input[name='username']").value = data.username || ""; - gadget.element - .querySelector("input[name='password']").value = data.password || ""; - gadget.element - .querySelector("input[name='new_password']").value = data.new_password || ""; - gadget.element - .querySelector("input[name='new_password_confirm']").value = data.new_password_confirm || ""; - gadget.element - .querySelector("input[name='url']").value = data.url || ""; - } - - return new RSVP.Queue() - .push(function () { - return gadget.state.deferred.promise; - }) - .push(function () { - var item = "a[href='#config-" + gadget.state.selected + "']"; - alert_box = $(gadget.element - .querySelector('.opml .alert-error')); - return $(gadget.element.querySelector(item)).trigger('click'); - }) - .push(function () { - return gadget.getSetting('sync_data_interval'); - }) - .push(function (time_interval) { - return setSelectSyncTime(time_interval); - }) - .push(function () { - return gadget.getSetting("sync_check_offline", "true"); - }) - .push(function (sync_check_offline) { - if (sync_check_offline) { - $(gadget.element.querySelector("select[name='sync-check-offline']")) - .val('on').slider("refresh"); - } - }) - .push(function () { - var promise_list = []; - - promise_list.push(loopEventListener( - gadget.element.querySelector('.sync-all'), - 'click', - true, - function () { - var title = gadget.element.querySelector('.sync-all span').textContent; - return new RSVP.Queue() - .push(function () { - gadget.element.querySelector('.sync-all span') - .textContent = 'Please wait...'; - gadget.element.querySelector('.sync-all') - .disabled = true; - return gadget.state.sync_gadget.startSync({now: true}); - }) - .push(function () { - gadget.element.querySelector('.sync-all span') - .textContent = title; - gadget.element.querySelector('.sync-all') - .disabled = false; - return gadget.getSetting('latest_sync_time'); - }) - .push(function (latest_sync_time) { - if (latest_sync_time !== undefined) { - gadget.element.querySelector(".last-sync") - .textContent = formatDate(new Date(latest_sync_time)); - } else { - gadget.element.querySelector(".last-sync") - .textContent = '--'; - } - }); - } - )); - - promise_list.push(loopEventListener( - gadget.element.querySelector("table th input[name='opml-all']"), - 'change', - false, - function (element) { - if ($(element.target).prop('checked')) { - return $(".opml-tablelinks tr td input[type='checkbox']").prop('checked', true); - } else { - return $(".opml-tablelinks tr td input[type='checkbox']").prop('checked', false); - } - } - )); - - promise_list.push( - $(gadget.element.querySelector("select[name='sync-check-offline']") - ).bind( "change", function() { - var element = gadget.element.querySelector("select[name='sync-check-offline']"); - return gadget.setSetting('sync_check_offline', - ($(element).val() === 'on') ? "true" : "false"); - }) - ); - promise_list.push( - $(gadget.element.querySelector( - "input[name='configure-newpwd']" - )).bind( "change", function(event, ui) { - var confirm_pwd, - new_pwd, - box = gadget.element.querySelector(".opml .new-password"); - confirm_pwd = gadget.element.querySelector( - ".opml input[name='new_password_confirm']" - ); - new_pwd = gadget.element.querySelector( - ".opml input[name='new_password']" - ); - if ($(this).prop('checked')) { - confirm_pwd.value = ""; - new_pwd.value = ""; - return $(box).slideDown(); - } else { - confirm_pwd.value = "-"; - new_pwd.value = "-"; - return $(box).slideUp(); - } - }) - ); - - promise_list.push(loopEventListener( - gadget.element.querySelector("a.opml-delete"), - 'click', - true, - function (element) { - var key_list, - promise_list = [], - item_list, - i; - gadget.element.querySelector('.msgtext-box') - .innerHTML = ""; - key_list = getSelectedOPMLList(); - if (key_list.length <= 0) { - gadget.element.querySelector('.msgtext-box') - .innerHTML = notify_msg_template({ - status: "info", - text: "No OPML selected!" - }); - return false; - } - for (i = 0; i < key_list.length; i += 1) { - item_list = key_list[i].split("#"); - promise_list.push(gadget.jio_remove( - item_list.slice(1, item_list.length).join("#") - )); - } - return new RSVP.Queue() - .push(function () { - return RSVP.all(promise_list); - }) - .push(undefined, function (error) { - console.log(error); - gadget.element.querySelector('.msgtext-box') - .innerHTML = notify_msg_template({ - status: "error", - text: " ERROR while removing OPML(s)" - }); - return; - }) - .push(function () { - return gadget.reload(); - }); - } - )); - - promise_list.push(loopEventListener( - gadget.element.querySelector("a.opml-test"), - 'click', - true, - function (element) { - var key_list, - promise_list = [], - item_list, - title, - i; - gadget.element.querySelector('.msgtext-box') - .textContent = ""; - key_list = getSelectedOPMLList(); - if (key_list.length <= 0) { - gadget.element.querySelector('.msgtext-box') - .innerHTML = notify_msg_template({ - status: "info", - text: "No OPML selected!" - }); - return false; - } - for (i = 0; i < key_list.length; i += 1) { - item_list = key_list[i].split("#"); - title = item_list[0]; - promise_list.push(testOPmlUrl( - gadget, - item_list.slice(1, item_list.length).join("#"), - title - )); - } - return new RSVP.Queue() - .push(function () { - $(gadget.element.querySelector('.loadspinner')) - .removeClass('ui-content-hidden'); - return RSVP.all(promise_list); - }) - .push(function (result) { - var i, - state = true; - for (i = 0; i < result.length; i += 1) { - if (! result[i]) { - state = false; - break; - } - } - if (state) { - gadget.element.querySelector('.msgtext-box') - .innerHTML = notify_msg_template({ - status: "ok", - text: "All OPML URLs was successfully tested." - }); - } - $(gadget.element.querySelector('.loadspinner')).addClass('ui-content-hidden'); - }); - } - )); - - promise_list.push(loopEventListener( - gadget.element.querySelector("a.opml-state"), - 'click', - true, - function (element) { - var key_list, - promise_list = [], - item_list, - i; - gadget.element.querySelector('.msgtext-box') - .innerHTML = ""; - key_list = getSelectedOPMLList(); - if (key_list.length <= 0) { - gadget.element.querySelector('.msgtext-box') - .innerHTML = notify_msg_template({ - status: "info", - text: "No OPML selected!" - }); - return false; - } - for (i = 0; i < key_list.length; i += 1) { - item_list = key_list[i].split("#"); - promise_list.push(gadget.jio_get( - item_list.slice(1, item_list.length).join("#") - )); - } - return new RSVP.Queue() - .push(function () { - return RSVP.all(promise_list); - }) - .push(undefined, function (error) { - console.log(error); - gadget.element.querySelector('.msgtext-box') - .innerHTML = notify_msg_template({ - status: "error", - text: "ERROR while updating OPML(s)" - }); - return []; - }) - .push(function (result_list) { - var i, - promise_state_list = []; - for (i = 0; i < result_list.length; i += 1) { - result_list[i].active = !result_list[i].active; - promise_state_list.push(gadget.jio_put( - result_list[i].url, - result_list[i] - )); - } - return RSVP.all(promise_state_list); - }) - .push(function (result_list) { - if (result_list.length > 0) { - return loadOPMLConfiguration(gadget); - } - }); - } - )); - - promise_list.push(loopEventListener( - gadget.element.querySelector('form.opml'), - 'submit', - true, - function () { - var current_opml, - username = '', - password = '', - opml_url = '', - new_password = '', - cnew_password = '', - submit_text, - button_submit = gadget.element - .querySelector('.opml button[type="submit"]'); - $(gadget.element.querySelector('.opml .alert-error')) - .addClass('ui-content-hidden').text(''); - submit_text = button_submit.textContent; - - if ($(gadget.element.querySelector("input[name='configure-newpwd']")).prop('checked')) { - new_password = gadget.element.querySelector("input[name='new_password']").value; - cnew_password = gadget.element.querySelector("input[name='new_password_confirm']").value; - if (new_password !== cnew_password) { - alert_box.removeClass('ui-content-hidden') - .text('The new password and it confirmation are differents!'); - return false; - } - } - - function saveClick() { - $(gadget.element.querySelector('.spinner')) - .removeClass('ui-content-hidden'); - button_submit.disabled = true; - } - function endSave() { - $(gadget.element.querySelector('.spinner')) - .addClass('ui-content-hidden'); - button_submit.disabled = false; - button_submit.textContent = submit_text; - } - - function pushNewOPML(opml_url, username, password, new_password) { - var opml_dict = { - type: "opml", - portal_type: "opml", - url: opml_url, - basic_login: btoa(username + ':' + password), - active: true - }, - update_password_list = []; - - function validateOPML() { - // read the opml to get the content and title - //delete gadget.state.jio_storage; - button_submit.textContent = "Reading OPML content..."; - gadget.state.jio_gadget.createJio({ - type: "query", - sub_storage: { - type: "parser", - document_id: opml_url, - attachment_id: 'enclosure', - parser: 'opml', - sub_storage: { - type: "http" - } - } - }); - return gadget.state.jio_gadget.allDocs({ - select_list: ['title', 'opml_title', 'xmlUrl', 'url'] - }) - .push(undefined, function (error) { - var msg = ""; - if (error.currentTarget !== undefined && - (error.currentTarget.responseType === "" || - error.currentTarget.responseType === "text")) { - msg = error.currentTarget.responseText; - } - alert_box.removeClass('ui-content-hidden') - .text(error.currentTarget.status + - ": Failed to access OPML URL. " + msg); - return {data: {total_rows: 0}}; - }) - .push(function (opml_result) { - var i, - check_list = [true]; - if (opml_result.data.total_rows > 0) { - opml_dict.title = opml_result.data.rows[0].value.title; - for (i = 1; i < opml_result.data.total_rows; i += 1) { - if (opml_result.data.rows[i].value.url !== undefined) { - check_list.push(checkCredential( - gadget, - opml_result.data.rows[i].value.url, - opml_result.data.rows[i].value.title, - opml_dict.basic_login - )); - update_password_list.push({ - base_url: opml_result.data.rows[i].value.url, - title: opml_result.data.rows[i].value.title - }); - } - } - button_submit.textContent = "Validating password(s)..."; - return RSVP.all(check_list); - } - return [false]; - }) - .push(function (status_list) { - var i, - error_msg = ''; - for (i = 1; i < status_list.length; i += 1) { - if (status_list[i].status !== 'OK') { - error_msg += 'Login/password invalid for instance: ' + - status_list[i].title + '. ' + - status_list[i].msg + '\n'; - } - } - if (error_msg !== '') { - alert_box.removeClass('ui-content-hidden') - .text(error_msg); - return false; - } - return status_list[0]; - }) - .push(function (previous_status) { - var i, - update_promise_list = []; - if (new_password === "") { - return previous_status; - } - if (!previous_status) { - return false; - } - button_submit.textContent = "Changing password(s)..."; - for (i = 0; i < update_password_list.length; i += 1) { - update_promise_list.push(changeMonitorPassword( - gadget, - update_password_list[i].base_url, - update_password_list[i].title, - opml_dict.basic_login, - new_password - )); - } - return new RSVP.Queue() - .push(function () { - return RSVP.all(update_promise_list); - }) - .push(function(result_list) { - var i, - error_msg = ""; - for (i = 0; i < result_list.length; i += 1) { - if (result_list[i].status === 'ERROR') { - error_msg += 'ERROR ' + result_list[i].code + - '. [' + result_list[i].title + '] Failed to ' + - 'change password, please try again\n'; - } - } - if (error_msg !== "") { - alert_box.removeClass('ui-content-hidden') - .text(error_msg); - return false; - } else { - opml_dict.basic_login = - btoa(username + ':' + new_password); - return true; - } - }); - }); - } - - saveClick(); - return gadget.jio_get(opml_dict.url) - .push(function (jio_doc) { - return jio_doc; - }, function (error) { - return {}; - }) - .push(function (doc) { - current_opml = doc; - return validateOPML(); - }) - .push(function (status) { - if (status) { - button_submit.textContent = "Saving OPML..."; - return gadget.jio_put(opml_dict.url, opml_dict) - .push(function () { - endSave(); - return gadget.redirect({ - page: 'status_list' - }); - }); - } - endSave(); - }); - } - - return new RSVP.Queue() - .push(function () { - var promise_list = [], - i; - username = gadget.element - .querySelector("input[name='username']").value; - password = gadget.element - .querySelector("input[name='password']").value; - opml_url = gadget.element - .querySelector("input[name='url']").value; - - if (!validateHttpUrl(opml_url)) { - alert_box.removeClass('ui-content-hidden') - .text( - "'" + opml_url + "' is not a valid OPML URL" - ); - return false; - } - return pushNewOPML(opml_url, username, password, - new_password); - }); - } - )); - - sync_checkbox_list = gadget.element.querySelectorAll("input[name='sync-data-timer']"); - for (i = 0; i < sync_checkbox_list.length; i += 1) { - promise_list.push( - $(sync_checkbox_list[i]) - .bind("change", - setSyncTimerInterval.bind(gadget, sync_checkbox_list[i])) - ); - } - - return RSVP.all(promise_list); - }); - }); - -}(window, rJS, RSVP, $, btoa, XMLHttpRequest)); - diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_settings_configurator_js.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_settings_configurator_js.xml deleted file mode 100644 index 7ff304bc10ca79b840f60c11f3a40650017b0b4f..0000000000000000000000000000000000000000 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_settings_configurator_js.xml +++ /dev/null @@ -1,329 +0,0 @@ -<?xml version="1.0"?> -<ZopeData> - <record id="1" aka="AAAAAAAAAAE="> - <pickle> - <global name="Web Script" module="erp5.portal_type"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>_Access_contents_information_Permission</string> </key> - <value> - <tuple> - <string>Anonymous</string> - <string>Assignee</string> - <string>Assignor</string> - <string>Associate</string> - <string>Auditor</string> - <string>Manager</string> - <string>Owner</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Add_portal_content_Permission</string> </key> - <value> - <tuple> - <string>Assignor</string> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Change_local_roles_Permission</string> </key> - <value> - <tuple> - <string>Assignor</string> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Modify_portal_content_Permission</string> </key> - <value> - <tuple> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_View_Permission</string> </key> - <value> - <tuple> - <string>Anonymous</string> - <string>Assignee</string> - <string>Assignor</string> - <string>Associate</string> - <string>Auditor</string> - <string>Manager</string> - <string>Owner</string> - </tuple> - </value> - </item> - <item> - <key> <string>categories</string> </key> - <value> - <tuple> - <string>classification/collaborative/public</string> - </tuple> - </value> - </item> - <item> - <key> <string>content_md5</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>content_type</string> </key> - <value> <string>text/javascript</string> </value> - </item> - <item> - <key> <string>default_reference</string> </key> - <value> <string>gadget_monitoring_settings_configurator.js</string> </value> - </item> - <item> - <key> <string>description</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>gadget_monitoring_settings_configurator_js</string> </value> - </item> - <item> - <key> <string>language</string> </key> - <value> <string>en</string> </value> - </item> - <item> - <key> <string>portal_type</string> </key> - <value> <string>Web Script</string> </value> - </item> - <item> - <key> <string>short_title</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>title</string> </key> - <value> <string>Monitoring Settings Gadget JS</string> </value> - </item> - <item> - <key> <string>version</string> </key> - <value> <string>001</string> </value> - </item> - <item> - <key> <string>workflow_history</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> - </value> - </item> - </dictionary> - </pickle> - </record> - <record id="2" aka="AAAAAAAAAAI="> - <pickle> - <global name="PersistentMapping" module="Persistence.mapping"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>data</string> </key> - <value> - <dictionary> - <item> - <key> <string>document_publication_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> - </value> - </item> - <item> - <key> <string>edit_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> - </value> - </item> - <item> - <key> <string>processing_status_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent> - </value> - </item> - </dictionary> - </value> - </item> - </dictionary> - </pickle> - </record> - <record id="3" aka="AAAAAAAAAAM="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>publish</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>zope</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1451387399.92</float> - <string>UTC</string> - </tuple> - </state> - </object> - </value> - </item> - <item> - <key> <string>validation_state</string> </key> - <value> <string>published</string> </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> - <record id="4" aka="AAAAAAAAAAQ="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>edit</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>zope</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>serial</string> </key> - <value> <string>961.62212.52900.63880</string> </value> - </item> - <item> - <key> <string>state</string> </key> - <value> <string>current</string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1504861845.27</float> - <string>UTC</string> - </tuple> - </state> - </object> - </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> - <record id="5" aka="AAAAAAAAAAU="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>detect_converted_file</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>zope</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>external_processing_state</string> </key> - <value> <string>converted</string> </value> - </item> - <item> - <key> <string>serial</string> </key> - <value> <string>0.0.0.0</string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1451387225.4</float> - <string>UTC</string> - </tuple> - </state> - </object> - </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_software_instance_list_html.html b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_software_instance_list_html.html deleted file mode 100644 index c46e6c2c969a75ac959f9d5904430642c97c9062..0000000000000000000000000000000000000000 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_software_instance_list_html.html +++ /dev/null @@ -1,21 +0,0 @@ -<!doctype html> -<html> - <head> - <meta charset="utf-8"> - <meta name="viewport" content="width=device-width, initial-scale=1"> - - <title>Monitoring Software Instance List</title> - - <link href="gadget_monitoring_custom.css" rel="stylesheet" type="text/css"/> - - <script src="rsvp.js"></script> - <script src="renderjs.js"></script> - - <script src="gadget_monitoring_software_instance_list.js"></script> - - </head> - - <body> - <div data-gadget-url="gadget_monitoring_widget_listbox.html" data-gadget-scope="listview"></div> - </body> -</html> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_software_instance_list_html.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_software_instance_list_html.xml deleted file mode 100644 index cb8a771b0b2adc435762587a4fa9be2072f6ed12..0000000000000000000000000000000000000000 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_software_instance_list_html.xml +++ /dev/null @@ -1,333 +0,0 @@ -<?xml version="1.0"?> -<ZopeData> - <record id="1" aka="AAAAAAAAAAE="> - <pickle> - <global name="Web Page" module="erp5.portal_type"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>_Access_contents_information_Permission</string> </key> - <value> - <tuple> - <string>Anonymous</string> - <string>Assignee</string> - <string>Assignor</string> - <string>Associate</string> - <string>Auditor</string> - <string>Manager</string> - <string>Owner</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Add_portal_content_Permission</string> </key> - <value> - <tuple> - <string>Assignor</string> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Change_local_roles_Permission</string> </key> - <value> - <tuple> - <string>Assignor</string> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Modify_portal_content_Permission</string> </key> - <value> - <tuple> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_View_Permission</string> </key> - <value> - <tuple> - <string>Anonymous</string> - <string>Assignee</string> - <string>Assignor</string> - <string>Associate</string> - <string>Auditor</string> - <string>Manager</string> - <string>Owner</string> - </tuple> - </value> - </item> - <item> - <key> <string>categories</string> </key> - <value> - <tuple> - <string>classification/collaborative/public</string> - </tuple> - </value> - </item> - <item> - <key> <string>content_md5</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>content_type</string> </key> - <value> <string>text/html</string> </value> - </item> - <item> - <key> <string>default_reference</string> </key> - <value> <string>gadget_monitoring_software_instance_list.html</string> </value> - </item> - <item> - <key> <string>description</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>gadget_monitoring_software_instance_list_html</string> </value> - </item> - <item> - <key> <string>language</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>portal_type</string> </key> - <value> <string>Web Page</string> </value> - </item> - <item> - <key> <string>short_title</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>title</string> </key> - <value> <string>Monitoring Software Instance List</string> </value> - </item> - <item> - <key> <string>version</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>workflow_history</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> - </value> - </item> - </dictionary> - </pickle> - </record> - <record id="2" aka="AAAAAAAAAAI="> - <pickle> - <global name="PersistentMapping" module="Persistence.mapping"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>data</string> </key> - <value> - <dictionary> - <item> - <key> <string>document_publication_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> - </value> - </item> - <item> - <key> <string>edit_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> - </value> - </item> - <item> - <key> <string>processing_status_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent> - </value> - </item> - </dictionary> - </value> - </item> - </dictionary> - </pickle> - </record> - <record id="3" aka="AAAAAAAAAAM="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>publish</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>zope</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1453456785.61</float> - <string>UTC</string> - </tuple> - </state> - </object> - </value> - </item> - <item> - <key> <string>validation_state</string> </key> - <value> <string>published</string> </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> - <record id="4" aka="AAAAAAAAAAQ="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>edit</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>zope</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>serial</string> </key> - <value> <string>961.6384.703.48554</string> </value> - </item> - <item> - <key> <string>state</string> </key> - <value> <string>current</string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1501836246.32</float> - <string>UTC</string> - </tuple> - </state> - </object> - </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> - <record id="5" aka="AAAAAAAAAAU="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>detect_converted_file</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>zope</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>external_processing_state</string> </key> - <value> <string>converted</string> </value> - </item> - <item> - <key> <string>serial</string> </key> - <value> <string>0.0.0.0</string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1453456749.69</float> - <string>UTC</string> - </tuple> - </state> - </object> - </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_software_instance_list_js.js b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_software_instance_list_js.js deleted file mode 100644 index 85dfb050f4d10f5e9d6c13b2ee278559b6377197..0000000000000000000000000000000000000000 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_software_instance_list_js.js +++ /dev/null @@ -1,102 +0,0 @@ -/*global window, rJS, RSVP, URI, location, $, - loopEventListener, btoa */ -/*jslint nomen: true, indent: 2, maxerr: 3*/ -(function (window, rJS, $) { - "use strict"; - - rJS(window) - .ready(function (gadget) { - gadget.property_dict = { - render_deferred: RSVP.defer() - }; - }) - .ready(function (gadget) { - return gadget.getDeclaredGadget("listview") - .push(function (listbox_gadget) { - gadget.property_dict.listview = listbox_gadget; - }); - }) - .declareMethod('render', function (options) { - var gadget = this, - header = { - "title": 'Software Instances List' - }, - listview_options = { - search_page: 'software_instance_list', - search: options.search, - filter: options.filter, - selection: '', - view: 'software_instance_view', - filter_column: {select: "status", "title": "Status"}, - column_list: [{ - select: 'status', - title: 'Status', - template: ' <span class="label label-{{value}}">{{value}}</span>', - css_class: 'ui-text-center' - }, { - title: 'Software Instance', - select: 'title' - }, { - title: 'Hosting Subscription', - select: 'hosting-title' - }, { - select: 'date', - title: 'Status Date', - convertDate: false - }], - query: { - select_list: ['title', 'status', 'date', 'hosting-title'], - query: '(portal_type:"global") AND (active:true)', - sort_on: [["hosting-title", "ascending"]] - } - }; - - gadget.property_dict.options = options; - return gadget.updateHeader(header) - .push(function () { - return gadget.property_dict.listview.render(listview_options); - }); - }) - .declareAcquiredMethod("updateHeader", "updateHeader") - .declareAcquiredMethod("renderApplication", "renderApplication") - .declareAcquiredMethod("getSetting", "getSetting") - .declareAcquiredMethod("setSetting", "setSetting") - .declareService(function () { - var gadget = this, - current_sync_date; - - return gadget.getSetting('latest_sync_time') - .push(function (sync_time) { - current_sync_date = sync_time; - return gadget.getSetting('status_list_refresh_id'); - }) - .push(function (timer_id) { - var new_timer_id; - if (timer_id) { - clearInterval(timer_id); - } - new_timer_id = setInterval(function(){ - var hash = window.location.toString().split('#')[1], - scroll_position, - doc = document.documentElement; - if (hash.indexOf('page=software_instance_list') >= 0) { - return gadget.getSetting('latest_sync_time') - .push(function (sync_time) { - if (sync_time > current_sync_date) { - scroll_position = (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0); - current_sync_date = sync_time; - return gadget.renderApplication({args: gadget.property_dict.options}) - .push(function () { - $(document).scrollTop(scroll_position); - }); - } - }); - } - }, 60000); - return gadget.setSetting('status_list_refresh_id', new_timer_id); - }); - - }); - - -}(window, rJS, $)); \ No newline at end of file diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_software_instance_list_js.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_software_instance_list_js.xml deleted file mode 100644 index f5ca4896111c2ee4142e09429c29afe177b2e2ff..0000000000000000000000000000000000000000 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_software_instance_list_js.xml +++ /dev/null @@ -1,329 +0,0 @@ -<?xml version="1.0"?> -<ZopeData> - <record id="1" aka="AAAAAAAAAAE="> - <pickle> - <global name="Web Script" module="erp5.portal_type"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>_Access_contents_information_Permission</string> </key> - <value> - <tuple> - <string>Anonymous</string> - <string>Assignee</string> - <string>Assignor</string> - <string>Associate</string> - <string>Auditor</string> - <string>Manager</string> - <string>Owner</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Add_portal_content_Permission</string> </key> - <value> - <tuple> - <string>Assignor</string> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Change_local_roles_Permission</string> </key> - <value> - <tuple> - <string>Assignor</string> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Modify_portal_content_Permission</string> </key> - <value> - <tuple> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_View_Permission</string> </key> - <value> - <tuple> - <string>Anonymous</string> - <string>Assignee</string> - <string>Assignor</string> - <string>Associate</string> - <string>Auditor</string> - <string>Manager</string> - <string>Owner</string> - </tuple> - </value> - </item> - <item> - <key> <string>categories</string> </key> - <value> - <tuple> - <string>classification/collaborative/public</string> - </tuple> - </value> - </item> - <item> - <key> <string>content_md5</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>content_type</string> </key> - <value> <string>text/javascript</string> </value> - </item> - <item> - <key> <string>default_reference</string> </key> - <value> <string>gadget_monitoring_software_instance_list.js</string> </value> - </item> - <item> - <key> <string>description</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>gadget_monitoring_software_instance_list_js</string> </value> - </item> - <item> - <key> <string>language</string> </key> - <value> <string>en</string> </value> - </item> - <item> - <key> <string>portal_type</string> </key> - <value> <string>Web Script</string> </value> - </item> - <item> - <key> <string>short_title</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>title</string> </key> - <value> <string>Monitoring Instance List Gadget JS</string> </value> - </item> - <item> - <key> <string>version</string> </key> - <value> <string>001</string> </value> - </item> - <item> - <key> <string>workflow_history</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> - </value> - </item> - </dictionary> - </pickle> - </record> - <record id="2" aka="AAAAAAAAAAI="> - <pickle> - <global name="PersistentMapping" module="Persistence.mapping"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>data</string> </key> - <value> - <dictionary> - <item> - <key> <string>document_publication_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> - </value> - </item> - <item> - <key> <string>edit_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> - </value> - </item> - <item> - <key> <string>processing_status_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent> - </value> - </item> - </dictionary> - </value> - </item> - </dictionary> - </pickle> - </record> - <record id="3" aka="AAAAAAAAAAM="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>publish</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>zope</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1453456681.15</float> - <string>UTC</string> - </tuple> - </state> - </object> - </value> - </item> - <item> - <key> <string>validation_state</string> </key> - <value> <string>published</string> </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> - <record id="4" aka="AAAAAAAAAAQ="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>edit</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>zope</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>serial</string> </key> - <value> <string>961.21883.33309.38348</string> </value> - </item> - <item> - <key> <string>state</string> </key> - <value> <string>current</string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1502445069.14</float> - <string>UTC</string> - </tuple> - </state> - </object> - </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> - <record id="5" aka="AAAAAAAAAAU="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>detect_converted_file</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>zope</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>external_processing_state</string> </key> - <value> <string>converted</string> </value> - </item> - <item> - <key> <string>serial</string> </key> - <value> <string>0.0.0.0</string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1453456464.84</float> - <string>UTC</string> - </tuple> - </state> - </object> - </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_software_instance_view_html.html b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_software_instance_view_html.html deleted file mode 100644 index 070a571f479b9f257df7dc2b6412a3f02858d359..0000000000000000000000000000000000000000 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_software_instance_view_html.html +++ /dev/null @@ -1,149 +0,0 @@ -<!DOCTYPE html> -<html> - <head> - <meta charset="utf-8" /> - <meta name="viewport" content="width=device-width, user-scalable=no" /> - <title>Monitoring Software Instance</title> - - <!-- renderjs --> - <script src="rsvp.js" type="text/javascript"></script> - <script src="renderjs.js" type="text/javascript"></script> - <script src="handlebars.js"></script> - - <script id="details-widget-overview" type="text/x-handlebars-template"> - <div class="ui-text-left" style="padding-bottom: 15px;"> - <h2><i class="fa fa-info-circle"></i> <strong>Software Instance State Information <a target='_blank' href="{{rss_url}}" title="RSS"><i class="fa fa-rss-square"></i></a></strong></h2> - <div class="padding-10"> - <div class="ui-grid-a ui-responsive"> - <div class="ui-block-a"> - <fieldset data-role="controlgroup" data-type="horizontal"> - {{#if resource_url }} - <a href="{{resource_url}}" class="ui-btn ui-corner-all ui-btn-inline ui-mini" title="Software Instance Resource comsumption"><i class="fa fa-pie-chart"></i> Resources</a> - {{/if}} - {{#if process_url }} - <a href="{{process_url}}" class="ui-btn ui-corner-all ui-btn-inline ui-mini" title="Processes usage"><i class="fa fa-list-alt"></i> Processes</a> - {{/if}} - </fieldset> - </div> - <div class="ui-block-b"> - <fieldset data-role="controlgroup" data-type="horizontal"> - {{#if private_url}} - <a class="ui-btn ui-corner-all ui-btn-inline ui-mini" target='_blank' href="{{private_url}}" title="Browse Private Logs Directory"><i class="fa fa-lock"></i> Private Logs</a> - {{/if}} - {{#if public_url}} - <a class="ui-btn ui-corner-all ui-btn-inline ui-mini" target='_blank' href="{{public_url}}" title="Public Logs Directory"><i class="fa fa-folder-open-o"></i> Public Logs</a> - {{/if}} - {{#if rss_url}} - <!--<a class="ui-btn ui-corner-all ui-btn-inline ui-mini" target='_blank' href="{{rss_url}}" title="RSS"><i class="fa fa-rss-square"></i> RSS</a>--> - {{/if}} - </fieldset> - </div> - </div> - - <div class="ui-grid-a ui-responsive"> - {{#if warning}} - <p class="ui-text-error"><i class="fa fa-info-circle" aria-hidden="true"></i> Status was changed to WARNING as last sync of this instance failed.</p> - {{/if}} - {{#with instance}} - <div class="ui-block-a"> - <table data-role="table" data-mode="columntoggle" class="table-stroke"> - <tr> - <th><i class="fa fa-tachometer m-hidden"></i> Instance Status</th> - <td><span class="label label-{{../status}}">{{../status}}</span></td> - </tr> - <tr> - <th><i class="fa fa-clock-o m-hidden" aria-hidden="true"></i> Report Date</th> - <td title="Report Date">{{../date}}</td> - </tr> - <tr> - <th><i class="fa fa-link" aria-hidden="true"></i> Software Release</th> - <td><a style="padding: 0; min-height: initial;" href="{{software-release}}" title="{{software-release}}" target='_blank'>Click to open <i class="fa fa-external-link"></i></a></td> - </tr> - <tr> - <th><i class="fa fa-line-chart" aria-hidden="true"></i> Promises Error</th> - <td title="Number of promises error in Software Instance">{{../error}}</td> - </tr> - <tr> - <th><i class="fa fa-line-chart" aria-hidden="true"></i> Promises OK</th> - <td title="Number of promises OK in Software Instance">{{../success}}</td> - </tr> - </table> - </div> - <div class="ui-block-b"> - <table data-role="table" data-mode="columntoggle" class="table-stroke"> - <tr> - <th><i class="fa fa-desktop m-hidden"></i> Computer</th> - <td title="Computer Reference">{{computer}}</td> - </tr> - <tr> - <th><i class="fa fa-square m-hidden"></i> Computer Partition</th> - <td title="Partition Reference">{{partition}}</td> - </tr> - <tr> - <th><i class="fa fa-globe m-hidden"></i> IPv4 Address</th> - <td title="IPv4">{{ipv4}}</td> - </tr> - <tr> - <th><i class="fa fa-globe m-hidden"></i> IPv6 Address</th> - <td title="IPv6">{{ipv6}}</td> - </tr> - <tr> - <th>Software Type</th> - <td title="Software type">{{software-type}}</td> - </tr> - </table> - </div> - {{/with}} - </div> - </div> - </div> - </script> - - <script id="promiselist-widget-template" type="text/x-handlebars-template"> - {{#if promise_list}} - <h2><i class="fa fa-th-list"></i> <strong>Software Instance Promises</strong></h2> - <div style="overflow: auto;" class="padding-lr-10"> - <table data-role="table" data-mode="columntoggle" class="table-stroke ui-table-custom"> - {{#each promise_list}} - <tr title="{{message}}"> - <td><a href="{{href}}">{{title}}</a></td> - <td class="m-hidden" style="text-align: center;">{{date}}</td> - <td style="text-align: center;"><span class="label label-{{status}}">{{status}}</span></td> - </tr> - {{/each}} - </table> - </div> - {{/if}} - </script> - - <!-- custom script --> - <script src="gadget_monitoring_software_instance_view.js" type="text/javascript"></script> - - </head> - <body> - <div data-gadget-url="gadget_monitoring_jio.html" data-gadget-scope="jio_gadget" data-gadget-sandbox="public"></div> - <div class="ui-panel-overview"> - <div class="overview-details"> - <div class="overview-header"> - <div class='content-title ui-instance-title'> - <div class="overview-title"> - <div data-gadget-url="gadget_monitoring_breadcrumb.html" data-gadget-scope="breadcrumb_gadget" data-gadget-sandbox="public"></div> - </div> - <div class="commands"> - - </div> - </div> - </div> - <div class="content-details"> - </div> - </div> - <div class="graph-full"> - <div class="signal ui-content-hidden"></div> - <h2><i class="fa fa-line-chart" aria-hidden="true"></i> <strong>Promises result progression</strong></h2> - <div data-gadget-url="gadget_field_graph_dygraph.html" data-gadget-scope="graph_gadget" class="graph graph-medium "></div> - </div> - <div class="promise-list"> - </div> - </div> - </body> -</html> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_software_instance_view_js.js b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_software_instance_view_js.js deleted file mode 100644 index b4d406b02c320f5ec4c926204ee781a92c3a97c8..0000000000000000000000000000000000000000 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_software_instance_view_js.js +++ /dev/null @@ -1,367 +0,0 @@ -/*global window, rJS, RSVP, Handlebars, loopEventListener, $, atob */ -/*jslint nomen: true, indent: 2 */ -(function (window, rJS, RSVP, Handlebars, loopEventListener, $, atob) { - "use strict"; - - ///////////////////////////////////////////////////////////////// - // templates - ///////////////////////////////////////////////////////////////// - var gadget_klass = rJS(window), - templater = gadget_klass.__template_element, - hashCode = new Rusha().digestFromString; - - ///////////////////////////////////////////////////////////////// - // some methods - ///////////////////////////////////////////////////////////////// - - function formatDate(d) { - function addZero(n) { - return n < 10 ? '0' + n : '' + n; - } - - return d.getFullYear() + "-" + addZero(d.getMonth()+1) - + "-" + addZero(d.getDate()) + " " + addZero(d.getHours()) - + ":" + addZero(d.getMinutes()) + ":" + addZero(d.getSeconds()); - } - - gadget_klass - - .setState({ - instance: "", - promise_list: [], - opml: "", - opml_outline: "", - jio_gadget: "", - graph_gadget: "", - breadcrumb_gadget: "" - }) - ///////////////////////////////////////////////////////////////// - // ready - ///////////////////////////////////////////////////////////////// - .ready(function (gadget) { - gadget.property_dict = { - render_deferred: RSVP.defer() - }; - }) - - .ready(function (gadget) { - return gadget.getElement() - .push(function (element) { - gadget.property_dict.element = element; - }); - }) - .ready(function (gadget) { - return gadget.getDeclaredGadget("graph_gadget") - .push(function (graph_gadget) { - return gadget.changeState({graph_gadget: graph_gadget}); - }); - }) - .ready(function (gadget) { - return gadget.getDeclaredGadget("jio_gadget") - .push(function (jio_gadget) { - return gadget.changeState({jio_gadget: jio_gadget}); - }); - }) - .ready(function (gadget) { - return gadget.getDeclaredGadget("breadcrumb_gadget") - .push(function (breadcrumb_gadget) { - return gadget.changeState({breadcrumb_gadget: breadcrumb_gadget}); - }); - }) - /*.ready(function (gadget) { - return gadget.getSetting('instance_overview_selection') - .push(function (selection) { - gadget.property_dict.selection = selection || ''; - }); - })*/ - - ///////////////////////////////////////////////////////////////// - // published methods - ///////////////////////////////////////////////////////////////// - - ///////////////////////////////////////////////////////////////// - // acquired methods - ///////////////////////////////////////////////////////////////// - .declareAcquiredMethod("updateHeader", "updateHeader") - .declareAcquiredMethod("translate", "translate") - .declareAcquiredMethod("jio_allDocs", "jio_allDocs") - .declareAcquiredMethod("jio_get", "jio_get") - .declareAcquiredMethod("getSetting", "getSetting") - .declareAcquiredMethod("setSetting", "setSetting") - - ///////////////////////////////////////////////////////////////// - // declared methods - ///////////////////////////////////////////////////////////////// - .declareMethod('render', function (option_dict) { - var gadget = this; - - return gadget.updateHeader({ - title: "Monitoring software instance view" - }) - .push(function () { - return gadget.jio_get(option_dict.key); - }) - .push(function (current_document) { - if (current_document.portal_type === "global") { - return gadget.changeState({instance: current_document}) - .push(function () { - // Get opml outline document - return gadget.jio_allDocs({ - select_list: [ - "parent_url", - "parent_id", - "title", - "opml_title", - "reference"], - query: '(portal_type:"opml-outline") AND (reference:"' + - gadget.state.instance.parent_id + '")' - }); - }) - .push(function (opml_outline) { - return gadget.changeState({ - opml_outline: opml_outline.data.rows[0].value - }); - }); - } - return gadget.changeState({opml_outline: current_document}) - .push(function (opml_outline) { - return gadget.jio_allDocs({ - select_list: [ - "_embedded", - "_links", - "data", - "date", - "reference", - "parent_id", - "state", - "title", - "status", - "hosting-title" - ], - query: '(portal_type:"global") AND (parent_id:"' + - current_document.reference + '")' - }); - }) - .push(function (instance) { - if (instance.data.total_rows > 0) { - return gadget.changeState({ - instance: instance.data.rows[0].value - }); - } - console.log("Cannot find document: " + option_dict.key); - return {}; - }); - }) - .push(function () { - return gadget.jio_allDocs({ - select_list: [ - "source", - "lastBuildDate", - "comments", - "category", - "reference" - ], - query: '(portal_type:"promise") AND (parent_id:"' + - gadget.state.instance.parent_id + '")' - }); - }) - .push(function (promise_result) { - return gadget.changeState({promise_list: promise_result.data.rows}); - }) - .push(function () { - return gadget.jio_allDocs({ - select_list: ["basic_login", "url", "title"], - query: '(portal_type:"opml") AND (url:"' + - gadget.state.opml_outline.parent_url + '")' - }); - }) - .push(function (opml_doc) { - return gadget.changeState({opml: opml_doc.data.rows[0].value}); - }) - .push(function () { - return gadget.state.breadcrumb_gadget.render({ - icon: "cubes", - url_list: [ - { - title: gadget.state.opml.title, - url: "#page=hosting_subscription_view&key=" + - gadget.state.opml.url - }, - { - title: gadget.state.instance.title, - } - ] - }); - }) - .push(function () { - var instance_content, - promise_list_template, - content, - promise_content, - promise_list = [], - i, - tmp_url, - tmp_process_url, - current_document = gadget.state.instance, - pass_url = '', - private_url = current_document._links - .hasOwnProperty('private_url') ? current_document - ._links.private_url.href : ''; - - if (private_url !== '') { - private_url = private_url.replace("jio_private", "private"); - pass_url = "https://" + atob(gadget.state.opml.basic_login) + - "@" + private_url.split("//")[1]; - } - gadget.property_dict.monitor = current_document; - if (current_document.hasOwnProperty('data') && - current_document.data.hasOwnProperty('state')) { - - instance_content = Handlebars.compile( - templater.getElementById("details-widget-overview").innerHTML - ), - promise_list_template = Handlebars.compile( - templater.getElementById("promiselist-widget-template").innerHTML - ); - - // Resource view URLs - tmp_url = "#page=resource_view&key=" + gadget.state.opml_outline.reference; - tmp_process_url = "#page=process_view&key=" + - gadget.state.opml_outline.reference; - - content = instance_content({ - title: current_document.title, - date: current_document.date, - status: current_document.status, - error: current_document.state.error, - success: current_document.state.success, - instance: current_document._embedded.instance || '', - public_url: current_document._links - .hasOwnProperty('public_url') ? current_document - ._links.public_url.href : '', - private_url: pass_url, - rss_url: current_document._links.hasOwnProperty('rss_url') ? current_document._links.rss_url.href : '', - resource_url: tmp_url, - process_url: tmp_process_url, - warning: (current_document.status.toUpperCase() === "WARNING") ? true : false - }); - - for (i = 0; i < gadget.state.promise_list.length; i += 1) { - promise_list.push({ - date: formatDate( - new Date(gadget.state.promise_list[i].value.lastBuildDate) - ), - title: gadget.state.promise_list[i].value.source, - status: gadget.state.promise_list[i].value.category, - message: gadget.state.promise_list[i].value.comments || "No message output", - href: "#page=view&key=" + gadget.state.promise_list[i].value.reference - }); - if (current_document.status === "WARNING") { - promise_list[i].status = current_document.status; - } - } - promise_content = promise_list_template({ - promise_list: promise_list - }); - gadget.property_dict.element.querySelector(".overview-details .content-details") - .innerHTML = content; - gadget.property_dict.element.querySelector(".promise-list") - .innerHTML = promise_content; - return $(gadget.property_dict.element.querySelectorAll('fieldset[data-role="controlgroup"]')) - .controlgroup().controlgroup('refresh'); - } - - }) - .push(function () { - return gadget.property_dict.render_deferred.resolve(); - }); - }) - - ///////////////////////////////////////////////////////////////// - // declared service - ///////////////////////////////////////////////////////////////// - .declareService(function () { - var gadget = this; - - return new RSVP.Queue() - .push(function () { - return gadget.property_dict.render_deferred.promise; - }) - .push(function () { - var jio_options = { - type: "webhttp", - url: gadget.state.instance._links.private_url.href - .replace("jio_private", "private") + - 'documents/'.replace("jio_private", "private"), - basic_login: gadget.state.opml.basic_login - }; - $(".graph-full .signal").removeClass("ui-content-hidden"); - gadget.state.jio_gadget.createJio(jio_options); - return gadget.state.jio_gadget.get( - gadget.state.instance.data.state - ) - .push(undefined, function (error) { - console.log(error); - return {}; - }); - }) - .push(function (element_dict) { - var promise_data = [ - "Date, Success, Error, Warning", - new Date() + ",0,0,0" - ], - data = element_dict.data || promise_data, - data_list = [], - line_list, - i; - - data_list.push({ - value_dict: {"0": [], "1": []}, - type: "scatter", - axis_mapping_id_dict: {"1": "1_1"}, - title: "promises success counter" - }); - data_list.push({ - value_dict: {"0": [], "1": []}, - type: "scatter", - axis_mapping_id_dict: {"1": "1_2"}, - title: "promises error counter" - }); - for (i = 1; i < data.length; i += 1) { - line_list = data[i].split(','); - data_list[0].value_dict["0"].push(line_list[0]); - data_list[0].value_dict["1"].push(line_list[1]); - - // XXX repeating date entry - data_list[1].value_dict["0"].push(line_list[0]); - data_list[1].value_dict["1"].push(line_list[2]); - } - $(".graph-full .signal").addClass("ui-content-hidden"); - return gadget.state.graph_gadget.render({ - value:{ - data: data_list, - layout: { - axis_dict : { - "0": { - "title": "Success/Failure counter", - "scale_type": "linear", - "value_type": "date" - }, - "1_1": { - "title": "Promises success counter", - "position": "left" - }, - "1_2": { - "title": "Promises error counter", - "position": "left" - } - }, - title: "Success/Failure counter" - } - } - }); - }); - //return RSVP.all(promise_list); - }); - -}(window, rJS, RSVP, Handlebars, loopEventListener, $, atob)); diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_status_list_html.html b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_status_list_html.html deleted file mode 100644 index 02195bd84ab9151d3307358e2847fbca0254c6bf..0000000000000000000000000000000000000000 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_status_list_html.html +++ /dev/null @@ -1,21 +0,0 @@ -<!doctype html> -<html> - <head> - <meta charset="utf-8"> - <meta name="viewport" content="width=device-width, initial-scale=1"> - - <title>Monitoring Status Interface</title> - - <link href="gadget_monitoring_custom.css" rel="stylesheet" type="text/css"/> - - <script src="rsvp.js"></script> - <script src="renderjs.js"></script> - - <script src="gadget_monitoring_status_list.js"></script> - - </head> - - <body> - <div data-gadget-url="gadget_monitoring_widget_listbox.html" data-gadget-scope="listbox"></div> - </body> -</html> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_status_list_html.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_status_list_html.xml deleted file mode 100644 index 4dd1b15b7d36da818dbed6f94b90318770fca85e..0000000000000000000000000000000000000000 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_status_list_html.xml +++ /dev/null @@ -1,333 +0,0 @@ -<?xml version="1.0"?> -<ZopeData> - <record id="1" aka="AAAAAAAAAAE="> - <pickle> - <global name="Web Page" module="erp5.portal_type"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>_Access_contents_information_Permission</string> </key> - <value> - <tuple> - <string>Anonymous</string> - <string>Assignee</string> - <string>Assignor</string> - <string>Associate</string> - <string>Auditor</string> - <string>Manager</string> - <string>Owner</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Add_portal_content_Permission</string> </key> - <value> - <tuple> - <string>Assignor</string> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Change_local_roles_Permission</string> </key> - <value> - <tuple> - <string>Assignor</string> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Modify_portal_content_Permission</string> </key> - <value> - <tuple> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_View_Permission</string> </key> - <value> - <tuple> - <string>Anonymous</string> - <string>Assignee</string> - <string>Assignor</string> - <string>Associate</string> - <string>Auditor</string> - <string>Manager</string> - <string>Owner</string> - </tuple> - </value> - </item> - <item> - <key> <string>categories</string> </key> - <value> - <tuple> - <string>classification/collaborative/public</string> - </tuple> - </value> - </item> - <item> - <key> <string>content_md5</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>content_type</string> </key> - <value> <string>text/html</string> </value> - </item> - <item> - <key> <string>default_reference</string> </key> - <value> <string>gadget_monitoring_status_list.html</string> </value> - </item> - <item> - <key> <string>description</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>gadget_monitoring_status_list_html</string> </value> - </item> - <item> - <key> <string>language</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>portal_type</string> </key> - <value> <string>Web Page</string> </value> - </item> - <item> - <key> <string>short_title</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>title</string> </key> - <value> <string>Monitoring Status Interface List</string> </value> - </item> - <item> - <key> <string>version</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>workflow_history</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> - </value> - </item> - </dictionary> - </pickle> - </record> - <record id="2" aka="AAAAAAAAAAI="> - <pickle> - <global name="PersistentMapping" module="Persistence.mapping"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>data</string> </key> - <value> - <dictionary> - <item> - <key> <string>document_publication_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> - </value> - </item> - <item> - <key> <string>edit_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> - </value> - </item> - <item> - <key> <string>processing_status_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent> - </value> - </item> - </dictionary> - </value> - </item> - </dictionary> - </pickle> - </record> - <record id="3" aka="AAAAAAAAAAM="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>publish</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>zope</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1451393117.17</float> - <string>UTC</string> - </tuple> - </state> - </object> - </value> - </item> - <item> - <key> <string>validation_state</string> </key> - <value> <string>published</string> </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> - <record id="4" aka="AAAAAAAAAAQ="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>edit</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>zope</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>serial</string> </key> - <value> <string>961.6384.703.48554</string> </value> - </item> - <item> - <key> <string>state</string> </key> - <value> <string>current</string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1501792301.32</float> - <string>UTC</string> - </tuple> - </state> - </object> - </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> - <record id="5" aka="AAAAAAAAAAU="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>detect_converted_file</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>zope</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>external_processing_state</string> </key> - <value> <string>converted</string> </value> - </item> - <item> - <key> <string>serial</string> </key> - <value> <string>0.0.0.0</string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1451392817.2</float> - <string>UTC</string> - </tuple> - </state> - </object> - </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_status_list_js.js b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_status_list_js.js deleted file mode 100644 index 4a5063b455870f22dde375b0300121ac3a0c29dd..0000000000000000000000000000000000000000 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_status_list_js.js +++ /dev/null @@ -1,139 +0,0 @@ -/*global window, rJS, RSVP, URI, location, $, - loopEventListener, btoa */ -/*jslint nomen: true, indent: 2, maxerr: 3*/ -(function (window, rJS, $) { - "use strict"; - - rJS(window) - .ready(function (gadget) { - gadget.property_dict = { - render_deferred: RSVP.defer() - }; - }) - .ready(function (gadget) { - return gadget.getDeclaredGadget("listbox") - .push(function (listbox_gadget) { - gadget.property_dict.listbox = listbox_gadget; - }); - }) - .declareMethod('render', function (options) { - var gadget = this, - header = { - "title": 'Monitoring Promises Status' - }, - listbox_configuration = { - search_page: 'status_list', - search: options.search, - filter: options.filter || '', - column_list: [{ - title: 'Promise', - select: 'source' - }, { - title: 'Software Instance', - select: 'channel_item' - }, { - title: 'Hosting Subscription', - select: 'channel' - }, { - select: 'lastBuildDate', - title: 'Promise Date', - convertDate: true - }, { - select: 'comments', - title: 'Message', - css_class: 'text-overview' - }, { - select: 'category', - title: 'Status', - template: ' <span class="label label-{{value}}">{{value}}</span>', - css_class: 'ui-text-center' - }], - filter_column: {select: "category", "title": "Status"}, - query: { - "limit": [0, 400], - select_list: ['source', 'channel_item', 'channel', 'category', - 'date', 'comments', 'link', 'lastBuildDate', 'parent_id'], - query: '(portal_type:"promise") AND (active:true)', - sort_on: [["category", "ascending"], ["channel", "ascending"]] - } - }; - - return gadget.updateHeader(header) - .push(function () { - if (options.reset_filter === "1") { - return; - } - if (!options.hasOwnProperty('search') || !options.hasOwnProperty('filter')) { - return gadget.getSetting('status_list_selection_key') - .push(function (selection) { - if (selection) { - return gadget.redirect({ - page: 'status_list', - filter: options.filter || selection.filter, - search: options.search || selection.search - }); - } - }); - } - }) - .push(function () { - var selection = { - filter: options.filter || '', - search: options.search || '' - }; - if (options.reset_filter !== "1") { - return gadget.setSetting('status_list_selection_key', selection); - } else { - return ''; - } - }) - .push(function () { - gadget.property_dict.options = options; - return gadget.property_dict.listbox.render(listbox_configuration); - }); - }) - .declareAcquiredMethod("getSetting", "getSetting") - .declareAcquiredMethod("setSetting", "setSetting") - .declareAcquiredMethod("redirect", "redirect") - .declareAcquiredMethod("updateHeader", "updateHeader") - .declareAcquiredMethod("renderApplication", "renderApplication") - .declareService(function () { - var gadget = this, - current_sync_date; - - return gadget.getSetting('latest_sync_time') - .push(function (sync_time) { - current_sync_date = sync_time; - return gadget.getSetting('status_list_refresh_id'); - }) - .push(function (timer_id) { - var new_timer_id; - if (timer_id) { - clearInterval(timer_id); - } - new_timer_id = setInterval(function(){ - var hash = window.location.toString().split('#')[1], - scroll_position, - doc = document.documentElement; - if (hash.indexOf('page=status_list') >= 0) { - return gadget.getSetting('latest_sync_time') - .push(function (sync_time) { - if (sync_time > current_sync_date) { - scroll_position = (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0); - current_sync_date = sync_time; - return gadget.renderApplication({args: gadget.property_dict.options}) - .push(function () { - $(document).scrollTop(scroll_position); - }); - } - }); - } - }, 60000); - return gadget.setSetting('status_list_refresh_id', new_timer_id); - }); - - - }); - - -}(window, rJS, $)); \ No newline at end of file diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_status_list_js.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_status_list_js.xml deleted file mode 100644 index c3866b50595eb7edc72ec24987f969eed638907c..0000000000000000000000000000000000000000 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_status_list_js.xml +++ /dev/null @@ -1,329 +0,0 @@ -<?xml version="1.0"?> -<ZopeData> - <record id="1" aka="AAAAAAAAAAE="> - <pickle> - <global name="Web Script" module="erp5.portal_type"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>_Access_contents_information_Permission</string> </key> - <value> - <tuple> - <string>Anonymous</string> - <string>Assignee</string> - <string>Assignor</string> - <string>Associate</string> - <string>Auditor</string> - <string>Manager</string> - <string>Owner</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Add_portal_content_Permission</string> </key> - <value> - <tuple> - <string>Assignor</string> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Change_local_roles_Permission</string> </key> - <value> - <tuple> - <string>Assignor</string> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Modify_portal_content_Permission</string> </key> - <value> - <tuple> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_View_Permission</string> </key> - <value> - <tuple> - <string>Anonymous</string> - <string>Assignee</string> - <string>Assignor</string> - <string>Associate</string> - <string>Auditor</string> - <string>Manager</string> - <string>Owner</string> - </tuple> - </value> - </item> - <item> - <key> <string>categories</string> </key> - <value> - <tuple> - <string>classification/collaborative/public</string> - </tuple> - </value> - </item> - <item> - <key> <string>content_md5</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>content_type</string> </key> - <value> <string>text/javascript</string> </value> - </item> - <item> - <key> <string>default_reference</string> </key> - <value> <string>gadget_monitoring_status_list.js</string> </value> - </item> - <item> - <key> <string>description</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>gadget_monitoring_status_list_js</string> </value> - </item> - <item> - <key> <string>language</string> </key> - <value> <string>en</string> </value> - </item> - <item> - <key> <string>portal_type</string> </key> - <value> <string>Web Script</string> </value> - </item> - <item> - <key> <string>short_title</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>title</string> </key> - <value> <string>Monitoring Status List Gadget JS</string> </value> - </item> - <item> - <key> <string>version</string> </key> - <value> <string>001</string> </value> - </item> - <item> - <key> <string>workflow_history</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> - </value> - </item> - </dictionary> - </pickle> - </record> - <record id="2" aka="AAAAAAAAAAI="> - <pickle> - <global name="PersistentMapping" module="Persistence.mapping"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>data</string> </key> - <value> - <dictionary> - <item> - <key> <string>document_publication_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> - </value> - </item> - <item> - <key> <string>edit_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> - </value> - </item> - <item> - <key> <string>processing_status_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent> - </value> - </item> - </dictionary> - </value> - </item> - </dictionary> - </pickle> - </record> - <record id="3" aka="AAAAAAAAAAM="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>publish</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>zope</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1452872767.48</float> - <string>UTC</string> - </tuple> - </state> - </object> - </value> - </item> - <item> - <key> <string>validation_state</string> </key> - <value> <string>published</string> </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> - <record id="4" aka="AAAAAAAAAAQ="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>edit</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>zope</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>serial</string> </key> - <value> <string>961.42463.34618.20070</string> </value> - </item> - <item> - <key> <string>state</string> </key> - <value> <string>current</string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1503676888.75</float> - <string>UTC</string> - </tuple> - </state> - </object> - </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> - <record id="5" aka="AAAAAAAAAAU="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>detect_converted_file</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>zope</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>external_processing_state</string> </key> - <value> <string>converted</string> </value> - </item> - <item> - <key> <string>serial</string> </key> - <value> <string>0.0.0.0</string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1452872717.99</float> - <string>UTC</string> - </tuple> - </state> - </object> - </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_widget_listbox_html.html b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_widget_listbox_html.html deleted file mode 100644 index 6bdb925e62d6cc8ac2b46738889f7b8f93a72c99..0000000000000000000000000000000000000000 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_widget_listbox_html.html +++ /dev/null @@ -1,105 +0,0 @@ -<!DOCTYPE html> -<html> - <head> - <meta charset="utf-8" /> - <meta name="viewport" content="width=device-width, user-scalable=no" /> - <title>Monitoring Widget Listbox</title> - - <!-- renderjs --> - <script src="rsvp.js" type="text/javascript"></script> - <script src="renderjs.js" type="text/javascript"></script> - <script src="handlebars.js"></script> - - <script id="listbox-widget-table" type="text/x-handlebars-template"> - {{#if enable_search}} - <div class="listbox-header"> - <form class='search'> - <div class="ui-grid-a ui-responsive"> - <div class="ui-block-a"> - <div class="ui-field-contain"> - <div class="ui-input-text ui-body-{{widget_theme}} ui-corner-all ui-shadow-inset ui-input-has-clear {{widget_status_class}}" style="border-color: #D6D8E0;"> - <input type="text" data-enhanced="true" value="{{search}}" name="search" {{widget_status_attribute}} /> - <div class="ui-btn ui-input-clear ui-input-btn ui-corner-all ui-icon-search ui-btn-icon-notext" data-i18n="[node]header-submit"> - Submit<input data-enhanced="true" type="submit" data-i18n="[value]header-submit" value="Submit" {{widget_status_attribute}} /> - </div> - </div> - </div> - </div> - <div class="ui-block-b"> - <div class="ui-field-contain"> - <div data-role="controlgroup" data-type="horizontal"> - <!--<a href="#" class="ui-shadow ui-btn ui-corner-all listbox-refresh"><i class="fa fa-refresh"></i></a>--> - <a href="#" class="ui-shadow ui-btn ui-corner-all listbox-filter"><i class="fa fa-filter"></i></i></a> - </div> - </div> - </div> - </div> - </form> - </div> - {{/if}} - <table class="ui-responsive ui-body-c ui-table-inset custom-force-list"> - <thead class="ui-bar-inherit"> - <tr> - {{#each column_list}} - <th>{{this}}</th> - {{/each}} - </tr> - </thead> - {{> listbox-widget-table-partial}} - <tfoot class="ui-bar-inherit"></tfoot> - </table> - </script> - - <script id="listbox-widget-table-partial" type="text/x-handlebars-template"> - <tbody> - {{#each row_list}} - <tr> - {{#each cell_list}} - {{#if href}} - {{#if html_value}} - <td class='{{class}}'><a class="ui-link" href="{{href}}">{{{html_value}}}</a></td> - {{else}} - <td class='{{class}}'><a class="ui-link" title='{{value}}' href="{{href}}">{{value}}</a></td> - {{/if}} - {{else}} - {{#if html_value}} - <td class='{{class}}'><a class="ui-link">{{{html_value}}}</a></td> - {{else}} - <td class='{{class}}'><a class="ui-link" title='{{value}}'>{{value}}</a></td> - {{/if}} - {{/if}} - {{/each}} - </tr> - {{/each}} - </tbody> - </script> - - <!-- custom script --> - <script src="gadget_monitoring_widget_listbox.js" type="text/javascript"></script> - - </head> - <body> - <div class="listbox-filter-panel"> - <form class='filter'> - <h2>Filter Result</h2> - <fieldset data-role="controlgroup"> - <h3>Status contain:</h3> - <input type="checkbox" id="monitor-promise-success" name="monitor-filter-status" value="success" checked="checked"> - <label for="monitor-promise-success">Success</label> - <input type="checkbox" id="monitor-promise-error" name="monitor-filter-status" value="error" checked="checked"> - <label for="monitor-promise-error">Error</label> - <input type="checkbox" id="monitor-promise-warning" name="monitor-filter-status" value="warning" checked="checked"> - <label for="monitor-promise-warning">Warning</label> - </fieldset> - <div class="ui-grid-a"> - <input data-enhanced="true" type="submit" data-rel="close" class="ui-btn ui-shadow ui-corner-all ui-btn-inline ui-mini pvalidate" value="Validate" /> - </div> - </form> - </div> - <div class="custom-grid-wrap"> - <div class="custom-grid ui-corner-all ui-body-inherit ui-shadow ui-corner-all" style="padding: 10px;"> - <div class="ui-body-c ui-corner-all"></div> - </div> - </div> - </body> -</html> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_widget_listbox_html.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_widget_listbox_html.xml deleted file mode 100644 index 6993341c302ff1e561599722011505567faa50ac..0000000000000000000000000000000000000000 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_widget_listbox_html.xml +++ /dev/null @@ -1,333 +0,0 @@ -<?xml version="1.0"?> -<ZopeData> - <record id="1" aka="AAAAAAAAAAE="> - <pickle> - <global name="Web Page" module="erp5.portal_type"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>_Access_contents_information_Permission</string> </key> - <value> - <tuple> - <string>Anonymous</string> - <string>Assignee</string> - <string>Assignor</string> - <string>Associate</string> - <string>Auditor</string> - <string>Manager</string> - <string>Owner</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Add_portal_content_Permission</string> </key> - <value> - <tuple> - <string>Assignor</string> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Change_local_roles_Permission</string> </key> - <value> - <tuple> - <string>Assignor</string> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Modify_portal_content_Permission</string> </key> - <value> - <tuple> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_View_Permission</string> </key> - <value> - <tuple> - <string>Anonymous</string> - <string>Assignee</string> - <string>Assignor</string> - <string>Associate</string> - <string>Auditor</string> - <string>Manager</string> - <string>Owner</string> - </tuple> - </value> - </item> - <item> - <key> <string>categories</string> </key> - <value> - <tuple> - <string>classification/collaborative/team</string> - </tuple> - </value> - </item> - <item> - <key> <string>content_md5</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>content_type</string> </key> - <value> <string>text/html</string> </value> - </item> - <item> - <key> <string>default_reference</string> </key> - <value> <string>gadget_monitoring_widget_listbox.html</string> </value> - </item> - <item> - <key> <string>description</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>gadget_monitoring_widget_listbox_html</string> </value> - </item> - <item> - <key> <string>language</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>portal_type</string> </key> - <value> <string>Web Page</string> </value> - </item> - <item> - <key> <string>short_title</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>title</string> </key> - <value> <string>Monitoring Widget Listbox</string> </value> - </item> - <item> - <key> <string>version</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>workflow_history</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> - </value> - </item> - </dictionary> - </pickle> - </record> - <record id="2" aka="AAAAAAAAAAI="> - <pickle> - <global name="PersistentMapping" module="Persistence.mapping"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>data</string> </key> - <value> - <dictionary> - <item> - <key> <string>document_publication_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> - </value> - </item> - <item> - <key> <string>edit_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> - </value> - </item> - <item> - <key> <string>processing_status_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent> - </value> - </item> - </dictionary> - </value> - </item> - </dictionary> - </pickle> - </record> - <record id="3" aka="AAAAAAAAAAM="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>publish</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>zope</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1452874797.17</float> - <string>UTC</string> - </tuple> - </state> - </object> - </value> - </item> - <item> - <key> <string>validation_state</string> </key> - <value> <string>published</string> </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> - <record id="4" aka="AAAAAAAAAAQ="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>edit</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>zope</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>serial</string> </key> - <value> <string>961.11056.28633.47854</string> </value> - </item> - <item> - <key> <string>state</string> </key> - <value> <string>current</string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1502197080.98</float> - <string>UTC</string> - </tuple> - </state> - </object> - </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> - <record id="5" aka="AAAAAAAAAAU="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>detect_converted_file</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>zope</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>external_processing_state</string> </key> - <value> <string>converted</string> </value> - </item> - <item> - <key> <string>serial</string> </key> - <value> <string>0.0.0.0</string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1452874752.87</float> - <string>UTC</string> - </tuple> - </state> - </object> - </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_widget_listbox_js.js b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_widget_listbox_js.js deleted file mode 100644 index 7056f8997454c3d24a8f1313c667c6a0e026d1df..0000000000000000000000000000000000000000 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_widget_listbox_js.js +++ /dev/null @@ -1,285 +0,0 @@ -/*global window, rJS, RSVP, Handlebars, loopEventListener */ -/*jslint nomen: true, indent: 2 */ -(function (window, rJS, RSVP, Handlebars, loopEventListener) { - "use strict"; - - ///////////////////////////////////////////////////////////////// - // templates - ///////////////////////////////////////////////////////////////// - var gadget_klass = rJS(window), - templater = gadget_klass.__template_element, - - listbox_widget_table = Handlebars.compile( - templater.getElementById("listbox-widget-table").innerHTML - ); - Handlebars.registerPartial( - "listbox-widget-table-partial", - templater.getElementById("listbox-widget-table-partial").innerHTML - ); - - ///////////////////////////////////////////////////////////////// - // some methods - ///////////////////////////////////////////////////////////////// - var formatDate = function(d) { - function addZero(n) { - return n < 10 ? '0' + n : '' + n; - } - - return d.getFullYear() + "-" + addZero(d.getMonth()+1) - + "-" + addZero(d.getDate()) + " " + addZero(d.getHours()) - + ":" + addZero(d.getMinutes()) + ":" + addZero(d.getSeconds()); - }; - - function renderFomTemplate(template, value) { - var html_template; - - if (!template) { - return ""; - } - html_template = Handlebars.compile(template); - return html_template({value: value}); - } - - gadget_klass - - ///////////////////////////////////////////////////////////////// - // ready - ///////////////////////////////////////////////////////////////// - .ready(function (gadget) { - gadget.property_dict = { - render_deferred: RSVP.defer() - }; - }) - - .ready(function (gadget) { - return gadget.getElement() - .push(function (element) { - gadget.property_dict.element = element; - gadget.property_dict.filter_panel = $(gadget.property_dict.element.querySelector(".listbox-filter-panel")); - }); - }) - .ready(function (gadget) { - gadget.property_dict.filter_panel.panel({ - "position-fixed": true, - "display": "overlay", - "position": "right", - "theme": "b" - }); - }) - .ready(function (gadget) { - return gadget.property_dict.filter_panel.trigger("create"); - }) - - ///////////////////////////////////////////////////////////////// - // published methods - ///////////////////////////////////////////////////////////////// - - ///////////////////////////////////////////////////////////////// - // acquired methods - ///////////////////////////////////////////////////////////////// - .declareAcquiredMethod("jio_allDocs", "jio_allDocs") - .declareAcquiredMethod("getUrlFor", "getUrlFor") - .declareAcquiredMethod("translate", "translate") - .declareAcquiredMethod("redirect", "redirect") - - ///////////////////////////////////////////////////////////////// - // declared methods - ///////////////////////////////////////////////////////////////// - .declareMethod('render', function (option_dict) { - var gadget = this, - content = '', - filter_part_list = [], - j, - k, - k_len, - search_list = [], - translated_column_list = [], - all_docs_result_list = []; - - // store initial configuration - gadget.property_dict.option_dict = option_dict; - - // filter query - if (option_dict.filter_column === undefined) { - option_dict.filter_column = {select: "status"}; - } - if (option_dict.filter && option_dict.filter !== '') { - for (j = 0; j < option_dict.filter.split('+').length; j += 1) { - filter_part_list.push( - '('+ option_dict.filter_column.select +':"' + - option_dict.filter.split('+')[j].toUpperCase() + '")' - ); - } - if (option_dict.query.query) { - option_dict.query.query += ' AND (' + filter_part_list.join(' OR ') + ')'; - } else { - option_dict.query.query = '(' + filter_part_list.join(' OR ') + ')'; - } - } - // Create the search query - if (option_dict.search) { - for (k = 0, k_len = option_dict.column_list.length; k < k_len; k += 1) { - search_list.push(option_dict.column_list[k].select + ':"%' + option_dict.search + '%"'); - } - if (option_dict.query.query) { - option_dict.query.query = '(' + search_list.join(' OR ') + ') AND ' + option_dict.query.query; - } else { - option_dict.query.query = '(' + search_list.join(' OR ') + ')'; - } - } - if (option_dict.view === '' || option_dict.view === undefined) { - option_dict.view = 'view'; - } - return gadget.jio_allDocs(option_dict.query) - .push(function (all_docs_result_list) { - var row_list = [], - cell_list, - current_value, - i_len, - i, - j_len, - j; - - // build handlebars object - for (j = 0, j_len = all_docs_result_list.data.total_rows; j < j_len; j += 1) { - cell_list = []; - for (i = 0, i_len = option_dict.column_list.length; i < i_len; i += 1) { - current_value = all_docs_result_list.data.rows[j] - .value[option_dict.column_list[i].select]; - if (option_dict.column_list[i].convertDate) { - current_value = formatDate(new Date(current_value)); - } - cell_list.push({ - "href": (option_dict.disable_href) ? '' : "#page=" + - option_dict.view + "&key=" + - all_docs_result_list.data.rows[j].id, - "value": current_value, - "html_value": renderFomTemplate( - option_dict.column_list[i].template || '', - current_value - ), - "class": option_dict.column_list[i].css_class || '' - }); - } - row_list.push({"cell_list": cell_list}); - } - - for (i = 0; i < option_dict.column_list.length; i += 1) { - translated_column_list.push(gadget.translate(option_dict.column_list[i].title)); - } - return RSVP.all([ - row_list, - RSVP.all(translated_column_list) - ]); - }) - .push(function (result_list) { - var enable_search = true; - if (option_dict.enable_search !== undefined) { - enable_search = option_dict.enable_search; - } - if (!enable_search) { - $(gadget.property_dict.element.querySelector(".custom-grid")) - .removeClass('ui-shadow').css('padding', '0'); - } - content += listbox_widget_table({ - widget_theme : option_dict.widget_theme, - search: option_dict.search, - enable_search: enable_search, - column_list: result_list[1], - row_list: result_list[0] - }); - - gadget.property_dict.element.querySelector(".custom-grid .ui-body-c") - .innerHTML = content; - gadget.property_dict.render_deferred.resolve(); - }); - }) - - ///////////////////////////////////////////////////////////////// - // declared service - ///////////////////////////////////////////////////////////////// - .declareService(function () { - var gadget = this; - return new RSVP.Queue() - .push(function () { - return gadget.property_dict.render_deferred.promise; - }) - .push(function () { - var form = gadget.property_dict.element.querySelector('form.search'), - refresh = gadget.property_dict.element.querySelector('.listbox-refresh'), - filter = gadget.property_dict.element.querySelector('.listbox-filter'), - form_filter = gadget.property_dict.element.querySelector('form.filter'), - promise_list = []; - - if (form !== undefined && form !== null && form !== '') { - promise_list.push(loopEventListener( - form, - 'submit', - false, - function (evt) { - return gadget.redirect({ - jio_key: gadget.property_dict.option_dict.jio_key || '', - page: gadget.property_dict.option_dict.search_page || '', - filter: gadget.property_dict.option_dict.filter || '', - search: evt.target[0].value - }); - } - )); - } - if (refresh !== undefined && refresh !== null && refresh !== '') { - promise_list.push(loopEventListener( - refresh, - 'click', - false, - function (evt) { - return gadget.redirect({ - page: gadget.property_dict.option_dict.search_page || '', - sort_on: gadget.property_dict.option_dict.sort_on || '', - search: gadget.property_dict.option_dict.search || '', - filter: gadget.property_dict.option_dict.filter || '', - t: Date.now() / 1000 | 0 - }); - }) - ); - } - if (filter !== undefined && filter !== null && filter !== '') { - promise_list.push(loopEventListener( - filter, - 'click', - false, - function (evt) { - gadget.property_dict.filter_panel.panel("toggle"); - }) - ); - } - if (form_filter !== undefined && form_filter !== null && form_filter !== '') { - promise_list.push(loopEventListener( - form_filter, - 'submit', - false, - function (evt) { - var filter_status = [], - element = gadget.property_dict.element; - if (element.querySelector('#monitor-promise-error').checked) { - filter_status.push('error'); - } - if (element.querySelector('#monitor-promise-success').checked) { - filter_status.push('ok'); - } - if (element.querySelector('#monitor-promise-warning').checked) { - filter_status.push('warning'); - } - return gadget.redirect({ - page: gadget.property_dict.option_dict.search_page || '', - sort_on: gadget.property_dict.option_dict.sort_on || '', - search: gadget.property_dict.option_dict.search || '', - filter: filter_status.join('+') - }); - }) - ); - } - return RSVP.all(promise_list); - }); - }); - -}(window, rJS, RSVP, Handlebars, loopEventListener)); diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_widget_listbox_js.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_widget_listbox_js.xml deleted file mode 100644 index 442db8542c77f007b5ddea6045d8e215659121b7..0000000000000000000000000000000000000000 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_widget_listbox_js.xml +++ /dev/null @@ -1,333 +0,0 @@ -<?xml version="1.0"?> -<ZopeData> - <record id="1" aka="AAAAAAAAAAE="> - <pickle> - <global name="Web Script" module="erp5.portal_type"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>_Access_contents_information_Permission</string> </key> - <value> - <tuple> - <string>Anonymous</string> - <string>Assignee</string> - <string>Assignor</string> - <string>Associate</string> - <string>Auditor</string> - <string>Manager</string> - <string>Owner</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Add_portal_content_Permission</string> </key> - <value> - <tuple> - <string>Assignor</string> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Change_local_roles_Permission</string> </key> - <value> - <tuple> - <string>Assignor</string> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Modify_portal_content_Permission</string> </key> - <value> - <tuple> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_View_Permission</string> </key> - <value> - <tuple> - <string>Anonymous</string> - <string>Assignee</string> - <string>Assignor</string> - <string>Associate</string> - <string>Auditor</string> - <string>Manager</string> - <string>Owner</string> - </tuple> - </value> - </item> - <item> - <key> <string>categories</string> </key> - <value> - <tuple> - <string>classification/collaborative/team</string> - </tuple> - </value> - </item> - <item> - <key> <string>content_md5</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>content_type</string> </key> - <value> <string>text/javascript</string> </value> - </item> - <item> - <key> <string>default_reference</string> </key> - <value> <string>gadget_monitoring_widget_listbox.js</string> </value> - </item> - <item> - <key> <string>description</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>gadget_monitoring_widget_listbox_js</string> </value> - </item> - <item> - <key> <string>language</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>portal_type</string> </key> - <value> <string>Web Script</string> </value> - </item> - <item> - <key> <string>short_title</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>title</string> </key> - <value> <string>Monitoring Widget Listbox JS</string> </value> - </item> - <item> - <key> <string>version</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>workflow_history</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> - </value> - </item> - </dictionary> - </pickle> - </record> - <record id="2" aka="AAAAAAAAAAI="> - <pickle> - <global name="PersistentMapping" module="Persistence.mapping"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>data</string> </key> - <value> - <dictionary> - <item> - <key> <string>document_publication_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> - </value> - </item> - <item> - <key> <string>edit_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> - </value> - </item> - <item> - <key> <string>processing_status_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent> - </value> - </item> - </dictionary> - </value> - </item> - </dictionary> - </pickle> - </record> - <record id="3" aka="AAAAAAAAAAM="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>publish</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>zope</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1452874660.43</float> - <string>UTC</string> - </tuple> - </state> - </object> - </value> - </item> - <item> - <key> <string>validation_state</string> </key> - <value> <string>published</string> </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> - <record id="4" aka="AAAAAAAAAAQ="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>edit</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>zope</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>serial</string> </key> - <value> <string>961.21935.10239.63812</string> </value> - </item> - <item> - <key> <string>state</string> </key> - <value> <string>current</string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1502456005.72</float> - <string>UTC</string> - </tuple> - </state> - </object> - </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> - <record id="5" aka="AAAAAAAAAAU="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>detect_converted_file</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>zope</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>external_processing_state</string> </key> - <value> <string>converted</string> </value> - </item> - <item> - <key> <string>serial</string> </key> - <value> <string>0.0.0.0</string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1452874408.25</float> - <string>UTC</string> - </tuple> - </state> - </object> - </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_global_view_html.html b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_global_view_html.html new file mode 100644 index 0000000000000000000000000000000000000000..d592b30208a02bcbfaaf49ee45dcf71a51ac00ed --- /dev/null +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_global_view_html.html @@ -0,0 +1,32 @@ +<!doctype html> +<html> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + + <link href="gadget_officejs_monitoring_custom.css" rel="stylesheet" type="text/css"/> + <title>OfficeJS Jio Web Page View</title> + + <script src="rsvp.js"></script> + <script src="renderjs.js"></script> + <script src="handlebars.js"></script> + + <script class="render-link-template" type="text/x-handlebars-template"> + <a href="{{url}}" target="{{target}}">{{title}}</a> + </script> + + <script src="gadget_officejs_jio_global_view.js"></script> + + </head> + <body> + <div data-gadget-url="gadget_officejs_monitoring_jio.html" data-gadget-scope="jio_gadget" data-gadget-sandbox="public"></div> + <form> + <button type="submit" class="ui-btn ui-btn-b ui-btn-inline + ui-icon-edit ui-btn-icon-right ui-screen-hidden"></button> + <div data-gadget-url="gadget_erp5_form.html" + data-gadget-scope="form_view" + data-gadget-sandbox="public"> + </div> + </form> + </body> +</html> \ No newline at end of file diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_global_view_html.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_global_view_html.xml new file mode 100644 index 0000000000000000000000000000000000000000..3c8244f66153d717856c52a495d0e56c23ca249b --- /dev/null +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_global_view_html.xml @@ -0,0 +1,340 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Web Page" module="erp5.portal_type"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_Access_contents_information_Permission</string> </key> + <value> + <tuple> + <string>Anonymous</string> + <string>Assignee</string> + <string>Assignor</string> + <string>Associate</string> + <string>Auditor</string> + <string>Manager</string> + <string>Owner</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Add_portal_content_Permission</string> </key> + <value> + <tuple> + <string>Assignee</string> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Change_local_roles_Permission</string> </key> + <value> + <tuple> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Modify_portal_content_Permission</string> </key> + <value> + <tuple> + <string>Assignee</string> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_View_Permission</string> </key> + <value> + <tuple> + <string>Anonymous</string> + <string>Assignee</string> + <string>Assignor</string> + <string>Associate</string> + <string>Auditor</string> + <string>Manager</string> + <string>Owner</string> + </tuple> + </value> + </item> + <item> + <key> <string>categories</string> </key> + <value> + <tuple> + <string>classification/collaborative/team</string> + </tuple> + </value> + </item> + <item> + <key> <string>content_md5</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>text/html</string> </value> + </item> + <item> + <key> <string>default_reference</string> </key> + <value> <string>gadget_officejs_jio_global_view.html</string> </value> + </item> + <item> + <key> <string>description</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>gadget_officejs_jio_global_view_html</string> </value> + </item> + <item> + <key> <string>language</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>portal_type</string> </key> + <value> <string>Web Page</string> </value> + </item> + <item> + <key> <string>short_title</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string>OfficeJS Jio Software Instance View</string> </value> + </item> + <item> + <key> <string>url_string</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>version</string> </key> + <value> <string>001</string> </value> + </item> + <item> + <key> <string>workflow_history</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="2" aka="AAAAAAAAAAI="> + <pickle> + <global name="PersistentMapping" module="Persistence.mapping"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> + <dictionary> + <item> + <key> <string>document_publication_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> + </value> + </item> + <item> + <key> <string>edit_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> + </value> + </item> + <item> + <key> <string>processing_status_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent> + </value> + </item> + </dictionary> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="3" aka="AAAAAAAAAAM="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> + </pickle> + <pickle> + <tuple> + <none/> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>publish_alive</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1507041798.03</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + <item> + <key> <string>validation_state</string> </key> + <value> <string>published_alive</string> </value> + </item> + </dictionary> + </list> + </tuple> + </pickle> + </record> + <record id="4" aka="AAAAAAAAAAQ="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> + </pickle> + <pickle> + <tuple> + <none/> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>edit</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>serial</string> </key> + <value> <string>962.47216.7271.9574</string> </value> + </item> + <item> + <key> <string>state</string> </key> + <value> <string>current</string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1507901938.7</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + </dictionary> + </list> + </tuple> + </pickle> + </record> + <record id="5" aka="AAAAAAAAAAU="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> + </pickle> + <pickle> + <tuple> + <none/> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>detect_converted_file</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>external_processing_state</string> </key> + <value> <string>converted</string> </value> + </item> + <item> + <key> <string>serial</string> </key> + <value> <string>0.0.0.0</string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1507041764.07</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + </dictionary> + </list> + </tuple> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_global_view_js.js b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_global_view_js.js new file mode 100644 index 0000000000000000000000000000000000000000..5a0492e894ecdcb2a080f530d53c8a37c0b82eb9 --- /dev/null +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_global_view_js.js @@ -0,0 +1,552 @@ +/*global window, rJS, RSVP, Handlebars */ +/*jslint nomen: true, indent: 2, maxerr: 3 */ +(function (window, rJS, RSVP, Handlebars) { + "use strict"; + + var gadget_klass = rJS(window), + source = gadget_klass.__template_element + .querySelector(".render-link-template") + .innerHTML, + link_template = Handlebars.compile(source); + gadget_klass + .setState({ + jio_gadget: "", + instance: "", + opml: "", + opml_outline: "", + graph_value: {} + }) + .ready(function (gadget) { + return gadget.getDeclaredGadget("jio_gadget") + .push(function (jio_gadget) { + return gadget.changeState({"jio_gadget": jio_gadget}); + }); + }) + ///////////////////////////////////////////////////////////////// + // Acquired methods + ///////////////////////////////////////////////////////////////// + .declareAcquiredMethod("updateHeader", "updateHeader") + .declareAcquiredMethod("getUrlParameter", "getUrlParameter") + .declareAcquiredMethod("getUrlFor", "getUrlFor") + .declareAcquiredMethod("jio_get", "jio_get") + .declareAcquiredMethod("jio_allDocs", "jio_allDocs") + .declareAcquiredMethod("notifySubmitting", "notifySubmitting") + .declareAcquiredMethod("notifySubmitted", 'notifySubmitted') + .declareAcquiredMethod("translateHtml", "translateHtml") + .declareAcquiredMethod("redirect", "redirect") + ///////////////////////////////////////////////////////////////// + // declared methods + ///////////////////////////////////////////////////////////////// + + .declareMethod("render", function (options) { + var gadget = this, + hosting_subscription, + software_instance, + opml_outline, + opml_doc; + + return new RSVP.Queue() + .push(function () { + return gadget.changeState({instance: options.doc}); + }) + .push(function () { + // Get opml outline document + return gadget.jio_get(gadget.state.instance.parent_id); + }) + .push(function (opml_outline) { + return gadget.changeState({ + opml_outline: opml_outline + }); + }) + .push(function () { + return gadget.jio_get(gadget.state.opml_outline.parent_url); + }) + .push(function (opml_doc) { + return gadget.changeState({ + opml: opml_doc + }); + }) + .push(function () { + return gadget.state.jio_gadget.createJio({ + type: "webhttp", + // XXX fix of url + url: gadget.state.instance._links.private_url.href + .replace("jio_private", "private") + + 'documents/', + basic_login: gadget.state.opml.basic_login + }); + }) + .push(function () { + return gadget.getUrlFor({command: 'push_history', options: { + jio_key: options.doc.reference, + page: 'ojsm_hosting_subscription_view', + opml_key: gadget.state.opml.url + }}); + }) + .push(function (hosting_url) { + var pass_url, + public_url, + private_url, + current_document = gadget.state.instance; + + // fix URLs + private_url = gadget.state.instance._links + .private_url.href.replace("jio_private", "private"); + public_url = gadget.state.instance._links. + public_url.href.replace("jio_public", "public"); + pass_url = "https://" + atob(gadget.state.opml.basic_login) + + "@" + private_url.split("//")[1]; + + return gadget.changeState({ + jio_key: options.jio_key, + status: gadget.state.instance.status, + report_date: new Date(gadget.state.instance.date), + title: current_document.title, + error: current_document.state.error, + success: current_document.state.success, + public_url: public_url, + private_url: pass_url, + rss_url: current_document._links.rss_url.href, + //resource_url: tmp_url, + //process_url: tmp_process_url, + hosting_title: gadget.state.opml.title, + hosting_url: hosting_url, + partition_ipv6: current_document._embedded.instance.ipv6, + partition_ipv4: current_document._embedded.instance.ipv4, + computer_partition: current_document._embedded.instance.partition, + computer_reference: current_document._embedded.instance.computer, + software_release: current_document._embedded.instance['software-release'] + }); + }); + }) + + .onEvent('submit', function () { + // ON submit, refresh page + return this.redirect({command: 'reload'}); + }) + + .declareMethod("triggerSubmit", function () { + return this.element.querySelector('button[type="submit"]').click(); + }) + + .allowPublicAcquisition("jio_allDocs", function (param_list) { + var gadget = this; + return gadget.jio_allDocs(param_list[0]) + .push(function (result) { + var i, value, len = result.data.total_rows; + for (i = 0; i < len; i += 1) { + if (result.data.rows[i].value.hasOwnProperty("lastBuildDate")) { + value = new Date(result.data.rows[i].value.lastBuildDate); + result.data.rows[i].value.lastBuildDate = { + allow_empty_time: 0, + ampm_time_style: 0, + css_class: "date_field", + date_only: 0, + description: "The Date", + editable: 0, + hidden: 0, + hidden_day_is_last_day: 0, + "default": value.toUTCString(), + key: "lastBuildDate", + required: 0, + timezone_style: 0, + title: "Promise Date", + type: "DateTimeField" + }; + result.data.rows[i].value["listbox_uid:list"] = { + key: "listbox_uid:list", + value: 2713 + }; + } + if (result.data.rows[i].value.hasOwnProperty("comments")) { + value = result.data.rows[i].value.comments.slice(0, 30); + if (result.data.rows[i].value.comments.length >= 30) { + value += "..."; + } + result.data.rows[i].value.comments = { + css_class: "string_field", + description: "The Message", + editable: 0, + hidden: 0, + "default": value, + key: "comments", + required: 0, + title: "Message", + type: "StringField" + }; + result.data.rows[i].value["listbox_uid:list"] = { + key: "listbox_uid:list", + value: 2713 + }; + } + if (result.data.rows[i].value.hasOwnProperty("category")) { + value = result.data.rows[i].value.category; + result.data.rows[i].value.category = { + css_class: "", + description: "The Status", + hidden: 0, + "default": value, + key: "category", + url: "gadget_erp5_field_status.html", + title: "Status", + type: "GadgetField" + }; + result.data.rows[i].value["listbox_uid:list"] = { + key: "listbox_uid:list", + value: 2713 + }; + } + } + return result; + }); + }) + .onStateChange(function () { + var gadget = this, + graph_value = {}; + if (!gadget.state.hasOwnProperty('status') && + !gadget.state.hasOwnProperty('title')) { + return; + } + return new RSVP.Queue() + .push(function () { + // Move this to not slow down the page rendering... + return gadget.state.jio_gadget.get( + gadget.state.instance.data.state + ) + .push(undefined, function (error) { + console.log(error); + return {}; + }) + .push(function (element_dict) { + var promise_data = [ + "Date, Success, Error, Warning", + new Date() + ",0,0,0" + ], + data = element_dict.data || promise_data, + data_list = [], + line_list, + i; + + data_list.push({ + value_dict: {"0": [], "1": []}, + type: "scatter", + axis_mapping_id_dict: {"1": "1_1"}, + title: "promises success" + }); + data_list.push({ + value_dict: {"0": [], "1": []}, + type: "scatter", + axis_mapping_id_dict: {"1": "1_2"}, + title: "promises error" + }); + for (i = 1; i < data.length; i += 1) { + line_list = data[i].split(','); + data_list[0].value_dict["0"].push(line_list[0]); + data_list[0].value_dict["1"].push(line_list[1]); + + // XXX repeating date entry + data_list[1].value_dict["0"].push(line_list[0]); + data_list[1].value_dict["1"].push(line_list[2]); + } + graph_value = { + data: data_list, + layout: { + axis_dict : { + "0": { + "title": "Success/Failure Progression", + "scale_type": "linear", + "value_type": "date" + }, + "1_1": { + "title": "Promises success", + "position": "right" + }, + "1_2": { + "title": "Promises error", + "position": "right" + } + }, + title: "Success/Failure Progression" + } + }; + }); + }) + .push(function () { + //gadget.element.querySelector('.template-view').innerHTML = html; + return gadget.getDeclaredGadget('form_view'); + }) + .push(function (form_gadget) { + var column_list = [ + ['source', 'Promise'], + ['lastBuildDate', 'Promise Date'], + ['comments', 'Message'], + ['category', 'Status'] + ]; + return form_gadget.render({ + erp5_document: { + "_embedded": {"_view": { + "your_title": { + "description": "", + "title": "Instance Title", + "default": gadget.state.title, + "css_class": "", + "required": 0, + "editable": 0, + "key": "title", + "hidden": 0, + "type": "StringField" + }, + "your_status": { + "description": "", + "title": "Status", + "default": gadget.state.status, + "css_class": "", + "required": 1, + "editable": 0, + "key": "status", + "hidden": 0, + "url": "gadget_erp5_field_status.html", + "type": "GadgetField" + }, + "your_report_date": { + "description": "", + "title": "Report Date", + "default": gadget.state.report_date.toUTCString(), + "css_class": "", + "required": 0, + "editable": 0, + "key": "report_date", + "hidden": 0, + "timezone_style": 0, + "date_only": 0, + "type": "DateTimeField" + }, + "your_public_url": { + "description": "", + "title": "Public Logs Url", + "default": link_template({ + url: gadget.state.public_url, + title: "Access Public files", + target: "_blank" + }), + "css_class": "", + "required": 0, + "editable": 0, + "key": "public_url", + "hidden": 0, + "type": "EditorField" + }, + "your_private_url": { + "description": "", + "title": "Private Logs Url", + "default": link_template({ + url: gadget.state.private_url, + title: "Access Private files", + target: "_blank" + }), + "css_class": "", + "required": 0, + "editable": 0, + "key": "private_url", + "hidden": 0, + "type": "EditorField" + }, + "your_error_count": { + "description": "", + "title": "Promises Error", + "default": "" + gadget.state.error, + "css_class": "", + "required": 0, + "editable": 0, + "key": "error_count", + "hidden": 0, + "type": "StringField" + }, + "your_success_count": { + "description": "", + "title": "Promises OK", + "default": "" + gadget.state.success, + "css_class": "", + "required": 0, + "editable": 0, + "key": "success_count", + "hidden": 0, + "type": "StringField" + }, + "your_software_release_url": { + "description": "", + "title": "Software Release", + "default": link_template({ + url: gadget.state.software_release, + title: "Access link", + target: "_blank" + }), + "css_class": "", + "required": 0, + "editable": 0, + "key": "software_release_url", + "hidden": 0, + "type": "EditorField" + }, + "your_rss_url": { + "description": "", + "title": "RSS Link", + "default": link_template({ + url: gadget.state.rss_url, + title: "Access RSS", + target: "_blank" + }), + "css_class": "", + "required": 0, + "editable": 0, + "key": "rss_url", + "hidden": 0, + "type": "EditorField" + }, + "your_hosting_title": { + "description": "", + "title": "Hosting Subscription", + "default": link_template({ + url: gadget.state.hosting_url, + title: gadget.state.hosting_title + }), + "css_class": "", + "required": 0, + "editable": 0, + "key": "hosting_title", + "hidden": 0, + "type": "EditorField" + }, + "your_computer_reference": { + "description": "", + "title": "Computer", + "default": gadget.state.computer_reference, + "css_class": "", + "required": 0, + "editable": 0, + "key": "computer_reference", + "hidden": 0, + "type": "StringField" + }, + "your_computer_partition": { + "description": "", + "title": "Partition", + "default": gadget.state.computer_partition, + "css_class": "", + "required": 0, + "editable": 0, + "key": "computer_partition", + "hidden": 0, + "type": "StringField" + }, + "your_partition_ipv6": { + "description": "", + "title": "Partition IPv6", + "default": gadget.state.partition_ipv6, + "css_class": "", + "required": 0, + "editable": 0, + "key": "partition_ipv6", + "hidden": 0, + "type": "StringField" + }, + "your_partition_ipv4": { + "description": "", + "title": "Partition IPv4", + "default": gadget.state.partition_ipv4, + "css_class": "", + "required": 0, + "editable": 0, + "key": "partition_ipv4", + "hidden": 0, + "type": "StringField" + }, + "your_instance_promise_list": { + "column_list": column_list, + "show_anchor": 0, + "default_params": {}, + "editable": 0, + "editable_column_list": [], + "key": "instance_promise_list", + "lines": 60, + "list_method": "portal_catalog", + "query": "urn:jio:allDocs?query=%28portal_type%3A%22" + + "promise" + "%22%29AND%28parent_id%3A%22" + + gadget.state.instance.parent_id + "%22%29", + "portal_type": [], + "search_column_list": column_list, + "sort_column_list": column_list, + "sort": [["category", "ascending"]], + "hide_sort": true, + "title": "Instance Promises Status", + "type": "ListBox" + }, + "your_graph_status": { + css_class: "no_label", + description: "The Graph Status", + hidden: 0, + "default": graph_value || {}, + key: "graph_status", + url: "gadget_field_graph_dygraph.html", + title: "", + type: "GadgetField" + } + }}, + "_links": { + "type": { + // form_list display portal_type in header + name: "" + } + } + }, + form_definition: { + group_list: [[ + "left", + [["your_title"], ["your_status"], ["your_status_date"], ["your_report_date"], + ["your_error_count"], ["your_success_count"], ["your_public_url"], ["your_private_url"]] + ], + [ + "right", + [["your_hosting_title"], ["your_instance_title"], ["your_computer_reference"], ["your_computer_partition"], + ["your_partition_ipv4"], ["your_partition_ipv6"], ["your_software_release_url"], + ["your_rss_url"]] + ], + [ + "center", + [["your_graph_status"]] + ], + [ + "bottom", + [["your_instance_promise_list"]] + ]] + } + }); + }) + .push(function () { + return RSVP.all([ + gadget.getUrlFor({command: 'history_previous'}), + gadget.getUrlFor({command: 'selection_previous'}), + gadget.getUrlFor({command: 'selection_next'}), + gadget.getUrlFor({command: 'push_history', options: { + page: 'ojsm_resources_view', + key: gadget.state.opml_outline.reference + }}), + gadget.getUrlFor({command: 'push_history', options: { + page: 'ojsm_processes_view', + key: gadget.state.opml_outline.reference + }}) + ]); + }) + .push(function (url_list) { + return gadget.updateHeader({ + page_title: "Instance: " + gadget.state.title, + selection_url: url_list[0], + previous_url: url_list[1], + next_url: url_list[2], + resources_url: url_list[3], + processes_url: url_list[4], + refresh_action: true + }); + }); + }); +}(window, rJS, RSVP, Handlebars)); diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_global_view_js.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_global_view_js.xml new file mode 100644 index 0000000000000000000000000000000000000000..47bf5644689c0d1bd2d492594bd4f6130674dc8c --- /dev/null +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_global_view_js.xml @@ -0,0 +1,340 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Web Script" module="erp5.portal_type"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_Access_contents_information_Permission</string> </key> + <value> + <tuple> + <string>Anonymous</string> + <string>Assignee</string> + <string>Assignor</string> + <string>Associate</string> + <string>Auditor</string> + <string>Manager</string> + <string>Owner</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Add_portal_content_Permission</string> </key> + <value> + <tuple> + <string>Assignee</string> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Change_local_roles_Permission</string> </key> + <value> + <tuple> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Modify_portal_content_Permission</string> </key> + <value> + <tuple> + <string>Assignee</string> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_View_Permission</string> </key> + <value> + <tuple> + <string>Anonymous</string> + <string>Assignee</string> + <string>Assignor</string> + <string>Associate</string> + <string>Auditor</string> + <string>Manager</string> + <string>Owner</string> + </tuple> + </value> + </item> + <item> + <key> <string>categories</string> </key> + <value> + <tuple> + <string>classification/collaborative/team</string> + </tuple> + </value> + </item> + <item> + <key> <string>content_md5</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>text/javascript</string> </value> + </item> + <item> + <key> <string>default_reference</string> </key> + <value> <string>gadget_officejs_jio_global_view.js</string> </value> + </item> + <item> + <key> <string>description</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>gadget_officejs_jio_global_view_js</string> </value> + </item> + <item> + <key> <string>language</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>portal_type</string> </key> + <value> <string>Web Script</string> </value> + </item> + <item> + <key> <string>short_title</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string>OfficeJS Jio Software Instance view JS</string> </value> + </item> + <item> + <key> <string>url_string</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>version</string> </key> + <value> <string>001</string> </value> + </item> + <item> + <key> <string>workflow_history</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="2" aka="AAAAAAAAAAI="> + <pickle> + <global name="PersistentMapping" module="Persistence.mapping"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> + <dictionary> + <item> + <key> <string>document_publication_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> + </value> + </item> + <item> + <key> <string>edit_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> + </value> + </item> + <item> + <key> <string>processing_status_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent> + </value> + </item> + </dictionary> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="3" aka="AAAAAAAAAAM="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> + </pickle> + <pickle> + <tuple> + <none/> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>publish_alive</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1507042651.46</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + <item> + <key> <string>validation_state</string> </key> + <value> <string>published_alive</string> </value> + </item> + </dictionary> + </list> + </tuple> + </pickle> + </record> + <record id="4" aka="AAAAAAAAAAQ="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> + </pickle> + <pickle> + <tuple> + <none/> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>edit</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>serial</string> </key> + <value> <string>962.48890.59022.44748</string> </value> + </item> + <item> + <key> <string>state</string> </key> + <value> <string>current</string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1508949714.27</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + </dictionary> + </list> + </tuple> + </pickle> + </record> + <record id="5" aka="AAAAAAAAAAU="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> + </pickle> + <pickle> + <tuple> + <none/> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>detect_converted_file</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>external_processing_state</string> </key> + <value> <string>converted</string> </value> + </item> + <item> + <key> <string>serial</string> </key> + <value> <string>0.0.0.0</string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1507042622.22</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + </dictionary> + </list> + </tuple> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_opml_view_html.html b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_opml_view_html.html new file mode 100644 index 0000000000000000000000000000000000000000..a73c62cda44f6213a5e008e427e1c4af680ae2eb --- /dev/null +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_opml_view_html.html @@ -0,0 +1,34 @@ +<!doctype html> +<html> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + + <title>OfficeJS Jio Web Page View</title> + <link href="gadget_officejs_monitoring_custom.css" rel="stylesheet" type="text/css"/> + + <script src="rsvp.js"></script> + <script src="renderjs.js"></script> + <script src="handlebars.js"></script> + + <script src="gadget_officejs_monitoring_global.js"></script> + <script src="gadget_officejs_jio_opml_view.js"></script> + <script id="template-message-error" type="text/x-handlebars-template"> + <p><span class='ui-text-{{status}}'>{{message}}</span></p> + </script> + + </head> + <body> + <div data-gadget-url="gadget_officejs_monitoring_jio.html" data-gadget-scope="jio_gadget" data-gadget-sandbox="public"></div> + <div class="template-view"></div> + <form class="save_form ui-body-c" novalidate> + <button type="submit" class="ui-btn ui-btn-b ui-btn-inline + ui-icon-edit ui-btn-icon-right ui-screen-hidden"></button> + <div class="ui-message-alert"></div> + <div data-gadget-url="gadget_erp5_form.html" + data-gadget-scope="form_view" + data-gadget-sandbox="public"> + </div> + </form> + </body> +</html> \ No newline at end of file diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_opml_view_html.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_opml_view_html.xml new file mode 100644 index 0000000000000000000000000000000000000000..d3faa462d92b97aa1edbfcdcc02e7cffc2fc60a4 --- /dev/null +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_opml_view_html.xml @@ -0,0 +1,340 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Web Page" module="erp5.portal_type"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_Access_contents_information_Permission</string> </key> + <value> + <tuple> + <string>Anonymous</string> + <string>Assignee</string> + <string>Assignor</string> + <string>Associate</string> + <string>Auditor</string> + <string>Manager</string> + <string>Owner</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Add_portal_content_Permission</string> </key> + <value> + <tuple> + <string>Assignee</string> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Change_local_roles_Permission</string> </key> + <value> + <tuple> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Modify_portal_content_Permission</string> </key> + <value> + <tuple> + <string>Assignee</string> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_View_Permission</string> </key> + <value> + <tuple> + <string>Anonymous</string> + <string>Assignee</string> + <string>Assignor</string> + <string>Associate</string> + <string>Auditor</string> + <string>Manager</string> + <string>Owner</string> + </tuple> + </value> + </item> + <item> + <key> <string>categories</string> </key> + <value> + <tuple> + <string>classification/collaborative/team</string> + </tuple> + </value> + </item> + <item> + <key> <string>content_md5</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>text/html</string> </value> + </item> + <item> + <key> <string>default_reference</string> </key> + <value> <string>gadget_officejs_jio_opml_view.html</string> </value> + </item> + <item> + <key> <string>description</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>gadget_officejs_jio_opml_view_html</string> </value> + </item> + <item> + <key> <string>language</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>portal_type</string> </key> + <value> <string>Web Page</string> </value> + </item> + <item> + <key> <string>short_title</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string>OfficeJS Jio OPML View</string> </value> + </item> + <item> + <key> <string>url_string</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>version</string> </key> + <value> <string>001</string> </value> + </item> + <item> + <key> <string>workflow_history</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="2" aka="AAAAAAAAAAI="> + <pickle> + <global name="PersistentMapping" module="Persistence.mapping"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> + <dictionary> + <item> + <key> <string>document_publication_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> + </value> + </item> + <item> + <key> <string>edit_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> + </value> + </item> + <item> + <key> <string>processing_status_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent> + </value> + </item> + </dictionary> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="3" aka="AAAAAAAAAAM="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> + </pickle> + <pickle> + <tuple> + <none/> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>publish_alive</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1506358065.91</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + <item> + <key> <string>validation_state</string> </key> + <value> <string>published_alive</string> </value> + </item> + </dictionary> + </list> + </tuple> + </pickle> + </record> + <record id="4" aka="AAAAAAAAAAQ="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> + </pickle> + <pickle> + <tuple> + <none/> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>edit</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>serial</string> </key> + <value> <string>963.1858.13217.15684</string> </value> + </item> + <item> + <key> <string>state</string> </key> + <value> <string>current</string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1509018559.06</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + </dictionary> + </list> + </tuple> + </pickle> + </record> + <record id="5" aka="AAAAAAAAAAU="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> + </pickle> + <pickle> + <tuple> + <none/> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>detect_converted_file</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>external_processing_state</string> </key> + <value> <string>converted</string> </value> + </item> + <item> + <key> <string>serial</string> </key> + <value> <string>0.0.0.0</string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1506358032.88</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + </dictionary> + </list> + </tuple> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_opml_view_js.js b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_opml_view_js.js new file mode 100644 index 0000000000000000000000000000000000000000..f37c9cbcf3db764ec993adb627b00671c854a28d --- /dev/null +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_opml_view_js.js @@ -0,0 +1,261 @@ +/*global window, rJS, RSVP, Handlebars, OPMLManage */ +/*jslint nomen: true, indent: 2, maxerr: 3 */ +(function (window, rJS, RSVP, Handlebars, OPMLManage) { + "use strict"; + + var gadget_klass = rJS(window), + templater = gadget_klass.__template_element, + notify_msg_template = Handlebars.compile( + templater.getElementById("template-message-error").innerHTML + ), + opml_global = OPMLManage; + + gadget_klass + ///////////////////////////// + // state + ///////////////////////////// + .setState({ + message: "", + redirect: false + }) + ///////////////////////////// + // ready + ///////////////////////////// + .ready(function (gadget) { + return opml_global.init(gadget, notify_msg_template); + }) + ///////////////////////////////////////////////////////////////// + // Acquired methods + ///////////////////////////////////////////////////////////////// + .declareAcquiredMethod("updateHeader", "updateHeader") + .declareAcquiredMethod("getSetting", "getSetting") + .declareAcquiredMethod("getUrlFor", "getUrlFor") + .declareAcquiredMethod("redirect", "redirect") + .declareAcquiredMethod("jio_put", "jio_put") + .declareAcquiredMethod("notifySubmitting", "notifySubmitting") + .declareAcquiredMethod("notifySubmitted", 'notifySubmitted') + + ///////////////////////////////////////////////////////////////// + // declared methods + ///////////////////////////////////////////////////////////////// + .onEvent('submit', function () { + var gadget = this, + doc; + return new RSVP.Queue() + .push(function () { + return gadget.getDeclaredGadget('form_view'); + }) + .push(function (form_gadget) { + return form_gadget.getContent(); + }) + .push(function (form_doc) { + doc = form_doc; + if (!opml_global.validateHttpUrl(form_doc.url)) { + gadget.state.message + .innerHTML = notify_msg_template({ + status: 'error', + message: "'" + form_doc.url + "' is not a valid OPML URL" + }); + return false; + } + if (!form_doc.username || !form_doc.password) { + gadget.state.message + .innerHTML = notify_msg_template({ + status: 'error', + message: 'Username and password fields are required!' + }); + return false; + } + if (doc.password !== gadget.state.password) { + // password was modified, update on backend + doc.new_password = doc.password; + doc.password = gadget.state.password; + doc.verify_password = 1; + } + return true; + }) + .push(function (state) { + if (state) { + return gadget.notifySubmitting() + .push(function () { + doc.title = gadget.state.opml_title; + return opml_global.saveOPML(doc, + doc.title === "" || doc.title === undefined || doc.verify_password === 1); + }) + .push(function (status) { + var msg = 'Document Updated'; + if (!status) { + msg = 'Document update failed'; + } + return RSVP.all([ + gadget.notifySubmitted(msg), + status + ]); + }) + .push(function (result_list) { + if (result_list[1] && gadget.state.redirect) { + return gadget.redirect({ + "command": "change", + "options": {"page": "ojsm_status_list"} + }); + } + }); + } + }); + }) + + .declareMethod("triggerSubmit", function () { + return this.element.querySelector('button[type="submit"]').click(); + }) + + .declareMethod("render", function (options) { + var gadget = this, + doc = options.doc; + return RSVP.Queue() + .push(function () { + return gadget.changeState({ + "opml_title": doc.title || "", + "opml_key": options.jio_key, + "password": doc.password + }); + }) + .push(function () { + return RSVP.all([ + gadget.getDeclaredGadget('form_view') + ]); + }) + .push(function (result) { + return result[0].render({ + erp5_document: { + "_embedded": {"_view": { + "my_title": { + "description": "The name of OPML", + "title": "Title", + "default": doc.title || "", + "css_class": "", + "required": 0, + "editable": 0, + "key": "title", + "hidden": doc.title === undefined ? 1 : 0, + "type": "StringField" + }, + "my_url": { + "description": "", + "title": "OPML URL", + "default": doc.url || options.url || "", + "css_class": "", + "required": 1, + "editable": 1, + "key": "url", + "hidden": 0, + "type": "StringField" + }, + "my_username": { + "description": "Username for access private URLs", + "title": "Username", + "default": doc.username || "", + "css_class": "", + "required": 1, + "editable": 0, + "key": "username", + "hidden": 0, + "type": "StringField" + }, + "my_password": { + "description": "Password for access private URLs", + "title": "Password", + "default": doc.password || "", + "css_class": "", + "required": 1, + "editable": 1, + "key": "password", + "hidden": 0, + "type": "PasswordField" + }, + "my_active": { + "description": "Sync this opml or not", + "title": "Active (Enable Sync)", + "default": doc.active || doc.active === undefined ? 1 : 0, + "css_class": "", + "required": 1, + "editable": 1, + "key": "active", + "hidden": 0, + "type": "CheckBoxField" + }, + "my_new_password": { + "description": "Change current OPML password", + "title": "New Password", + "default": "", + "css_class": "", + "required": 1, + "editable": 1, + "key": "new_password", + "hidden": 1, + "type": "PasswordField" + }, + "my_verify_password": { + "description": "Check if this OPML is valid, and also verify that password match", + "title": "Verify OPML & Password", + "default": 0, + "css_class": "", + "required": 1, + "editable": 1, + "key": "verify_password", + "hidden": 0, + "type": "CheckBoxField" + } + }}, + "_links": { + "type": { + // form_list display portal_type in header + name: "" + } + } + }, + form_definition: { + group_list: [[ + "left", + [["my_title"], ["my_url"], ["my_username"], ["my_password"], + ["my_active"], ["my_verify_password"], + ["my_new_password"]] + ]] + } + }); + }) + .push(function () { + return gadget.changeState({redirect: false}) + .push(function () { + return RSVP.all([ + gadget.getUrlFor({command: 'history_previous'}), + gadget.getUrlFor({command: 'selection_previous'}), + gadget.getUrlFor({command: 'selection_next'}), + gadget.getUrlFor({command: 'push_history', options: { + page: "ojsm_jump", + jio_key: gadget.state.opml_key, + title: gadget.state.opml_title, + jump_page: "ojsm_hosting_subscription_view", + view_title: "Related Hosting Subscription", + opml_key: gadget.state.opml_key + }}), + gadget.getUrlFor({command: 'change', options: { + page: 'ojsm_opml_delete', + jio_key: gadget.state.opml_key, + return_url: 'settings_configurator' + }}) + ]); + }) + .push(function (url_list) { + return gadget.updateHeader({ + page_title: options.doc.title || "OPML View", + selection_url: url_list[0], + previous_url: url_list[1], + next_url: url_list[2], + jump_url: url_list[3], + delete_url: url_list[4], + save_action: true + }); + }); + }); + }); +}(window, rJS, RSVP, Handlebars, OPMLManage)); diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_opml_view_js.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_opml_view_js.xml new file mode 100644 index 0000000000000000000000000000000000000000..133ecc007231ef1fd8122c57f94b21574e952108 --- /dev/null +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_opml_view_js.xml @@ -0,0 +1,340 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Web Script" module="erp5.portal_type"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_Access_contents_information_Permission</string> </key> + <value> + <tuple> + <string>Anonymous</string> + <string>Assignee</string> + <string>Assignor</string> + <string>Associate</string> + <string>Auditor</string> + <string>Manager</string> + <string>Owner</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Add_portal_content_Permission</string> </key> + <value> + <tuple> + <string>Assignee</string> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Change_local_roles_Permission</string> </key> + <value> + <tuple> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Modify_portal_content_Permission</string> </key> + <value> + <tuple> + <string>Assignee</string> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_View_Permission</string> </key> + <value> + <tuple> + <string>Anonymous</string> + <string>Assignee</string> + <string>Assignor</string> + <string>Associate</string> + <string>Auditor</string> + <string>Manager</string> + <string>Owner</string> + </tuple> + </value> + </item> + <item> + <key> <string>categories</string> </key> + <value> + <tuple> + <string>classification/collaborative/public</string> + </tuple> + </value> + </item> + <item> + <key> <string>content_md5</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>text/javascript</string> </value> + </item> + <item> + <key> <string>default_reference</string> </key> + <value> <string>gadget_officejs_jio_opml_view.js</string> </value> + </item> + <item> + <key> <string>description</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>gadget_officejs_jio_opml_view_js</string> </value> + </item> + <item> + <key> <string>language</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>portal_type</string> </key> + <value> <string>Web Script</string> </value> + </item> + <item> + <key> <string>short_title</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string>OfficeJS Jio Monitoring OPML view JS</string> </value> + </item> + <item> + <key> <string>url_string</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>version</string> </key> + <value> <string>001</string> </value> + </item> + <item> + <key> <string>workflow_history</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="2" aka="AAAAAAAAAAI="> + <pickle> + <global name="PersistentMapping" module="Persistence.mapping"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> + <dictionary> + <item> + <key> <string>document_publication_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> + </value> + </item> + <item> + <key> <string>edit_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> + </value> + </item> + <item> + <key> <string>processing_status_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent> + </value> + </item> + </dictionary> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="3" aka="AAAAAAAAAAM="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> + </pickle> + <pickle> + <tuple> + <none/> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>publish_alive</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1507911358.15</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + <item> + <key> <string>validation_state</string> </key> + <value> <string>published_alive</string> </value> + </item> + </dictionary> + </list> + </tuple> + </pickle> + </record> + <record id="4" aka="AAAAAAAAAAQ="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> + </pickle> + <pickle> + <tuple> + <none/> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>edit</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>serial</string> </key> + <value> <string>963.1932.7812.44987</string> </value> + </item> + <item> + <key> <string>state</string> </key> + <value> <string>current</string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1509022866.95</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + </dictionary> + </list> + </tuple> + </pickle> + </record> + <record id="5" aka="AAAAAAAAAAU="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> + </pickle> + <pickle> + <tuple> + <none/> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>detect_converted_file</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>external_processing_state</string> </key> + <value> <string>converted</string> </value> + </item> + <item> + <key> <string>serial</string> </key> + <value> <string>0.0.0.0</string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1506357952.51</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + </dictionary> + </list> + </tuple> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_promise_view_html.html b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_promise_view_html.html new file mode 100644 index 0000000000000000000000000000000000000000..e745f8f14c3b030333ac1e72c686ed25fa41706f --- /dev/null +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_promise_view_html.html @@ -0,0 +1,32 @@ +<!doctype html> +<html> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + + <title>OfficeJS Jio Web Page View</title> + + <link href="gadget_officejs_monitoring_custom.css" rel="stylesheet" type="text/css"/> + <script src="rsvp.js"></script> + <script src="renderjs.js"></script> + <script src="handlebars.js"></script> + + <script class="render-link-template" type="text/x-handlebars-template"> + <a href="{{url}}" target="{{target}}">{{title}}</a> + </script> + + <script src="gadget_officejs_jio_promise_view.js"></script> + + </head> + <body> + <div data-gadget-url="gadget_officejs_monitoring_jio.html" data-gadget-scope="jio_gadget" data-gadget-sandbox="public"></div> + <form class="save_form ui-body-c" novalidate> + <button type="submit" class="ui-btn ui-btn-b ui-btn-inline + ui-icon-edit ui-btn-icon-right ui-screen-hidden"></button> + <div data-gadget-url="gadget_erp5_form.html" + data-gadget-scope="form_view" + data-gadget-sandbox="public"> + </div> + </form> + </body> +</html> \ No newline at end of file diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_promise_view_html.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_promise_view_html.xml new file mode 100644 index 0000000000000000000000000000000000000000..5020775ba13393a8577657340b2ebd64405d398c --- /dev/null +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_promise_view_html.xml @@ -0,0 +1,340 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Web Page" module="erp5.portal_type"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_Access_contents_information_Permission</string> </key> + <value> + <tuple> + <string>Anonymous</string> + <string>Assignee</string> + <string>Assignor</string> + <string>Associate</string> + <string>Auditor</string> + <string>Manager</string> + <string>Owner</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Add_portal_content_Permission</string> </key> + <value> + <tuple> + <string>Assignee</string> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Change_local_roles_Permission</string> </key> + <value> + <tuple> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Modify_portal_content_Permission</string> </key> + <value> + <tuple> + <string>Assignee</string> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_View_Permission</string> </key> + <value> + <tuple> + <string>Anonymous</string> + <string>Assignee</string> + <string>Assignor</string> + <string>Associate</string> + <string>Auditor</string> + <string>Manager</string> + <string>Owner</string> + </tuple> + </value> + </item> + <item> + <key> <string>categories</string> </key> + <value> + <tuple> + <string>classification/collaborative/team</string> + </tuple> + </value> + </item> + <item> + <key> <string>content_md5</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>text/html</string> </value> + </item> + <item> + <key> <string>default_reference</string> </key> + <value> <string>gadget_officejs_jio_promise_view.html</string> </value> + </item> + <item> + <key> <string>description</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>gadget_officejs_jio_promise_view_html</string> </value> + </item> + <item> + <key> <string>language</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>portal_type</string> </key> + <value> <string>Web Page</string> </value> + </item> + <item> + <key> <string>short_title</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string>OfficeJS Jio Promise View</string> </value> + </item> + <item> + <key> <string>url_string</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>version</string> </key> + <value> <string>001</string> </value> + </item> + <item> + <key> <string>workflow_history</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="2" aka="AAAAAAAAAAI="> + <pickle> + <global name="PersistentMapping" module="Persistence.mapping"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> + <dictionary> + <item> + <key> <string>document_publication_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> + </value> + </item> + <item> + <key> <string>edit_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> + </value> + </item> + <item> + <key> <string>processing_status_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent> + </value> + </item> + </dictionary> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="3" aka="AAAAAAAAAAM="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> + </pickle> + <pickle> + <tuple> + <none/> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>publish_alive</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1506672679.59</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + <item> + <key> <string>validation_state</string> </key> + <value> <string>published_alive</string> </value> + </item> + </dictionary> + </list> + </tuple> + </pickle> + </record> + <record id="4" aka="AAAAAAAAAAQ="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> + </pickle> + <pickle> + <tuple> + <none/> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>edit</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>serial</string> </key> + <value> <string>962.48890.59022.44748</string> </value> + </item> + <item> + <key> <string>state</string> </key> + <value> <string>current</string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1508252274.8</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + </dictionary> + </list> + </tuple> + </pickle> + </record> + <record id="5" aka="AAAAAAAAAAU="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> + </pickle> + <pickle> + <tuple> + <none/> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>detect_converted_file</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>external_processing_state</string> </key> + <value> <string>converted</string> </value> + </item> + <item> + <key> <string>serial</string> </key> + <value> <string>0.0.0.0</string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1506672050.57</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + </dictionary> + </list> + </tuple> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_promise_view_js.js b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_promise_view_js.js new file mode 100644 index 0000000000000000000000000000000000000000..a01e971bbebbd13ddf6821fce97b726999d37274 --- /dev/null +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_promise_view_js.js @@ -0,0 +1,546 @@ +/*global window, rJS, RSVP, Handlebars, RegExp */ +/*jslint nomen: true, indent: 2, maxerr: 3 */ +(function (window, rJS, RSVP, Handlebars, RegExp) { + "use strict"; + + var gadget_klass = rJS(window), + source = gadget_klass.__template_element + .querySelector(".render-link-template") + .innerHTML, + link_template = Handlebars.compile(source); + + function getPromiseTextContent(content, private_url) { + var regex = /(https?:\/\/[^\s]+)/g, + i, + parser, + private_parser = document.createElement('a'), + result_list = content.match(regex), + url_list = []; + + function makeUnique(array_list) { + var temp = {}, + i, + r = [], + k; + for (i = 0; i < array_list.length; i += 1) { + temp[array_list[i]] = true; + } + for (k in temp) { + if (temp.hasOwnProperty(k)) { + r.push(k); + } + } + return r; + } + + private_parser.href = private_url; + if (result_list !== null && result_list !== undefined) { + result_list = makeUnique(result_list); + for (i = 0; i < result_list.length; i += 1) { + parser = document.createElement('a'); + parser.href = result_list[i]; + parser.target = 'blank'; + parser.textContent = result_list[i]; + if (parser.hostname === private_parser.hostname) { + // set the password + parser.username = private_parser.username; + parser.password = private_parser.password; + } + url_list.push({ + url: result_list[i], + next: parser.outerHTML + }); + } + } + + content = content.replace(/\n/g, '<br/>'); + for (i = 0; i < url_list.length; i += 1) { + content = content.replace( + new RegExp(url_list[i].url, 'g'), + url_list[i].next); + } + return content; + } + + gadget_klass + .setState({ + jio_gadget: "", + }) + .ready(function (gadget) { + return gadget.getDeclaredGadget("jio_gadget") + .push(function (jio_gadget) { + return gadget.changeState({"jio_gadget": jio_gadget}); + }); + }) + ///////////////////////////////////////////////////////////////// + // Acquired methods + ///////////////////////////////////////////////////////////////// + .declareAcquiredMethod("updateHeader", "updateHeader") + .declareAcquiredMethod("getUrlParameter", "getUrlParameter") + .declareAcquiredMethod("getUrlFor", "getUrlFor") + .declareAcquiredMethod("jio_allDocs", "jio_allDocs") + .declareAcquiredMethod("jio_get", "jio_get") + .declareAcquiredMethod("notifySubmitting", "notifySubmitting") + .declareAcquiredMethod("notifySubmitted", 'notifySubmitted') + .declareAcquiredMethod("translateHtml", "translateHtml") + .declareAcquiredMethod("redirect", "redirect") + ///////////////////////////////////////////////////////////////// + // declared methods + ///////////////////////////////////////////////////////////////// + + .declareMethod("render", function (options) { + var gadget = this, + hosting_subscription, + software_instance, + opml_outline, + opml_doc; + + return new RSVP.Queue() + .push(function () { + return gadget.state.jio_gadget.createJio({ + type: "webhttp", + // XXX fix of url + url: options.doc.source_url.replace("jio_public", "public") + }); + }) + .push(function () { + return gadget.jio_allDocs({ + select_list: [ + "parent_url", + "parent_id", + "title", + "opml_title", + "portal_type", + "_links", + "_embedded", + "reference" + ], + query: '(portal_type:"global") AND (parent_id:"' + + options.doc.parent_id + '")' + }, function (error) { + console.log(error); + return {}; + }); + }) + .push(function (result) { + var i; + for (i = 0; i < result.data.total_rows; i += 1) { + software_instance = result.data.rows[i].value; + } + // get opml outline + return gadget.jio_get(options.doc.parent_id); + }) + .push(function (outline_doc) { + opml_outline = outline_doc; + // get opml + return gadget.jio_get(outline_doc.parent_url); + }) + .push(function (opml_document) { + opml_doc = opml_document; + return gadget.getUrlFor({command: 'push_history', options: { + jio_key: options.doc.reference, + page: 'ojsm_hosting_subscription_view', + opml_key: opml_document.url + }}); + }) + .push(function (hosting_url) { + var pass_url; + + if (software_instance === undefined) { + // synchronisation problem, probably invalid password + software_instance = {_links: {private_url: {href: ""}, + public_url: {href: ""}}, + _embedded: {instance: {}}}; + } + // fix URLs + software_instance._links.private_url.href = software_instance. + _links.private_url.href.replace("jio_private", "private"); + software_instance._links.public_url.href = software_instance. + _links.public_url.href.replace("jio_public", "public"); + + pass_url = "https://" + atob(opml_doc.basic_login) + + "@" + software_instance._links.private_url.href.split("//")[1]; + + return gadget.changeState({ + promise: options.doc, + jio_key: options.jio_key, + status: options.doc.category, + status_date: new Date(options.doc.pubDate), + report_date: new Date(options.doc.lastBuildDate), + title: options.doc.source, + promise_output: options.doc.description, + private_url: pass_url, + public_url: software_instance._links.public_url.href, + instance_reference: software_instance.reference, + instance_title: software_instance.title, + hosting_title: opml_doc.title, + hosting_url: hosting_url, + partition_ipv6: software_instance._embedded.instance.ipv6, + computer_partition: software_instance._embedded.instance.partition, + computer_reference: software_instance._embedded.instance.computer, + software_release: software_instance._embedded.instance['software-release'] + }); + }); + }) + + .onEvent('submit', function () { + // ON submit, refresh page + return this.redirect({command: 'reload'}); + }) + + .declareMethod("triggerSubmit", function () { + return this.element.querySelector('button[type="submit"]').click(); + }) + + .allowPublicAcquisition("jio_allDocs", function (param_list) { + var gadget = this, + result = {}; + if (param_list[0].query.indexOf('portal_type:"promise"') !== -1) { + // get history file on live + result.data = {rows: [], total_rows: 0}; + return gadget.state.jio_gadget.get( + gadget.state.promise.source + ".history" + ) + .push(undefined, function (error) { + console.log(error); + return undefined; + }) + .push(function (status_history) { + var i, + len, + start, + //lines, + message; + + if (status_history && status_history.hasOwnProperty('data')) { + // the status history list is reversed ([old, ...., newest]) + len = status_history.data.length; + start = len - param_list[0].limit[0] - 1; + //lines = param_list[0].limit[1] - param_list[0].limit[0]; + if (start < 0) { + start = len - 1; + } + //if (lines > len) { + // lines = len - start; + //} + for (i = start; i >= 0; i-= 1) { + message = status_history.data[i].message.slice(0, 60); + if (message.length >= 60) { + message += "..."; + } + result.data.total_rows += 1; + result.data.rows.push({ + value: { + status: { + css_class: "", + description: "The Status", + hidden: 0, + "default": status_history.data[i].status, + key: "status", + url: "gadget_erp5_field_status.html", + title: "Status", + type: "GadgetField" + }, + start_date: { + allow_empty_time: 0, + ampm_time_style: 0, + css_class: "date_field", + date_only: 0, + description: "The Date", + editable: 0, + hidden: 0, + hidden_day_is_last_day: 0, + "default": new Date(status_history.data[i]['start-date']).toUTCString(), + key: "start_date", + required: 0, + timezone_style: 0, + title: "Date", + type: "DateTimeField" + }, + change_date: { + allow_empty_time: 0, + ampm_time_style: 0, + css_class: "date_field", + date_only: 0, + description: "The Date", + editable: 0, + hidden: 0, + hidden_day_is_last_day: 0, + "default": new Date(status_history.data[i]['change-time']*1000).toUTCString(), + key: "change_date", + required: 0, + timezone_style: 0, + title: "Status Date", + type: "DateTimeField" + }, + message: message, + "listbox_uid:list": { + key: "listbox_uid:list", + value: 2713 + } + } + }); + } + } + return result; + }); + } + }) + .onStateChange(function () { + var gadget = this; + if (!gadget.state.hasOwnProperty('status') && + !gadget.state.hasOwnProperty('title')) { + return; + } + return new RSVP.Queue() + .push(function () { + return gadget.getDeclaredGadget('form_view'); + }) + .push(function (form_gadget) { + var column_list = [ + ['start_date', 'Report Date'], + ['change_date', 'Last Change'], + ['message', 'Promise Output'], + ['status', 'Status'] + ]; + return form_gadget.render({ + erp5_document: { + "_embedded": {"_view": { + "your_title": { + "description": "", + "title": "Promise Title", + "default": gadget.state.title, + "css_class": "", + "required": 0, + "editable": 0, + "key": "title", + "hidden": 0, + "type": "StringField" + }, + "your_status": { + "description": "", + "title": "Status", + "default": gadget.state.status, + "css_class": "", + "required": 1, + "editable": 0, + "key": "status", + "hidden": 0, + "url": "gadget_erp5_field_status.html", + "type": "GadgetField" + }, + "your_status_date": { + "description": "", + "title": "Status Since", + "default": gadget.state.status_date.toUTCString(), + "css_class": "", + "required": 0, + "editable": 0, + "key": "status_date", + "hidden": 0, + "timezone_style": 0, + "date_only": 0, + "type": "DateTimeField" + }, + "your_report_date": { + "description": "", + "title": "Report Date", + "default": gadget.state.report_date.toUTCString(), + "css_class": "", + "required": 0, + "editable": 0, + "key": "report_date", + "hidden": 0, + "timezone_style": 0, + "date_only": 0, + "type": "DateTimeField" + }, + "your_public_url": { + "description": "", + "title": "Public Logs Url", + "default": link_template({ + url: gadget.state.public_url, + title: "Access Public files", + target: "_blank" + }), + "css_class": "", + "required": 0, + "editable": 0, + "key": "public_url", + "hidden": 0, + "type": "EditorField" + }, + "your_private_url": { + "description": "", + "title": "Private Logs Url", + "default": link_template({ + url: gadget.state.private_url, + title: "Access Private files", + target: "_blank" + }), + "css_class": "", + "required": 0, + "editable": 0, + "key": "private_url", + "hidden": 0, + "type": "EditorField" + }, + "your_software_release_url": { + "description": "", + "title": "Software Release", + "default": link_template({ + url: gadget.state.software_release, + title: "Access Software release", + target: "_blank" + }), + "css_class": "", + "required": 0, + "editable": 0, + "key": "software_release_url", + "hidden": 0, + "type": "EditorField" + }, + "your_promise_output": { + "description": "", + "title": "Promise Output Message", + "default": getPromiseTextContent(gadget.state.promise_output, + gadget.state.private_url), + "css_class": "promise-output", + "required": 0, + "editable": 0, + "key": "promise_output", + "hidden": 0, + "type": "EditorField" + }, + "your_hosting_title": { + "description": "", + "title": "Hosting Subscription", + "default": link_template({ + url: gadget.state.hosting_url, + title: gadget.state.hosting_title + }), + "css_class": "", + "required": 0, + "editable": 0, + "key": "hosting_title", + "hidden": 0, + "type": "EditorField" + }, + "your_instance_title": { + "description": "", + "title": "Software Instance", + "default": [gadget.state.instance_title], + "query": "urn:jio:allDocs?query=%28portal_type%3A%22" + + "opml-outline" + "%22%29AND%28reference%3A%22" + + gadget.state.instance_reference + "%22%29", + "css_class": "", + "required": 0, + "editable": 0, + "key": "instance_title", + "hidden": gadget.state.instance_reference ? 0 : 1, + "view": "view", + "allow_jump": true, + "allow_creation": false, + "relation_item_relative_url": [gadget.state.instance_reference], + "type": "RelationStringField" + }, + "your_computer_reference": { + "description": "", + "title": "Computer", + "default": gadget.state.computer_reference, + "css_class": "", + "required": 0, + "editable": 0, + "key": "computer_reference", + "hidden": 0, + "type": "StringField" + }, + "your_computer_partition": { + "description": "", + "title": "Partition", + "default": gadget.state.computer_partition, + "css_class": "", + "required": 0, + "editable": 0, + "key": "computer_partition", + "hidden": 0, + "type": "StringField" + }, + "your_partition_ipv6": { + "description": "", + "title": "Partition IPv6", + "default": gadget.state.partition_ipv6, + "css_class": "", + "required": 0, + "editable": 0, + "key": "partition_ipv6", + "hidden": 0, + "type": "StringField" + }, + "your_promise_history": { + "column_list": column_list, + "show_anchor": 0, + "default_params": {}, + "editable": 0, + "editable_column_list": [], + "key": "promise_history", + "lines": 60, + "list_method": "portal_catalog", + "query": "urn:jio:allDocs?query=portal_type%3A%22" + + "promise" + "%22", + "portal_type": [], + "search_column_list": [], + "sort_column_list": [], + "sort": [], + "hide_sort": true, + "command": "reload", + "title": "Promise Status History", + "type": "ListBox" + } + }}, + "_links": { + "type": { + // form_list display portal_type in header + name: "" + } + } + }, + form_definition: { + group_list: [[ + "left", + [["your_title"], ["your_status"], ["your_status_date"], ["your_report_date"], ["your_public_url"], ["your_private_url"]] + ], + [ + "right", + [["your_hosting_title"], ["your_instance_title"], ["your_computer_reference"], ["your_computer_partition"], + ["your_partition_ipv6"], ["your_software_release_url"]] + ], + [ + "center", + [["your_promise_output"]] + ], + [ + "bottom", + [["your_promise_history"]] + ]] + } + }); + }) + .push(function () { + return RSVP.all([ + gadget.getUrlFor({command: 'history_previous'}), + gadget.getUrlFor({command: 'selection_previous'}), + gadget.getUrlFor({command: 'selection_next'}) + ]); + }) + .push(function (url_list) { + return gadget.updateHeader({ + page_title: "Promise: " + gadget.state.title, + selection_url: url_list[0], + previous_url: url_list[1], + next_url: url_list[2], + refresh_action: true + }); + }); + }); +}(window, rJS, RSVP, Handlebars, RegExp)); diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_promise_view_js.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_promise_view_js.xml new file mode 100644 index 0000000000000000000000000000000000000000..5103be0a07132be66bb2ae4afd2866615c43cbae --- /dev/null +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_jio_promise_view_js.xml @@ -0,0 +1,340 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Web Script" module="erp5.portal_type"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_Access_contents_information_Permission</string> </key> + <value> + <tuple> + <string>Anonymous</string> + <string>Assignee</string> + <string>Assignor</string> + <string>Associate</string> + <string>Auditor</string> + <string>Manager</string> + <string>Owner</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Add_portal_content_Permission</string> </key> + <value> + <tuple> + <string>Assignee</string> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Change_local_roles_Permission</string> </key> + <value> + <tuple> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Modify_portal_content_Permission</string> </key> + <value> + <tuple> + <string>Assignee</string> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_View_Permission</string> </key> + <value> + <tuple> + <string>Anonymous</string> + <string>Assignee</string> + <string>Assignor</string> + <string>Associate</string> + <string>Auditor</string> + <string>Manager</string> + <string>Owner</string> + </tuple> + </value> + </item> + <item> + <key> <string>categories</string> </key> + <value> + <tuple> + <string>classification/collaborative/team</string> + </tuple> + </value> + </item> + <item> + <key> <string>content_md5</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>text/javascript</string> </value> + </item> + <item> + <key> <string>default_reference</string> </key> + <value> <string>gadget_officejs_jio_promise_view.js</string> </value> + </item> + <item> + <key> <string>description</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>gadget_officejs_jio_promise_view_js</string> </value> + </item> + <item> + <key> <string>language</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>portal_type</string> </key> + <value> <string>Web Script</string> </value> + </item> + <item> + <key> <string>short_title</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string>OfficeJS Jio Promise view JS</string> </value> + </item> + <item> + <key> <string>url_string</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>version</string> </key> + <value> <string>001</string> </value> + </item> + <item> + <key> <string>workflow_history</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="2" aka="AAAAAAAAAAI="> + <pickle> + <global name="PersistentMapping" module="Persistence.mapping"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> + <dictionary> + <item> + <key> <string>document_publication_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> + </value> + </item> + <item> + <key> <string>edit_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> + </value> + </item> + <item> + <key> <string>processing_status_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent> + </value> + </item> + </dictionary> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="3" aka="AAAAAAAAAAM="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> + </pickle> + <pickle> + <tuple> + <none/> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>publish_alive</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1506672671.19</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + <item> + <key> <string>validation_state</string> </key> + <value> <string>published_alive</string> </value> + </item> + </dictionary> + </list> + </tuple> + </pickle> + </record> + <record id="4" aka="AAAAAAAAAAQ="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> + </pickle> + <pickle> + <tuple> + <none/> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>edit</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>serial</string> </key> + <value> <string>963.706.49244.32460</string> </value> + </item> + <item> + <key> <string>state</string> </key> + <value> <string>current</string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1508949544.51</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + </dictionary> + </list> + </tuple> + </pickle> + </record> + <record id="5" aka="AAAAAAAAAAU="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> + </pickle> + <pickle> + <tuple> + <none/> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>detect_converted_file</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>external_processing_state</string> </key> + <value> <string>converted</string> </value> + </item> + <item> + <key> <string>serial</string> </key> + <value> <string>0.0.0.0</string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1506672641.63</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + </dictionary> + </list> + </tuple> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_appcache.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_appcache.xml similarity index 74% rename from bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_appcache.xml rename to bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_appcache.xml index b8cc6db7060443f8c6880e6ef8fed4f4b9f96bcc..09e7c40167ac5ff0665d59970c6279f46b331906 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_appcache.xml +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_appcache.xml @@ -64,7 +64,7 @@ <key> <string>categories</string> </key> <value> <tuple> - <string>classification/collaborative/team</string> + <string>classification/collaborative/public</string> </tuple> </value> </item> @@ -76,7 +76,7 @@ </item> <item> <key> <string>default_reference</string> </key> - <value> <string>gadget_monitoring.appcache</string> </value> + <value> <string>gadget_officejs_monitoring.appcache</string> </value> </item> <item> <key> <string>description</string> </key> @@ -86,7 +86,7 @@ </item> <item> <key> <string>id</string> </key> - <value> <string>gadget_monitoring_appcache</string> </value> + <value> <string>gadget_officejs_monitoring_appcache</string> </value> </item> <item> <key> <string>language</string> </key> @@ -117,7 +117,7 @@ font-awesome/font-awesome-webfont.ttf\n font-awesome/font-awesome-webfont.svg\n URI.js\n dygraph.js\n -gadget_erp5.css\n +gadget_erp5_nojqm.css\n gadget_global.js\n gadget_field_graph_dygraph.html\n gadget_field_graph_dygraph.js\n @@ -129,66 +129,122 @@ gadget_translation.html\n dygraph.js\n handlebars.js\n jiodev.js\n +erp5_launcher_nojqm.js\n monitoring_jio_http_storage.js\n monitoring_jio_parser_storage.js\n monitoring_jio_storage.js\n monitoring_jio_web_storage.js\n jquery.js\n -jquery.magnific-popup.min.js\n -jquerymobile.css\n -jquerymobile.js\n jsen.min.js\n -magnific-popup.css\n -notify.min.js\n renderjs.js\n rsvp.js\n -gadget_monitoring_application_panel.html\n -gadget_monitoring_breadcrumb.html\n -gadget_monitoring_document_edit.html\n -gadget_monitoring_header.html\n -gadget_monitoring_hosting_subscription_list.html\n -gadget_monitoring_hosting_subscription_view.html\n -gadget_monitoring_import_export.html\n -gadget_monitoring_jio.html\n -gadget_monitoring_log_widget.html\n -gadget_monitoring_main.html\n -gadget_monitoring_message_log.html\n -gadget_monitoring_process_view.html\n -gadget_monitoring_promise_interface.html\n -gadget_monitoring_resource_view.html\n -gadget_monitoring_router.html\n -gadget_monitoring_settings_configurator.html\n -gadget_monitoring_software_instance_list.html\n -gadget_monitoring_software_instance_view.html\n -gadget_monitoring_status_list.html\n -gadget_monitoring_sync.html\n -gadget_monitoring_widget_listbox.html\n -gadget_monitoring_custom.css\n -gadget_monitoring_application_panel.js\n -gadget_monitoring_breadcrumb.js\n -gadget_monitoring_document_edit.js\n -gadget_monitoring_header.js\n -gadget_monitoring_hosting_subscription_list.js\n -gadget_monitoring_hosting_subscription_view.js\n -gadget_monitoring_import_export.js\n -gadget_monitoring_jio.js\n -gadget_monitoring_log_widget.js\n -gadget_monitoring_main.js\n -gadget_monitoring_message_log.js\n -gadget_monitoring_process_view.js\n -gadget_monitoring_promise_interface.js\n -gadget_monitoring_resource_view.js\n -gadget_monitoring_router.js\n -gadget_monitoring_software_instance_list.js\n -gadget_monitoring_software_instance_view.js\n -gadget_monitoring_settings_configurator.js\n -gadget_monitoring_status_list.js\n -gadget_monitoring_sync.js\n -gadget_monitoring_widget_listbox.js\n -gadget_translation.js\n +notify.min.js\n +\n +# shared\n +gadget_erp5_notification.html\n +gadget_erp5_notification.js\n +gadget_officejs_router.js\n gadget_translation_data.js\n -erp5_launcher.js\n -erp5_launcher.html\n +gadget_translation.js\n +gadget_erp5_router.html\n +gadget_erp5_router.js\n +gadget_html5_input.html\n +gadget_html5_input.js\n +gadget_erp5_searchfield.html\n +gadget_erp5_searchfield.js\n +gadget_erp5_pt_form_list.html\n +gadget_erp5_pt_form_list.js\n +gadget_erp5_form.html\n +gadget_erp5_form.js\n +gadget_erp5_label_field.html\n +gadget_erp5_label_field.js\n +gadget_erp5_field_listbox.html\n +gadget_erp5_field_listbox.js\n +gadget_erp5_field_datetime.html\n +gadget_erp5_field_datetime.js\n +gadget_erp5_field_string.html\n +gadget_erp5_field_string.js\n +gadget_erp5_field_gadget.html\n +gadget_erp5_field_gadget.js\n +gadget_erp5_field_status.html\n +gadget_erp5_field_status.js\n +gadget_html5_element.html\n +gadget_html5_element.js\n +gadget_erp5_field_editor.html\n +gadget_erp5_field_editor.js\n +gadget_erp5_field_relationstring.html\n +gadget_erp5_field_relationstring.js\n +gadget_erp5_field_textarea.html\n +gadget_erp5_field_textarea.js\n +gadget_erp5_relation_input.html\n +gadget_erp5_relation_input.js\n +gadget_erp5_page_ojs_controller.html\n +gadget_erp5_page_ojs_controller.js\n +gadget_html5_textarea.html\n +gadget_html5_textarea.js\n +gadget_erp5_field_list.html\n +gadget_erp5_field_list.js\n +gadget_erp5_field_checkbox.html\n +gadget_erp5_field_checkbox.js\n +gadget_html5_select.html\n +gadget_html5_select.js\n +gadget_erp5_field_password.html\n +gadget_erp5_field_password.js\n +gadget_erp5_jio.html\n +gadget_erp5_jio.js\n +\n +# monitoring\n +gadget_officejs_monitoring.appcache\n +gadget_officejs_monitoring_jio.html\n +gadget_erp5_page_ojsm_hosting_subscription_list.html\n +gadget_officejs_monitoring_parameter_view.html\n +gadget_erp5_page_settings_configurator.html\n +gadget_erp5_page_ojsm_processes_view.html\n +gadget_erp5_page_ojsm_hosting_subscription_view.html\n +gadget_officejs_monitoring_sync.html\n +gadget_officejs_jio_global_view.html\n +gadget_erp5_page_ojsm_software_instance_list.html\n +gadget_officejs_monitoring_router.html\n +gadget_officejs_jio_promise_view.html\n +gadget_erp5_page_ojsm_import_export.html\n +gadget_officejs_jio_opml_view.html\n +gadget_erp5_page_ojsm_opml_add.html\n +gadget_officejs_monitoring_panel.html\n +gadget_erp5_page_ojsm_resources_view.html\n +gadget_erp5_page_ojsm_opml_delete.html\n +gadget_officejs_monitoring_header.html\n +gadget_erp5_page_ojsm_status_list.html\n +gadget_erp5_page_ojsm_synchronize.html\n +gadget_erp5_page_ojsm_erp5_configurator.html\n +gadget_erp5_page_ojsm_jump.html\n +\n +# monitoring js\n +gadget_officejs_monitoring_jio.js\n +gadget_erp5_page_ojsm_hosting_subscription_list.js\n +gadget_officejs_monitoring_parameter_view.js\n +gadget_erp5_page_settings_configurator.js\n +gadget_erp5_page_ojsm_processes_view.js\n +gadget_officejs_monitoring_custom.css\n +gadget_erp5_page_ojsm_hosting_subscription_view.js\n +gadget_global.js\n +gadget_erp5_global.js\n +gadget_officejs_monitoring_sync.js\n +gadget_erp5_page_ojsm_software_instance_list.js\n +gadget_officejs_monitoring_panel.js\n +gadget_officejs_jio_global_view.js\n +gadget_erp5_page_ojsm_import_export.js\n +gadget_erp5_page_ojsm_resources_view.js\n +gadget_officejs_jio_promise_view.js\n +gadget_officejs_monitoring_header.js\n +gadget_erp5_page_ojsm_opml_add.js\n +gadget_erp5_page_ojsm_opml_delete.js\n +gadget_erp5_page_ojsm_status_list.js\n +gadget_officejs_jio_opml_view.js\n +gadget_erp5_page_ojsm_synchronize.js\n +gadget_erp5_page_ojsm_jump.js\n +gadget_erp5_page_ojsm_erp5_configurator.js\n +gadget_officejs_monitoring_global.js\n +\n # erp5_web_renderjs_ui\n gadget_erp5_editor_panel.html\n gadget_erp5_editor_panel.js\n @@ -328,7 +384,7 @@ NETWORK:\n </item> <item> <key> <string>serial</string> </key> - <value> <string>961.61188.16000.18722</string> </value> + <value> <string>963.648.42463.52138</string> </value> </item> <item> <key> <string>state</string> </key> @@ -346,7 +402,7 @@ NETWORK:\n </tuple> <state> <tuple> - <float>1504800490.65</float> + <float>1509023500.45</float> <string>UTC</string> </tuple> </state> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_custom_css.css b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_custom_css.css new file mode 100644 index 0000000000000000000000000000000000000000..aea7ca308d43e438e2a9200a4fad0ccfa7ec6348 --- /dev/null +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_custom_css.css @@ -0,0 +1,365 @@ +/** custom style ***/ +.parameter-box-title { + font-size: 120%; + margin: 25px 0 0; + padding: 5px 0; + color: #5d5d5d; +} + +/***** end ****/ + + +.margin-0 {margin: 0} +.padding-5 {padding: 5px;} +.padding-10 {padding: 10px;} +.padding-15 {padding: 15px;} +.padding-20 {padding: 20px;} +.padding-tb-5 {padding: 10px 0;} +.padding-tb-10 {padding: 10px 0;} +.padding-tb-20 {padding: 20px 0;} +.padding-lr-5 {padding: 0 5px;} +.padding-lr-10 {padding: 0 10px;} +.padding-lr-20 {padding: 0 20px;} +.padding-lrb-20 {padding: 0 20px 20px;} +.border-gray { border: 1px solid #C3C3C3; border-radius: 3px;} +.ui-text{ + padding: 0 10px; +} +.ui-text-pre { + white-space: pre-wrap; +} +.ui-text-left {text-align: left;} +.ui-text-right {text-align: right;} +.ui-text-center { + text-align: center; +} +.ui-text-ERROR, .ui-text-error { + color: #DC4343; +} +.ui-text-INFO, .ui-text-info { + color: #DC4343; +} +.ui-text-OK, .ui-text-ok { + color: green; +} +.ui-text-WARNING, .ui-text-warning { + color: #cea813; + text-shadow: 1px 0px 0px rgb(224, 224, 116); +} + +.ui-text-desabled { + color: rgba(128, 128, 128, 0.66); +} + +.text-data { + height: 120px; + color: #596167; +} +.text-info { + font-size: 90%; + color: #048daf; +} + +.text-overview { + max-width: 200px; + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; +} + +.header-notice { + margin-top: 5px; + margin-left: 20px; + color: #5C676D; + font-size: .95em; +} + +.ui-status-icon { + display: inline-block; +} +.ui-status-icon:before { + display: inline-block; + content: ""; + vertical-align: middle; + height: 2.5em; + width: 2.5em; + cursor: pointer; + background: #DC4343; +} + +.ui-status-icon-fx:before { + height: 3.5em; + width: 3.5em; +} + +.ui-status-text, a span.ui-status-text { + font-weight: bold; + padding-left: 7px; + font-size: 1.09em; + /*top: 13px; + left: 40px; + position: absolute;*/ +} + +.ui-status-ok:before, .ui-status-OK:before { + background: green; +} +.ui-status-error:before, .ui-status-ERROR:before { + background: #DC4343; +} +.ui-status-warning:before, .ui-status-WARNING:before { + background: #f0ad4e; +} +.status-text-ok:before, .status-text-OK:before { + color: green; +} +.status-text-error:before, .status-text-ERROR:before { + color: #DC4343; +} +.status-text-warning:before, .status-text-WARNING:before { + color: #f0ad4e; +} + +.label-warning, .label-WARNING { + background-color: #f0ad4e; +} +.label-error, .label-ERROR { + background-color: #DC4343; +} +.label-false { + background-color: #9ba0a5; +} +.label-ok, .label-OK { + background-color: green; +} +.label-info, .label-INFO, .label-true { + background-color: #79c1d9; +} +.label { + display: inline; + padding: .4em .8em; + font-weight: 700; + line-height: 2.1em; + color: #fff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: .25em; +} +.label-text { + display: block; + margin: .6em 0 .4em; + font-weight: 400; + font-size: 16px; + text-transform: capitalize; +} + +.ui-content-hidden { + display: none; +} + +/* LEGEND CHART */ +.legend { + list-style: none; + font-size: 12px; +} +.legend ul li { + list-style: none; +} +.legend:before { + display: block; + content: ""; + clear: both; +} +.legend li { + float: left; + font-size: 12px; + padding-right: 10px; +} +.legend li span { + display: inline-block; + height: 10px; + width: 10px; + margin-right: 5px; +} + +/* Graph */ +.graph { + margin: 20px 0; + position: relative; +} +.graph-label { + font-size: 75%; +} +.dygraph-xlabel { + font-size: 110%; + color: #344558; + padding: 8px 0; +} +.graph-full { + margin: 0 20px; + position: relative; +} +.graph-medium { + height: 320px; + width: 98%; +} +.graph-h-medium { + height: 320px; + width: 98%; + margin: 30px; +} +.ui-grid-column .graph-state-labels { + margin: 10px; +} +.ui-grid-column .graph-state-labels label{ + font-weight: normal; +} + +.hosting-block, .content-medium { + width: 80%; +} + +/* INfo Box */ +.infobox { + display: inline-block; + color: #555; + background-color: #FFF; + box-shadow: none; + margin: -1px 0 0 -1px; + margin: 5px 0; + padding: 8px 3px 6px 9px; + border: 1px solid; + border-color: #D8D8D8; + vertical-align: middle; + text-align: left; + position: relative; + /*cursor: pointer;*/ +} +.infobox:hover { + background: rgba(128, 128, 128, .1); +} + +.infobox>.infobox-icon { + display: inline-block; + vertical-align: top; +} + +.infobox>.infobox-data { + display: inline-block; + border-width: 0; + font-size: 13px; + text-align: left; + line-height: 21px; + min-width: 130px; + padding-left: 8px; + position: relative; + top: 0; +} + +.infobox>.infobox-data>.infobox-data-number { + display: block; + font-size: 22px; + margin: 2px 0 4px; + position: relative; + text-shadow: 1px 1px 0 rgba(0,0,0,.15); +} + +.infobox .infobox-content { + color: #555; + max-width: 140px; +} + +/* Log Box */ + +.logbox { + padding: 15px 20px 20px; +} + +.logbox .description { + padding-bottom: 15px; + border-bottom: 1px dashed #e6e6e6; + display: block; + color: #7b7b7b; +} + +.logbox tr { + line-height: 23px; + border-bottom: 1px solid #e6e6e6; +} + +.logbox tr td { + color: #7b7b7b; + padding: 10px; + cursor: pointer; +} + +/* Alert box custom */ +.alert { + padding: 8px 35px 8px 14px; + margin-bottom: 8px; + margin-top: 8px; + color: #c09853; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + background-color: #fcf8e3; + border: 1px solid #fbeed5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + white-space: pre-line; +} + +.alert-heading { + color: inherit; +} + +.alert .close { + position: relative; + top: -2px; + right: -21px; + line-height: 18px; +} + +.alert-success { + color: #468847; + background-color: #dff0d8; + border-color: #d6e9c6; +} + +.alert-danger, +.alert-error { + color: #b94a48; + background-color: #f2dede; + border-color: #eed3d7; +} + +.alert-info { + color: #3a87ad; + background-color: #d9edf7; + border-color: #bce8f1; +} + +.alert-block > p, +.alert-block > ul { +margin-bottom: 0; +} + +.alert-block p + p { +margin-top: 5px; +} + +.danger-button { + padding: 6pt; + margin-right: 12pt; + background-color: #d63319; + color: #FFFFFF; + border-radius: 0.325em; + border-width: 0.5px; + border-style: solid; + min-width: 8em; + line-height: 1.5; +} +.danger-button:disabled { + background-color: #af441a; + opacity: 0.5; +} diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_custom_css.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_custom_css.xml similarity index 96% rename from bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_custom_css.xml rename to bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_custom_css.xml index e0d1d45122e52b01335eb5c2c295411fa77016b4..594e331eec94194efed0fbbeb001a4dbd24a9b4d 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_custom_css.xml +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_custom_css.xml @@ -76,7 +76,7 @@ </item> <item> <key> <string>default_reference</string> </key> - <value> <string>gadget_monitoring_custom.css</string> </value> + <value> <string>gadget_officejs_monitoring_custom.css</string> </value> </item> <item> <key> <string>description</string> </key> @@ -86,7 +86,7 @@ </item> <item> <key> <string>id</string> </key> - <value> <string>gadget_monitoring_custom_css</string> </value> + <value> <string>gadget_officejs_monitoring_custom_css</string> </value> </item> <item> <key> <string>language</string> </key> @@ -106,7 +106,7 @@ </item> <item> <key> <string>title</string> </key> - <value> <string>Monitoring Custom css</string> </value> + <value> <string>Officejs Monitoring Custom css</string> </value> </item> <item> <key> <string>version</string> </key> @@ -239,7 +239,7 @@ </item> <item> <key> <string>serial</string> </key> - <value> <string>961.59579.23436.30429</string> </value> + <value> <string>962.57554.52005.49783</string> </value> </item> <item> <key> <string>state</string> </key> @@ -257,7 +257,7 @@ </tuple> <state> <tuple> - <float>1504708727.24</float> + <float>1508428094.57</float> <string>UTC</string> </tuple> </state> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_global_js.js b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_global_js.js new file mode 100644 index 0000000000000000000000000000000000000000..f3214b8dc99204fb8d82f742773754c3e656c2cf --- /dev/null +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_global_js.js @@ -0,0 +1,304 @@ +/*global window, RSVP, btoa */ +/*jslint nomen: true, indent: 2, maxerr: 3*/ +(function (window, RSVP, btoa) { + "use strict"; + + /* Function used to manage/add/update OPML */ + + window.OPMLManage = (function(){ + var gadget, + self = {}; + + self.init = function (rjs_gadget, template_msg) { + gadget = rjs_gadget; + gadget.props = {gindex: 0}; + self.notify_msg_template = template_msg; + return new RSVP.Queue() + .push(function () { + return gadget.changeState({ + message: gadget.element.querySelector('.ui-message-alert') + }); + }) + .push(function () { + return gadget.getDeclaredGadget("jio_gadget") + .push(function (jio_gadget) { + return gadget.changeState({"jio_gadget": jio_gadget}); + }); + }); + }; + + self.validateHttpUrl = function (value) { + /*jslint regexp: true*/ + if (/\(?(?:(http|https):\/\/)(?:((?:[^\W\s]|\.|-|[:]{1})+)@{1})?((?:www.)?(?:[^\W\s]|\.|-)+[\.][^\W\s]{2,4}|localhost|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}|\[[\dabcedf:]+\])(?::(\d*))?([\/]?[^\s\?]*[\/]{1})*(?:\/?([^\s\n\?\[\]\{\}\#]*(?:(?=\.)){1}|[^\s\n\?\[\]\{\}\.\#]*)?([\.]{1}[^\s\?\#]*)?)?(?:\?{1}([^\s\n\#\[\]]*))?([\#][^\s\n]*)?\)?/i.test(value)) { + return true; + } + /*jslint regexp: false*/ + return false; + }; + + self.changeMonitorPassword = function (base_url, title, basic_login, + password) { + var url = base_url, + jio_gadget, + jio_options; + + url += (url.endsWith('/') ? '' : '/') + 'config/'; + gadget.props.gindex += 1; + return gadget.declareGadget("gadget_officejs_monitoring_jio.html", + { + element: gadget.element, + scope: 'jio_' + gadget.props.gindex + "_gadget", + sandbox: "public" + } + ).push(function(new_gadget) { + jio_gadget = new_gadget; + jio_gadget.createJio({ + type: "query", + sub_storage: { + type: "drivetojiomapping", + sub_storage: { + type: "dav", + url: url, + basic_login: basic_login + } + } + }); + return jio_gadget.get('config'); + }) + .push(function (doc) { + var i; + if (doc) { + for (i = 0; i < doc.length; i += 1) { + if (doc[i].key === 'monitor-password') { + doc[i].value = password; + return jio_gadget.put('config.tmp', doc); + } + } + } + return new Error("Cannot get document 'config.json' at : " % url); + }) + .push(function () { + return {status: 'OK'}; + }, function (error) { + console.log(error); + return { + status: 'ERROR', + code: error.status || error.target.status, + url: base_url, + title: title + }; + }); + }; + + self.checkCredential = function (url, title, hash) { + var ouput; + // Verify if login and password are correct for this URL + if (url === undefined) { + return {status: 'OK'}; + } + return self.testUrl(url, hash) + .then(function(result) { + return result; + }, function(error) { + var ko_msg = { + status: 'KO', + msg: error.msg + ' (' + url + ')', + title: title + }; + return ko_msg; + }); + }; + + self.testUrl = function (url, credential_hash) { + // test URL availability!! + // check that password is valid for that URL + return new RSVP.Queue() + .push(function () { + return new RSVP.Promise(function (resolve, reject) { + var xhr = new XMLHttpRequest(); + + xhr.onload = function (event) { + var response = event.target; + if (response.status === 200) { + resolve({status: 'OK'}); + } else { + reject({ + status: 'ERROR', + msg: new Error("XHR: " + response.status + ": " + response.statusText) + }); + } + }; + + xhr.onerror = function (e) { + reject({ + status: 'ERROR', + msg: e.target.status + ": " + e.target.statusText + }); + }; + + xhr.open("GET", url, true); + if (credential_hash !== undefined) { + xhr.setRequestHeader('Authorization', 'Basic ' + credential_hash); + } + xhr.send(""); + }); + }); + }; + + self.saveOPML = function (doc, verify_password) { + var opml_dict = { + type: "opml", + title: doc.title, + portal_type: "opml", + url: doc.url, + basic_login: btoa(doc.username + ':' + doc.password), + username: doc.username, + password: doc.password, + active: (doc.active === 1) ? true : false + }, + update_password_list = []; + gadget.state.message.textContent = ""; + + function validateOPML() { + // read the opml online to get the content and title + // it also help to make sure that the opml content is valid + gadget.state.message.textContent = "Reading OPML content..."; + gadget.state.jio_gadget.createJio({ + type: "query", + sub_storage: { + type: "parser", + document_id: doc.url, + attachment_id: 'enclosure', + parser: 'opml', + sub_storage: { + type: "http" + } + } + }); + return gadget.state.jio_gadget.allDocs({ + select_list: ['title', 'opml_title', 'xmlUrl', 'url'] + }) + .push(undefined, function (error) { + gadget.state.message + .innerHTML = self.notify_msg_template({ + status: 'error', + message: error.name + + ": Failed to access OPML URL. " + error.message + }); + return {data: {total_rows: 0}}; + }) + .push(function (opml_result) { + var i, + check_list = [true]; + if (opml_result.data.total_rows > 0) { + opml_dict.title = opml_result.data.rows[0].value.title; + for (i = 1; i < opml_result.data.total_rows; i += 1) { + if (opml_result.data.rows[i].value.url !== undefined) { + check_list.push(self.checkCredential( + opml_result.data.rows[i].value.url, + opml_result.data.rows[i].value.title, + opml_dict.basic_login + )); + update_password_list.push({ + base_url: opml_result.data.rows[i].value.url, + title: opml_result.data.rows[i].value.title + }); + } + } + gadget.state.message.textContent = "Validating password(s)..."; + return RSVP.all(check_list); + } + return [false]; + }) + .push(function (status_list) { + var i, + error_msg = ''; + for (i = 1; i < status_list.length; i += 1) { + if (status_list[i].status !== 'OK') { + error_msg += 'Login/password invalid for instance: ' + + status_list[i].title + '. ' + + status_list[i].msg + '\n'; + } + } + if (error_msg !== '') { + gadget.state.message + .innerHTML = self.notify_msg_template({ + status: 'error', + message: error_msg + }); + return false; + } + return status_list[0]; + }) + .push(function (previous_status) { + var i, + update_promise_list = []; + if (doc.new_password === "") { + return previous_status; + } + if (!previous_status) { + return false; + } + gadget.state.message.textContent = "Updating password(s)..."; + for (i = 0; i < update_password_list.length; i += 1) { + update_promise_list.push(self.changeMonitorPassword( + update_password_list[i].base_url, + update_password_list[i].title, + opml_dict.basic_login, + doc.new_password + )); + } + return new RSVP.Queue() + .push(function () { + return RSVP.all(update_promise_list); + }) + .push(function(result_list) { + var i, + error_msg = ""; + for (i = 0; i < result_list.length; i += 1) { + if (result_list[i].status === 'ERROR') { + error_msg += 'ERROR ' + result_list[i].code + + '. [' + result_list[i].title + '] Failed to ' + + 'change password, please try again\n'; + } + } + if (error_msg !== "") { + gadget.state.message + .innerHTML = self.notify_msg_template({ + status: 'error', + message: error_msg + }); + return false; + } else { + opml_dict.basic_login = + btoa(doc.username + ':' + doc.new_password); + opml_dict.password = doc.new_password; + return true; + } + }); + }); + } + + return new RSVP.Queue() + .push(function () { + if (verify_password) { + return validateOPML(); + } + return true; + }) + .push(function (status) { + if (status) { + gadget.state.message.textContent = "Saving OPML..."; + return gadget.jio_put(opml_dict.url, opml_dict) + .push(function () { + gadget.state.message.textContent = ""; + return status; + }); + } + return status; + }); + }; + + return self; + })(); +}(window, RSVP, btoa)); diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_log_widget_js.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_global_js.xml similarity index 95% rename from bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_log_widget_js.xml rename to bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_global_js.xml index 4085a8c15a7fb1a1fa1a4fae45328e9dafc1c53b..d8ecbffb661295dda72b67ea2bce318c70c63b3e 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_log_widget_js.xml +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_global_js.xml @@ -83,7 +83,7 @@ </item> <item> <key> <string>default_reference</string> </key> - <value> <string>gadget_monitoring_log_widget.js</string> </value> + <value> <string>gadget_officejs_monitoring_global.js</string> </value> </item> <item> <key> <string>description</string> </key> @@ -93,7 +93,7 @@ </item> <item> <key> <string>id</string> </key> - <value> <string>gadget_monitoring_log_widget_js</string> </value> + <value> <string>gadget_officejs_monitoring_global_js</string> </value> </item> <item> <key> <string>language</string> </key> @@ -111,7 +111,7 @@ </item> <item> <key> <string>title</string> </key> - <value> <string>Monitoring Logs Widget JS</string> </value> + <value> <string>Monitoring Global Js</string> </value> </item> <item> <key> <string>version</string> </key> @@ -197,7 +197,7 @@ </tuple> <state> <tuple> - <float>1467724062.68</float> + <float>1509018342.18</float> <string>UTC</string> </tuple> </state> @@ -242,7 +242,7 @@ </item> <item> <key> <string>serial</string> </key> - <value> <string>961.21883.33309.38348</string> </value> + <value> <string>963.1892.25677.55654</string> </value> </item> <item> <key> <string>state</string> </key> @@ -260,7 +260,7 @@ </tuple> <state> <tuple> - <float>1502445069.09</float> + <float>1509020867.3</float> <string>UTC</string> </tuple> </state> @@ -317,7 +317,7 @@ </tuple> <state> <tuple> - <float>1467724015.39</float> + <float>1509016096.05</float> <string>UTC</string> </tuple> </state> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_header_html.html b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_header_html.html new file mode 100644 index 0000000000000000000000000000000000000000..644a096c6d2fccf7e509927625599c9b4a039226 --- /dev/null +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_header_html.html @@ -0,0 +1,81 @@ +<!DOCTYPE html> +<html> + <head> + <!-- + data-i18n=Front + data-i18n=Previous + data-i18n=Cancel + data-i18n=Back + data-i18n=Editable + data-i18n=Viewable + data-i18n=New + data-i18n=Save + data-i18n=Proceed + data-i18n=Add + data-i18n=Filter + data-i18n=Views + data-i18n=Jump + data-i18n=Delete + data-i18n=Export + data-i18n=Actions + data-i18n=Cut + data-i18n=Add + data-i18n=Previous + data-i18n=Next + data-i18n=Loading + --> + <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> + <meta name="viewport" content="width=device-width, user-scalable=no" /> + <title>ERP5 Header</title> + + <!-- renderjs --> + <script src="rsvp.js" type="text/javascript"></script> + <script src="renderjs.js" type="text/javascript"></script> + <script src="handlebars.js" type="text/javascript"></script> + <script src="gadget_global.js" type="text/javascript"></script> + + <!-- custom script --> + <script src="gadget_officejs_monitoring_header.js" type="text/javascript"></script> + + <script id="header-title-link-template" type="text/x-handlebars-template"><a data-i18n="{{title}}" class="ui-btn ui-btn-icon-left ui-icon-{{icon}}" href="{{url}}" accesskey="u">{{title}}</a></script> + <script id="header-title-template" type="text/x-handlebars-template"><span data-i18n="{{title}}" class="ui-btn-icon-left ui-icon-{{icon}}" >{{title}}</span></script> + + <script id="header-link-template" type="text/x-handlebars-template"> + <a role="button" data-i18n="{{title}}" href="{{url}}" class="responsive ui-btn ui-icon-{{icon}} ui-btn-icon-left ui-first-child ui-last-child {{class}}">{{title}}</a> + </script> + + <script id="header-button-template" type="text/x-handlebars-template"> + <form><button name='{{name}}' data-i18n="{{title}}" type='submit' class='responsive ui-btn ui-icon-{{icon}} ui-btn-icon-left ui-first-child ui-last-child {{class}}'>{{title}}</button></form> + </script> + + <script id="sub-header-template" type="text/x-handlebars-template"> + {{#each sub_header_list}} + <li class="ui-block-{{block}}"><a href="{{url}}" data-i18n="{{title}}" class="ui-btn ui-btn-icon-top ui-icon-{{icon}} {{class}}">{{title}}</a></li> + {{/each}} + </script> + + </head> + <body> + + <div data-role="header" data-theme="a" class="ui-header ui-bar-a" data-position="fixed" data-tap-toggle="false"> + + <div class="ui-controlgroup ui-controlgroup-horizontal ui-btn-left"> + <div class="ui-controlgroup-controls"> + </div> + </div> + + <h1 class="ui-title"></h1> + + <div class="ui-controlgroup ui-controlgroup-horizontal ui-btn-right"> + <div class="ui-controlgroup-controls"> + </div> + </div> + + <div class="ui-navbar ui-subheader ui-grid-container ui-body-a" role="navigation"> + <ul class="ui-grid-d"> + </ul> + </div> + </div> + + </body> +</html> \ No newline at end of file diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_header_html.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_header_html.xml new file mode 100644 index 0000000000000000000000000000000000000000..e7bd22a1363cdfd802f783d783b5d16c608a10bc --- /dev/null +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_header_html.xml @@ -0,0 +1,332 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Web Page" module="erp5.portal_type"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_Access_contents_information_Permission</string> </key> + <value> + <tuple> + <string>Anonymous</string> + <string>Assignee</string> + <string>Assignor</string> + <string>Associate</string> + <string>Auditor</string> + <string>Manager</string> + <string>Owner</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Add_portal_content_Permission</string> </key> + <value> + <tuple> + <string>Assignee</string> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Change_local_roles_Permission</string> </key> + <value> + <tuple> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Modify_portal_content_Permission</string> </key> + <value> + <tuple> + <string>Assignee</string> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_View_Permission</string> </key> + <value> + <tuple> + <string>Anonymous</string> + <string>Assignee</string> + <string>Assignor</string> + <string>Associate</string> + <string>Auditor</string> + <string>Manager</string> + <string>Owner</string> + </tuple> + </value> + </item> + <item> + <key> <string>categories</string> </key> + <value> + <tuple> + <string>classification/collaborative/team</string> + </tuple> + </value> + </item> + <item> + <key> <string>content_md5</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>text/html</string> </value> + </item> + <item> + <key> <string>default_reference</string> </key> + <value> <string>gadget_officejs_monitoring_header.html</string> </value> + </item> + <item> + <key> <string>description</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>gadget_officejs_monitoring_header_html</string> </value> + </item> + <item> + <key> <string>language</string> </key> + <value> <string>en</string> </value> + </item> + <item> + <key> <string>portal_type</string> </key> + <value> <string>Web Page</string> </value> + </item> + <item> + <key> <string>short_title</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string>Gadget Officejs Monitoring Header</string> </value> + </item> + <item> + <key> <string>version</string> </key> + <value> <string>001</string> </value> + </item> + <item> + <key> <string>workflow_history</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="2" aka="AAAAAAAAAAI="> + <pickle> + <global name="PersistentMapping" module="Persistence.mapping"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> + <dictionary> + <item> + <key> <string>document_publication_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> + </value> + </item> + <item> + <key> <string>edit_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> + </value> + </item> + <item> + <key> <string>processing_status_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent> + </value> + </item> + </dictionary> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="3" aka="AAAAAAAAAAM="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> + </pickle> + <pickle> + <tuple> + <none/> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>publish_alive</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1506091264.63</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + <item> + <key> <string>validation_state</string> </key> + <value> <string>published_alive</string> </value> + </item> + </dictionary> + </list> + </tuple> + </pickle> + </record> + <record id="4" aka="AAAAAAAAAAQ="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> + </pickle> + <pickle> + <tuple> + <none/> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>edit</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>serial</string> </key> + <value> <string>962.17168.33730.14216</string> </value> + </item> + <item> + <key> <string>state</string> </key> + <value> <string>current</string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1506091257.12</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + </dictionary> + </list> + </tuple> + </pickle> + </record> + <record id="5" aka="AAAAAAAAAAU="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> + </pickle> + <pickle> + <tuple> + <none/> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>detect_converted_file</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>external_processing_state</string> </key> + <value> <string>converted</string> </value> + </item> + <item> + <key> <string>serial</string> </key> + <value> <string>0.0.0.0</string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1506091214.66</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + </dictionary> + </list> + </tuple> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_header_js.js b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_header_js.js new file mode 100644 index 0000000000000000000000000000000000000000..57ec449d676107c2e06876fce84c4422dace1dd9 --- /dev/null +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_header_js.js @@ -0,0 +1,363 @@ +/*jslint nomen: true, indent: 2, maxerr: 3 */ +/*global window, rJS, Handlebars, document, RSVP */ +(function (window, rJS, Handlebars, document, RSVP) { + "use strict"; + + ///////////////////////////////////////////////////////////////// + // Handlebars + ///////////////////////////////////////////////////////////////// + // Precompile the templates while loading the first gadget instance + var gadget_klass = rJS(window), + template_element = gadget_klass.__template_element, + + header_title_template = Handlebars.compile(template_element + .getElementById("header-title-template") + .innerHTML), + header_title_link_template = Handlebars.compile(template_element + .getElementById("header-title-link-template") + .innerHTML), + sub_header_template = Handlebars.compile(template_element + .getElementById("sub-header-template") + .innerHTML), + header_button_template = Handlebars.compile(template_element + .getElementById("header-button-template") + .innerHTML), + header_link_template = Handlebars.compile(template_element + .getElementById("header-link-template") + .innerHTML), + + possible_left_button_list = [ + ['panel_action', 'Menu', 'bars', 'panel'] + ], + possible_main_link_list = [ + // ['menu_url', 'Menu', 'bars'], + ['front_url', 'Front', 'arrow-up'], + ['selection_url', 'Previous', 'arrow-up'], + ['cancel_url', 'Cancel', 'times'], + ['back_url', 'Back', 'times'] + ], + possible_right_link_list = [ + ['edit_url', 'Editable', 'pencil'], + ['view_url', 'Viewable', 'eye'], + ['right_url', 'New', 'plus'] + ], + possible_right_button_list = [ + ['save_action', 'Save', 'check', 'submit'], + ['submit_action', 'Proceed', 'check', 'submit'], + ['add_action', 'Add', 'check', 'submit'], + ['filter_action', 'Filter', 'filter', 'submit'], + ['refresh_action', 'Refresh', 'refresh', 'submit'] + ], + possible_sub_header_list = [ + ['tab_url', 'Views', 'eye'], + ['jump_url', 'Jump', 'plane'], + ['delete_url', 'Delete', 'times'], + ['import_url', 'Import', 'upload'], + ['export_url', 'Export', 'share-square-o'], + ['actions_url', 'Actions', 'cogs'], + ['cut_url', 'Cut', 'scissors'], + ['add_url', 'Add', 'plus'], + ['previous_url', 'Previous', 'carat-l'], + ['next_url', 'Next', 'carat-r'], + ['edit_content', 'Content', 'file-text'], + ['edit_properties', 'Properties', 'info'], + ['change_password', 'Change Password', 'pencil-square-o'], + ['resources_url', 'Resources', 'picture-o'], + ['processes_url', 'Processes', 'list-alt'] + ]; + + gadget_klass + .setState({ + loaded: false, + modified: false, + submitted: true, + error: false, + title_text: '', + title_icon: undefined, + title_url: undefined + }) + ///////////////////////////////////////////////////////////////// + // ready + ///////////////////////////////////////////////////////////////// + // Init local properties + .ready(function () { + this.props = { + element_list: [ + this.element.querySelector("h1"), + this.element.querySelector(".ui-btn-left > div"), + this.element.querySelector(".ui-btn-right > div"), + this.element.querySelector(".ui-subheader").querySelector("ul") + ] + }; + }) + + ////////////////////////////////////////////// + // acquired methods + ////////////////////////////////////////////// + .declareAcquiredMethod("translateHtml", "translateHtml") + .declareAcquiredMethod("triggerSubmit", "triggerSubmit") + .declareAcquiredMethod("triggerPanel", "triggerPanel") + + ///////////////////////////////////////////////////////////////// + // declared methods + ///////////////////////////////////////////////////////////////// + .declareMethod('notifyLoaded', function () { + return this.changeState({ + loaded: true + }); + }) + .declareMethod('notifyLoading', function () { + return this.changeState({ + loaded: false + }); + }) + .declareMethod('notifySubmitted', function () { + return this.changeState({ + submitted: true, + // Change modify here, to allow user to redo some modification and being correctly notified + modified: false + }); + }) + .declareMethod('notifySubmitting', function () { + return this.changeState({ + submitted: false + }); + }) + .declareMethod('notifyError', function () { + return this.changeState({ + loaded: true, + submitted: true, + error: true + }); + }) + .declareMethod('notifyChange', function () { + return this.changeState({ + modified: true + }); + }) +/* + .declareMethod('notifyUpdate', function () { + return this.render(this.stats.options); + }) +*/ + .declareMethod('render', function (options) { + var state = { + error: false, + title_text: '', + title_icon: undefined, + title_url: undefined, + left_button_title: undefined, + left_button_icon: undefined, + left_button_name: undefined, + right_link_title: undefined, + right_link_icon: undefined, + right_link_url: undefined, + right_link_class: undefined, + right_button_title: undefined, + right_button_icon: undefined, + right_button_name: undefined + }, + klass, + sub_header_list = [], + i; + + // Main title + if (options.hasOwnProperty("page_title")) { + state.title_text = options.page_title; + } + if (options.hasOwnProperty("page_icon")) { + state.title_icon = options.page_icon; + } + for (i = 0; i < possible_main_link_list.length; i += 1) { + if (options.hasOwnProperty(possible_main_link_list[i][0])) { + state.title_icon = possible_main_link_list[i][2]; + state.title_url = options[possible_main_link_list[i][0]]; + } + } + + // Left button + for (i = 0; i < possible_left_button_list.length; i += 1) { + if (options.hasOwnProperty(possible_left_button_list[i][0])) { + state.left_button_title = possible_left_button_list[i][1]; + state.left_button_icon = possible_left_button_list[i][2]; + state.left_button_name = possible_left_button_list[i][3]; + } + } + + // Handle right link + for (i = 0; i < possible_right_link_list.length; i += 1) { + if (options.hasOwnProperty(possible_right_link_list[i][0])) { + klass = ""; + if (!options[possible_right_link_list[i][0]]) { + klass = "ui-disabled"; + } + state.right_link_title = possible_right_link_list[i][1]; + state.right_link_icon = possible_right_link_list[i][2]; + state.right_link_url = options[possible_right_link_list[i][0]]; + state.right_link_class = klass; + } + } + for (i = 0; i < possible_right_button_list.length; i += 1) { + if (options.hasOwnProperty(possible_right_button_list[i][0])) { + state.right_button_title = possible_right_button_list[i][1]; + state.right_button_icon = possible_right_button_list[i][2]; + state.right_button_name = possible_right_button_list[i][3]; + } + } + + // Sub header + for (i = 0; i < possible_sub_header_list.length; i += 1) { + if (options.hasOwnProperty(possible_sub_header_list[i][0])) { + klass = ""; + if (!options[possible_sub_header_list[i][0]]) { + klass = "ui-disabled"; + } + sub_header_list.push({ + title: possible_sub_header_list[i][1], + icon: possible_sub_header_list[i][2], + url: options[possible_sub_header_list[i][0]], + class: klass + }); + } + } + state.sub_header_list = sub_header_list; + + return this.changeState(state); + }) + + .onStateChange(function (modification_dict) { + var gadget = this, + right_link, + right_button, + default_title_icon = "", + default_right_icon = "", + title_link, + promise_list = []; + // Main title + if (modification_dict.hasOwnProperty('error') || + modification_dict.hasOwnProperty('loaded') || + modification_dict.hasOwnProperty('submitted') || + modification_dict.hasOwnProperty('title_text') || + modification_dict.hasOwnProperty('title_icon') || + modification_dict.hasOwnProperty('title_url')) { + if (gadget.state.error) { + default_title_icon = "exclamation"; + } else if (!gadget.state.loaded) { + default_title_icon = "spinner"; + } else if (!gadget.state.submitted) { + default_title_icon = "spinner"; + } + // Updating globally the page title. Does not follow RenderJS philosophy, but, it is enough for now + document.title = gadget.state.title_text; + title_link = { + title: gadget.state.title_text, + icon: default_title_icon || gadget.state.title_icon, + url: gadget.state.title_url + }; + if (title_link.url === undefined) { + promise_list.push(gadget.translateHtml(header_title_template(title_link))); + } else { + promise_list.push(gadget.translateHtml(header_title_link_template(title_link))); + } + } else { + promise_list.push(null); + } + + // Left button + if (modification_dict.hasOwnProperty('left_button_title') || + modification_dict.hasOwnProperty('left_button_icon') || + modification_dict.hasOwnProperty('left_button_name')) { + if (gadget.state.left_button_title === undefined) { + promise_list.push(""); + } else { + promise_list.push(gadget.translateHtml(header_button_template({ + title: gadget.state.left_button_title, + icon: gadget.state.left_button_icon, + name: gadget.state.left_button_name + }))); + } + } else { + promise_list.push(null); + } + + // Handle right link + if (modification_dict.hasOwnProperty('loaded') || + modification_dict.hasOwnProperty('submitted') || + modification_dict.hasOwnProperty('modified') || + modification_dict.hasOwnProperty('right_link_title') || + modification_dict.hasOwnProperty('right_link_icon') || + modification_dict.hasOwnProperty('right_link_url') || + modification_dict.hasOwnProperty('right_link_class') || + modification_dict.hasOwnProperty('right_button_title') || + modification_dict.hasOwnProperty('right_button_icon')) { + if (gadget.state.modified) { + default_right_icon = "warning"; + } + if (gadget.state.right_link_title !== undefined) { + right_link = { + title: gadget.state.right_link_title, + icon: gadget.state.right_link_icon, + url: gadget.state.right_link_url, + class: gadget.state.right_link_class + }; + } + if (gadget.state.right_button_title !== undefined) { + right_button = { + title: gadget.state.right_button_title, + icon: default_right_icon || gadget.state.right_button_icon, + name: gadget.state.right_button_name + }; + if (gadget.state.error || !gadget.state.loaded || !gadget.state.submitted) { + right_button.class = "ui-disabled"; + } + } + + if (right_button !== undefined) { + promise_list.push(gadget.translateHtml(header_button_template(right_button))); + } else if (right_link !== undefined) { + promise_list.push(gadget.translateHtml(header_link_template(right_link))); + } else { + promise_list.push(""); + } + } else { + promise_list.push(null); + } + + // Handle sub header + if (modification_dict.hasOwnProperty('sub_header_list')) { + promise_list.push(gadget.translateHtml(sub_header_template({ + sub_header_list: gadget.state.sub_header_list + }))); + } else { + promise_list.push(null); + } + + return new RSVP.Queue() + .push(function () { + return RSVP.all(promise_list); + }) + .push(function (result_list) { + var j; + for (j = 0; j < result_list.length; j += 1) { + if (result_list[j] !== null) { + gadget.props.element_list[j].innerHTML = result_list[j]; + } + } + }); + }) + + ////////////////////////////////////////////// + // handle button submit + ////////////////////////////////////////////// + .onEvent('submit', function (evt) { + var name = evt.target[0].getAttribute("name"); + if (name === "panel") { + return this.triggerPanel(); + } + if (name === "submit") { + return this.triggerSubmit(); + } + throw new Error("Unsupported button " + name); + }); + +}(window, rJS, Handlebars, document, RSVP)); \ No newline at end of file diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_header_js.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_header_js.xml new file mode 100644 index 0000000000000000000000000000000000000000..08fc0ce8631aa3805a25341aa30dee5ce9813d93 --- /dev/null +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_header_js.xml @@ -0,0 +1,332 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Web Script" module="erp5.portal_type"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_Access_contents_information_Permission</string> </key> + <value> + <tuple> + <string>Anonymous</string> + <string>Assignee</string> + <string>Assignor</string> + <string>Associate</string> + <string>Auditor</string> + <string>Manager</string> + <string>Owner</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Add_portal_content_Permission</string> </key> + <value> + <tuple> + <string>Assignee</string> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Change_local_roles_Permission</string> </key> + <value> + <tuple> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Modify_portal_content_Permission</string> </key> + <value> + <tuple> + <string>Assignee</string> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_View_Permission</string> </key> + <value> + <tuple> + <string>Anonymous</string> + <string>Assignee</string> + <string>Assignor</string> + <string>Associate</string> + <string>Auditor</string> + <string>Manager</string> + <string>Owner</string> + </tuple> + </value> + </item> + <item> + <key> <string>categories</string> </key> + <value> + <tuple> + <string>classification/collaborative/team</string> + </tuple> + </value> + </item> + <item> + <key> <string>content_md5</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>text/javascript</string> </value> + </item> + <item> + <key> <string>default_reference</string> </key> + <value> <string>gadget_officejs_monitoring_header.js</string> </value> + </item> + <item> + <key> <string>description</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>gadget_officejs_monitoring_header_js</string> </value> + </item> + <item> + <key> <string>language</string> </key> + <value> <string>en</string> </value> + </item> + <item> + <key> <string>portal_type</string> </key> + <value> <string>Web Script</string> </value> + </item> + <item> + <key> <string>short_title</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string>Gadget Officejs Monitoring Header JS</string> </value> + </item> + <item> + <key> <string>version</string> </key> + <value> <string>001</string> </value> + </item> + <item> + <key> <string>workflow_history</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="2" aka="AAAAAAAAAAI="> + <pickle> + <global name="PersistentMapping" module="Persistence.mapping"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> + <dictionary> + <item> + <key> <string>document_publication_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> + </value> + </item> + <item> + <key> <string>edit_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> + </value> + </item> + <item> + <key> <string>processing_status_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent> + </value> + </item> + </dictionary> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="3" aka="AAAAAAAAAAM="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> + </pickle> + <pickle> + <tuple> + <none/> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>publish_alive</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1506091331.03</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + <item> + <key> <string>validation_state</string> </key> + <value> <string>published_alive</string> </value> + </item> + </dictionary> + </list> + </tuple> + </pickle> + </record> + <record id="4" aka="AAAAAAAAAAQ="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> + </pickle> + <pickle> + <tuple> + <none/> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>edit</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>serial</string> </key> + <value> <string>962.38483.42476.54152</string> </value> + </item> + <item> + <key> <string>state</string> </key> + <value> <string>current</string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1507899173.02</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + </dictionary> + </list> + </tuple> + </pickle> + </record> + <record id="5" aka="AAAAAAAAAAU="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> + </pickle> + <pickle> + <tuple> + <none/> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>detect_converted_file</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>external_processing_state</string> </key> + <value> <string>converted</string> </value> + </item> + <item> + <key> <string>serial</string> </key> + <value> <string>0.0.0.0</string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1506091309.21</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + </dictionary> + </list> + </tuple> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_jio_html.html b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_jio_html.html similarity index 89% rename from bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_jio_html.html rename to bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_jio_html.html index 95901fbbb49199fc10fe4ecf5f1000d5cc0a3c67..de2f2c8152eeb107346ddd985e8a40427545f298 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_jio_html.html +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_jio_html.html @@ -16,7 +16,7 @@ <script src="monitoring_jio_http_storage.js" type="text/javascript"></script> <!-- custom script --> - <script src="gadget_monitoring_jio.js" type="text/javascript"></script> + <script src="gadget_officejs_monitoring_jio.js" type="text/javascript"></script> </head> <body> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_jio_html.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_jio_html.xml similarity index 96% rename from bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_jio_html.xml rename to bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_jio_html.xml index 22f2689beb17f007c7d41cd0a811562fbd5a990b..2f9acbe7e22cdacc967ebe79308b479a4a623a64 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_jio_html.xml +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_jio_html.xml @@ -80,7 +80,7 @@ </item> <item> <key> <string>default_reference</string> </key> - <value> <string>gadget_monitoring_jio.html</string> </value> + <value> <string>gadget_officejs_monitoring_jio.html</string> </value> </item> <item> <key> <string>description</string> </key> @@ -88,7 +88,7 @@ </item> <item> <key> <string>id</string> </key> - <value> <string>gadget_monitoring_jio_html</string> </value> + <value> <string>gadget_officejs_monitoring_jio_html</string> </value> </item> <item> <key> <string>language</string> </key> @@ -106,7 +106,7 @@ </item> <item> <key> <string>title</string> </key> - <value> <string>Monitoring Jio Gadget</string> </value> + <value> <string>Officejs Monitoring Jio Gadget</string> </value> </item> <item> <key> <string>version</string> </key> @@ -237,7 +237,7 @@ </item> <item> <key> <string>serial</string> </key> - <value> <string>961.21883.33309.38348</string> </value> + <value> <string>962.48734.17927.8823</string> </value> </item> <item> <key> <string>state</string> </key> @@ -255,7 +255,7 @@ </tuple> <state> <tuple> - <float>1502462750.17</float> + <float>1507898792.09</float> <string>UTC</string> </tuple> </state> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_jio_js.js b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_jio_js.js similarity index 100% rename from bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_jio_js.js rename to bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_jio_js.js diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_jio_js.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_jio_js.xml similarity index 97% rename from bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_jio_js.xml rename to bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_jio_js.xml index b8d2b387c0c046d5176c138885b191bca2f0cc35..1249340b8b0c28acf5ffc24a74b318543b70d44e 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_jio_js.xml +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_jio_js.xml @@ -80,7 +80,7 @@ </item> <item> <key> <string>default_reference</string> </key> - <value> <string>gadget_monitoring_jio.js</string> </value> + <value> <string>gadget_officejs_monitoring_jio.js</string> </value> </item> <item> <key> <string>description</string> </key> @@ -90,7 +90,7 @@ </item> <item> <key> <string>id</string> </key> - <value> <string>gadget_monitoring_jio_js</string> </value> + <value> <string>gadget_officejs_monitoring_jio_js</string> </value> </item> <item> <key> <string>language</string> </key> @@ -239,7 +239,7 @@ </item> <item> <key> <string>serial</string> </key> - <value> <string>961.37911.38494.42700</string> </value> + <value> <string>962.48734.54444.887</string> </value> </item> <item> <key> <string>state</string> </key> @@ -257,7 +257,7 @@ </tuple> <state> <tuple> - <float>1503418549.74</float> + <float>1507899173.02</float> <string>UTC</string> </tuple> </state> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_panel_html.html b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_panel_html.html new file mode 100644 index 0000000000000000000000000000000000000000..1fa9cd643e9fac87102ce86e2ca2a7ffd1361212 --- /dev/null +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_panel_html.html @@ -0,0 +1,77 @@ +<!DOCTYPE html> +<html> + <head> + <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> + <meta name="viewport" content="width=device-width, user-scalable=no" /> + <title>ERP5 Panel</title> + <!-- + data-i18n=Editable + --> + + <!-- renderjs --> + <script src="rsvp.js" type="text/javascript"></script> + <script src="renderjs.js" type="text/javascript"></script> + <script src="handlebars.js" type="text/javascript"></script> + <script src="gadget_global.js" type="text/javascript"></script> + + <script id="panel-template-header" type="text/x-handlebars-template"> + <div data-role="header" class="ui-bar-inherit"> + <div class="ui-controlgroup ui-controlgroup-horizontal ui-btn-left"> + <div class="ui-controlgroup-controls"> + <button data-i18n="Close" class="ui-btn ui-btn-icon-notext ui-icon-delete">Close</button> + </div> + </div> + <div class="panel_img" style="height: 40px; padding: 5px;"> + <img alt="Officejs Monitoring App" src="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAxIiBoZWlnaHQ9IjI2MSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KCiA8Zz4KICA8dGl0bGU+YmFja2dyb3VuZDwvdGl0bGU+CiAgPHJlY3QgZmlsbD0ibm9uZSIgaWQ9ImNhbnZhc19iYWNrZ3JvdW5kIiBoZWlnaHQ9IjI2MyIgd2lkdGg9IjQwMyIgeT0iLTEiIHg9Ii0xIi8+CiA8L2c+CiA8Zz4KICA8dGl0bGU+TGF5ZXIgMTwvdGl0bGU+CiAgPHJlY3QgaWQ9InN2Z181IiBmaWxsPSIjRkZGRkZGIiB5PSIyMTcuNzk1NDA2IiB4PSIxNDIuODAwNjE0IiB3aWR0aD0iMTA4LjMwOCIgaGVpZ2h0PSIxOC45OTgiLz4KICA8cGF0aCBpZD0ic3ZnXzYiIGZpbGw9IiNGRkZGRkYiIGQ9Im0xNDEuOTkzODkyLDI0MC4zNDcxMjlsLTQuNzA2LDEwLjA5MmMwLDAgMC41MDIsMi45NTkgMi40NjUsMi45NTljMS45NywwIDExMS4yNzQsMCAxMTMuMjI5LDBjMS45NzgsMCAxLjk3OCwtMi45NTkgMS45NzgsLTIuOTU5bC00LjY4OCwtMTAuMDkybC0xMDguMjc4LDB6Ii8+CiAgPHBhdGggc3Ryb2tlPSJudWxsIiBpZD0ic3ZnXzciIGZpbGw9IiNGRkZGRkYiIGQ9Im0zMzguMzY2Mzg3LDc5LjM1NTAzN2M1LjUxMzgzNSwwIDEwLjgzNTA5MywwLjczODQwNiAxNS45MzgzODksMS45OTAxOTVsMCwtNjIuNzAxMTQxYzAsLTQuNTIzNzc2IC0zLjg3ODY4LC04LjIxMDgwNCAtOC42MTA4MjcsLTguMjEwODA0bC0yOTMuMDYxMzUxLDBjLTQuNzUxNDA1LDAgLTguNjI5MjA5LDMuNjg3MDI4IC04LjYyOTIwOSw4LjIxMDgwNGwwLDE2NC4zNzQ0MzNsMCwzLjg1Nzg3OGwwLDE5LjIyNjg4M2MwLDUuMDUzODI4IDMuODc4NjgsOS4yMTc1NjkgOC42MjkyMDksOS4yMTc1NjlsMjkzLjA2MTM1MSwwYzQuNzMyMTQ3LDAgOC42MTA4MjcsLTQuMTYzNzQxIDguNjEwODI3LC05LjIxNzU2OWwwLC03LjU0NDkwNmMtNS4xMDMyOTYsMS4yNTg0NTcgLTEwLjQyNDU1NCwyLjAwMTg2MyAtMTUuOTM4Mzg5LDIuMDAxODYzYy0xOS42NTY4OCwwIC0zNy4yNDM1NTQsLTguNTMyNTAyIC00OC45MzAzNjQsLTIxLjkwMTMxMmwtMjI4LjA5NzE4NSwwbDAsLTE0Ny44MDExNDNsMjc0Ljk0MzMzOSwwbDAsNDguNTg4OTI2YzAuNjk5NDA1LC0wLjAyNTAwMiAxLjM3ODY3OCwtMC4wOTE2NzYgMi4wODQyMSwtMC4wOTE2NzZ6Ii8+CiAgPHBhdGggc3Ryb2tlPSJudWxsIiBpZD0ic3ZnXzgiIGZpbGw9IiNGRkZGRkYiIGQ9Im0zNTIuNjYyNzIyLDg3Ljk4MzY0NGMtNC45MjE3NTEsLTEuMzg4NzUxIC0xMC4xMDU0OTYsLTIuMTU1NDY1IC0xNS40ODgyODksLTIuMTU1NDY1Yy0wLjY4NTYwOSwwIC0xLjM0NTY5OCwwLjA2NjIwOSAtMi4wMjUzNTIsMC4wOTU2MzVjLTI5LjU2MTk3OSwxLjAyOTkxNSAtNTMuMjEyMDcyLDI0LjMxMjUzNiAtNTMuMjEyMDcyLDUyLjk2ODY5OGMwLDE0Ljg5NTM1MiA2LjQwNDQwMSwyOC4zMjkyMDUgMTYuNjg0Mjc2LDM3Ljk2NzA4NWM5Ljk1NTc4NSw5LjMzOTUzMiAyMy41NDM3NjUsMTUuMDk5NyAzOC41NTIyOTgsMTUuMDk5N2M1LjM4Mjc5MywwIDEwLjU2NjUzOCwtMC43NjY3MTUgMTUuNDg4Mjg5LC0yLjE0NDAyMmMyMi45NjQ0ODUsLTYuNDQxODc0IDM5Ljc0OTEzNiwtMjYuNzcyODg5IDM5Ljc0OTEzNiwtNTAuOTIyNzYzYzAsLTI0LjEzNTk3OSAtMTYuNzgzOCwtNDQuNDc5MjU0IC0zOS43NDgyODUsLTUwLjkwODg2N3oiLz4KICA8cGF0aCBpZD0ic3ZnXzEwIiBmaWxsPSIjM0Q1NzZCIiBkPSJtMzM2Ljg3ODM0MSwxNjcuMzA5MTgzbC0zLjcyOCwwYy0wLjgyLDAgLTEuNDk0LDAuNjc0IC0xLjQ5NCwxLjUxbDAsMTIuMTQzYzAsMC44MzYgMC42NzQsMS41MjMgMS40OTQsMS41MjNsMy43MjgsMGMwLjg0MiwwIDEuNTIzLC0wLjY4OCAxLjUyMywtMS41MjNsMCwtMTIuMTQzYzAuMDAxLC0wLjgzNiAtMC42ODEsLTEuNTEgLTEuNTIzLC0xLjUxeiIvPgogIDxwYXRoIGlkPSJzdmdfMTEiIGZpbGw9IiMzRDU3NkIiIGQ9Im0zMDQuMTQ2MzkzLDE0MC4xNzAxMjdsLTEyLjE2NSwwYy0wLjg0MywwIC0xLjUwMiwwLjY2IC0xLjUwMiwxLjQ5NGwwLDMuNzM2YzAsMC44MiAwLjY1OSwxLjUwOCAxLjUwMiwxLjUwOGwxMi4xNjUsMGMwLjgyLDAgMS41MDksLTAuNjg4IDEuNTA5LC0xLjUwOGwwLC0zLjczNmMwLC0wLjgzNCAtMC42ODksLTEuNDk0IC0xLjUwOSwtMS40OTR6Ii8+CiAgPHBhdGggaWQ9InN2Z18xMiIgZmlsbD0iIzNENTc2QiIgZD0ibTMzNi4zODM1MDQsMTExLjU2MzAxNWwzLjcyOCwwYzAuODQyLDAgMS41MjMsLTAuNjc0IDEuNTIzLC0xLjUwOWwwLC0xMi4xNThjMCwtMC44MzUgLTAuNjgyLC0xLjUxNyAtMS41MjMsLTEuNTE3bC0zLjcyOCwwYy0wLjgyLDAgLTEuNDk0LDAuNjgyIC0xLjQ5NCwxLjUxN2wwLDEyLjE1OGMwLDAuODM1IDAuNjczLDEuNTA5IDEuNDk0LDEuNTA5eiIvPgogIDxwYXRoIHN0cm9rZT0ibnVsbCIgaWQ9InN2Z18xMyIgZmlsbD0iIzNENTc2QiIgZD0ibTM1MS43MDI3MzEsMTQ3LjczODc2M2wtNy4yNTE3MzIsLTMuODUxMzk5YzAuMTI2NjU3LC0wLjUyMTIwNiAwLjIwNjEyOCwtMS4wNjQ1MjUgMC4yMDYxMjgsLTEuNjE5Njg4YzAsLTMuODY3MTk0IC0zLjMwNDY3MSwtNy4wMDIzMjkgLTcuMzU1MjEsLTcuMDAyMzI5Yy0wLjYzNjU5NiwwIC0xLjI1NDk4LDAuMDkyMzk2IC0xLjg0ODUyOSwwLjIyNjY0NmwtMC43OTQ3MSwtMC45NzEzMzlsLTE2Ljk4Mjc5NCwtMjAuODIyOTg1Yy0wLjM4ODI0OSwtMC40OTc1MTUgLTEuMTM5OTEzLC0wLjU3MjUzNyAtMS42NDkwMjQsLTAuMjAyMTY1bC0yLjI5MjI0MywxLjcwNTc2NmMtMC41MDkxMTEsMC4zNjQ4NDQgLTAuNjAwMTcyLDEuMDc1NTggLTAuMjA2MTI4LDEuNTYyMDRsMTcuNjQzMzk3LDIxLjY0OTAxOWMtMC43NjQwODEsMS4xMTM0ODYgLTEuMjEyNzYxLDIuNDMyMjk3IC0xLjIxMjc2MSwzLjg1NjEzOGMwLDIuOTcyNDU2IDEuOTU3ODAyLDUuNDgyOTMzIDQuNjk4NzI1LDYuNTAxNjU1YzAuODMxMTM1LDAuMzExOTM0IDEuNzA0NDg4LDAuNTA5MzYxIDIuNjQzMjQsMC41MDkzNjFjMS41NTg3OTEsMCAyLjk5NTg5MiwtMC40NjI3NjggNC4xNzgwMjQsLTEuMjM4MjZsMTAuMjIyNzksNS40MjYwNzVsMTUuNDI0ODMxLDguMjEyOTQ5YzAuNTU3OTUzLDAuMzExOTM0IDEuMjczMTkyLDAuMTE1Mjk3IDEuNTg4NTkzLC0wLjQzOTg2N2wxLjQxODg4OSwtMi40MDYyMzZjMC4zMTU0MDEsLTAuNTMyMjYyIDAuMTA5MjczLC0xLjIxNTM1OSAtMC40NTUzMDMsLTEuNTI3MjkzbC0xNy45NzYxODIsLTkuNTY4MDg2eiIvPgogIDxwYXRoIGlkPSJzdmdfMTQiIGZpbGw9IiMzRDU3NkIiIGQ9Im0zODIuMzc1NjE2LDEzOC4wMTQ2ODJsLTEyLjE1OCwwYy0wLjgzNSwwIC0xLjUwOSwwLjY2IC0xLjUwOSwxLjQ5NGwwLDMuNzM2YzAsMC44MiAwLjY3NCwxLjUwOCAxLjUwOSwxLjUwOGwxMi4xNTgsMGMwLjgzNSwwIDEuNTA5LC0wLjY4OCAxLjUwOSwtMS41MDhsMCwtMy43MzZjLTAuMDAxLC0wLjgzNCAtMC42NzQsLTEuNDk0IC0xLjUwOSwtMS40OTR6Ii8+CiAgPHBhdGggaWQ9InN2Z18xNSIgZmlsbD0iI0ZGRkZGRiIgZD0ibTIzOS43MzIxNjgsMTE1LjU1MDEyN2wtMTIwLjQsMGwwLC0yMi43NDlsMTIwLjQsMGwwLDIyLjc0OXptMzkuMjYxLC00MS40NjJsMCw5LjY1M2wwLDQwLjg2MWwwLDguODI1bDAsMC44NDRsLTE3OC44NjEsMGwwLC02MC4xODRsMTY3LjkzMywwbDEwLjkyOCwwbDAsMC4wMDF6bS0xMC45MjgsOS42NTNsLTE1Ni4xNjcsMGwwLDQwLjg2MWwxNTYuMTY3LDBsMCwtNDAuODYxeiIvPgogPC9nPgo8L3N2Zz4="> + </div> + </div> + </script> + + <script id="panel-template-body" type="text/x-handlebars-template"> + <div class="ui-content"> + + <form class="dialog_form"> + <button type="submit" class="ui-btn ui-btn-b ui-btn-inline + ui-icon-action ui-btn-icon-right ui-screen-hidden">Submit</button> + <div data-gadget-url="gadget_erp5_searchfield.html" + data-gadget-scope="erp5_searchfield" + data-gadget-sandbox="public"></div> + </form> + <ul data-role="listview" class="ui-listview" data-enhanced="true"></ul> + <dl></dl> + </div> + </script> + + <script id="panel-template-body-list" type="text/x-handlebars-template"> + <li class="ui-first-child"><a href="{{promise_list_href}}" class="ui-btn ui-btn-icon-left ui-icon-check" data-i18n="Promises" accesskey="p">Promises</a></li> + <li><a href="{{instance_list_href}}" class="ui-btn ui-btn-icon-left ui-icon-cube" data-i18n="Software Instances">Software Instances</a></li> + <li><a href="{{hosting_list_href}}" class="ui-btn ui-btn-icon-left ui-icon-cubes" data-i18n="Hosting Subscriptions">Hosting Subscriptions</a></li> + <li><a href="{{configurator_href}}" class="ui-btn ui-btn-icon-left ui-icon-gear" data-i18n="Monitoring Configurations">Monitoring Configurations</a></li> + <li><a href="{{synchronize_href}}" class="ui-btn ui-btn-icon-left ui-icon-refresh" data-i18n="Synchronize" accesskey="r">Synchronize</a></li> + <li class="ui-last-child"><a href="{{import_export_href}}" class="ui-btn ui-btn-icon-left ui-icon-exchange" data-i18n="Import / Export">Import / Export</a></li> + </script> + + <script id="panel-template-body-desktop" type="text/x-handlebars-template"> + <dt class="ui-content-title ui-body-c ui-btn ui-btn-icon-left ui-icon-eye" data-i18n="Views">Views</dt> + {{#each view_list}} + <dd data-role="listview" data-theme="c" data-inset="true" class="document-listview"> + <a data-i18n="{{title}}" class="ui-body-inherit" href="{{href}}">{{title}}</a> + </dd> + {{/each}} + <dt class="ui-content-title ui-body-c ui-btn ui-btn-icon-left ui-icon-cogs" data-i18n="Decisions">Decisions</dt> + {{#each workflow_list}} + <dd data-role="listview" data-theme="c" data-inset="true" class="document-listview"> + <a data-i18n="{{title}}" class="ui-body-inherit" href="{{href}}">{{title}}</a> + </dd> + {{/each}} + </script> + + <!-- custom script --> + <script src="gadget_officejs_monitoring_panel.js" type="text/javascript"></script> + + </head> + <body> + <div data-gadget-url="gadget_officejs_monitoring_sync.html" data-gadget-scope="sync_gadget" data-gadget-sandbox="public"></div> + <div class="jqm-navmenu-panel"></div> + </body> +</html> \ No newline at end of file diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_panel_html.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_panel_html.xml new file mode 100644 index 0000000000000000000000000000000000000000..403aecc114c8273d7c78bb7fdc55c3c1b43eb332 --- /dev/null +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_panel_html.xml @@ -0,0 +1,366 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Web Page" module="erp5.portal_type"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_Access_contents_information_Permission</string> </key> + <value> + <tuple> + <string>Anonymous</string> + <string>Assignee</string> + <string>Assignor</string> + <string>Associate</string> + <string>Auditor</string> + <string>Manager</string> + <string>Owner</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Add_portal_content_Permission</string> </key> + <value> + <tuple> + <string>Assignee</string> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Change_local_roles_Permission</string> </key> + <value> + <tuple> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Modify_portal_content_Permission</string> </key> + <value> + <tuple> + <string>Assignee</string> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_View_Permission</string> </key> + <value> + <tuple> + <string>Anonymous</string> + <string>Assignee</string> + <string>Assignor</string> + <string>Associate</string> + <string>Auditor</string> + <string>Manager</string> + <string>Owner</string> + </tuple> + </value> + </item> + <item> + <key> <string>categories</string> </key> + <value> + <tuple> + <string>contributor/person_module/1</string> + <string>classification/collaborative/team</string> + </tuple> + </value> + </item> + <item> + <key> <string>content_md5</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>text/html</string> </value> + </item> + <item> + <key> <string>creators</string> </key> + <value> + <tuple> + <string>cedric.le.ninivin</string> + </tuple> + </value> + </item> + <item> + <key> <string>default_reference</string> </key> + <value> <string>gadget_officejs_monitoring_panel.html</string> </value> + </item> + <item> + <key> <string>description</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>gadget_officejs_monitoring_panel_html</string> </value> + </item> + <item> + <key> <string>language</string> </key> + <value> <string>en</string> </value> + </item> + <item> + <key> <string>modification_date</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1455284352.46</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + <item> + <key> <string>portal_type</string> </key> + <value> <string>Web Page</string> </value> + </item> + <item> + <key> <string>short_title</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string>OfficeJS Monitoring Application Panel Gadget</string> </value> + </item> + <item> + <key> <string>url_string</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>version</string> </key> + <value> <string>001</string> </value> + </item> + <item> + <key> <string>workflow_history</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="2" aka="AAAAAAAAAAI="> + <pickle> + <global name="PersistentMapping" module="Persistence.mapping"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> + <dictionary> + <item> + <key> <string>document_publication_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> + </value> + </item> + <item> + <key> <string>edit_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> + </value> + </item> + <item> + <key> <string>processing_status_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent> + </value> + </item> + </dictionary> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="3" aka="AAAAAAAAAAM="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> + </pickle> + <pickle> + <tuple> + <none/> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>publish_alive</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1506002303.54</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + <item> + <key> <string>validation_state</string> </key> + <value> <string>published_alive</string> </value> + </item> + </dictionary> + </list> + </tuple> + </pickle> + </record> + <record id="4" aka="AAAAAAAAAAQ="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> + </pickle> + <pickle> + <tuple> + <none/> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>edit</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>serial</string> </key> + <value> <string>963.2027.58161.62429</string> </value> + </item> + <item> + <key> <string>state</string> </key> + <value> <string>current</string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1509031392.08</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + </dictionary> + </list> + </tuple> + </pickle> + </record> + <record id="5" aka="AAAAAAAAAAU="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> + </pickle> + <pickle> + <tuple> + <none/> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>detect_converted_file</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>external_processing_state</string> </key> + <value> <string>converted</string> </value> + </item> + <item> + <key> <string>serial</string> </key> + <value> <string>0.0.0.0</string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1506002246.15</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + </dictionary> + </list> + </tuple> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_panel_js.js b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_panel_js.js new file mode 100644 index 0000000000000000000000000000000000000000..b97c39a6b90bea86863d2b2d7b5c8e5d500b08ed --- /dev/null +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_panel_js.js @@ -0,0 +1,319 @@ +/*jslint nomen: true, indent: 2, maxerr: 3, unparam: true */ +/*global window, document, rJS, Handlebars, RSVP, Node, loopEventListener */ +(function (window, document, rJS, Handlebars, RSVP, Node, loopEventListener) { + "use strict"; + + ///////////////////////////////////////////////////////////////// + // temlates + ///////////////////////////////////////////////////////////////// + // Precompile templates while loading the first gadget instance + var gadget_klass = rJS(window), + template_element = gadget_klass.__template_element, + panel_template_header = Handlebars.compile(template_element + .getElementById("panel-template-header") + .innerHTML), + panel_template_body = Handlebars.compile(template_element + .getElementById("panel-template-body") + .innerHTML), + panel_template_body_list = Handlebars.compile(template_element + .getElementById("panel-template-body-list") + .innerHTML), + panel_template_body_desktop = Handlebars.compile(template_element + .getElementById("panel-template-body-desktop") + .innerHTML); + + gadget_klass + .setState({ + visible: false, + desktop: false + }) + ////////////////////////////////////////////// + // acquired method + ////////////////////////////////////////////// + .declareAcquiredMethod("getUrlFor", "getUrlFor") + .declareAcquiredMethod("translateHtml", "translateHtml") + .declareAcquiredMethod("translate", "translate") + .declareAcquiredMethod("redirect", "redirect") + .declareAcquiredMethod("getUrlParameter", "getUrlParameter") + + ///////////////////////////////////////////////////////////////// + // declared methods + ///////////////////////////////////////////////////////////////// + .declareMethod('toggle', function () { + return this.changeState({ + visible: !this.state.visible + }); + }) + .declareMethod('close', function () { + return this.changeState({ + visible: false + }); + }) + + .declareMethod('render', function (options) { + var erp5_document = options.erp5_document, + workflow_list, + view_list, + context = this; + if (erp5_document !== undefined) { + workflow_list = erp5_document._links.action_workflow || []; + view_list = erp5_document._links.action_object_view || []; + if (workflow_list.constructor !== Array) { + workflow_list = [workflow_list]; + } + if (view_list.constructor !== Array) { + view_list = [view_list]; + } + // Prevent has much as possible to modify the DOM panel + // stateChange prefer to compare strings + workflow_list = JSON.stringify(workflow_list); + view_list = JSON.stringify(view_list); + } + return context.getUrlParameter('editable') + .push(function (editable) { + return context.changeState({ + workflow_list: workflow_list, + view_list: view_list, + global: true, + editable: options.editable || editable || false + }); + }); + }) + + .onStateChange(function (modification_dict) { + var context = this, + gadget = this, + queue = new RSVP.Queue(), + tmp_element; + + // XXX - fix double rendering + if (Object.keys(modification_dict).length === 0) { + return; + } + + if (modification_dict.hasOwnProperty("visible")) { + if (this.state.visible) { + if (!this.element.classList.contains('visible')) { + this.element.classList.toggle('visible'); + } + } else { + if (this.element.classList.contains('visible')) { + this.element.classList.remove('visible'); + } + } + } + + if (modification_dict.hasOwnProperty("global") && + !modification_dict.hasOwnProperty("desktop")) { + queue + .push(function () { + // XXX: Customize panel header! + return context.translateHtml( + panel_template_header() + + panel_template_body() + ); + }) + .push(function (my_translated_or_plain_html) { + tmp_element = document.createElement('div'); + tmp_element.innerHTML = my_translated_or_plain_html; + + return context.declareGadget('gadget_erp5_searchfield.html', { + scope: "erp5_searchfield", + element: tmp_element.querySelector('[data-gadget-scope="erp5_searchfield"]') + }); + }) + .push(function (search_gadget) { + return search_gadget.render({ + focus: false + }); + }) + + .push(function () { + context.element.querySelector("div").appendChild(tmp_element); + return context.listenResize(); + }); + } + + if (modification_dict.hasOwnProperty("editable")) { + queue + // Update the global links + .push(function () { + return RSVP.all([ + context.getUrlFor({command: 'display', options: {page: "ojsm_status_list"}}), + context.getUrlFor({command: 'display', options: {page: "ojsm_software_instance_list"}}), + context.getUrlFor({command: 'display', options: {page: "ojsm_hosting_subscription_list"}}), + context.getUrlFor({command: 'display', options: {page: "settings_configurator"}}), + context.getUrlFor({command: 'display', options: {page: "ojsm_import_export"}}), + context.getUrlFor({command: 'display', options: {page: "ojsm_synchronize"}}) + ]); + }) + .push(function (result_list) { + return context.translateHtml( + panel_template_body_list({ + "promise_list_href": result_list[0], + "instance_list_href": result_list[1], + "hosting_list_href": result_list[2], + "configurator_href": result_list[3], + "import_export_href": result_list[4], + "synchronize_href": result_list[5] + }) + ); + }) + + .push(function (result) { + context.element.querySelector("ul").innerHTML = result; + }); + } + + if ((this.state.global === true) && + (modification_dict.hasOwnProperty("desktop") || + modification_dict.hasOwnProperty("editable") || + modification_dict.hasOwnProperty("workflow_list") || + modification_dict.hasOwnProperty("view_list"))) { + if (!(this.state.desktop && (this.state.view_list !== undefined))) { + queue + .push(function () { + gadget.element.querySelector("dl").textContent = ''; + }); + } else { + queue + .push(function () { + var i = 0, + promise_list = [], + workflow_list = JSON.parse(gadget.state.workflow_list), + view_list = JSON.parse(gadget.state.view_list); + + for (i = 0; i < workflow_list.length; i += 1) { + promise_list.push( + gadget.getUrlFor({ + command: 'change', + options: { + view: workflow_list[i].href, + page: undefined + } + }) + ); + } + for (i = 0; i < view_list.length; i += 1) { + promise_list.push( + gadget.getUrlFor({ + command: 'change', + options: { + view: view_list[i].href, + page: undefined + } + }) + ); + } + return RSVP.all(promise_list); + }) + .push(function (result_list) { + var i, + result_workflow_list = [], + result_view_list = [], + workflow_list = JSON.parse(gadget.state.workflow_list), + view_list = JSON.parse(gadget.state.view_list); + + for (i = 0; i < workflow_list.length; i += 1) { + result_workflow_list.push({ + title: workflow_list[i].title, + href: result_list[i] + }); + } + for (i = 0; i < view_list.length; i += 1) { + result_view_list.push({ + title: view_list[i].title, + href: result_list[i + workflow_list.length] + }); + } + gadget.element.querySelector("dl").innerHTML = panel_template_body_desktop({ + workflow_list: result_workflow_list, + view_list: result_view_list + }); + }); + } + } + + return queue; + }) + + ///////////////////////////////////////////////////////////////// + // declared services + ///////////////////////////////////////////////////////////////// + .onEvent('click', function (evt) { + if ((evt.target.nodeType === Node.ELEMENT_NODE) && + (evt.target.tagName === 'BUTTON')) { + return this.toggle(); + } + }, false, false) + + .declareJob('listenResize', function () { + // resize should be only trigger after the render method + // as displaying the panel rely on external gadget (for translation for example) + var result, + event, + context = this; + function extractSizeAndDispatch() { + if (window.matchMedia("(min-width: 85em)").matches) { + return context.changeState({ + desktop: true + }); + } + return context.changeState({ + desktop: false + }); + } + result = loopEventListener(window, 'resize', false, + extractSizeAndDispatch); + event = document.createEvent("Event"); + event.initEvent('resize', true, true); + window.dispatchEvent(event); + return result; + }) + .declareService(function () { + return this.getDeclaredGadget("sync_gadget") + .push(function (sync_gadget) { + return sync_gadget.registerSync(); + }); + }) + + .allowPublicAcquisition('notifyChange', function (argument_list, scope) { + // Typing a search query should not modify the header status + return; + }) + .allowPublicAcquisition('notifyValid', function () { + // Typing a search query should not modify the header status + return; + }) + + .onEvent('submit', function () { + var gadget = this; + + return gadget.getDeclaredGadget("erp5_searchfield") + .push(function (search_gadget) { + return search_gadget.getContent(); + }) + .push(function (data) { + var options = { + page: "ojsm_status_list" + }; + if (data.search) { + options.extended_search = data.search; + } + // Remove focus from the search field + document.activeElement.blur(); + return gadget.redirect({command: 'display', options: options}); + }); + + }, false, true) + + .onEvent('blur', function (evt) { + // XXX Horrible hack to clear the search when focus is lost + // This does not follow renderJS design, as a gadget should not touch + // another gadget content + if (evt.target.type === 'search') { + evt.target.value = ""; + } + }, true, false); + +}(window, document, rJS, Handlebars, RSVP, Node, loopEventListener)); diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_panel_js.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_panel_js.xml new file mode 100644 index 0000000000000000000000000000000000000000..0d3469fcb9833927527347079d16571c348a2f82 --- /dev/null +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_panel_js.xml @@ -0,0 +1,332 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Web Script" module="erp5.portal_type"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_Access_contents_information_Permission</string> </key> + <value> + <tuple> + <string>Anonymous</string> + <string>Assignee</string> + <string>Assignor</string> + <string>Associate</string> + <string>Auditor</string> + <string>Manager</string> + <string>Owner</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Add_portal_content_Permission</string> </key> + <value> + <tuple> + <string>Assignee</string> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Change_local_roles_Permission</string> </key> + <value> + <tuple> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Modify_portal_content_Permission</string> </key> + <value> + <tuple> + <string>Assignee</string> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_View_Permission</string> </key> + <value> + <tuple> + <string>Anonymous</string> + <string>Assignee</string> + <string>Assignor</string> + <string>Associate</string> + <string>Auditor</string> + <string>Manager</string> + <string>Owner</string> + </tuple> + </value> + </item> + <item> + <key> <string>categories</string> </key> + <value> + <tuple> + <string>classification/collaborative/team</string> + </tuple> + </value> + </item> + <item> + <key> <string>content_md5</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>text/javascript</string> </value> + </item> + <item> + <key> <string>default_reference</string> </key> + <value> <string>gadget_officejs_monitoring_panel.js</string> </value> + </item> + <item> + <key> <string>description</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>gadget_officejs_monitoring_panel_js</string> </value> + </item> + <item> + <key> <string>language</string> </key> + <value> <string>en</string> </value> + </item> + <item> + <key> <string>portal_type</string> </key> + <value> <string>Web Script</string> </value> + </item> + <item> + <key> <string>short_title</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string>Gadget Officejs Monitoring Panel JS</string> </value> + </item> + <item> + <key> <string>version</string> </key> + <value> <string>001</string> </value> + </item> + <item> + <key> <string>workflow_history</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="2" aka="AAAAAAAAAAI="> + <pickle> + <global name="PersistentMapping" module="Persistence.mapping"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> + <dictionary> + <item> + <key> <string>document_publication_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> + </value> + </item> + <item> + <key> <string>edit_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> + </value> + </item> + <item> + <key> <string>processing_status_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent> + </value> + </item> + </dictionary> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="3" aka="AAAAAAAAAAM="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> + </pickle> + <pickle> + <tuple> + <none/> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>publish_alive</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1506003162.94</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + <item> + <key> <string>validation_state</string> </key> + <value> <string>published_alive</string> </value> + </item> + </dictionary> + </list> + </tuple> + </pickle> + </record> + <record id="4" aka="AAAAAAAAAAQ="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> + </pickle> + <pickle> + <tuple> + <none/> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>edit</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>serial</string> </key> + <value> <string>962.52822.35420.57019</string> </value> + </item> + <item> + <key> <string>state</string> </key> + <value> <string>current</string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1509093907.79</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + </dictionary> + </list> + </tuple> + </pickle> + </record> + <record id="5" aka="AAAAAAAAAAU="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> + </pickle> + <pickle> + <tuple> + <none/> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>detect_converted_file</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>external_processing_state</string> </key> + <value> <string>converted</string> </value> + </item> + <item> + <key> <string>serial</string> </key> + <value> <string>0.0.0.0</string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1506003139.6</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + </dictionary> + </list> + </tuple> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_parameter_view_html.html b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_parameter_view_html.html new file mode 100644 index 0000000000000000000000000000000000000000..331f1ef3fbc86f7e9e2893e8a9f785d29b71eb21 --- /dev/null +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_parameter_view_html.html @@ -0,0 +1,28 @@ +<!DOCTYPE html> +<html> + <head> + <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> + <meta name="viewport" content="width=device-width, user-scalable=no" /> + <title>Monitoring Instance Parameters View Page</title> + + <!-- renderjs --> + <script src="rsvp.js" type="text/javascript"></script> + <script src="renderjs.js" type="text/javascript"></script> + + <!-- custom script --> + <script src="gadget_officejs_monitoring_parameter_view.js" type="text/javascript"></script> + + </head> + <body> + <div data-gadget-url="gadget_officejs_monitoring_jio.html" data-gadget-scope="jio_gadget" data-gadget-sandbox="public"></div> + <h3 class="parameter-box-title"></h3> + <form class="save_form ui-body-c" novalidate> + <button type="submit" class="ui-btn ui-btn-b ui-btn-inline + ui-icon-edit ui-btn-icon-right ui-screen-hidden"></button> + <div data-gadget-url="gadget_erp5_form.html" + data-gadget-scope="form_view" + data-gadget-sandbox="public"> + </div> + </form> + </body> +</html> \ No newline at end of file diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_document_edit_html.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_parameter_view_html.xml similarity index 94% rename from bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_document_edit_html.xml rename to bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_parameter_view_html.xml index a214fc1af41f7ad31abd9d215894df149aa746dc..b10275dee84610a52a2cae71b02dc9851938b5a8 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_document_edit_html.xml +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_parameter_view_html.xml @@ -64,7 +64,7 @@ <key> <string>categories</string> </key> <value> <tuple> - <string>classification/collaborative/team</string> + <string>classification/collaborative/public</string> </tuple> </value> </item> @@ -80,15 +80,15 @@ </item> <item> <key> <string>default_reference</string> </key> - <value> <string>gadget_monitoring_document_edit.html</string> </value> + <value> <string>gadget_officejs_monitoring_parameter_view.html</string> </value> </item> <item> <key> <string>description</string> </key> - <value> <string>Document Edit widget</string> </value> + <value> <string>Parameter View/edit widget</string> </value> </item> <item> <key> <string>id</string> </key> - <value> <string>gadget_monitoring_document_edit_html</string> </value> + <value> <string>gadget_officejs_monitoring_parameter_view_html</string> </value> </item> <item> <key> <string>language</string> </key> @@ -106,7 +106,7 @@ </item> <item> <key> <string>title</string> </key> - <value> <string>Monitoring Document Edit widget</string> </value> + <value> <string>Officejs Monitoring Parameters view widget</string> </value> </item> <item> <key> <string>version</string> </key> @@ -237,7 +237,7 @@ </item> <item> <key> <string>serial</string> </key> - <value> <string>961.40703.61920.55040</string> </value> + <value> <string>962.48796.46496.25958</string> </value> </item> <item> <key> <string>state</string> </key> @@ -255,7 +255,7 @@ </tuple> <state> <tuple> - <float>1503583997.49</float> + <float>1507902529.61</float> <string>UTC</string> </tuple> </state> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_parameter_view_js.js b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_parameter_view_js.js new file mode 100644 index 0000000000000000000000000000000000000000..cf84bee32e02769c8c5e8e5735f03c7ce258acb6 --- /dev/null +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_parameter_view_js.js @@ -0,0 +1,141 @@ +/*global window, rJS */ +/*jslint nomen: true, indent: 2, maxerr: 3*/ +(function (window, rJS) { + "use strict"; + + +rJS(window) + .ready(function (gadget) { + gadget.props = {}; + return gadget.getDeclaredGadget("jio_gadget") + .push(function (jio_gadget) { + gadget.props.jio_gadget = jio_gadget; + gadget.props.parameters = {}; + }); + }) + .declareMethod("render", function (options) { + var gadget = this; + return new RSVP.Queue() + .push(function () { + gadget.props.jio_gadget.createJio({ + type: "query", + sub_storage: { + type: "drivetojiomapping", + sub_storage: { + type: "dav", + url: options.url, + basic_login: options.basic_login + } + } + }); + return gadget.changeState({ + parameter_list: options.parameters, + save_to: 'config.tmp', + document_key: 'config', + url: options.url, + title: options.title || '', + key: new Date().getUTCMilliseconds() + }); + }); + }) + + .onStateChange(function (change_dict) { + var gadget = this; + // render parameter form + if (!change_dict.hasOwnProperty('key')) { + return; + } + gadget.element.querySelector('.parameter-box-title').textContent = + gadget.state.title; + return gadget.getDeclaredGadget('form_view') + .push(function (form_gadget) { + var i, + parameter_dict = {}, + group_list = [[ + "left", + [] + ], + [ + "right", + [] + ]]; + for (i = 0; i < gadget.state.parameter_list.length; i += 1) { + parameter_dict[gadget.state.parameter_list[i].title] = { + "description": "", + "title": gadget.state.parameter_list[i].title.replace(/-/g, ' '), + "default": gadget.state.parameter_list[i].value, + "css_class": "", + "required": 0, + "editable": (gadget.state.parameter_list[i].key === '' || + gadget.state.parameter_list[i].key === "monitor-password") ? 0 : 1, + "key": gadget.state.key + '_' + + gadget.state.parameter_list[i].title, + "hidden": 0, + "type": "StringField" // for now everything are stringField + }; + group_list[i%2][1].push([gadget.state.parameter_list[i].title]); + } + return form_gadget.render({ + erp5_document: { + "_embedded": {"_view": parameter_dict}, + "_links": { + "type": { + // form_list display portal_type in header + name: "" + } + } + }, + form_definition: { + group_list: group_list + } + }); + }); + }) + .declareMethod("getLiveParameters", function () { + var gadget = this; + return this.props.jio_gadget.get(this.state.document_key) + .push(function (result) { + return gadget.changeState({parameter_list: result}) + .push(function () { + return {status: "OK", doc: result}; + }); + }, function (error) { + return {status: "ERROR", code: error.target.status, + url: gadget.state.url, stage: "Getting file"}; + }); + }) + .declareMethod("getContent", function () { + return this.getDeclaredGadget('form_view') + .push(function (form_gadget) { + return form_gadget.getContent(); + }); + }) + .declareMethod("saveContent", function () { + var gadget = this; + return this.getDeclaredGadget('form_view') + .push(function (form_gadget) { + return form_gadget.getContent(); + }) + .push(function (doc) { + var parameter_dict = {}, + parameter_list = JSON.parse(JSON.stringify(gadget.state.parameter_list)), + key, + i; + for (i = 0; i < parameter_list.length; i += 1) { + key = gadget.state.key + '_' + parameter_list[i].title; + if (doc.hasOwnProperty(key)) { + parameter_list[i].value = doc[key]; + } + } + return gadget.props.jio_gadget.put(gadget.state.save_to, parameter_list); + }) + .push(function () { + return {status: 'OK'}; + }, function (error) { + console.log(error); + return {status: 'ERROR', code: error.target.status, + url: gadget.state.url, stage: "Saving file"}; + }); + }); + +}(window, rJS)); \ No newline at end of file diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_document_edit_js.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_parameter_view_js.xml similarity index 96% rename from bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_document_edit_js.xml rename to bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_parameter_view_js.xml index 550afc83d9275b06c47cded0b8f9e73fb37b34dc..4caaac0123db4b30733a5cc3d851dd745aa7ec49 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_document_edit_js.xml +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_parameter_view_js.xml @@ -80,7 +80,7 @@ </item> <item> <key> <string>default_reference</string> </key> - <value> <string>gadget_monitoring_document_edit.js</string> </value> + <value> <string>gadget_officejs_monitoring_parameter_view.js</string> </value> </item> <item> <key> <string>description</string> </key> @@ -90,7 +90,7 @@ </item> <item> <key> <string>id</string> </key> - <value> <string>gadget_monitoring_document_edit_js</string> </value> + <value> <string>gadget_officejs_monitoring_parameter_view_js</string> </value> </item> <item> <key> <string>language</string> </key> @@ -108,7 +108,7 @@ </item> <item> <key> <string>title</string> </key> - <value> <string>Monitoring Document Edit Widget JS</string> </value> + <value> <string>Monitoring Parameter View Widget JS</string> </value> </item> <item> <key> <string>version</string> </key> @@ -239,7 +239,7 @@ </item> <item> <key> <string>serial</string> </key> - <value> <string>961.40921.12598.30395</string> </value> + <value> <string>962.48797.18350.58214</string> </value> </item> <item> <key> <string>state</string> </key> @@ -257,7 +257,7 @@ </tuple> <state> <tuple> - <float>1503585066.29</float> + <float>1507902562.82</float> <string>UTC</string> </tuple> </state> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_router_html.html b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_router_html.html new file mode 100644 index 0000000000000000000000000000000000000000..62997cf8e95587d73edccc023d0a2243df4ab35b --- /dev/null +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_router_html.html @@ -0,0 +1,25 @@ +<!DOCTYPE html> +<html> + <head> + <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> + <meta name="viewport" content="width=device-width, user-scalable=no" /> + <title>OfficeJS Router Gadget</title> + + <!-- renderjs --> + <script src="rsvp.js" type="text/javascript"></script> + <script src="renderjs.js" type="text/javascript"></script> + + <!-- custom script --> + <script src="gadget_officejs_router.js" type="text/javascript"></script> + + </head> + <body> + <script data-renderjs-configuration="portal_type" type="text/x-renderjs-configuration">opml</script> + <script data-renderjs-configuration="parent_relative_url" type="text/x-renderjs-configuration">opml_module</script> + <script data-renderjs-configuration="document_title" type="text/x-renderjs-configuration">Monitoring Tool</script> + <script data-renderjs-configuration="document_title_plural" type="text/x-renderjs-configuration">Monitoring Apps</script> + <script data-renderjs-configuration="erp5_attachment_synchro" type="text/x-renderjs-configuration"></script> + <script data-renderjs-configuration="global_setting_gadget_url" type="text/x-renderjs-configuration">../officejs_setting_gadget/app/</script> + <div data-gadget-url="gadget_erp5_router.html" data-gadget-scope="erp5_router"></div> + </body> +</html> \ No newline at end of file diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/rjs_gadget_monitoring_html.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_router_html.xml similarity index 87% rename from bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/rjs_gadget_monitoring_html.xml rename to bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_router_html.xml index 43cdecef0544904c29fdf1f8c865a6126f1b9e22..006717f3482fbfc53c41460b6949b1ce15380692 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/rjs_gadget_monitoring_html.xml +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_router_html.xml @@ -67,6 +67,7 @@ <key> <string>categories</string> </key> <value> <tuple> + <string>contributor/person_module/1</string> <string>classification/collaborative/team</string> </tuple> </value> @@ -81,22 +82,51 @@ <key> <string>content_type</string> </key> <value> <string>text/html</string> </value> </item> + <item> + <key> <string>creators</string> </key> + <value> + <tuple> + <string>cedric.le.ninivin</string> + </tuple> + </value> + </item> <item> <key> <string>default_reference</string> </key> - <value> <string>monitoring_launcher.html</string> </value> + <value> <string>gadget_officejs_monitoring_router.html</string> </value> </item> <item> <key> <string>description</string> </key> - <value> <string>Starting Point</string> </value> + <value> + <none/> + </value> </item> <item> <key> <string>id</string> </key> - <value> <string>rjs_gadget_monitoring_html</string> </value> + <value> <string>gadget_officejs_monitoring_router_html</string> </value> </item> <item> <key> <string>language</string> </key> <value> <string>en</string> </value> </item> + <item> + <key> <string>modification_date</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1455284352.21</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> <item> <key> <string>portal_type</string> </key> <value> <string>Web Page</string> </value> @@ -108,12 +138,14 @@ </value> </item> <item> - <key> <string>text_content_substitution_mapping_method_id</string> </key> - <value> <string>WebPage_getRenderJSSubstitutionMappingDict</string> </value> + <key> <string>title</string> </key> + <value> <string>OfficeJS Monitoring router Gadget</string> </value> </item> <item> - <key> <string>title</string> </key> - <value> <string>Monitoring Application Launcher</string> </value> + <key> <string>url_string</string> </key> + <value> + <none/> + </value> </item> <item> <key> <string>version</string> </key> @@ -199,7 +231,7 @@ </tuple> <state> <tuple> - <float>1502456386.86</float> + <float>1506001096.2</float> <string>UTC</string> </tuple> </state> @@ -244,7 +276,7 @@ </item> <item> <key> <string>serial</string> </key> - <value> <string>961.46449.45833.54135</string> </value> + <value> <string>962.47406.45080.56866</string> </value> </item> <item> <key> <string>state</string> </key> @@ -262,7 +294,7 @@ </tuple> <state> <tuple> - <float>1503930399.38</float> + <float>1507819282.45</float> <string>UTC</string> </tuple> </state> @@ -319,7 +351,7 @@ </tuple> <state> <tuple> - <float>1502456091.69</float> + <float>1506000938.79</float> <string>UTC</string> </tuple> </state> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_sync_html.html b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_sync_html.html similarity index 55% rename from bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_sync_html.html rename to bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_sync_html.html index a6d09c3bae31cf9fc7912660e185b51aa27e7b4f..89a34e508abb63862166cf2eaf049db4dc4e962c 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_sync_html.html +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_sync_html.html @@ -6,17 +6,15 @@ <title>Monitoring Sync Data</title> - <link href="gadget_monitoring_custom.css" rel="stylesheet" type="text/css"/> - - <script src="notify.min.js"></script> <script src="rsvp.js"></script> <script src="renderjs.js"></script> + <script src="jquery.js" type="text/javascript"></script> + <script src="notify.min.js"></script> - <script src="gadget_monitoring_sync.js"></script> + <script src="gadget_officejs_monitoring_sync.js"></script> </head> <body> - <!--<div data-gadget-url="gadget_monitoring_log_widget.html" data-gadget-scope="log_gadget" data-gadget-sandbox="public"></div>--> </body> </html> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_sync_html.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_sync_html.xml similarity index 96% rename from bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_sync_html.xml rename to bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_sync_html.xml index f5642814604b05dc44e0a7640ccc5690815a958a..0bafa6b60d9ce53395f022a9059376ee28ba1c4b 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_sync_html.xml +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_sync_html.xml @@ -83,7 +83,7 @@ </item> <item> <key> <string>default_reference</string> </key> - <value> <string>gadget_monitoring_sync.html</string> </value> + <value> <string>gadget_officejs_monitoring_sync.html</string> </value> </item> <item> <key> <string>description</string> </key> @@ -93,7 +93,7 @@ </item> <item> <key> <string>id</string> </key> - <value> <string>gadget_monitoring_sync_html</string> </value> + <value> <string>gadget_officejs_monitoring_sync_html</string> </value> </item> <item> <key> <string>language</string> </key> @@ -113,7 +113,7 @@ </item> <item> <key> <string>title</string> </key> - <value> <string>Monitoring Sync Data</string> </value> + <value> <string>Officejs Monitoring Sync Data</string> </value> </item> <item> <key> <string>version</string> </key> @@ -246,7 +246,7 @@ </item> <item> <key> <string>serial</string> </key> - <value> <string>961.17654.34815.58385</string> </value> + <value> <string>962.48761.27674.29661</string> </value> </item> <item> <key> <string>state</string> </key> @@ -264,7 +264,7 @@ </tuple> <state> <tuple> - <float>1502210539.52</float> + <float>1507900413.18</float> <string>UTC</string> </tuple> </state> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_sync_js.js b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_sync_js.js similarity index 87% rename from bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_sync_js.js rename to bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_sync_js.js index 4061360a2a3578d652f301abf16d9d4d2be3fe58..e98c88fa51e5feb18148cb3e092a09b829e346c7 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_sync_js.js +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_sync_js.js @@ -1,6 +1,6 @@ -/*global window, rJS, RSVP, $, clearTimeout, setTimeout, console, XMLHttpRequest, document */ +/*global window, rJS, RSVP, clearTimeout, setTimeout, console, XMLHttpRequest, document */ /*jslint nomen: true, indent: 2, maxerr: 3*/ -(function (window, rJS, RSVP, $, console, clearTimeout, setTimeout, +(function (window, rJS, RSVP, console, clearTimeout, setTimeout, XMLHttpRequest, document) { "use strict"; @@ -10,18 +10,12 @@ .ready(function (g) { g.props = {}; }) - /*.ready(function (g) { - return g.getDeclaredGadget('log_gadget') - .push(function (log_gadget) { - g.props.log_gadget = log_gadget; - }); - })*/ .declareAcquiredMethod("getSetting", "getSetting") .declareAcquiredMethod("setSetting", "setSetting") .declareAcquiredMethod("jio_repair", "jio_repair") - .declareMethod("startSync", function (options) { + .declareMethod("registerSync", function (options) { var gadget = this; function testOnline(url) { @@ -55,9 +49,9 @@ return n < 10 ? "0" + n : n.toString(); } - return d.getFullYear() + "-" + addZero(d.getMonth() + 1) - + "-" + addZero(d.getDate()) + " " + addZero(d.getHours()) - + ":" + addZero(d.getMinutes()) + ":" + addZero(d.getSeconds()); + return d.getFullYear() + "-" + addZero(d.getMonth() + 1) + + "-" + addZero(d.getDate()) + " " + addZero(d.getHours()) + + ":" + addZero(d.getMinutes()) + ":" + addZero(d.getSeconds()); } function syncAllStorageWithCheck() { @@ -72,7 +66,7 @@ .push(function () { return testOnline(parser.origin); }) - .push(undefined, function() { + .push(undefined, function () { return {status: "ERROR"}; }) .push(function (online_result) { @@ -96,7 +90,7 @@ } function syncAllStorage() { - var error_log, + var has_error = false, last_sync_time; gadget.props.started = true; return new RSVP.Queue() @@ -119,7 +113,7 @@ return gadget.jio_repair(); }) .push(undefined, function (error) { - error_log = error; + has_error = true; console.error(error); return false; }) @@ -134,7 +128,7 @@ //log_message = '', log_title = "OK: " + message; - if (error_log !== undefined) { + if (has_error) { classname = "warning"; time = 5000; //log_message = getErrorLog(gadget.props.error_list); @@ -151,12 +145,6 @@ autoHideDelay: time } )]); - /*gadget.props.log_gadget.log({ - message: log_message, - type: classname, - title: log_title, - method: 'Monitoring Sync' - })*/ }) .push(function () { gadget.props.started = false; @@ -184,8 +172,8 @@ .push(function (start_timestamp) { var current_time = new Date().getTime(); if (start_timestamp !== undefined && - (current_time - gadget.props.timer_interval) - <= start_timestamp) { + (current_time - gadget.props.timer_interval) <= + start_timestamp) { // There was a recent sync don't start a new sync before the time_interval! return; } @@ -268,5 +256,5 @@ }); }); -}(window, rJS, RSVP, $, console, clearTimeout, setTimeout, XMLHttpRequest, +}(window, rJS, RSVP, console, clearTimeout, setTimeout, XMLHttpRequest, document)); \ No newline at end of file diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_sync_js.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_sync_js.xml similarity index 96% rename from bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_sync_js.xml rename to bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_sync_js.xml index 5299c4e6c2814e1bd69da1532c52b414a0862135..5897ff3a45de6ae29b89103d6d2c7074edd607a3 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_sync_js.xml +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_officejs_monitoring_sync_js.xml @@ -83,7 +83,7 @@ </item> <item> <key> <string>default_reference</string> </key> - <value> <string>gadget_monitoring_sync.js</string> </value> + <value> <string>gadget_officejs_monitoring_sync.js</string> </value> </item> <item> <key> <string>description</string> </key> @@ -93,7 +93,7 @@ </item> <item> <key> <string>id</string> </key> - <value> <string>gadget_monitoring_sync_js</string> </value> + <value> <string>gadget_officejs_monitoring_sync_js</string> </value> </item> <item> <key> <string>language</string> </key> @@ -111,7 +111,7 @@ </item> <item> <key> <string>title</string> </key> - <value> <string>Monitoring Sync Data Gadget JS</string> </value> + <value> <string>Officejs Monitoring Sync Data Gadget JS</string> </value> </item> <item> <key> <string>version</string> </key> @@ -242,7 +242,7 @@ </item> <item> <key> <string>serial</string> </key> - <value> <string>961.62215.16074.40192</string> </value> + <value> <string>962.53134.26022.64665</string> </value> </item> <item> <key> <string>state</string> </key> @@ -260,7 +260,7 @@ </tuple> <state> <tuple> - <float>1504861961.08</float> + <float>1508860939.04</float> <string>UTC</string> </tuple> </state> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/jquery.magnific-popup.min.js.js b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/jquery.magnific-popup.min.js.js deleted file mode 100644 index 66b8fab32bff2b734bc6355b9b5ab43b3632fb4a..0000000000000000000000000000000000000000 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/jquery.magnific-popup.min.js.js +++ /dev/null @@ -1,4 +0,0 @@ -/*! Magnific Popup - v1.0.1 - 2015-12-30 -* http://dimsemenov.com/plugins/magnific-popup/ -* Copyright (c) 2015 Dmitry Semenov; */ -!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):a("object"==typeof exports?require("jquery"):window.jQuery||window.Zepto)}(function(a){var b,c,d,e,f,g,h="Close",i="BeforeClose",j="AfterClose",k="BeforeAppend",l="MarkupParse",m="Open",n="Change",o="mfp",p="."+o,q="mfp-ready",r="mfp-removing",s="mfp-prevent-close",t=function(){},u=!!window.jQuery,v=a(window),w=function(a,c){b.ev.on(o+a+p,c)},x=function(b,c,d,e){var f=document.createElement("div");return f.className="mfp-"+b,d&&(f.innerHTML=d),e?c&&c.appendChild(f):(f=a(f),c&&f.appendTo(c)),f},y=function(c,d){b.ev.triggerHandler(o+c,d),b.st.callbacks&&(c=c.charAt(0).toLowerCase()+c.slice(1),b.st.callbacks[c]&&b.st.callbacks[c].apply(b,a.isArray(d)?d:[d]))},z=function(c){return c===g&&b.currTemplate.closeBtn||(b.currTemplate.closeBtn=a(b.st.closeMarkup.replace("%title%",b.st.tClose)),g=c),b.currTemplate.closeBtn},A=function(){a.magnificPopup.instance||(b=new t,b.init(),a.magnificPopup.instance=b)},B=function(){var a=document.createElement("p").style,b=["ms","O","Moz","Webkit"];if(void 0!==a.transition)return!0;for(;b.length;)if(b.pop()+"Transition"in a)return!0;return!1};t.prototype={constructor:t,init:function(){var c=navigator.appVersion;b.isIE7=-1!==c.indexOf("MSIE 7."),b.isIE8=-1!==c.indexOf("MSIE 8."),b.isLowIE=b.isIE7||b.isIE8,b.isAndroid=/android/gi.test(c),b.isIOS=/iphone|ipad|ipod/gi.test(c),b.supportsTransition=B(),b.probablyMobile=b.isAndroid||b.isIOS||/(Opera Mini)|Kindle|webOS|BlackBerry|(Opera Mobi)|(Windows Phone)|IEMobile/i.test(navigator.userAgent),d=a(document),b.popupsCache={}},open:function(c){var e;if(c.isObj===!1){b.items=c.items.toArray(),b.index=0;var g,h=c.items;for(e=0;e<h.length;e++)if(g=h[e],g.parsed&&(g=g.el[0]),g===c.el[0]){b.index=e;break}}else b.items=a.isArray(c.items)?c.items:[c.items],b.index=c.index||0;if(b.isOpen)return void b.updateItemHTML();b.types=[],f="",c.mainEl&&c.mainEl.length?b.ev=c.mainEl.eq(0):b.ev=d,c.key?(b.popupsCache[c.key]||(b.popupsCache[c.key]={}),b.currTemplate=b.popupsCache[c.key]):b.currTemplate={},b.st=a.extend(!0,{},a.magnificPopup.defaults,c),b.fixedContentPos="auto"===b.st.fixedContentPos?!b.probablyMobile:b.st.fixedContentPos,b.st.modal&&(b.st.closeOnContentClick=!1,b.st.closeOnBgClick=!1,b.st.showCloseBtn=!1,b.st.enableEscapeKey=!1),b.bgOverlay||(b.bgOverlay=x("bg").on("click"+p,function(){b.close()}),b.wrap=x("wrap").attr("tabindex",-1).on("click"+p,function(a){b._checkIfClose(a.target)&&b.close()}),b.container=x("container",b.wrap)),b.contentContainer=x("content"),b.st.preloader&&(b.preloader=x("preloader",b.container,b.st.tLoading));var i=a.magnificPopup.modules;for(e=0;e<i.length;e++){var j=i[e];j=j.charAt(0).toUpperCase()+j.slice(1),b["init"+j].call(b)}y("BeforeOpen"),b.st.showCloseBtn&&(b.st.closeBtnInside?(w(l,function(a,b,c,d){c.close_replaceWith=z(d.type)}),f+=" mfp-close-btn-in"):b.wrap.append(z())),b.st.alignTop&&(f+=" mfp-align-top"),b.fixedContentPos?b.wrap.css({overflow:b.st.overflowY,overflowX:"hidden",overflowY:b.st.overflowY}):b.wrap.css({top:v.scrollTop(),position:"absolute"}),(b.st.fixedBgPos===!1||"auto"===b.st.fixedBgPos&&!b.fixedContentPos)&&b.bgOverlay.css({height:d.height(),position:"absolute"}),b.st.enableEscapeKey&&d.on("keyup"+p,function(a){27===a.keyCode&&b.close()}),v.on("resize"+p,function(){b.updateSize()}),b.st.closeOnContentClick||(f+=" mfp-auto-cursor"),f&&b.wrap.addClass(f);var k=b.wH=v.height(),n={};if(b.fixedContentPos&&b._hasScrollBar(k)){var o=b._getScrollbarSize();o&&(n.marginRight=o)}b.fixedContentPos&&(b.isIE7?a("body, html").css("overflow","hidden"):n.overflow="hidden");var r=b.st.mainClass;return b.isIE7&&(r+=" mfp-ie7"),r&&b._addClassToMFP(r),b.updateItemHTML(),y("BuildControls"),a("html").css(n),b.bgOverlay.add(b.wrap).prependTo(b.st.prependTo||a(document.body)),b._lastFocusedEl=document.activeElement,setTimeout(function(){b.content?(b._addClassToMFP(q),b._setFocus()):b.bgOverlay.addClass(q),d.on("focusin"+p,b._onFocusIn)},16),b.isOpen=!0,b.updateSize(k),y(m),c},close:function(){b.isOpen&&(y(i),b.isOpen=!1,b.st.removalDelay&&!b.isLowIE&&b.supportsTransition?(b._addClassToMFP(r),setTimeout(function(){b._close()},b.st.removalDelay)):b._close())},_close:function(){y(h);var c=r+" "+q+" ";if(b.bgOverlay.detach(),b.wrap.detach(),b.container.empty(),b.st.mainClass&&(c+=b.st.mainClass+" "),b._removeClassFromMFP(c),b.fixedContentPos){var e={marginRight:""};b.isIE7?a("body, html").css("overflow",""):e.overflow="",a("html").css(e)}d.off("keyup"+p+" focusin"+p),b.ev.off(p),b.wrap.attr("class","mfp-wrap").removeAttr("style"),b.bgOverlay.attr("class","mfp-bg"),b.container.attr("class","mfp-container"),!b.st.showCloseBtn||b.st.closeBtnInside&&b.currTemplate[b.currItem.type]!==!0||b.currTemplate.closeBtn&&b.currTemplate.closeBtn.detach(),b.st.autoFocusLast&&b._lastFocusedEl&&a(b._lastFocusedEl).focus(),b.currItem=null,b.content=null,b.currTemplate=null,b.prevHeight=0,y(j)},updateSize:function(a){if(b.isIOS){var c=document.documentElement.clientWidth/window.innerWidth,d=window.innerHeight*c;b.wrap.css("height",d),b.wH=d}else b.wH=a||v.height();b.fixedContentPos||b.wrap.css("height",b.wH),y("Resize")},updateItemHTML:function(){var c=b.items[b.index];b.contentContainer.detach(),b.content&&b.content.detach(),c.parsed||(c=b.parseEl(b.index));var d=c.type;if(y("BeforeChange",[b.currItem?b.currItem.type:"",d]),b.currItem=c,!b.currTemplate[d]){var f=b.st[d]?b.st[d].markup:!1;y("FirstMarkupParse",f),f?b.currTemplate[d]=a(f):b.currTemplate[d]=!0}e&&e!==c.type&&b.container.removeClass("mfp-"+e+"-holder");var g=b["get"+d.charAt(0).toUpperCase()+d.slice(1)](c,b.currTemplate[d]);b.appendContent(g,d),c.preloaded=!0,y(n,c),e=c.type,b.container.prepend(b.contentContainer),y("AfterChange")},appendContent:function(a,c){b.content=a,a?b.st.showCloseBtn&&b.st.closeBtnInside&&b.currTemplate[c]===!0?b.content.find(".mfp-close").length||b.content.append(z()):b.content=a:b.content="",y(k),b.container.addClass("mfp-"+c+"-holder"),b.contentContainer.append(b.content)},parseEl:function(c){var d,e=b.items[c];if(e.tagName?e={el:a(e)}:(d=e.type,e={data:e,src:e.src}),e.el){for(var f=b.types,g=0;g<f.length;g++)if(e.el.hasClass("mfp-"+f[g])){d=f[g];break}e.src=e.el.attr("data-mfp-src"),e.src||(e.src=e.el.attr("href"))}return e.type=d||b.st.type||"inline",e.index=c,e.parsed=!0,b.items[c]=e,y("ElementParse",e),b.items[c]},addGroup:function(a,c){var d=function(d){d.mfpEl=this,b._openClick(d,a,c)};c||(c={});var e="click.magnificPopup";c.mainEl=a,c.items?(c.isObj=!0,a.off(e).on(e,d)):(c.isObj=!1,c.delegate?a.off(e).on(e,c.delegate,d):(c.items=a,a.off(e).on(e,d)))},_openClick:function(c,d,e){var f=void 0!==e.midClick?e.midClick:a.magnificPopup.defaults.midClick;if(f||!(2===c.which||c.ctrlKey||c.metaKey||c.altKey||c.shiftKey)){var g=void 0!==e.disableOn?e.disableOn:a.magnificPopup.defaults.disableOn;if(g)if(a.isFunction(g)){if(!g.call(b))return!0}else if(v.width()<g)return!0;c.type&&(c.preventDefault(),b.isOpen&&c.stopPropagation()),e.el=a(c.mfpEl),e.delegate&&(e.items=d.find(e.delegate)),b.open(e)}},updateStatus:function(a,d){if(b.preloader){c!==a&&b.container.removeClass("mfp-s-"+c),d||"loading"!==a||(d=b.st.tLoading);var e={status:a,text:d};y("UpdateStatus",e),a=e.status,d=e.text,b.preloader.html(d),b.preloader.find("a").on("click",function(a){a.stopImmediatePropagation()}),b.container.addClass("mfp-s-"+a),c=a}},_checkIfClose:function(c){if(!a(c).hasClass(s)){var d=b.st.closeOnContentClick,e=b.st.closeOnBgClick;if(d&&e)return!0;if(!b.content||a(c).hasClass("mfp-close")||b.preloader&&c===b.preloader[0])return!0;if(c===b.content[0]||a.contains(b.content[0],c)){if(d)return!0}else if(e&&a.contains(document,c))return!0;return!1}},_addClassToMFP:function(a){b.bgOverlay.addClass(a),b.wrap.addClass(a)},_removeClassFromMFP:function(a){this.bgOverlay.removeClass(a),b.wrap.removeClass(a)},_hasScrollBar:function(a){return(b.isIE7?d.height():document.body.scrollHeight)>(a||v.height())},_setFocus:function(){(b.st.focus?b.content.find(b.st.focus).eq(0):b.wrap).focus()},_onFocusIn:function(c){return c.target===b.wrap[0]||a.contains(b.wrap[0],c.target)?void 0:(b._setFocus(),!1)},_parseMarkup:function(b,c,d){var e;d.data&&(c=a.extend(d.data,c)),y(l,[b,c,d]),a.each(c,function(a,c){if(void 0===c||c===!1)return!0;if(e=a.split("_"),e.length>1){var d=b.find(p+"-"+e[0]);if(d.length>0){var f=e[1];"replaceWith"===f?d[0]!==c[0]&&d.replaceWith(c):"img"===f?d.is("img")?d.attr("src",c):d.replaceWith('<img src="'+c+'" class="'+d.attr("class")+'" />'):d.attr(e[1],c)}}else b.find(p+"-"+a).html(c)})},_getScrollbarSize:function(){if(void 0===b.scrollbarSize){var a=document.createElement("div");a.style.cssText="width: 99px; height: 99px; overflow: scroll; position: absolute; top: -9999px;",document.body.appendChild(a),b.scrollbarSize=a.offsetWidth-a.clientWidth,document.body.removeChild(a)}return b.scrollbarSize}},a.magnificPopup={instance:null,proto:t.prototype,modules:[],open:function(b,c){return A(),b=b?a.extend(!0,{},b):{},b.isObj=!0,b.index=c||0,this.instance.open(b)},close:function(){return a.magnificPopup.instance&&a.magnificPopup.instance.close()},registerModule:function(b,c){c.options&&(a.magnificPopup.defaults[b]=c.options),a.extend(this.proto,c.proto),this.modules.push(b)},defaults:{disableOn:0,key:null,midClick:!1,mainClass:"",preloader:!0,focus:"",closeOnContentClick:!1,closeOnBgClick:!0,closeBtnInside:!0,showCloseBtn:!0,enableEscapeKey:!0,modal:!1,alignTop:!1,removalDelay:0,prependTo:null,fixedContentPos:"auto",fixedBgPos:"auto",overflowY:"auto",closeMarkup:'<button title="%title%" type="button" class="mfp-close">×</button>',tClose:"Close (Esc)",tLoading:"Loading...",autoFocusLast:!0}},a.fn.magnificPopup=function(c){A();var d=a(this);if("string"==typeof c)if("open"===c){var e,f=u?d.data("magnificPopup"):d[0].magnificPopup,g=parseInt(arguments[1],10)||0;f.items?e=f.items[g]:(e=d,f.delegate&&(e=e.find(f.delegate)),e=e.eq(g)),b._openClick({mfpEl:e},d,f)}else b.isOpen&&b[c].apply(b,Array.prototype.slice.call(arguments,1));else c=a.extend(!0,{},c),u?d.data("magnificPopup",c):d[0].magnificPopup=c,b.addGroup(d,c);return d};var C,D,E,F="inline",G=function(){E&&(D.after(E.addClass(C)).detach(),E=null)};a.magnificPopup.registerModule(F,{options:{hiddenClass:"hide",markup:"",tNotFound:"Content not found"},proto:{initInline:function(){b.types.push(F),w(h+"."+F,function(){G()})},getInline:function(c,d){if(G(),c.src){var e=b.st.inline,f=a(c.src);if(f.length){var g=f[0].parentNode;g&&g.tagName&&(D||(C=e.hiddenClass,D=x(C),C="mfp-"+C),E=f.after(D).detach().removeClass(C)),b.updateStatus("ready")}else b.updateStatus("error",e.tNotFound),f=a("<div>");return c.inlineElement=f,f}return b.updateStatus("ready"),b._parseMarkup(d,{},c),d}}});var H,I="ajax",J=function(){H&&a(document.body).removeClass(H)},K=function(){J(),b.req&&b.req.abort()};a.magnificPopup.registerModule(I,{options:{settings:null,cursor:"mfp-ajax-cur",tError:'<a href="%url%">The content</a> could not be loaded.'},proto:{initAjax:function(){b.types.push(I),H=b.st.ajax.cursor,w(h+"."+I,K),w("BeforeChange."+I,K)},getAjax:function(c){H&&a(document.body).addClass(H),b.updateStatus("loading");var d=a.extend({url:c.src,success:function(d,e,f){var g={data:d,xhr:f};y("ParseAjax",g),b.appendContent(a(g.data),I),c.finished=!0,J(),b._setFocus(),setTimeout(function(){b.wrap.addClass(q)},16),b.updateStatus("ready"),y("AjaxContentAdded")},error:function(){J(),c.finished=c.loadError=!0,b.updateStatus("error",b.st.ajax.tError.replace("%url%",c.src))}},b.st.ajax.settings);return b.req=a.ajax(d),""}}});var L,M=function(c){if(c.data&&void 0!==c.data.title)return c.data.title;var d=b.st.image.titleSrc;if(d){if(a.isFunction(d))return d.call(b,c);if(c.el)return c.el.attr(d)||""}return""};a.magnificPopup.registerModule("image",{options:{markup:'<div class="mfp-figure"><div class="mfp-close"></div><figure><div class="mfp-img"></div><figcaption><div class="mfp-bottom-bar"><div class="mfp-title"></div><div class="mfp-counter"></div></div></figcaption></figure></div>',cursor:"mfp-zoom-out-cur",titleSrc:"title",verticalFit:!0,tError:'<a href="%url%">The image</a> could not be loaded.'},proto:{initImage:function(){var c=b.st.image,d=".image";b.types.push("image"),w(m+d,function(){"image"===b.currItem.type&&c.cursor&&a(document.body).addClass(c.cursor)}),w(h+d,function(){c.cursor&&a(document.body).removeClass(c.cursor),v.off("resize"+p)}),w("Resize"+d,b.resizeImage),b.isLowIE&&w("AfterChange",b.resizeImage)},resizeImage:function(){var a=b.currItem;if(a&&a.img&&b.st.image.verticalFit){var c=0;b.isLowIE&&(c=parseInt(a.img.css("padding-top"),10)+parseInt(a.img.css("padding-bottom"),10)),a.img.css("max-height",b.wH-c)}},_onImageHasSize:function(a){a.img&&(a.hasSize=!0,L&&clearInterval(L),a.isCheckingImgSize=!1,y("ImageHasSize",a),a.imgHidden&&(b.content&&b.content.removeClass("mfp-loading"),a.imgHidden=!1))},findImageSize:function(a){var c=0,d=a.img[0],e=function(f){L&&clearInterval(L),L=setInterval(function(){return d.naturalWidth>0?void b._onImageHasSize(a):(c>200&&clearInterval(L),c++,void(3===c?e(10):40===c?e(50):100===c&&e(500)))},f)};e(1)},getImage:function(c,d){var e=0,f=function(){c&&(c.img[0].complete?(c.img.off(".mfploader"),c===b.currItem&&(b._onImageHasSize(c),b.updateStatus("ready")),c.hasSize=!0,c.loaded=!0,y("ImageLoadComplete")):(e++,200>e?setTimeout(f,100):g()))},g=function(){c&&(c.img.off(".mfploader"),c===b.currItem&&(b._onImageHasSize(c),b.updateStatus("error",h.tError.replace("%url%",c.src))),c.hasSize=!0,c.loaded=!0,c.loadError=!0)},h=b.st.image,i=d.find(".mfp-img");if(i.length){var j=document.createElement("img");j.className="mfp-img",c.el&&c.el.find("img").length&&(j.alt=c.el.find("img").attr("alt")),c.img=a(j).on("load.mfploader",f).on("error.mfploader",g),j.src=c.src,i.is("img")&&(c.img=c.img.clone()),j=c.img[0],j.naturalWidth>0?c.hasSize=!0:j.width||(c.hasSize=!1)}return b._parseMarkup(d,{title:M(c),img_replaceWith:c.img},c),b.resizeImage(),c.hasSize?(L&&clearInterval(L),c.loadError?(d.addClass("mfp-loading"),b.updateStatus("error",h.tError.replace("%url%",c.src))):(d.removeClass("mfp-loading"),b.updateStatus("ready")),d):(b.updateStatus("loading"),c.loading=!0,c.hasSize||(c.imgHidden=!0,d.addClass("mfp-loading"),b.findImageSize(c)),d)}}});var N,O=function(){return void 0===N&&(N=void 0!==document.createElement("p").style.MozTransform),N};a.magnificPopup.registerModule("zoom",{options:{enabled:!1,easing:"ease-in-out",duration:300,opener:function(a){return a.is("img")?a:a.find("img")}},proto:{initZoom:function(){var a,c=b.st.zoom,d=".zoom";if(c.enabled&&b.supportsTransition){var e,f,g=c.duration,j=function(a){var b=a.clone().removeAttr("style").removeAttr("class").addClass("mfp-animated-image"),d="all "+c.duration/1e3+"s "+c.easing,e={position:"fixed",zIndex:9999,left:0,top:0,"-webkit-backface-visibility":"hidden"},f="transition";return e["-webkit-"+f]=e["-moz-"+f]=e["-o-"+f]=e[f]=d,b.css(e),b},k=function(){b.content.css("visibility","visible")};w("BuildControls"+d,function(){if(b._allowZoom()){if(clearTimeout(e),b.content.css("visibility","hidden"),a=b._getItemToZoom(),!a)return void k();f=j(a),f.css(b._getOffset()),b.wrap.append(f),e=setTimeout(function(){f.css(b._getOffset(!0)),e=setTimeout(function(){k(),setTimeout(function(){f.remove(),a=f=null,y("ZoomAnimationEnded")},16)},g)},16)}}),w(i+d,function(){if(b._allowZoom()){if(clearTimeout(e),b.st.removalDelay=g,!a){if(a=b._getItemToZoom(),!a)return;f=j(a)}f.css(b._getOffset(!0)),b.wrap.append(f),b.content.css("visibility","hidden"),setTimeout(function(){f.css(b._getOffset())},16)}}),w(h+d,function(){b._allowZoom()&&(k(),f&&f.remove(),a=null)})}},_allowZoom:function(){return"image"===b.currItem.type},_getItemToZoom:function(){return b.currItem.hasSize?b.currItem.img:!1},_getOffset:function(c){var d;d=c?b.currItem.img:b.st.zoom.opener(b.currItem.el||b.currItem);var e=d.offset(),f=parseInt(d.css("padding-top"),10),g=parseInt(d.css("padding-bottom"),10);e.top-=a(window).scrollTop()-f;var h={width:d.width(),height:(u?d.innerHeight():d[0].offsetHeight)-g-f};return O()?h["-moz-transform"]=h.transform="translate("+e.left+"px,"+e.top+"px)":(h.left=e.left,h.top=e.top),h}}});var P="iframe",Q="//about:blank",R=function(a){if(b.currTemplate[P]){var c=b.currTemplate[P].find("iframe");c.length&&(a||(c[0].src=Q),b.isIE8&&c.css("display",a?"block":"none"))}};a.magnificPopup.registerModule(P,{options:{markup:'<div class="mfp-iframe-scaler"><div class="mfp-close"></div><iframe class="mfp-iframe" src="//about:blank" frameborder="0" allowfullscreen></iframe></div>',srcAction:"iframe_src",patterns:{youtube:{index:"youtube.com",id:"v=",src:"//www.youtube.com/embed/%id%?autoplay=1"},vimeo:{index:"vimeo.com/",id:"/",src:"//player.vimeo.com/video/%id%?autoplay=1"},gmaps:{index:"//maps.google.",src:"%id%&output=embed"}}},proto:{initIframe:function(){b.types.push(P),w("BeforeChange",function(a,b,c){b!==c&&(b===P?R():c===P&&R(!0))}),w(h+"."+P,function(){R()})},getIframe:function(c,d){var e=c.src,f=b.st.iframe;a.each(f.patterns,function(){return e.indexOf(this.index)>-1?(this.id&&(e="string"==typeof this.id?e.substr(e.lastIndexOf(this.id)+this.id.length,e.length):this.id.call(this,e)),e=this.src.replace("%id%",e),!1):void 0});var g={};return f.srcAction&&(g[f.srcAction]=e),b._parseMarkup(d,g,c),b.updateStatus("ready"),d}}});var S=function(a){var c=b.items.length;return a>c-1?a-c:0>a?c+a:a},T=function(a,b,c){return a.replace(/%curr%/gi,b+1).replace(/%total%/gi,c)};a.magnificPopup.registerModule("gallery",{options:{enabled:!1,arrowMarkup:'<button title="%title%" type="button" class="mfp-arrow mfp-arrow-%dir%"></button>',preload:[0,2],navigateByImgClick:!0,arrows:!0,tPrev:"Previous (Left arrow key)",tNext:"Next (Right arrow key)",tCounter:"%curr% of %total%"},proto:{initGallery:function(){var c=b.st.gallery,e=".mfp-gallery",g=Boolean(a.fn.mfpFastClick);return b.direction=!0,c&&c.enabled?(f+=" mfp-gallery",w(m+e,function(){c.navigateByImgClick&&b.wrap.on("click"+e,".mfp-img",function(){return b.items.length>1?(b.next(),!1):void 0}),d.on("keydown"+e,function(a){37===a.keyCode?b.prev():39===a.keyCode&&b.next()})}),w("UpdateStatus"+e,function(a,c){c.text&&(c.text=T(c.text,b.currItem.index,b.items.length))}),w(l+e,function(a,d,e,f){var g=b.items.length;e.counter=g>1?T(c.tCounter,f.index,g):""}),w("BuildControls"+e,function(){if(b.items.length>1&&c.arrows&&!b.arrowLeft){var d=c.arrowMarkup,e=b.arrowLeft=a(d.replace(/%title%/gi,c.tPrev).replace(/%dir%/gi,"left")).addClass(s),f=b.arrowRight=a(d.replace(/%title%/gi,c.tNext).replace(/%dir%/gi,"right")).addClass(s),h=g?"mfpFastClick":"click";e[h](function(){b.prev()}),f[h](function(){b.next()}),b.isIE7&&(x("b",e[0],!1,!0),x("a",e[0],!1,!0),x("b",f[0],!1,!0),x("a",f[0],!1,!0)),b.container.append(e.add(f))}}),w(n+e,function(){b._preloadTimeout&&clearTimeout(b._preloadTimeout),b._preloadTimeout=setTimeout(function(){b.preloadNearbyImages(),b._preloadTimeout=null},16)}),void w(h+e,function(){d.off(e),b.wrap.off("click"+e),b.arrowLeft&&g&&b.arrowLeft.add(b.arrowRight).destroyMfpFastClick(),b.arrowRight=b.arrowLeft=null})):!1},next:function(){b.direction=!0,b.index=S(b.index+1),b.updateItemHTML()},prev:function(){b.direction=!1,b.index=S(b.index-1),b.updateItemHTML()},goTo:function(a){b.direction=a>=b.index,b.index=a,b.updateItemHTML()},preloadNearbyImages:function(){var a,c=b.st.gallery.preload,d=Math.min(c[0],b.items.length),e=Math.min(c[1],b.items.length);for(a=1;a<=(b.direction?e:d);a++)b._preloadItem(b.index+a);for(a=1;a<=(b.direction?d:e);a++)b._preloadItem(b.index-a)},_preloadItem:function(c){if(c=S(c),!b.items[c].preloaded){var d=b.items[c];d.parsed||(d=b.parseEl(c)),y("LazyLoad",d),"image"===d.type&&(d.img=a('<img class="mfp-img" />').on("load.mfploader",function(){d.hasSize=!0}).on("error.mfploader",function(){d.hasSize=!0,d.loadError=!0,y("LazyLoadError",d)}).attr("src",d.src)),d.preloaded=!0}}}});var U="retina";a.magnificPopup.registerModule(U,{options:{replaceSrc:function(a){return a.src.replace(/\.\w+$/,function(a){return"@2x"+a})},ratio:1},proto:{initRetina:function(){if(window.devicePixelRatio>1){var a=b.st.retina,c=a.ratio;c=isNaN(c)?c():c,c>1&&(w("ImageHasSize."+U,function(a,b){b.img.css({"max-width":b.img[0].naturalWidth/c,width:"100%"})}),w("ElementParse."+U,function(b,d){d.src=a.replaceSrc(d,c)}))}}}}),function(){var b=1e3,c="ontouchstart"in window,d=function(){v.off("touchmove"+f+" touchend"+f)},e="mfpFastClick",f="."+e;a.fn.mfpFastClick=function(e){return a(this).each(function(){var g,h=a(this);if(c){var i,j,k,l,m,n;h.on("touchstart"+f,function(a){l=!1,n=1,m=a.originalEvent?a.originalEvent.touches[0]:a.touches[0],j=m.clientX,k=m.clientY,v.on("touchmove"+f,function(a){m=a.originalEvent?a.originalEvent.touches:a.touches,n=m.length,m=m[0],(Math.abs(m.clientX-j)>10||Math.abs(m.clientY-k)>10)&&(l=!0,d())}).on("touchend"+f,function(a){d(),l||n>1||(g=!0,a.preventDefault(),clearTimeout(i),i=setTimeout(function(){g=!1},b),e())})})}h.on("click"+f,function(){g||e()})})},a.fn.destroyMfpFastClick=function(){a(this).off("touchstart"+f+" click"+f),c&&v.off("touchmove"+f+" touchend"+f)}}(),A()}); \ No newline at end of file diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/magnific-popup.css.css b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/magnific-popup.css.css deleted file mode 100644 index 1183cbefe99901cdb56988f57895c7e82d8bc1e2..0000000000000000000000000000000000000000 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/magnific-popup.css.css +++ /dev/null @@ -1,391 +0,0 @@ -/* Magnific Popup CSS */ -.mfp-bg { - top: 0; - left: 0; - width: 100%; - height: 100%; - z-index: 1042; - overflow: hidden; - position: fixed; - background: #0b0b0b; - opacity: 0.8; - filter: alpha(opacity=80); } - -.mfp-wrap { - top: 0; - left: 0; - width: 100%; - height: 100%; - z-index: 1043; - position: fixed; - outline: none !important; - -webkit-backface-visibility: hidden; } - -.mfp-container { - text-align: center; - position: absolute; - width: 100%; - height: 100%; - left: 0; - top: 0; - padding: 0 8px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; } - -.mfp-container:before { - content: ''; - display: inline-block; - height: 100%; - vertical-align: middle; } - -.mfp-align-top .mfp-container:before { - display: none; } - -.mfp-content { - position: relative; - display: inline-block; - vertical-align: middle; - margin: 0 auto; - text-align: left; - z-index: 1045; } - -.mfp-inline-holder .mfp-content, -.mfp-ajax-holder .mfp-content { - width: 100%; - cursor: auto; } - -.mfp-ajax-cur { - cursor: progress; } - -.mfp-zoom-out-cur, .mfp-zoom-out-cur .mfp-image-holder .mfp-close { - cursor: -moz-zoom-out; - cursor: -webkit-zoom-out; - cursor: zoom-out; } - -.mfp-zoom { - cursor: pointer; - cursor: -webkit-zoom-in; - cursor: -moz-zoom-in; - cursor: zoom-in; } - -.mfp-auto-cursor .mfp-content { - cursor: auto; } - -.mfp-close, -.mfp-arrow, -.mfp-preloader, -.mfp-counter { - -webkit-user-select: none; - -moz-user-select: none; - user-select: none; } - -.mfp-loading.mfp-figure { - display: none; } - -.mfp-hide { - display: none !important; } - -.mfp-preloader { - color: #CCC; - position: absolute; - top: 50%; - width: auto; - text-align: center; - margin-top: -0.8em; - left: 8px; - right: 8px; - z-index: 1044; } - .mfp-preloader a { - color: #CCC; } - .mfp-preloader a:hover { - color: #FFF; } - -.mfp-s-ready .mfp-preloader { - display: none; } - -.mfp-s-error .mfp-content { - display: none; } - -button.mfp-close, -button.mfp-arrow { - overflow: visible; - cursor: pointer; - background: transparent; - border: 0; - -webkit-appearance: none; - display: block; - outline: none; - padding: 0; - z-index: 1046; - -webkit-box-shadow: none; - box-shadow: none; } - -button::-moz-focus-inner { - padding: 0; - border: 0; } - -.mfp-close { - width: 44px; - height: 44px; - line-height: 44px; - position: absolute; - right: 0; - top: 0; - text-decoration: none; - text-align: center; - opacity: 0.65; - filter: alpha(opacity=65); - padding: 0 0 18px 10px; - color: #FFF; - font-style: normal; - font-size: 28px; - font-family: Arial, Baskerville, monospace; } - .mfp-close:hover, - .mfp-close:focus { - opacity: 1; - filter: alpha(opacity=100); } - .mfp-close:active { - top: 1px; } - -.mfp-close-btn-in .mfp-close { - color: #333; } - -.mfp-image-holder .mfp-close, -.mfp-iframe-holder .mfp-close { - color: #FFF; - right: -6px; - text-align: right; - padding-right: 6px; - width: 100%; } - -.mfp-counter { - position: absolute; - top: 0; - right: 0; - color: #CCC; - font-size: 12px; - line-height: 18px; - white-space: nowrap; } - -.mfp-arrow { - position: absolute; - opacity: 0.65; - filter: alpha(opacity=65); - margin: 0; - top: 50%; - margin-top: -55px; - padding: 0; - width: 90px; - height: 110px; - -webkit-tap-highlight-color: transparent; } - .mfp-arrow:active { - margin-top: -54px; } - .mfp-arrow:hover, - .mfp-arrow:focus { - opacity: 1; - filter: alpha(opacity=100); } - .mfp-arrow:before, - .mfp-arrow:after, - .mfp-arrow .mfp-b, - .mfp-arrow .mfp-a { - content: ''; - display: block; - width: 0; - height: 0; - position: absolute; - left: 0; - top: 0; - margin-top: 35px; - margin-left: 35px; - border: medium inset transparent; } - .mfp-arrow:after, - .mfp-arrow .mfp-a { - border-top-width: 13px; - border-bottom-width: 13px; - top: 8px; } - .mfp-arrow:before, - .mfp-arrow .mfp-b { - border-top-width: 21px; - border-bottom-width: 21px; - opacity: 0.7; } - -.mfp-arrow-left { - left: 0; } - .mfp-arrow-left:after, - .mfp-arrow-left .mfp-a { - border-right: 17px solid #FFF; - margin-left: 31px; } - .mfp-arrow-left:before, - .mfp-arrow-left .mfp-b { - margin-left: 25px; - border-right: 27px solid #3F3F3F; } - -.mfp-arrow-right { - right: 0; } - .mfp-arrow-right:after, - .mfp-arrow-right .mfp-a { - border-left: 17px solid #FFF; - margin-left: 39px; } - .mfp-arrow-right:before, - .mfp-arrow-right .mfp-b { - border-left: 27px solid #3F3F3F; } - -.mfp-iframe-holder { - padding-top: 40px; - padding-bottom: 40px; } - .mfp-iframe-holder .mfp-content { - line-height: 0; - width: 100%; - max-width: 900px; } - .mfp-iframe-holder .mfp-close { - top: -40px; } - -.mfp-iframe-scaler { - width: 100%; - height: 0; - overflow: hidden; - padding-top: 56.25%; } - .mfp-iframe-scaler iframe { - position: absolute; - display: block; - top: 0; - left: 0; - width: 100%; - height: 100%; - box-shadow: 0 0 8px rgba(0, 0, 0, 0.6); - background: #000; } - -/* Main image in popup */ -img.mfp-img { - width: auto; - max-width: 100%; - height: auto; - display: block; - line-height: 0; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - padding: 40px 0 40px; - margin: 0 auto; } - -/* The shadow behind the image */ -.mfp-figure { - line-height: 0; } - .mfp-figure:after { - content: ''; - position: absolute; - left: 0; - top: 40px; - bottom: 40px; - display: block; - right: 0; - width: auto; - height: auto; - z-index: -1; - box-shadow: 0 0 8px rgba(0, 0, 0, 0.6); - background: #444; } - .mfp-figure small { - color: #BDBDBD; - display: block; - font-size: 12px; - line-height: 14px; } - .mfp-figure figure { - margin: 0; } - -.mfp-bottom-bar { - margin-top: -36px; - position: absolute; - top: 100%; - left: 0; - width: 100%; - cursor: auto; } - -.mfp-title { - text-align: left; - line-height: 18px; - color: #F3F3F3; - word-wrap: break-word; - padding-right: 36px; } - -.mfp-image-holder .mfp-content { - max-width: 100%; } - -.mfp-gallery .mfp-image-holder .mfp-figure { - cursor: pointer; } - -@media screen and (max-width: 800px) and (orientation: landscape), screen and (max-height: 300px) { - /** - * Remove all paddings around the image on small screen - */ - .mfp-img-mobile .mfp-image-holder { - padding-left: 0; - padding-right: 0; } - .mfp-img-mobile img.mfp-img { - padding: 0; } - .mfp-img-mobile .mfp-figure:after { - top: 0; - bottom: 0; } - .mfp-img-mobile .mfp-figure small { - display: inline; - margin-left: 5px; } - .mfp-img-mobile .mfp-bottom-bar { - background: rgba(0, 0, 0, 0.6); - bottom: 0; - margin: 0; - top: auto; - padding: 3px 5px; - position: fixed; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; } - .mfp-img-mobile .mfp-bottom-bar:empty { - padding: 0; } - .mfp-img-mobile .mfp-counter { - right: 5px; - top: 3px; } - .mfp-img-mobile .mfp-close { - top: 0; - right: 0; - width: 35px; - height: 35px; - line-height: 35px; - background: rgba(0, 0, 0, 0.6); - position: fixed; - text-align: center; - padding: 0; } } - -@media all and (max-width: 900px) { - .mfp-arrow { - -webkit-transform: scale(0.75); - transform: scale(0.75); } - .mfp-arrow-left { - -webkit-transform-origin: 0; - transform-origin: 0; } - .mfp-arrow-right { - -webkit-transform-origin: 100%; - transform-origin: 100%; } - .mfp-container { - padding-left: 6px; - padding-right: 6px; } } - -.mfp-ie7 .mfp-img { - padding: 0; } - -.mfp-ie7 .mfp-bottom-bar { - width: 600px; - left: 50%; - margin-left: -300px; - margin-top: 5px; - padding-bottom: 5px; } - -.mfp-ie7 .mfp-container { - padding: 0; } - -.mfp-ie7 .mfp-content { - padding-top: 44px; } - -.mfp-ie7 .mfp-close { - top: 0; - right: 0; - padding-top: 0; } \ No newline at end of file diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/magnific-popup.css.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/magnific-popup.css.xml deleted file mode 100644 index 3c347d1a70db95befd138fe6c2acbea13e95d4a1..0000000000000000000000000000000000000000 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/magnific-popup.css.xml +++ /dev/null @@ -1,329 +0,0 @@ -<?xml version="1.0"?> -<ZopeData> - <record id="1" aka="AAAAAAAAAAE="> - <pickle> - <global name="Web Style" module="erp5.portal_type"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>_Access_contents_information_Permission</string> </key> - <value> - <tuple> - <string>Anonymous</string> - <string>Assignee</string> - <string>Assignor</string> - <string>Associate</string> - <string>Auditor</string> - <string>Manager</string> - <string>Owner</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Add_portal_content_Permission</string> </key> - <value> - <tuple> - <string>Assignor</string> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Change_local_roles_Permission</string> </key> - <value> - <tuple> - <string>Assignor</string> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Modify_portal_content_Permission</string> </key> - <value> - <tuple> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_View_Permission</string> </key> - <value> - <tuple> - <string>Anonymous</string> - <string>Assignee</string> - <string>Assignor</string> - <string>Associate</string> - <string>Auditor</string> - <string>Manager</string> - <string>Owner</string> - </tuple> - </value> - </item> - <item> - <key> <string>categories</string> </key> - <value> - <tuple> - <string>classification/collaborative/team</string> - </tuple> - </value> - </item> - <item> - <key> <string>content_md5</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>default_reference</string> </key> - <value> <string>magnific-popup.css</string> </value> - </item> - <item> - <key> <string>description</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>magnific-popup.css</string> </value> - </item> - <item> - <key> <string>language</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>portal_type</string> </key> - <value> <string>Web Style</string> </value> - </item> - <item> - <key> <string>short_title</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>title</string> </key> - <value> <string>magnific-popup.css</string> </value> - </item> - <item> - <key> <string>version</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>workflow_history</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> - </value> - </item> - </dictionary> - </pickle> - </record> - <record id="2" aka="AAAAAAAAAAI="> - <pickle> - <global name="PersistentMapping" module="Persistence.mapping"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>data</string> </key> - <value> - <dictionary> - <item> - <key> <string>document_publication_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> - </value> - </item> - <item> - <key> <string>edit_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> - </value> - </item> - <item> - <key> <string>processing_status_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent> - </value> - </item> - </dictionary> - </value> - </item> - </dictionary> - </pickle> - </record> - <record id="3" aka="AAAAAAAAAAM="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>publish</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>zope</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1455014096.47</float> - <string>UTC</string> - </tuple> - </state> - </object> - </value> - </item> - <item> - <key> <string>validation_state</string> </key> - <value> <string>published</string> </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> - <record id="4" aka="AAAAAAAAAAQ="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>edit</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>zope</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>serial</string> </key> - <value> <string>949.2010.26884.10154</string> </value> - </item> - <item> - <key> <string>state</string> </key> - <value> <string>current</string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1455014089.99</float> - <string>UTC</string> - </tuple> - </state> - </object> - </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> - <record id="5" aka="AAAAAAAAAAU="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>detect_converted_file</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>zope</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>external_processing_state</string> </key> - <value> <string>converted</string> </value> - </item> - <item> - <key> <string>serial</string> </key> - <value> <string>0.0.0.0</string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1455014042.1</float> - <string>UTC</string> - </tuple> - </state> - </object> - </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_router_html.html b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/ojsm_gadget_erp5_statusfield_html.html similarity index 61% rename from bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_router_html.html rename to bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/ojsm_gadget_erp5_statusfield_html.html index 38cfd771be82e114a1a5e059cdb2675a67e8165d..ecc7e66b8e454dd9b57923f2500a87f229c4937f 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/gadget_monitoring_router_html.html +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/ojsm_gadget_erp5_statusfield_html.html @@ -3,14 +3,16 @@ <head> <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> <meta name="viewport" content="width=device-width, user-scalable=no" /> - <title>Monitoring Router Gadget</title> + <title>ERP5 Statusfield</title> <!-- renderjs --> <script src="rsvp.js" type="text/javascript"></script> <script src="renderjs.js" type="text/javascript"></script> - <!-- custom script --> - <script src="gadget_monitoring_router.js" type="text/javascript"></script> + <script src="gadget_erp5_field_status.js" type="text/javascript"></script> + <script id="template-status-field" type="text/x-handlebars-template"> + <span class="label label-{{value}}">{{value}}</span> + </script> </head> <body> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/ojsm_gadget_erp5_statusfield_html.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/ojsm_gadget_erp5_statusfield_html.xml new file mode 100644 index 0000000000000000000000000000000000000000..736ac081c1cabcfcd02bab96d8423ac65db0b21d --- /dev/null +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/ojsm_gadget_erp5_statusfield_html.xml @@ -0,0 +1,332 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Web Page" module="erp5.portal_type"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_Access_contents_information_Permission</string> </key> + <value> + <tuple> + <string>Anonymous</string> + <string>Assignee</string> + <string>Assignor</string> + <string>Associate</string> + <string>Auditor</string> + <string>Manager</string> + <string>Owner</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Add_portal_content_Permission</string> </key> + <value> + <tuple> + <string>Assignee</string> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Change_local_roles_Permission</string> </key> + <value> + <tuple> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Modify_portal_content_Permission</string> </key> + <value> + <tuple> + <string>Assignee</string> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_View_Permission</string> </key> + <value> + <tuple> + <string>Anonymous</string> + <string>Assignee</string> + <string>Assignor</string> + <string>Associate</string> + <string>Auditor</string> + <string>Manager</string> + <string>Owner</string> + </tuple> + </value> + </item> + <item> + <key> <string>categories</string> </key> + <value> + <tuple> + <string>classification/collaborative/team</string> + </tuple> + </value> + </item> + <item> + <key> <string>content_md5</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>text/html</string> </value> + </item> + <item> + <key> <string>default_reference</string> </key> + <value> <string>gadget_erp5_field_status.html</string> </value> + </item> + <item> + <key> <string>description</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>ojsm_gadget_erp5_statusfield_html</string> </value> + </item> + <item> + <key> <string>language</string> </key> + <value> <string>en</string> </value> + </item> + <item> + <key> <string>portal_type</string> </key> + <value> <string>Web Page</string> </value> + </item> + <item> + <key> <string>short_title</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string>passwordGadget ERP5 Statusfield</string> </value> + </item> + <item> + <key> <string>version</string> </key> + <value> <string>001</string> </value> + </item> + <item> + <key> <string>workflow_history</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="2" aka="AAAAAAAAAAI="> + <pickle> + <global name="PersistentMapping" module="Persistence.mapping"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> + <dictionary> + <item> + <key> <string>document_publication_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> + </value> + </item> + <item> + <key> <string>edit_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> + </value> + </item> + <item> + <key> <string>processing_status_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent> + </value> + </item> + </dictionary> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="3" aka="AAAAAAAAAAM="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> + </pickle> + <pickle> + <tuple> + <none/> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>publish_alive</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1509383932.65</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + <item> + <key> <string>validation_state</string> </key> + <value> <string>published_alive</string> </value> + </item> + </dictionary> + </list> + </tuple> + </pickle> + </record> + <record id="4" aka="AAAAAAAAAAQ="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> + </pickle> + <pickle> + <tuple> + <none/> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>edit</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>serial</string> </key> + <value> <string>963.8986.63671.20514</string> </value> + </item> + <item> + <key> <string>state</string> </key> + <value> <string>current</string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1509446386.76</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + </dictionary> + </list> + </tuple> + </pickle> + </record> + <record id="5" aka="AAAAAAAAAAU="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> + </pickle> + <pickle> + <tuple> + <none/> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>detect_converted_file</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>external_processing_state</string> </key> + <value> <string>converted</string> </value> + </item> + <item> + <key> <string>serial</string> </key> + <value> <string>0.0.0.0</string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1509381854.52</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + </dictionary> + </list> + </tuple> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/ojsm_gadget_erp5_statusfield_js.js b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/ojsm_gadget_erp5_statusfield_js.js new file mode 100644 index 0000000000000000000000000000000000000000..aa4385d564962fab9243ae94e7893c57af13fc01 --- /dev/null +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/ojsm_gadget_erp5_statusfield_js.js @@ -0,0 +1,42 @@ +/*global window, rJS, Handlebars */ +/*jslint indent: 2, maxerr: 3 */ +(function (window, rJS, Handlebars) { + "use strict"; + + var gadget_klass = rJS(window), + templater = gadget_klass.__template_element, + status_field_template = Handlebars.compile( + templater.getElementById("template-status-field").innerHTML + ); + + gadget_klass + .declareMethod('render', function (options) { + var field_json = options || {}, + state_dict = { + value: field_json.value || field_json.default || "", + name: field_json.key, + title: field_json.title, + alt: field_json.description, + hidden: field_json.hidden + }; + return this.changeState(state_dict); + }) + + .onStateChange(function (modification_dict) { + if (this.state.hidded) { + this.element.innerHTML = ""; + } else { + this.element.innerHTML = status_field_template({value: this.state.value}); + } + // check others parameters... + }) + + .declareMethod('getContent', function () { + return {}; + }) + + .declareMethod('checkValidity', function () { + return true; + }); + +}(window, rJS, Handlebars)); \ No newline at end of file diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/ojsm_gadget_erp5_statusfield_js.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/ojsm_gadget_erp5_statusfield_js.xml new file mode 100644 index 0000000000000000000000000000000000000000..6df16a19d8b1872d146c6ee53595bc32e8e23c33 --- /dev/null +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/ojsm_gadget_erp5_statusfield_js.xml @@ -0,0 +1,328 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Web Script" module="erp5.portal_type"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_Access_contents_information_Permission</string> </key> + <value> + <tuple> + <string>Anonymous</string> + <string>Assignee</string> + <string>Assignor</string> + <string>Associate</string> + <string>Auditor</string> + <string>Manager</string> + <string>Owner</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Add_portal_content_Permission</string> </key> + <value> + <tuple> + <string>Assignee</string> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Change_local_roles_Permission</string> </key> + <value> + <tuple> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_Modify_portal_content_Permission</string> </key> + <value> + <tuple> + <string>Assignee</string> + <string>Assignor</string> + <string>Manager</string> + </tuple> + </value> + </item> + <item> + <key> <string>_View_Permission</string> </key> + <value> + <tuple> + <string>Anonymous</string> + <string>Assignee</string> + <string>Assignor</string> + <string>Associate</string> + <string>Auditor</string> + <string>Manager</string> + <string>Owner</string> + </tuple> + </value> + </item> + <item> + <key> <string>categories</string> </key> + <value> + <tuple> + <string>classification/collaborative/team</string> + </tuple> + </value> + </item> + <item> + <key> <string>content_md5</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>default_reference</string> </key> + <value> <string>gadget_erp5_field_status.js</string> </value> + </item> + <item> + <key> <string>description</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>ojsm_gadget_erp5_statusfield_js</string> </value> + </item> + <item> + <key> <string>language</string> </key> + <value> <string>en</string> </value> + </item> + <item> + <key> <string>portal_type</string> </key> + <value> <string>Web Script</string> </value> + </item> + <item> + <key> <string>short_title</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string>Gadget ERP5 Statusfield JS</string> </value> + </item> + <item> + <key> <string>version</string> </key> + <value> <string>001</string> </value> + </item> + <item> + <key> <string>workflow_history</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="2" aka="AAAAAAAAAAI="> + <pickle> + <global name="PersistentMapping" module="Persistence.mapping"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> + <dictionary> + <item> + <key> <string>document_publication_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> + </value> + </item> + <item> + <key> <string>edit_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> + </value> + </item> + <item> + <key> <string>processing_status_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent> + </value> + </item> + </dictionary> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="3" aka="AAAAAAAAAAM="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> + </pickle> + <pickle> + <tuple> + <none/> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>publish_alive</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1509383886.65</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + <item> + <key> <string>validation_state</string> </key> + <value> <string>published_alive</string> </value> + </item> + </dictionary> + </list> + </tuple> + </pickle> + </record> + <record id="4" aka="AAAAAAAAAAQ="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> + </pickle> + <pickle> + <tuple> + <none/> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>edit</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>serial</string> </key> + <value> <string>963.7950.43708.60125</string> </value> + </item> + <item> + <key> <string>state</string> </key> + <value> <string>current</string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1509446414.84</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + </dictionary> + </list> + </tuple> + </pickle> + </record> + <record id="5" aka="AAAAAAAAAAU="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> + </pickle> + <pickle> + <tuple> + <none/> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>detect_converted_file</string> </value> + </item> + <item> + <key> <string>actor</string> </key> + <value> <string>zope</string> </value> + </item> + <item> + <key> <string>comment</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>error_message</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>external_processing_state</string> </key> + <value> <string>converted</string> </value> + </item> + <item> + <key> <string>serial</string> </key> + <value> <string>0.0.0.0</string> </value> + </item> + <item> + <key> <string>time</string> </key> + <value> + <object> + <klass> + <global name="DateTime" module="DateTime.DateTime"/> + </klass> + <tuple> + <none/> + </tuple> + <state> + <tuple> + <float>1509383862.21</float> + <string>UTC</string> + </tuple> + </state> + </object> + </value> + </item> + </dictionary> + </list> + </tuple> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/rjs_gadget_erp5_css.css b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/rjs_gadget_erp5_css.css deleted file mode 100644 index 0659c9946ccb05a42ef2351a33b36d39ad0ef117..0000000000000000000000000000000000000000 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/rjs_gadget_erp5_css.css +++ /dev/null @@ -1,5007 +0,0 @@ -/* --------------------------- gadget_core.css -------------------------- */ -/* - ========================================================================= - ================================ fonts ================================= - ========================================================================= -*/ -@font-face { - font-family: 'FontAwesome'; - src: url('font-awesome/font-awesome-webfont.eot'); - src: url('font-awesome/font-awesome-webfont.eot') format('embedded-opentype'), url('font-awesome/font-awesome-webfont.woff2') format('woff2'), url('font-awesome/font-awesome-webfont.woff') format('woff'), url('font-awesome/font-awesome-webfont.ttf') format('truetype'), url('font-awesome/font-awesome-webfont.svg') format('svg'); - font-weight: normal; - font-style: normal; -} -/* global reference font-size (.9em = 14.4px) */ -html.ui-mobile body div p, -html.ui-mobile body div a, -html.ui-mobile body div button, -html.ui-mobile body div h1, -html.ui-mobile body div h2, -html.ui-mobile body div h3, -html.ui-mobile body div h4, -html.ui-mobile body div h5, -html.ui-mobile body div h6, -html.ui-mobile body div input, -html.ui-mobile body div select, -html.ui-mobile body div label, -html.ui-mobile body div legend, -html.ui-mobile body div option, -html.ui-mobile body div span, -html.ui-mobile body div textarea, -html.ui-mobile body th, -html.ui-mobile body td, - -/* ...sigh ... */ -html.ui-mobile body li.ui-li-divider, -html.ui-mobile body .ui-input-btn, -html.ui-mobile body th .ui-btn, -html.ui-mobile body .ui-header h1.ui-title { - font-size: .9em; - font-weight: 400; - font-family: 'Open Sans', Helvetica, Arial, sans-serif; -} - -/* ...sigh sigh ... */ -html.ui-mobile body th a, -html.ui-mobile body td a, -html.ui-mobile body th a.ui-btn, -html.ui-mobile body td a.ui-btn, -html.ui-mobile body .ui-header .ui-title .ui-btn { - font-size: 100%; -} - -/* responsive listview-table */ -@media (max-width: 48em) { - html table tbody tr td:first-child ~ td a, - html table tbody tr th:first-child ~ th a, - html table tbody tr td:first-child ~ td a, - html table tbody tr th:first-child ~ th a { - font-size: 85%; - } -} - -/* force all code to look like code */ -html.ui-mobile body div pre * { - font-family: inherit; - font-size: inherit; -} - -/* from here on in % of whatever is set above */ -.ui-content-header-section .ui-content-title { - font-size: 500%; - letter-spacing: -0.05em; -} -.ui-content-header-fullwidth .ui-content-title, -.ui-content-header-plain .ui-content-title { - font-size: 150%; -} -.ui-content-header-fullwidth .ui-content-subtitle, -.ui-content-header-section .ui-content-subtitle { - font-size: 100%; -} -@media (max-width: 62em) { - .ui-content-header-section .ui-content-title { - font-size: 300%; - } - .ui-content-header-fullwidth .ui-content-title, - .ui-content-header-plain .ui-content-title { - font-size: 150%; - } -} -@media (max-width: 48em) { - .ui-content-header-section .ui-content-title { - font-size: 150%; - } - .ui-content-header-fullwidth .ui-content-title, - .ui-content-header-plain .ui-content-title { - font-size: 100%; - } -} - -/* - ========================================================================= - ========================= panel f&$* up =============================== - ========================================================================= -*/ -/* -@media (min-width: 64em) { - div[data-gadget-scope='header'] > div, - article { - margin-left: 17em; - width: auto; - } - html body button.responsive[data-i18n='Menu'] { - display: none; - } - .jqm-navmenu-panel .ui-header .ui-controlgroup-controls form .ui-btn { - display: none; - } -} -*/ -/* - ========================================================================= - ======================== overwriting widgets =========================== - ========================================================================= -*/ - -/* - ------------------------------------------------------------------------- - ------------------------------- Loader ---------------------------------- - ------------------------------------------------------------------------- -*/ -/* don't fade spinner */ -html body .ui-icon-spinner.ui-icon-spin { - opacity: 1; -} - -/* - ------------------------------------------------------------------------- - -------------------------------- Page ----------------------------------- - ------------------------------------------------------------------------- -*/ - -/* page theme backgrounds */ -html body, -html body .ui-page, -html body .ui-page .ui-panel-wrapper { - background: none; - border-color: transparent; - color: inherit; - text-shadow: none; -} - -/* page padding - JQM tries to set this through the wrapping page-div. Once - this is gone, remove rule */ -html body .ui-page-header-fixed { - padding-top: 41px !important; -} - -/* - ------------------------------------------------------------------------- - ------------------------------- Content --------------------------------- - ------------------------------------------------------------------------- -*/ - -/* dimensions inset header/content */ -.ui-content-header-section, -.ui-content-section { - border-style: solid; - border-width: 1px; - /* max-width: 85%; */ - margin: 0 auto; -} -.ui-content-header-plain { - /* max-width: 85%; */ - margin: 0 auto; -} - -/* MOVE: icon positioning */ -.ui-content-header-plain .ui-content-title span { - padding-right: .5em; -} - -/* fullwidth header box-shadow and max-height */ -.ui-content-header-fullwidth { - padding: 1em; - border-width: 0; - border-bottom-width: 1px; - -webkit-box-shadow: 0 1px 3px #aaa; - -moz-box-shadow: 0 1px 3px #aaa; - box-shadow: 0 1px 3px #aaa; - max-height: 5em; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - /* with navbar margin: 5em -1em 0; */ - margin: -0.5em -1em 0; - width: auto; -} - -/* indent fullwidth header text */ -.ui-content-header-fullwidth .ui-content-title, -.ui-content-header-fullwidth .ui-content-subtitle { - margin: 0; -} - -/* spacing of content-header = independent of global header */ -.ui-content-header-section, -.ui-content-header-plain { - margin-top: 5%; -} -@media (max-width: 48em) { - .ui-content-header-section, - .ui-content-header-plain { - margin-top: 10%; - } - .ui-content-header-plain { - max-width: none; - } -} - -.ui-content-header-section { - -webkit-border-bottom-left-radius: 0; - border-bottom-left-radius: 0; - -webkit-border-bottom-right-radius: 0; - border-bottom-right-radius: 0; - padding-bottom: .5em; -} - -/* add box shadow and border radius */ -.ui-content-section { - margin-top: 1em; - padding: 1em; - -webkit-border-radius: .3125em; - border-radius: .3125em; - -webkit-box-shadow: 0 2px 2px #aaa; - -moz-box-shadow: 0 2px 2px #aaa; - box-shadow: 0 2px 2px #aaa; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -/* dock section following header to header */ -.ui-content-header-section ~ .ui-content-section { - border-top-width: 0; - padding-top: 0; - margin-top: 0; - -webkit-border-top-left-radius: 0; - border-top-left-radius: 0; - -webkit-border-top-right-radius: 0; - border-top-right-radius: 0; -} -/* add space between sections */ -.ui-content-section ~ .ui-content-section { - margin: 1em auto; -} - -/* add top border */ -html body .ui-content-header-plain ~ .ui-content-section { - border-top-width: 1px; -} - - -/* custom icon positioning */ -.ui-content-menu .ui-controlgroup-controls .ui-icon-custom { - margin: 0 1em; - border: 0 none; - border-radius: 1em; - border-radius: 1.25em; - -webkit-box-sizing: padding-box; - -moz-box-sizing: padding-box; - box-sizing: padding-box; - height: 2.5em; - width: 2.5em; -} -.ui-content-menu .ui-icon-custom:after { - font-size: 150%; - border-radius: 1em; - padding: 0.4em; - vertical-align: middle; - left: 29%; - top: 30%; - margin-left: -11px; -} -.ui-content-header-section .ui-content-title, -.ui-content-header-section .ui-content-subtitle, -.ui-content-header-section .ui-content-menu, -.ui-content-header-fullwidth .ui-content-menu { - text-align: center; -} - - -@media (max-width: 48em) { - .ui-content-header-section, - .ui-content-section { - max-width: 100%; - } -} - -/* section and form section header */ -html body section ~ .ui-content-section .ui-content-header-inline, -html.ui-mobile body form .ui-content-header-inline { - display: block; - font-weight: 700; - border-bottom: 1px solid rgb(115, 115, 115); - border-bottom: 1px solid rgba(0,0,0,.3); - margin-bottom: 0.5em; - margin-top: 0.5em; - padding-bottom: 1em; -} - -/* Maximize content section*/ -html body .ui-content-maximize { - position: fixed; - right: 0; - bottom: 0; - top: 2.4em !important; - left: 0 !important; - z-index: 900 !important; - overflow: hidden !important; - height: 94%; - width: 100%;} - -/* - ------------------------------------------------------------------------- - ---------------------- Form Field Positioning --------------------------- - ------------------------------------------------------------------------- -*/ -/* form validation (assuming label>span is used) */ -form label span { - color: red; -} - -/* stretch controlgroup controls in case they don't */ -html.ui-mobile head + body .ui-field-contain fieldset .ui-controlgroup-controls { - width: 100%; -} -/* remove double borders on vertical fieldsets TODO: no pseudo, not generic! */ -html.ui-mobile head + body .ui-field-contain fieldset.ui-controlgroup-vertical .ui-controlgroup-controls > * .ui-btn { - border-bottom-width: 0; -} -html.ui-mobile head + body .ui-field-contain fieldset.ui-controlgroup-vertical .ui-controlgroup-controls > *:last-child .ui-btn { - border-bottom-width: 1px; -} - -.left, -.right, -.center, -.bottom { - vertical-align: top; - padding: 0 2%; -} -.center, -.bottom { - width: 96%; - display: block; -} -.left, -.right { - display: inline-block; - width: 45%; -} - -/* add JQM float ourselves, but only for form elements! */ -.ui-field-contain > label ~ [class*="ui-"], -.ui-field-contain fieldset .ui-controlgroup-controls, -.ui-field-contain > label + div { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - float: left; -} - -/* stretch textarea */ -.left textara, -.right textarea { - width: 100%; - display: inline-block; - vertical-align: middle; -} - -/* override JQM forcing 78% on textrea */ -.ui-field-contain > label ~ textarea[class*="ui-"] { - width: 67%; -} - -/* override border-radius for all inputs to match buttons XXX Punting with center */ -html.ui-mobile head + body .center .ui-input-text.ui-corner-all { - -webkit-border-radius: .325em; - border-radius: .325em; -} -/* field-containers with add on button have no right corners */ -html.ui-mobile head + body .center .ui-field-contain > :first-child:nth-last-child(2) { - -webkit-border-top-right-radius: 0; - border-top-right-radius: 0; - -webkit-border-bottom-right-radius: 0; - border-bottom-right-radius: 0; -} - -/* remove left corners and margin from side button */ -html.ui-mobile head + body .ui-field-contain > :first-child:nth-last-child(2) ~ .ui-btn { - -webkit-border-top-left-radius: 0; - border-top-left-radius: 0; - -webkit-border-bottom-left-radius: 0; - border-bottom-left-radius: 0; - margin: 0; - border-left-width: 0; -} - - -/* labels width */ -html.ui-mobile head + body label:not(.ui-btn), -html.ui-mobile head + body fieldset div.ui-controlgroup-label { - max-width: 31%; - min-width: 31%; -} -/* label center/bottom has double space, so needs half of the above */ -html.ui-mobile head + body .center label:not(.ui-btn), -html.ui-mobile head + body .center fieldset div.ui-controlgroup-label, -html.ui-mobile head + body .bottom label:not(.ui-btn), -html.ui-mobile head + body .bottom fieldset div.ui-controlgroup-label { - max-width: 15%; - min-width: 15%; - margin-right: 0.5%; /* not perfetct, redo, this should be 1% */ -} - -/* input width depending on number of inputs (allow 3 selects side-by-side) */ -/* <label><div.gadget> */ -html.ui-mobile head + body .ui-field-contain :first-child:nth-last-child(2) ~ div, -html.ui-mobile head + body .ui-field-contain fieldset .ui-controlgroup-controls :first-child:nth-last-child(2) ~ div { - width: 67%; -} -/* <label><div.gadget><label><div.gadget> -html.ui-mobile head + body .ui-field-contain :first-child:nth-last-child(4) ~ div, -html.ui-mobile head + body .ui-field-contain fieldset .ui-controlgroup-controls :first-child:nth-last-child(4) ~ div { - width: 50%; -} -*/ -/* <label><div.gadget><label><div.gadget><label><div.gadget> -html.ui-mobile head + body .ui-field-contain :first-child:nth-last-child(6) ~ div, -html.ui-mobile head + body .ui-field-contain fieldset .ui-controlgroup-controls :first-child:nth-last-child(6) ~ div { - width: 32.99%; -} -*/ -/* reset for collections of checkbox/radio (up to 6) */ -html.ui-mobile head + body .ui-field-contain > div:first-of-type + div, -html.ui-mobile head + body .ui-field-contain > div:first-of-type + div + div, -html.ui-mobile head + body .ui-field-contain fieldset.ui-controlgroup div.ui-controlgroup-controls > div:first-of-type + div, -html.ui-mobile head + body .ui-field-contain fieldset.ui-controlgroup div.ui-controlgroup-controls > div:first-of-type + div + div { - width: auto; -} - -/* and textarea/other elements in center/bottom */ -html.ui-mobile head + body .bottom div.ui-field-contain textarea.ui-input-text, -html.ui-mobile head + body .center div.ui-field-contain textarea.ui-input-text, -/* include gadget */ -html.ui-mobile head + body .field_container .bottom div.ui-field-contain label ~ div, -html.ui-mobile head + body .field_container .center div.ui-field-contain label ~ div { - width: 84.5%; -} -/* and gadget child textarea width */ -html.ui-mobile head + body .field_container .bottom div.ui-field-contain label ~ div textarea, -html.ui-mobile head + body .field_container .center div.ui-field-contain label ~ div textarea { - width: 100%; -} - -/* input vs side icon dimensions */ -html.ui-mobile head + body .field_container div.ui-field-contain div .ui-input-has-icon { - width: 79%; - display: inline-block; - -webkit-box-sizing: content-box; - -moz-box-sizing: content-box; - box-sizing: content-box; - padding-right: 9%; - vertical-align: middle; -} -/* icon next to input */ -html.ui-mobile head + body .field_container div.ui-field-contain div .ui-input-has-icon ~ .ui-btn { - margin-right: 0; - margin-top: 0; - margin-bottom: 0; - -webkit-border-radius: .325em; - padding: .2em .5%; - border-radius: .325em; - width: 8%; - vertical-align: middle; -} -/* extend only-child inputs without side icons */ -html.ui-mobile head + body .field_container div.ui-field-contain div .ui-input-has-icon:only-child { - width: 100%; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -@media (min-width: 62em) { - /* USED for searchfield + icon */ - /* XXX: this should not be necessary! fullwidth fields need different dimensions */ - html.ui-mobile head + body .field_container .bottom div.ui-field-contain div .ui-input-has-icon { - width: 87%; - padding-right: 9%; - } - /* icon next to input */ - html.ui-mobile head + body .field_container .bottom div.ui-field-contain div .ui-input-has-icon ~ .ui-btn { - width: 2%; - } -} - -/* remove duplicate border on fieldset and set corners XXX IE8*/ -html.ui-mobile head + body .ui-field-contain fieldset label { - border-top-width: 0; -} -/* properly inherit corners into fieldset XXX IE8 */ -html.ui-mobile head + body .ui-controlgroup-controls div:first-of-type label { - border-top-width: 1px; - -webkit-border-top-left-radius: .325em; - border-top-left-radius: .325em; - -webkit-border-top-right-radius: .325em; - border-top-right-radius: .325em; -} -html.ui-mobile head + body .ui-controlgroup-controls div:last-of-type label { - -webkit-border-bottom-left-radius: .325em; - border-bottom-left-radius: .325em; - -webkit-border-bottom-right-radius: .325em; - border-bottom-right-radius: .325em; -} - -/* input with icon on the right > needs specificty to overwriter JQM height */ -html.ui-mobile head + body div.ui-field-contain > a.ui-btn { - border-radius: 0 0.325em 0.325em 0; - height: 2.2em; - margin: 0 .4em 0 0; - width: 2.2em; - position: absolute; - top: 0; - right: 0; -} - -/* make sure search input has no margin, to not offset right hand icon */ -html .ui-input-text, -html .ui-input-search, -html .ui-select { - margin: 0; -} - -/* pre-enhanced input fix */ -html.ui-mobile head + body div.ui-field-contain div.ui-input-text div.ui-input-btn { - width: 1.75em; -} - -/* border-radius for inputs and inputs with icon */ -html.ui-mobile head + body .ui-field-contain > div { - -webkit-border-top-right-radius: 0; - border-top-right-radius: 0; - -webkit-border-bottom-right-radius: 0; - border-bottom-right-radius: 0; -} -html.ui-mobile head + body .ui-field-contain > :last-child { - -webkit-border-top-right-radius: .325em; - border-top-right-radius: .325em; - -webkit-border-bottom-right-radius: .325em; - border-bottom-right-radius: .325em; -} - -/* middle screen */ -@media (max-width: 62em) { - - /* set width and spacing */ - .left, - .right, - .center, - .bottom { - display: block; - -webkit-box-sizing: padding-box; - -moz-box-sizing: padding-box; - box-sizing: padding-box; - } - - /* set width (XXX assume listbox ONLY is in bottom, otherwise padded side */ - .left, - .right, - .bottom, - .center { - width: auto; - } - - /* reset min/max width and shrink labels ... */ - html.ui-mobile head + body label, - html.ui-mobile head + body legend { - min-width: 0; - max-width: none; - font-size: 80%; - } - /* same for legend, except shrinking */ - html.ui-mobile head + body label:not(.ui-btn), - html.ui-mobile head + body fieldset div.ui-controlgroup-label { - min-width: 0; - max-width: none; - } - - /* <label><div.gadget> */ - html.ui-mobile head + body .ui-field-contain :first-child:nth-last-child(2) ~ div, - html.ui-mobile head + body .ui-field-contain fieldset .ui-controlgroup-controls :first-child:nth-last-child(2) ~ div, - .ui-field-contain > label ~ textarea[class*="ui-"] { - width: 78%; - } - /* <label><div.gadget><label><div.gadget> - html.ui-mobile head + body .ui-field-contain :first-child:nth-last-child(4) ~ div, - html.ui-mobile head + body .ui-field-contain fieldset .ui-controlgroupcontrols :first-child:nth-last-child(4) ~ div { - width: 46%; - } */ - /* <label><div.gadget><label><div.gadget><label><div.gadget> - html.ui-mobile head + body .ui-field-contain :first-child:nth-last-child(6) ~ div, - html.ui-mobile head + body .ui-field-contain fieldset .ui-controlgroup-controls :first-child:nth-last-child(6) ~ div { - width: 32.99%; - }*/ - - - /* bottom/center > 94.4% + 2x2% padding + 2x.25padding */ - /* extend textarea and fullwidth element container */ - html.ui-mobile head + body .bottom div.ui-field-contain textarea.ui-input-text, - html.ui-mobile head + body .center div.ui-field-contain textarea.ui-input-text, - html.ui-mobile head + body .field_container .bottom div.ui-field-contain label + div, - html.ui-mobile head + body .field_container .center div.ui-field-contain label + div { - width: 78.4%; - } - - /* textarea has double space, so needs half of the above */ - html.ui-mobile head + body div.center div.ui-field-contain label, - html.ui-mobile head + body div.bottom div.ui-field-contain label, - html.ui-mobile head + body div.ui-field-contain div.ui-field-contain label { - max-width: 20%; - min-width: 20%; - margin-right: 1.6%; /* no good either, should be 2% */ - } - - /* input vs side icon dimensions */ - html.ui-mobile head + body .field_container div.ui-field-contain div .ui-input-has-icon { - width: 84.5%; - padding-right: 9%; - } - /* icon next to input */ - html.ui-mobile head + body .field_container div.ui-field-contain div .ui-input-has-icon ~ .ui-btn { - width: 4%; - } -} - -@media (max-width: 48em) { - - /* set width and spacing */ - .left, - .right, - .center, - .bottom { - width: auto; - display: block; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - } - - /* <label><div.gadget> */ - html.ui-mobile head + body .ui-field-contain :first-child:nth-last-child(2) ~ div, - html.ui-mobile head + body .ui-field-contain fieldset .ui-controlgroup-controls :first-child:nth-last-child(2) ~ div, - .ui-field-contain > label ~ textarea[class*="ui-"] { - max-width: 88%; - } - /* <label><div.gadget><label><div.gadget> - html.ui-mobile head + body .ui-field-contain :first-child:nth-last-child(4) ~ div, - html.ui-mobile head + body .ui-field-contain fieldset .ui-controlgroup-controls :first-child:nth-last-child(4) ~ div { - max-width: 88%; - }*/ - /* <label><div.gadget><label><div.gadget><label><div.gadget> - html.ui-mobile head + body .ui-field-contain :first-child:nth-last-child(6) ~ div, - html.ui-mobile head + body .ui-field-contain fieldset .ui-controlgroup-controls :first-child:nth-last-child(6) ~ div { - width: 32.99%; - }*/ - - /* bottom/center > 94.4% + 2x2% padding + 2x.25padding */ - /* extend textarea and fullwidth element container - html.ui-mobile head + body .bottom div.ui-field-contain textarea.ui-input-text, - html.ui-mobile head + body .center div.ui-field-contain textarea.ui-input-text { - max-width: 90%; - }*/ - - /* and textarea/other elements in center/bottom */ - html.ui-mobile head + body .center textarea, - html.ui-mobile head + body .bottom textarea, - html.ui-mobile head + body .field_container .bottom div.ui-field-contain label ~ div, - html.ui-mobile head + body .field_container .center div.ui-field-contain label ~ div { - max-width: 100%; - } - - /* input vs side icon dimensions */ - html.ui-mobile head + body .field_container div.ui-field-contain div .ui-input-has-icon { - width: 83%; - padding-right: 7%; - } - /* icon next to input */ - html.ui-mobile head + body .field_container div.ui-field-contain div .ui-input-has-icon ~ .ui-btn { - width: 6.5%; - } - - /* extend textarea and fullwidth element container */ - .center .ui-field-contain { - width: auto; - } -} - -/* need to override JQM breakpoint */ -@media (max-width: 28em) { - - /* remove float */ - .ui-field-contain > label ~ [class*="ui-"], - .ui-field-contain fieldset .ui-controlgroup-controls, - .ui-field-contain > label + div { - margin: auto; - float: none; - } - - /* unset max-width */ - html.ui-mobile head + body .ui-field-contain :first-child:nth-last-child(2) ~ div, - html.ui-mobile head + body .ui-field-contain fieldset .ui-controlgroup-controls :first-child:nth-last-child(2) ~ div, - html.ui-mobile head + body .ui-field-contain :first-child:nth-last-child(3) ~ div, - html.ui-mobile head + body .ui-field-contain fieldset .ui-controlgroup-controls :first-child:nth-last-child(3) ~ div { - max-width: none; - } - - /* make sure there is a bottom border */ - .ui-field-contain, - .ui-field-contain:last-child { - border-bottom: 1px solid rgba(0, 0, 0, 0.15); - } - - /* JQM switches margin to padding on the field-container to show the border, - adjust add-on icon position matching padding-top: .8em */ - html.ui-mobile head + body div.ui-field-contain > a.ui-btn { - top: 22%; - } - - /* <label><div.gadget> */ - html.ui-mobile head + body .ui-field-contain :first-child:nth-last-child(2) ~ div, - html.ui-mobile head + body .ui-field-contain fieldset .ui-controlgroup-controls :first-child:nth-last-child(2) ~ div { - width: 100%; - max-width: none; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - } - - /* and textarea/other elements in center/bottom */ - html.ui-mobile head + body .bottom div.ui-field-contain textarea.ui-input-text, - html.ui-mobile head + body .center div.ui-field-contain textarea.ui-input-text, - html.ui-mobile head + body .field_container .bottom div.ui-field-contain label ~ div, - html.ui-mobile head + body .field_container .center div.ui-field-contain label ~ div { - max-width: none; - width: 100%; - } - - /* input vs side icon dimensions */ - html.ui-mobile head + body .field_container div.ui-field-contain div .ui-input-has-icon { - width: 81%; - padding-right: 7%; - } - /* icon next to input */ - html.ui-mobile head + body .field_container div.ui-field-contain div .ui-input-has-icon ~ .ui-btn { - width: 8%; - } - /* bottom icon (center, too) need different dimensions */ - html.ui-mobile head + body .field_container .bottom div.ui-field-contain div .ui-input-has-icon ~ .ui-btn { - width: 9.5%; - padding-top: 1em; - padding-bottom: 1em; - } - - /* extend textarea and fullwidth element container */ - .center .ui-field-contain { - width: auto; - } -} -/* - ------------------------------------------------------------------------- - ---------------------------- Collapsible -------------------------------- - ------------------------------------------------------------------------- -*/ -.ui-collapsible .ui-listview .ui-last-child { - -webkit-border-bottom-left-radius: 0; - border-bottom-left-radius: 0; - -webkit-border-bottom-right-radius: 0; - border-bottom-right-radius: 0; -} -.ui-collapsible-set > .ui-last-child .ui-listview > .ui-last-child { - -webkit-border-bottom-left-radius: inherit; - border-bottom-left-radius: inherit; - -webkit-border-bottom-right-radius: inherit; - border-bottom-right-radius: inherit; -} - - -/* collapsible inside listview (make collapsible look like divider) */ -/* XXX: not sure this is so good */ -html .ui-listview > li.ui-collapsible { - margin: 0; - padding: 0; -} -/* no padding for header */ -html .ui-listview > li.ui-collapsible .ui-collapsible-heading { - padding: 0; -} -/* format button inside header */ -html .ui-listview > li.ui-collapsible .ui-collapsible-heading a { - background: 0 none; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - display: block; - padding: 0 0 0 1.5em; - text-decoration: none; - width: 100%; - pointer-events: none; -} -/* icon size */ -html .ui-listview > li.ui-collapsible .ui-collapsible-heading a:after { - background: 0 none; -} -/* remove background on fake caret icon on header */ -html .ui-listview > li.ui-collapsible .ui-collapsible-heading:after { - background: 0 none; -} -/* remove margin and padding on collapsible content */ -html .ui-listview > li.ui-collapsible .ui-collapsible-content { - padding: 0; -} -html .ui-listview > li.ui-collapsible .ui-collapsible-content > fieldset { - margin: 0; -} -html .ui-listview > li.ui-collapsible .ui-collapsible-content > fieldset form .ui-btn { - border-right-width: 0; - border-left-width: 0; - text-align: left; -} -html .ui-listview > li.ui-collapsible .ui-collapsible-content > fieldset form:last-child .ui-btn { - border-bottom-width: 0; -} -/* - ------------------------------------------------------------------------- - ------------------------------ Table --------t---------------------------- - ------------------------------------------------------------------------- -*/ - -/* default table styles */ -table { - border-collapse: separate; - border-spacing: 0; - padding: 0; - width: 100%; -} -table th, -table td { - line-height: 1.5em; - text-align: left; - min-height: 2.5em; /* hardcoded if no links;*/ - vertical-align: middle; - padding: 0; -} -table th .ui-btn, -table td .ui-btn { - line-height: normal; -} -table th { - font-weight: bold; -} -table caption { - text-align: left; - margin-bottom: 1.4em; - opacity: .5; -} - -/* table header (not thead!) */ -.ui-table-header ~ table { - border-top-width: 0; -} - - -/* hard-lock margin */ -html body .ui-table-header .ui-title { - margin: 0 30% -} - - -/* radius */ -.ui-table-inset { - -webkit-border-radius: .3125em; - border-radius: .3125em; -} - -/* hover table header radius */ -.ui-table-header .ui-btn-left .ui-first-child:hover { - -webkit-border-top-left-radius: .325em; - border-top-left-radius: .325em; -} -.ui-table-header .ui-btn-right .ui-last-child:hover { - -webkit-border-top-right-radius: .325em; - border-top-right-radius: .325em; -} - -/* reset page header customizations ... */ -.ui-table-header .ui-controlgroup-horizontal .ui-controlgroup-controls, -.ui-table-header .ui-controlgroup-horizontal .ui-controlgroup-controls a.ui-btn, -.ui-table-header .ui-controlgroup-controls .ui-btn-icon-notext, -/* reset field-container capturing table-header controlgroups as listbox is inside field-container... */ -html.ui-mobile head + body .ui-field-contain *:first-child:nth-last-child(3) ~ div, -html.ui-mobile head + body .ui-field-contain fieldset .ui-controlgroup-controls *:first-child:nth-last-child(3) ~ div { - width: auto; -} - -.ui-table-inset thead, -.ui-table-inset thead tr:first-child { - -webkit-border-top-left-radius: inherit; - border-top-left-radius: inherit; - -webkit-border-top-right-radius: inherit; - border-top-right-radius: inherit; -} -.ui-table-inset thead tr:first-child td:first-child, -.ui-table-inset thead tr:first-child th:first-child, -.ui-table-header ~ .ui-table-inset { - -webkit-border-top-left-radius: 0; - border-top-left-radius: 0; -} -.ui-table-inset thead tr:first-child td:last-child, -.ui-table-inset thead tr:first-child th:last-child, -.ui-table-header ~ .ui-table-inset { - -webkit-border-top-right-radius: 0; - border-top-right-radius: 0; -} -.ui-table-inset tbody tr:last-child td:first-child, -.ui-table-inset tbody tr:last-child th:first-child, -.ui-table-header { - -webkit-border-bottom-left-radius: inherit; - border-bottom-left-radius: inherit; -} -.ui-table-inset tbody tr:last-child td:last-child, -.ui-table-inset tbody tr:last-child th:last-child, -.ui-table-header { - -webkit-border-bottom-right-radius: inherit; - border-bottom-right-radius: inherit; -} - -/* table footer */ -tfoot, -tfoot tr, -.ui-table-inset tfoot tr:last-child th:last-child, -.ui-table-inset tfoot tr:last-child td:last-child, -.ui-table-inset tfoot .ui-corner-all { - -webkit-border-bottom-right-radius: .325em; - border-bottom-right-radius: .325em; -} -tfoot, -tfoot tr, -.ui-table-inset tfoot tr:last-child th:first-child, -.ui-table-inset tfoot tr:last-child td:first-child, -.ui-table-inset tfoot .ui-corner-all { - -webkit-border-bottom-left-radius: .325em; - border-bottom-left-radius: .325em; -} - -/* make sure JQM does not mess up table footer */ -html .ui-field-contain tfoot .ui-controlgroup-controls { - -webkit-box-sizing: content-box; - -moz-box-sizing: content-box; - box-sizing: content-box; - float: none; - width: auto; -} -html .ui-field-contain tfoot .ui-controlgroup-controls { - margin: auto; -} - -/* box size everything */ -html table td, -html table th, -html table td a, -html table th a { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -/* header cell formatting */ -html table thead th, -html table thead td { - text-shadow: none; - font-weight: normal; - vertical-align: middle; - text-align: center; - padding: .5em 0; /* must be changed if there is a link in the header! */ -} - -/* uncss and stretch table body links */ -html table tbody td a, -html table tbody th a { - text-decoration: none; - font-weight: normal; - width: 100%; - display: block; - padding: .4em .25em; - min-height: inherit; -} -html table tbody td:hover a, -html table tbody th:hover a { - text-decoration: none; -} - -/* override JQM default format */ -html table { - border: 1px solid; -} -/* alignment */ -html table thead th .ui-btn, -html table thead td .ui-btn { - text-align: left; -} - -/* center rowspan header cells */ -html table thead th[colspan] { - text-align: center; -} - -html .ui-listbox-error { - text-align: center; -} - - - -html .ui-content-non-editable { - word-wrap: break-word; - white-space: pre-line; -} - -/* cell background */ -html table thead tr, -html table tfoot tr, -html table tbody tr:nth-child(even) { - background-color: #eeeeee; - background-color: rgba(0,0,0,.04); -} - -/* cell strokes */ -html table tbody th, -html table tbody td, -html table thead th { - border-bottom: 1px solid #e6e6e6; - border-bottom: 1px solid rgba(0,0,0,.05); - border-right: 1px solid #e6e6e6; - border-right: 1px solid rgba(0,0,0,.05); -} -html table tbody tr:last-child td:last-child { - border-right: 0; -} - -/* vertical strokes */ -html table thead tr td, -html table thead tr th, -html table tbody tr td, -html table tbody tr th { - border-right-width: 1px; - border-left-width: 1px; -} -html table thead tr td:first-child, -html table thead tr th:first-child, -html table tbody tr td:first-child, -html table tbody tr th:first-child { - border-left-width: 0; -} -html table thead tr td:last-child, -html table thead tr th:last-child, -html table tbody tr td:last-child, -html table tbody tr th:last-child { - border-right-width: 0; -} - -/* footer always blocks */ -tfoot th, -tfoot td { - padding: 0; -} -/* pagination */ -tfoot .ui-controlgroup { - margin: 0; - width: 100%; - text-align: right; -} -/* cut corners */ -tfoot .ui-controlgroup .ui-controlgroup-controls .ui-first-child { - -webkit-border-top-left-radius: 0; - border-top-left-radius: 0; - -webkit-border-bottom-left-radius: 0; - border-bottom-left-radius: 0; -} -tfoot .ui-controlgroup.ui-controlgroup-horizontal .ui-controlgroup-controls .ui-btn.ui-last-child { - -webkit-border-top-right-radius: 0; - border-top-right-radius: 0; - border-right-width: 0; -} -tfoot .ui-controlgroup .ui-controlgroup-controls span, -tfoot .ui-controlgroup .ui-controlgroup-controls a { - border-bottom-width: 0; - border-top-width: 0; -} - -/* paging-menu records indicator height XXX not sure, don't like */ -.ui-paging-menu .ui-controlgroup-controls > span { - line-height: 1.6em; -} - -/* hide table header border */ -div.ui-table-header { - border-width: 1px; -} -/* need pseudo to add transparency over ui-bar-xxx */ -html .ui-table-header:before { - background-color: rgba(0, 0, 0, 0.04); - content: ""; - height: 39px; /* not nice */ - position: absolute; - width: 100%; -} - -/* convert to listview look */ -@media (max-width: 62em) { - - /* show or hide table header/footer */ - html table thead, - html table tfoot { - width: 100%; - display: block; - } - - table th, table td { - min-height: 0; - } - - /* accessibly hide table header if there is a hand made table-header */ - html .ui-table-header ~ table thead { - position: absolute !important; - height: 1px; - width: 1px; - overflow: hidden; - clip: rect(1px,1px,1px,1px); - } - - /* remove bottom border */ - html div.ui-table-header { - border-bottom-width: 0; - } - /* overwrite JQM icon positioning */ - html .ui-table-header .ui-controlgroup-controls .ui-btn:after { - left: .6em; - } - - /* fix pagination width */ - html .ui-field-contain tfoot .ui-controlgroup-controls { - width: 100%; - } - - /* hide all but first row and first cell */ - html table thead tr, - html table thead tr:first-child td, - html table thead tr:first-child th { - display: none; - } - html table thead tr:first-child, - html table thead tr:first-child td:first-child, - html table thead tr.first-child th:first-child { - display: block; - } - - /* center first cell */ - html table thead tr:first-child td:first-child, - html table thead tr:first-child th:first-child { - text-align: center; - } - - /* remove all cell borders */ - html body table tbody td, - html body table tbody th, - html body table thead td, - html body table thead th { - border-right-width: 0; - border-left-width: 0; - } - - /* hide background and borders */ - html table tbody tr:nth-child(odd) td, - html table tbody tr:nth-child(odd) th { - background-color: transparent; - border-right-width: 0; - border-left-width: 0; - } - html table tbody tr td, - html table tbody tr th { - border-bottom-width: 0; - } - - /* block the table, set to overflow to cover leaking cells */ - table.ui-responsive, - table.ui-responsive tbody { - display: block; - width: 100%; - } - - /* each row becomes a table, now block */ - table.ui-responsive tr { - display: block; - line-height: 1.5em; - overflow: hidden; - width: 100%; - } - - /* all cells inline-block */ - table.ui-responsive tr td, - table.ui-responsive tr th { - display: inline-block; - } - - /* first cell must be locked */ - table.ui-responsive tr td:first-child, - table.ui-responsive tr th:first-child { - display: inline-block; - width: 100%; - } - - /* link icon for table rows */ - table.ui-responsive tbody tr { - min-height: 3.9em; - max-height: 3.9em; - position: relative; - line-height: 1.1em; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - border-top: 1px solid; - padding: .4em .25em; - } - - /* bottom border on last row */ - table.ui-responsive tbody tr:last-child { - border-bottom-width: 1px; - border-bottom-style: solid; - } - - /* icon itself */ - table.ui-responsive tbody tr:after { - font-size: 1.25em; - background: transparent; - border-radius: 0; - content: ""; /* Thanks FontAwesome */ - font-family: FontAwesome; - font-style: normal; - font-weight: normal; - line-height: 1; - right: 0; - margin-top: -11px; - top: 50%; - display: block; - height: 22px; - position: absolute; - width: 22px; - } - - /* stretch first link to full width (positioned relative to <tr>) */ - html table tbody tr td:first-child a, - html table tbody tr th:first-child a { - position: absolute; - width: 100%; - top: 0; - bottom: 0; - margin-left: -.25em; - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; - } - - /* set line height on cells after first row */ - table tbody tr th:first-child ~ th { - line-height: 0; - } - - /* disactivate all links in these cells and set line-height, too */ - html table tbody tr td:first-child ~ td a, - html table tbody tr th:first-child ~ th a, - html table tbody tr td:first-child ~ td a, - html table tbody tr th:first-child ~ th a { - display: inline-block; - padding: 0; - pointer-events: none; - line-height: 1em; - max-height: 1.05em; - overflow: hidden; - } - - /* pad non-empty cells just a little */ - html table tbody tr td:first-child ~ td a:not(:empty), - html table tbody tr th:first-child ~ td a:not(:empty), - html table tbody tr td:first-child ~ th a:not(:empty), - html table tbody tr th:first-child ~ th a:not(:empty) { - padding: 0 0.1em; - } - - /* add tide */ - html table tbody tr td:first-child ~ td:not(:last-child) a:not(:empty):after, - html table tbody tr th:first-child ~ td:not(:last-child) a:not(:empty):after, - html table tbody tr td:first-child ~ th:not(:last-child) a:not(:empty):after, - html table tbody tr th:first-child ~ th:not(:last-child) a:not(:empty):after { - content: " ~ "; - } - - /* pad top row */ - html table tbody tr td:first-child, tbody tr th:first-child { - line-height: 1em; - padding-bottom: 1.25em; - } - - /* expand to fullwidth */ - tfoot .ui-controlgroup-controls { - width: 100%; - } - - /* straighten corners of first/last child */ - tfoot .ui-controlgroup-horizontal .ui-controlgroup-controls .ui-first-child { - -webkit-border-top-left-radius: 0; - border-top-left-radius: 0; - border-left-width: 0; - -webkit-border-bottom-left-radius: .325em; - border-bottom-left-radius: .325em; - } - tfoot .ui-controlgroup-horizontal .ui-controlgroup-controls .ui-last-child { - -webkit-border-top-right-radius: 0; - border-top-right-radius: 0; - border-right-width: 0; - } - tfoot .ui-controlgroup-horizontal .ui-controlgroup-controls a, - tfoot .ui-controlgroup-horizontal .ui-controlgroup-controls span { - border-bottom-width: 0; - border-top-width: 0; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - } -} - -@media (max-width: 48em) { - /* give more space to record counter and move icons to the middle */ - tfoot .ui-paging-menu.ui-controlgroup-horizontal .ui-controlgroup-controls > span { - width: 50%; - } - tfoot .ui-paging-menu.ui-controlgroup-horizontal .ui-controlgroup-controls > a.ui-btn { - width: 25%; - } - tfoot .ui-paging-menu.ui-controlgroup-horizontal .ui-controlgroup-controls > a.ui-btn-icon-left:after { - right: .5em; - } - tfoot .ui-paging-menu.ui-controlgroup-horizontal .ui-controlgroup-controls > a.ui-btn-icon-right:after { - left: .5em; - } -} - -/* - ------------------------------------------------------------------------- - ----------------------------- Textinput --------------------------------- - ------------------------------------------------------------------------- -*/ -/* remove JQM icons */ -.ui-input-search:after { - background-image: none; -} -/* pre-enhanced clear button padding */ -.ui-input-has-clear .ui-btn input { - padding-left: 0; - padding-right: 0; -} -/* multiline */ -.ui-input-has-multiline { - padding-left: 2.375em; -} -.ui-input-has-multiline textarea { - width: 100%; -} -/* correctly display loader TODO: REMOVE */ -html body .ui-input-has-clear .ui-icon-spinner:after { - font-size: 1.5em; -} -/* disable spinner href */ -html body .ui-input-has-clear .ui-icon-spinner { - cursor: default !important; - pointer-events: none; -} -/* autocomplete font-size TODO: Verify absolute works... */ -html body .ui-input-has-clear ul.ui-listview { - position: absolute; - margin: .5em 0 0 0; - width: 100%; - z-index: 501; -} -/* add side borders to results */ -html body .ui-input-has-clear ul.ui-listview li.ui-li-static, -html body .ui-input-has-clear ul.ui-listview li.ui-li-divider { - border-left-width: 1px; - border-right-width: 1px; -} -/* font size should not be set here */ -html body .ui-input-has-clear ul.ui-listview li.ui-li-static { - font-size: .85em; - cursor: pointer; -} -/* borders, TODO: no font size here, TODO: theme this! */ -html body .ui-input-has-clear ul.ui-listview li.ui-li-divider { - font-size: .7em; - color: #777; - text-align: center; -} - -/* hide background on search icon */ -html body .ui-input-has-clear .ui-listview li.ui-btn-icon-right:after { - background: 0 none; -} -/* - ------------------------------------------------------------------------- - --------------------------- Inputs:readonly ----------------------------- - ------------------------------------------------------------------------- -*/ -/* remove box-shadow on readonly elements */ -.ui-state-readonly, -.ui-state-readonly:focus, -.ui-state-readonly input.ui-focus, -.ui-state-readonly select.ui-focus { - cursor: default !important; - pointer-events: none; - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; - border: 0 none; - text-align: left; - padding-left: 0; -} -html body .ui-select .ui-state-readonly { - padding-left: .4em; - padding-top: .4em; - padding-bottom: .4em; -} -html body .ui-state-readonly:after { - content: none; -} -/* skin readonly jump, too */ -html body .ui-state-readonly ~ .ui-btn { - border: 0 none; - -moz-box-shadow: none; - -webkit-box-shadow: none; - box-shadow: none; -} -/* - ------------------------------------------------------------------------- - ----------------------------- Checkbox ---------------------------------- - ------------------------------------------------------------------------- -*/ -/* overwrite JQM logos */ -html body form .ui-icon-check:after, -html body form .ui-btn.ui-checkbox-on.ui-checkbox-on:after, -html body form .ui-btn.ui-checkbox-off:after { - background: 0 none; - border: 0; - text-shadow: none; - color: inherit; - margin: -7px 2px 0; -} -html.ui-mobile body .ui-radio-on:after, -html.ui-mobile body .ui-btn.ui-radio-on:after { - background: 0 none; - border: 0; - text-shadow: none; -} - -/* fix double borders in groups of radios/checks */ -html.ui-mobile body .ui-controlgroup .ui-checkbox label { - border-bottom-width: 0px; -} -html.ui-mobile body .ui-controlgroup .ui-checkbox:last-child label { - border-bottom-width: 1px; -} -/* - ------------------------------------------------------------------------- - ----------------------------- Select ------------------------------------ - ------------------------------------------------------------------------- -*/ -/* align with height of inputs */ -html body div.ui-select div { - height: 2em; - line-height: 2em; - padding-bottom: 0; - padding-top: 0; -} -html body div.ui-select div span { - height: 100%; - vertical-align: middle ; -} - -/* at least fit a year in a select without truncating */ -.ui-select .ui-btn > span:not(.ui-li-count) { - min-width: 3em; -} - -/* - ------------------------------------------------------------------------- - ------------------------------- Panel ----------------------------------- - ------------------------------------------------------------------------- -*/ -/* panel header height and border (hardcode height for now) */ -html .ui-panel .ui-header { - border-bottom-width: 1px; - height: 39px; -} -html .ui-panel .ui-header .ui-btn, -html .ui-panel .ui-header:hover .ui-btn { - min-height: 39px; -} - -/* we should not need to set this, JQM does it too */ -html .ui-panel .ui-panel-inner { - padding: 0; -} -/* position panel content elements */ -html .ui-panel .ui-content > .ui-listview, -html .ui-panel .ui-content > form, -html .ui-panel .ui-panel-inner .ui-panel .ui-content .ui-listview { - margin: 1em -1em auto; -} -html .ui-panel .ui-content .center, -html .ui-panel .ui-content .bottom { - padding: 0; -} -html .ui-panel .ui-content .ui-field-contain { - margin: 0; -} -/* fix font-size inside panel header/footer buttons */ -html body .ui-panel .ui-header .ui-controlgroup .ui-btn-icon-notext, -html body .ui-panel .ui-footer .ui-controlgroup .ui-btn-icon-notext { - font-size: 100%; -} -/* content sections inside panels */ -html .ui-panel .ui-panel-inner .ui-content-section { - border: 0 none; - border-radius: 0; - -moz-box-shadow: none; - -webkit-box-shadow: none; - box-shadow: none; -} -/* handle listviews inside panels */ -html body .ui-listview .ui-li-divider { - font-weight: 700; - padding: 0.5em 1em; - border-bottom-width: 0; -} -/* padding for custom icons */ -html .ui-panel .ui-listview li a, -html .ui-panel .ui-listview li div.ui-btn { - /*padding: .4em 2.75em .4em 1em;*/ - padding: .4em 2.75em !important -} -/* -html .ui-panel .ui-listview .ui-li-has-icon a { - padding-left: 2.75em; -} -*/ - -.ui-panel .ui-listview > li p { - font-size: 70%; - margin: 0; -} -.ui-panel .ui-listview .ui-li-has-thumb > img:first-child, -.ui-panel .ui-listview .ui-li-has-thumb > .ui-btn > img:first-child { - max-height: 2.5em; - max-width: 2.5em; - overflow: hidden; - padding: 0.2em 0; -} -/* form elements inside panel */ -html .ui-panel .ui-panel-inner .ui-corner-all { - -webkit-border-radius: 0.3125em; - border-radius: 0.3125em; -} -/* clean controlgroup borders (not nice, should be ui-content) */ -html .ui-panel .ui-content-section .ui-controlgroup-controls > div:first-of-type .ui-btn { - -webkit-border-bottom-left-radius: 0; - -webkit-border-bottom-right-radius: 0; - border-bottom-left-radius: 0; - border-bottom-right-radius: 0; -} -html .ui-panel .ui-content-section .ui-controlgroup-controls > div:last-of-type .ui-btn { - -webkit-border-top-left-radius: 0; - -webkit-border-top-right-radius: 0; - border-top-left-radius: 0; - border-top-right-radius: 0; - border-top-color: transparent; -} - -html .ui-panel .ui-content-section { - margin-top: 0; -} -/* XXX: not generic!!! */ -/* side by side buttons (normally this should be done by postion:abs, but requires another wrapper */ -html .ui-panel .ui-content-section .ui-controlgroup-controls > div.ui-select:last-of-type { - display: inline-block; - vertical-align: top; - width: 81.25%; /* BAD! use wrapper & position */ - padding: 0; -} -html .ui-panel .ui-content-section .ui-controlgroup-controls > div.ui-select:last-of-type ~ button { - vertical-align: top; - display: inline-block; - margin-left: -4px; /* to remove space between elements */ - -webkit-border-bottom-right-radius: .3125em; - border-bottom-right-radius: .3125em; - border-left-color: transparent; - border-top-color: transparent; - padding-bottom: .75em; -} -html .ui-panel .ui-content-section .ui-controlgroup-controls > div.ui-select:last-of-type .ui-btn { - -webkit-border-bottom-right-radius: 0; - border-bottom-right-radius: 0; -} -/* element padding */ -html .ui-panel .ui-content-section .ui-controlgroup-controls > div.ui-select .ui-btn { - padding: 4px 0; -} -/* nasty padding */ -html .ui-controlgroup-controls ~.ui-controlgroup-controls { - padding: .5em 0; -} - - -/* - ------------------------------------------------------------------------- - ------------------------------- Grid ------------------------------------ - ------------------------------------------------------------------------- -*/ - -/* overwrite copy JQM CSS */ -.ui-grid-container > ul, .ui-grid-container > ul li { - list-style: none outside none; - margin-left: 0; - margin-right: 0; - padding: 0; -} - -/* cutoff overlapping content*/ -.ui-grid-container > ul { - overflow: hidden; - margin: 0; -} - -/* box-size */ -.ui-grid-container > ul > li { - float: left; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - -ms-box-sizing: border-box; - box-sizing: border-box; -} - -/* clear out */ -.ui-grid-container > ul > li:first-child { - clear: left; -} - -/* thx: Lea Verou - http://bit.ly/1rAhqzm */ -/* grid cell width depending on number of elements, up to 10 */ - -/* override JQM */ -.ui-grid-container > li.ui-block-a, -.ui-grid-container > li.ui-block-b { - clear: none; -} - -/* base width */ -.ui-grid-container.ui-responsive > ul > li { - width: auto; -} - -/* "cell width" */ -.ui-grid-container > ul > li:first-child:nth-last-child(1) { - width: 100%; -} -.ui-grid-container > ul > li:first-child:nth-last-child(2), -.ui-grid-container > ul > li:first-child:nth-last-child(2) ~ li { - width: 50%; -} -.ui-grid-container > ul li:first-child:nth-last-child(3), -.ui-grid-container > ul li:first-child:nth-last-child(3) ~ li, -.ui-grid-container > ul.ui-grid-column-3 > li:first-child:nth-last-child(n), -.ui-grid-container > ul.ui-grid-column-3 > li:first-child:nth-last-child(n) ~ li { - width: 33.3333%; -} -.ui-grid-container > ul > li:first-child:nth-last-child(4), -.ui-grid-container > ul > li:first-child:nth-last-child(4) ~ li, -.ui-grid-container > ul.ui-grid-column-4 > li:first-child:nth-last-child(n), -.ui-grid-container > ul.ui-grid-column-4 > li:first-child:nth-last-child(n) ~ li { - width: 25%; -} -.ui-grid-container > ul > li:first-child:nth-last-child(5), -.ui-grid-container > ul > li:first-child:nth-last-child(5) ~ li, -.ui-grid-container > ul.ui-grid-column-5 > li:first-child:nth-last-child(n), -.ui-grid-container > ul.ui-grid-column-5 > li:first-child:nth-last-child(n) ~ li { - width: 20%; -} -.ui-grid-container > ul > li:first-child:nth-last-child(6), -.ui-grid-container > ul > li:first-child:nth-last-child(6) ~ li, -.ui-grid-container > ul.ui-grid-column-6 > li:first-child:nth-last-child(n), -.ui-grid-container > ul.ui-grid-column-6 > li:first-child:nth-last-child(n) ~ li { - width: 16.666%; -} -.ui-grid-container > ul > li:first-child:nth-last-child(7), -.ui-grid-container > ul > li:first-child:nth-last-child(7) ~ li, -.ui-grid-container > ul.ui-grid-column-7 > li:first-child:nth-last-child(n), -.ui-grid-container > ul.ui-grid-column-7 > li:first-child:nth-last-child(n) ~ li { - width: 14.285714286%; -} -.ui-grid-container > ul > li:first-child:nth-last-child(8), -.ui-grid-container > ul > li:first-child:nth-last-child(8) ~ li, -.ui-grid-container > ul.ui-grid-column-8 > li:first-child:nth-last-child(n), -.ui-grid-container > ul.ui-grid-column-8 > li:first-child:nth-last-child(n) ~ li { - width: 12.5%; -} -.ui-grid-container > ul > li:first-child:nth-last-child(9), -.ui-grid-container > ul > li:first-child:nth-last-child(9) ~ li, -.ui-grid-container > ul.ui-grid-column-9 > li:first-child:nth-last-child(n), -.ui-grid-container > ul.ui-grid-column-9 > li:first-child:nth-last-child(n) ~ li { - width: 11.112%; -} -.ui-grid-container > ul > li:first-child:nth-last-child(10), -.ui-grid-container > ul > li:first-child:nth-last-child(10) ~ li, -.ui-grid-container > ul.ui-grid-column-10 > li:first-child:nth-last-child(n), -.ui-grid-container > ul.ui-grid-column-10 > li:first-child:nth-last-child(n) ~ li { - width: 10%; -} - -/* rowspan */ -/* 3 cells */ -html .ui-grid-container > ul.ui-grid-column-3 > li:nth-child(-n+2).ui-grid-span-2 { - width: 66.666%; -} -/* 4 cells */ -html .ui-grid-container > ul.ui-grid-column-4 > li:nth-child(-n+3).ui-grid-span-2 { - width: 50%; -} -html .ui-grid-container > ul.ui-grid-column-4 > li:nth-child(-n+2).ui-grid-span-3 { - width: 75%; -} -/* 5 cells */ -html .ui-grid-container > ul.ui-grid-column-5 > li:nth-child(-n+4).ui-grid-span-2 { - width: 40%; -} -html .ui-grid-container > ul.ui-grid-column-5 > li:nth-child(-n+3).ui-grid-span-3 { - width: 60%; -} -html .ui-grid-container > ul.ui-grid-column-5 > li:nth-child(-n+2).ui-grid-span-4 { - width: 80%; -} -/* 6 cells */ -html .ui-grid-container > ul.ui-grid-column-6 > li:nth-child(-n+5).ui-grid-span-2 { - width: 33.33%; -} -html .ui-grid-container > ul.ui-grid-column-6 > li:nth-child(-n+4).ui-grid-span-3 { - width: 50%; -} -html .ui-grid-container > ul.ui-grid-column-6 > li:nth-child(-n+4).ui-grid-span-4 { - width: 66.66%; -} -html .ui-grid-container > ul.ui-grid-column-6 > li:nth-child(-n+4).ui-grid-span-5 { - width: 83.33%; -} -/* 7 cells */ -html .ui-grid-container > ul.ui-grid-column-7 > li:nth-child(-n+6).ui-grid-span-2 { - width: 28.571428571%; -} -html .ui-grid-container > ul.ui-grid-column-7 > li:nth-child(-n+5).ui-grid-span-3 { - width: 42.857142857%; -} -html .ui-grid-container > ul.ui-grid-column-7 > li:nth-child(-n+4).ui-grid-span-4 { - width: 57.142857142%; -} -html .ui-grid-container > ul.ui-grid-column-7 > li:nth-child(-n+3).ui-grid-span-5 { - width: 71.428571428%; -} -html .ui-grid-container > ul.ui-grid-column-7 > li:nth-child(-n+2).ui-grid-span-6 { - width: 85.714285714%; -} - -/* 8 cells */ -html .ui-grid-container > ul.ui-grid-column-8 > li:nth-child(-n+7).ui-grid-span-2 { - width: 25%; -} -html .ui-grid-container > ul.ui-grid-column-8 > li:nth-child(-n+6).ui-grid-span-3 { - width: 37.5%; -} -html .ui-grid-container > ul.ui-grid-column-8 > li:nth-child(-n+5).ui-grid-span-4 { - width: 50%; -} -html .ui-grid-container > ul.ui-grid-column-8 > li:nth-child(-n+4).ui-grid-span-5 { - width: 62.5%; -} -html .ui-grid-container > ul.ui-grid-column-8 > li:nth-child(-n+3).ui-grid-span-6 { - width: 75%; -} -html .ui-grid-container > ul.ui-grid-column-8 > li:nth-child(-n+2).ui-grid-span-7 { - width: 87.5%; -} - -/* 9 cells */ - -/* 10 cells */ - -/* responsiveness */ -@media (max-width: 32em) { - html.ui-mobile .ui-grid-container.ui-responsive > ul > li, - html.ui-mobile .ui-grid-container.ui-responsive > ul[class*="ui-grid-column"] > li { - width: 100%; - } -} - -/* spacing for grid content (3rd party), simulate a table */ -/* NOTE: assumes there will be a gadget wrapping grid cell content */ -.ui-grid-container li > div { - display: table; - border-spacing: .25em; - width: 100%; -} -.ui-grid-container li > div .ui-grid-content-wrap { - display: table-row; -} -.ui-grid-container li > div .ui-grid-content-wrap .ui-grid-content { - display: table-cell; - border-width: 1px; - border-style: solid; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -/* prevent table cells from breaking */ -.ui-grid-container li > div .ui-grid-content-wrap .ui-grid-content .ui-link { - text-overflow: ellipsis; - white-space: nowrap; - overflow: hidden; -} -/* hardcode table cell width (needs: table-layout:fixed, not IE) */ -@media (min-width: 62em) { - .ui-grid-container li > div .ui-grid-content-wrap .ui-grid-content table { - table-layout: fixed; - } - /* set width depending on number of cols... */ - .ui-grid-container li > div .ui-grid-content-wrap .ui-grid-content table tr th:first-child:nth-last-child(1), - .ui-grid-container li > div .ui-grid-content-wrap .ui-grid-content table tr td:first-child:nth-last-child(1) { - max-width: 100%; - } - .ui-grid-container li > div .ui-grid-content-wrap .ui-grid-content table tr th:first-child:nth-last-child(2), - .ui-grid-container li > div .ui-grid-content-wrap .ui-grid-content table tr th:first-child:nth-last-child(2) ~ th, - .ui-grid-container li > div .ui-grid-content-wrap .ui-grid-content table tr td:first-child:nth-last-child(2), - .ui-grid-container li > div .ui-grid-content-wrap .ui-grid-content table tr td:first-child:nth-last-child(2) ~ td { - max-width: 50%; - } - .ui-grid-container li > div .ui-grid-content-wrap .ui-grid-content table tr th:first-child:nth-last-child(3), - .ui-grid-container li > div .ui-grid-content-wrap .ui-grid-content table tr th:first-child:nth-last-child(3) ~ th, - .ui-grid-container li > div .ui-grid-content-wrap .ui-grid-content table tr td:first-child:nth-last-child(3), - .ui-grid-container li > div .ui-grid-content-wrap .ui-grid-content table tr td:first-child:nth-last-child(3) ~ td { - max-width: 33.3333%; - } - .ui-grid-container li > div .ui-grid-content-wrap .ui-grid-content table tr th:first-child:nth-last-child(4), - .ui-grid-container li > div .ui-grid-content-wrap .ui-grid-content table tr th:first-child:nth-last-child(4) ~ th, - .ui-grid-container li > div .ui-grid-content-wrap .ui-grid-content table tr td:first-child:nth-last-child(4), - .ui-grid-container li > div .ui-grid-content-wrap .ui-grid-content table tr td:first-child:nth-last-child(4) ~ td { - max-width: 25%; - } - .ui-grid-container li > div .ui-grid-content-wrap .ui-grid-content table tr th:first-child:nth-last-child(5), - .ui-grid-container li > div .ui-grid-content-wrap .ui-grid-content table tr th:first-child:nth-last-child(5) ~ th, - .ui-grid-container li > div .ui-grid-content-wrap .ui-grid-content table tr td:first-child:nth-last-child(5), - .ui-grid-container li > div .ui-grid-content-wrap .ui-grid-content table tr td:first-child:nth-last-child(5) ~ td { - max-width: 20%; - } -} - -/* set correct border-radius */ -.ui-grid-content .ui-header { - -webkit-border-bottom-left-radius: 0; - border-bottom-left-radius: 0; - -webkit-border-bottom-right-radius: 0; - border-bottom-right-radius: 0; - -webkit-border-top-left-radius: .3125em; - border-top-left-radius: .3125em; - -webkit-border-top-right-radius: .3125em; - border-top-right-radius: .3125em; -} - -/* reset border-spacing and max-width of header */ -.ui-grid-content .ui-header .ui-controlgroup { - max-width: none; - min-width: 0; - border-spacing: 0; -} -/* remove button border */ -.ui-grid-content .ui-header .ui-controlgroup-controls .ui-btn { - border: 0 none; -} -/* remove top borders on tables inside grid */ -.ui-grid-content .ui-table-inset { - -webkit-border-top-left-radius: 0; - border-top-left-radius: 0; - -webkit-border-top-right-radius: 0; - border-top-right-radius: 0; -} -/* remove margin on search field */ -.ui-grid-content .ui-field-contain { - margin: 0; -} - -/* add top border to table with header and search form in between */ -.ui-grid-content .ui-table-header ~ form ~ table { - border-top-width: 1px; -} -/* remove margin from listview and top borders */ -.ui-grid-content .ui-table-header ~ .ui-listview { - margin: 0; - -webkit-border-top-left-radius: 0; - border-top-left-radius: 0; - -webkit-border-top-right-radius: 0; - border-top-right-radius: 0; -} -.ui-grid-content .ui-table-header ~ .ui-listview > li.ui-first-child > a.ui-btn { - border-top-width: 0; -} -/* corners again */ -.ui-grid-content .ui-controlgroup-controls .ui-btn.ui-corner-all.ui-first-child { - -webkit-border-top-left-radius: .3125em; - border-top-left-radius: .3125em; - -webkit-border-bottom-left-radius: .3125em; - border-bottom-left-radius: .3125em; -} -.ui-grid-content .ui-controlgroup-controls .ui-btn.ui-corner-all.ui-last-child { - -webkit-border-top-right-radius: .3125em; - border-top-right-radius: .3125em; - -webkit-border-bottom-right-radius: .3125em; - border-bottom-right-radius: .3125em; -} - -/* ================================ */ -/* content spacing -.ui-grid-content-wrap { - position: relative; - display: block; - width: 99%; - margin: 0 0.5% 1em; -} -.ui-grid-content-wrap:before { - content: ""; - padding-top: 100%; -} -.ui-grid-content { - position: absolute; - top: 0; - left: 0; - bottom: 0; - right: 0; -} -*/ -/* ================================ */ -/* - ------------------------------------------------------------------------- - ----------------------------- Listview ---------------------------------- - ------------------------------------------------------------------------- -*/ -/* override JQM list divider px font-size */ -.ui-listview li.ui-li-divider { - font-size: inherit; -} -.ui-listview li h4.ui-li-divider { - font-size: 1em; -} -/* space between listviews */ -html .ui-listview ~ .ui-listview { - margin-top: 1em; -} -/* remove margin on headers */ -html body .ui-listview > li h1, -html body .ui-listview > li h2, -html body .ui-listview > li h3, -html body .ui-listview > li h4, -html body .ui-listview > li h5, -html body .ui-listview > li h6 { - margin: 0; -} - -/* support checkbox/radio split buttons */ -html body .ui-listview li.ui-li-has-checkbox { - padding-right: 2.25em; - border-top-right-radius: 0; - border-bottom-right-radius: 0; - -webkit-border-top-right-radius: 0; - -webkit-border-bottom-right-radius: 0; -} -html body .ui-listview .ui-radio .ui-btn.ui-radio-on:after, -html body .ui-listview .ui-checkbox .ui-btn.ui-checkbox-on:after { - background: 0 none; - border: 0 none; - height: auto; - width: auto; -} -html body .ui-listview li.ui-li-has-checkbox label { - border-left-width: 0px; - -moz-box-sizing: border-box; -} -html .ui-listview li.ui-li-has-alt a.ui-btn.ui-icon-caret-right:after, -html .ui-listview li.ui-li-has-alt a.ui-btn.ui-icon-carat-r:after { - content: ""; -} -html .ui-listview li div.ui-radio, -html .ui-listview li div.ui-checkbox { - height: 100%; - margin: 0; - padding: 0; - position: absolute; - right: 0; - top: 0; - width: 2.5em; - z-index: 2; -} -html body .ui-listview li div.ui-radio label.ui-btn, -html body .ui-listview li div.ui-checkbox label.ui-btn { - border-radius: .375em; - height: 100%; - min-height: 1em; - padding: 0; - width: auto; - border-bottom-width: 0; - border-right-width: 0; -} -html body .ui-listview li div.ui-radio, -html body .ui-listview li div.ui-radio label.ui-btn, -html body .ui-listview li div.ui-checkbox, -html body .ui-listview li div.ui-checkbox label.ui-btn { - -moz-box-shadow: none; - -webkit-box-shadow: none; - box-shadow: none; - -webkit-border-radius: 0; - border-radius: 0; -} -html body .ui-listview li.ui-first-child div.ui-radio, -html body .ui-listview li.ui-first-child div.ui-radio label.ui-btn, -html body .ui-listview li.ui-first-child div.ui-checkbox, -html body .ui-listview li.ui-first-child div.ui-checkbox label.ui-btn { - -webkit-border-top-right-radius: .375em; - border-top-right-radius: .375em; -} -html body .ui-listview li.ui-last-child div.ui-radio, -html body .ui-listview li.ui-last-child div.ui-radio label, -html body .ui-listview li.ui-last-child div.ui-checkbox, -html body .ui-listview li.ui-last-child div.ui-checkbox label { - -webkit-border-bottom-right-radius: .375em; - border-bottom-right-radius: .375em; - border-bottom-width: 1px; - margin-bottom: -1px; -} -/* custom icons */ -.ui-listview li span.ui-li-icon-custom { - bottom: 0; - -moz-box-shadow: none; - -webkit-box-shadow: none; - box-shadow: none; - font-size: 1.2em; - height: 100%; - left: 0.25em; - line-height: 1em; - margin: 0; - max-height: 80px; - max-width: 80px; - position: absolute; - text-align: center; - width: 22px; - top: 29%; /* no friend... */ -} -.ui-listview li span.ui-li-icon-custom:after { - background: none repeat scroll 0 center transparent; -} - -/* color even odd */ -html .ui-listview li:nth-child(even), -html .ui-listview li:nth-child(even) > .ui-btn { - background-color: #fff; - background-color: rgba(0,0,0,0); -} - -/* fix relation string field background transparent error */ -html .ui-listview li.ui-autocomplete ~ li { - background-color: white; -} - -/* - ------------------------------------------------------------------------- - ----------------------------- Controlgroup ------------------------------ - ------------------------------------------------------------------------- -*/ - -/* fix button font-size */ -html body .ui-header .ui-controlgroup .ui-btn-icon-notext, -html body .ui-footer .ui-controlgroup .ui-btn-icon-notext { - font-size: 100%; -} -/* search tag list needs to inline controlgroups */ -.ui-tag-list .ui-controlgroup { - display: inline-block; - vertical-align: top; -} -/* need to overwrite */ -html.ui-mobile head + body .ui-field-contain .ui-input-text .ui-tag-list > .ui-controlgroup { - width: auto; -} -/* set padding if text and notext controlgroups are combined */ -html body .ui-controlgroup-horizontal .ui-btn ~ .ui-btn-icon-notext { - padding-left: .2em; - padding-right: .2em; -} -/* set all paddings */ -html body .ui-tag-list .ui-controlgroup-horizontal .ui-btn { - font-size: .85em; - padding-top: .4em; - padding-bottom: .4em; -} -/*inset tag list */ -html body .ui-tag-list-inset { - position: absolute; - top: 0; - right: 0; - white-space: nowrap; - overflow: hidden; -} -/* indent if there is clear button */ -html body .ui-input-has-clear .ui-tag-list-inset { - right: 2em; -} -html body .ui-tag-list-inset .ui-controlgroup-horizontal .ui-controlgroup-controls { - margin-top: .2em; - margin-bottom: .2em; - margin-right: .2em; - width: 100%; -} -html body .ui-tag-list-inset .ui-controlgroup-horizontal .ui-controlgroup-controls .ui-btn { - font-size: .75em; - border-right-width: 1px; -} -/* fix size in tag XXX: remove font-size property here */ -html body .ui-tag-list-inset .ui-controlgroup-horizontal .ui-controlgroup-controls .ui-btn span { - font-size: 100%; -} -/* position input so events can be detected, does not work with label for unknown reason */ -/* TODO not sure if this is so smart*/ -html body .ui-tag-list-inset .ui-controlgroup-horizontal .ui-checkbox input { - top: 0; - left: 9px; - padding: 0; - z-index: 505; -} -html body .ui-tag-list-inset .ui-controlgroup-horizontal .ui-checkbox label { - cursor: pointer; -} -html body .ui-tag-list-inset .ui-controlgroup-horizontal .ui-checkbox .ui-btn-active { - text-shadow: none; - color: black; -} - -/* - ------------------------------------------------------------------------- - -------------------------------- Button --------------------------------- - ------------------------------------------------------------------------- -*/ -/* fix text-indent when trying to use custom icons on iconpos-notext buttons */ -.ui-btn-icon-notext:after { - text-indent: 0; -} -/* set icon dimensions */ -.ui-btn-icon-left:after, -.ui-btn-icon-right:after { - width: auto; - height: auto; -} - -/* - ------------------------------------------------------------------------- - ---------------------------- Listview/Cards ----------------------------- - ------------------------------------------------------------------------- -*/ - -/* overwrite JQM font-size */ -.ui-card-deck > li p { - font-size: 100%; - overflow: hidden; - text-overflow: ellipsis; - white-space: pre-line; - height: 2.6em; /* because JQM sets line-height to 1.3em and we need 2 lines*/ -} - -/* center and override inset in case it is set */ -.ui-card-deck.ui-listview-inset { - margin: 0 -1em; - border-width: 0; - -moz-box-shadow: none; - -webkit-box-shadow: none; - box-shadow: none; - -webkit-border-radius: 0; - border-radius: 0; -} - -/* set card-deck icon corners on small screens */ -.ui-card-deck > .ui-first-child .ui-icon-custom { - -webkit-border-top-left-radius: inherit; - border-top-left-radius: inherit; -} -.ui-card-deck > .ui-last-child .ui-icon-custom { - -webkit-border-bottom-left-radius: inherit; - border-bottom-left-radius: inherit; -} - -/* overrule list item padding on cards */ -.ui-card-deck .ui-li-static, -.ui-card-deck li > .ui-btn { - padding-top: 0; - padding-bottom: 0; - -webkit-box-shadow: 0px 3px 4px #aaa; - -moz-box-shadow: 0px 3px 4px #aaa; - box-shadow: 0px 3px 4px #aaa; -} -/* override padding left (needs more specifity for JQM) */ -ul.ui-card-deck > .ui-li-has-icon > .ui-btn, -ul.ui-card-deck > .ui-li-static.ui-li-has-icon { - padding-left: 5em; -} - -/* set card-deck icon dimensions on small screens */ -ul.ui-card-deck .ui-li-has-icon.ui-li-static .ui-icon-custom, -ul.ui-card-deck .ui-li-has-icon > .ui-btn .ui-icon-custom { - height: 100%; - top: 0; - left: 0; - max-height: 10em; /* doesn't work without hardcoding a value somewhere */ - min-height: 10em; - line-height: 8em; - max-width: 5em; - width: 5em; - position: absolute; - text-align: center; - vertical-align: middle; -} - -/* double borders */ -ul.ui-card-deck .ui-li-has-icon.ui-li-static .ui-icon-custom, -ul.ui-card-deck .ui-li-has-icon > .ui-btn .ui-icon-custom { - border-right: 1px solid rgb(64, 0, 0); /* IE8 */ - border-right: 1px solid rgba(0, 0, 0, 0.25) -} - -/* icon size in regular listview */ -ul.ui-card-deck li > .ui-btn .ui-icon-custom:after, -ul.ui-card-deck .ui-li-static .ui-icon-custom:after { - font-size: 200%; - border-radius: 1em; - padding: 0.25em; - vertical-align: middle; -} - -/* set header inside cards */ -.ui-card-deck .ui-card-title { - font-weight: 700; - letter-spacing: 1px; - margin: 0; - padding: 0.75em; - text-transform: uppercase; -} - -/* and text inside cards */ -.ui-card-deck .ui-card-text { - margin: 0; - padding: 0 0.75em; - text-align: left; -} - -/* push button menu to the right */ -.ui-card-deck li .ui-controlgroup { - text-align: right; -} - - -/* 3 column layout. Tiles 250x250 pixels incl. margin at the breakpoint. */ -@media (min-width: 48em) { - - /* pad deck */ - ul.ui-card-deck { - padding: .5em 0; - } - - /* single item needs bottom corners on small screens */ - ul.ui-card-deck > .ui-first-child:only-child { - -webkit-border-bottom-right-radius: .3125em; - -webkit-border-bottom-left-radius: .3125em; - border-bottom-right-radius: .3125em; - border-bottom-left-radius: .3125em; - } - - /* reset inset */ - ul.ui-card-deck.ui-listview-inset { - margin: 0 auto; - -webkit-border-radius: .3125em; - border-radius: .3125em; - } - - /* box shadow cards (not list!) */ - ul.ui-card-deck .ui-li-static, - ul.ui-card-deck > li .ui-btn { - -moz-box-shadow: 0 1px 3px 0 #aaa; - -webkit-box-shadow: 0 1px 3px 0 #aaa; - box-shadow: 0 1px 3px 0 #aaa; - } - - /* card deck header corners */ - .ui-card-deck .ui-li-custom-icon { - -webkit-border-bottom-right-radius: 0; - -webkit-border-bottom-left-radius: 0; - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; - } - - /* set card dimensions */ - .ui-card-deck > .ui-li-static, - .ui-card-deck > li > .ui-btn { - float: left; - width: 30.9333%; - height: 14.5em; - margin: .5625em 1.2%; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - -ms-box-sizing: border-box; - box-sizing: border-box; - } - - /* set padding */ - ul.ui-card-deck > .ui-li-has-icon > .ui-btn, - ul.ui-card-deck > .ui-li-static.ui-li-has-icon{ - padding: 0; - } - - /* icon positioning */ - ul.ui-card-deck .ui-li-has-icon.ui-li-static .ui-icon-custom, - ul.ui-card-deck .ui-li-has-icon > .ui-btn .ui-icon-custom { - display: inline-block; - line-height: 4em; - max-height: 4em; - max-width: initial; - min-height: 4em; - min-width: initial; - position: static; - width: 100%; - } - - /* double borders */ - ul.ui-card-deck .ui-li-has-icon.ui-li-static .ui-icon-custom, - ul.ui-card-deck .ui-li-has-icon > .ui-btn .ui-icon-custom { - border-right: none; - border-bottom: 1px solid rgb(232, 232, 232); /* IE8 */ - border-bottom: 1px solid rgba(232, 232, 232, 0.5); - } - - /* bottom corners on all li */ - ul.ui-card-deck li > .ui-btn, - ul.ui-card-deck .ui-li-static { - height: 100%; - border-bottom-width: 1px; - } - - /* Make all list items and anchors inherit the border-radius from the UL. */ - ul.ui-card-deck li, - ul.ui-card-deck li .ui-btn, - ul.ui-card-deck .ui-li-thumb, - ul.ui-card-deck .ui-li-icon-custom { - -webkit-border-radius: inherit; - border-radius: inherit; - } - - /* clear bottom corners */ - ul.ui-card-deck > .ui-last-child .ui-icon-custom { - -webkit-border-bottom-left-radius: 0; - border-bottom-left-radius: 0; - } - ul.ui-card-deck > .ui-first-child .ui-icon-custom { - -webkit-border-bottom-right-radius: 0; - border-bottom-right-radius: 0; - } - - /* re-scale images */ - ul.ui-card-deck li.ui-li-has-thumb .ui-li-thumb, - ul.ui-card-deck li.ui-li-has-icon .ui-li-icon-custom { - height: auto; - max-width: 100%; - max-height: none; - } -} - -/* 4 column layout. */ -@media (min-width: 62em) { - - /* prevent over-stretching cells 1200px by locking deck */ - ul.ui-card-deck { - max-width: 75em; - max-width: 80vw; - margin: 0 auto; - clear: both; - } - - /* max-width */ - .ui-card-deck > .ui-li-static, - .ui-card-deck > li > .ui-btn { - max-width: 23%; - margin: .625em 1%; - } -} - -/* - ------------------------------------------------------------------------- - ---------------------------- HEADER/FOOTER ------------------------------ - ------------------------------------------------------------------------- -*/ - -/* NOTE: height of header will only be set through title (font + padding)! */ -/* NOTE: width-% does not work inside clear:left, only px */ - -/* padding to match font-size (= .9em) */ -html .ui-header .ui-title, -html .ui-footer .ui-title { - padding: 0.7em 0; - margin: 0 45px; -} -/* logo dimensions XXX: remove? */ -html .ui-header img.ui-title { - max-height: 24px; - padding: 0.5em 1.7em; - margin: 0 30%; -} - -/* forms in controlgroup must behave like a buttons */ -.ui-controlgroup-horizontal .ui-controlgroup-controls > form { - float: left; - clear: none; -} - -/* only-child forms inside controlgroups must stretch to full width, so... */ -.ui-controlgroup-horizontal .ui-controlgroup-controls > form:only-child { - float: none; -} - -/* all controlgroups should at least be 45px, large screen 8% (below) */ -.ui-header .ui-controlgroup-horizontal { - min-width: 45px; -} - -/* controlgroup dimensions (height used to be 100%) */ -.ui-header .ui-controlgroup, .ui-panel .ui-header .ui-controlgroup { - max-width: none; - height: inherit; -} -.ui-header .ui-controlgroup .ui-controlgroup-controls, -.ui-panel .ui-header .ui-controlgroup .ui-controlgroup-controls { - height: inherit; - width: 100%; - min-width: inherit; -} - -/* sizing for all header buttons */ -.ui-header .ui-controlgroup-horizontal .ui-controlgroup-controls button.ui-btn, -.ui-header .ui-controlgroup-horizontal .ui-controlgroup-controls a.ui-btn, -.ui-header .ui-controlgroup-controls .ui-btn-icon-notext { - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - min-width: inherit; -} -/* panel button only stretches using 100% */ -.ui-panel .ui-header .ui-controlgroup-controls button.ui-btn:only-child, -.ui-panel .ui-header .ui-controlgroup-controls a.ui-btn:only-child, -.ui-panel .ui-header .ui-controlgroup-controls .ui-btn-icon-notext:only-child { - width: 100% -} - -/* breadcrumb button inside title (depends on font size of title) */ -html .ui-title .ui-btn[class*="ui-icon-"]:after, -html .ui-title .ui-btn[class*="ui-icon-"]:after { - font-size: 1.15em; -} - -/* breadcrumb button dimensions, not sure negative margin is good with padding */ -html .ui-header .ui-title .ui-btn { - display: block; - margin: -0.9em 0; - max-height: 3.1em; - border: 0 none; -} - -/* pages with subheader increase padding on ui-content */ -.ui-has-subheader { - padding-top: 4.5em; -} - -/* inset shadow for subheader */ -html body.ui-mobile-viewport .ui-subheader, -html body .ui-mobile-viewport .ui-subheader { - -webkit-box-shadow: inset 0 1px 3px rgba(0,0,0,.2); - -moz-box-shadow: inset 0 1px 3px rgba(0,0,0,.2); - box-shadow: inset 0 1px 3px rgba(0,0,0,.2); -} -html body.ui-mobile-viewport .ui-subheader, -html body .ui-mobile-viewport .ui-subheader { - border-top-color: rgb(115, 115, 115); /* IE8 */ - border-top-color: rgba(0, 0, 0, .25); - border-top-width: 1px; - border-top-style: solid; -} - - -/* remove border on header */ -.ui-header { - border-width: 0; -} - -/* double borders header */ -html body .ui-header .ui-btn-left .ui-controlgroup-controls .ui-btn { - border-right: 1px solid rgb(115, 115, 115); /* IE8 */ - border-right: 1px solid rgba(0, 0, 0, 0.55); -} -html body .ui-header .ui-btn-left .ui-controlgroup-controls .ui-btn:before { - right: 0; - border-right: 1px solid rgb(232, 232, 232); /* IE8 */ - border-right: 1px solid rgba(232, 232, 232, 0.5); -} -html body .ui-header .ui-btn-right .ui-controlgroup-controls .ui-btn, -html body .ui-subheader.ui-navbar .ui-btn { - border-left: 1px solid rgb(115, 115, 115); /* IE8 */ - border-left: 1px solid rgba(0, 0, 0, 0.55); -} -html body .ui-header .ui-btn-right .ui-controlgroup-controls .ui-btn:before, -html body .ui-subheader.ui-navbar .ui-btn:before { - left: 0; - border-left: 1px solid rgb(232, 232, 232); /* IE8 */ - border-left: 1px solid rgba(232, 232, 232, 0.5); -} -/* clear first cell left border */ -html body .ui-navbar ul li .ui-btn.ui-first-child, -html body .ui-navbar ul li .ui-btn.ui-first-child:before { - border-left-width: 0; -} -html body .ui-header .ui-btn-left .ui-controlgroup-controls .ui-first-child, -html body .ui-header .ui-btn-left .ui-controlgroup-controls .ui-first-child:before { - border-left-width: 0; -} - -/* position */ -.ui-header .ui-btn-left, .ui-header .ui-btn-right { - bottom: 0; - position: absolute; - top: 0; -} -.ui-header .ui-btn-left { - left: 0; -} -.ui-header .ui-btn-right { - right: 0; -} - -/* overwrite JQM icon position */ -.ui-btn-icon-notext:after, -.ui-btn-icon-left:after, -.ui-btn-icon-right:after { - margin-top: -8px; -} - -/* overwrite JQM icons and clear :before for double border */ -.ui-header .ui-btn:before { - content: ""; - height: 100%; - position: absolute; - width: 0; - bottom: 0; - top: 0; -} - -/* remove outside borders of first and last button > Hard to overwrite JQM */ -html .ui-header .ui-btn-left .ui-btn.ui-last-child { - border-left-width: 0; -} -html .ui-header .ui-btn-right .ui-controlgroup-controls .ui-btn.ui-last-child { - border-right-width: 0; -} - -/* set button dimensions */ -html .ui-header .ui-btn { - line-height: 3.1em; /* ~ 40px = what's needed */ - padding-bottom: 0; - padding-top: 0; - border-top: 0; - border-bottom: 0; -} - -/* hide button text on small screens, center icon */ -.responsive.ui-btn, -.ui-responsive.ui-btn { - text-indent: -9999px; -} -.responsive.ui-btn:after, -.ui-responsive.ui-btn:after { - text-indent: 0; -} - -.ui-header .responsive .ui-btn:after, -.ui-header .responsive.ui-btn:after { - left: .8em; -} - -/* subheader reset formatting for subheader buttons */ -.ui-header .ui-subheader .ui-btn.ui-btn-icon-top { - line-height: 3.25em; - padding-top: 1.5em; -} - -@media (max-width: 32em) { - /* fix icon size on title (depends on font size of title) XXX move up */ - html .ui-title .ui-btn[class*="ui-icon-"]:after, - html .ui-title .ui-btn[class*="ui-icon-"]:after { - font-size: 1.35em; - } -} - -/* reset on larger screens */ -@media (min-width: 48em) { - - - /* hard locked margin for single button (Thierry request) */ - .ui-page > div > .ui-header .ui-controlgroup-horizontal { - min-width: 8%; - } - .ui-page > div > .ui-header .ui-controlgroup-horizontal + .ui-title { - margin: 0 8%; - } - - /* stretch single button */ - .ui-page > div > .ui-header .ui-controlgroup-horizontal .ui-controlgroup-controls button.ui-btn:only-child, - .ui-page > div > .ui-header .ui-controlgroup-horizontal .ui-controlgroup-controls a.ui-btn:only-child, - .ui-page > div > .ui-header .ui-controlgroup-controls .ui-btn-icon-notext:only-child { - max-width: 100%; - min-width: 100%; - } - - html .ui-header img.ui-title { - margin: 0 30%; - } - - /* unset for everywhere else a header is used.*/ - html body div.ui-table-header div.ui-controlgroup { - max-width: none; - min-width: 0; - } - - .responsive.ui-btn:after, - .ui-header .responsive.ui-btn-icon-left:after, - .ui-footer .responsive.ui-btn-icon-left:after, - .responsive.ui-btn, - .ui-responsive.ui-btn { - text-indent: 0; - } -} - - - -/* --------------------------- gadget_themes.css -------------------------- */ - -/* - ========================================================================== - ============================== Themes ==================================== - ========================================================================== -*/ - -/* - > JQM Default: > http://demos.jquerymobile.com/1.4.3/theme-default/ - - > NOTE all ui-page-theme-[x] have been removed and overwritten! - - > Polymere suggestion: Primary + Accent (3-4 colors), plus dark, light - > http://www.google.com/design/spec/style/color.html#color-ui-color-palette - - > Create color theme based on uploaded image: > http://pictaculous.com/ - - > Color Converter rgba > rgb > http://yolijn.com/convert-rgba-to-rgb - - 1. Primary (JQM: a) - Main: #0E81C2 - Dark: #085078 - Light: #85D8CE - Text: #f8fff3 - - 2. Accent (JQM: b) - Main: #ffff00 - Dark: #f57f17 - Light: #ffff8d - Text: #757575 - - 3. Light (JQM: c) - Main: #eeeeee | #e0e0e0 | - Dark: #aaaaaa | #f0f0f0 | #777777 - Light: #ffffff | #f5f5f5 | - Text: #444444 | #757575 | #222222 - - 4. Dark (JQM: d) - Main: #444444 - Dark: #25292b - Light: #888888 - Text: #ffffff - - -*/ -/* ============================= A (Primary) ============================== */ -/* Page background (needs manual setting on body!) */ -html head + body.ui-overlay-a, -html head + body.ui-overlay-a .ui-page, -html head + body.ui-overlay-a .ui-page .ui-panel-wrapper{ - background-color: rgb(255, 255, 255); -} - -/* Text Color */ -html .ui-body-a, -html .ui-bar-a, -html .ui-btn-a, -html .ui-bar-a .ui-body-inherit, -html .ui-body-a .ui-link, -html .ui-body-a .ui-body-inherit, -html .ui-bar-a .ui-bar-inherit, -html .ui-body-a .ui-bar-inherit, -html .ui-bar-a .ui-btn-inherit, -html .ui-body-a .ui-btn-inherit, -html body .ui-group-theme-a .ui-bar-inherit, -html body .ui-group-theme-a .ui-body-inherit, -html body .ui-group-theme-a .ui-btn-inherit, -html head + body .ui-body-a tbody tr td a, -html head + body .ui-body-a tbody tr th a { - color: #f8fff3; -} - -/* === CUSTOM === */ -/* Constrast labels in light color */ -html .ui-body-a label, -html .ui-bar-a label, -html .ui-btn-a label, -html .ui-body-a thead th, -html .ui-bar-a thead th, -html.ui-mobile .ui-bar-a .ui-override-theme.ui-btn, -html.ui-mobile .ui-bar-a .ui-override-theme.ui-title { - color: #085078; -} -/* Custom Icon Color and background opacity */ -html .ui-body-a.ui-icon-custom:after, -html .ui-bar-a .ui-icon-custom.ui-body-inherit:after, -html .ui-body-a .ui-icon-custom.ui-body-inherit:after, -html .ui-group-theme-a .ui-icon-custom.ui-body-inherit:after, -html .ui-icon-custom.ui-body-a:after { - background-color: rgba(255, 255, 255, 0.25); - color: #f8fff3; -} - -/* No borders on custom icon elements */ -html .ui-body-a.ui-icon-custom, -html .ui-bar-a .ui-icon-custom.ui-body-inherit, -html .ui-body-a .ui-icon-custom.ui-body-inherit, -html .ui-group-theme-a .ui-icon-custom.ui-body-inherit { - border-width: 0; -} -/* === CUSTOM END === */ - -/* Bar */ -html .ui-body-a, -html .ui-bar-a, -html .ui-bar-a h1, -html .ui-bar-a .ui-bar-inherit, -html .ui-bar-a .ui-body-inherit, -html .ui-body-a .ui-bar-inherit, -html .ui-body-a .ui-body-inherit, -html body .ui-group-theme-a .ui-bar-inherit, -html body .ui-group-theme-a .ui-body-inherit { - text-shadow: none; - border-color: rgb(14, 129, 124); - border-color: rgba(255, 255, 255, .4); - font-weight: normal; -} - -/* Bar Background = Solid/Dark (Contrast) */ -html .ui-bar-a, -html .ui-bar-a .ui-bar-inherit, -html body .ui-body-a .ui-bar-inherit, -html body .ui-group-theme-a .ui-bar-inherit { - background-color: #085078; -} - -/* Body Background Solid/Main > also used for button! */ -html .ui-body-a:not(.ui-loader), -html .ui-btn-a, -html body .ui-bar-a.ui-btn-a, /* XXX not good */ -html .ui-bar-a .ui-body-inherit, -html .ui-bar-a .ui-btn-inherit, -html .ui-body-a .ui-body-inherit, /* panel background */ -html body .ui-body-a .ui-btn-inherit, -html body .ui-group-theme-a .ui-body-inherit, -html body .ui-group-theme-a .ui-btn-inherit { - background-color: #0E81C2; -} - -/* Body Background Linear (add .ui-linear) */ -html .ui-body-a.ui-linear, -html .ui-bar-a .ui-body-inherit.ui-linear, -html .ui-body-a .ui-body-inherit.ui-linear, /* panel background */ -html body .ui-group-theme-a .ui-body-inherit.ui-linear { - background: #0E81C2; - background-image: -webkit-gradient(linear, left top, left bottom, from(#085078), to(#85D8CE)); - background-image: -webkit-linear-gradient(#085078, #85D8CE); - background-image: -moz-linear-gradient(#085078, #85D8CE); - background-image: -ms-linear-gradient(#085078, #85D8CE); - background-image: -o-linear-gradient(#085078, #85D8CE); - background-image: linear-gradient(#085078, #85D8CE); -} - -/* Body background radial (add .ui-radial) */ -html .ui-body-a.ui-radial, -html .ui-bar-a .ui-body-inherit.ui-radial, -html .ui-body-a .ui-body-inherit.ui-radial, /* panel background */ -html body .ui-group-theme-a .ui-body-inherit.ui-radial { - background-color: #0E81C2; - background: -webkit-radial-gradient(100% 100%, ellipse farthest-side, #f8fff3 10%, #85D8CE 50%, #085078 120%) repeat scroll 0 0 rgba(0, 0, 0, 0); - background: radial-gradient(ellipse farthest-side at 100% 100% , #f8fff3 10%, #85D8CE 50%, #085078 120%) repeat scroll 0 0 rgba(0, 0, 0, 0); - background: -moz-radial-gradient(ellipse farthest-side at 100% 100% , #f8fff3 10%, #85D8CE 50%, #085078 120%) repeat scroll 0 0 rgba(0, 0, 0, 0); - background: -ms-radial-gradient(ellipse farthest-side at 100% 100% , #f8fff3 10%, #85D8CE 50%, #085078 120%) repeat scroll 0 0 rgba(0, 0, 0, 0); - background: -o-radial-gradient(ellipse farthest-side at 100% 100% , #f8fff3 10%, #85D8CE 50%, #085078 120%) repeat scroll 0 0 rgba(0, 0, 0, 0); - -} - -/* Button on background */ -html .ui-btn.ui-btn-a, -html .ui-bar-a .ui-btn, -html .ui-body-a .ui-btn, -html .ui-group-theme-a .ui-btn, -html .ui-group-theme-a .ui-btn.ui-btn-a, - -/* Table row */ -html .ui-body-a tbody tr, - -/* Button Visited */ -html head + body .ui-bar-a .ui-btn:visited, -html head + body .ui-body-a .ui-btn:visited, -html head + body .ui-btn.ui-btn-a:visited, -html head + body .ui-group-theme-a .ui-btn:visited, -html head + body .ui-group-theme-a .ui-btn.ui-btn-a:visited, - -/* Link Visited|Active|Hover..... */ -html head + body .ui-bar-a .ui-link:visited, -html head + body .ui-body-a .ui-link:visited, -html head + body .ui-group-theme-a .ui-link:visited, - -html head + body .ui-bar-a .ui-link:active, -html head + body .ui-body-a .ui-link:active, -html head + body .ui-group-theme-a .ui-link:active, - -html head + body .ui-bar-a .ui-link:hover, -html head + body .ui-body-a .ui-link:hover, -html head + body .ui-group-theme-a .ui-link:hover { - background: none repeat scroll 0 0 transparent; - border-color: rgb(14, 129, 124); - border-color: rgba(255, 255, 255, .4); - color: #f8fff3; - text-shadow: none; -} - -/* Hover */ -html head + body .ui-bar-a .ui-btn:hover, -html head + body .ui-body-a .ui-btn:hover, -html head + body .ui-btn.ui-btn-a:hover, -html head + body .ui-group-theme-a .ui-btn:hover, -html head + body .ui-group-theme-a .ui-btn.ui-btn-a:hover, -html head + body .ui-group-theme-a .ui-btn.ui-btn-a:active, - -/* Button Active (JQM overwrite requires double classes)*/ -html head + body .ui-bar-a .ui-btn:active, -html head + body .ui-body-a .ui-btn:active, -html head + body .ui-btn.ui-btn-a:active, -html head + body .ui-group-theme-a .ui-btn:active, -html head + body .ui-group-theme-a .ui-btn-a:active, - -html head + body .ui-bar-a .ui-btn.ui-btn-active, -html head + body .ui-body-a .ui-btn.ui-btn-active, -html head + body .ui-btn.ui-btn-a.ui-btn-active, -html head + body .ui-group-theme-a .ui-btn-active, -html head + body .ui-group-theme-a .ui-btn-a.ui-btn-active { - background-color: #085078; - background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#85D8CE), to(#0E81C2)); - background: -webkit-linear-gradient(bottom, #85D8CE, #0E81C2); - background: linear-gradient(bottom, #85D8CE, #0E81C2); - background: -moz-linear-gradient(bottom, #85D8CE, #0E81C2); - background: -o-linear-gradient(bottom, #85D8CE, #0E81C2); - background: -ms-linear-gradient(bottom, #85D8CE, #0E81C2); - border-color: rgb(14, 129, 124); - border-color: rgba(255, 255, 255, .4); - color: #f8fff3; - text-shadow: none; -} - - -/* ============================= B (Accent) ============================= */ - -/* Accent > needs a lot of specificity */ -html.ui-mobile body.ui-mobile-viewport .ui-accent { - color: #f57f17; - font-weight: 700; - text-transform: uppercase; - border: 0 none; -} - -/* Table row */ -html head + body table tbody tr:hover, - -/* Save button XXX: should not depend on icon!*/ -html body .ui-header .ui-icon-save, -html body .ui-header .ui-icon-exclamation, -html body .ui-header .ui-icon-warning { - background: none repeat scroll 0 0 #e4ebf1; - border-color: rgba(0, 0, 0, 0.3); - color: #777; - text-shadow: none; -} - -/* Focus */ - -/* Button Focus */ -html body .ui-btn:focus, -html body .ui-focus { - box-shadow: 0 0 12px #add8e6; -} - - -/* ============================= C (Light) ============================== */ - -/* Page background (needs manual setting on body!) */ -html head + body.ui-overlay-c, -html head + body.ui-overlay-c .ui-page, -html head + body.ui-overlay-c .ui-page .ui-panel-wrapper{ - background-color: rgb(241, 241, 241); -} - -/* Text Color */ -html .ui-body-c, -html .ui-btn-c, -html .ui-bar-c, -html .ui-body-c .ui-link, -html .ui-bar-c .ui-body-inherit, -html .ui-bar-c .ui-btn-inherit, -html .ui-body-c .ui-body-inherit, -html .ui-bar-c .ui-bar-inherit, -html .ui-body-c .ui-btn-inherit, -html .ui-body-c .ui-bar-inherit, -html body .ui-group-theme-c .ui-btn-inherit, -html body .ui-group-theme-c .ui-bar-inherit, -html body .ui-group-theme-c .ui-body-inherit, -html head + body .ui-body-c tbody tr td a, -html head + body .ui-body-c tbody tr th a { - color: #222222; -} - - -/* === CUSTOM === */ -/* Constrast labels in light color */ -html .ui-body-c label, -html .ui-bar-c label, -html .ui-btn-c label, -html .ui-body-c thead th, -html .ui-bar-c thead th, -html.ui-mobile .ui-bar-c .ui-override-theme.ui-btn, -html.ui-mobile .ui-bar-c .ui-override-theme.ui-title { - color: #777777; -} -/* Custom Icon Color and background opacity */ -html .ui-body-c.ui-icon-custom:after, -html .ui-bar-c .ui-icon-custom.ui-body-inherit:after, -html .ui-body-c .ui-icon-custom.ui-body-inherit:after, -html .ui-group-theme-c .ui-icon-custom.ui-body-inherit:after, -html .ui-icon-custom.ui-body-c:after { - background-color: rgba(0, 0, 0, 0.15); - color: #222222; -} - -/* No borders on custom icon elements */ -html .ui-body-c.ui-icon-custom, -html .ui-bar-c .ui-icon-custom.ui-body-inherit, -html .ui-body-c .ui-icon-custom.ui-body-inherit, -html .ui-group-theme-c .ui-icon-custom.ui-body-inherit { - border-width: 0; -} -/* === CUSTOM END === */ - -/* Bar */ -html .ui-body-c, -html .ui-bar-c, -html .ui-bar-c h1, -html .ui-bar-c .ui-bar-inherit, -html .ui-bar-c .ui-body-inherit, -html .ui-body-c .ui-bar-inherit, -html .ui-body-c .ui-body-inherit, -html body .ui-group-theme-c .ui-bar-inherit, -html body .ui-group-theme-c .ui-body-inherit { - text-shadow: none; - border-color: rgb(0, 0, 0); - border-color: rgba(0, 0, 0, 0.3); - font-weight: normal; -} - -/* Bar Background = Solid/Dark (Contrast) */ -html .ui-bar-c, -html .ui-bar-c .ui-bar-inherit, -html body .ui-body-c .ui-bar-inherit, -html body .ui-group-theme-c .ui-bar-inherit { - background-color: #f0f0f0; -} - -/* Body Background Solid/Main - also used for buttons */ -html .ui-body-c:not(.ui-loader), -html .ui-btn-c, -html body .ui-bar-c.ui-btn-c, /* XXX not good */ -html .ui-bar-c .ui-body-inherit, -html .ui-bar-c .ui-btn-inherit, -html .ui-body-c .ui-body-inherit, /* panel background */ -html body .ui-body-c .ui-btn-inherit, -html body .ui-group-theme-c .ui-body-inherit, -html body .ui-group-theme-c .ui-btn-inherit { - background-color: #ffffff; -} - -/* Body Background Linear (add .ui-linear) */ -html .ui-body-c.ui-linear, -html .ui-bar-c .ui-body-inherit.ui-linear, -html .ui-body-c .ui-body-inherit.ui-linear, /* panel background */ -html body .ui-group-theme-c .ui-body-inherit.ui-linear { - background: #e0e0e0; - background-image: -webkit-gradient(linear, left top, left bottom, from(#ffffff), to(#e0e0e0)); - background-image: -webkit-linear-gradient(#ffffff, #e0e0e0); - background-image: -moz-linear-gradient(#ffffff, #e0e0e0); - background-image: -ms-linear-gradient(#ffffff, #e0e0e0); - background-image: -o-linear-gradient(#ffffff, #e0e0e0); - background-image: linear-gradient(#ffffff, #e0e0e0); -} - -/* Body background radial (add .ui-radial) */ -html .ui-body-c.ui-radial, -html .ui-bar-c .ui-body-inherit.ui-radial, -html .ui-body-c .ui-body-inherit.ui-radial, /* panel background */ -html body .ui-group-theme-c .ui-body-inherit.ui-radial { - background-color: #e0e0e0; - background: -webkit-radial-gradient(100% 100%, ellipse farthest-side, #e0e0e0 10%, #eeeeee 50%, #f5f5f5 120%) repeat scroll 0 0 rgba(0, 0, 0, 0); - background: radial-gradient(ellipse farthest-side at 100% 100% , #e0e0e0 10%, #eeeeee 50%, #f5f5f5 120%) repeat scroll 0 0 rgba(0, 0, 0, 0); - background: -moz-radial-gradient(ellipse farthest-side at 100% 100% , #e0e0e0 10%, #eeeeee 50%, #f5f5f5 120%) repeat scroll 0 0 rgba(0, 0, 0, 0); - background: -ms-radial-gradient(ellipse farthest-side at 100% 100% , #e0e0e0 10%, #eeeeee 50%, #f5f5f5 120%) repeat scroll 0 0 rgba(0, 0, 0, 0); - background: -o-radial-gradient(ellipse farthest-side at 100% 100% , #e0e0e0 10%, #eeeeee 50%, #f5f5f5 120%) repeat scroll 0 0 rgba(0, 0, 0, 0); - -} - -/* Button On Background (<select>, too) */ -html .ui-btn.ui-btn-c, -html .ui-bar-c .ui-btn, -html .ui-body-c .ui-btn, -html .ui-group-theme-c .ui-btn, -html .ui-group-theme-c .ui-btn.ui-btn-c, - -/* Table Row */ -html .ui-body-c tbody tr, - -/* Button Visited */ -html head + body .ui-bar-c .ui-btn:visited, -html head + body .ui-body-c .ui-btn:visited, -html head + body .ui-btn.ui-btn-c:visited, -html head + body .ui-group-theme-c .ui-btn:visited, -html head + body .ui-group-theme-c .ui-btn.ui-btn-c:visited, - -/* Link Visited|Active|Hover..... */ -html head + body .ui-bar-c .ui-link:visited, -html head + body .ui-body-c .ui-link:visited, -html head + body .ui-group-theme-c .ui-link:visited, - -html head + body .ui-bar-c .ui-link:active, -html head + body .ui-body-c .ui-link:active, -html head + body .ui-group-theme-c .ui-link:active, - -html head + body .ui-bar-c .ui-link:hover, -html head + body .ui-body-c .ui-link:hover, -html head + body .ui-group-theme-c .ui-link:hover { - background: none repeat scroll 0 0 transparent; - color: #222222; - text-shadow: none; - border-color: rgb(0, 0, 0); - border-color: rgba(0, 0, 0, 0.3); -} - -/* Button Hover */ -html head + body .ui-bar-c .ui-btn:hover, -html head + body .ui-body-c .ui-btn:hover, -html head + body .ui-btn.ui-btn-c:hover, -html head + body .ui-group-theme-c .ui-btn:hover, -html head + body .ui-group-theme-c .ui-btn.ui-btn-c:hover, - -/* Button Active (JQM overwrite requires double classes)*/ -html head + body .ui-bar-c .ui-btn:active, -html head + body .ui-body-c .ui-btn:active, -html head + body .ui-btn.ui-btn-c:active, -html head + body .ui-group-theme-c .ui-btn:active, -html head + body .ui-group-theme-c .ui-btn-c:active - -html head + body .ui-bar-c .ui-btn.ui-btn-active, -html head + body .ui-body-c .ui-btn.ui-btn-active, -html head + body .ui-btn.ui-btn-c.ui-btn-active, -html head + body .ui-group-theme-c .ui-btn-active, -html head + body .ui-group-theme-c .ui-btn-c.ui-btn-active { - background-color: #e0e0e0; - background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#eeeeee), to(#f5f5f5)); - background: -webkit-linear-gradient(bottom, #eeeeee, #f5f5f5); - background: linear-gradient(bottom, #eeeeee, #f5f5f5); - background: -moz-linear-gradient(bottom, #eeeeee, #f5f5f5); - background: -o-linear-gradient(bottom, #eeeeee, #f5f5f5); - background: -ms-linear-gradient(bottom, #eeeeee, #f5f5f5); - color: #222222; - text-shadow: none; - border-color: rgb(0, 0, 0); - border-color: rgba(0, 0, 0, 0.5); -} - - -/* ============================= D (Dark) =============================== */ -html head + body.ui-overlay-d, -html head + body.ui-overlay-d .ui-page, -html head + body.ui-overlay-d .ui-page .ui-panel-wrapper{ - background-color: rgb(241, 241, 241); -} - - -/* Text Color */ -html .ui-body-d, -html .ui-btn-d, -html .ui-bar-d, -html .ui-body-d .ui-link, -html .ui-body-d .ui-btn-inherit, -html .ui-bar-d .ui-btn-inherit, -html .ui-bar-d .ui-bar-inherit, -html .ui-bar-d .ui-body-inherit, -html .ui-body-d .ui-bar-inherit, -html .ui-body-d .ui-body-inherit, -html body .ui-group-theme-d .ui-bar-inherit, -html body .ui-group-theme-d .ui-body-inherit, -html body .ui-group-theme-d .ui-btn-inherit, -html head + body .ui-body-d tbody tr td a, -html head + body .ui-body-d tbody tr th a { - color: #ffffff; -} -/* === CUSTOM === */ -/* Constrast labels in light color */ -html .ui-body-d label, -html .ui-bar-d label, -html .ui-btn-d label, -html .ui-body-d thead th, -html .ui-bar-d thead th, -html.ui-mobile .ui-bar-d .ui-override-theme.ui-btn, -html.ui-mobile .ui-bar-d .ui-override-theme.ui-title { - color: #444444; -} -/* Custom Icon Color and background opacity */ -html .ui-body-d.ui-icon-custom:after, -html .ui-bar-d .ui-icon-custom.ui-body-inherit:after, -html .ui-body-d .ui-icon-custom.ui-body-inherit:after, -html .ui-group-theme-d .ui-icon-custom.ui-body-inherit:after, -html .ui-icon-custom.ui-body-d:after { - background-color: rgba(255, 255, 255, 0.15); - color: #ffffff; -} - -/* No borders on custom icon elements */ -html .ui-body-d.ui-icon-custom, -html .ui-bar-d .ui-icon-custom.ui-body-inherit, -html .ui-body-d .ui-icon-custom.ui-body-inherit, -html .ui-group-theme-d .ui-icon-custom.ui-body-inherit { - border-width: 0; -} -/* === CUSTOM END === */ - -/* Bar */ -html .ui-body-d, -html .ui-bar-d, -html .ui-bar-d h1, -html .ui-bar-d .ui-body-inherit, -html .ui-bar-d .ui-bar-inherit, -html .ui-body-d .ui-body-inherit, -html .ui-body-d .ui-bar-inherit, -html body .ui-group-theme-d .ui-bar-inherit, -html body .ui-group-theme-d .ui-body-inherit { - text-shadow: none; - border-color: #888888; - font-weight: normal; -} - -/* Bar Background = Solid/Dark (Contrast) */ -html .ui-bar-d, -html .ui-bar-d .ui-bar-inherit, -html body .ui-body-d .ui-bar-inherit, -html body .ui-group-theme-d .ui-bar-inherit { - background-color: #25292b; -} - -/* Body Background Solid/Main > also used for buttons */ -html .ui-btn-d, -html body .ui-bar-d.ui-btn-d, /* XXX not good */ -html .ui-body-d:not(.ui-loader), -html .ui-bar-d .ui-btn-inherit, -html .ui-bar-d .ui-body-inherit, -html body .ui-body-d .ui-btn-inherit, -html .ui-body-d .ui-body-inherit, /* panel background */ -html body .ui-group-theme-d .ui-body-inherit, -html body .ui-group-theme-d .ui-btn-inherit { - background-color: #444444; -} - -/* Body Background Linear (add .ui-linear) */ -html .ui-body-d.ui-linear, -html .ui-bar-d .ui-body-inherit.ui-linear, -html .ui-body-d .ui-body-inherit.ui-linear, /* panel background */ -html body .ui-group-theme-d .ui-body-inherit.ui-linear { - background: #25292b; - background-image: -webkit-gradient(linear, left top, left bottom, from(#444), to(#222)); - background-image: -webkit-linear-gradient(#444, #222); - background-image: -moz-linear-gradient(#444, #222); - background-image: -ms-linear-gradient(#444, #222); - background-image: -o-linear-gradient(#444, #222); - background-image: linear-gradient(#444, #222); -} - -/* Body background radial (add .ui-radial) */ -html .ui-body-d.ui-radial, -html .ui-bar-d .ui-body-inherit.ui-radial, -html .ui-body-d .ui-body-inherit.ui-radial, /* panel background */ -html body .ui-group-theme-d .ui-body-inherit.ui-radial { - background-color: #25292b; - background: -webkit-radial-gradient(100% 100%, ellipse farthest-side, #888888 10%, #444444 50%, #25292b 120%) repeat scroll 0 0 rgba(0, 0, 0, 0); - background: radial-gradient(ellipse farthest-side at 100% 100% , #888888 10%, #444444 50%, #25292b 120%) repeat scroll 0 0 rgba(0, 0, 0, 0); - background: -moz-radial-gradient(ellipse farthest-side at 100% 100% , #888888 10%, #444444 50%, #25292b 120%) repeat scroll 0 0 rgba(0, 0, 0, 0); - background: -ms-radial-gradient(ellipse farthest-side at 100% 100% , #888888 10%, #444444 50%, #25292b 120%) repeat scroll 0 0 rgba(0, 0, 0, 0); - background: -o-radial-gradient(ellipse farthest-side at 100% 100% , #888888 10%, #444444 50%, #25292b 120%) repeat scroll 0 0 rgba(0, 0, 0, 0); - -} - -/* Button On Background (<select> too */ -html .ui-btn.ui-btn-d, -html .ui-bar-d .ui-btn, -html .ui-body-d .ui-btn, -html .ui-group-theme-d .ui-btn, -html .ui-group-theme-d .ui-btn.ui-btn-d, - -/* Table Row */ -html .ui-body-d tbody tr, - -/* Button Visited (... sigh ...) */ -html head + body .ui-bar-d .ui-btn:visited, -html head + body .ui-body-d .ui-btn:visited, -html head + body .ui-btn.ui-btn-d:visited, -html head + body .ui-group-theme-d .ui-btn:visited, -html head + body .ui-group-theme-d .ui-btn.ui-btn-d:visited, - -/* Link Visited|Active|Hover..... */ -html head + body .ui-bar-d .ui-link:visited, -html head + body .ui-body-d .ui-link:visited, -html head + body .ui-group-theme-d .ui-link:visited, - -html head + body .ui-bar-d .ui-link:active, -html head + body .ui-body-d .ui-link:active, -html head + body .ui-group-theme-d .ui-link:active, - -html head + body .ui-bar-d .ui-link:hover, -html head + body .ui-body-d .ui-link:hover, -html head + body .ui-group-theme-d .ui-link:hover { - background: none repeat scroll 0 0 transparent; /* why is this transparent? */ - color: #ffffff; - text-shadow: none; - border-color: rgb(136, 136, 136); /* #888888; IE8 */ - border-color: rgba(255,255,255, .3); -} - -/* Hover */ -html head + body .ui-bar-d .ui-btn:hover, -html head + body .ui-body-d .ui-btn:hover, -html head + body .ui-btn.ui-btn-d:hover, -html head + body .ui-group-theme-d .ui-btn:hover, -html head + body .ui-group-theme-d .ui-btn.ui-btn-d:hover, - -/* Button Active (JQM overwrite requires double classes)*/ -html head + body .ui-bar-d .ui-btn:active, -html head + body .ui-body-d .ui-btn:active, -html head + body .ui-btn.ui-btn-d:active, -html head + body .ui-group-theme-d .ui-btn:active, -html head + body .ui-group-theme-d .ui-btn.ui-btn-d:active, - -html head + body .ui-bar-d .ui-btn.ui-btn-active, -html head + body .ui-body-d .ui-btn.ui-btn-active, -html head + body .ui-btn.ui-btn-d.ui-btn-active, -html head + body .ui-group-theme-d .ui-btn.ui-btn-active, -html head + body .ui-group-theme-d .ui-btn.ui-btn-d.ui-btn-active { - background-color: #25292b; - background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#444444), to(#25292b)); - background: -webkit-linear-gradient(bottom, #444444, #25292b); - background: linear-gradient(bottom, #444444, #25292b); - background: -moz-linear-gradient(bottom, #444444, #25292b); - background: -o-linear-gradient(bottom, #444444, #25292b); - background: -ms-linear-gradient(bottom, #444444, #25292b); - color: #ffffff; - text-shadow: none; - border-color: rgb(136, 136, 136); /* #888888; IE8 */ - border-color: rgba(255,255,255, .3); -} - - - - -/* --------------------- fontawesome_import.css --------------------------- */ - - -/* imports separated from rest, so fonts can be fetched from CDN -@font-face { - font-family: 'FontAwesome'; - src: url('../fonts/fontawesome-webfont.eot?v=4.1.0'); - src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.1.0') format('embedded-opentype'), - url('../fonts/fontawesome-webfont.woff?v=4.1.0') format('woff'), - url('../fonts/fontawesome-webfont.ttf?v=4.1.0') format('truetype'), - url('../fonts/fontawesome-webfont.svg?v=4.1.0#fontawesomeregular') format('svg'); - font-weight: normal; - font-style: normal; -} -*/ -/* --------------------- fontawesome_custom.css --------------------------- */ - - -/* imports separated from rest, so fonts can be fetched from CDN */ -/* CUSTOMIZED: - * 1. update path @font-face - * 2. icons: change fa- to html ui-icon- - * 3. change :before to JQM :after - * 4. update first html .ui-icon (former .fa) - * 5. add checkbox-on/off, radio on/off icons to fontawesome icons - * 6. add JQM compat at end - * 7. replace all updated name in code... times - * 8. JQM uses carat-t/b/l/r, add those to caret-left/right/top/bottom - * 9. Add checkbox-on/off, radio on/off to icons (why JQM, why????) - * 10: add :after to spin/2x/3x... - */ - - -/*! - * Font Awesome 4.1.0 by @davegandy - http://fontawesome.io - @fontawesome - * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) - */ -/* FONT PATH - * -------------------------- */ - /* -@font-face { - font-family: 'FontAwesome'; - src: url('../fonts/fontawesome-webfont.eot?v=4.1.0'); - src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.1.0') format('embedded-opentype'), - url('../fonts/fontawesome-webfont.woff?v=4.1.0') format('woff'), - url('../fonts/fontawesome-webfont.ttf?v=4.1.0') format('truetype'), - url('../fonts/fontawesome-webfont.svg?v=4.1.0#fontawesomeregular') format('svg'); - font-weight: normal; - font-style: normal; -} -*/ -html [class^="ui-icon-"]:after, -html [class*=" ui-icon-"]:after, -html .ui-checkbox-on:after, -html .ui-checkbox-off:after, -html .ui-radio-on:after, -html .ui-radio-off:after { - display: inline-block; - font-family: FontAwesome; - font-style: normal; - font-weight: normal; - line-height: 1; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} -/* makes the font 33% larger relative to the icon container */ -html .ui-icon-lg { - font-size: 1.33333333em; - line-height: 0.75em; - vertical-align: -15%; -} -html .ui-icon-2x:after { - font-size: 2em; -} -html .ui-icon-3x:after { - font-size: 3em; -} -html .ui-icon-4x:after { - font-size: 4em; -} -html .ui-icon-5x:after { - font-size: 5em; -} -html .ui-icon-fw { - width: 1.28571429em; - text-align: center; -} -html .ui-icon-ul { - padding-left: 0; - margin-left: 2.14285714em; - list-style-type: none; -} -html .ui-icon-ul > li { - position: relative; -} -html .ui-icon-li { - position: absolute; - left: -2.14285714em; - width: 2.14285714em; - top: 0.14285714em; - text-align: center; -} -html .ui-icon-lihtml .ui-icon-lg { - left: -1.85714286em; -} -html .ui-icon-border { - padding: .2em .25em .15em; - border: solid 0.08em #eeeeee; - border-radius: .1em; -} -.pull-right { - float: right; -} -.pull-left { - float: left; -} -html .ui-icon.pull-left { - margin-right: .3em; -} -html .ui-icon.pull-right { - margin-left: .3em; -} -html .ui-icon-spin:after { - -webkit-animation: spin .5s infinite linear; - -moz-animation: spin .5s infinite linear; - -o-animation: spin .5s infinite linear; - animation: spin .5s infinite linear; -} -@-moz-keyframes spin { - 0% { - -moz-transform: rotate(0deg); - } - 100% { - -moz-transform: rotate(359deg); - } -} -@-webkit-keyframes spin { - 0% { - -webkit-transform: rotate(0deg); - } - 100% { - -webkit-transform: rotate(359deg); - } -} -@-o-keyframes spin { - 0% { - -o-transform: rotate(0deg); - } - 100% { - -o-transform: rotate(359deg); - } -} -@keyframes spin { - 0% { - -webkit-transform: rotate(0deg); - transform: rotate(0deg); - } - 100% { - -webkit-transform: rotate(359deg); - transform: rotate(359deg); - } -} -html .ui-icon-rotate-90:after { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1); - -webkit-transform: rotate(90deg); - -moz-transform: rotate(90deg); - -ms-transform: rotate(90deg); - -o-transform: rotate(90deg); - transform: rotate(90deg); -} -html .ui-icon-rotate-180:after { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2); - -webkit-transform: rotate(180deg); - -moz-transform: rotate(180deg); - -ms-transform: rotate(180deg); - -o-transform: rotate(180deg); - transform: rotate(180deg); -} -html .ui-icon-rotate-270:after { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3); - -webkit-transform: rotate(270deg); - -moz-transform: rotate(270deg); - -ms-transform: rotate(270deg); - -o-transform: rotate(270deg); - transform: rotate(270deg); -} -html .ui-icon-flip-horizontal:after { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1); - -webkit-transform: scale(-1, 1); - -moz-transform: scale(-1, 1); - -ms-transform: scale(-1, 1); - -o-transform: scale(-1, 1); - transform: scale(-1, 1); -} -html .ui-icon-flip-vertical:after { - filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1); - -webkit-transform: scale(1, -1); - -moz-transform: scale(1, -1); - -ms-transform: scale(1, -1); - -o-transform: scale(1, -1); - transform: scale(1, -1); -} -html .ui-icon-stack { - position: relative; - display: inline-block; - width: 2em; - height: 2em; - line-height: 2em; - vertical-align: middle; -} -html .ui-icon-stack-1x, -html .ui-icon-stack-2x { - position: absolute; - left: 0; - width: 100%; - text-align: center; -} -html .ui-icon-stack-1x { - line-height: inherit; -} -html .ui-icon-stack-2x { - font-size: 2em; -} -html .ui-icon-inverse { - color: #ffffff; -} -/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen - readers do not read off random characters that represent icons */ -html .ui-icon-glass:after { - content: "\f000"; -} -html .ui-icon-music:after { - content: "\f001"; -} -html .ui-icon-search:after { - content: "\f002"; -} -html .ui-icon-envelope-o:after { - content: "\f003"; -} -html .ui-icon-heart:after { - content: "\f004"; -} -html .ui-icon-star:after { - content: "\f005"; -} -html .ui-icon-star-o:after { - content: "\f006"; -} -html .ui-icon-user:after { - content: "\f007"; -} -html .ui-icon-film:after { - content: "\f008"; -} -html .ui-icon-th-large:after { - content: "\f009"; -} -html .ui-icon-th:after { - content: "\f00a"; -} -html .ui-icon-th-list:after { - content: "\f00b"; -} -html .ui-icon-check:after { - content: "\f00c"; -} -html .ui-icon-times:after, -html .ui-icon-delete:after { - content: "\f00d"; -} -html .ui-icon-search-plus:after { - content: "\f00e"; -} -html .ui-icon-search-minus:after { - content: "\f010"; -} -html .ui-icon-power-off:after { - content: "\f011"; -} -html .ui-icon-signal:after { - content: "\f012"; -} -html .ui-icon-gear:after, -html .ui-icon-cog:after { - content: "\f013"; -} -html .ui-icon-trash-o:after { - content: "\f014"; -} -html .ui-icon-home:after { - content: "\f015"; -} -html .ui-icon-file-o:after { - content: "\f016"; -} -html .ui-icon-clock-o:after { - content: "\f017"; -} -html .ui-icon-road:after { - content: "\f018"; -} -html .ui-icon-download:after { - content: "\f019"; -} -html .ui-icon-arrow-circle-o-down:after { - content: "\f01a"; -} -html .ui-icon-arrow-circle-o-up:after { - content: "\f01b"; -} -html .ui-icon-inbox:after { - content: "\f01c"; -} -html .ui-icon-play-circle-o:after { - content: "\f01d"; -} -html .ui-icon-rotate-right:after, -html .ui-icon-repeat:after { - content: "\f01e"; -} -html .ui-icon-refresh:after { - content: "\f021"; -} -html .ui-icon-list-alt:after { - content: "\f022"; -} -html .ui-icon-lock:after { - content: "\f023"; -} -html .ui-icon-flag:after { - content: "\f024"; -} -html .ui-icon-headphones:after { - content: "\f025"; -} -html .ui-icon-volume-off:after { - content: "\f026"; -} -html .ui-icon-volume-down:after { - content: "\f027"; -} -html .ui-icon-volume-up:after { - content: "\f028"; -} -html .ui-icon-qrcode:after { - content: "\f029"; -} -html .ui-icon-barcode:after { - content: "\f02a"; -} -html .ui-icon-tag:after { - content: "\f02b"; -} -html .ui-icon-tags:after { - content: "\f02c"; -} -html .ui-icon-book:after { - content: "\f02d"; -} -html .ui-icon-bookmark:after { - content: "\f02e"; -} -html .ui-icon-print:after { - content: "\f02f"; -} -html .ui-icon-camera:after { - content: "\f030"; -} -html .ui-icon-font:after { - content: "\f031"; -} -html .ui-icon-bold:after { - content: "\f032"; -} -html .ui-icon-italic:after { - content: "\f033"; -} -html .ui-icon-text-height:after { - content: "\f034"; -} -html .ui-icon-text-width:after { - content: "\f035"; -} -html .ui-icon-align-left:after { - content: "\f036"; -} -html .ui-icon-align-center:after { - content: "\f037"; -} -html .ui-icon-align-right:after { - content: "\f038"; -} -html .ui-icon-align-justify:after { - content: "\f039"; -} -html .ui-icon-list:after { - content: "\f03a"; -} -html .ui-icon-dedent:after, -html .ui-icon-outdent:after { - content: "\f03b"; -} -html .ui-icon-indent:after { - content: "\f03c"; -} -html .ui-icon-video-camera:after { - content: "\f03d"; -} -html .ui-icon-photo:after, -html .ui-icon-image:after, -html .ui-icon-picture-o:after { - content: "\f03e"; -} -html .ui-icon-pencil:after { - content: "\f040"; -} -html .ui-icon-map-marker:after { - content: "\f041"; -} -html .ui-icon-adjust:after { - content: "\f042"; -} -html .ui-icon-tint:after { - content: "\f043"; -} -html .ui-icon-edit:after, -html .ui-icon-pencil-square-o:after { - content: "\f044"; -} -html .ui-icon-share-square-o:after { - content: "\f045"; -} -html .ui-icon-check-square-o:after, -html .ui-icon-checkbox-on:after, -html .ui-checkbox-on:after { - content: "\f046"; -} -html .ui-icon-arrows:after { - content: "\f047"; -} -html .ui-icon-step-backward:after { - content: "\f048"; -} -html .ui-icon-fast-backward:after { - content: "\f049"; -} -html .ui-icon-backward:after { - content: "\f04a"; -} -html .ui-icon-play:after { - content: "\f04b"; -} -html .ui-icon-pause:after { - content: "\f04c"; -} -html .ui-icon-stop:after { - content: "\f04d"; -} -html .ui-icon-forward:after { - content: "\f04e"; -} -html .ui-icon-fast-forward:after { - content: "\f050"; -} -html .ui-icon-step-forward:after { - content: "\f051"; -} -html .ui-icon-eject:after { - content: "\f052"; -} -html .ui-icon-chevron-left:after { - content: "\f053"; -} -html .ui-icon-chevron-right:after { - content: "\f054"; -} -html .ui-icon-plus-circle:after { - content: "\f055"; -} -html .ui-icon-minus-circle:after { - content: "\f056"; -} -html .ui-icon-times-circle:after { - content: "\f057"; -} -html .ui-icon-check-circle:after { - content: "\f058"; -} -html .ui-icon-question-circle:after { - content: "\f059"; -} -html .ui-icon-info-circle:after { - content: "\f05a"; -} -html .ui-icon-crosshairs:after { - content: "\f05b"; -} -html .ui-icon-times-circle-o:after { - content: "\f05c"; -} -html .ui-icon-check-circle-o:after, -html .ui-icon-radio-off:after, -html .ui-radio-on:after { - content: "\f05d"; -} -html .ui-icon-ban:after { - content: "\f05e"; -} -html .ui-icon-arrow-left:after { - content: "\f060"; -} -html .ui-icon-arrow-right:after { - content: "\f061"; -} -html .ui-icon-arrow-up:after { - content: "\f062"; -} -html .ui-icon-arrow-down:after { - content: "\f063"; -} -html .ui-icon-mail-forward:after, -html .ui-icon-share:after { - content: "\f064"; -} -html .ui-icon-expand:after { - content: "\f065"; -} -html .ui-icon-compress:after { - content: "\f066"; -} -html .ui-icon-plus:after { - content: "\f067"; -} -html .ui-icon-minus:after { - content: "\f068"; -} -html .ui-icon-asterisk:after { - content: "\f069"; -} -html .ui-icon-exclamation-circle:after { - content: "\f06a"; -} -html .ui-icon-gift:after { - content: "\f06b"; -} -html .ui-icon-leaf:after { - content: "\f06c"; -} -html .ui-icon-fire:after { - content: "\f06d"; -} -html .ui-icon-eye:after { - content: "\f06e"; -} -html .ui-icon-eye-slash:after { - content: "\f070"; -} -html .ui-icon-warning:after, -html .ui-icon-exclamation-triangle:after { - content: "\f071"; -} -html .ui-icon-plane:after { - content: "\f072"; -} -html .ui-icon-calendar:after { - content: "\f073"; -} -html .ui-icon-random:after { - content: "\f074"; -} -html .ui-icon-comment:after { - content: "\f075"; -} -html .ui-icon-magnet:after { - content: "\f076"; -} -html .ui-icon-chevron-up:after { - content: "\f077"; -} -html .ui-icon-chevron-down:after { - content: "\f078"; -} -html .ui-icon-retweet:after { - content: "\f079"; -} -html .ui-icon-shopping-cart:after { - content: "\f07a"; -} -html .ui-icon-folder:after { - content: "\f07b"; -} -html .ui-icon-folder-open:after { - content: "\f07c"; -} -html .ui-icon-arrows-v:after { - content: "\f07d"; -} -html .ui-icon-arrows-h:after { - content: "\f07e"; -} -html .ui-icon-bar-chart-o:after { - content: "\f080"; -} -html .ui-icon-twitter-square:after { - content: "\f081"; -} -html .ui-icon-facebook-square:after { - content: "\f082"; -} -html .ui-icon-camera-retro:after { - content: "\f083"; -} -html .ui-icon-key:after { - content: "\f084"; -} -html .ui-icon-gears:after, -html .ui-icon-cogs:after { - content: "\f085"; -} -html .ui-icon-comments:after { - content: "\f086"; -} -html .ui-icon-thumbs-o-up:after { - content: "\f087"; -} -html .ui-icon-thumbs-o-down:after { - content: "\f088"; -} -html .ui-icon-star-half:after { - content: "\f089"; -} -html .ui-icon-heart-o:after { - content: "\f08a"; -} -html .ui-icon-sign-out:after { - content: "\f08b"; -} -html .ui-icon-linkedin-square:after { - content: "\f08c"; -} -html .ui-icon-thumb-tack:after { - content: "\f08d"; -} -html .ui-icon-external-link:after { - content: "\f08e"; -} -html .ui-icon-sign-in:after { - content: "\f090"; -} -html .ui-icon-trophy:after { - content: "\f091"; -} -html .ui-icon-github-square:after { - content: "\f092"; -} -html .ui-icon-upload:after { - content: "\f093"; -} -html .ui-icon-lemon-o:after { - content: "\f094"; -} -html .ui-icon-phone:after { - content: "\f095"; -} -html .ui-icon-square-o:after, -html .ui-icon-checkbox-off:after, -html .ui-checkbox-off:after { - content: "\f096"; -} -html .ui-icon-bookmark-o:after { - content: "\f097"; -} -html .ui-icon-phone-square:after { - content: "\f098"; -} -html .ui-icon-twitter:after { - content: "\f099"; -} -html .ui-icon-facebook:after { - content: "\f09a"; -} -html .ui-icon-github:after { - content: "\f09b"; -} -html .ui-icon-unlock:after { - content: "\f09c"; -} -html .ui-icon-credit-card:after { - content: "\f09d"; -} -html .ui-icon-rss:after { - content: "\f09e"; -} -html .ui-icon-hdd-o:after { - content: "\f0a0"; -} -html .ui-icon-bullhorn:after { - content: "\f0a1"; -} -html .ui-icon-bell:after { - content: "\f0f3"; -} -html .ui-icon-certificate:after { - content: "\f0a3"; -} -html .ui-icon-hand-o-right:after { - content: "\f0a4"; -} -html .ui-icon-hand-o-left:after { - content: "\f0a5"; -} -html .ui-icon-hand-o-up:after { - content: "\f0a6"; -} -html .ui-icon-hand-o-down:after { - content: "\f0a7"; -} -html .ui-icon-arrow-circle-left:after { - content: "\f0a8"; -} -html .ui-icon-arrow-circle-right:after { - content: "\f0a9"; -} -html .ui-icon-arrow-circle-up:after { - content: "\f0aa"; -} -html .ui-icon-arrow-circle-down:after { - content: "\f0ab"; -} -html .ui-icon-globe:after { - content: "\f0ac"; -} -html .ui-icon-wrench:after { - content: "\f0ad"; -} -html .ui-icon-tasks:after { - content: "\f0ae"; -} -html .ui-icon-filter:after { - content: "\f0b0"; -} -html .ui-icon-briefcase:after { - content: "\f0b1"; -} -html .ui-icon-arrows-alt:after { - content: "\f0b2"; -} -html .ui-icon-group:after, -html .ui-icon-users:after { - content: "\f0c0"; -} -html .ui-icon-chain:after, -html .ui-icon-link:after { - content: "\f0c1"; -} -html .ui-icon-cloud:after { - content: "\f0c2"; -} -html .ui-icon-flask:after { - content: "\f0c3"; -} -html .ui-icon-cut:after, -html .ui-icon-scissors:after { - content: "\f0c4"; -} -html .ui-icon-copy:after, -html .ui-icon-files-o:after { - content: "\f0c5"; -} -html .ui-icon-paperclip:after { - content: "\f0c6"; -} -html .ui-icon-save:after, -html .ui-icon-floppy-o:after { - content: "\f0c7"; -} -html .ui-icon-square:after { - content: "\f0c8"; -} -html .ui-icon-navicon:after, -html .ui-icon-reorder:after, -html .ui-icon-bars:after { - content: "\f0c9"; -} -html .ui-icon-list-ul:after { - content: "\f0ca"; -} -html .ui-icon-list-ol:after { - content: "\f0cb"; -} -html .ui-icon-strikethrough:after { - content: "\f0cc"; -} -html .ui-icon-underline:after { - content: "\f0cd"; -} -html .ui-icon-table:after { - content: "\f0ce"; -} -html .ui-icon-magic:after { - content: "\f0d0"; -} -html .ui-icon-truck:after { - content: "\f0d1"; -} -html .ui-icon-pinterest:after { - content: "\f0d2"; -} -html .ui-icon-pinterest-square:after { - content: "\f0d3"; -} -html .ui-icon-google-plus-square:after { - content: "\f0d4"; -} -html .ui-icon-google-plus:after { - content: "\f0d5"; -} -html .ui-icon-money:after { - content: "\f0d6"; -} -html .ui-icon-caret-down:after, -html .ui-icon-carat-d:after { - content: "\f0d7"; -} -html .ui-icon-caret-up:after, -hmtl .ui-icon-carat-u:after{ - content: "\f0d8"; -} -html .ui-icon-caret-left:after, -html .ui-icon-carat-l:after { - content: "\f0d9"; -} -html .ui-icon-caret-right:after, -html .ui-icon-carat-r:after { - content: "\f0da"; -} -html .ui-icon-columns:after { - content: "\f0db"; -} -html .ui-icon-unsorted:after, -html .ui-icon-sort:after { - content: "\f0dc"; -} -html .ui-icon-sort-down:after, -html .ui-icon-sort-desc:after { - content: "\f0dd"; -} -html .ui-icon-sort-up:after, -html .ui-icon-sort-asc:after { - content: "\f0de"; -} -html .ui-icon-envelope:after { - content: "\f0e0"; -} -html .ui-icon-linkedin:after { - content: "\f0e1"; -} -html .ui-icon-rotate-left:after, -html .ui-icon-undo:after { - content: "\f0e2"; -} -html .ui-icon-legal:after, -html .ui-icon-gavel:after { - content: "\f0e3"; -} -html .ui-icon-dashboard:after, -html .ui-icon-tachometer:after { - content: "\f0e4"; -} -html .ui-icon-comment-o:after { - content: "\f0e5"; -} -html .ui-icon-comments-o:after { - content: "\f0e6"; -} -html .ui-icon-flash:after, -html .ui-icon-bolt:after { - content: "\f0e7"; -} -html .ui-icon-sitemap:after { - content: "\f0e8"; -} -html .ui-icon-umbrella:after { - content: "\f0e9"; -} -html .ui-icon-paste:after, -html .ui-icon-clipboard:after { - content: "\f0ea"; -} -html .ui-icon-lightbulb-o:after { - content: "\f0eb"; -} -html .ui-icon-exchange:after { - content: "\f0ec"; -} -html .ui-icon-cloud-download:after { - content: "\f0ed"; -} -html .ui-icon-cloud-upload:after { - content: "\f0ee"; -} -html .ui-icon-user-md:after { - content: "\f0f0"; -} -html .ui-icon-stethoscope:after { - content: "\f0f1"; -} -html .ui-icon-suitcase:after { - content: "\f0f2"; -} -html .ui-icon-bell-o:after { - content: "\f0a2"; -} -html .ui-icon-coffee:after { - content: "\f0f4"; -} -html .ui-icon-cutlery:after { - content: "\f0f5"; -} -html .ui-icon-file-text-o:after { - content: "\f0f6"; -} -html .ui-icon-building-o:after { - content: "\f0f7"; -} -html .ui-icon-hospital-o:after { - content: "\f0f8"; -} -html .ui-icon-ambulance:after { - content: "\f0f9"; -} -html .ui-icon-medkit:after { - content: "\f0fa"; -} -html .ui-icon-fighter-jet:after { - content: "\f0fb"; -} -html .ui-icon-beer:after { - content: "\f0fc"; -} -html .ui-icon-h-square:after { - content: "\f0fd"; -} -html .ui-icon-plus-square:after { - content: "\f0fe"; -} -html .ui-icon-angle-double-left:after { - content: "\f100"; -} -html .ui-icon-angle-double-right:after { - content: "\f101"; -} -html .ui-icon-angle-double-up:after { - content: "\f102"; -} -html .ui-icon-angle-double-down:after { - content: "\f103"; -} -html .ui-icon-angle-left:after { - content: "\f104"; -} -html .ui-icon-angle-right:after { - content: "\f105"; -} -html .ui-icon-angle-up:after { - content: "\f106"; -} -html .ui-icon-angle-down:after { - content: "\f107"; -} -html .ui-icon-desktop:after { - content: "\f108"; -} -html .ui-icon-laptop:after { - content: "\f109"; -} -html .ui-icon-tablet:after { - content: "\f10a"; -} -html .ui-icon-mobile-phone:after, -html .ui-icon-mobile:after { - content: "\f10b"; -} -html .ui-icon-circle-o:after, -html .ui-radio-off:after { - content: "\f10c"; -} -html .ui-icon-quote-left:after { - content: "\f10d"; -} -html .ui-icon-quote-right:after { - content: "\f10e"; -} -html .ui-icon-spinner:after { - content: "\f110"; -} -html .ui-icon-circle:after { - content: "\f111"; -} -html .ui-icon-mail-reply:after, -html .ui-icon-reply:after { - content: "\f112"; -} -html .ui-icon-github-alt:after { - content: "\f113"; -} -html .ui-icon-folder-o:after { - content: "\f114"; -} -html .ui-icon-folder-open-o:after { - content: "\f115"; -} -html .ui-icon-smile-o:after { - content: "\f118"; -} -html .ui-icon-frown-o:after { - content: "\f119"; -} -html .ui-icon-meh-o:after { - content: "\f11a"; -} -html .ui-icon-gamepad:after { - content: "\f11b"; -} -html .ui-icon-keyboard-o:after { - content: "\f11c"; -} -html .ui-icon-flag-o:after { - content: "\f11d"; -} -html .ui-icon-flag-checkered:after { - content: "\f11e"; -} -html .ui-icon-terminal:after { - content: "\f120"; -} -html .ui-icon-code:after { - content: "\f121"; -} -html .ui-icon-mail-reply-all:after, -html .ui-icon-reply-all:after { - content: "\f122"; -} -html .ui-icon-star-half-empty:after, -html .ui-icon-star-half-full:after, -html .ui-icon-star-half-o:after { - content: "\f123"; -} -html .ui-icon-location-arrow:after { - content: "\f124"; -} -html .ui-icon-crop:after { - content: "\f125"; -} -html .ui-icon-code-fork:after { - content: "\f126"; -} -html .ui-icon-unlink:after, -html .ui-icon-chain-broken:after { - content: "\f127"; -} -html .ui-icon-question:after { - content: "\f128"; -} -html .ui-icon-info:after { - content: "\f129"; -} -html .ui-icon-exclamation:after { - content: "\f12a"; -} -html .ui-icon-superscript:after { - content: "\f12b"; -} -html .ui-icon-subscript:after { - content: "\f12c"; -} -html .ui-icon-eraser:after { - content: "\f12d"; -} -html .ui-icon-puzzle-piece:after { - content: "\f12e"; -} -html .ui-icon-microphone:after { - content: "\f130"; -} -html .ui-icon-microphone-slash:after { - content: "\f131"; -} -html .ui-icon-shield:after { - content: "\f132"; -} -html .ui-icon-calendar-o:after { - content: "\f133"; -} -html .ui-icon-fire-extinguisher:after { - content: "\f134"; -} -html .ui-icon-rocket:after { - content: "\f135"; -} -html .ui-icon-maxcdn:after { - content: "\f136"; -} -html .ui-icon-chevron-circle-left:after { - content: "\f137"; -} -html .ui-icon-chevron-circle-right:after { - content: "\f138"; -} -html .ui-icon-chevron-circle-up:after { - content: "\f139"; -} -html .ui-icon-chevron-circle-down:after { - content: "\f13a"; -} -html .ui-icon-html5:after { - content: "\f13b"; -} -html .ui-icon-css3:after { - content: "\f13c"; -} -html .ui-icon-anchor:after { - content: "\f13d"; -} -html .ui-icon-unlock-alt:after { - content: "\f13e"; -} -html .ui-icon-bullseye:after { - content: "\f140"; -} -html .ui-icon-ellipsis-h:after { - content: "\f141"; -} -html .ui-icon-ellipsis-v:after { - content: "\f142"; -} -html .ui-icon-rss-square:after { - content: "\f143"; -} -html .ui-icon-play-circle:after { - content: "\f144"; -} -html .ui-icon-ticket:after { - content: "\f145"; -} -html .ui-icon-minus-square:after { - content: "\f146"; -} -html .ui-icon-minus-square-o:after { - content: "\f147"; -} -html .ui-icon-level-up:after { - content: "\f148"; -} -html .ui-icon-level-down:after { - content: "\f149"; -} -html .ui-icon-check-square:after { - content: "\f14a"; -} -html .ui-icon-pencil-square:after { - content: "\f14b"; -} -html .ui-icon-external-link-square:after { - content: "\f14c"; -} -html .ui-icon-share-square:after { - content: "\f14d"; -} -html .ui-icon-compass:after { - content: "\f14e"; -} -html .ui-icon-toggle-down:after, -html .ui-icon-caret-square-o-down:after { - content: "\f150"; -} -html .ui-icon-toggle-up:after, -html .ui-icon-caret-square-o-up:after { - content: "\f151"; -} -html .ui-icon-toggle-right:after, -html .ui-icon-caret-square-o-right:after { - content: "\f152"; -} -html .ui-icon-euro:after, -html .ui-icon-eur:after { - content: "\f153"; -} -html .ui-icon-gbp:after { - content: "\f154"; -} -html .ui-icon-dollar:after, -html .ui-icon-usd:after { - content: "\f155"; -} -html .ui-icon-rupee:after, -html .ui-icon-inr:after { - content: "\f156"; -} -html .ui-icon-cny:after, -html .ui-icon-rmb:after, -html .ui-icon-yen:after, -html .ui-icon-jpy:after { - content: "\f157"; -} -html .ui-icon-ruble:after, -html .ui-icon-rouble:after, -html .ui-icon-rub:after { - content: "\f158"; -} -html .ui-icon-won:after, -html .ui-icon-krw:after { - content: "\f159"; -} -html .ui-icon-bitcoin:after, -html .ui-icon-btc:after { - content: "\f15a"; -} -html .ui-icon-file:after { - content: "\f15b"; -} -html .ui-icon-file-text:after { - content: "\f15c"; -} -html .ui-icon-sort-alpha-asc:after { - content: "\f15d"; -} -html .ui-icon-sort-alpha-desc:after { - content: "\f15e"; -} -html .ui-icon-sort-amount-asc:after { - content: "\f160"; -} -html .ui-icon-sort-amount-desc:after { - content: "\f161"; -} -html .ui-icon-sort-numeric-asc:after { - content: "\f162"; -} -html .ui-icon-sort-numeric-desc:after { - content: "\f163"; -} -html .ui-icon-thumbs-up:after { - content: "\f164"; -} -html .ui-icon-thumbs-down:after { - content: "\f165"; -} -html .ui-icon-youtube-square:after { - content: "\f166"; -} -html .ui-icon-youtube:after { - content: "\f167"; -} -html .ui-icon-xing:after { - content: "\f168"; -} -html .ui-icon-xing-square:after { - content: "\f169"; -} -html .ui-icon-youtube-play:after { - content: "\f16a"; -} -html .ui-icon-dropbox:after { - content: "\f16b"; -} -html .ui-icon-stack-overflow:after { - content: "\f16c"; -} -html .ui-icon-instagram:after { - content: "\f16d"; -} -html .ui-icon-flickr:after { - content: "\f16e"; -} -html .ui-icon-adn:after { - content: "\f170"; -} -html .ui-icon-bitbucket:after { - content: "\f171"; -} -html .ui-icon-bitbucket-square:after { - content: "\f172"; -} -html .ui-icon-tumblr:after { - content: "\f173"; -} -html .ui-icon-tumblr-square:after { - content: "\f174"; -} -html .ui-icon-long-arrow-down:after { - content: "\f175"; -} -html .ui-icon-long-arrow-up:after { - content: "\f176"; -} -html .ui-icon-long-arrow-left:after { - content: "\f177"; -} -html .ui-icon-long-arrow-right:after { - content: "\f178"; -} -html .ui-icon-apple:after { - content: "\f179"; -} -html .ui-icon-windows:after { - content: "\f17a"; -} -html .ui-icon-android:after { - content: "\f17b"; -} -html .ui-icon-linux:after { - content: "\f17c"; -} -html .ui-icon-dribbble:after { - content: "\f17d"; -} -html .ui-icon-skype:after { - content: "\f17e"; -} -html .ui-icon-foursquare:after { - content: "\f180"; -} -html .ui-icon-trello:after { - content: "\f181"; -} -html .ui-icon-female:after { - content: "\f182"; -} -html .ui-icon-male:after { - content: "\f183"; -} -html .ui-icon-gittip:after { - content: "\f184"; -} -html .ui-icon-sun-o:after { - content: "\f185"; -} -html .ui-icon-moon-o:after { - content: "\f186"; -} -html .ui-icon-archive:after { - content: "\f187"; -} -html .ui-icon-bug:after { - content: "\f188"; -} -html .ui-icon-vk:after { - content: "\f189"; -} -html .ui-icon-weibo:after { - content: "\f18a"; -} -html .ui-icon-renren:after { - content: "\f18b"; -} -html .ui-icon-pagelines:after { - content: "\f18c"; -} -html .ui-icon-stack-exchange:after { - content: "\f18d"; -} -html .ui-icon-arrow-circle-o-right:after { - content: "\f18e"; -} -html .ui-icon-arrow-circle-o-left:after { - content: "\f190"; -} -html .ui-icon-toggle-left:after, -html .ui-icon-caret-square-o-left:after { - content: "\f191"; -} -html .ui-icon-dot-circle-o:after { - content: "\f192"; -} -html .ui-icon-wheelchair:after { - content: "\f193"; -} -html .ui-icon-vimeo-square:after { - content: "\f194"; -} -html .ui-icon-turkish-lira:after, -html .ui-icon-try:after { - content: "\f195"; -} -html .ui-icon-plus-square-o:after { - content: "\f196"; -} -html .ui-icon-space-shuttle:after { - content: "\f197"; -} -html .ui-icon-slack:after { - content: "\f198"; -} -html .ui-icon-envelope-square:after { - content: "\f199"; -} -html .ui-icon-wordpress:after { - content: "\f19a"; -} -html .ui-icon-openid:after { - content: "\f19b"; -} -html .ui-icon-institution:after, -html .ui-icon-bank:after, -html .ui-icon-university:after { - content: "\f19c"; -} -html .ui-icon-mortar-board:after, -html .ui-icon-graduation-cap:after { - content: "\f19d"; -} -html .ui-icon-yahoo:after { - content: "\f19e"; -} -html .ui-icon-google:after { - content: "\f1a0"; -} -html .ui-icon-reddit:after { - content: "\f1a1"; -} -html .ui-icon-reddit-square:after { - content: "\f1a2"; -} -html .ui-icon-stumbleupon-circle:after { - content: "\f1a3"; -} -html .ui-icon-stumbleupon:after { - content: "\f1a4"; -} -html .ui-icon-delicious:after { - content: "\f1a5"; -} -html .ui-icon-digg:after { - content: "\f1a6"; -} -html .ui-icon-pied-piper-square:after, -html .ui-icon-pied-piper:after { - content: "\f1a7"; -} -html .ui-icon-pied-piper-alt:after { - content: "\f1a8"; -} -html .ui-icon-drupal:after { - content: "\f1a9"; -} -html .ui-icon-joomla:after { - content: "\f1aa"; -} -html .ui-icon-language:after { - content: "\f1ab"; -} -html .ui-icon-fax:after { - content: "\f1ac"; -} -html .ui-icon-building:after { - content: "\f1ad"; -} -html .ui-icon-child:after { - content: "\f1ae"; -} -html .ui-icon-paw:after { - content: "\f1b0"; -} -html .ui-icon-spoon:after { - content: "\f1b1"; -} -html .ui-icon-cube:after { - content: "\f1b2"; -} -html .ui-icon-cubes:after { - content: "\f1b3"; -} -html .ui-icon-behance:after { - content: "\f1b4"; -} -html .ui-icon-behance-square:after { - content: "\f1b5"; -} -html .ui-icon-steam:after { - content: "\f1b6"; -} -html .ui-icon-steam-square:after { - content: "\f1b7"; -} -html .ui-icon-recycle:after { - content: "\f1b8"; -} -html .ui-icon-automobile:after, -html .ui-icon-car:after { - content: "\f1b9"; -} -html .ui-icon-cab:after, -html .ui-icon-taxi:after { - content: "\f1ba"; -} -html .ui-icon-tree:after { - content: "\f1bb"; -} -html .ui-icon-spotify:after { - content: "\f1bc"; -} -html .ui-icon-deviantart:after { - content: "\f1bd"; -} -html .ui-icon-soundcloud:after { - content: "\f1be"; -} -html .ui-icon-database:after { - content: "\f1c0"; -} -html .ui-icon-file-pdf-o:after { - content: "\f1c1"; -} -html .ui-icon-file-word-o:after { - content: "\f1c2"; -} -html .ui-icon-file-excel-o:after { - content: "\f1c3"; -} -html .ui-icon-file-powerpoint-o:after { - content: "\f1c4"; -} -html .ui-icon-file-photo-o:after, -html .ui-icon-file-picture-o:after, -html .ui-icon-file-image-o:after { - content: "\f1c5"; -} -html .ui-icon-file-zip-o:after, -html .ui-icon-file-archive-o:after { - content: "\f1c6"; -} -html .ui-icon-file-sound-o:after, -html .ui-icon-file-audio-o:after { - content: "\f1c7"; -} -html .ui-icon-file-movie-o:after, -html .ui-icon-file-video-o:after { - content: "\f1c8"; -} -html .ui-icon-file-code-o:after { - content: "\f1c9"; -} -html .ui-icon-vine:after { - content: "\f1ca"; -} -html .ui-icon-codepen:after { - content: "\f1cb"; -} -html .ui-icon-jsfiddle:after { - content: "\f1cc"; -} -html .ui-icon-life-bouy:after, -html .ui-icon-life-saver:after, -html .ui-icon-support:after, -html .ui-icon-life-ring:after { - content: "\f1cd"; -} -html .ui-icon-circle-o-notch:after { - content: "\f1ce"; -} -html .ui-icon-ra:after, -html .ui-icon-rebel:after { - content: "\f1d0"; -} -html .ui-icon-ge:after, -html .ui-icon-empire:after { - content: "\f1d1"; -} -html .ui-icon-git-square:after { - content: "\f1d2"; -} -html .ui-icon-git:after { - content: "\f1d3"; -} -html .ui-icon-hacker-news:after { - content: "\f1d4"; -} -html .ui-icon-tencent-weibo:after { - content: "\f1d5"; -} -html .ui-icon-qq:after { - content: "\f1d6"; -} -html .ui-icon-wechat:after, -html .ui-icon-weixin:after { - content: "\f1d7"; -} -html .ui-icon-send:after, -html .ui-icon-paper-plane:after { - content: "\f1d8"; -} -html .ui-icon-send-o:after, -html .ui-icon-paper-plane-o:after { - content: "\f1d9"; -} -html .ui-icon-history:after { - content: "\f1da"; -} -html .ui-icon-circle-thin:after { - content: "\f1db"; -} -html .ui-icon-header:after { - content: "\f1dc"; -} -html .ui-icon-paragraph:after { - content: "\f1dd"; -} -html .ui-icon-sliders:after { - content: "\f1de"; -} -html .ui-icon-share-alt:after { - content: "\f1e0"; -} -html .ui-icon-share-alt-square:after { - content: "\f1e1"; -} -html .ui-icon-bomb:after { - content: "\f1e2"; -} - -/* JQM compat */ -/* clear background */ -html .ui-btn:after { - background: 0 none; - border-radius: 0; - -webkit-border-radius: 0; -} - -/* iconsize, positioning */ -html .ui-btn[class*="ui-icon-"]:after, -html .ui-btn[class*="ui-icon-"]:after { - font-size: 1.25em; -} -/* panel get less XXX: keep? */ -html .ui-panel .ui-content .ui-btn[class*="ui-icon-"]:after, -html .ui-panel .ui-content .ui-btn[class*="ui-icon-"]:after { - font-size: 1em; -} - -@media (max-width: 32em) { - html .ui-btn[class*="ui-icon-"]:after, - html .ui-btn[class*="ui-icon-"]:after { - font-size: 1.5em; - } - html .ui-panel .ui-content .ui-btn[class*="ui-icon-"]:after, - html .ui-panel .ui-content .ui-btn[class*="ui-icon-"]:after { - font-size: 1.25em; - } -} - -/* FALLBACK Icons - JQM compat: user, reorder, search, delete */ -/* bars */ -.ui-nosvg .ui-icon-reorder:after { - background-image: url(img/jquery-mobile/icons-png/bars-black.png); -} -/* delete */ -.ui-nosvg .ui-icon-delete:after { - background-image: url(images/icons-png/delete-black.png); -} -/* search */ -.ui-nosvg .ui-icon-search:after { - background-image: url(images/icons-png/search-black.png); -} -/* user */ -.ui-nosvg .ui-icon-user:after { - background-image: url(images/icons-png/user-white.png); -} - diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/rjs_gadget_erp5_css.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/rjs_gadget_erp5_css.xml deleted file mode 100644 index 842677658ffcdbbfda366204ab4f1a29230022c4..0000000000000000000000000000000000000000 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/rjs_gadget_erp5_css.xml +++ /dev/null @@ -1,257 +0,0 @@ -<?xml version="1.0"?> -<ZopeData> - <record id="1" aka="AAAAAAAAAAE="> - <pickle> - <global name="Web Style" module="erp5.portal_type"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>_Access_contents_information_Permission</string> </key> - <value> - <tuple> - <string>Anonymous</string> - <string>Assignee</string> - <string>Assignor</string> - <string>Associate</string> - <string>Auditor</string> - <string>Manager</string> - <string>Owner</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Add_portal_content_Permission</string> </key> - <value> - <tuple> - <string>Assignee</string> - <string>Assignor</string> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Change_local_roles_Permission</string> </key> - <value> - <tuple> - <string>Assignor</string> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Modify_portal_content_Permission</string> </key> - <value> - <tuple> - <string>Assignee</string> - <string>Assignor</string> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_View_Permission</string> </key> - <value> - <tuple> - <string>Anonymous</string> - <string>Assignee</string> - <string>Assignor</string> - <string>Associate</string> - <string>Auditor</string> - <string>Manager</string> - <string>Owner</string> - </tuple> - </value> - </item> - <item> - <key> <string>content_md5</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>default_reference</string> </key> - <value> <string>gadget_erp5.css</string> </value> - </item> - <item> - <key> <string>description</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>rjs_gadget_erp5_css</string> </value> - </item> - <item> - <key> <string>language</string> </key> - <value> <string>en</string> </value> - </item> - <item> - <key> <string>portal_type</string> </key> - <value> <string>Web Style</string> </value> - </item> - <item> - <key> <string>short_title</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>title</string> </key> - <value> <string>RenderJS Gadget OfficeJS CSS</string> </value> - </item> - <item> - <key> <string>version</string> </key> - <value> <string>001</string> </value> - </item> - <item> - <key> <string>workflow_history</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> - </value> - </item> - </dictionary> - </pickle> - </record> - <record id="2" aka="AAAAAAAAAAI="> - <pickle> - <global name="PersistentMapping" module="Persistence.mapping"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>data</string> </key> - <value> - <dictionary> - <item> - <key> <string>document_publication_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> - </value> - </item> - <item> - <key> <string>edit_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> - </value> - </item> - </dictionary> - </value> - </item> - </dictionary> - </pickle> - </record> - <record id="3" aka="AAAAAAAAAAM="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>publish_alive</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>zope</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1465381402.54</float> - <string>UTC</string> - </tuple> - </state> - </object> - </value> - </item> - <item> - <key> <string>validation_state</string> </key> - <value> <string>published_alive</string> </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> - <record id="4" aka="AAAAAAAAAAQ="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>edit</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>zope</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>serial</string> </key> - <value> <string>959.26374.14159.14984</string> </value> - </item> - <item> - <key> <string>state</string> </key> - <value> <string>current</string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1496323644.36</float> - <string>UTC</string> - </tuple> - </state> - </object> - </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/rjs_gadget_erp5_js.js b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/rjs_gadget_erp5_js.js deleted file mode 100644 index 68eeae085bb43da926806a95cf9c2151338cf037..0000000000000000000000000000000000000000 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/rjs_gadget_erp5_js.js +++ /dev/null @@ -1,567 +0,0 @@ -/*globals window, document, RSVP, rJS, - loopEventListener, jQuery, URI, location, XMLHttpRequest, console*/ -/*jslint indent: 2, maxlen: 80*/ -(function (window, document, RSVP, rJS, loopEventListener, - $, XMLHttpRequest, location, console) { - "use strict"; - - ///////////////////////////////////////////////////////////////// - // Desactivate jQuery Mobile URL management - ///////////////////////////////////////////////////////////////// - $.mobile.ajaxEnabled = false; - $.mobile.linkBindingEnabled = false; - $.mobile.hashListeningEnabled = false; - $.mobile.pushStateEnabled = false; - - var MAIN_SCOPE = "m"; - - function renderMainGadget(gadget, url, options) { - return gadget.declareGadget(url, { - scope: MAIN_SCOPE - }) - .push(function (page_gadget) { - gadget.props.m_options_string = JSON.stringify(options); - if (page_gadget.render === undefined) { - return [page_gadget]; - } - return RSVP.all([ - page_gadget, - page_gadget.render(options) - ]); - }) - .push(function (all_result) { - return all_result[0]; - }); - } - - function initHeaderOptions(gadget) { - gadget.props.header_argument_list = { - panel_action: true, - title: gadget.props.application_title || "OfficeJS" - }; - } - - function route(my_root_gadget, my_scope, my_method, my_param_list) { - return RSVP.Queue() - .push(function () { - return my_root_gadget.getDeclaredGadget(my_scope); - }) - .push(function (my_gadget) { - if (my_param_list) { - return my_gadget[my_method].apply(my_gadget, my_param_list); - } - return my_gadget[my_method](); - }); - } - - function updateHeader(gadget) { - return gadget.getDeclaredGadget("header") - .push(function (header_gadget) { - return header_gadget.render(gadget.props.header_argument_list); - }); - } - - function increaseLoadingCounter(gadget) { - return new RSVP.Queue() - .push(function () { - gadget.props.loading_counter += 1; - if (gadget.props.loading_counter === 1) { - return gadget.getDeclaredGadget("header") - .push(function (header_gadget) { - return header_gadget.notifyLoading(); - }); - } - }); - } - - function decreaseLoadingCounter(gadget) { - return new RSVP.Queue() - .push(function () { - gadget.props.loading_counter -= 1; - if (gadget.props.loading_counter < 0) { - gadget.props.loading_counter = 0; - // throw new Error("Unexpected negative loading counter"); - } - if (gadget.props.loading_counter === 0) { - return gadget.getDeclaredGadget("header") - .push(function (header_gadget) { - return header_gadget.notifyLoaded(); - }); - } - }); - } - - function callJioGadget(gadget, method, param_list) { - var called = false; - return new RSVP.Queue() - .push(function () { - called = true; - return increaseLoadingCounter(gadget); - }) - .push(function () { - return gadget.getDeclaredGadget("jio_gadget"); - }) - .push(function (jio_gadget) { - return jio_gadget[method].apply(jio_gadget, param_list); - }) - .push(function (result) { - return decreaseLoadingCounter(gadget) - .push(function () { - return result; - }); - }, function (error) { - if (called) { - return decreaseLoadingCounter(gadget) - .push(function () { - throw error; - }); - } - throw error; - }); - } - - function displayErrorContent(gadget, error) { - // Do not break the application in case of errors. - // Display it to the user for now, - // and allow user to go back to the frontpage - var error_text = ""; - if (error instanceof RSVP.CancellationError) { - return; - } - - if (error.target instanceof XMLHttpRequest) { - error_text = error.target.toString() + " " + - error.target.status + " " + - error.target.statusText + "\n" + - error.target.responseURL + "\n\n" + - error.target.getAllResponseHeaders(); - } else if (error instanceof Error) { - error_text = error.toString(); - } else { - error_text = JSON.stringify(error); - } - - console.error(error); - if (error instanceof Error) { - console.error(error.stack); - } - // XXX Improve error rendering - gadget.props.content_element.innerHTML = "<br/><br/><br/><pre></pre>"; - gadget.props.content_element.querySelector('pre').textContent = - "Error: " + error_text; - // XXX Notify error - } - - function displayError(gadget, error) { - return new RSVP.Queue() - .push(function () { - return displayErrorContent(gadget, error); - }) - .push(function () { - return gadget.dropGadget(MAIN_SCOPE) - .push(undefined, function () { - // Do not crash the app if the pg gadget in not defined - // ie, keep the original error on screen - return; - }); - }); - } - - function getSetting(gadget, key, default_value) { - return gadget.getDeclaredGadget("setting_gadget") - .push(function (jio_gadget) { - return jio_gadget.get("setting"); - }) - .push(function (doc) { - return doc[key] || default_value; - }, function (error) { - if (error.status_code === 404) { - return default_value; - } - throw error; - }); - } - - function setSetting(gadget, key, value) { - var jio_gadget; - return gadget.getDeclaredGadget("setting_gadget") - .push(function (result) { - jio_gadget = result; - return jio_gadget.get("setting"); - }) - .push(undefined, function (error) { - if (error.status_code === 404) { - return {}; - } - throw error; - }) - .push(function (doc) { - doc[key] = value; - return jio_gadget.put('setting', doc); - }); - } - - ////////////////////////////////////////// - // Page rendering - ////////////////////////////////////////// - rJS(window) - .ready(function (g) { - g.props = {}; - return g.getElement() - .push(function (element) { - $(element).trigger("create"); - g.props.loading_counter = 0; - g.props.element = element; - g.props.content_element = element.querySelector('.gadget-content'); - }); - }) - // Configure setting storage - .ready(function (g) { - return g.getDeclaredGadget("setting_gadget") - .push(function (jio_gadget) { - return jio_gadget.createJio({ - type: "indexeddb", - database: window.location.pathname + "setting" - }); - }); - }) - .ready(function (g) { - // Extract configuration parameters stored in HTML - // XXX Will work only if top gadget... - var element_list = - document.querySelectorAll("[data-renderjs-configuration]"), - len = element_list.length, - key, - value, - i, - queue = new RSVP.Queue(); - - function push(a, b) { - queue.push(function () { - return setSetting(g, a, b); - }); - } - - for (i = 0; i < len; i += 1) { - key = element_list[i].getAttribute('data-renderjs-configuration'); - value = element_list[i].textContent; - g.props[key] = value; - push(key, value); - } - return queue; - }) - .ready(function (g) { - return setSetting(g, 'hateoas_url', - (new URI(g.props.hateoas_url)) - .absoluteTo(location.href) - .toString() - ); - }) - // Configure jIO storage - .ready(function (g) { - var jio_gadget; - return g.getDeclaredGadget("jio_gadget") - .push(function (result) { - jio_gadget = result; - return getSetting(g, 'jio_storage_description'); - }) - .push(function (result) { - return jio_gadget.createJio(result); - }); - }) - .ready(function (g) { - return g.getDeclaredGadget('panel') - .push(function (panel_gadget) { - return panel_gadget.render(); - }); - }) - .ready(function (g) { - return g.getDeclaredGadget('router') - .push(function (router_gadget) { - return router_gadget.start(); - }); - }) - - ////////////////////////////////////////// - // Allow Acquisition - ////////////////////////////////////////// - .allowPublicAcquisition("getSetting", function (argument_list) { - return getSetting(this, argument_list[0], argument_list[1]); - }) - .allowPublicAcquisition("setSetting", function (argument_list) { - return setSetting(this, argument_list[0], argument_list[1]); - }) - .allowPublicAcquisition("translateHtml", function (argument_list) { - return this.getDeclaredGadget("translation_gadget") - .push(function (translation_gadget) { - return translation_gadget.translateHtml(argument_list[0]); - }); - }) - - // XXX Those methods may be directly integrated into the header, - // as it handles the submit triggering - .allowPublicAcquisition('notifySubmitting', function () { - return route(this, "header", 'notifySubmitting'); - }) - .allowPublicAcquisition('notifySubmitted', function () { - return route(this, "header", "notifySubmitted"); - }) - .allowPublicAcquisition('notifyChange', function () { - return route(this, "header", 'notifyChange'); - }) - - .allowPublicAcquisition('refresh', function () { - var gadget = this; - return gadget.getDeclaredGadget(MAIN_SCOPE) - .push(function (main) { - if (main.render !== undefined) { - return main.render(JSON.parse(gadget.props.m_options_string)) - .push(function () { - $(gadget.props.content_element).trigger("create"); - }); - } - }, function () { - return; - }); - }) - - .allowPublicAcquisition("translate", function (argument_list) { - return this.getDeclaredGadget("translation_gadget") - .push(function (translation_gadget) { - return translation_gadget.translate(argument_list[0]); - }); - }) - - .allowPublicAcquisition("redirect", function (param_list) { - return this.getDeclaredGadget('router') - .push(function (router_gadget) { - return router_gadget.redirect.apply(router_gadget, param_list); - }); - }) - .allowPublicAcquisition('reload', function () { - return location.reload(); - }) - .allowPublicAcquisition("getUrlParameter", function (param_list) { - return this.getDeclaredGadget('router') - .push(function (router_gadget) { - return router_gadget.getUrlParameter.apply(router_gadget, param_list); - }); - }) - .allowPublicAcquisition("getUrlFor", function (param_list) { - return this.getDeclaredGadget('router') - .push(function (router_gadget) { - return router_gadget.getCommandUrlFor.apply(router_gadget, - param_list); - }); - }) - - .allowPublicAcquisition("updateHeader", function (param_list) { - var gadget = this; - initHeaderOptions(gadget); - return this.getDeclaredGadget("translation_gadget") - .push(function (translation_gadget) { - var promise_list = [], - key; - for (key in param_list[0]) { - if (param_list[0].hasOwnProperty(key)) { - gadget.props.header_argument_list[key] = param_list[0][key]; - } - } - - promise_list.push(translation_gadget.translate( - gadget.props.header_argument_list.title - )); - if (gadget.props.header_argument_list.hasOwnProperty('right_title')) { - promise_list.push(translation_gadget.translate( - gadget.props.header_argument_list.right_title - )); - } - return RSVP.all(promise_list); - }) - .push(function (result_list) { - gadget.props.header_argument_list.title = result_list[0]; - if (result_list.length === 2) { - gadget.props.header_argument_list.right_title = result_list[1]; - } - - // XXX Sven hack: number of _url determine padding for - // subheader on ui-content - var key, - count = 0; - for (key in gadget.props.header_argument_list) { - if (gadget.props.header_argument_list.hasOwnProperty(key)) { - if (key.indexOf('_url') > -1) { - count += 1; - } - } - } - if (count > 2) { - gadget.props.sub_header_class = "ui-has-subheader"; - } - }); - }) - - .allowPublicAcquisition('triggerPanel', function () { - return route(this, "panel", "toggle"); - }) - .allowPublicAcquisition('renderEditorPanel', function (param_list) { - return route(this, "editor_panel", 'render', param_list); - }) - .allowPublicAcquisition("jio_allDocs", function (param_list) { - return callJioGadget(this, "allDocs", param_list); - }) - .allowPublicAcquisition("jio_remove", function (param_list) { - return callJioGadget(this, "remove", param_list); - }) - .allowPublicAcquisition("jio_post", function (param_list) { - return callJioGadget(this, "post", param_list); - }) - .allowPublicAcquisition("jio_put", function (param_list) { - return callJioGadget(this, "put", param_list); - }) - .allowPublicAcquisition("jio_get", function (param_list) { - return callJioGadget(this, "get", param_list); - }) - .allowPublicAcquisition("jio_allAttachments", function (param_list) { - return callJioGadget(this, "allAttachments", param_list); - }) - .allowPublicAcquisition("jio_getAttachment", function (param_list) { - return callJioGadget(this, "getAttachment", param_list); - }) - .allowPublicAcquisition("jio_putAttachment", function (param_list) { - return callJioGadget(this, "putAttachment", param_list); - }) - .allowPublicAcquisition("jio_removeAttachment", function (param_list) { - return callJioGadget(this, "removeAttachment", param_list); - }) - .allowPublicAcquisition("jio_repair", function (param_list) { - return callJioGadget(this, "repair", param_list); - }) - .allowPublicAcquisition("triggerSubmit", function (param_list) { - return this.getDeclaredGadget(MAIN_SCOPE) - .push(function (main_gadget) { - return main_gadget.triggerSubmit(param_list); - }); - }) - ///////////////////////////////////////////////////////////////// - // declared methods - ///////////////////////////////////////////////////////////////// - .allowPublicAcquisition("renderApplication", function (param_list) { - return this.renderXXX.apply(this, param_list); - }) - // Render the page - .declareMethod('renderXXX', function (options) { - var gadget = this; - - gadget.props.options = options; - // Reinitialize the loading counter - gadget.props.loading_counter = 0; - // By default, init the header options to be empty - // (ERP5 title by default + sidebar) - initHeaderOptions(gadget); - return new RSVP.Queue() - .push(function () { - return increaseLoadingCounter(gadget); - }) - .push(function () { - return gadget.getDeclaredGadget('panel'); - }) - .push(function (panel_gadget) { - return panel_gadget.close(); - }) - .push(function () { - return gadget.getDeclaredGadget('editor_panel'); - }) - .push(function (editor_panel) { - return editor_panel.close(); - }) - .push(function () { - return gadget.getDeclaredGadget('router'); - }) - .push(function (router_gadget) { - return router_gadget.route(options); - }) - .push(function (route_result) { - return renderMainGadget( - gadget, - route_result.url, - route_result.options - ); - }) - .push(function (main_gadget) { - // Append loaded gadget in the page - if (main_gadget !== undefined) { - return main_gadget.getElement() - .push(function (fragment) { - var element = gadget.props.content_element, - content_container = document.createElement("div"); - content_container.className = "ui-content " + - (gadget.props.sub_header_class || ""); - // reset subheader indicator - delete gadget.props.sub_header_class; - - // go to the top of the page - window.scrollTo(0, 0); - - // Clear first to DOM, append after to reduce flickering/manip - while (element.firstChild) { - element.removeChild(element.firstChild); - } - content_container.appendChild(fragment); - element.appendChild(content_container); - - $(element).trigger("create"); - - return updateHeader(gadget); - // XXX Drop notification - // return header_gadget.notifyLoaded(); - }); - } - }) - .push(function () { - return decreaseLoadingCounter(gadget); - }, function (error) { - return decreaseLoadingCounter(gadget) - .push(function () { - throw error; - }); - }) - .push(undefined, function (error) { - return displayError(gadget, error); - }); - }) - - ///////////////////////////////// - // Handle sub gadgets services - ///////////////////////////////// - .allowPublicAcquisition('reportServiceError', function (param_list, - gadget_scope) { - if (gadget_scope === undefined) { - // don't fail in case of dropped subgadget (like previous page) - return; - } - return displayError(this, param_list[0]); - }) - - .declareService(function () { - //////////////////////////////////// - // Form submit listening. Prevent browser to automatically - // handle the form submit in case of a bug - //////////////////////////////////// - var gadget = this; - - function catchFormSubmit() { - return displayError(gadget, new Error("Unexpected form submit")); - } - - // Listen to form submit - return loopEventListener( - gadget.props.element, - 'submit', - false, - catchFormSubmit - ); - }); - -}(window, document, RSVP, rJS, loopEventListener, jQuery, - XMLHttpRequest, location, console)); \ No newline at end of file diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/rjs_gadget_erp5_js.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/rjs_gadget_erp5_js.xml deleted file mode 100644 index 3618cb87d29cd470ed8bbdb205544c7a7480cd15..0000000000000000000000000000000000000000 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/rjs_gadget_erp5_js.xml +++ /dev/null @@ -1,320 +0,0 @@ -<?xml version="1.0"?> -<ZopeData> - <record id="1" aka="AAAAAAAAAAE="> - <pickle> - <global name="Web Script" module="erp5.portal_type"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>_Access_contents_information_Permission</string> </key> - <value> - <tuple> - <string>Anonymous</string> - <string>Assignee</string> - <string>Assignor</string> - <string>Associate</string> - <string>Auditor</string> - <string>Manager</string> - <string>Owner</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Add_portal_content_Permission</string> </key> - <value> - <tuple> - <string>Assignee</string> - <string>Assignor</string> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Change_local_roles_Permission</string> </key> - <value> - <tuple> - <string>Assignor</string> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Modify_portal_content_Permission</string> </key> - <value> - <tuple> - <string>Assignee</string> - <string>Assignor</string> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_View_Permission</string> </key> - <value> - <tuple> - <string>Anonymous</string> - <string>Assignee</string> - <string>Assignor</string> - <string>Associate</string> - <string>Auditor</string> - <string>Manager</string> - <string>Owner</string> - </tuple> - </value> - </item> - <item> - <key> <string>content_md5</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>default_reference</string> </key> - <value> <string>erp5_launcher.js</string> </value> - </item> - <item> - <key> <string>description</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>rjs_gadget_erp5_js</string> </value> - </item> - <item> - <key> <string>language</string> </key> - <value> <string>en</string> </value> - </item> - <item> - <key> <string>portal_type</string> </key> - <value> <string>Web Script</string> </value> - </item> - <item> - <key> <string>short_title</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>title</string> </key> - <value> <string>OfficeJS Launcher JS</string> </value> - </item> - <item> - <key> <string>version</string> </key> - <value> <string>001</string> </value> - </item> - <item> - <key> <string>workflow_history</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> - </value> - </item> - </dictionary> - </pickle> - </record> - <record id="2" aka="AAAAAAAAAAI="> - <pickle> - <global name="PersistentMapping" module="Persistence.mapping"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>data</string> </key> - <value> - <dictionary> - <item> - <key> <string>document_publication_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> - </value> - </item> - <item> - <key> <string>edit_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> - </value> - </item> - <item> - <key> <string>processing_status_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent> - </value> - </item> - </dictionary> - </value> - </item> - </dictionary> - </pickle> - </record> - <record id="3" aka="AAAAAAAAAAM="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>publish_alive</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>romain</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1406898405.68</float> - <string>GMT</string> - </tuple> - </state> - </object> - </value> - </item> - <item> - <key> <string>validation_state</string> </key> - <value> <string>published_alive</string> </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> - <record id="4" aka="AAAAAAAAAAQ="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>edit</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>zope</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>serial</string> </key> - <value> <string>957.11877.38028.13977</string> </value> - </item> - <item> - <key> <string>state</string> </key> - <value> <string>current</string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1487945144.32</float> - <string>UTC</string> - </tuple> - </state> - </object> - </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> - <record id="5" aka="AAAAAAAAAAU="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>detect_converted_file</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>romain</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>external_processing_state</string> </key> - <value> <string>converted</string> </value> - </item> - <item> - <key> <string>serial</string> </key> - <value> <string>0.0.0.0</string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1405426548.84</float> - <string>GMT</string> - </tuple> - </state> - </object> - </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/rjs_gadget_global_js.js b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/rjs_gadget_global_js.js deleted file mode 100644 index a3370c42f35c1e1c4e22ad0ea5b4213ea60b7da0..0000000000000000000000000000000000000000 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/rjs_gadget_global_js.js +++ /dev/null @@ -1,129 +0,0 @@ -/*global window, RSVP, FileReader */ -/*jslint indent: 2, maxerr: 3, unparam: true */ -(function (window, RSVP, FileReader) { - "use strict"; - - window.loopEventListener = function (target, type, useCapture, callback, - prevent_default) { - ////////////////////////// - // Infinite event listener (promise is never resolved) - // eventListener is removed when promise is cancelled/rejected - ////////////////////////// - var handle_event_callback, - callback_promise; - - if (prevent_default === undefined) { - prevent_default = true; - } - - function cancelResolver() { - if ((callback_promise !== undefined) && - (typeof callback_promise.cancel === "function")) { - callback_promise.cancel(); - } - } - - function canceller() { - if (handle_event_callback !== undefined) { - target.removeEventListener(type, handle_event_callback, useCapture); - } - cancelResolver(); - } - function itsANonResolvableTrap(resolve, reject) { - var result; - handle_event_callback = function (evt) { - if (prevent_default) { - evt.stopPropagation(); - evt.preventDefault(); - } - - cancelResolver(); - - try { - result = callback(evt); - } catch (e) { - result = RSVP.reject(e); - } - - callback_promise = result; - new RSVP.Queue() - .push(function () { - return result; - }) - .push(undefined, function (error) { - if (!(error instanceof RSVP.CancellationError)) { - canceller(); - reject(error); - } - }); - }; - - target.addEventListener(type, handle_event_callback, useCapture); - } - return new RSVP.Promise(itsANonResolvableTrap, canceller); - }; - - window.promiseEventListener = function (target, type, useCapture) { - ////////////////////////// - // Resolve the promise as soon as the event is triggered - // eventListener is removed when promise is cancelled/resolved/rejected - ////////////////////////// - var handle_event_callback; - - function canceller() { - target.removeEventListener(type, handle_event_callback, useCapture); - } - - function resolver(resolve) { - handle_event_callback = function (evt) { - canceller(); - evt.stopPropagation(); - evt.preventDefault(); - resolve(evt); - return false; - }; - - target.addEventListener(type, handle_event_callback, useCapture); - } - return new RSVP.Promise(resolver, canceller); - }; - - window.promiseReadAsText = function (file) { - return new RSVP.Promise(function (resolve, reject) { - var reader = new FileReader(); - reader.onload = function (evt) { - resolve(evt.target.result); - }; - reader.onerror = function (evt) { - reject(evt); - }; - reader.readAsText(file); - }); - }; - - window.promiseDoWhile = function (loopFunction, input) { - // calls loopFunction(input) until it returns a non positive value - - // this queue is to protect the inner loop queue from the - // `promiseDoWhile` caller, avoiding it to enqueue the inner - // loop queue. - return new RSVP.Queue() - .push(function () { - // here is the inner loop queue - var loop_queue = new RSVP.Queue(); - function iterate(previous_iteration_result) { - if (!previous_iteration_result) { - return input; - } - loop_queue.push(iterate); - return loopFunction(input); - } - return loop_queue - .push(function () { - return loopFunction(input); - }) - .push(iterate); - }); - }; - -}(window, RSVP, FileReader)); \ No newline at end of file diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/rjs_gadget_global_js.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/rjs_gadget_global_js.xml deleted file mode 100644 index 5ed325cf41a98a5d1cb1ec1fd2da03704e78cae7..0000000000000000000000000000000000000000 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/rjs_gadget_global_js.xml +++ /dev/null @@ -1,320 +0,0 @@ -<?xml version="1.0"?> -<ZopeData> - <record id="1" aka="AAAAAAAAAAE="> - <pickle> - <global name="Web Script" module="erp5.portal_type"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>_Access_contents_information_Permission</string> </key> - <value> - <tuple> - <string>Anonymous</string> - <string>Assignee</string> - <string>Assignor</string> - <string>Associate</string> - <string>Auditor</string> - <string>Manager</string> - <string>Owner</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Add_portal_content_Permission</string> </key> - <value> - <tuple> - <string>Assignee</string> - <string>Assignor</string> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Change_local_roles_Permission</string> </key> - <value> - <tuple> - <string>Assignor</string> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Modify_portal_content_Permission</string> </key> - <value> - <tuple> - <string>Assignee</string> - <string>Assignor</string> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_View_Permission</string> </key> - <value> - <tuple> - <string>Anonymous</string> - <string>Assignee</string> - <string>Assignor</string> - <string>Associate</string> - <string>Auditor</string> - <string>Manager</string> - <string>Owner</string> - </tuple> - </value> - </item> - <item> - <key> <string>content_md5</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>default_reference</string> </key> - <value> <string>gadget_global.js</string> </value> - </item> - <item> - <key> <string>description</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>rjs_gadget_global_js</string> </value> - </item> - <item> - <key> <string>language</string> </key> - <value> <string>en</string> </value> - </item> - <item> - <key> <string>portal_type</string> </key> - <value> <string>Web Script</string> </value> - </item> - <item> - <key> <string>short_title</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>title</string> </key> - <value> <string>gadget_global.js</string> </value> - </item> - <item> - <key> <string>version</string> </key> - <value> <string>001</string> </value> - </item> - <item> - <key> <string>workflow_history</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> - </value> - </item> - </dictionary> - </pickle> - </record> - <record id="2" aka="AAAAAAAAAAI="> - <pickle> - <global name="PersistentMapping" module="Persistence.mapping"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>data</string> </key> - <value> - <dictionary> - <item> - <key> <string>document_publication_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> - </value> - </item> - <item> - <key> <string>edit_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> - </value> - </item> - <item> - <key> <string>processing_status_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent> - </value> - </item> - </dictionary> - </value> - </item> - </dictionary> - </pickle> - </record> - <record id="3" aka="AAAAAAAAAAM="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>publish_alive</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>romain</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1406898405.88</float> - <string>GMT</string> - </tuple> - </state> - </object> - </value> - </item> - <item> - <key> <string>validation_state</string> </key> - <value> <string>published_alive</string> </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> - <record id="4" aka="AAAAAAAAAAQ="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>edit</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>zope</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>serial</string> </key> - <value> <string>947.51167.64410.14796</string> </value> - </item> - <item> - <key> <string>state</string> </key> - <value> <string>current</string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1450099422.01</float> - <string>UTC</string> - </tuple> - </state> - </object> - </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> - <record id="5" aka="AAAAAAAAAAU="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>detect_converted_file</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>romain</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>external_processing_state</string> </key> - <value> <string>converted</string> </value> - </item> - <item> - <key> <string>serial</string> </key> - <value> <string>0.0.0.0</string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1405522101.02</float> - <string>GMT</string> - </tuple> - </state> - </object> - </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/rjs_gadget_monitoring_html.html b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/rjs_gadget_monitoring_html.html deleted file mode 100644 index 3be117878d331e914ba2546b6ecc198e3b7ba9ea..0000000000000000000000000000000000000000 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/rjs_gadget_monitoring_html.html +++ /dev/null @@ -1,69 +0,0 @@ -<!DOCTYPE html> -<html manifest="${manifest_url}"> - <head> - <meta charset="utf-8"> - <meta name="viewport" content="width=device-width, initial-scale=1"> - <link rel="shortcut icon" href="favicon.ico"> - - <title>${application_title}</title> - - <link href="font-awesome/font-awesome.css" rel="stylesheet" type="text/css" /> - <link rel="stylesheet" href="jquerymobile.css"> - <link rel="stylesheet" href="gadget_erp5.css"> - - <script data-renderjs-configuration="application_title" type="text/x-renderjs-configuration">${application_title}</script> - <script data-renderjs-configuration="panel_gadget" type="text/x-renderjs-configuration">${panel_gadget}</script> - <script data-renderjs-configuration="action_view" type="text/x-renderjs-configuration">${action_view}</script> - <script data-renderjs-configuration="default_view_reference" type="text/x-renderjs-configuration">${default_view_reference}</script> - <script data-renderjs-configuration="hateoas_url" type="text/x-renderjs-configuration">${hateoas_url}</script> - <script data-renderjs-configuration="frontpage_gadget" type="text/x-renderjs-configuration">${frontpage_gadget}</script> - <script data-renderjs-configuration="language_map" type="text/x-renderjs-configuration">${language_map}</script> - <script data-renderjs-configuration="default_selected_language" type="text/x-renderjs-configuration">${default_selected_language}</script> - <script data-renderjs-configuration="website_url_set" type="text/x-renderjs-configuration">${website_url_set}</script> - - <script src="jquery.js"></script> - <script src="jquerymobile.js"></script> - <script src="rsvp.js"></script> - <script src="renderjs.js"></script> - <script src="gadget_global.js" ></script> - <script src="erp5_launcher.js"></script> - - </head> - - <body> - <div data-role="page"> - - <div data-gadget-url="gadget_jio.html" - data-gadget-scope="setting_gadget" - data-gadget-sandbox="public"></div> - - <div data-gadget-url="${router_gadget}" - data-gadget-scope="router" - data-gadget-sandbox="public"></div> - - <div data-gadget-url="${translation_gadget}" - data-gadget-scope="translation_gadget" - data-gadget-sandbox="public"></div> - - <div data-gadget-url="${header_gadget}" - data-gadget-scope="header" - data-gadget-sandbox="public"></div> - - <div data-gadget-url="${jio_gadget}" - data-gadget-scope="jio_gadget" - data-gadget-sandbox="public"></div> - - - <div data-gadget-url="gadget_erp5_editor_panel.html" - data-gadget-scope="editor_panel" - data-gadget-sandbox="public"></div> - - <div data-gadget-url="${panel_gadget}" - data-gadget-scope="panel" - data-gadget-sandbox="public"></div> - - <div role="main" class="ui-content gadget-content"></div> - </div> - - </body> -</html> \ No newline at end of file diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/rjs_jquerymobile_css.css b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/rjs_jquerymobile_css.css deleted file mode 100644 index 2bff5c1015163bdb296a8befb750cc16626ca397..0000000000000000000000000000000000000000 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/rjs_jquerymobile_css.css +++ /dev/null @@ -1,4711 +0,0 @@ -/*! -* jQuery Mobile 1.5.0-pre -* Git HEAD hash: 39cb20fe26969941329347e2f41a222f94c63138 <> Date: Tue Aug 26 2014 13:31:05 UTC -* http://jquerymobile.com -* -* Copyright 2010, 2014 jQuery Foundation, Inc. and othercontributors -* Released under the MIT license. -* http://jquery.org/license -* -*/ - - -/* SVG icons */ -.ui-icon-action:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20style%3D%22fill%3A%23FFFFFF%3B%22%20d%3D%22M9%2C5v3l5-4L9%2C0v3c0%2C0-5%2C0-5%2C7C6%2C5%2C9%2C5%2C9%2C5z%20M11%2C12H2V5h1l2-2H0v11h13V7l-2%2C2V12z%22%2F%3E%3C%2Fsvg%3E"); -} -.ui-icon-alert:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20style%3D%22fill%3A%23FFFFFF%3B%22%20d%3D%22M7%2C0L0%2C12h14L7%2C0z%20M7%2C11c-0.553%2C0-1-0.447-1-1s0.447-1%2C1-1c0.553%2C0%2C1%2C0.447%2C1%2C1S7.553%2C11%2C7%2C11z%20M7%2C8%20C6.447%2C8%2C6%2C7.553%2C6%2C7V5c0-0.553%2C0.447-1%2C1-1c0.553%2C0%2C1%2C0.447%2C1%2C1v2C8%2C7.553%2C7.553%2C8%2C7%2C8z%22%2F%3E%3C%2Fsvg%3E"); -} -.ui-icon-arrow-d-l:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpolygon%20fill%3D%22%23FFF%22%20points%3D%2214%2C3%2011%2C0%203.5%2C7.5%200%2C4%200%2C14%2010%2C14%206.5%2C10.5%20%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E"); -} -.ui-icon-arrow-d-r:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpolygon%20fill%3D%22%23FFF%22%20points%3D%2210.5%2C7.5%203%2C0%200%2C3%207.5%2C10.5%204%2C14%2014%2C14%2014%2C4%20%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E"); -} -.ui-icon-arrow-d:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpolygon%20fill%3D%22%23FFF%22%20points%3D%229%2C7%209%2C0%205%2C0%205%2C7%200%2C7%207%2C14%2014%2C7%20%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E"); -} -.ui-icon-arrow-l:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpolygon%20fill%3D%22%23FFF%22%20points%3D%227%2C5%207%2C0%200%2C7%207%2C14%207%2C9%2014%2C9%2014%2C5%20%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E"); -} -.ui-icon-arrow-r:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpolygon%20fill%3D%22%23FFF%22%20points%3D%2214%2C7%207%2C0%207%2C5%200%2C5%200%2C9%207%2C9%207%2C14%20%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E"); -} -.ui-icon-arrow-u-l:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpolygon%20fill%3D%22%23FFF%22%20points%3D%2214%2C11%206.5%2C3.5%2010%2C0%200%2C0%200%2C10%203.5%2C6.5%2011%2C14%20%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E"); -} -.ui-icon-arrow-u-r:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpolygon%20fill%3D%22%23FFF%22%20points%3D%2214%2C0%204%2C0%207.5%2C3.5%200%2C11%203%2C14%2010.5%2C6.5%2014%2C10%20%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E"); -} -.ui-icon-arrow-u:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpolygon%20fill%3D%22%23FFF%22%20points%3D%227%2C0%200%2C7%205%2C7%205%2C14%209%2C14%209%2C7%2014%2C7%20%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E"); -} -.ui-icon-audio:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214.018px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014.018%2014%22%20style%3D%22enable-background%3Anew%200%200%2014.018%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20fill%3D%22%23FFF%22%20d%3D%22M1%2C4C0.447%2C4%2C0%2C4.447%2C0%2C5v4c0%2C0.553%2C0.447%2C1%2C1%2C1h1l4%2C4V0L2%2C4H1z%20M10.346%2C7c0-1.699-1.042-3.154-2.546-3.867L6.982%2C4.68%20C7.885%2C5.107%2C8.51%2C5.98%2C8.51%2C7S7.885%2C8.893%2C6.982%2C9.32L7.8%2C10.867C9.304%2C10.154%2C10.346%2C8.699%2C10.346%2C7z%20M9.447%2C0.017L8.618%2C1.586%20C10.723%2C2.584%2C12.182%2C4.621%2C12.182%2C7s-1.459%2C4.416-3.563%2C5.414l0.829%2C1.569c2.707-1.283%2C4.57-3.925%2C4.57-6.983%20S12.154%2C1.3%2C9.447%2C0.017z%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E"); -} -.ui-icon-back:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20style%3D%22fill%3A%23FFFFFF%3B%22%20d%3D%22M5%2C3V0L1%2C4l4%2C4V5c0%2C0%2C6%2C0%2C6%2C3s-5%2C4-5%2C4v2c0%2C0%2C7-1%2C7-6C13%2C4%2C8%2C3%2C5%2C3z%22%2F%3E%3C%2Fsvg%3E"); -} -.ui-icon-bars:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20style%3D%22fill%3A%23FFFFFF%3B%22%20d%3D%22M1%2C4h12c0.553%2C0%2C1-0.447%2C1-1s-0.447-1-1-1H1C0.447%2C2%2C0%2C2.447%2C0%2C3S0.447%2C4%2C1%2C4z%20M13%2C6H1%20C0.447%2C6%2C0%2C6.447%2C0%2C7c0%2C0.553%2C0.447%2C1%2C1%2C1h12c0.553%2C0%2C1-0.447%2C1-1C14%2C6.447%2C13.553%2C6%2C13%2C6z%20M13%2C10H1c-0.553%2C0-1%2C0.447-1%2C1%20s0.447%2C1%2C1%2C1h12c0.553%2C0%2C1-0.447%2C1-1S13.553%2C10%2C13%2C10z%22%2F%3E%3C%2Fsvg%3E"); -} -.ui-icon-bullets:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20style%3D%22fill%3A%23FFFFFF%3B%22%20d%3D%22M5%2C4h8c0.553%2C0%2C1-0.447%2C1-1s-0.447-1-1-1H5C4.447%2C2%2C4%2C2.447%2C4%2C3S4.447%2C4%2C5%2C4z%20M13%2C6H5%20C4.447%2C6%2C4%2C6.447%2C4%2C7c0%2C0.553%2C0.447%2C1%2C1%2C1h8c0.553%2C0%2C1-0.447%2C1-1C14%2C6.447%2C13.553%2C6%2C13%2C6z%20M13%2C10H5c-0.553%2C0-1%2C0.447-1%2C1%20s0.447%2C1%2C1%2C1h8c0.553%2C0%2C1-0.447%2C1-1S13.553%2C10%2C13%2C10z%20M1%2C2C0.447%2C2%2C0%2C2.447%2C0%2C3s0.447%2C1%2C1%2C1s1-0.447%2C1-1S1.553%2C2%2C1%2C2z%20M1%2C6%20C0.447%2C6%2C0%2C6.447%2C0%2C7c0%2C0.553%2C0.447%2C1%2C1%2C1s1-0.447%2C1-1C2%2C6.447%2C1.553%2C6%2C1%2C6z%20M1%2C10c-0.553%2C0-1%2C0.447-1%2C1s0.447%2C1%2C1%2C1s1-0.447%2C1-1%20S1.553%2C10%2C1%2C10z%22%2F%3E%3C%2Fsvg%3E"); -} -.ui-icon-calendar:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20fill%3D%22%23FFF%22%20d%3D%22M0%2C8h2V6H0V8z%20M3%2C8h2V6H3V8z%20M6%2C8h2V6H6V8z%20M9%2C8h2V6H9V8z%20M12%2C8h2V6h-2V8z%20M0%2C11h2V9H0V11z%20M3%2C11h2V9H3V11z%20M6%2C11h2V9H6V11z%20%20M9%2C11h2V9H9V11z%20M12%2C11h2V9h-2V11z%20M0%2C14h2v-2H0V14z%20M3%2C14h2v-2H3V14z%20M6%2C14h2v-2H6V14z%20M9%2C14h2v-2H9V14z%20M12%2C1%20c0-0.553-0.447-1-1-1s-1%2C0.447-1%2C1H4c0-0.553-0.447-1-1-1S2%2C0.447%2C2%2C1H0v4h14V1H12z%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E"); -} -.ui-icon-camera:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20style%3D%22fill%3A%23FFFFFF%3B%22%20d%3D%22M12%2C2.5H9.908c-0.206-0.581-0.756-1-1.408-1h-3c-0.652%2C0-1.202%2C0.419-1.408%2C1H2c-1.104%2C0-2%2C0.896-2%2C2%20v6c0%2C1.104%2C0.896%2C2%2C2%2C2h10c1.104%2C0%2C2-0.896%2C2-2v-6C14%2C3.396%2C13.104%2C2.5%2C12%2C2.5z%20M7%2C10.5c-1.657%2C0-3-1.344-3-3c0-1.657%2C1.343-3%2C3-3%20s3%2C1.343%2C3%2C3C10%2C9.156%2C8.657%2C10.5%2C7%2C10.5z%20M7%2C5.5c-1.104%2C0-2%2C0.896-2%2C2c0%2C1.104%2C0.896%2C2%2C2%2C2c1.104%2C0%2C2-0.896%2C2-2%20C9%2C6.396%2C8.104%2C5.5%2C7%2C5.5z%22%2F%3E%3C%2Fsvg%3E"); -} -.ui-icon-carat-d:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpolygon%20style%3D%22fill%3A%23FFFFFF%3B%22%20points%3D%2211.949%2C3.404%207%2C8.354%202.05%2C3.404%20-0.071%2C5.525%207%2C12.596%2014.07%2C5.525%20%22%2F%3E%3C%2Fsvg%3E"); -} -.ui-icon-carat-l:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpolygon%20style%3D%22fill%3A%23FFFFFF%3B%22%20points%3D%2210.596%2C11.949%205.646%2C7%2010.596%2C2.05%208.475%2C-0.071%201.404%2C7%208.475%2C14.07%20%22%2F%3E%3C%2Fsvg%3E"); -} -.ui-icon-carat-r:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpolygon%20style%3D%22fill%3A%23FFFFFF%3B%22%20points%3D%223.404%2C2.051%208.354%2C7%203.404%2C11.95%205.525%2C14.07%2012.596%2C7%205.525%2C-0.071%20%22%2F%3E%3C%2Fsvg%3E"); -} -.ui-icon-carat-u:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpolygon%20style%3D%22fill%3A%23FFFFFF%3B%22%20points%3D%222.051%2C10.596%207%2C5.646%2011.95%2C10.596%2014.07%2C8.475%207%2C1.404%20-0.071%2C8.475%20%22%2F%3E%3C%2Fsvg%3E"); -} -.ui-icon-check:after, -/* Used ui-checkbox-on twice to increase specificity. If active state has background-image for gradient this rule overrides. */ -html .ui-btn.ui-checkbox-on.ui-checkbox-on:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpolygon%20style%3D%22fill%3A%23FFFFFF%3B%22%20points%3D%2214%2C4%2011%2C1%205.003%2C6.997%203%2C5%200%2C8%204.966%2C13%204.983%2C12.982%205%2C13%20%22%2F%3E%3C%2Fsvg%3E"); -} -.ui-icon-clock:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20fill%3D%22%23FFF%22%20d%3D%22M7%2C0C3.134%2C0%2C0%2C3.134%2C0%2C7s3.134%2C7%2C7%2C7s7-3.134%2C7-7S10.866%2C0%2C7%2C0z%20M7%2C12c-2.762%2C0-5-2.238-5-5s2.238-5%2C5-5s5%2C2.238%2C5%2C5%20S9.762%2C12%2C7%2C12z%20M9%2C6H8V4c0-0.553-0.447-1-1-1S6%2C3.447%2C6%2C4v3c0%2C0.553%2C0.447%2C1%2C1%2C1h2c0.553%2C0%2C1-0.447%2C1-1S9.553%2C6%2C9%2C6z%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E"); -} -.ui-icon-cloud:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20style%3D%22fill%3A%23FFFFFF%3B%22%20d%3D%22M14%2C9.5c0-0.793-0.465-1.473-1.134-1.795C12.949%2C7.484%2C13%2C7.249%2C13%2C7c0-1.104-0.896-2-2-2%20c-0.158%2C0-0.311%2C0.023-0.457%2C0.058C9.816%2C3.549%2C8.286%2C2.5%2C6.5%2C2.5c-2.33%2C0-4.224%2C1.777-4.454%2C4.046C0.883%2C6.76%2C0%2C7.773%2C0%2C9%20c0%2C1.381%2C1.119%2C2.5%2C2.5%2C2.5h10v-0.07C13.361%2C11.206%2C14%2C10.432%2C14%2C9.5z%22%2F%3E%3C%2Fsvg%3E"); -} -.ui-icon-comment:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20fill%3D%22%23FFF%22%20d%3D%22M12%2C0H2C0.896%2C0%2C0%2C0.896%2C0%2C2v7c0%2C1.104%2C0.896%2C2%2C2%2C2h1v3l3-3h6c1.104%2C0%2C2-0.896%2C2-2V2C14%2C0.896%2C13.104%2C0%2C12%2C0z%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E"); -} -.ui-icon-delete:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpolygon%20fill%3D%22%23FFF%22%20points%3D%2214%2C3%2011%2C0%207%2C4%203%2C0%200%2C3%204%2C7%200%2C11%203%2C14%207%2C10%2011%2C14%2014%2C11%2010%2C7%20%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E"); -} -.ui-icon-edit:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20fill%3D%22%23FFF%22%20d%3D%22M1%2C10l-1%2C4l4-1l7-7L8%2C3L1%2C10z%20M11%2C0L9%2C2l3%2C3l2-2L11%2C0z%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E"); -} -.ui-icon-eye:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20style%3D%22fill%3A%23FFFFFF%3B%22%20d%3D%22M7%2C2C3%2C2%2C0%2C7%2C0%2C7s3%2C5%2C7%2C5s7-5%2C7-5S11%2C2%2C7%2C2z%20M7%2C10c-1.657%2C0-3-1.344-3-3c0-1.657%2C1.343-3%2C3-3%20s3%2C1.343%2C3%2C3C10%2C8.656%2C8.657%2C10%2C7%2C10z%20M7%2C6C6.448%2C6%2C6%2C6.447%2C6%2C7c0%2C0.553%2C0.448%2C1%2C1%2C1s1-0.447%2C1-1C8%2C6.447%2C7.552%2C6%2C7%2C6z%22%2F%3E%3C%2Fsvg%3E"); -} -.ui-icon-forbidden:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20fill%3D%22%23FFF%22%20d%3D%22M12.601%2C11.187C13.476%2C10.018%2C14%2C8.572%2C14%2C7c0-3.866-3.134-7-7-7C5.428%2C0%2C3.982%2C0.524%2C2.813%2C1.399L2.757%2C1.343L2.053%2C2.048%20L2.048%2C2.053L1.343%2C2.758l0.056%2C0.056C0.524%2C3.982%2C0%2C5.428%2C0%2C7c0%2C3.866%2C3.134%2C7%2C7%2C7c1.572%2C0%2C3.018-0.524%2C4.187-1.399l0.056%2C0.057%20l0.705-0.705l0.005-0.005l0.705-0.705L12.601%2C11.187z%20M7%2C2c2.761%2C0%2C5%2C2.238%2C5%2C5c0%2C1.019-0.308%2C1.964-0.832%2C2.754L4.246%2C2.832%20C5.036%2C2.308%2C5.981%2C2%2C7%2C2z%20M7%2C12c-2.761%2C0-5-2.238-5-5c0-1.019%2C0.308-1.964%2C0.832-2.754l6.922%2C6.922C8.964%2C11.692%2C8.019%2C12%2C7%2C12z%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E"); -} -.ui-icon-forward:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20style%3D%22fill%3A%23FFFFFF%3B%22%20d%3D%22M13%2C4L9%2C0v3C6%2C3%2C1%2C4%2C1%2C8c0%2C5%2C7%2C6%2C7%2C6v-2c0%2C0-5-1-5-4s6-3%2C6-3v3L13%2C4z%22%2F%3E%3C%2Fsvg%3E"); -} -.ui-icon-gear:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20fill%3D%22%23FFF%22%20d%3D%22M13.621%2C5.904l-1.036-0.259c-0.168-0.042-0.303-0.168-0.355-0.332c-0.092-0.284-0.205-0.559-0.339-0.82%20c-0.079-0.153-0.073-0.337%2C0.017-0.486l0.549-0.915c0.118-0.196%2C0.088-0.448-0.075-0.61l-0.862-0.863%20c-0.162-0.163-0.414-0.193-0.611-0.075l-0.916%2C0.55C9.844%2C2.182%2C9.659%2C2.188%2C9.506%2C2.109C9.244%2C1.975%2C8.97%2C1.861%2C8.686%2C1.77%20c-0.165-0.052-0.29-0.187-0.332-0.354L8.095%2C0.379C8.039%2C0.156%2C7.839%2C0%2C7.609%2C0H6.391c-0.229%2C0-0.43%2C0.156-0.485%2C0.379L5.646%2C1.415%20C5.604%2C1.582%2C5.479%2C1.718%2C5.313%2C1.77c-0.284%2C0.092-0.559%2C0.206-0.82%2C0.34C4.339%2C2.188%2C4.155%2C2.182%2C4.007%2C2.093L3.092%2C1.544%20c-0.196-0.118-0.448-0.087-0.61%2C0.075L1.619%2C2.481C1.457%2C2.644%2C1.426%2C2.896%2C1.544%2C3.093l0.549%2C0.914%20c0.089%2C0.148%2C0.095%2C0.332%2C0.017%2C0.486C1.975%2C4.755%2C1.861%2C5.029%2C1.77%2C5.314c-0.053%2C0.164-0.188%2C0.29-0.354%2C0.332L0.379%2C5.905%20C0.156%2C5.961%2C0%2C6.161%2C0%2C6.391v1.219c0%2C0.229%2C0.156%2C0.43%2C0.379%2C0.485l1.036%2C0.26C1.582%2C8.396%2C1.717%2C8.521%2C1.77%2C8.687%20c0.092%2C0.284%2C0.205%2C0.559%2C0.34%2C0.82C2.188%2C9.66%2C2.182%2C9.844%2C2.093%2C9.993l-0.549%2C0.915c-0.118%2C0.195-0.087%2C0.448%2C0.075%2C0.61%20l0.862%2C0.862c0.162%2C0.163%2C0.414%2C0.193%2C0.61%2C0.075l0.915-0.549c0.148-0.089%2C0.332-0.095%2C0.486-0.017%20c0.262%2C0.135%2C0.536%2C0.248%2C0.82%2C0.34c0.165%2C0.053%2C0.291%2C0.187%2C0.332%2C0.354l0.259%2C1.036C5.96%2C13.844%2C6.16%2C14%2C6.39%2C14h1.22%20c0.229%2C0%2C0.43-0.156%2C0.485-0.379l0.259-1.036c0.042-0.167%2C0.168-0.302%2C0.333-0.354c0.284-0.092%2C0.559-0.205%2C0.82-0.34%20c0.154-0.078%2C0.338-0.072%2C0.486%2C0.017l0.914%2C0.549c0.197%2C0.118%2C0.449%2C0.088%2C0.611-0.074l0.862-0.863%20c0.163-0.162%2C0.193-0.415%2C0.075-0.611l-0.549-0.915c-0.089-0.148-0.096-0.332-0.017-0.485c0.134-0.263%2C0.248-0.536%2C0.339-0.82%20c0.053-0.165%2C0.188-0.291%2C0.355-0.333l1.036-0.259C13.844%2C8.039%2C14%2C7.839%2C14%2C7.609V6.39C14%2C6.16%2C13.844%2C5.96%2C13.621%2C5.904z%20M7%2C10%20c-1.657%2C0-3-1.343-3-3s1.343-3%2C3-3s3%2C1.343%2C3%2C3S8.657%2C10%2C7%2C10z%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E"); -} -.ui-icon-grid:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20fill%3D%22%23FFF%22%20d%3D%22M3%2C0H1C0.447%2C0%2C0%2C0.447%2C0%2C1v2c0%2C0.553%2C0.447%2C1%2C1%2C1h2c0.553%2C0%2C1-0.447%2C1-1V1C4%2C0.447%2C3.553%2C0%2C3%2C0z%20M8%2C0H6%20C5.447%2C0%2C5%2C0.447%2C5%2C1v2c0%2C0.553%2C0.447%2C1%2C1%2C1h2c0.553%2C0%2C1-0.447%2C1-1V1C9%2C0.447%2C8.553%2C0%2C8%2C0z%20M13%2C0h-2c-0.553%2C0-1%2C0.447-1%2C1v2%20c0%2C0.553%2C0.447%2C1%2C1%2C1h2c0.553%2C0%2C1-0.447%2C1-1V1C14%2C0.447%2C13.553%2C0%2C13%2C0z%20M3%2C5H1C0.447%2C5%2C0%2C5.447%2C0%2C6v2c0%2C0.553%2C0.447%2C1%2C1%2C1h2%20c0.553%2C0%2C1-0.447%2C1-1V6C4%2C5.447%2C3.553%2C5%2C3%2C5z%20M8%2C5H6C5.447%2C5%2C5%2C5.447%2C5%2C6v2c0%2C0.553%2C0.447%2C1%2C1%2C1h2c0.553%2C0%2C1-0.447%2C1-1V6%20C9%2C5.447%2C8.553%2C5%2C8%2C5z%20M13%2C5h-2c-0.553%2C0-1%2C0.447-1%2C1v2c0%2C0.553%2C0.447%2C1%2C1%2C1h2c0.553%2C0%2C1-0.447%2C1-1V6C14%2C5.447%2C13.553%2C5%2C13%2C5z%20M3%2C10%20H1c-0.553%2C0-1%2C0.447-1%2C1v2c0%2C0.553%2C0.447%2C1%2C1%2C1h2c0.553%2C0%2C1-0.447%2C1-1v-2C4%2C10.447%2C3.553%2C10%2C3%2C10z%20M8%2C10H6c-0.553%2C0-1%2C0.447-1%2C1v2%20c0%2C0.553%2C0.447%2C1%2C1%2C1h2c0.553%2C0%2C1-0.447%2C1-1v-2C9%2C10.447%2C8.553%2C10%2C8%2C10z%20M13%2C10h-2c-0.553%2C0-1%2C0.447-1%2C1v2c0%2C0.553%2C0.447%2C1%2C1%2C1h2%20c0.553%2C0%2C1-0.447%2C1-1v-2C14%2C10.447%2C13.553%2C10%2C13%2C10z%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E"); -} -.ui-icon-heart:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20style%3D%22fill%3A%23FFFFFF%3B%22%20d%3D%22M7%2C1.872c-2-3-7-2-7%2C2c0%2C3%2C4%2C7%2C4%2C7s2.417%2C2.479%2C3%2C3c0.583-0.521%2C3-3%2C3-3s4-4%2C4-7%20C14-0.128%2C9-1.128%2C7%2C1.872z%22%2F%3E%3C%2Fsvg%3E"); -} -.ui-icon-home:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpolygon%20fill%3D%22%23FFF%22%20points%3D%227%2C0%200%2C7%202%2C7%202%2C14%205%2C14%205%2C9%209%2C9%209%2C14%2012%2C14%2012%2C7%2014%2C7%20%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E"); -} -.ui-icon-info:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20fill%3D%22%23FFF%22%20d%3D%22M7%2C0C3.134%2C0%2C0%2C3.134%2C0%2C7s3.134%2C7%2C7%2C7s7-3.134%2C7-7S10.866%2C0%2C7%2C0z%20M7%2C2c0.552%2C0%2C1%2C0.447%2C1%2C1S7.552%2C4%2C7%2C4S6%2C3.553%2C6%2C3%20S6.448%2C2%2C7%2C2z%20M9%2C11H5v-1h1V6H5V5h3v5h1V11z%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E"); -} -.ui-icon-location:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20style%3D%22fill%3A%23FFFFFF%3B%22%20d%3D%22M7%2C0C4.791%2C0%2C3%2C1.791%2C3%2C4c0%2C2%2C4%2C10%2C4%2C10s4-8%2C4-10C11%2C1.791%2C9.209%2C0%2C7%2C0z%20M7%2C6C5.896%2C6%2C5%2C5.104%2C5%2C4%20s0.896-2%2C2-2c1.104%2C0%2C2%2C0.896%2C2%2C2S8.104%2C6%2C7%2C6z%22%2F%3E%3C%2Fsvg%3E"); -} -.ui-icon-lock:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20style%3D%22fill%3A%23FFFFFF%3B%22%20d%3D%22M12%2C6V5c0-2.762-2.238-5-5-5C4.239%2C0%2C2%2C2.238%2C2%2C5v1H1v8h12V6H12z%20M7.5%2C9.848V12h-1V9.848%20C6.207%2C9.673%2C6%2C9.366%2C6%2C9c0-0.553%2C0.448-1%2C1-1s1%2C0.447%2C1%2C1C8%2C9.366%2C7.793%2C9.673%2C7.5%2C9.848z%20M10%2C6H4V5c0-1.657%2C1.343-3%2C3-3%20s3%2C1.343%2C3%2C3V6z%22%2F%3E%3C%2Fsvg%3E"); -} -.ui-icon-mail:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20style%3D%22fill%3A%23FFFFFF%3B%22%20d%3D%22M0%2C3.75V12h14V3.75L7%2C9L0%2C3.75z%20M14%2C2H0l7%2C5L14%2C2z%22%2F%3E%3C%2Fsvg%3E"); -} -.ui-icon-minus:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Crect%20y%3D%225%22%20style%3D%22fill%3A%23FFFFFF%3B%22%20width%3D%2214%22%20height%3D%224%22%2F%3E%3C%2Fsvg%3E"); -} -.ui-icon-navigation:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpolygon%20style%3D%22fill%3A%23FFFFFF%3B%22%20points%3D%2213%2C1%200%2C6%207%2C7%208%2C14%20%22%2F%3E%3C%2Fsvg%3E"); -} -.ui-icon-phone:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%22-0.01%200.008%2014%2014%22%20style%3D%22enable-background%3Anew%20-0.01%200.008%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20style%3D%22fill%3A%23FFFFFF%3B%22%20d%3D%22M6.939%2C9.189C6.165%2C8.557%2C5.271%2C7.705%2C4.497%2C6.744C3.953%2C6.071%2C3.473%2C5.363%2C3.969%2C4.866l-3.482-3.48%20C-0.021%2C2.02-1.146%2C5.04%2C3.675%2C9.984c5.08%2C5.211%2C8.356%2C4.097%2C8.92%2C3.511l-3.396-3.4C8.725%2C10.568%2C8.113%2C10.146%2C6.939%2C9.189z%20%20M13.82%2C11.519v-0.004c0%2C0-2.648-2.646-2.649-2.647c-0.21-0.211-0.546-0.205-0.754%2C0.002L9.455%2C9.831l3.403%2C3.407%20c0%2C0%2C0.962-0.96%2C0.961-0.961l0.002-0.001C14.043%2C12.056%2C14.021%2C11.721%2C13.82%2C11.519z%20M5.192%2C3.644V3.642%20c0.222-0.222%2C0.2-0.557%2C0-0.758V2.881c0%2C0-2.726-2.725-2.727-2.726C2.255-0.055%2C1.92-0.05%2C1.712%2C0.156L0.751%2C1.121l3.479%2C3.482%20C4.231%2C4.604%2C5.192%2C3.645%2C5.192%2C3.644z%22%2F%3E%3C%2Fsvg%3E"); -} -.ui-icon-plus:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpolygon%20fill%3D%22%23FFF%22%20points%3D%2214%2C5%209%2C5%209%2C0%205%2C0%205%2C5%200%2C5%200%2C9%205%2C9%205%2C14%209%2C14%209%2C9%2014%2C9%20%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E"); -} -.ui-icon-power:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20style%3D%22fill%3A%23FFFFFF%3B%22%20d%3D%22M11.243%2C2.408c-0.392-0.401-1.024-0.401-1.415%2C0c-0.391%2C0.401-0.391%2C1.054%2C0%2C1.455%20C10.584%2C4.642%2C11%2C5.675%2C11%2C6.773s-0.416%2C2.133-1.172%2C2.91c-1.512%2C1.558-4.145%2C1.558-5.656%2C0C3.416%2C8.904%2C3%2C7.872%2C3%2C6.773%20C3%2C5.673%2C3.416%2C4.64%2C4.172%2C3.863c0.39-0.401%2C0.39-1.054%2C0-1.455c-0.391-0.401-1.024-0.401-1.415%2C0C1.624%2C3.574%2C1%2C5.125%2C1%2C6.773%20c0%2C1.647%2C0.624%2C3.199%2C1.757%2C4.365c1.134%2C1.166%2C2.64%2C1.809%2C4.243%2C1.809c1.604%2C0%2C3.109-0.645%2C4.243-1.811%20C12.376%2C9.975%2C13%2C8.423%2C13%2C6.773C13%2C5.125%2C12.376%2C3.574%2C11.243%2C2.408z%20M7%2C8.053c0.553%2C0%2C1-0.445%2C1-1v-6c0-0.553-0.447-1-1-1%20c-0.553%2C0-1%2C0.447-1%2C1v6C6%2C7.604%2C6.447%2C8.053%2C7%2C8.053z%22%2F%3E%3C%2Fsvg%3E"); -} -.ui-icon-recycle:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20style%3D%22fill%3A%23FFFFFF%3B%22%20d%3D%22M3%2C7h1L2%2C4L0%2C7h1c0%2C3.313%2C2.687%2C6%2C6%2C6c0.702%2C0%2C1.374-0.127%2C2-0.35v-2.205C8.41%2C10.789%2C7.732%2C11%2C7%2C11%20C4.791%2C11%2C3%2C9.209%2C3%2C7z%20M13%2C7c0-3.313-2.688-6-6-6C6.298%2C1%2C5.626%2C1.127%2C5%2C1.349v2.206C5.59%2C3.211%2C6.268%2C3%2C7%2C3c2.209%2C0%2C4%2C1.791%2C4%2C4%20h-1l2%2C3l2-3H13z%22%2F%3E%3C%2Fsvg%3E"); -} -.ui-icon-refresh:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214.001px%22%20height%3D%2214.002px%22%20viewBox%3D%220%200%2014.001%2014.002%22%20style%3D%22enable-background%3Anew%200%200%2014.001%2014.002%3B%22%20%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20fill%3D%22%23FFF%22%20d%3D%22M14.001%2C6.001v-6l-2.06%2C2.06c-0.423-0.424-0.897-0.809-1.44-1.122C7.153-0.994%2C2.872%2C0.153%2C0.939%2C3.501%20c-1.933%2C3.348-0.786%2C7.629%2C2.562%2C9.562c3.348%2C1.933%2C7.629%2C0.785%2C9.562-2.562l-1.732-1c-1.381%2C2.392-4.438%2C3.211-6.83%2C1.83%20s-3.211-4.438-1.83-6.83s4.438-3.211%2C6.83-1.83c0.389%2C0.225%2C0.718%2C0.506%2C1.02%2C0.81l-2.52%2C2.52H14.001z%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E"); -} -.ui-icon-search:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20style%3D%22fill%3A%23FFFFFF%3B%22%20d%3D%22M10.171%2C8.766c0.617-0.888%2C0.979-1.964%2C0.979-3.126c0-3.037-2.463-5.5-5.5-5.5s-5.5%2C2.463-5.5%2C5.5%20s2.463%2C5.5%2C5.5%2C5.5c1.152%2C0%2C2.223-0.355%2C3.104-0.962l3.684%2C3.683l1.414-1.414L10.171%2C8.766z%20M5.649%2C9.14c-1.933%2C0-3.5-1.567-3.5-3.5%20c0-1.933%2C1.567-3.5%2C3.5-3.5c1.933%2C0%2C3.5%2C1.567%2C3.5%2C3.5C9.149%2C7.572%2C7.582%2C9.14%2C5.649%2C9.14z%22%2F%3E%3C%2Fsvg%3E"); -} -.ui-icon-shop:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20style%3D%22fill%3A%23FFFFFF%3B%22%20d%3D%22M10%2C4V3c0-1.657-1.343-3-3-3S4%2C1.343%2C4%2C3v1H1v10h12V4H10z%20M4.5%2C6C4.224%2C6%2C4%2C5.776%2C4%2C5.5%20S4.224%2C5%2C4.5%2C5S5%2C5.224%2C5%2C5.5S4.776%2C6%2C4.5%2C6z%20M5%2C3c0-1.104%2C0.896-2%2C2-2c1.104%2C0%2C2%2C0.896%2C2%2C2v1H5V3z%20M9.5%2C6C9.225%2C6%2C9%2C5.776%2C9%2C5.5%20S9.225%2C5%2C9.5%2C5S10%2C5.224%2C10%2C5.5S9.775%2C6%2C9.5%2C6z%22%2F%3E%3C%2Fsvg%3E"); -} -.ui-icon-star:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpolygon%20style%3D%22fill%3A%23FFFFFF%3B%22%20points%3D%2214%2C5%209%2C5%207%2C0%205%2C5%200%2C5%204%2C8%202.625%2C13%207%2C10%2011.375%2C13%2010%2C8%20%22%2F%3E%3C%2Fsvg%3E"); -} -.ui-icon-tag:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20fill%3D%22%23FFF%22%20d%3D%22M5%2C0H0v5l9%2C9l5-5L5%2C0z%20M3%2C4C2.447%2C4%2C2%2C3.553%2C2%2C3s0.447-1%2C1-1s1%2C0.447%2C1%2C1S3.553%2C4%2C3%2C4z%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E"); -} -.ui-icon-user:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20fill%3D%22%23FFF%22%20d%3D%22M8.851%2C10.101c-0.18-0.399-0.2-0.763-0.153-1.104C9.383%2C8.49%2C9.738%2C7.621%2C9.891%2C6.465C10.493%2C6.355%2C10.5%2C5.967%2C10.5%2C5.5%20c0-0.437-0.008-0.804-0.502-0.94C9.999%2C4.539%2C10%2C4.521%2C10%2C4.5c0-2.103-1-4-2-4C8%2C0.5%2C7.5%2C0%2C6.5%2C0C5%2C0%2C4%2C1.877%2C4%2C4.5%20c0%2C0.021%2C0.001%2C0.039%2C0.002%2C0.06C3.508%2C4.696%2C3.5%2C5.063%2C3.5%2C5.5c0%2C0.467%2C0.007%2C0.855%2C0.609%2C0.965%20C4.262%2C7.621%2C4.617%2C8.49%2C5.303%2C8.997c0.047%2C0.341%2C0.026%2C0.704-0.153%2C1.104C1.503%2C10.503%2C0%2C12%2C0%2C12v2h14v-2%20C14%2C12%2C12.497%2C10.503%2C8.851%2C10.101z%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E"); -} -.ui-icon-video:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%20-2%2014%2014%22%20style%3D%22enable-background%3Anew%200%20-2%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20style%3D%22fill%3A%23FFFFFF%3B%22%20d%3D%22M8%2C0H2C0.896%2C0%2C0%2C0.896%2C0%2C2v6c0%2C1.104%2C0.896%2C2%2C2%2C2h6c1.104%2C0%2C2-0.896%2C2-2V5V2C10%2C0.896%2C9.104%2C0%2C8%2C0z%20%20M10%2C5l4%2C4V1L10%2C5z%22%2F%3E%3C%2Fsvg%3E"); -} -/* Alt icons */ -.ui-alt-icon.ui-icon-action:after, -.ui-alt-icon .ui-icon-action:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20d%3D%22M9%2C5v3l5-4L9%2C0v3c0%2C0-5%2C0-5%2C7C6%2C5%2C9%2C5%2C9%2C5z%20M11%2C12H2V5h1l2-2H0v11h13V7l-2%2C2V12z%22%2F%3E%3C%2Fsvg%3E"); -} -.ui-alt-icon.ui-icon-alert:after, -.ui-alt-icon .ui-icon-alert:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20d%3D%22M7%2C0L0%2C12h14L7%2C0z%20M7%2C11c-0.553%2C0-1-0.447-1-1s0.447-1%2C1-1c0.553%2C0%2C1%2C0.447%2C1%2C1S7.553%2C11%2C7%2C11z%20M7%2C8C6.447%2C8%2C6%2C7.553%2C6%2C7V5%20c0-0.553%2C0.447-1%2C1-1c0.553%2C0%2C1%2C0.447%2C1%2C1v2C8%2C7.553%2C7.553%2C8%2C7%2C8z%22%2F%3E%3C%2Fsvg%3E"); -} -.ui-alt-icon.ui-icon-arrow-d:after, -.ui-alt-icon .ui-icon-arrow-d:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpolygon%20points%3D%229%2C7%209%2C0%205%2C0%205%2C7%200%2C7%207%2C14%2014%2C7%20%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E"); -} -.ui-alt-icon.ui-icon-arrow-d-l:after, -.ui-alt-icon .ui-icon-arrow-d-l:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpolygon%20points%3D%2214%2C3%2011%2C0%203.5%2C7.5%200%2C4%200%2C14%2010%2C14%206.5%2C10.5%20%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E"); -} -.ui-alt-icon.ui-icon-arrow-d-r:after, -.ui-alt-icon .ui-icon-arrow-d-r:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpolygon%20points%3D%2210.5%2C7.5%203%2C0%200%2C3%207.5%2C10.5%204%2C14%2014%2C14%2014%2C4%20%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E"); -} -.ui-alt-icon.ui-icon-arrow-l:after, -.ui-alt-icon .ui-icon-arrow-l:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpolygon%20points%3D%227%2C5%207%2C0%200%2C7%207%2C14%207%2C9%2014%2C9%2014%2C5%20%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E"); -} -.ui-alt-icon.ui-icon-arrow-r:after, -.ui-alt-icon .ui-icon-arrow-r:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpolygon%20points%3D%2214%2C7%207%2C0%207%2C5%200%2C5%200%2C9%207%2C9%207%2C14%20%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E"); -} -.ui-alt-icon.ui-icon-arrow-u:after, -.ui-alt-icon .ui-icon-arrow-u:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpolygon%20points%3D%227%2C0%200%2C7%205%2C7%205%2C14%209%2C14%209%2C7%2014%2C7%20%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E"); -} -.ui-alt-icon.ui-icon-arrow-u-l:after, -.ui-alt-icon .ui-icon-arrow-u-l:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpolygon%20points%3D%2214%2C11%206.5%2C3.5%2010%2C0%200%2C0%200%2C10%203.5%2C6.5%2011%2C14%20%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E"); -} -.ui-alt-icon.ui-icon-arrow-u-r:after, -.ui-alt-icon .ui-icon-arrow-u-r:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpolygon%20points%3D%2214%2C0%204%2C0%207.5%2C3.5%200%2C11%203%2C14%2010.5%2C6.5%2014%2C10%20%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E"); -} -.ui-alt-icon.ui-icon-audio:after, -.ui-alt-icon .ui-icon-audio:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214.018px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014.018%2014%22%20style%3D%22enable-background%3Anew%200%200%2014.018%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20d%3D%22M1%2C4C0.447%2C4%2C0%2C4.447%2C0%2C5v4c0%2C0.553%2C0.447%2C1%2C1%2C1h1l4%2C4V0L2%2C4H1z%20M10.346%2C7c0-1.699-1.042-3.154-2.546-3.867L6.982%2C4.68%20C7.885%2C5.107%2C8.51%2C5.98%2C8.51%2C7S7.885%2C8.893%2C6.982%2C9.32L7.8%2C10.867C9.304%2C10.154%2C10.346%2C8.699%2C10.346%2C7z%20M9.447%2C0.017L8.618%2C1.586%20C10.723%2C2.584%2C12.182%2C4.621%2C12.182%2C7s-1.459%2C4.416-3.563%2C5.414l0.829%2C1.569c2.707-1.283%2C4.57-3.925%2C4.57-6.983%20S12.154%2C1.3%2C9.447%2C0.017z%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E"); -} -.ui-alt-icon.ui-icon-back:after, -.ui-alt-icon .ui-icon-back:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20d%3D%22M5%2C3V0L1%2C4l4%2C4V5c0%2C0%2C6%2C0%2C6%2C3s-5%2C4-5%2C4v2c0%2C0%2C7-1%2C7-6C13%2C4%2C8%2C3%2C5%2C3z%22%2F%3E%3C%2Fsvg%3E"); -} -.ui-alt-icon.ui-icon-bars:after, -.ui-alt-icon .ui-icon-bars:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20d%3D%22M1%2C4h12c0.553%2C0%2C1-0.447%2C1-1s-0.447-1-1-1H1C0.447%2C2%2C0%2C2.447%2C0%2C3S0.447%2C4%2C1%2C4z%20M13%2C6H1C0.447%2C6%2C0%2C6.447%2C0%2C7%20c0%2C0.553%2C0.447%2C1%2C1%2C1h12c0.553%2C0%2C1-0.447%2C1-1C14%2C6.447%2C13.553%2C6%2C13%2C6z%20M13%2C10H1c-0.553%2C0-1%2C0.447-1%2C1s0.447%2C1%2C1%2C1h12%20c0.553%2C0%2C1-0.447%2C1-1S13.553%2C10%2C13%2C10z%22%2F%3E%3C%2Fsvg%3E"); -} -.ui-alt-icon.ui-icon-bullets:after, -.ui-alt-icon .ui-icon-bullets:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20d%3D%22M5%2C4h8c0.553%2C0%2C1-0.447%2C1-1s-0.447-1-1-1H5C4.447%2C2%2C4%2C2.447%2C4%2C3S4.447%2C4%2C5%2C4z%20M13%2C6H5C4.447%2C6%2C4%2C6.447%2C4%2C7%20c0%2C0.553%2C0.447%2C1%2C1%2C1h8c0.553%2C0%2C1-0.447%2C1-1C14%2C6.447%2C13.553%2C6%2C13%2C6z%20M13%2C10H5c-0.553%2C0-1%2C0.447-1%2C1s0.447%2C1%2C1%2C1h8%20c0.553%2C0%2C1-0.447%2C1-1S13.553%2C10%2C13%2C10z%20M1%2C2C0.447%2C2%2C0%2C2.447%2C0%2C3s0.447%2C1%2C1%2C1s1-0.447%2C1-1S1.553%2C2%2C1%2C2z%20M1%2C6C0.447%2C6%2C0%2C6.447%2C0%2C7%20c0%2C0.553%2C0.447%2C1%2C1%2C1s1-0.447%2C1-1C2%2C6.447%2C1.553%2C6%2C1%2C6z%20M1%2C10c-0.553%2C0-1%2C0.447-1%2C1s0.447%2C1%2C1%2C1s1-0.447%2C1-1S1.553%2C10%2C1%2C10z%22%2F%3E%3C%2Fsvg%3E"); -} -.ui-alt-icon.ui-icon-calendar:after, -.ui-alt-icon .ui-icon-calendar:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20d%3D%22M0%2C8h2V6H0V8z%20M3%2C8h2V6H3V8z%20M6%2C8h2V6H6V8z%20M9%2C8h2V6H9V8z%20M12%2C8h2V6h-2V8z%20M0%2C11h2V9H0V11z%20M3%2C11h2V9H3V11z%20M6%2C11h2V9H6V11z%20%20M9%2C11h2V9H9V11z%20M12%2C11h2V9h-2V11z%20M0%2C14h2v-2H0V14z%20M3%2C14h2v-2H3V14z%20M6%2C14h2v-2H6V14z%20M9%2C14h2v-2H9V14z%20M12%2C1%20c0-0.553-0.447-1-1-1s-1%2C0.447-1%2C1H4c0-0.553-0.447-1-1-1S2%2C0.447%2C2%2C1H0v4h14V1H12z%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E"); -} -.ui-alt-icon.ui-icon-camera:after, -.ui-alt-icon .ui-icon-camera:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20d%3D%22M12%2C2.5H9.908c-0.206-0.581-0.756-1-1.408-1h-3c-0.652%2C0-1.202%2C0.419-1.408%2C1H2c-1.104%2C0-2%2C0.896-2%2C2v6c0%2C1.104%2C0.896%2C2%2C2%2C2%20h10c1.104%2C0%2C2-0.896%2C2-2v-6C14%2C3.396%2C13.104%2C2.5%2C12%2C2.5z%20M7%2C10.5c-1.657%2C0-3-1.344-3-3c0-1.657%2C1.343-3%2C3-3s3%2C1.343%2C3%2C3%20C10%2C9.156%2C8.657%2C10.5%2C7%2C10.5z%20M7%2C5.5c-1.104%2C0-2%2C0.896-2%2C2c0%2C1.104%2C0.896%2C2%2C2%2C2c1.104%2C0%2C2-0.896%2C2-2C9%2C6.396%2C8.104%2C5.5%2C7%2C5.5z%22%2F%3E%3C%2Fsvg%3E"); -} -.ui-alt-icon.ui-icon-carat-d:after, -.ui-alt-icon .ui-icon-carat-d:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpolygon%20points%3D%2211.949%2C3.404%207%2C8.354%202.05%2C3.404%20-0.071%2C5.525%207%2C12.596%2014.07%2C5.525%20%22%2F%3E%3C%2Fsvg%3E"); -} -.ui-alt-icon.ui-icon-carat-l:after, -.ui-alt-icon .ui-icon-carat-l:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpolygon%20points%3D%2210.596%2C11.949%205.646%2C7%2010.596%2C2.05%208.475%2C-0.071%201.404%2C7%208.475%2C14.07%20%22%2F%3E%3C%2Fsvg%3E"); -} -.ui-alt-icon.ui-icon-carat-r:after, -.ui-alt-icon .ui-icon-carat-r:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpolygon%20points%3D%223.404%2C2.051%208.354%2C7%203.404%2C11.95%205.525%2C14.07%2012.596%2C7%205.525%2C-0.071%20%22%2F%3E%3C%2Fsvg%3E"); -} -.ui-alt-icon.ui-icon-carat-u:after, -.ui-alt-icon .ui-icon-carat-u:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpolygon%20points%3D%222.051%2C10.596%207%2C5.646%2011.95%2C10.596%2014.07%2C8.475%207%2C1.404%20-0.071%2C8.475%20%22%2F%3E%3C%2Fsvg%3E"); -} -.ui-alt-icon.ui-icon-check:after, -.ui-alt-icon .ui-icon-check:after, -html .ui-alt-icon.ui-btn.ui-checkbox-on:after, -html .ui-alt-icon .ui-btn.ui-checkbox-on:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpolygon%20points%3D%2214%2C4%2011%2C1%205.003%2C6.997%203%2C5%200%2C8%204.966%2C13%204.983%2C12.982%205%2C13%20%22%2F%3E%3C%2Fsvg%3E"); -} -.ui-alt-icon.ui-icon-clock:after, -.ui-alt-icon .ui-icon-clock:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20d%3D%22M7%2C0C3.134%2C0%2C0%2C3.134%2C0%2C7s3.134%2C7%2C7%2C7s7-3.134%2C7-7S10.866%2C0%2C7%2C0z%20M7%2C12c-2.762%2C0-5-2.238-5-5s2.238-5%2C5-5s5%2C2.238%2C5%2C5%20S9.762%2C12%2C7%2C12z%20M9%2C6H8V4c0-0.553-0.447-1-1-1S6%2C3.447%2C6%2C4v3c0%2C0.553%2C0.447%2C1%2C1%2C1h2c0.553%2C0%2C1-0.447%2C1-1S9.553%2C6%2C9%2C6z%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E"); -} -.ui-alt-icon.ui-icon-cloud:after, -.ui-alt-icon .ui-icon-cloud:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20d%3D%22M14%2C9.5c0-0.793-0.465-1.473-1.134-1.795C12.949%2C7.484%2C13%2C7.249%2C13%2C7c0-1.104-0.896-2-2-2c-0.158%2C0-0.311%2C0.023-0.457%2C0.058%20C9.816%2C3.549%2C8.286%2C2.5%2C6.5%2C2.5c-2.33%2C0-4.224%2C1.777-4.454%2C4.046C0.883%2C6.76%2C0%2C7.773%2C0%2C9c0%2C1.381%2C1.119%2C2.5%2C2.5%2C2.5h10v-0.07%20C13.361%2C11.206%2C14%2C10.432%2C14%2C9.5z%22%2F%3E%3C%2Fsvg%3E"); -} -.ui-alt-icon.ui-icon-comment:after, -.ui-alt-icon .ui-icon-comment:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20d%3D%22M12%2C0H2C0.896%2C0%2C0%2C0.896%2C0%2C2v7c0%2C1.104%2C0.896%2C2%2C2%2C2h1v3l3-3h6c1.104%2C0%2C2-0.896%2C2-2V2C14%2C0.896%2C13.104%2C0%2C12%2C0z%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E"); -} -.ui-alt-icon.ui-icon-delete:after, -.ui-alt-icon .ui-icon-delete:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpolygon%20points%3D%2214%2C3%2011%2C0%207%2C4%203%2C0%200%2C3%204%2C7%200%2C11%203%2C14%207%2C10%2011%2C14%2014%2C11%2010%2C7%20%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E"); -} -.ui-alt-icon.ui-icon-edit:after, -.ui-alt-icon .ui-icon-edit:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20d%3D%22M1%2C10l-1%2C4l4-1l7-7L8%2C3L1%2C10z%20M11%2C0L9%2C2l3%2C3l2-2L11%2C0z%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E"); -} -.ui-alt-icon.ui-icon-eye:after, -.ui-alt-icon .ui-icon-eye:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20d%3D%22M7%2C2C3%2C2%2C0%2C7%2C0%2C7s3%2C5%2C7%2C5s7-5%2C7-5S11%2C2%2C7%2C2z%20M7%2C10c-1.657%2C0-3-1.344-3-3c0-1.657%2C1.343-3%2C3-3s3%2C1.343%2C3%2C3%20C10%2C8.656%2C8.657%2C10%2C7%2C10z%20M7%2C6C6.448%2C6%2C6%2C6.447%2C6%2C7c0%2C0.553%2C0.448%2C1%2C1%2C1s1-0.447%2C1-1C8%2C6.447%2C7.552%2C6%2C7%2C6z%22%2F%3E%3C%2Fsvg%3E"); -} -.ui-alt-icon.ui-icon-forbidden:after, -.ui-alt-icon .ui-icon-forbidden:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20d%3D%22M12.601%2C11.187C13.476%2C10.018%2C14%2C8.572%2C14%2C7c0-3.866-3.134-7-7-7C5.428%2C0%2C3.982%2C0.524%2C2.813%2C1.399L2.757%2C1.343L2.053%2C2.048%20L2.048%2C2.053L1.343%2C2.758l0.056%2C0.056C0.524%2C3.982%2C0%2C5.428%2C0%2C7c0%2C3.866%2C3.134%2C7%2C7%2C7c1.572%2C0%2C3.018-0.524%2C4.187-1.399l0.056%2C0.057%20l0.705-0.705l0.005-0.005l0.705-0.705L12.601%2C11.187z%20M7%2C2c2.761%2C0%2C5%2C2.238%2C5%2C5c0%2C1.019-0.308%2C1.964-0.832%2C2.754L4.246%2C2.832%20C5.036%2C2.308%2C5.981%2C2%2C7%2C2z%20M7%2C12c-2.761%2C0-5-2.238-5-5c0-1.019%2C0.308-1.964%2C0.832-2.754l6.922%2C6.922C8.964%2C11.692%2C8.019%2C12%2C7%2C12z%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E"); -} -.ui-alt-icon.ui-icon-forward:after, -.ui-alt-icon .ui-icon-forward:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20d%3D%22M13%2C4L9%2C0v3C6%2C3%2C1%2C4%2C1%2C8c0%2C5%2C7%2C6%2C7%2C6v-2c0%2C0-5-1-5-4s6-3%2C6-3v3L13%2C4z%22%2F%3E%3C%2Fsvg%3E"); -} -.ui-alt-icon.ui-icon-gear:after, -.ui-alt-icon .ui-icon-gear:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20d%3D%22M13.621%2C5.904l-1.036-0.259c-0.168-0.042-0.303-0.168-0.355-0.332c-0.092-0.284-0.205-0.559-0.339-0.82%20c-0.079-0.153-0.073-0.337%2C0.017-0.486l0.549-0.915c0.118-0.196%2C0.088-0.448-0.075-0.61l-0.862-0.863%20c-0.162-0.163-0.414-0.193-0.611-0.075l-0.916%2C0.55C9.844%2C2.182%2C9.659%2C2.188%2C9.506%2C2.109C9.244%2C1.975%2C8.97%2C1.861%2C8.686%2C1.77%20c-0.165-0.052-0.29-0.187-0.332-0.354L8.095%2C0.379C8.039%2C0.156%2C7.839%2C0%2C7.609%2C0H6.391c-0.229%2C0-0.43%2C0.156-0.485%2C0.379L5.646%2C1.415%20C5.604%2C1.582%2C5.479%2C1.718%2C5.313%2C1.77c-0.284%2C0.092-0.559%2C0.206-0.82%2C0.34C4.339%2C2.188%2C4.155%2C2.182%2C4.007%2C2.093L3.092%2C1.544%20c-0.196-0.118-0.448-0.087-0.61%2C0.075L1.619%2C2.481C1.457%2C2.644%2C1.426%2C2.896%2C1.544%2C3.093l0.549%2C0.914%20c0.089%2C0.148%2C0.095%2C0.332%2C0.017%2C0.486C1.975%2C4.755%2C1.861%2C5.029%2C1.77%2C5.314c-0.053%2C0.164-0.188%2C0.29-0.354%2C0.332L0.379%2C5.905%20C0.156%2C5.961%2C0%2C6.161%2C0%2C6.391v1.219c0%2C0.229%2C0.156%2C0.43%2C0.379%2C0.485l1.036%2C0.26C1.582%2C8.396%2C1.717%2C8.521%2C1.77%2C8.687%20c0.092%2C0.284%2C0.205%2C0.559%2C0.34%2C0.82C2.188%2C9.66%2C2.182%2C9.844%2C2.093%2C9.993l-0.549%2C0.915c-0.118%2C0.195-0.087%2C0.448%2C0.075%2C0.61%20l0.862%2C0.862c0.162%2C0.163%2C0.414%2C0.193%2C0.61%2C0.075l0.915-0.549c0.148-0.089%2C0.332-0.095%2C0.486-0.017%20c0.262%2C0.135%2C0.536%2C0.248%2C0.82%2C0.34c0.165%2C0.053%2C0.291%2C0.187%2C0.332%2C0.354l0.259%2C1.036C5.96%2C13.844%2C6.16%2C14%2C6.39%2C14h1.22%20c0.229%2C0%2C0.43-0.156%2C0.485-0.379l0.259-1.036c0.042-0.167%2C0.168-0.302%2C0.333-0.354c0.284-0.092%2C0.559-0.205%2C0.82-0.34%20c0.154-0.078%2C0.338-0.072%2C0.486%2C0.017l0.914%2C0.549c0.197%2C0.118%2C0.449%2C0.088%2C0.611-0.074l0.862-0.863%20c0.163-0.162%2C0.193-0.415%2C0.075-0.611l-0.549-0.915c-0.089-0.148-0.096-0.332-0.017-0.485c0.134-0.263%2C0.248-0.536%2C0.339-0.82%20c0.053-0.165%2C0.188-0.291%2C0.355-0.333l1.036-0.259C13.844%2C8.039%2C14%2C7.839%2C14%2C7.609V6.39C14%2C6.16%2C13.844%2C5.96%2C13.621%2C5.904z%20M7%2C10%20c-1.657%2C0-3-1.343-3-3s1.343-3%2C3-3s3%2C1.343%2C3%2C3S8.657%2C10%2C7%2C10z%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E"); -} -.ui-alt-icon.ui-icon-grid:after, -.ui-alt-icon .ui-icon-grid:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20d%3D%22M3%2C0H1C0.447%2C0%2C0%2C0.447%2C0%2C1v2c0%2C0.553%2C0.447%2C1%2C1%2C1h2c0.553%2C0%2C1-0.447%2C1-1V1C4%2C0.447%2C3.553%2C0%2C3%2C0z%20M8%2C0H6%20C5.447%2C0%2C5%2C0.447%2C5%2C1v2c0%2C0.553%2C0.447%2C1%2C1%2C1h2c0.553%2C0%2C1-0.447%2C1-1V1C9%2C0.447%2C8.553%2C0%2C8%2C0z%20M13%2C0h-2c-0.553%2C0-1%2C0.447-1%2C1v2%20c0%2C0.553%2C0.447%2C1%2C1%2C1h2c0.553%2C0%2C1-0.447%2C1-1V1C14%2C0.447%2C13.553%2C0%2C13%2C0z%20M3%2C5H1C0.447%2C5%2C0%2C5.447%2C0%2C6v2c0%2C0.553%2C0.447%2C1%2C1%2C1h2%20c0.553%2C0%2C1-0.447%2C1-1V6C4%2C5.447%2C3.553%2C5%2C3%2C5z%20M8%2C5H6C5.447%2C5%2C5%2C5.447%2C5%2C6v2c0%2C0.553%2C0.447%2C1%2C1%2C1h2c0.553%2C0%2C1-0.447%2C1-1V6%20C9%2C5.447%2C8.553%2C5%2C8%2C5z%20M13%2C5h-2c-0.553%2C0-1%2C0.447-1%2C1v2c0%2C0.553%2C0.447%2C1%2C1%2C1h2c0.553%2C0%2C1-0.447%2C1-1V6C14%2C5.447%2C13.553%2C5%2C13%2C5z%20M3%2C10%20H1c-0.553%2C0-1%2C0.447-1%2C1v2c0%2C0.553%2C0.447%2C1%2C1%2C1h2c0.553%2C0%2C1-0.447%2C1-1v-2C4%2C10.447%2C3.553%2C10%2C3%2C10z%20M8%2C10H6c-0.553%2C0-1%2C0.447-1%2C1v2%20c0%2C0.553%2C0.447%2C1%2C1%2C1h2c0.553%2C0%2C1-0.447%2C1-1v-2C9%2C10.447%2C8.553%2C10%2C8%2C10z%20M13%2C10h-2c-0.553%2C0-1%2C0.447-1%2C1v2c0%2C0.553%2C0.447%2C1%2C1%2C1h2%20c0.553%2C0%2C1-0.447%2C1-1v-2C14%2C10.447%2C13.553%2C10%2C13%2C10z%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E"); -} -.ui-alt-icon.ui-icon-heart:after, -.ui-alt-icon .ui-icon-heart:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20d%3D%22M7%2C1.958c-2-3-7-2.128-7%2C1.872c0%2C3%2C4%2C7%2C4%2C7s2.417%2C2.48%2C3%2C3c0.583-0.52%2C3-3%2C3-3s4-4%2C4-7C14-0.169%2C9-1.042%2C7%2C1.958z%22%2F%3E%3C%2Fsvg%3E"); -} -.ui-alt-icon.ui-icon-home:after, -.ui-alt-icon .ui-icon-home:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpolygon%20points%3D%227%2C0%200%2C7%202%2C7%202%2C14%205%2C14%205%2C9%209%2C9%209%2C14%2012%2C14%2012%2C7%2014%2C7%20%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E"); -} -.ui-alt-icon.ui-icon-info:after, -.ui-alt-icon .ui-icon-info:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20d%3D%22M7%2C0C3.134%2C0%2C0%2C3.134%2C0%2C7s3.134%2C7%2C7%2C7s7-3.134%2C7-7S10.866%2C0%2C7%2C0z%20M7%2C2c0.552%2C0%2C1%2C0.447%2C1%2C1S7.552%2C4%2C7%2C4S6%2C3.553%2C6%2C3%20S6.448%2C2%2C7%2C2z%20M9%2C11H5v-1h1V6H5V5h3v5h1V11z%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E"); -} -.ui-alt-icon.ui-icon-location:after, -.ui-alt-icon .ui-icon-location:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20d%3D%22M7%2C0C4.791%2C0%2C3%2C1.791%2C3%2C4c0%2C2%2C4%2C10%2C4%2C10s4-8%2C4-10C11%2C1.791%2C9.209%2C0%2C7%2C0z%20M7%2C6C5.896%2C6%2C5%2C5.104%2C5%2C4s0.896-2%2C2-2%20c1.104%2C0%2C2%2C0.896%2C2%2C2S8.104%2C6%2C7%2C6z%22%2F%3E%3C%2Fsvg%3E"); -} -.ui-alt-icon.ui-icon-lock:after, -.ui-alt-icon .ui-icon-lock:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20d%3D%22M12%2C6V5c0-2.762-2.238-5-5-5C4.239%2C0%2C2%2C2.238%2C2%2C5v1H1v8h12V6H12z%20M7.5%2C9.848V12h-1V9.848C6.207%2C9.673%2C6%2C9.366%2C6%2C9%20c0-0.553%2C0.448-1%2C1-1s1%2C0.447%2C1%2C1C8%2C9.366%2C7.793%2C9.673%2C7.5%2C9.848z%20M10%2C6H4V5c0-1.657%2C1.343-3%2C3-3s3%2C1.343%2C3%2C3V6z%22%2F%3E%3C%2Fsvg%3E"); -} -.ui-alt-icon.ui-icon-mail:after, -.ui-alt-icon .ui-icon-mail:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20d%3D%22M0%2C3.75V12h14V3.75L7%2C9L0%2C3.75z%20M14%2C2H0l7%2C5L14%2C2z%22%2F%3E%3C%2Fsvg%3E"); -} -.ui-alt-icon.ui-icon-minus:after, -.ui-alt-icon .ui-icon-minus:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Crect%20y%3D%225%22%20width%3D%2214%22%20height%3D%224%22%2F%3E%3C%2Fsvg%3E"); -} -.ui-alt-icon.ui-icon-navigation:after, -.ui-alt-icon .ui-icon-navigation:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpolygon%20points%3D%2213%2C1%200%2C6%207%2C7%208%2C14%20%22%2F%3E%3C%2Fsvg%3E"); -} -.ui-alt-icon.ui-icon-phone:after, -.ui-alt-icon .ui-icon-phone:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20d%3D%22M6.949%2C9.182C6.175%2C8.549%2C5.281%2C7.697%2C4.507%2C6.736C3.963%2C6.063%2C3.483%2C5.355%2C3.979%2C4.858l-3.482-3.48%20c-0.508%2C0.634-1.633%2C3.654%2C3.188%2C8.598c5.08%2C5.211%2C8.356%2C4.097%2C8.92%2C3.511l-3.396-3.399C8.734%2C10.561%2C8.123%2C10.139%2C6.949%2C9.182z%20%20M13.83%2C11.512v-0.004c0%2C0-2.648-2.646-2.649-2.647c-0.21-0.212-0.546-0.205-0.754%2C0.002L9.465%2C9.823l3.402%2C3.407%20c0%2C0%2C0.963-0.961%2C0.961-0.961l0.002-0.002C14.053%2C12.049%2C14.031%2C11.713%2C13.83%2C11.512z%20M5.202%2C3.636V3.634%20c0.222-0.222%2C0.2-0.557%2C0-0.758V2.873c0%2C0-2.726-2.725-2.727-2.726c-0.21-0.21-0.545-0.205-0.753%2C0.001L0.761%2C1.113L4.24%2C4.595%20C4.241%2C4.596%2C5.202%2C3.637%2C5.202%2C3.636z%22%2F%3E%3C%2Fsvg%3E"); -} -.ui-alt-icon.ui-icon-plus:after, -.ui-alt-icon .ui-icon-plus:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpolygon%20points%3D%2214%2C5%209%2C5%209%2C0%205%2C0%205%2C5%200%2C5%200%2C9%205%2C9%205%2C14%209%2C14%209%2C9%2014%2C9%20%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E"); -} -.ui-alt-icon.ui-icon-power:after, -.ui-alt-icon .ui-icon-power:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20d%3D%22M11.243%2C2.408c-0.392-0.401-1.024-0.401-1.415%2C0c-0.391%2C0.401-0.391%2C1.054%2C0%2C1.455C10.584%2C4.642%2C11%2C5.675%2C11%2C6.773%20s-0.416%2C2.133-1.172%2C2.91c-1.512%2C1.558-4.145%2C1.558-5.656%2C0C3.416%2C8.904%2C3%2C7.872%2C3%2C6.773C3%2C5.673%2C3.416%2C4.64%2C4.172%2C3.863%20c0.39-0.401%2C0.39-1.054%2C0-1.455c-0.391-0.401-1.024-0.401-1.415%2C0C1.624%2C3.574%2C1%2C5.125%2C1%2C6.773c0%2C1.647%2C0.624%2C3.199%2C1.757%2C4.365%20c1.134%2C1.166%2C2.64%2C1.809%2C4.243%2C1.809c1.604%2C0%2C3.109-0.645%2C4.243-1.811C12.376%2C9.975%2C13%2C8.423%2C13%2C6.773%20C13%2C5.125%2C12.376%2C3.574%2C11.243%2C2.408z%20M7%2C8.053c0.553%2C0%2C1-0.445%2C1-1v-6c0-0.553-0.447-1-1-1c-0.553%2C0-1%2C0.447-1%2C1v6%20C6%2C7.604%2C6.447%2C8.053%2C7%2C8.053z%22%2F%3E%3C%2Fsvg%3E"); -} -.ui-alt-icon.ui-icon-recycle:after, -.ui-alt-icon .ui-icon-recycle:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20d%3D%22M3%2C7h1L2%2C4L0%2C7h1c0%2C3.313%2C2.687%2C6%2C6%2C6c0.702%2C0%2C1.374-0.127%2C2-0.35v-2.205C8.41%2C10.789%2C7.732%2C11%2C7%2C11C4.791%2C11%2C3%2C9.209%2C3%2C7z%20%20M13%2C7c0-3.313-2.688-6-6-6C6.298%2C1%2C5.626%2C1.127%2C5%2C1.349v2.206C5.59%2C3.211%2C6.268%2C3%2C7%2C3c2.209%2C0%2C4%2C1.791%2C4%2C4h-1l2%2C3l2-3H13z%22%2F%3E%3C%2Fsvg%3E"); -} -.ui-alt-icon.ui-icon-refresh:after, -.ui-alt-icon .ui-icon-refresh:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214.001px%22%20height%3D%2214.002px%22%20viewBox%3D%220%200%2014.001%2014.002%22%20style%3D%22enable-background%3Anew%200%200%2014.001%2014.002%3B%22%20%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20d%3D%22M14.001%2C6.001v-6l-2.06%2C2.06c-0.423-0.424-0.897-0.809-1.44-1.122C7.153-0.994%2C2.872%2C0.153%2C0.939%2C3.501%20c-1.933%2C3.348-0.786%2C7.629%2C2.562%2C9.562c3.348%2C1.933%2C7.629%2C0.785%2C9.562-2.562l-1.732-1c-1.381%2C2.392-4.438%2C3.211-6.83%2C1.83%20s-3.211-4.438-1.83-6.83s4.438-3.211%2C6.83-1.83c0.389%2C0.225%2C0.718%2C0.506%2C1.02%2C0.81l-2.52%2C2.52H14.001z%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E"); -} -.ui-alt-icon.ui-icon-search:after, -.ui-alt-icon .ui-icon-search:after, -.ui-input-search:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20d%3D%22M10.171%2C8.766c0.617-0.888%2C0.979-1.964%2C0.979-3.126c0-3.037-2.463-5.5-5.5-5.5s-5.5%2C2.463-5.5%2C5.5s2.463%2C5.5%2C5.5%2C5.5%20c1.152%2C0%2C2.223-0.355%2C3.104-0.962l3.684%2C3.683l1.414-1.414L10.171%2C8.766z%20M5.649%2C9.14c-1.933%2C0-3.5-1.567-3.5-3.5%20c0-1.933%2C1.567-3.5%2C3.5-3.5c1.933%2C0%2C3.5%2C1.567%2C3.5%2C3.5C9.149%2C7.572%2C7.582%2C9.14%2C5.649%2C9.14z%22%2F%3E%3C%2Fsvg%3E"); -} -.ui-alt-icon.ui-icon-shop:after, -.ui-alt-icon .ui-icon-shop:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20d%3D%22M10%2C4V3c0-1.657-1.343-3-3-3S4%2C1.343%2C4%2C3v1H1v10h12V4H10z%20M4.5%2C6C4.224%2C6%2C4%2C5.776%2C4%2C5.5S4.224%2C5%2C4.5%2C5S5%2C5.224%2C5%2C5.5%20S4.776%2C6%2C4.5%2C6z%20M5%2C3c0-1.104%2C0.896-2%2C2-2c1.104%2C0%2C2%2C0.896%2C2%2C2v1H5V3z%20M9.5%2C6C9.225%2C6%2C9%2C5.776%2C9%2C5.5S9.225%2C5%2C9.5%2C5S10%2C5.224%2C10%2C5.5%20S9.775%2C6%2C9.5%2C6z%22%2F%3E%3C%2Fsvg%3E"); -} -.ui-alt-icon.ui-icon-star:after, -.ui-alt-icon .ui-icon-star:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpolygon%20points%3D%2214%2C5%209%2C5%207%2C0%205%2C5%200%2C5%204%2C8%202.625%2C13%207%2C10%2011.375%2C13%2010%2C8%20%22%2F%3E%3C%2Fsvg%3E"); -} -.ui-alt-icon.ui-icon-tag:after, -.ui-alt-icon .ui-icon-tag:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20d%3D%22M5%2C0H0v5l9%2C9l5-5L5%2C0z%20M3%2C4C2.447%2C4%2C2%2C3.553%2C2%2C3s0.447-1%2C1-1s1%2C0.447%2C1%2C1S3.553%2C4%2C3%2C4z%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E"); -} -.ui-alt-icon.ui-icon-user:after, -.ui-alt-icon .ui-icon-user:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%200%2014%2014%22%20style%3D%22enable-background%3Anew%200%200%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20d%3D%22M8.851%2C10.101c-0.18-0.399-0.2-0.763-0.153-1.104C9.383%2C8.49%2C9.738%2C7.621%2C9.891%2C6.465C10.493%2C6.355%2C10.5%2C5.967%2C10.5%2C5.5%20c0-0.437-0.008-0.804-0.502-0.94C9.999%2C4.539%2C10%2C4.521%2C10%2C4.5c0-2.103-1-4-2-4C8%2C0.5%2C7.5%2C0%2C6.5%2C0C5%2C0%2C4%2C1.877%2C4%2C4.5%20c0%2C0.021%2C0.001%2C0.039%2C0.002%2C0.06C3.508%2C4.696%2C3.5%2C5.063%2C3.5%2C5.5c0%2C0.467%2C0.007%2C0.855%2C0.609%2C0.965%20C4.262%2C7.621%2C4.617%2C8.49%2C5.303%2C8.997c0.047%2C0.341%2C0.026%2C0.704-0.153%2C1.104C1.503%2C10.503%2C0%2C12%2C0%2C12v2h14v-2%20C14%2C12%2C12.497%2C10.503%2C8.851%2C10.101z%22%2F%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3Cg%3E%3C%2Fg%3E%3C%2Fsvg%3E"); -} -.ui-alt-icon.ui-icon-video:after, -.ui-alt-icon .ui-icon-video:after { - background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%3Csvg%20version%3D%221.1%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20%20width%3D%2214px%22%20height%3D%2214px%22%20viewBox%3D%220%20-2%2014%2014%22%20style%3D%22enable-background%3Anew%200%20-2%2014%2014%3B%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpath%20d%3D%22M8%2C0H2C0.896%2C0%2C0%2C0.896%2C0%2C2v6c0%2C1.104%2C0.896%2C2%2C2%2C2h6c1.104%2C0%2C2-0.896%2C2-2V5V2C10%2C0.896%2C9.104%2C0%2C8%2C0z%20M10%2C5l4%2C4V1L10%2C5z%22%2F%3E%3C%2Fsvg%3E"); -} -/* PNG icons */ -.ui-nosvg .ui-icon-action:after { - background-image: url(images/icons-png/action-white.png); -} -.ui-nosvg .ui-icon-alert:after { - background-image: url(images/icons-png/alert-white.png); -} -.ui-nosvg .ui-icon-arrow-d-l:after { - background-image: url(images/icons-png/arrow-d-l-white.png); -} -.ui-nosvg .ui-icon-arrow-d-r:after { - background-image: url(images/icons-png/arrow-d-r-white.png); -} -.ui-nosvg .ui-icon-arrow-d:after { - background-image: url(images/icons-png/arrow-d-white.png); -} -.ui-nosvg .ui-icon-arrow-l:after { - background-image: url(images/icons-png/arrow-l-white.png); -} -.ui-nosvg .ui-icon-arrow-r:after { - background-image: url(images/icons-png/arrow-r-white.png); -} -.ui-nosvg .ui-icon-arrow-u-l:after { - background-image: url(images/icons-png/arrow-u-l-white.png); -} -.ui-nosvg .ui-icon-arrow-u-r:after { - background-image: url(images/icons-png/arrow-u-r-white.png); -} -.ui-nosvg .ui-icon-arrow-u:after { - background-image: url(images/icons-png/arrow-u-white.png); -} -.ui-nosvg .ui-icon-audio:after { - background-image: url(images/icons-png/audio-white.png); -} -.ui-nosvg .ui-icon-back:after { - background-image: url(images/icons-png/back-white.png); -} -.ui-nosvg .ui-icon-bars:after { - background-image: url(images/icons-png/bars-white.png); -} -.ui-nosvg .ui-icon-bullets:after { - background-image: url(images/icons-png/bullets-white.png); -} -.ui-nosvg .ui-icon-calendar:after { - background-image: url(images/icons-png/calendar-white.png); -} -.ui-nosvg .ui-icon-camera:after { - background-image: url(images/icons-png/camera-white.png); -} -.ui-nosvg .ui-icon-carat-d:after { - background-image: url(images/icons-png/carat-d-white.png); -} -.ui-nosvg .ui-icon-carat-l:after { - background-image: url(images/icons-png/carat-l-white.png); -} -.ui-nosvg .ui-icon-carat-r:after { - background-image: url(images/icons-png/carat-r-white.png); -} -.ui-nosvg .ui-icon-carat-u:after { - background-image: url(images/icons-png/carat-u-white.png); -} -.ui-nosvg .ui-icon-check:after, -html.ui-nosvg .ui-btn.ui-checkbox-on:after { - background-image: url(images/icons-png/check-white.png); -} -.ui-nosvg .ui-icon-clock:after { - background-image: url(images/icons-png/clock-white.png); -} -.ui-nosvg .ui-icon-cloud:after { - background-image: url(images/icons-png/cloud-white.png); -} -.ui-nosvg .ui-icon-comment:after { - background-image: url(images/icons-png/comment-white.png); -} -.ui-nosvg .ui-icon-delete:after { - background-image: url(images/icons-png/delete-white.png); -} -.ui-nosvg .ui-icon-edit:after { - background-image: url(images/icons-png/edit-white.png); -} -.ui-nosvg .ui-icon-eye:after { - background-image: url(images/icons-png/eye-white.png); -} -.ui-nosvg .ui-icon-forbidden:after { - background-image: url(images/icons-png/forbidden-white.png); -} -.ui-nosvg .ui-icon-forward:after { - background-image: url(images/icons-png/forward-white.png); -} -.ui-nosvg .ui-icon-gear:after { - background-image: url(images/icons-png/gear-white.png); -} -.ui-nosvg .ui-icon-grid:after { - background-image: url(images/icons-png/grid-white.png); -} -.ui-nosvg .ui-icon-heart:after { - background-image: url(images/icons-png/heart-white.png); -} -.ui-nosvg .ui-icon-home:after { - background-image: url(images/icons-png/home-white.png); -} -.ui-nosvg .ui-icon-info:after { - background-image: url(images/icons-png/info-white.png); -} -.ui-nosvg .ui-icon-location:after { - background-image: url(images/icons-png/location-white.png); -} -.ui-nosvg .ui-icon-lock:after { - background-image: url(images/icons-png/lock-white.png); -} -.ui-nosvg .ui-icon-mail:after { - background-image: url(images/icons-png/mail-white.png); -} -.ui-nosvg .ui-icon-minus:after { - background-image: url(images/icons-png/minus-white.png); -} -.ui-nosvg .ui-icon-navigation:after { - background-image: url(images/icons-png/navigation-white.png); -} -.ui-nosvg .ui-icon-phone:after { - background-image: url(images/icons-png/phone-white.png); -} -.ui-nosvg .ui-icon-plus:after { - background-image: url(images/icons-png/plus-white.png); -} -.ui-nosvg .ui-icon-power:after { - background-image: url(images/icons-png/power-white.png); -} -.ui-nosvg .ui-icon-recycle:after { - background-image: url(images/icons-png/recycle-white.png); -} -.ui-nosvg .ui-icon-refresh:after { - background-image: url(images/icons-png/refresh-white.png); -} -.ui-nosvg .ui-icon-search:after { - background-image: url(images/icons-png/search-white.png); -} -.ui-nosvg .ui-icon-shop:after { - background-image: url(images/icons-png/shop-white.png); -} -.ui-nosvg .ui-icon-star:after { - background-image: url(images/icons-png/star-white.png); -} -.ui-nosvg .ui-icon-tag:after { - background-image: url(images/icons-png/tag-white.png); -} -.ui-nosvg .ui-icon-user:after { - background-image: url(images/icons-png/user-white.png); -} -.ui-nosvg .ui-icon-video:after { - background-image: url(images/icons-png/video-white.png); -} -/* Alt icons */ -.ui-nosvg .ui-alt-icon.ui-icon-action:after, -.ui-nosvg .ui-alt-icon .ui-icon-action:after { - background-image: url(images/icons-png/action-black.png); -} -.ui-nosvg .ui-alt-icon.ui-icon-alert:after, -.ui-nosvg .ui-alt-icon .ui-icon-alert:after { - background-image: url(images/icons-png/alert-black.png); -} -.ui-nosvg .ui-alt-icon.ui-icon-arrow-d:after, -.ui-nosvg .ui-alt-icon .ui-icon-arrow-d:after { - background-image: url(images/icons-png/arrow-d-black.png); -} -.ui-nosvg .ui-alt-icon.ui-icon-arrow-d-l:after, -.ui-nosvg .ui-alt-icon .ui-icon-arrow-d-l:after { - background-image: url(images/icons-png/arrow-d-l-black.png); -} -.ui-nosvg .ui-alt-icon.ui-icon-arrow-d-r:after, -.ui-nosvg .ui-alt-icon .ui-icon-arrow-d-r:after { - background-image: url(images/icons-png/arrow-d-r-black.png); -} -.ui-nosvg .ui-alt-icon.ui-icon-arrow-l:after, -.ui-nosvg .ui-alt-icon .ui-icon-arrow-l:after { - background-image: url(images/icons-png/arrow-l-black.png); -} -.ui-nosvg .ui-alt-icon.ui-icon-arrow-r:after, -.ui-nosvg .ui-alt-icon .ui-icon-arrow-r:after { - background-image: url(images/icons-png/arrow-r-black.png); -} -.ui-nosvg .ui-alt-icon.ui-icon-arrow-u:after, -.ui-nosvg .ui-alt-icon .ui-icon-arrow-u:after { - background-image: url(images/icons-png/arrow-u-black.png); -} -.ui-nosvg .ui-alt-icon.ui-icon-arrow-u-l:after, -.ui-nosvg .ui-alt-icon .ui-icon-arrow-u-l:after { - background-image: url(images/icons-png/arrow-u-l-black.png); -} -.ui-nosvg .ui-alt-icon.ui-icon-arrow-u-r:after, -.ui-nosvg .ui-alt-icon .ui-icon-arrow-u-r:after { - background-image: url(images/icons-png/arrow-u-r-black.png); -} -.ui-nosvg .ui-alt-icon.ui-icon-audio:after, -.ui-nosvg .ui-alt-icon .ui-icon-audio:after { - background-image: url(images/icons-png/audio-black.png); -} -.ui-nosvg .ui-alt-icon.ui-icon-back:after, -.ui-nosvg .ui-alt-icon .ui-icon-back:after { - background-image: url(images/icons-png/back-black.png); -} -.ui-nosvg .ui-alt-icon.ui-icon-bars:after, -.ui-nosvg .ui-alt-icon .ui-icon-bars:after { - background-image: url(images/icons-png/bars-black.png); -} -.ui-nosvg .ui-alt-icon.ui-icon-bullets:after, -.ui-nosvg .ui-alt-icon .ui-icon-bullets:after { - background-image: url(images/icons-png/bullets-black.png); -} -.ui-nosvg .ui-alt-icon.ui-icon-calendar:after, -.ui-nosvg .ui-alt-icon .ui-icon-calendar:after { - background-image: url(images/icons-png/calendar-black.png); -} -.ui-nosvg .ui-alt-icon.ui-icon-camera:after, -.ui-nosvg .ui-alt-icon .ui-icon-camera:after { - background-image: url(images/icons-png/camera-black.png); -} -.ui-nosvg .ui-alt-icon.ui-icon-carat-d:after, -.ui-nosvg .ui-alt-icon .ui-icon-carat-d:after { - background-image: url(images/icons-png/carat-d-black.png); -} -.ui-nosvg .ui-alt-icon.ui-icon-carat-l:after, -.ui-nosvg .ui-alt-icon .ui-icon-carat-l:after { - background-image: url(images/icons-png/carat-l-black.png); -} -.ui-nosvg .ui-alt-icon.ui-icon-carat-r:after, -.ui-nosvg .ui-alt-icon .ui-icon-carat-r:after { - background-image: url(images/icons-png/carat-r-black.png); -} -.ui-nosvg .ui-alt-icon.ui-icon-carat-u:after, -.ui-nosvg .ui-alt-icon .ui-icon-carat-u:after { - background-image: url(images/icons-png/carat-u-black.png); -} -.ui-nosvg .ui-alt-icon.ui-icon-check:after, -.ui-nosvg .ui-alt-icon .ui-icon-check:after, -.ui-nosvg .ui-alt-icon.ui-btn.ui-checkbox-on:after, -.ui-nosvg .ui-alt-icon .ui-btn.ui-checkbox-on:after { - background-image: url(images/icons-png/check-black.png); -} -.ui-nosvg .ui-alt-icon.ui-icon-clock:after, -.ui-nosvg .ui-alt-icon .ui-icon-clock:after { - background-image: url(images/icons-png/clock-black.png); -} -.ui-nosvg .ui-alt-icon.ui-icon-cloud:after, -.ui-nosvg .ui-alt-icon .ui-icon-cloud:after { - background-image: url(images/icons-png/cloud-black.png); -} -.ui-nosvg .ui-alt-icon.ui-icon-comment:after, -.ui-nosvg .ui-alt-icon .ui-icon-comment:after { - background-image: url(images/icons-png/comment-black.png); -} -.ui-nosvg .ui-alt-icon.ui-icon-delete:after, -.ui-nosvg .ui-alt-icon .ui-icon-delete:after { - background-image: url(images/icons-png/delete-black.png); -} -.ui-nosvg .ui-alt-icon.ui-icon-edit:after, -.ui-nosvg .ui-alt-icon .ui-icon-edit:after { - background-image: url(images/icons-png/edit-black.png); -} -.ui-nosvg .ui-alt-icon.ui-icon-eye:after, -.ui-nosvg .ui-alt-icon .ui-icon-eye:after { - background-image: url(images/icons-png/eye-black.png); -} -.ui-nosvg .ui-alt-icon.ui-icon-forbidden:after, -.ui-nosvg .ui-alt-icon .ui-icon-forbidden:after { - background-image: url(images/icons-png/forbidden-black.png); -} -.ui-nosvg .ui-alt-icon.ui-icon-forward:after, -.ui-nosvg .ui-alt-icon .ui-icon-forward:after { - background-image: url(images/icons-png/forward-black.png); -} -.ui-nosvg .ui-alt-icon.ui-icon-gear:after, -.ui-nosvg .ui-alt-icon .ui-icon-gear:after { - background-image: url(images/icons-png/gear-black.png); -} -.ui-nosvg .ui-alt-icon.ui-icon-grid:after, -.ui-nosvg .ui-alt-icon .ui-icon-grid:after { - background-image: url(images/icons-png/grid-black.png); -} -.ui-nosvg .ui-alt-icon.ui-icon-heart:after, -.ui-nosvg .ui-alt-icon .ui-icon-heart:after { - background-image: url(images/icons-png/heart-black.png); -} -.ui-nosvg .ui-alt-icon.ui-icon-home:after, -.ui-nosvg .ui-alt-icon .ui-icon-home:after { - background-image: url(images/icons-png/home-black.png); -} -.ui-nosvg .ui-alt-icon.ui-icon-info:after, -.ui-nosvg .ui-alt-icon .ui-icon-info:after { - background-image: url(images/icons-png/info-black.png); -} -.ui-nosvg .ui-alt-icon.ui-icon-location:after, -.ui-nosvg .ui-alt-icon .ui-icon-location:after { - background-image: url(images/icons-png/location-black.png); -} -.ui-nosvg .ui-alt-icon.ui-icon-lock:after, -.ui-nosvg .ui-alt-icon .ui-icon-lock:after { - background-image: url(images/icons-png/lock-black.png); -} -.ui-nosvg .ui-alt-icon.ui-icon-mail:after, -.ui-nosvg .ui-alt-icon .ui-icon-mail:after { - background-image: url(images/icons-png/mail-black.png); -} -.ui-nosvg .ui-alt-icon.ui-icon-minus:after, -.ui-nosvg .ui-alt-icon .ui-icon-minus:after { - background-image: url(images/icons-png/minus-black.png); -} -.ui-nosvg .ui-alt-icon.ui-icon-navigation:after, -.ui-nosvg .ui-alt-icon .ui-icon-navigation:after { - background-image: url(images/icons-png/navigation-black.png); -} -.ui-nosvg .ui-alt-icon.ui-icon-phone:after, -.ui-nosvg .ui-alt-icon .ui-icon-phone:after { - background-image: url(images/icons-png/phone-black.png); -} -.ui-nosvg .ui-alt-icon.ui-icon-plus:after, -.ui-nosvg .ui-alt-icon .ui-icon-plus:after { - background-image: url(images/icons-png/plus-black.png); -} -.ui-nosvg .ui-alt-icon.ui-icon-power:after, -.ui-nosvg .ui-alt-icon .ui-icon-power:after { - background-image: url(images/icons-png/power-black.png); -} -.ui-nosvg .ui-alt-icon.ui-icon-recycle:after, -.ui-nosvg .ui-alt-icon .ui-icon-recycle:after { - background-image: url(images/icons-png/recycle-black.png); -} -.ui-nosvg .ui-alt-icon.ui-icon-refresh:after, -.ui-nosvg .ui-alt-icon .ui-icon-refresh:after { - background-image: url(images/icons-png/refresh-black.png); -} -.ui-nosvg .ui-alt-icon.ui-icon-search:after, -.ui-nosvg .ui-alt-icon .ui-icon-search:after, -.ui-nosvg .ui-input-search:after { - background-image: url(images/icons-png/search-black.png); -} -.ui-nosvg .ui-alt-icon.ui-icon-shop:after, -.ui-nosvg .ui-alt-icon .ui-icon-shop:after { - background-image: url(images/icons-png/shop-black.png); -} -.ui-nosvg .ui-alt-icon.ui-icon-star:after, -.ui-nosvg .ui-alt-icon .ui-icon-star:after { - background-image: url(images/icons-png/star-black.png); -} -.ui-nosvg .ui-alt-icon.ui-icon-tag:after, -.ui-nosvg .ui-alt-icon .ui-icon-tag:after { - background-image: url(images/icons-png/tag-black.png); -} -.ui-nosvg .ui-alt-icon.ui-icon-user:after, -.ui-nosvg .ui-alt-icon .ui-icon-user:after { - background-image: url(images/icons-png/user-black.png); -} -.ui-nosvg .ui-alt-icon.ui-icon-video:after, -.ui-nosvg .ui-alt-icon .ui-icon-video:after { - background-image: url(images/icons-png/video-black.png); -} -/* Globals */ -/* Font ------------------------------------------------------------------------------------------------------------*/ -html { - font-size: 100%; -} -body, -input, -select, -textarea, -button, -.ui-btn { - font-size: 1em; - line-height: 1.3; - font-family: sans-serif /*{global-font-family}*/; -} -legend, -.ui-input-text input, -.ui-input-search input { - color: inherit; - text-shadow: inherit; -} -/* Form labels (overrides font-weight bold in bars, and mini font-size) */ -.ui-mobile label, -div.ui-controlgroup-label { - font-weight: normal; - font-size: 16px; -} -/* Separators ------------------------------------------------------------------------------------------------------------*/ -/* Field contain separator (< 28em) */ -.ui-field-contain { - border-bottom-color: #828282; - border-bottom-color: rgba(0,0,0,.15); - border-bottom-width: 1px; - border-bottom-style: solid; -} -/* Table opt-in classes: strokes between each row, and alternating row stripes */ -/* Classes table-stroke and table-stripe are deprecated in 1.4. */ -.table-stroke thead th, -.table-stripe thead th, -.table-stripe tbody tr:last-child { - border-bottom: 1px solid #d6d6d6; /* non-RGBA fallback */ - border-bottom: 1px solid rgba(0,0,0,.1); -} -.table-stroke tbody th, -.table-stroke tbody td { - border-bottom: 1px solid #e6e6e6; /* non-RGBA fallback */ - border-bottom: 1px solid rgba(0,0,0,.05); -} -.table-stripe.table-stroke tbody tr:last-child th, -.table-stripe.table-stroke tbody tr:last-child td { - border-bottom: 0; -} -.table-stripe tbody tr:nth-child(odd) td, -.table-stripe tbody tr:nth-child(odd) th { - background-color: #eeeeee; /* non-RGBA fallback */ - background-color: rgba(0,0,0,.04); -} -/* Buttons ------------------------------------------------------------------------------------------------------------*/ -.ui-btn, -label.ui-btn { - font-weight: bold; - border-width: 1px; - border-style: solid; -} -.ui-btn { - text-decoration: none !important; -} -.ui-btn-active { - cursor: pointer; -} -/* Corner rounding ------------------------------------------------------------------------------------------------------------*/ -/* Class ui-btn-corner-all deprecated in 1.4 */ -.ui-corner-all { - -webkit-border-radius: .3125em /*{global-radii-blocks}*/; - border-radius: .3125em /*{global-radii-blocks}*/; -} -/* Buttons */ -.ui-btn-corner-all, -.ui-btn.ui-corner-all, -/* Slider track */ -.ui-slider-track.ui-corner-all, -/* Flipswitch */ -.ui-flipswitch.ui-corner-all, -/* Count bubble */ -.ui-li-count { - -webkit-border-radius: .3125em /*{global-radii-buttons}*/; - border-radius: .3125em /*{global-radii-buttons}*/; -} -/* Icon-only buttons */ -.ui-btn-icon-notext.ui-btn-corner-all, -.ui-btn-icon-notext.ui-corner-all { - -webkit-border-radius: 1em; - border-radius: 1em; -} -/* Radius clip workaround for cleaning up corner trapping */ -.ui-btn-corner-all, -.ui-corner-all { - -webkit-background-clip: padding; - background-clip: padding-box; -} -/* Popup arrow */ -.ui-popup.ui-corner-all > .ui-popup-arrow-guide { - left: .6em /*{global-radii-blocks}*/; - right: .6em /*{global-radii-blocks}*/; - top: .6em /*{global-radii-blocks}*/; - bottom: .6em /*{global-radii-blocks}*/; -} -/* Shadow ------------------------------------------------------------------------------------------------------------*/ -.ui-shadow { - -webkit-box-shadow: 0 1px 3px /*{global-box-shadow-size}*/ rgba(0,0,0,.15) /*{global-box-shadow-color}*/; - -moz-box-shadow: 0 1px 3px /*{global-box-shadow-size}*/ rgba(0,0,0,.15) /*{global-box-shadow-color}*/; - box-shadow: 0 1px 3px /*{global-box-shadow-size}*/ rgba(0,0,0,.15) /*{global-box-shadow-color}*/; -} -.ui-shadow-inset { - -webkit-box-shadow: inset 0 1px 3px /*{global-box-shadow-size}*/ rgba(0,0,0,.2) /*{global-box-shadow-color}*/; - -moz-box-shadow: inset 0 1px 3px /*{global-box-shadow-size}*/ rgba(0,0,0,.2) /*{global-box-shadow-color}*/; - box-shadow: inset 0 1px 3px /*{global-box-shadow-size}*/ rgba(0,0,0,.2) /*{global-box-shadow-color}*/; -} -.ui-overlay-shadow { - -webkit-box-shadow: 0 0 12px rgba(0,0,0,.6); - -moz-box-shadow: 0 0 12px rgba(0,0,0,.6); - box-shadow: 0 0 12px rgba(0,0,0,.6); -} -/* Icons ------------------------------------------------------------------------------------------------------------*/ -.ui-btn-icon-left:after, -.ui-btn-icon-right:after, -.ui-btn-icon-top:after, -.ui-btn-icon-bottom:after, -.ui-btn-icon-notext:after { - background-color: #666 /*{global-icon-color}*/; - background-color: rgba(0,0,0,.3) /*{global-icon-disc}*/; - background-position: center center; - background-repeat: no-repeat; - -webkit-border-radius: 1em; - border-radius: 1em; -} -/* Alt icons */ -.ui-alt-icon.ui-btn:after, -.ui-alt-icon .ui-btn:after, -html .ui-alt-icon.ui-checkbox-off:after, -html .ui-alt-icon.ui-radio-off:after, -html .ui-alt-icon .ui-checkbox-off:after, -html .ui-alt-icon .ui-radio-off:after { - background-color: #666 /*{global-icon-color}*/; - background-color: rgba(0,0,0,.15) /*{global-icon-disc}*/; -} -/* No disc */ -.ui-nodisc-icon.ui-btn:after, -.ui-nodisc-icon .ui-btn:after { - background-color: transparent; -} -/* Icon shadow */ -.ui-shadow-icon.ui-btn:after, -.ui-shadow-icon .ui-btn:after { - -webkit-box-shadow: 0 1px 0 rgba(255,255,255,.3) /*{global-icon-shadow}*/; - -moz-box-shadow: 0 1px 0 rgba(255,255,255,.3) /*{global-icon-shadow}*/; - box-shadow: 0 1px 0 rgba(255,255,255,.3) /*{global-icon-shadow}*/; -} -/* Checkbox and radio */ -.ui-btn.ui-checkbox-off:after, -.ui-btn.ui-checkbox-on:after, -.ui-btn.ui-radio-off:after, -.ui-btn.ui-radio-on:after { - display: block; - width: 18px; - height: 18px; - margin: -9px 2px 0 2px; -} -.ui-checkbox-off:after, -.ui-btn.ui-radio-off:after { - filter: Alpha(Opacity=30); - opacity: .3; -} -.ui-btn.ui-checkbox-off:after, -.ui-btn.ui-checkbox-on:after { - -webkit-border-radius: .1875em; - border-radius: .1875em; -} -.ui-btn.ui-checkbox-off:after { - background-color: #666; - background-color: rgba(0,0,0,.3); -} -.ui-radio .ui-btn.ui-radio-on:after { - background-image: none; - background-color: #fff; - width: 8px; - height: 8px; - border-width: 5px; - border-style: solid; -} -.ui-alt-icon.ui-btn.ui-radio-on:after, -.ui-alt-icon .ui-btn.ui-radio-on:after { - background-color: #000; -} -/* Loader -.ui-icon-loading { - background: url(images/ajax-loader.gif); - background-size: 2.875em 2.875em; -} */ -/* Swatches */ -/* A ------------------------------------------------------------------------------------------------------------*/ -/* Bar: Toolbars, dividers, slider track */ -.ui-bar-a, -.ui-page-theme-a .ui-bar-inherit, -html .ui-bar-a .ui-bar-inherit, -html .ui-body-a .ui-bar-inherit, -html body .ui-group-theme-a .ui-bar-inherit { - background-color: #e9e9e9 /*{a-bar-background-color}*/; - border-color: #ddd /*{a-bar-border}*/; - color: #333 /*{a-bar-color}*/; - text-shadow: 0 /*{a-bar-shadow-x}*/ 1px /*{a-bar-shadow-y}*/ 0 /*{a-bar-shadow-radius}*/ #eee /*{a-bar-shadow-color}*/; - font-weight: bold; -} -.ui-bar-a { - border-width: 1px; - border-style: solid; -} -/* Page and overlay */ -.ui-overlay-a, -.ui-page-theme-a, -.ui-page-theme-a .ui-panel-wrapper { - background-color: #f9f9f9 /*{a-page-background-color}*/; - border-color: #bbb /*{a-page-border}*/; - color: #333 /*{a-page-color}*/; - text-shadow: 0 /*{a-page-shadow-x}*/ 1px /*{a-page-shadow-y}*/ 0 /*{a-page-shadow-radius}*/ #f3f3f3 /*{a-page-shadow-color}*/; -} -/* Body: Read-only lists, text inputs, collapsible content */ -.ui-body-a, -.ui-page-theme-a .ui-body-inherit, -html .ui-bar-a .ui-body-inherit, -html .ui-body-a .ui-body-inherit, -html body .ui-group-theme-a .ui-body-inherit, -html .ui-panel-page-container-a { - background-color: #fff /*{a-body-background-color}*/; - border-color: #ddd /*{a-body-border}*/; - color: #333 /*{a-body-color}*/; - text-shadow: 0 /*{a-body-shadow-x}*/ 1px /*{a-body-shadow-y}*/ 0 /*{a-body-shadow-radius}*/ #f3f3f3 /*{a-body-shadow-color}*/; -} -.ui-body-a { - border-width: 1px; - border-style: solid; -} -/* Links */ -.ui-page-theme-a a, -html .ui-bar-a a, -html .ui-body-a a, -html body .ui-group-theme-a a { - color: #3388cc /*{a-link-color}*/; - font-weight: bold; -} -.ui-page-theme-a a:visited, -html .ui-bar-a a:visited, -html .ui-body-a a:visited, -html body .ui-group-theme-a a:visited { - color: #3388cc /*{a-link-visited}*/; -} -.ui-page-theme-a a:hover, -html .ui-bar-a a:hover, -html .ui-body-a a:hover, -html body .ui-group-theme-a a:hover { - color: #005599 /*{a-link-hover}*/; -} -.ui-page-theme-a a:active, -html .ui-bar-a a:active, -html .ui-body-a a:active, -html body .ui-group-theme-a a:active { - color: #005599 /*{a-link-active}*/; -} -/* Button up */ -.ui-page-theme-a .ui-btn, -html .ui-bar-a .ui-btn, -html .ui-body-a .ui-btn, -html body .ui-group-theme-a .ui-btn, -html head + body .ui-btn.ui-btn-a, -/* Button visited */ -.ui-page-theme-a .ui-btn:visited, -html .ui-bar-a .ui-btn:visited, -html .ui-body-a .ui-btn:visited, -html body .ui-group-theme-a .ui-btn:visited, -html head + body .ui-btn.ui-btn-a:visited { - background-color: #f6f6f6 /*{a-bup-background-color}*/; - border-color: #ddd /*{a-bup-border}*/; - color: #333 /*{a-bup-color}*/; - text-shadow: 0 /*{a-bup-shadow-x}*/ 1px /*{a-bup-shadow-y}*/ 0 /*{a-bup-shadow-radius}*/ #f3f3f3 /*{a-bup-shadow-color}*/; -} -/* Button hover */ -.ui-page-theme-a .ui-btn:hover, -html .ui-bar-a .ui-btn:hover, -html .ui-body-a .ui-btn:hover, -html body .ui-group-theme-a .ui-btn:hover, -html head + body .ui-btn.ui-btn-a:hover { - background-color: #ededed /*{a-bhover-background-color}*/; - border-color: #ddd /*{a-bhover-border}*/; - color: #333 /*{a-bhover-color}*/; - text-shadow: 0 /*{a-bhover-shadow-x}*/ 1px /*{a-bhover-shadow-y}*/ 0 /*{a-bhover-shadow-radius}*/ #f3f3f3 /*{a-bhover-shadow-color}*/; -} -/* Button down */ -.ui-page-theme-a .ui-btn:active, -html .ui-bar-a .ui-btn:active, -html .ui-body-a .ui-btn:active, -html body .ui-group-theme-a .ui-btn:active, -html head + body .ui-btn.ui-btn-a:active { - background-color: #e8e8e8 /*{a-bdown-background-color}*/; - border-color: #ddd /*{a-bdown-border}*/; - color: #333 /*{a-bdown-color}*/; - text-shadow: 0 /*{a-bdown-shadow-x}*/ 1px /*{a-bdown-shadow-y}*/ 0 /*{a-bdown-shadow-radius}*/ #f3f3f3 /*{a-bdown-shadow-color}*/; -} -/* Active button */ -.ui-page-theme-a .ui-btn.ui-btn-active, -html .ui-bar-a .ui-btn.ui-btn-active, -html .ui-body-a .ui-btn.ui-btn-active, -html body .ui-group-theme-a .ui-btn.ui-btn-active, -html head + body .ui-btn.ui-btn-a.ui-btn-active, -/* Active checkbox icon */ -.ui-page-theme-a .ui-checkbox-on:after, -html .ui-bar-a .ui-checkbox-on:after, -html .ui-body-a .ui-checkbox-on:after, -html body .ui-group-theme-a .ui-checkbox-on:after, -.ui-btn.ui-checkbox-on.ui-btn-a:after, -/* Active flipswitch background */ -.ui-page-theme-a .ui-flipswitch-active, -html .ui-bar-a .ui-flipswitch-active, -html .ui-body-a .ui-flipswitch-active, -html body .ui-group-theme-a .ui-flipswitch-active, -html body .ui-flipswitch.ui-bar-a.ui-flipswitch-active, -/* Active slider track */ -.ui-page-theme-a .ui-slider-track .ui-btn-active, -html .ui-bar-a .ui-slider-track .ui-btn-active, -html .ui-body-a .ui-slider-track .ui-btn-active, -html body .ui-group-theme-a .ui-slider-track .ui-btn-active, -html body div.ui-slider-track.ui-body-a .ui-btn-active { - background-color: #3388cc /*{a-active-background-color}*/; - border-color: #3388cc /*{a-active-border}*/; - color: #fff /*{a-active-color}*/; - text-shadow: 0 /*{a-active-shadow-x}*/ 1px /*{a-active-shadow-y}*/ 0 /*{a-active-shadow-radius}*/ #005599 /*{a-active-shadow-color}*/; -} -/* Active radio button icon */ -.ui-page-theme-a .ui-radio-on:after, -html .ui-bar-a .ui-radio-on:after, -html .ui-body-a .ui-radio-on:after, -html body .ui-group-theme-a .ui-radio-on:after, -.ui-btn.ui-radio-on.ui-btn-a:after { - border-color: #3388cc /*{a-active-background-color}*/; -} -/* Focus */ -.ui-page-theme-a .ui-btn:focus, -html .ui-bar-a .ui-btn:focus, -html .ui-body-a .ui-btn:focus, -html body .ui-group-theme-a .ui-btn:focus, -html head + body .ui-btn.ui-btn-a:focus, -/* Focus buttons and text inputs with div wrap */ -.ui-page-theme-a .ui-focus, -html .ui-bar-a .ui-focus, -html .ui-body-a .ui-focus, -html body .ui-group-theme-a .ui-focus, -html head + body .ui-btn-a.ui-focus, -html head + body .ui-body-a.ui-focus { - -webkit-box-shadow: 0 0 12px #3388cc /*{a-active-background-color}*/; - -moz-box-shadow: 0 0 12px #3388cc /*{a-active-background-color}*/; - box-shadow: 0 0 12px #3388cc /*{a-active-background-color}*/; -} -/* B ------------------------------------------------------------------------------------------------------------*/ -/* Bar: Toolbars, dividers, slider track */ -.ui-bar-b, -.ui-page-theme-b .ui-bar-inherit, -html .ui-bar-b .ui-bar-inherit, -html .ui-body-b .ui-bar-inherit, -html body .ui-group-theme-b .ui-bar-inherit { - background-color: #1d1d1d /*{b-bar-background-color}*/; - border-color: #1b1b1b /*{b-bar-border}*/; - color: #fff /*{b-bar-color}*/; - text-shadow: 0 /*{b-bar-shadow-x}*/ 1px /*{b-bar-shadow-y}*/ 0 /*{b-bar-shadow-radius}*/ #111 /*{b-bar-shadow-color}*/; - font-weight: bold; -} -.ui-bar-b { - border-width: 1px; - border-style: solid; -} -/* Page and overlay */ -.ui-overlay-b, -.ui-page-theme-b, -.ui-page-theme-b .ui-panel-wrapper { - background-color: #252525 /*{b-page-background-color}*/; - border-color: #454545 /*{b-page-border}*/; - color: #fff /*{b-page-color}*/; - text-shadow: 0 /*{b-page-shadow-x}*/ 1px /*{b-page-shadow-y}*/ 0 /*{b-page-shadow-radius}*/ #111 /*{b-page-shadow-color}*/; -} -/* Body: Read-only lists, text inputs, collapsible content */ -.ui-body-b, -.ui-page-theme-b .ui-body-inherit, -html .ui-bar-b .ui-body-inherit, -html .ui-body-b .ui-body-inherit, -html body .ui-group-theme-b .ui-body-inherit, -html .ui-panel-page-container-b { - background-color: #2a2a2a /*{b-body-background-color}*/; - border-color: #1d1d1d /*{b-body-border}*/; - color: #fff /*{b-body-color}*/; - text-shadow: 0 /*{b-body-shadow-x}*/ 1px /*{b-body-shadow-y}*/ 0 /*{b-body-shadow-radius}*/ #111 /*{b-body-shadow-color}*/; -} -.ui-body-b { - border-width: 1px; - border-style: solid; -} -/* Links */ -.ui-page-theme-b a, -html .ui-bar-b a, -html .ui-body-b a, -html body .ui-group-theme-b a { - color: #22aadd /*{b-link-color}*/; - font-weight: bold; -} -.ui-page-theme-b a:visited, -html .ui-bar-b a:visited, -html .ui-body-b a:visited, -html body .ui-group-theme-b a:visited { - color: #22aadd /*{b-link-visited}*/; -} -.ui-page-theme-b a:hover, -html .ui-bar-b a:hover, -html .ui-body-b a:hover, -html body .ui-group-theme-b a:hover { - color: #0088bb /*{b-link-hover}*/; -} -.ui-page-theme-b a:active, -html .ui-bar-b a:active, -html .ui-body-b a:active, -html body .ui-group-theme-b a:active { - color: #0088bb /*{b-link-active}*/; -} -/* Button up */ -.ui-page-theme-b .ui-btn, -html .ui-bar-b .ui-btn, -html .ui-body-b .ui-btn, -html body .ui-group-theme-b .ui-btn, -html head + body .ui-btn.ui-btn-b, -/* Button visited */ -.ui-page-theme-b .ui-btn:visited, -html .ui-bar-b .ui-btn:visited, -html .ui-body-b .ui-btn:visited, -html body .ui-group-theme-b .ui-btn:visited, -html head + body .ui-btn.ui-btn-b:visited { - background-color: #333 /*{b-bup-background-color}*/; - border-color: #1f1f1f /*{b-bup-border}*/; - color: #fff /*{b-bup-color}*/; - text-shadow: 0 /*{b-bup-shadow-x}*/ 1px /*{b-bup-shadow-y}*/ 0 /*{b-bup-shadow-radius}*/ #111 /*{b-bup-shadow-color}*/; -} -/* Button hover */ -.ui-page-theme-b .ui-btn:hover, -html .ui-bar-b .ui-btn:hover, -html .ui-body-b .ui-btn:hover, -html body .ui-group-theme-b .ui-btn:hover, -html head + body .ui-btn.ui-btn-b:hover { - background-color: #373737 /*{b-bhover-background-color}*/; - border-color: #1f1f1f /*{b-bhover-border}*/; - color: #fff /*{b-bhover-color}*/; - text-shadow: 0 /*{b-bhover-shadow-x}*/ 1px /*{b-bhover-shadow-y}*/ 0 /*{b-bhover-shadow-radius}*/ #111 /*{b-bhover-shadow-color}*/; -} -/* Button down */ -.ui-page-theme-b .ui-btn:active, -html .ui-bar-b .ui-btn:active, -html .ui-body-b .ui-btn:active, -html body .ui-group-theme-b .ui-btn:active, -html head + body .ui-btn.ui-btn-b:active { - background-color: #404040 /*{b-bdown-background-color}*/; - border-color: #1f1f1f /*{b-bdown-border}*/; - color: #fff /*{b-bdown-color}*/; - text-shadow: 0 /*{b-bdown-shadow-x}*/ 1px /*{b-bdown-shadow-y}*/ 0 /*{b-bdown-shadow-radius}*/ #111 /*{b-bdown-shadow-color}*/; -} -/* Active button */ -.ui-page-theme-b .ui-btn.ui-btn-active, -html .ui-bar-b .ui-btn.ui-btn-active, -html .ui-body-b .ui-btn.ui-btn-active, -html body .ui-group-theme-b .ui-btn.ui-btn-active, -html head + body .ui-btn.ui-btn-b.ui-btn-active, -/* Active checkbox icon */ -.ui-page-theme-b .ui-checkbox-on:after, -html .ui-bar-b .ui-checkbox-on:after, -html .ui-body-b .ui-checkbox-on:after, -html body .ui-group-theme-b .ui-checkbox-on:after, -.ui-btn.ui-checkbox-on.ui-btn-b:after, -/* Active flipswitch background */ -.ui-page-theme-b .ui-flipswitch-active, -html .ui-bar-b .ui-flipswitch-active, -html .ui-body-b .ui-flipswitch-active, -html body .ui-group-theme-b .ui-flipswitch-active, -html body .ui-flipswitch.ui-bar-b.ui-flipswitch-active, -/* Active slider track */ -.ui-page-theme-b .ui-slider-track .ui-btn-active, -html .ui-bar-b .ui-slider-track .ui-btn-active, -html .ui-body-b .ui-slider-track .ui-btn-active, -html body .ui-group-theme-b .ui-slider-track .ui-btn-active, -html body div.ui-slider-track.ui-body-b .ui-btn-active { - background-color: #22aadd /*{b-active-background-color}*/; - border-color: #22aadd /*{b-active-border}*/; - color: #fff /*{b-active-color}*/; - text-shadow: 0 /*{b-active-shadow-x}*/ 1px /*{b-active-shadow-y}*/ 0 /*{b-active-shadow-radius}*/ #0088bb /*{b-active-shadow-color}*/; -} -/* Active radio button icon */ -.ui-page-theme-b .ui-radio-on:after, -html .ui-bar-b .ui-radio-on:after, -html .ui-body-b .ui-radio-on:after, -html body .ui-group-theme-b .ui-radio-on:after, -.ui-btn.ui-radio-on.ui-btn-b:after { - border-color: #22aadd /*{b-active-background-color}*/; -} -/* Focus */ -.ui-page-theme-b .ui-btn:focus, -html .ui-bar-b .ui-btn:focus, -html .ui-body-b .ui-btn:focus, -html body .ui-group-theme-b .ui-btn:focus, -html head + body .ui-btn.ui-btn-b:focus, -/* Focus buttons and text inputs with div wrap */ -.ui-page-theme-b .ui-focus, -html .ui-bar-b .ui-focus, -html .ui-body-b .ui-focus, -html body .ui-group-theme-b .ui-focus, -html head + body .ui-btn-b.ui-focus, -html head + body .ui-body-b.ui-focus { - -webkit-box-shadow: 0 0 12px #22aadd /*{b-active-background-color}*/; - -moz-box-shadow: 0 0 12px #22aadd /*{b-active-background-color}*/; - box-shadow: 0 0 12px #22aadd /*{b-active-background-color}*/; -} -/* Structure */ -/* Disabled ------------------------------------------------------------------------------------------------------------*/ -/* Class ui-disabled deprecated in 1.4. :disabled not supported by IE8 so we use [disabled] */ -.ui-disabled, -.ui-state-disabled, -button[disabled], -.ui-select .ui-btn.ui-state-disabled { - filter: Alpha(Opacity=30); - opacity: .3; - cursor: default !important; - pointer-events: none; -} -/* Focus state outline ------------------------------------------------------------------------------------------------------------*/ -.ui-btn:focus, -.ui-btn.ui-focus { - outline: 0; -} -/* Unset box-shadow in browsers that don't do it right */ -.ui-noboxshadow .ui-shadow, -.ui-noboxshadow .ui-shadow-inset, -.ui-noboxshadow .ui-overlay-shadow, -.ui-noboxshadow .ui-shadow-icon.ui-btn:after, -.ui-noboxshadow .ui-shadow-icon .ui-btn:after, -.ui-noboxshadow .ui-focus, -.ui-noboxshadow .ui-btn:focus, -.ui-noboxshadow input:focus, -.ui-noboxshadow .ui-panel { - -webkit-box-shadow: none !important; - -moz-box-shadow: none !important; - box-shadow: none !important; -} -.ui-noboxshadow .ui-btn:focus, -.ui-noboxshadow .ui-focus { - outline-width: 1px; - outline-style: auto; -} -/* Some unsets */ -.ui-mobile, -.ui-mobile body { - height: 99.9%; -} -.ui-mobile fieldset, -.ui-page { - padding: 0; - margin: 0; -} -.ui-mobile a img, -.ui-mobile fieldset { - border-width: 0; -} -/* Fixes for fieldset issues on IE10 and FF (see #6077) */ -.ui-mobile fieldset { - min-width: 0; -} -@-moz-document url-prefix() { - .ui-mobile fieldset { - display: table-column; - vertical-align: middle; - } -} -/* Viewport */ -.ui-mobile-viewport { - margin: 0; - overflow-x: visible; - -webkit-text-size-adjust: 100%; - -ms-text-size-adjust:none; - -webkit-tap-highlight-color: rgba(0, 0, 0, 0); -} -/* Issue #2066 */ -body.ui-mobile-viewport, -div.ui-mobile-viewport { - overflow-x: hidden; -} -/* "page" containers - full-screen views, one should always be in view post-pageload */ -.ui-mobile [data-role=page], -.ui-mobile [data-role=dialog], -.ui-page { - top: 0; - left: 0; - width: 100%; - min-height: 100%; - position: absolute; - display: none; - border: 0; -} -/* On ios4, setting focus on the page element causes flashing during transitions when there is an outline, so we turn off outlines */ -.ui-page { - outline: none; -} -.ui-mobile .ui-page-active { - display: block; - overflow: visible; - overflow-x: hidden; -} -@media screen and (orientation: portrait) { - .ui-mobile .ui-page { - min-height: 420px; - } -} -@media screen and (orientation: landscape) { - .ui-mobile .ui-page { - min-height: 300px; - } -} -/* Fouc */ -.ui-mobile-rendering > * { - visibility: hidden; -} -/* Non-js content hiding */ -.ui-nojs { - position: absolute !important; - height: 1px; - width: 1px; - overflow: hidden; - clip: rect(1px,1px,1px,1px); -} -/* Loading screen */ -.ui-loading .ui-loader { - display: block; -} -.ui-loader { - display: none; - z-index: 9999999; - position: fixed; - top: 50%; - left: 50%; - border:0; -} -.ui-loader-default { - background: none; - filter: Alpha(Opacity=18); - opacity: .18; - width: 2.875em; - height: 2.875em; - margin-left: -1.4375em; - margin-top: -1.4375em; -} -.ui-loader-verbose { - width: 12.5em; - filter: Alpha(Opacity=88); - opacity: .88; - box-shadow: 0 1px 1px -1px #fff; - height: auto; - margin-left: -6.875em; - margin-top: -2.6875em; - padding: .625em; -} -.ui-loader-default h1 { - font-size: 0; - width: 0; - height: 0; - overflow: hidden; -} -.ui-loader-verbose h1 { - font-size: 1em; - margin: 0; - text-align: center; -} -.ui-loader .ui-icon-loading { - background-color: #000; - display: block; - margin: 0; - width: 2.75em; - height: 2.75em; - padding: .0625em; - -webkit-border-radius: 2.25em; - border-radius: 2.25em; -} -.ui-loader-verbose .ui-icon-loading { - margin: 0 auto .625em; - filter: Alpha(Opacity=75); - opacity: .75; -} -.ui-loader-textonly { - padding: .9375em; - margin-left: -7.1875em; -} -.ui-loader-textonly .ui-icon-loading { - display: none; -} -.ui-loader-fakefix { - position: absolute; -} -/* Headers, content panels */ -.ui-bar, -.ui-body { - position: relative; - padding: .4em 1em; - overflow: hidden; - display: block; - clear: both; -} -.ui-bar h1, -.ui-bar h2, -.ui-bar h3, -.ui-bar h4, -.ui-bar h5, -.ui-bar h6 { - margin: 0; - padding: 0; - font-size: 1em; - display: inline-block; -} -.ui-header, -.ui-footer { - border-width: 1px 0; - border-style: solid; - position: relative; -} -.ui-header:empty, -.ui-footer:empty { - min-height: 2.6875em; -} -.ui-header .ui-title, -.ui-footer .ui-title { - font-size: 1em; - min-height: 1.1em; - text-align: center; - display: block; - margin: 0 30%; - padding: .7em 0; - text-overflow: ellipsis; - overflow: hidden; - white-space: nowrap; - outline: 0 !important; -} -.ui-footer .ui-title { - margin: 0 1em; -} -.ui-content { - border-width: 0; - overflow: visible; - overflow-x: hidden; - padding: 1em; -} -/* Corner styling for dialogs and popups */ -.ui-corner-all > .ui-header:first-child, -.ui-corner-all > .ui-content:first-child, -.ui-corner-all > .ui-footer:first-child { - -webkit-border-top-left-radius: inherit; - border-top-left-radius: inherit; - -webkit-border-top-right-radius: inherit; - border-top-right-radius: inherit; -} -.ui-corner-all > .ui-header:last-child, -.ui-corner-all > .ui-content:last-child, -.ui-corner-all > .ui-footer:last-child { - -webkit-border-bottom-left-radius: inherit; - border-bottom-left-radius: inherit; - -webkit-border-bottom-right-radius: inherit; - border-bottom-right-radius: inherit; -} -/* Buttons and icons */ -.ui-btn { - font-size: 16px; - margin: .5em 0; - padding: .7em 1em; - display: block; - position: relative; - text-align: center; - text-overflow: ellipsis; - overflow: hidden; - white-space: nowrap; - cursor: pointer; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} -.ui-btn-icon-notext, -.ui-header button.ui-btn.ui-btn-icon-notext, -.ui-footer button.ui-btn.ui-btn-icon-notext { - padding: 0; - width: 1.75em; - height: 1.75em; - text-indent: -9999px; - white-space: nowrap !important; -} -.ui-mini { - font-size: 12.5px; -} -.ui-mini .ui-btn { - font-size: inherit; -} -/* Make buttons in toolbars default to mini and inline. */ -.ui-header .ui-btn, -.ui-footer .ui-btn { - font-size: 12.5px; - display: inline-block; - vertical-align: middle; -} -.ui-header .ui-controlgroup .ui-btn-icon-notext, -.ui-footer .ui-controlgroup .ui-btn-icon-notext { - font-size: 12.5px; -} -/* To ensure same top and left/right position when ui-btn-left/right are added to something other than buttons. */ -.ui-header .ui-btn-left, -.ui-header .ui-btn-right { - font-size: 12.5px; -} -.ui-mini.ui-btn-icon-notext, -.ui-mini .ui-btn-icon-notext, -.ui-header .ui-btn-icon-notext, -.ui-footer .ui-btn-icon-notext { - font-size: 16px; - padding: 0; -} -.ui-btn-inline { - display: inline-block; - vertical-align: middle; - margin-right: .625em; -} -.ui-btn-icon-left { - padding-left: 2.5em; -} -.ui-btn-icon-right { - padding-right: 2.5em; -} -.ui-btn-icon-top { - padding-top: 2.5em; -} -.ui-btn-icon-bottom { - padding-bottom: 2.5em; -} -.ui-header .ui-btn-icon-top, -.ui-footer .ui-btn-icon-top, -.ui-header .ui-btn-icon-bottom, -.ui-footer .ui-btn-icon-bottom { - padding-left: .3125em; - padding-right: .3125em; -} -.ui-btn-icon-left:after, -.ui-btn-icon-right:after, -.ui-btn-icon-top:after, -.ui-btn-icon-bottom:after, -.ui-btn-icon-notext:after { - content: ""; - position: absolute; - display: block; - width: 22px; - height: 22px; -} -.ui-btn-icon-notext:after, -.ui-btn-icon-left:after, -.ui-btn-icon-right:after { - top: 50%; - margin-top: -11px; -} -.ui-btn-icon-left:after { - left: .5625em; -} -.ui-btn-icon-right:after { - right: .5625em; -} -.ui-mini.ui-btn-icon-left:after, -.ui-mini .ui-btn-icon-left:after, -.ui-header .ui-btn-icon-left:after, -.ui-footer .ui-btn-icon-left:after { - left: .37em; -} -.ui-mini.ui-btn-icon-right:after, -.ui-mini .ui-btn-icon-right:after, -.ui-header .ui-btn-icon-right:after, -.ui-footer .ui-btn-icon-right:after { - right: .37em; -} -.ui-btn-icon-notext:after, -.ui-btn-icon-top:after, -.ui-btn-icon-bottom:after { - left: 50%; - margin-left: -11px; -} -.ui-btn-icon-top:after { - top: .5625em; -} -.ui-btn-icon-bottom:after { - top: auto; - bottom: .5625em; -} -/* Buttons in header position classes */ -.ui-header .ui-btn-left, -.ui-header .ui-btn-right, -.ui-btn-left > [class*="ui-"], -.ui-btn-right > [class*="ui-"] { - margin: 0; -} -.ui-btn-left, -.ui-btn-right { - position: absolute; - top: .24em; -} -.ui-btn-left { - left: .4em; -} -.ui-btn-right { - right: .4em; -} -.ui-btn-icon-notext.ui-btn-left { - top: .3125em; - left: .3125em; -} -.ui-btn-icon-notext.ui-btn-right { - top: .3125em; - right: .3125em; -} -/* Button elements */ -button.ui-btn, -.ui-controlgroup-controls button.ui-btn-icon-notext { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - -webkit-appearance: none; - -moz-appearance: none; - width: 100%; -} -button.ui-btn-inline, -.ui-header button.ui-btn, -.ui-footer button.ui-btn { - width: auto; -} -/* Firefox adds a 1px border in a button element. We negate this to make sure they have the same height as other buttons in controlgroups. */ -button.ui-btn::-moz-focus-inner { - border: 0; -} -button.ui-btn-icon-notext, -.ui-controlgroup-horizontal .ui-controlgroup-controls button.ui-btn { - -webkit-box-sizing: content-box; - -moz-box-sizing: content-box; - box-sizing: content-box; - width: 1.75em; -} -/* Form labels */ -.ui-mobile label, -.ui-controlgroup-label { - display: block; - margin: 0 0 .4em; -} -/* Accessible content hiding */ -/* ui-hide-label deprecated in 1.4. TODO: Remove in 1.5 */ -.ui-hide-label > label, -.ui-hide-label .ui-controlgroup-label, -.ui-hide-label .ui-rangeslider label, -.ui-hidden-accessible { - position: absolute !important; - height: 1px; - width: 1px; - overflow: hidden; - clip: rect(1px,1px,1px,1px); -} -/* Used for hiding elements by the filterable widget. You can also use this class to hide list items or buttons in controlgroups; this ensures correct corner styling. */ -.ui-screen-hidden { - display: none !important; -} -/* Transitions originally inspired by those from jQtouch, nice work, folks */ -.ui-mobile-viewport-transitioning, -.ui-mobile-viewport-transitioning .ui-page { - width: 100%; - height: 100%; - overflow: hidden; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -.ui-page-pre-in { - opacity: 0; -} -.in { - -webkit-animation-timing-function: ease-out; - -webkit-animation-duration: 350ms; - -moz-animation-timing-function: ease-out; - -moz-animation-duration: 350ms; - animation-timing-function: ease-out; - animation-duration: 350ms; -} -.out { - -webkit-animation-timing-function: ease-in; - -webkit-animation-duration: 225ms; - -moz-animation-timing-function: ease-in; - -moz-animation-duration: 225ms; - animation-timing-function: ease-in; - animation-duration: 225ms; -} -@-webkit-keyframes fadein { - from { opacity: 0; } - to { opacity: 1; } -} -@-moz-keyframes fadein { - from { opacity: 0; } - to { opacity: 1; } -} -@keyframes fadein { - from { opacity: 0; } - to { opacity: 1; } -} -@-webkit-keyframes fadeout { - from { opacity: 1; } - to { opacity: 0; } -} -@-moz-keyframes fadeout { - from { opacity: 1; } - to { opacity: 0; } -} -@keyframes fadeout { - from { opacity: 1; } - to { opacity: 0; } -} -.fade.out { - opacity: 0; - -webkit-animation-duration: 125ms; - -webkit-animation-name: fadeout; - -moz-animation-duration: 125ms; - -moz-animation-name: fadeout; - animation-duration: 125ms; - animation-name: fadeout; -} -.fade.in { - opacity: 1; - -webkit-animation-duration: 225ms; - -webkit-animation-name: fadein; - -moz-animation-duration: 225ms; - -moz-animation-name: fadein; - animation-duration: 225ms; - animation-name: fadein; -} -.pop { - -webkit-transform-origin: 50% 50%; - -moz-transform-origin: 50% 50%; - transform-origin: 50% 50%; -} -.pop.in { - -webkit-transform: scale(1); - -webkit-animation-name: popin; - -webkit-animation-duration: 350ms; - -moz-transform: scale(1); - -moz-animation-name: popin; - -moz-animation-duration: 350ms; - transform: scale(1); - animation-name: popin; - animation-duration: 350ms; - opacity: 1; -} -.pop.out { - -webkit-animation-name: fadeout; - -webkit-animation-duration: 100ms; - -moz-animation-name: fadeout; - -moz-animation-duration: 100ms; - animation-name: fadeout; - animation-duration: 100ms; - opacity: 0; -} -.pop.in.reverse { - -webkit-animation-name: fadein; - -moz-animation-name: fadein; - animation-name: fadein; -} -.pop.out.reverse { - -webkit-transform: scale(.8); - -webkit-animation-name: popout; - -moz-transform: scale(.8); - -moz-animation-name: popout; - transform: scale(.8); - animation-name: popout; -} -@-webkit-keyframes popin { - from { - -webkit-transform: scale(.8); - opacity: 0; - } - to { - -webkit-transform: scale(1); - opacity: 1; - } -} -@-moz-keyframes popin { - from { - -moz-transform: scale(.8); - opacity: 0; - } - to { - -moz-transform: scale(1); - opacity: 1; - } -} -@keyframes popin { - from { - transform: scale(.8); - opacity: 0; - } - to { - transform: scale(1); - opacity: 1; - } -} -@-webkit-keyframes popout { - from { - -webkit-transform: scale(1); - opacity: 1; - } - to { - -webkit-transform: scale(.8); - opacity: 0; - } -} -@-moz-keyframes popout { - from { - -moz-transform: scale(1); - opacity: 1; - } - to { - -moz-transform: scale(.8); - opacity: 0; - } -} -@keyframes popout { - from { - transform: scale(1); - opacity: 1; - } - to { - transform: scale(.8); - opacity: 0; - } -} -/* keyframes for slidein from sides */ -@-webkit-keyframes slideinfromright { - from { -webkit-transform: translate3d(100%,0,0); } - to { -webkit-transform: translate3d(0,0,0); } -} -@-moz-keyframes slideinfromright { - from { -moz-transform: translateX(100%); } - to { -moz-transform: translateX(0); } -} -@keyframes slideinfromright { - from { transform: translateX(100%); } - to { transform: translateX(0); } -} -@-webkit-keyframes slideinfromleft { - from { -webkit-transform: translate3d(-100%,0,0); } - to { -webkit-transform: translate3d(0,0,0); } -} -@-moz-keyframes slideinfromleft { - from { -moz-transform: translateX(-100%); } - to { -moz-transform: translateX(0); } -} -@keyframes slideinfromleft { - from { transform: translateX(-100%); } - to { transform: translateX(0); } -} -/* keyframes for slideout to sides */ -@-webkit-keyframes slideouttoleft { - from { -webkit-transform: translate3d(0,0,0); } - to { -webkit-transform: translate3d(-100%,0,0); } -} -@-moz-keyframes slideouttoleft { - from { -moz-transform: translateX(0); } - to { -moz-transform: translateX(-100%); } -} -@keyframes slideouttoleft { - from { transform: translateX(0); } - to { transform: translateX(-100%); } -} -@-webkit-keyframes slideouttoright { - from { -webkit-transform: translate3d(0,0,0); } - to { -webkit-transform: translate3d(100%,0,0); } -} -@-moz-keyframes slideouttoright { - from { -moz-transform: translateX(0); } - to { -moz-transform: translateX(100%); } -} -@keyframes slideouttoright { - from { transform: translateX(0); } - to { transform: translateX(100%); } -} -.slide.out, .slide.in { - -webkit-animation-timing-function: ease-out; - -webkit-animation-duration: 350ms; - -moz-animation-timing-function: ease-out; - -moz-animation-duration: 350ms; - animation-timing-function: ease-out; - animation-duration: 350ms; -} -.slide.out { - -webkit-transform: translate3d(-100%,0,0); - -webkit-animation-name: slideouttoleft; - -moz-transform: translateX(-100%); - -moz-animation-name: slideouttoleft; - transform: translateX(-100%); - animation-name: slideouttoleft; -} -.slide.in { - -webkit-transform: translate3d(0,0,0); - -webkit-animation-name: slideinfromright; - -moz-transform: translateX(0); - -moz-animation-name: slideinfromright; - transform: translateX(0); - animation-name: slideinfromright; -} -.slide.out.reverse { - -webkit-transform: translate3d(100%,0,0); - -webkit-animation-name: slideouttoright; - -moz-transform: translateX(100%); - -moz-animation-name: slideouttoright; - transform: translateX(100%); - animation-name: slideouttoright; -} -.slide.in.reverse { - -webkit-transform: translate3d(0,0,0); - -webkit-animation-name: slideinfromleft; - -moz-transform: translateX(0); - -moz-animation-name: slideinfromleft; - transform: translateX(0); - animation-name: slideinfromleft; -} -.slidefade.out { - -webkit-transform: translateX(-100%); - -webkit-animation-name: slideouttoleft; - -webkit-animation-duration: 225ms; - -moz-transform: translateX(-100%); - -moz-animation-name: slideouttoleft; - -moz-animation-duration: 225ms; - transform: translateX(-100%); - animation-name: slideouttoleft; - animation-duration: 225ms; -} -.slidefade.in { - -webkit-transform: translateX(0); - -webkit-animation-name: fadein; - -webkit-animation-duration: 200ms; - -moz-transform: translateX(0); - -moz-animation-name: fadein; - -moz-animation-duration: 200ms; - transform: translateX(0); - animation-name: fadein; - animation-duration: 200ms; -} -.slidefade.out.reverse { - -webkit-transform: translateX(100%); - -webkit-animation-name: slideouttoright; - -webkit-animation-duration: 200ms; - -moz-transform: translateX(100%); - -moz-animation-name: slideouttoright; - -moz-animation-duration: 200ms; - transform: translateX(100%); - animation-name: slideouttoright; - animation-duration: 200ms; -} -.slidefade.in.reverse { - -webkit-transform: translateX(0); - -webkit-animation-name: fadein; - -webkit-animation-duration: 200ms; - -moz-transform: translateX(0); - -moz-animation-name: fadein; - -moz-animation-duration: 200ms; - transform: translateX(0); - animation-name: fadein; - animation-duration: 200ms; -} -/* slide down */ -.slidedown.out { - -webkit-animation-name: fadeout; - -webkit-animation-duration: 100ms; - -moz-animation-name: fadeout; - -moz-animation-duration: 100ms; - animation-name: fadeout; - animation-duration: 100ms; -} -.slidedown.in { - -webkit-transform: translateY(0); - -webkit-animation-name: slideinfromtop; - -webkit-animation-duration: 250ms; - -moz-transform: translateY(0); - -moz-animation-name: slideinfromtop; - -moz-animation-duration: 250ms; - transform: translateY(0); - animation-name: slideinfromtop; - animation-duration: 250ms; -} -.slidedown.in.reverse { - -webkit-animation-name: fadein; - -webkit-animation-duration: 150ms; - -moz-animation-name: fadein; - -moz-animation-duration: 150ms; - animation-name: fadein; - animation-duration: 150ms; -} -.slidedown.out.reverse { - -webkit-transform: translateY(-100%); - -webkit-animation-name: slideouttotop; - -webkit-animation-duration: 200ms; - -moz-transform: translateY(-100%); - -moz-animation-name: slideouttotop; - -moz-animation-duration: 200ms; - transform: translateY(-100%); - animation-name: slideouttotop; - animation-duration: 200ms; -} -@-webkit-keyframes slideinfromtop { - from { -webkit-transform: translateY(-100%); } - to { -webkit-transform: translateY(0); } -} -@-moz-keyframes slideinfromtop { - from { -moz-transform: translateY(-100%); } - to { -moz-transform: translateY(0); } -} -@keyframes slideinfromtop { - from { transform: translateY(-100%); } - to { transform: translateY(0); } -} -@-webkit-keyframes slideouttotop { - from { -webkit-transform: translateY(0); } - to { -webkit-transform: translateY(-100%); } -} -@-moz-keyframes slideouttotop { - from { -moz-transform: translateY(0); } - to { -moz-transform: translateY(-100%); } -} -@keyframes slideouttotop { - from { transform: translateY(0); } - to { transform: translateY(-100%); } -} -/* slide up */ -.slideup.out { - -webkit-animation-name: fadeout; - -webkit-animation-duration: 100ms; - -moz-animation-name: fadeout; - -moz-animation-duration: 100ms; - animation-name: fadeout; - animation-duration: 100ms; -} -.slideup.in { - -webkit-transform: translateY(0); - -webkit-animation-name: slideinfrombottom; - -webkit-animation-duration: 250ms; - -moz-transform: translateY(0); - -moz-animation-name: slideinfrombottom; - -moz-animation-duration: 250ms; - transform: translateY(0); - animation-name: slideinfrombottom; - animation-duration: 250ms; -} -.slideup.in.reverse { - -webkit-animation-name: fadein; - -webkit-animation-duration: 150ms; - -moz-animation-name: fadein; - -moz-animation-duration: 150ms; - animation-name: fadein; - animation-duration: 150ms; -} -.slideup.out.reverse { - -webkit-transform: translateY(100%); - -webkit-animation-name: slideouttobottom; - -webkit-animation-duration: 200ms; - -moz-transform: translateY(100%); - -moz-animation-name: slideouttobottom; - -moz-animation-duration: 200ms; - transform: translateY(100%); - animation-name: slideouttobottom; - animation-duration: 200ms; -} -@-webkit-keyframes slideinfrombottom { - from { -webkit-transform: translateY(100%); } - to { -webkit-transform: translateY(0); } -} -@-moz-keyframes slideinfrombottom { - from { -moz-transform: translateY(100%); } - to { -moz-transform: translateY(0); } -} -@keyframes slideinfrombottom { - from { transform: translateY(100%); } - to { transform: translateY(0); } -} -@-webkit-keyframes slideouttobottom { - from { -webkit-transform: translateY(0); } - to { -webkit-transform: translateY(100%); } -} -@-moz-keyframes slideouttobottom { - from { -moz-transform: translateY(0); } - to { -moz-transform: translateY(100%); } -} -@keyframes slideouttobottom { - from { transform: translateY(0); } - to { transform: translateY(100%); } -} -/* The properties in this rule are only necessary for the 'flip' transition. - * We need specify the perspective to create a projection matrix. This will add - * some depth as the element flips. The depth number represents the distance of - * the viewer from the z-plane. According to the CSS3 spec, 1000 is a moderate - * value. - */ -.viewport-flip { - -webkit-perspective: 1000; - -moz-perspective: 1000; - perspective: 1000; - position: absolute; -} -.flip { - -webkit-backface-visibility: hidden; - -webkit-transform: translateX(0); /* Needed to work around an iOS 3.1 bug that causes listview thumbs to disappear when -webkit-visibility:hidden is used. */ - -moz-backface-visibility: hidden; - -moz-transform: translateX(0); - backface-visibility: hidden; - transform: translateX(0); -} -.flip.out { - -webkit-transform: rotateY(-90deg) scale(.9); - -webkit-animation-name: flipouttoleft; - -webkit-animation-duration: 175ms; - -moz-transform: rotateY(-90deg) scale(.9); - -moz-animation-name: flipouttoleft; - -moz-animation-duration: 175ms; - transform: rotateY(-90deg) scale(.9); - animation-name: flipouttoleft; - animation-duration: 175ms; -} -.flip.in { - -webkit-animation-name: flipintoright; - -webkit-animation-duration: 225ms; - -moz-animation-name: flipintoright; - -moz-animation-duration: 225ms; - animation-name: flipintoright; - animation-duration: 225ms; -} -.flip.out.reverse { - -webkit-transform: rotateY(90deg) scale(.9); - -webkit-animation-name: flipouttoright; - -moz-transform: rotateY(90deg) scale(.9); - -moz-animation-name: flipouttoright; - transform: rotateY(90deg) scale(.9); - animation-name: flipouttoright; -} -.flip.in.reverse { - -webkit-animation-name: flipintoleft; - -moz-animation-name: flipintoleft; - animation-name: flipintoleft; -} -@-webkit-keyframes flipouttoleft { - from { -webkit-transform: rotateY(0); } - to { -webkit-transform: rotateY(-90deg) scale(.9); } -} -@-moz-keyframes flipouttoleft { - from { -moz-transform: rotateY(0); } - to { -moz-transform: rotateY(-90deg) scale(.9); } -} -@keyframes flipouttoleft { - from { transform: rotateY(0); } - to { transform: rotateY(-90deg) scale(.9); } -} -@-webkit-keyframes flipouttoright { - from { -webkit-transform: rotateY(0) ; } - to { -webkit-transform: rotateY(90deg) scale(.9); } -} -@-moz-keyframes flipouttoright { - from { -moz-transform: rotateY(0); } - to { -moz-transform: rotateY(90deg) scale(.9); } -} -@keyframes flipouttoright { - from { transform: rotateY(0); } - to { transform: rotateY(90deg) scale(.9); } -} -@-webkit-keyframes flipintoleft { - from { -webkit-transform: rotateY(-90deg) scale(.9); } - to { -webkit-transform: rotateY(0); } -} -@-moz-keyframes flipintoleft { - from { -moz-transform: rotateY(-90deg) scale(.9); } - to { -moz-transform: rotateY(0); } -} -@keyframes flipintoleft { - from { transform: rotateY(-90deg) scale(.9); } - to { transform: rotateY(0); } -} -@-webkit-keyframes flipintoright { - from { -webkit-transform: rotateY(90deg) scale(.9); } - to { -webkit-transform: rotateY(0); } -} -@-moz-keyframes flipintoright { - from { -moz-transform: rotateY(90deg) scale(.9); } - to { -moz-transform: rotateY(0); } -} -@keyframes flipintoright { - from { transform: rotateY(90deg) scale(.9); } - to { transform: rotateY(0); } -} -/* The properties in this rule are only necessary for the 'flip' transition. - * We need specify the perspective to create a projection matrix. This will add - * some depth as the element flips. The depth number represents the distance of - * the viewer from the z-plane. According to the CSS3 spec, 1000 is a moderate - * value. - */ -.viewport-turn { - -webkit-perspective: 200px; - -moz-perspective: 200px; - -ms-perspective: 200px; - perspective: 200px; - position: absolute; -} -.turn { - -webkit-backface-visibility: hidden; - -webkit-transform: translateX(0); /* Needed to work around an iOS 3.1 bug that causes listview thumbs to disappear when -webkit-visibility:hidden is used. */ - -webkit-transform-origin: 0; - - -moz-backface-visibility: hidden; - -moz-transform: translateX(0); - -moz-transform-origin: 0; - - backface-visibility :hidden; - transform: translateX(0); - transform-origin: 0; -} -.turn.out { - -webkit-transform: rotateY(-90deg) scale(.9); - -webkit-animation-name: flipouttoleft; - -webkit-animation-duration: 125ms; - -moz-transform: rotateY(-90deg) scale(.9); - -moz-animation-name: flipouttoleft; - -moz-animation-duration: 125ms; - transform: rotateY(-90deg) scale(.9); - animation-name: flipouttoleft; - animation-duration: 125ms; -} -.turn.in { - -webkit-animation-name: flipintoright; - -webkit-animation-duration: 250ms; - -moz-animation-name: flipintoright; - -moz-animation-duration: 250ms; - animation-name: flipintoright; - animation-duration: 250ms; - -} -.turn.out.reverse { - -webkit-transform: rotateY(90deg) scale(.9); - -webkit-animation-name: flipouttoright; - -moz-transform: rotateY(90deg) scale(.9); - -moz-animation-name: flipouttoright; - transform: rotateY(90deg) scale(.9); - animation-name: flipouttoright; -} -.turn.in.reverse { - -webkit-animation-name: flipintoleft; - -moz-animation-name: flipintoleft; - animation-name: flipintoleft; -} -@-webkit-keyframes flipouttoleft { - from { -webkit-transform: rotateY(0); } - to { -webkit-transform: rotateY(-90deg) scale(.9); } -} -@-moz-keyframes flipouttoleft { - from { -moz-transform: rotateY(0); } - to { -moz-transform: rotateY(-90deg) scale(.9); } -} -@keyframes flipouttoleft { - from { transform: rotateY(0); } - to { transform: rotateY(-90deg) scale(.9); } -} -@-webkit-keyframes flipouttoright { - from { -webkit-transform: rotateY(0) ; } - to { -webkit-transform: rotateY(90deg) scale(.9); } -} -@-moz-keyframes flipouttoright { - from { -moz-transform: rotateY(0); } - to { -moz-transform: rotateY(90deg) scale(.9); } -} -@keyframes flipouttoright { - from { transform: rotateY(0); } - to { transform: rotateY(90deg) scale(.9); } -} -@-webkit-keyframes flipintoleft { - from { -webkit-transform: rotateY(-90deg) scale(.9); } - to { -webkit-transform: rotateY(0); } -} -@-moz-keyframes flipintoleft { - from { -moz-transform: rotateY(-90deg) scale(.9); } - to { -moz-transform: rotateY(0); } -} -@keyframes flipintoleft { - from { transform: rotateY(-90deg) scale(.9); } - to { transform: rotateY(0); } -} -@-webkit-keyframes flipintoright { - from { -webkit-transform: rotateY(90deg) scale(.9); } - to { -webkit-transform: rotateY(0); } -} -@-moz-keyframes flipintoright { - from { -moz-transform: rotateY(90deg) scale(.9); } - to { -moz-transform: rotateY(0); } -} -@keyframes flipintoright { - from { transform: rotateY(90deg) scale(.9); } - to { transform: rotateY(0); } -} -/* flow transition */ -.flow { - -webkit-transform-origin: 50% 30%; - -webkit-box-shadow: 0 0 20px rgba(0,0,0,.4); - -moz-transform-origin: 50% 30%; - -moz-box-shadow: 0 0 20px rgba(0,0,0,.4); - transform-origin: 50% 30%; - box-shadow: 0 0 20px rgba(0,0,0,.4); -} -.ui-dialog.flow { - -webkit-transform-origin: none; - -webkit-box-shadow: none; - -moz-transform-origin: none; - -moz-box-shadow: none; - transform-origin: none; - box-shadow: none; -} -.flow.out { - -webkit-transform: translateX(-100%) scale(.7); - -webkit-animation-name: flowouttoleft; - -webkit-animation-timing-function: ease; - -webkit-animation-duration: 350ms; - -moz-transform: translateX(-100%) scale(.7); - -moz-animation-name: flowouttoleft; - -moz-animation-timing-function: ease; - -moz-animation-duration: 350ms; - transform: translateX(-100%) scale(.7); - animation-name: flowouttoleft; - animation-timing-function: ease; - animation-duration: 350ms; -} -.flow.in { - -webkit-transform: translateX(0) scale(1); - -webkit-animation-name: flowinfromright; - -webkit-animation-timing-function: ease; - -webkit-animation-duration: 350ms; - -moz-transform: translateX(0) scale(1); - -moz-animation-name: flowinfromright; - -moz-animation-timing-function: ease; - -moz-animation-duration: 350ms; - transform: translateX(0) scale(1); - animation-name: flowinfromright; - animation-timing-function: ease; - animation-duration: 350ms; -} -.flow.out.reverse { - -webkit-transform: translateX(100%); - -webkit-animation-name: flowouttoright; - -moz-transform: translateX(100%); - -moz-animation-name: flowouttoright; - transform: translateX(100%); - animation-name: flowouttoright; -} -.flow.in.reverse { - -webkit-animation-name: flowinfromleft; - -moz-animation-name: flowinfromleft; - animation-name: flowinfromleft; -} -@-webkit-keyframes flowouttoleft { - 0% { -webkit-transform: translateX(0) scale(1); } - 60%, 70% { -webkit-transform: translateX(0) scale(.7); } - 100% { -webkit-transform: translateX(-100%) scale(.7); } -} -@-moz-keyframes flowouttoleft { - 0% { -moz-transform: translateX(0) scale(1); } - 60%, 70% { -moz-transform: translateX(0) scale(.7); } - 100% { -moz-transform: translateX(-100%) scale(.7); } -} -@keyframes flowouttoleft { - 0% { transform: translateX(0) scale(1); } - 60%, 70% { transform: translateX(0) scale(.7); } - 100% { transform: translateX(-100%) scale(.7); } -} -@-webkit-keyframes flowouttoright { - 0% { -webkit-transform: translateX(0) scale(1); } - 60%, 70% { -webkit-transform: translateX(0) scale(.7); } - 100% { -webkit-transform: translateX(100%) scale(.7); } -} -@-moz-keyframes flowouttoright { - 0% { -moz-transform: translateX(0) scale(1); } - 60%, 70% { -moz-transform: translateX(0) scale(.7); } - 100% { -moz-transform: translateX(100%) scale(.7); } -} -@keyframes flowouttoright { - 0% { transform: translateX(0) scale(1); } - 60%, 70% { transform: translateX(0) scale(.7); } - 100% { transform: translateX(100%) scale(.7); } -} -@-webkit-keyframes flowinfromleft { - 0% { -webkit-transform: translateX(-100%) scale(.7); } - 30%, 40% { -webkit-transform: translateX(0) scale(.7); } - 100% { -webkit-transform: translateX(0) scale(1); } -} -@-moz-keyframes flowinfromleft { - 0% { -moz-transform: translateX(-100%) scale(.7); } - 30%, 40% { -moz-transform: translateX(0) scale(.7); } - 100% { -moz-transform: translateX(0) scale(1); } -} -@keyframes flowinfromleft { - 0% { transform: translateX(-100%) scale(.7); } - 30%, 40% { transform: translateX(0) scale(.7); } - 100% { transform: translateX(0) scale(1); } -} -@-webkit-keyframes flowinfromright { - 0% { -webkit-transform: translateX(100%) scale(.7); } - 30%, 40% { -webkit-transform: translateX(0) scale(.7); } - 100% { -webkit-transform: translateX(0) scale(1); } -} -@-moz-keyframes flowinfromright { - 0% { -moz-transform: translateX(100%) scale(.7); } - 30%, 40% { -moz-transform: translateX(0) scale(.7); } - 100% { -moz-transform: translateX(0) scale(1); } -} -@keyframes flowinfromright { - 0% { transform: translateX(100%) scale(.7); } - 30%, 40% { transform: translateX(0) scale(.7); } - 100% { transform: translateX(0) scale(1); } -} -.ui-field-contain, -.ui-mobile fieldset.ui-field-contain { - display: block; - position: relative; - overflow: visible; - clear: both; - padding: .8em 0; -} -.ui-field-contain > label ~ [class*="ui-"], -.ui-field-contain .ui-controlgroup-controls { - margin: 0; -} -.ui-field-contain:last-child { - border-bottom-width: 0; -} -@media (min-width: 28em) { - .ui-field-contain, - .ui-mobile fieldset.ui-field-contain { - padding: 0; - margin: 1em 0; - border-bottom-width: 0; - } - .ui-field-contain:before, - .ui-field-contain:after { - content: ""; - display: table; - } - .ui-field-contain:after { - clear: both; - } - .ui-field-contain > label, - .ui-field-contain .ui-controlgroup-label, - .ui-field-contain > .ui-rangeslider > label { - float: left; - width: 20%; - margin: .5em 2% 0 0; - } - .ui-popup .ui-field-contain > label, - .ui-popup .ui-field-contain .ui-controlgroup-label, - .ui-popup .ui-field-contain > .ui-rangeslider > label { - float: none; - width: auto; - margin: 0 0 .4em; - } - .ui-field-contain > label ~ [class*="ui-"], - .ui-field-contain .ui-controlgroup-controls { - float: left; - width: 78%; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - } - /* ui-hide-label deprecated in 1.4. TODO: Remove in 1.5 */ - .ui-hide-label > label ~ [class*="ui-"], - .ui-hide-label .ui-controlgroup-controls, - .ui-popup .ui-field-contain > label ~ [class*="ui-"], - .ui-popup .ui-field-contain .ui-controlgroup-controls { - float: none; - width: 100%; - } - .ui-field-contain > label ~ .ui-btn-inline { - width: auto; - margin-right: .625em; - } - .ui-field-contain > label ~ .ui-btn-inline.ui-btn-icon-notext { - width: 1.75em; - } -} -/* content configurations. */ -.ui-grid-a, -.ui-grid-b, -.ui-grid-c, -.ui-grid-d, -.ui-grid-solo { - overflow: hidden; -} -.ui-block-a, -.ui-block-b, -.ui-block-c, -.ui-block-d, -.ui-block-e { - margin: 0; - padding: 0; - border: 0; - float: left; - min-height: 1px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -/* force new row */ -.ui-block-a { - clear: left; -} -ul.ui-grid-a, -ul.ui-grid-b, -ul.ui-grid-c, -ul.ui-grid-d, -ul.ui-grid-solo, -li.ui-block-a, -li.ui-block-b, -li.ui-block-c, -li.ui-block-d, -li.ui-block-e { - margin-left: 0; - margin-right: 0; - padding: 0; - list-style: none; -} -/* No margin in grids for 100% width button elements until we can use max-width: fill-available; */ -[class*="ui-block-"] > button.ui-btn { - margin-right: 0; - margin-left: 0; -} -[class*="ui-block-"] > .ui-btn, -[class*="ui-block-"] > .ui-select, -[class*="ui-block-"] > .ui-checkbox, -[class*="ui-block-"] > .ui-radio, -[class*="ui-block-"] > button.ui-btn-inline, -[class*="ui-block-"] > button.ui-btn-icon-notext, -.ui-header [class*="ui-block-"] > button.ui-btn, -.ui-footer [class*="ui-block-"] > button.ui-btn { - margin-right: .3125em; - margin-left: .3125em; -} -.ui-grid-a > .ui-block-a, -.ui-grid-a > .ui-block-b { - /* width: 49.95%; IE7 */ - /* margin-right: -.5px; BB5 */ - width: 50%; -} -.ui-grid-b > .ui-block-a, -.ui-grid-b > .ui-block-b, -.ui-grid-b > .ui-block-c { - /* width: 33.25%; IE7 */ - /* margin-right: -.5px; BB5 */ - width: 33.333%; -} -.ui-grid-c > .ui-block-a, -.ui-grid-c > .ui-block-b, -.ui-grid-c > .ui-block-c, -.ui-grid-c > .ui-block-d { - /* width: 24.925%; IE7 */ - /* margin-right: -.5px; BB5 */ - width: 25%; -} -.ui-grid-d > .ui-block-a, -.ui-grid-d > .ui-block-b, -.ui-grid-d > .ui-block-c, -.ui-grid-d > .ui-block-d, -.ui-grid-d > .ui-block-e { - /* width: 19.925%; IE7 */ - width: 20%; -} -.ui-grid-solo > .ui-block-a { - width: 100%; - float: none; -} -/* preset breakpoint to switch to stacked grid styles below 35em (560px) */ -@media (max-width: 35em) { - .ui-responsive > .ui-block-a, - .ui-responsive > .ui-block-b, - .ui-responsive > .ui-block-c, - .ui-responsive > .ui-block-d, - .ui-responsive > .ui-block-e { - width: 100%; - float: none; - } -} -/* fixed page header & footer configuration */ -.ui-header-fixed, -.ui-footer-fixed { - left: 0; - right: 0; - width: 100%; - position: fixed; - z-index: 1000; -} -.ui-header-fixed { - top: -1px; - padding-top: 1px; -} -.ui-header-fixed.ui-fixed-hidden { - top: 0; - padding-top: 0; -} -.ui-header-fixed .ui-btn-left, -.ui-header-fixed .ui-btn-right { - margin-top: 1px; -} -.ui-header-fixed.ui-fixed-hidden .ui-btn-left, -.ui-header-fixed.ui-fixed-hidden .ui-btn-right { - margin-top: 0; -} -.ui-footer-fixed { - bottom: -1px; - padding-bottom: 1px; -} -.ui-footer-fixed.ui-fixed-hidden { - bottom: 0; - padding-bottom: 0; -} -.ui-header-fullscreen, -.ui-footer-fullscreen { - filter: Alpha(Opacity=90); - opacity: .9; -} -/* updatePagePadding() will update the padding to actual height of header and footer. */ -.ui-page-header-fixed { - padding-top: 2.8125em; -} -.ui-page-footer-fixed { - padding-bottom: 2.8125em; -} -.ui-page-header-fullscreen > .ui-content, -.ui-page-footer-fullscreen > .ui-content { - padding: 0; -} -.ui-fixed-hidden { - position: absolute; -} -/* Tap toggle: hide external fixed footer. See issue #6604 */ -.ui-footer-fixed.ui-fixed-hidden { - display: none; -} -.ui-page .ui-footer-fixed.ui-fixed-hidden { - display: block -} -.ui-page-header-fullscreen .ui-fixed-hidden, -.ui-page-footer-fullscreen .ui-fixed-hidden { - position: absolute !important; - height: 1px; - width: 1px; - overflow: hidden; - clip: rect(1px,1px,1px,1px); -} -.ui-header-fixed .ui-btn, -.ui-footer-fixed .ui-btn { - z-index: 10; -} -/* workarounds for other widgets */ -.ui-android-2x-fixed .ui-li-has-thumb { - -webkit-transform: translate3d(0,0,0); -} -.ui-navbar { - max-width: 100%; -} -.ui-navbar ul:before, -.ui-navbar ul:after { - content: ""; - display: table; -} -.ui-navbar ul:after { - clear: both; -} -.ui-navbar ul { - list-style: none; - margin: 0; - padding: 0; - position: relative; - display: block; - border: 0; - max-width: 100%; - overflow: visible; -} -.ui-navbar li .ui-btn { - font-size: 12.5px; - display: block; - margin: 0; - border-right-width: 0; -} -.ui-header .ui-navbar li button.ui-btn, -.ui-footer .ui-navbar li button.ui-btn { - margin: 0; - width: 100%; -} -.ui-navbar .ui-btn:focus { - z-index: 1; -} -/* fixes gaps caused by subpixel problem */ -.ui-navbar li:last-child .ui-btn { - margin-right: -4px; -} -.ui-navbar li:last-child .ui-btn:after { - margin-right: 4px; -} -.ui-content .ui-navbar li:last-child .ui-btn, -.ui-content .ui-navbar .ui-grid-duo .ui-block-b .ui-btn { - border-right-width: 1px; - margin-right: 0; -} -.ui-content .ui-navbar li:last-child .ui-btn:after, -.ui-content .ui-navbar .ui-grid-duo .ui-block-b .ui-btn:after { - margin-right: 0; -} -.ui-navbar .ui-grid-duo .ui-block-a:last-child .ui-btn { - border-right-width: 1px; - margin-right: -1px; -} -.ui-navbar .ui-grid-duo .ui-block-a:last-child .ui-btn:after { - margin-right: 1px; -} -.ui-navbar .ui-grid-duo .ui-btn { - border-top-width: 0; -} -.ui-navbar .ui-grid-duo .ui-block-a:first-child .ui-btn, -.ui-navbar .ui-grid-duo .ui-block-a:first-child + .ui-block-b .ui-btn { - border-top-width: 1px; -} -.ui-header .ui-navbar .ui-btn, -.ui-footer .ui-navbar .ui-btn { - border-top-width: 0; - border-bottom-width: 0; -} -.ui-header .ui-navbar .ui-grid-duo .ui-block-a:first-child .ui-btn, -.ui-footer .ui-navbar .ui-grid-duo .ui-block-a:first-child .ui-btn, -.ui-header .ui-navbar .ui-grid-duo .ui-block-a:first-child + .ui-block-b .ui-btn, -.ui-footer .ui-navbar .ui-grid-duo .ui-block-a:first-child + .ui-block-b .ui-btn { - border-top-width: 0; -} -.ui-header .ui-title ~ .ui-navbar .ui-btn, -.ui-footer .ui-title ~ .ui-navbar .ui-btn, -.ui-header .ui-navbar .ui-grid-duo .ui-btn, -.ui-footer .ui-navbar .ui-grid-duo .ui-btn, -.ui-header .ui-title ~ .ui-navbar .ui-grid-duo .ui-block-a:first-child .ui-btn, -.ui-footer .ui-title ~ .ui-navbar .ui-grid-duo .ui-block-a:first-child .ui-btn, -.ui-header .ui-title ~ .ui-navbar .ui-grid-duo .ui-block-a:first-child + .ui-block-b .ui-btn, -.ui-footer .ui-title ~ .ui-navbar .ui-grid-duo .ui-block-a:first-child + .ui-block-b .ui-btn { - border-top-width: 1px; -} -/* Hide the native input element */ -.ui-input-btn input { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - padding: 0; - border: 0; - outline: 0; - -webkit-border-radius: inherit; - border-radius: inherit; - -webkit-appearance: none; - -moz-appearance: none; - cursor: pointer; - background: #fff; - background: rgba(255,255,255,0); - filter: Alpha(Opacity=0); - opacity: .1; - font-size: 1px; - text-indent: -9999px; - z-index: 2; -} -/* Fixes IE/WP filter alpha opacity bugs */ -.ui-input-btn.ui-state-disabled input { - position: absolute !important; - height: 1px; - width: 1px; - overflow: hidden; - clip: rect(1px,1px,1px,1px); -} -.ui-collapsible { - margin: 0 -1em; -} -.ui-collapsible-inset, -.ui-collapsible-set { - margin: .5em 0; -} -.ui-collapsible-heading { - display: block; - margin: 0; - padding: 0; - position: relative; -} -.ui-collapsible-heading .ui-btn { - text-align: left; - margin: 0; - border-left-width: 0; - border-right-width: 0; -} -.ui-collapsible-heading .ui-btn-icon-top, -.ui-collapsible-heading .ui-btn-icon-bottom { - text-align: center; -} -.ui-collapsible-inset .ui-collapsible-heading .ui-btn { - border-right-width: 1px; - border-left-width: 1px; -} -.ui-collapsible-collapsed + .ui-collapsible:not(.ui-collapsible-inset) > .ui-collapsible-heading .ui-btn { - border-top-width: 0; -} -.ui-collapsible-set .ui-collapsible:not(.ui-collapsible-inset) .ui-collapsible-heading .ui-btn { - border-top-width: 1px; -} -.ui-collapsible-heading-status { - position: absolute !important; - height: 1px; - width: 1px; - overflow: hidden; - clip: rect(1px,1px,1px,1px); -} -.ui-collapsible-content { - display: block; - margin: 0; - padding: .5em 1em; -} -.ui-collapsible-themed-content .ui-collapsible-content { - border-left-width: 0; - border-right-width: 0; - border-top-width: 0; - border-bottom-width: 1px; - border-style: solid; -} -.ui-collapsible-inset.ui-collapsible-themed-content .ui-collapsible-content { - border-left-width: 1px; - border-right-width: 1px; -} -.ui-collapsible-inset .ui-collapsible-content { - margin: 0; -} -.ui-collapsible-content-collapsed { - display: none; -} -.ui-collapsible-set > .ui-collapsible.ui-corner-all { - -webkit-border-radius: 0; - border-radius: 0; -} -.ui-collapsible-heading, -.ui-collapsible-heading > .ui-btn { - -webkit-border-radius: inherit; - border-radius: inherit; -} -.ui-collapsible-set .ui-collapsible.ui-first-child { - -webkit-border-top-right-radius: inherit; - border-top-right-radius: inherit; - -webkit-border-top-left-radius: inherit; - border-top-left-radius: inherit; -} -.ui-collapsible-content, -.ui-collapsible-set .ui-collapsible.ui-last-child { - -webkit-border-bottom-right-radius: inherit; - border-bottom-right-radius: inherit; - -webkit-border-bottom-left-radius: inherit; - border-bottom-left-radius: inherit; -} -.ui-collapsible-themed-content:not(.ui-collapsible-collapsed) > .ui-collapsible-heading { - -webkit-border-bottom-right-radius: 0; - border-bottom-right-radius: 0; - -webkit-border-bottom-left-radius: 0; - border-bottom-left-radius: 0; -} -.ui-collapsible-set .ui-collapsible { - margin: -1px -1em 0; -} -.ui-collapsible-set .ui-collapsible-inset { - margin: -1px 0 0; -} -.ui-collapsible-set .ui-collapsible.ui-first-child { - margin-top: 0; -} -.ui-controlgroup, -fieldset.ui-controlgroup { - padding: 0; - margin: .5em 0; -} -.ui-field-contain .ui-controlgroup, -.ui-field-contain fieldset.ui-controlgroup { - margin: 0; -} -.ui-mini .ui-controlgroup-label { - font-size: 16px; -} -.ui-controlgroup.ui-mini .ui-btn-icon-notext, -.ui-controlgroup .ui-mini.ui-btn-icon-notext { - font-size: inherit; -} -.ui-controlgroup-controls .ui-btn, -.ui-controlgroup-controls .ui-checkbox, -.ui-controlgroup-controls .ui-radio, -.ui-controlgroup-controls .ui-select { - margin: 0; -} -.ui-controlgroup-controls .ui-btn:focus, -.ui-controlgroup-controls .ui-btn.ui-focus { - z-index: 1; -} -.ui-controlgroup-controls li { - list-style: none; -} -.ui-controlgroup-horizontal .ui-controlgroup-controls { - display: inline-block; - vertical-align: middle; -} -.ui-controlgroup-horizontal .ui-controlgroup-controls:before, -.ui-controlgroup-horizontal .ui-controlgroup-controls:after { - content: ""; - display: table; -} -.ui-controlgroup-horizontal .ui-controlgroup-controls:after { - clear: both; -} -.ui-controlgroup-horizontal .ui-controlgroup-controls > .ui-btn, -.ui-controlgroup-horizontal .ui-controlgroup-controls li > .ui-btn, -.ui-controlgroup-horizontal .ui-controlgroup-controls .ui-checkbox, -.ui-controlgroup-horizontal .ui-controlgroup-controls .ui-radio, -.ui-controlgroup-horizontal .ui-controlgroup-controls .ui-select { - float: left; - clear: none; -} -.ui-controlgroup-horizontal .ui-controlgroup-controls button.ui-btn, -.ui-controlgroup-controls .ui-btn-icon-notext { - width: auto; -} -.ui-controlgroup-horizontal .ui-controlgroup-controls .ui-btn-icon-notext, -.ui-controlgroup-horizontal .ui-controlgroup-controls button.ui-btn-icon-notext { - width: 1.5em; -} - .ui-controlgroup-controls .ui-btn-icon-notext { - height: auto; - padding: .7em 1em; -} -.ui-controlgroup-vertical .ui-controlgroup-controls .ui-btn { - border-bottom-width: 0; -} -.ui-controlgroup-vertical .ui-controlgroup-controls .ui-btn.ui-last-child { - border-bottom-width: 1px; -} -.ui-controlgroup-horizontal .ui-controlgroup-controls .ui-btn { - border-right-width: 0; -} -.ui-controlgroup-horizontal .ui-controlgroup-controls .ui-btn.ui-last-child { - border-right-width: 1px; -} -.ui-controlgroup-controls .ui-btn-corner-all, -.ui-controlgroup-controls .ui-btn.ui-corner-all { - -webkit-border-radius: 0; - border-radius: 0; -} -.ui-controlgroup-controls, -.ui-controlgroup-controls .ui-radio, -.ui-controlgroup-controls .ui-checkbox, -.ui-controlgroup-controls .ui-select, -.ui-controlgroup-controls li { - -webkit-border-radius: inherit; - border-radius: inherit; -} -.ui-controlgroup-vertical .ui-btn.ui-first-child { - -webkit-border-top-left-radius: inherit; - border-top-left-radius: inherit; - -webkit-border-top-right-radius: inherit; - border-top-right-radius: inherit; -} -.ui-controlgroup-vertical .ui-btn.ui-last-child { - -webkit-border-bottom-left-radius: inherit; - border-bottom-left-radius: inherit; - -webkit-border-bottom-right-radius: inherit; - border-bottom-right-radius: inherit; -} -.ui-controlgroup-horizontal .ui-btn.ui-first-child { - -webkit-border-top-left-radius: inherit; - border-top-left-radius: inherit; - -webkit-border-bottom-left-radius: inherit; - border-bottom-left-radius: inherit; -} -.ui-controlgroup-horizontal .ui-btn.ui-last-child { - -webkit-border-top-right-radius: inherit; - border-top-right-radius: inherit; - -webkit-border-bottom-right-radius: inherit; - border-bottom-right-radius: inherit; -} -.ui-controlgroup-controls a.ui-shadow:not(:focus), -.ui-controlgroup-controls button.ui-shadow:not(:focus), -.ui-controlgroup-controls div.ui-shadow:not(.ui-focus) { - -moz-box-shadow: none; - -webkit-box-shadow: none; - box-shadow: none; -} -/* Fixes legend not wrapping on IE10 */ -.ui-controlgroup-label legend { - max-width: 100%; -} -.ui-controlgroup-controls > label { - position: absolute !important; - height: 1px; - width: 1px; - overflow: hidden; - clip: rect(1px,1px,1px,1px); -} -.ui-dialog { - background: none !important; /* this is to ensure that dialog theming does not apply (by default at least) on the page div */ -} -.ui-dialog-contain { - width: 92.5%; - max-width: 500px; - margin: 10% auto 1em auto; - padding: 0; - position: relative; - top: -1em; -} -.ui-dialog-contain > .ui-header, -.ui-dialog-contain > .ui-content, -.ui-dialog-contain > .ui-footer { - display: block; - position: relative; - width: auto; - margin: 0; -} -.ui-dialog-contain > .ui-header { - overflow: hidden; - z-index: 10; - padding: 0; - border-top-width: 0; -} -.ui-dialog-contain > .ui-footer { - z-index: 10; - padding: 0 1em; - border-bottom-width: 0; -} -.ui-popup-open .ui-header-fixed, -.ui-popup-open .ui-footer-fixed { - position: absolute !important; /* See issues #4816, #4844 and #4874 and popup.js */ -} -.ui-popup-screen { - background-image: url("data:image/gif;base64,R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw=="); /* Necessary to set some form of background to ensure element is clickable in IE6/7. While legacy IE won't understand the data-URI'd image, it ensures no additional requests occur in all other browsers with little overhead. */ - top: 0; - left: 0; - right: 0; - bottom: 1px; - position: absolute; - filter: Alpha(Opacity=0); - opacity: 0; - z-index: 1099; -} -.ui-popup-screen.in { - opacity: 0.5; - filter: Alpha(Opacity=50); -} -.ui-popup-screen.out { - opacity: 0; - filter: Alpha(Opacity=0); -} -.ui-popup-container { - z-index: 1100; - display: inline-block; - position: absolute; - padding: 0; - outline: 0; -} -.ui-popup { - position: relative; -} -.ui-popup.ui-body-inherit { - border-width: 1px; - border-style: solid; -} -.ui-popup-hidden { - left: 0; - top: 0; - position: absolute !important; - visibility: hidden; -} -.ui-popup-truncate { - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - clip: rect(1px,1px,1px,1px); -} -.ui-popup.ui-content, -.ui-popup .ui-content { - overflow: visible; -} -.ui-popup > .ui-header { - border-top-width: 0; -} -.ui-popup > .ui-footer { - border-bottom-width: 0; -} -.ui-popup > p, -.ui-popup > h1, -.ui-popup > h2, -.ui-popup > h3, -.ui-popup > h4, -.ui-popup > h5, -.ui-popup > h6 { - margin: .5em .4375em; -} -.ui-popup > span { - display: block; - margin: .5em .4375em; -} -.ui-popup-container .ui-content > p, -.ui-popup-container .ui-content > h1, -.ui-popup-container .ui-content > h2, -.ui-popup-container .ui-content > h3, -.ui-popup-container .ui-content > h4, -.ui-popup-container .ui-content > h5, -.ui-popup-container .ui-content > h6 { - margin: .5em 0; -} -.ui-popup-container .ui-content > span { - margin: 0; -} -.ui-popup-container .ui-content > p:first-child, -.ui-popup-container .ui-content > h1:first-child, -.ui-popup-container .ui-content > h2:first-child, -.ui-popup-container .ui-content > h3:first-child, -.ui-popup-container .ui-content > h4:first-child, -.ui-popup-container .ui-content > h5:first-child, -.ui-popup-container .ui-content > h6:first-child { - margin-top: 0; -} -.ui-popup-container .ui-content > p:last-child, -.ui-popup-container .ui-content > h1:last-child, -.ui-popup-container .ui-content > h2:last-child, -.ui-popup-container .ui-content > h3:last-child, -.ui-popup-container .ui-content > h4:last-child, -.ui-popup-container .ui-content > h5:last-child, -.ui-popup-container .ui-content > h6:last-child { - margin-bottom: 0; -} -.ui-popup > img { - max-width: 100%; - max-height: 100%; - vertical-align: middle; -} -.ui-popup:not(.ui-content) > img:only-child, -.ui-popup:not(.ui-content) > .ui-btn-left:first-child + img:last-child, -.ui-popup:not(.ui-content) > .ui-btn-right:first-child + img:last-child { - -webkit-border-radius: inherit; - border-radius: inherit; -} -.ui-popup iframe { - vertical-align: middle; -} -.ui-popup > .ui-btn-left, -.ui-popup > .ui-btn-right { - position: absolute; - top: -11px; - margin: 0; - z-index: 1101; -} -.ui-popup > .ui-btn-left { - left: -11px; -} -.ui-popup > .ui-btn-right { - right: -11px; -} -/* Dimensions related to the popup arrow ------------------------------------------------------------------------------------------------------------*/ -/* desired triangle height: 10px */ -/** - * guide for the arrow - its width, height, and offset are theme-dependent and - * should be expessed as left, right, top, bottom, so that the element bearing - * such a class becomes stretched inside its parent position: relative element. - * The left/top/right/bottom specified below should reflect the corresponding - * border radii and so it leaves room for the shadow: - * ..--------------------.. - * ." ^ top ". - * / v \ - * | +------------------+ | - * | | | | - * | left| |right| - * |<--->| |<--->| - * | +------------------+ | - * \ ^ / - * `. v bottom .' - * ""--------------------"" - * The idea is that the top/left of the arrow container box does not move to a - * coordinate smaller than the top/left of the guide and the right/bottom of - * the arrow container box does not move to a coordinate larger than the - * bottom/right of the guide. This will help us avoid the following situation: - * ..--------------------.. - * ." ^ top ". - * /|/ v \ - * / | +------------------+ | - * \ | | | | - * \| left| |right| - * |<--->| |<--->| - * | +------------------+ | - * \ ^ / - * `. v bottom .' - * ""--------------------"" - * The arrow should not receive a top/left coordinate such that it is too close - * to one of the corners, because then at first the shadow of the arrow and, - * given a coordinate even closer to the corner, even the body of the arrow will - * "stick out" of the corner of the popup. The guide provides a hint to the - * arrow positioning code as to which range of values is acceptable for the - * arrow container's top/left coordinate. - **/ -.ui-popup-arrow-container { - width: 20px; - height: 20px; -} -/* aside from the "infinities" (-1000,2000), triangle height is used */ -.ui-popup-arrow-container.ui-popup-arrow-l { - left: -10px; - clip: rect(-1000px,10px,2000px,-1000px); -} -.ui-popup-arrow-container.ui-popup-arrow-t { - top: -10px; - clip: rect(-1000px,2000px,10px,-1000px); -} -.ui-popup-arrow-container.ui-popup-arrow-r { - right: -10px; - clip: rect(-1000px,2000px,2000px,10px); -} -.ui-popup-arrow-container.ui-popup-arrow-b { - bottom: -10px; - clip: rect(10px,2000px,1000px,-1000px); -} -/** - * For each side, the arrow is twice the desired size and its corner is aligned - * with the edge of the container: - * - * /\ /\ +----+ /\ - * / \ / \ | /\ |top / \ - * +----+ \ / +----+ +-->|/ \| / \ - * left| / | \ / | \ |right | | | / \ - * |/ | \ / | \| | /| |\ / \ - * |\ | / \ | /| | / +----+ \ \ +----+ / - * | \ | / \ | / | | \ / \| |/ - * +----+ / \ +----+ | \ / | | - * ^ \ / \ / ^ | \ / +->|\ /| - * | \/ \/ | | \ / | | \/ |bottom - * | | | \/ | +----+ - * +-------------------+--------+-----------+ - * | - * arrow container - * (clips arrow) - **/ -.ui-popup-arrow-container .ui-popup-arrow { - /* (4*desired triangle height)/sqrt(2) - does not account for border - centred within the outer rectangle */ - width: 28.284271247px; - height: 28.284271247px; - border-width: 1px; - border-style: solid; -} -.ui-popup-arrow-container.ui-popup-arrow-t .ui-popup-arrow { - left: -4.142135623px; - top: 5.857864376px; -} -.ui-popup-arrow-container.ui-popup-arrow-b .ui-popup-arrow { - left: -4.142135623px; - top: -14.142135623px; -} -.ui-popup-arrow-container.ui-popup-arrow-l .ui-popup-arrow { - left: 5.857864376px; - top: -4.142135623px; -} -.ui-popup-arrow-container.ui-popup-arrow-r .ui-popup-arrow { - left: -14.142135623px; - top: -4.142135623px; -} -/* Fix rotation center for oldIE - see http://www.useragentman.com/IETransformsTranslator/ */ -.ui-popup-arrow-container.ui-popup-arrow-t.ie .ui-popup-arrow { - margin-left: -5.857864376269049px; - margin-top: -7.0710678118654755px; -} -.ui-popup-arrow-container.ui-popup-arrow-b.ie .ui-popup-arrow { - margin-left: -5.857864376269049px; - margin-top: -4.142135623730951px; -} - -.ui-popup-arrow-container.ui-popup-arrow-l.ie .ui-popup-arrow { - margin-left: -7.0710678118654755px; - margin-top: -5.857864376269049px; -} -.ui-popup-arrow-container.ui-popup-arrow-r.ie .ui-popup-arrow { - margin-left: -4.142135623730951px; - margin-top: -5.857864376269049px; -} -/* structure */ -.ui-popup > .ui-popup-arrow-guide { - position: absolute; - left: 0; - right: 0; - top: 0; - bottom: 0; - visibility: hidden; -} -.ui-popup-arrow-container { - position: absolute; -} -.ui-popup-arrow { - -webkit-transform: rotate(45deg); - -moz-transform: rotate(45deg); - -ms-transform: rotate(45deg); - transform: rotate(45deg); - position: absolute; - overflow: hidden; - box-sizing: border-box; -} -.ui-popup-arrow-container.ie .ui-popup-arrow { - -ms-filter: "progid:DXImageTransform.Microsoft.Matrix(M11=0.7071067811865474, M12=-0.7071067811865477, M21=0.7071067811865477, M22=0.7071067811865474, SizingMethod='auto expand')"; - filter: progid:DXImageTransform.Microsoft.Matrix( - M11=0.7071067811865474, - M12=-0.7071067811865477, - M21=0.7071067811865477, - M22=0.7071067811865474, - SizingMethod='auto expand'); -} -.ui-checkbox, -.ui-radio { - margin: .5em 0; - position: relative; -} -.ui-checkbox .ui-btn, -.ui-radio .ui-btn { - margin: 0; - text-align: left; - white-space: normal; /* Nowrap + ellipsis doesn't work on label. Issue #1419. */ - z-index: 2; -} -.ui-controlgroup .ui-checkbox .ui-btn.ui-focus, -.ui-controlgroup .ui-radio .ui-btn.ui-focus { - z-index: 3; -} -.ui-checkbox .ui-btn-icon-top, -.ui-radio .ui-btn-icon-top, -.ui-checkbox .ui-btn-icon-bottom, -.ui-radio .ui-btn-icon-bottom { - text-align: center; -} -.ui-controlgroup-horizontal .ui-checkbox .ui-btn:after, -.ui-controlgroup-horizontal .ui-radio .ui-btn:after { - content: none; - display: none; -} -/* Native input positioning */ -.ui-checkbox input, -.ui-radio input { - position: absolute; - left: .466em; - top: 50%; - width: 22px; - height: 22px; - margin: -11px 0 0 0; - outline: 0 !important; - z-index: 1; -} -.ui-controlgroup-horizontal .ui-checkbox input, -.ui-controlgroup-horizontal .ui-radio input { - left: 50%; - margin-left: -9px; -} -.ui-checkbox input:disabled, -.ui-radio input:disabled { - position: absolute !important; - height: 1px; - width: 1px; - overflow: hidden; - clip: rect(1px,1px,1px,1px); -} -.ui-select { - margin-top: .5em; - margin-bottom: .5em; /* no shorthand for margin because it would override margin-right for inline selects */ - position: relative; -} -.ui-select > select { - position: absolute !important; - height: 1px; - width: 1px; - overflow: hidden; - clip: rect(1px,1px,1px,1px); -} -.ui-select .ui-btn { - margin: 0; - opacity: 1; /* Fixes #2588: When Windows Phone 7.5 (Mango) tries to calculate a numeric opacity for a select (including "inherit") without explicitly specifying an opacity on the parent to give it context, a bug appears where clicking elsewhere on the page after opening the select will open the select again. */ -} -.ui-select .ui-btn select { - position: absolute; - top: 0; - left: 0; - width: 100%; - min-height: 1.5em; - min-height: 100%; - height: 3em; - max-height: 100%; - outline: 0; - -webkit-border-radius: inherit; - border-radius: inherit; - -webkit-appearance: none; - -moz-appearance: none; - cursor: pointer; - filter: Alpha(Opacity=0); - opacity: 0; - z-index: 2; -} -@-moz-document url-prefix() { - .ui-select .ui-btn select { - opacity: 0.0001; - } -} -/* Display none because of issues with IE/WP's filter alpha opacity */ -.ui-select .ui-state-disabled select { - display: none; -} -/* Because we add all classes of the select and option elements to the span... */ -.ui-select span.ui-state-disabled { - filter: Alpha(Opacity=100); - opacity: 1; -} -.ui-select .ui-btn.ui-select-nativeonly { - border-radius: 0; - border: 0; -} -.ui-select .ui-btn.ui-select-nativeonly select { - opacity: 1; - text-indent: 0; - display: block; -} -/* ui-li-count is styled in the listview CSS. We set padding and offset here because select supports icon position while listview doesn't. */ -.ui-select .ui-li-has-count.ui-btn { - padding-right: 2.8125em; -} -.ui-select .ui-li-has-count.ui-btn-icon-right { - padding-right: 4.6875em; -} -.ui-select .ui-btn-icon-right .ui-li-count { - right: 3.2em; -} -/* We set the rules for the span as well to fix an issue on Chrome with text-overflow ellipsis for the button in combination with text-align center. */ -.ui-select .ui-btn > span:not(.ui-li-count) { - display: block; - text-overflow: ellipsis; - overflow: hidden !important; - white-space: nowrap; -} -.ui-selectmenu.ui-popup { - min-width: 11em; -} -.ui-selectmenu .ui-dialog-contain { - overflow: hidden; -} -.ui-selectmenu .ui-header { - margin: 0; - padding: 0; - border-width: 0; -} -.ui-selectmenu.ui-dialog .ui-header { - z-index: 1; - position: relative; -} -.ui-selectmenu.ui-popup .ui-header { - -webkit-border-bottom-right-radius: 0; - border-bottom-right-radius: 0; - -webkit-border-bottom-left-radius: 0; - border-bottom-left-radius: 0; -} -/* when no placeholder is defined in a multiple select, the header height doesn't even extend past the close button. this shim's content in there */ -.ui-selectmenu.ui-popup .ui-header h1:after { - content: '.'; - visibility: hidden; -} -.ui-selectmenu .ui-header .ui-title { - margin: 0 2.875em; -} -.ui-selectmenu.ui-dialog .ui-content { - overflow: visible; - z-index: 1; -} -.ui-selectmenu .ui-selectmenu-list { - margin: 0; - -webkit-border-radius: inherit; - border-radius: inherit; -} -.ui-header:not(.ui-screen-hidden) + .ui-selectmenu-list { - -webkit-border-top-right-radius: 0; - border-top-right-radius: 0; - -webkit-border-top-left-radius: 0; - border-top-left-radius: 0; -} -.ui-header.ui-screen-hidden + .ui-selectmenu-list li.ui-first-child .ui-btn { - border-top-width: 0; -} -.ui-selectmenu .ui-selectmenu-list li.ui-last-child .ui-btn { - border-bottom-width: 0; -} -.ui-selectmenu .ui-btn.ui-li-divider { - cursor: default; -} -.ui-selectmenu .ui-selectmenu-placeholder { - display: none; -} -.ui-listview, -.ui-listview > li { - margin: 0; - padding: 0; - list-style: none; -} -.ui-content .ui-listview, -.ui-panel-inner > .ui-listview { - margin: -1em; -} -.ui-content .ui-listview-inset, -.ui-panel-inner > .ui-listview-inset { - margin: 1em 0; -} -.ui-collapsible-content > .ui-listview { - margin: -.5em -1em; -} -.ui-collapsible-content > .ui-listview-inset { - margin: .5em 0; -} -.ui-listview > li { - display: block; - position: relative; - overflow: visible; -} -.ui-listview > .ui-li-static, -.ui-listview > .ui-li-divider, -.ui-listview > li > a.ui-btn { - margin: 0; - display: block; - position: relative; - text-align: left; - text-overflow: ellipsis; - overflow: hidden; - white-space: nowrap; -} -.ui-listview > li > .ui-btn:focus { - z-index: 1; -} -.ui-listview > .ui-li-static, -.ui-listview > .ui-li-divider, -.ui-listview > li > a.ui-btn { - border-width: 1px 0 0 0; - border-style: solid; -} -.ui-listview-inset > .ui-li-static, -.ui-listview-inset > .ui-li-divider, -.ui-listview-inset > li > a.ui-btn { - border-right-width: 1px; - border-left-width: 1px; -} -.ui-listview > .ui-li-static.ui-last-child, -.ui-listview > .ui-li-divider.ui-last-child, -.ui-listview > li.ui-last-child > a.ui-btn { - border-bottom-width: 1px; -} -.ui-collapsible-content > .ui-listview:not(.ui-listview-inset) > li.ui-first-child, -.ui-collapsible-content > .ui-listview:not(.ui-listview-inset) > li.ui-first-child > a.ui-btn { - border-top-width: 0; -} -.ui-collapsible-themed-content .ui-listview:not(.ui-listview-inset) > li.ui-last-child, -.ui-collapsible-themed-content .ui-listview:not(.ui-listview-inset) > li.ui-last-child > a.ui-btn { - border-bottom-width: 0; -} -.ui-listview > li.ui-first-child, -.ui-listview > li.ui-first-child > a.ui-btn { - -webkit-border-top-right-radius: inherit; - border-top-right-radius: inherit; - -webkit-border-top-left-radius: inherit; - border-top-left-radius: inherit; -} -.ui-listview > li.ui-last-child, -.ui-listview > li.ui-last-child > a.ui-btn { - -webkit-border-bottom-right-radius: inherit; - border-bottom-right-radius: inherit; - -webkit-border-bottom-left-radius: inherit; - border-bottom-left-radius: inherit; -} -.ui-listview > li.ui-li-has-alt > a.ui-btn { - -webkit-border-top-right-radius: 0; - border-top-right-radius: 0; - -webkit-border-bottom-right-radius: 0; - border-bottom-right-radius: 0; -} -.ui-listview > li.ui-first-child > a.ui-btn + a.ui-btn { - -webkit-border-top-left-radius: 0; - border-top-left-radius: 0; - -webkit-border-top-right-radius: inherit; - border-top-right-radius: inherit; -} -.ui-listview > li.ui-last-child > a.ui-btn + a.ui-btn { - -webkit-border-bottom-left-radius: 0; - border-bottom-left-radius: 0; - -webkit-border-bottom-right-radius: inherit; - border-bottom-right-radius: inherit; -} -.ui-listview > li.ui-first-child img:first-child:not(.ui-li-icon) { - -webkit-border-top-left-radius: inherit; - border-top-left-radius: inherit; -} -.ui-listview > li.ui-last-child img:first-child:not(.ui-li-icon) { - -webkit-border-bottom-left-radius: inherit; - border-bottom-left-radius: inherit; -} -.ui-collapsible-content > .ui-listview:not(.ui-listview-inset) { - -webkit-border-radius: inherit; - border-radius: inherit; -} -.ui-listview > .ui-li-static { - padding: .7em 1em; -} -.ui-listview > .ui-li-divider { - padding: .5em 1.143em; - font-size: 14px; - font-weight: bold; - cursor: default; - outline: 0; /* Dividers in custom selectmenus have tabindex */ -} -.ui-listview > .ui-li-has-count > .ui-btn, -.ui-listview > .ui-li-static.ui-li-has-count, -.ui-listview > .ui-li-divider.ui-li-has-count { - padding-right: 2.8125em; -} -.ui-listview > .ui-li-has-count > .ui-btn-icon-right { - padding-right: 4.6875em; -} -.ui-listview > .ui-li-has-thumb > .ui-btn, -.ui-listview > .ui-li-static.ui-li-has-thumb { - min-height: 3.625em; - padding-left: 6.25em; -} -/* ui-li-has-icon deprecated in 1.4. TODO: remove in 1.5 */ -.ui-listview > .ui-li-has-icon > .ui-btn, -.ui-listview > .ui-li-static.ui-li-has-icon { - min-height: 1.25em; - padding-left: 2.5em; -} -/* Used by both listview and custom multiple select button */ -.ui-li-count { - position: absolute; - font-size: 12.5px; - font-weight: bold; - text-align: center; - border-width: 1px; - border-style: solid; - padding: 0 .48em; - line-height: 1.6em; - min-height: 1.6em; - min-width: .64em; - right: .8em; - top: 50%; - margin-top: -.88em; -} -.ui-listview .ui-btn-icon-right .ui-li-count { - right: 3.2em; -} -.ui-listview .ui-li-has-thumb > img:first-child, -.ui-listview .ui-li-has-thumb > .ui-btn > img:first-child, -.ui-listview .ui-li-has-thumb .ui-li-thumb { - position: absolute; - left: 0; - top: 0; - max-height: 5em; - max-width: 5em; -} -/* ui-li-has-icon deprecated in 1.4. TODO: remove in 1.5 */ -.ui-listview > .ui-li-has-icon > img:first-child, -.ui-listview > .ui-li-has-icon > .ui-btn > img:first-child { - position: absolute; - left: .625em; - top: .9em; - max-height: 1em; - max-width: 1em; -} -.ui-listview > li h1, -.ui-listview > li h2, -.ui-listview > li h3, -.ui-listview > li h4, -.ui-listview > li h5, -.ui-listview > li h6 { - font-size: 1em; - font-weight: bold; - display: block; - margin: .45em 0; - text-overflow: ellipsis; - overflow: hidden; - white-space: nowrap; -} -.ui-listview > li p { - font-size: .75em; - font-weight: normal; - display: block; - margin: .6em 0; - text-overflow: ellipsis; - overflow: hidden; - white-space: nowrap; -} -.ui-listview .ui-li-aside { - position: absolute; - top: 1em; - right: 3.333em; - margin: 0; - text-align: right; -} -.ui-listview > li.ui-li-has-alt > .ui-btn { - margin-right: 2.5em; - border-right-width: 0; -} -.ui-listview > li.ui-li-has-alt > .ui-btn + .ui-btn { - position: absolute; - width: 2.5em; - height: 100%; - min-height: auto; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - border-left-width: 1px; - top: 0; - right: 0; - margin: 0; - padding: 0; - z-index: 2; -} -.ui-listview-inset > li.ui-li-has-alt > .ui-btn + .ui-btn { - border-right-width: 1px; -} -.ui-listview > li.ui-li-has-alt > .ui-btn + .ui-btn:focus { - z-index: 3; -} -ol.ui-listview, -ol.ui-listview > .ui-li-divider { - counter-reset: listnumbering; -} -ol.ui-listview > li > .ui-btn, -ol.ui-listview > li.ui-li-static { - vertical-align: middle; -} -ol.ui-listview > li > .ui-btn:first-child:before, -ol.ui-listview > li.ui-li-static:before, -ol.ui-listview > li.ui-field-contain > label:before, -ol.ui-listview > li.ui-field-contain > .ui-controlgroup-label:before { - display: inline-block; - font-size: .9em; - font-weight: normal; - padding-right: .3em; - min-width: 1.4em; - line-height: 1.5; - vertical-align: middle; - counter-increment: listnumbering; - content: counter(listnumbering) "."; -} -ol.ui-listview > li.ui-field-contain:before { - content: none; - display: none; -} -ol.ui-listview > li h1:first-child, -ol.ui-listview > li h2:first-child, -ol.ui-listview > li h3:first-child, -ol.ui-listview > li h4:first-child, -ol.ui-listview > li h5:first-child, -ol.ui-listview > li h6:first-child, -ol.ui-listview > li p:first-child, -ol.ui-listview > li img:first-child + * { - display: inline-block; - vertical-align: middle; -} -ol.ui-listview > li h1:first-child ~ *, -ol.ui-listview > li h2:first-child ~ *, -ol.ui-listview > li h3:first-child ~ *, -ol.ui-listview > li h4:first-child ~ *, -ol.ui-listview > li h5:first-child ~ *, -ol.ui-listview > li h6:first-child ~ *, -ol.ui-listview > li p:first-child ~ *, -ol.ui-listview > li img:first-child + * ~ * { - margin-top: 0; - text-indent: 2.04em; /* (1.4em + .3em) * .9em / .75em */ -} -html .ui-filterable + .ui-listview, -html .ui-filterable.ui-listview { - margin-top: .5em; -} -.ui-collapsible-content > form.ui-filterable { - margin-top: -.5em; -} -.ui-collapsible-content > .ui-input-search.ui-filterable { - margin-top: 0; -} -.ui-collapsible-content > .ui-filterable + .ui-listview:not(.ui-listview-inset) > li.ui-first-child, -.ui-collapsible-content > .ui-filterable + .ui-listview:not(.ui-listview-inset) > li.ui-first-child > a.ui-btn, -.ui-collapsible-content > .ui-filterable.ui-listview:not(.ui-listview-inset) > li.ui-first-child, -.ui-collapsible-content > .ui-filterable.ui-listview:not(.ui-listview-inset) > li.ui-first-child > a.ui-btn { - border-top-width: 1px; -} -div.ui-slider { - height: 30px; - margin: .5em 0; - padding: 0; - -ms-touch-action: pan-y pinch-zoom double-tap-zoom; -} -div.ui-slider:before, -div.ui-slider:after { - content: ""; - display: table; -} -div.ui-slider:after { - clear: both; -} -input.ui-slider-input { - display: block; - float: left; - font-size: 14px; - font-weight: bold; - margin: 0; - padding: 4px; - width: 40px; - height: 20px; - line-height: 20px; - border-width: 1px; - border-style: solid; - outline: 0; - text-align: center; - vertical-align: text-bottom; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - -webkit-box-sizing: content-box; - -moz-box-sizing: content-box; - box-sizing: content-box; -} -.ui-slider-input::-webkit-outer-spin-button, -.ui-slider-input::-webkit-inner-spin-button { - -webkit-appearance: none; - margin: 0; -} -.ui-slider-track { - position: relative; - overflow: visible; - border-width: 1px; - border-style: solid; - height: 15px; - margin: 0 15px 0 68px; - top: 6px; -} -.ui-slider-track.ui-mini { - height: 12px; - top: 8px; -} -.ui-slider-track .ui-slider-bg { - height: 100%; -} -/* High level of specificity to override button margins in grids */ -.ui-slider-track .ui-btn.ui-slider-handle { - position: absolute; - z-index: 1; - top: 50%; - width: 28px; - height: 28px; - margin: -15px 0 0 -15px; - outline: 0; - padding: 0; -} -.ui-slider-track.ui-mini .ui-slider-handle { - height: 14px; - width: 14px; - margin: -8px 0 0 -8px; -} -select.ui-slider-switch { - position: absolute !important; - height: 1px; - width: 1px; - overflow: hidden; - clip: rect(1px,1px,1px,1px); -} -div.ui-slider-switch { - display: inline-block; - height: 32px; - width: 5.8em; - top: 0; -} -/* reset the clearfix */ -div.ui-slider-switch:before, -div.ui-slider-switch:after { - display: none; - clear: none; -} -div.ui-slider-switch.ui-mini { - height: 29px; - top: 0; -} -.ui-slider-inneroffset { - margin: 0 16px; - position: relative; - z-index: 1; -} -.ui-slider-switch.ui-mini .ui-slider-inneroffset { - margin: 0 15px 0 14px; -} -.ui-slider-switch .ui-btn.ui-slider-handle { - margin: 1px 0 0 -15px; -} -.ui-slider-switch.ui-mini .ui-slider-handle { - width: 25px; - height: 25px; - margin: 1px 0 0 -13px; - padding: 0; -} -.ui-slider-handle-snapping { - -webkit-transition: left 70ms linear; - -moz-transition: left 70ms linear; - transition: left 70ms linear; -} -.ui-slider-switch .ui-slider-label { - position: absolute; - text-align: center; - width: 100%; - overflow: hidden; - font-size: 16px; - top: 0; - line-height: 2; - min-height: 100%; - white-space: nowrap; - cursor: pointer; -} -.ui-slider-switch.ui-mini .ui-slider-label { - font-size: 14px; -} -.ui-slider-switch .ui-slider-label-a { - z-index: 1; - left: 0; - text-indent: -1.5em; -} -.ui-slider-switch .ui-slider-label-b { - z-index: 0; - right: 0; - text-indent: 1.5em; -} -/* The corner radii for ui-slider-switch/track can be specified in theme CSS. The bg and handle inherits. */ -.ui-slider-track .ui-slider-bg, -.ui-slider-switch .ui-slider-label, -.ui-slider-switch .ui-slider-inneroffset, -.ui-slider-handle { - -webkit-border-radius: inherit; - border-radius: inherit; -} -.ui-field-contain div.ui-slider-switch { - margin: 0; -} -/* ui-hide-label deprecated in 1.4. TODO: Remove in 1.5 */ -.ui-field-contain div.ui-slider-switch, -.ui-field-contain.ui-hide-label div.ui-slider-switch, -html .ui-popup .ui-field-contain div.ui-slider-switch { - display: inline-block; - width: 5.8em; -} -/* slider tooltip ------------------------------------------------------------------------------------------------------------*/ -.ui-slider-popup { - width: 64px; - height: 64px; - font-size: 36px; - padding-top: 14px; - opacity: 0.8; -} -.ui-slider-popup { - position: absolute !important; - text-align: center; - z-index: 100; -} -.ui-slider-track .ui-btn.ui-slider-handle { - font-size: .9em; - line-height: 30px; -} -.ui-rangeslider { - margin: .5em 0; -} -.ui-rangeslider:before, -.ui-rangeslider:after { - content: ""; - display: table; -} -.ui-rangeslider:after { - clear: both; -} -.ui-rangeslider .ui-slider-input.ui-rangeslider-last { - float: right; -} -.ui-rangeslider .ui-rangeslider-sliders { - position: relative; - overflow: visible; - height: 30px; - margin: 0 68px; -} -.ui-rangeslider .ui-rangeslider-sliders .ui-slider-track { - position: absolute; - top: 6px; - right: 0; - left: 0; - margin: 0; -} -.ui-rangeslider.ui-mini .ui-rangeslider-sliders .ui-slider-track { - top: 8px; -} -.ui-rangeslider .ui-slider-track:first-child .ui-slider-bg { - display: none; -} -.ui-rangeslider .ui-rangeslider-sliders .ui-slider-track:first-child { - background-color: transparent; - background: none; - border-width: 0; - height: 0; -} -/* this makes ie6 and ie7 set height to 0 to fix z-index problem */ -html >/**/body .ui-rangeslider .ui-rangeslider-sliders .ui-slider-track:first-child { - height: 15px; - border-width: 1px; -} -html >/**/body .ui-rangeslider.ui-mini .ui-rangeslider-sliders .ui-slider-track:first-child { - height: 12px; -} -/* Hide the second label (the first is moved outside the div) */ -div.ui-rangeslider label { - position: absolute !important; - height: 1px; - width: 1px; - overflow: hidden; - clip: rect(1px,1px,1px,1px); -} -.ui-field-contain .ui-rangeslider input.ui-slider-input, -.ui-field-contain .ui-rangeslider.ui-mini input.ui-slider-input, -.ui-field-contain .ui-rangeslider .ui-rangeslider-sliders, -.ui-field-contain .ui-rangeslider.ui-mini .ui-rangeslider-sliders { - margin-top: 0; - margin-bottom: 0; -} -.ui-input-text, -.ui-input-search { - margin: .5em 0; - border-width: 1px; - border-style: solid; -} -.ui-input-text input, -.ui-input-search input, -textarea.ui-input-text { - padding: .4em; - line-height: 1.4em; - display: block; - width: 100%; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - outline: 0; -} -.ui-input-text input, -.ui-input-search input { - margin: 0; - min-height: 2.2em; - text-align: left; /* Opera aligns type="date" right by default */ - border: 0; - background: transparent none; - -webkit-appearance: none; - -webkit-border-radius: inherit; - border-radius: inherit; -} -textarea.ui-input-text { - overflow: auto; - resize: vertical; -} -.ui-mini .ui-input-text input, -.ui-mini .ui-input-search input, -.ui-input-text.ui-mini input, -.ui-input-search.ui-mini input, -.ui-mini textarea.ui-input-text, -textarea.ui-mini { - font-size: 14px; -} -/* Same margin for mini textareas as other mini sized widgets (12.5/14 * 0.5em) */ -.ui-mini textarea.ui-input-text, -textarea.ui-mini { - margin: .446em 0; -} -.ui-input-has-clear, -.ui-input-search { - position: relative; -} -/* Padding on the div instead of input because of browser spinners etc. */ -.ui-input-has-clear { - padding-right: 2.375em; -} -.ui-mini.ui-input-has-clear { - padding-right: 2.923em; -} -.ui-input-has-clear input { - padding-right: 0; - /* Autofill on Chrome has bg color so we unset corners right as well. */ - -webkit-border-top-right-radius: 0; - border-top-right-radius: 0; - -webkit-border-bottom-right-radius: 0; - border-bottom-right-radius: 0; -} -/* Search icon */ -.ui-input-search input { - padding-left: 1.75em; -} -.ui-input-search:after { - position: absolute; - left: .3125em; - top: 50%; - margin-top: -7px; - content: ""; - background-position: center center; - background-repeat: no-repeat; - width: 14px; - height: 14px; - filter: Alpha(Opacity=50); - opacity: .5; -} -.ui-input-search.ui-input-has-clear .ui-btn.ui-input-clear, -.ui-input-text.ui-input-has-clear .ui-btn.ui-input-clear { - position: absolute; - right: 0; - top: 50%; - margin: -14px .3125em 0; - border: 0; - background-color: transparent; -} -.ui-input-search .ui-input-clear-hidden, -.ui-input-text .ui-input-clear-hidden { - display: none; -} -/* Resolves issue #5166: Added to support issue introduced in Firefox 15. We can likely remove this in the future. */ -.ui-input-text input::-moz-placeholder, -.ui-input-search input::-moz-placeholder, -textarea.ui-input-text::-moz-placeholder { - color: #aaa; -} -/* Same for IE10 */ -.ui-input-text input:-ms-input-placeholder, -.ui-input-search input:-ms-input-placeholder, -textarea.ui-input-text:-ms-input-placeholder { - color: #aaa; -} -/* Resolves issue #5131: Width of textinput depends on its type, -for Android 4.1 */ -.ui-input-text input[type=number]::-webkit-outer-spin-button { - margin: 0; -} -/* Resolves issue #5756: Textinput in IE10 has a default clear button */ -.ui-input-text input::-ms-clear, -.ui-input-search input::-ms-clear { - display: none; -} -.ui-input-text input:focus, -.ui-input-search input:focus { - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; -} -textarea.ui-input-text.ui-textinput-autogrow { - overflow: hidden; -} -.ui-textinput-autogrow-resize { - -webkit-transition: height 0.25s; - -o-transition: height 0.25s; - -moz-transition: height 0.25s; - transition: height 0.25s; -} -.ui-flipswitch { - display: inline-block; - vertical-align: middle; - width: 5.875em; /* Override this and padding-left in next rule if you use labels other than "on/off" and need more space */ - height: 1.875em; - border-width: 1px; - border-style: solid; - margin: .5em 0; - overflow: hidden; - -webkit-transition-property: padding, width, background-color, color, border-color; - -moz-transition-property: padding, width, background-color, color, border-color; - -o-transition-property: padding, width, background-color, color, border-color; - transition-property: padding, width, background-color, color, border-color; - -webkit-transition-duration: 100ms; - -moz-transition-duration: 100ms; - -o-transition-duration: 100ms; - transition-duration: 100ms; - -webkit-touch-callout: none; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - cursor: pointer; -} -.ui-flipswitch.ui-flipswitch-active { - padding-left: 4em; /* Override this and width in previous rule if you use labels other than "on/off" and need more space */ - width: 1.875em; -} -.ui-flipswitch-input { - position: absolute; - height: 1px; - width: 1px; - margin: -1px; - overflow: hidden; - clip: rect(1px,1px,1px,1px); - border: 0; - outline: 0; - filter: Alpha(Opacity=0); - opacity: 0; -} -.ui-flipswitch .ui-btn.ui-flipswitch-on, -.ui-flipswitch .ui-flipswitch-off { - float: left; - height: 1.75em; - margin: .0625em; - line-height: 1.65em; -} -.ui-flipswitch .ui-btn.ui-flipswitch-on { - width: 1.75em; - padding: 0; - text-indent: -2.6em; /* Override this to center text if you use a label other than "on" */ - text-align: left; - border-width: 1px; - border-style: solid; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - border-radius: inherit; - overflow: visible; - color: inherit; - text-shadow: inherit; -} -.ui-flipswitch .ui-flipswitch-off { - padding: 1px; - text-indent: 1em; /* Override this to center text if you use a label other than "off" */ -} -/* Override field container CSS to prevent the flipswitch from becomming full width */ -html .ui-field-contain > label + .ui-flipswitch, -html .ui-popup .ui-field-contain > label + .ui-flipswitch { - display: inline-block; - width: 5.875em; /* If you override the width for .ui-flipswitch you should repeat the same value here */ - -webkit-box-sizing: content-box; - -moz-box-sizing: content-box; - box-sizing: content-box; -} -.ui-field-contain .ui-flipswitch.ui-flipswitch-active, -.ui-popup .ui-field-contain .ui-flipswitch.ui-flipswitch-active { - width: 1.875em; -} -.ui-table { - border: 0; - border-collapse: collapse; - padding: 0; - width: 100%; -} -.ui-table th, -.ui-table td { - line-height: 1.5em; - text-align: left; - padding: .4em .5em; - vertical-align:top; -} -.ui-table th .ui-btn, -.ui-table td .ui-btn { - line-height: normal; -} -.ui-table th { - font-weight: bold; -} -.ui-table caption { - text-align: left; - margin-bottom: 1.4em; - opacity: .5; -} -/* - Styles for the table columntoggle mode -*/ -.ui-table-columntoggle-btn { - float: right; - margin-bottom: .8em; -} -/* Remove top/bottom margins around the fieldcontain on check list */ -.ui-table-columntoggle-popup fieldset { - margin:0; -} -.ui-table-columntoggle { - clear: both; -} -/* Hide all prioritized columns by default */ -@media only all { - th.ui-table-priority-6, - td.ui-table-priority-6, - th.ui-table-priority-5, - td.ui-table-priority-5, - th.ui-table-priority-4, - td.ui-table-priority-4, - th.ui-table-priority-3, - td.ui-table-priority-3, - th.ui-table-priority-2, - td.ui-table-priority-2, - th.ui-table-priority-1, - td.ui-table-priority-1 { - display: none; - } -} -/* Preset breakpoints if ".ui-responsive" class added to table */ -/* Show priority 1 at 320px (20em x 16px) */ -@media screen and (min-width: 20em) { - .ui-table-columntoggle.ui-responsive th.ui-table-priority-1, - .ui-table-columntoggle.ui-responsive td.ui-table-priority-1 { - display: table-cell; - } -} -/* Show priority 2 at 480px (30em x 16px) */ -@media screen and (min-width: 30em) { - .ui-table-columntoggle.ui-responsive th.ui-table-priority-2, - .ui-table-columntoggle.ui-responsive td.ui-table-priority-2 { - display: table-cell; - } -} -/* Show priority 3 at 640px (40em x 16px) */ -@media screen and (min-width: 40em) { - .ui-table-columntoggle.ui-responsive th.ui-table-priority-3, - .ui-table-columntoggle.ui-responsive td.ui-table-priority-3 { - display: table-cell; - } -} -/* Show priority 4 at 800px (50em x 16px) */ -@media screen and (min-width: 50em) { - .ui-table-columntoggle.ui-responsive th.ui-table-priority-4, - .ui-table-columntoggle.ui-responsive td.ui-table-priority-4 { - display: table-cell; - } -} -/* Show priority 5 at 960px (60em x 16px) */ -@media screen and (min-width: 60em) { - .ui-table-columntoggle.ui-responsive th.ui-table-priority-5, - .ui-table-columntoggle.ui-responsive td.ui-table-priority-5 { - display: table-cell; - } -} -/* Show priority 6 at 1,120px (70em x 16px) */ -@media screen and (min-width: 70em) { - .ui-table-columntoggle.ui-responsive th.ui-table-priority-6, - .ui-table-columntoggle.ui-responsive td.ui-table-priority-6 { - display: table-cell; - } -} -/* Unchecked manually: Always hide */ -.ui-table-columntoggle th.ui-table-cell-hidden, -.ui-table-columntoggle td.ui-table-cell-hidden, -.ui-table-columntoggle.ui-responsive th.ui-table-cell-hidden, -.ui-table-columntoggle.ui-responsive td.ui-table-cell-hidden { - display: none; -} -/* Checked manually: Always show */ -.ui-table-columntoggle th.ui-table-cell-visible, -.ui-table-columntoggle td.ui-table-cell-visible, -.ui-table-columntoggle.ui-responsive th.ui-table-cell-visible, -.ui-table-columntoggle.ui-responsive td.ui-table-cell-visible { - display: table-cell; -} -/* - Styles for the table columntoggle mode -*/ -.ui-table-reflow td .ui-table-cell-label, -.ui-table-reflow th .ui-table-cell-label { - display: none; -} -/* Mobile first styles: Begin with the stacked presentation at narrow widths */ -@media only all { - /* Hide the table headers */ - .ui-table-reflow thead td, - .ui-table-reflow thead th { - display: none; - } - /* Show the table cells as a block level element */ - .ui-table-reflow td, - .ui-table-reflow th { - text-align: left; - display: block; - } - /* Add a fair amount of top margin to visually separate each row when stacked */ - .ui-table-reflow tbody th { - margin-top: 3em; - } - /* Make the label elements a percentage width */ - .ui-table-reflow td .ui-table-cell-label, - .ui-table-reflow th .ui-table-cell-label { - padding: .4em; - min-width: 30%; - display: inline-block; - margin: -.4em 1em -.4em -.4em; - } - /* For grouped headers, have a different style to visually separate the levels by classing the first label in each col group */ - .ui-table-reflow th .ui-table-cell-label-top, - .ui-table-reflow td .ui-table-cell-label-top { - display: block; - padding: .4em 0; - margin: .4em 0; - text-transform: uppercase; - font-size: .9em; - font-weight: normal; - } -} -/* Breakpoint to show as a standard table at 560px (35em x 16px) or wider */ -@media ( min-width: 35em ) { - /* Show the table header rows */ - .ui-table-reflow.ui-responsive td, - .ui-table-reflow.ui-responsive th, - .ui-table-reflow.ui-responsive tbody th, - .ui-table-reflow.ui-responsive tbody td, - .ui-table-reflow.ui-responsive thead td, - .ui-table-reflow.ui-responsive thead th { - display: table-cell; - margin: 0; - } - /* Hide the labels in each cell */ - .ui-table-reflow.ui-responsive td .ui-table-cell-label, - .ui-table-reflow.ui-responsive th .ui-table-cell-label { - display: none; - } -} -/* Hack to make IE9 and WP7.5 treat cells like block level elements, scoped to ui-responsive class */ -/* Applied in a max-width media query up to the table layout breakpoint so we don't need to negate this*/ -@media ( max-width: 35em ) { - .ui-table-reflow.ui-responsive td, - .ui-table-reflow.ui-responsive th { - width: 100%; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - float: left; - clear: left; - } -} -/* Panel */ -.ui-panel { - width: 17em; - min-height: 100%; - max-height: none; - border-width: 0; - position: absolute; - top: 0; - display: block; -} -.ui-panel-closed { - width: 0; - max-height: 100%; - overflow: hidden; - visibility: hidden; -} -.ui-panel-fixed { - position: fixed; - bottom: -1px; /* Fixes gap on Chrome for Android */ - padding-bottom: 1px; -} -.ui-panel-display-reveal { - z-index: 1; -} -.ui-panel-display-push { - z-index: 999; -} -.ui-panel-display-overlay { - z-index: 1001; /* Fixed toolbars have z-index 1000 */ -} -.ui-panel-inner { - padding: 1em; -} -/* Container, page and wrapper */ -.ui-panel-page-container { - overflow-x: visible; -} -.ui-panel-page-container-themed .ui-page-active { - background: none; -} -.ui-panel-wrapper { - position: relative; - min-height: inherit; - border: 0; - overflow-x: hidden; - z-index: 999; -} -/* Fixed toolbars */ -.ui-panel-fixed-toolbar { - overflow-x: hidden; -} -/* Dismiss */ -.ui-panel-dismiss { - position: absolute; - top: 0; - left: 0; - right: 0; - height: 100%; - z-index: 1002; - display: none; -} -.ui-panel-dismiss-open { - display: block; -} -/* Animate class is added to panel, wrapper and fixed toolbars */ -.ui-panel-animate { - -webkit-transition: -webkit-transform 300ms ease; - -webkit-transition-duration: 300ms; - -moz-transition: -moz-transform 300ms ease; - transition: transform 300ms ease; -} -/* Fix for Windows Phone issue #6349: unset the transition for transforms in case of fixed toolbars. */ -@media screen and ( max-device-width: 768px ) { - .ui-page-header-fixed .ui-panel-animate.ui-panel-wrapper, - .ui-page-footer-fixed .ui-panel-animate.ui-panel-wrapper, - .ui-panel-animate.ui-panel-fixed-toolbar { - -ms-transition: none; - } - /* We need a transitionend event ... */ - .ui-panel-animate.ui-panel-fixed-toolbar { - -ms-transition: -ms-transform 1ms; - -ms-transform: rotate(0deg); - } -} -/* Hardware acceleration for smoother transitions on WebKit browsers */ -.ui-panel-animate.ui-panel:not(.ui-panel-display-reveal) { - -webkit-backface-visibility: hidden; - -webkit-transform: translate3d(0,0,0); -} -/* Panel positioning (for overlay and push) */ -/* Panel left closed */ -.ui-panel-position-left { - left: -17em; -} -/* Panel left closed animated */ -.ui-panel-animate.ui-panel-position-left.ui-panel-display-overlay, -.ui-panel-animate.ui-panel-position-left.ui-panel-display-push { - left: 0; - -webkit-transform: translate3d(-17em,0,0); - -moz-transform: translate3d(-17em,0,0); - transform: translate3d(-17em,0,0); -} -/* Panel left open */ -.ui-panel-position-left.ui-panel-display-reveal, /* Unset "panel left closed" for reveal */ -.ui-panel-open.ui-panel-position-left { - left: 0; -} -/* Panel left open animated */ -.ui-panel-animate.ui-panel-open.ui-panel-position-left.ui-panel-display-overlay, -.ui-panel-animate.ui-panel-open.ui-panel-position-left.ui-panel-display-push { - -webkit-transform: translate3d(0,0,0); - transform: translate3d(0,0,0); - -moz-transform: none; -} -/* Panel right closed */ -.ui-panel-position-right { - right: -17em; -} -/* Panel right closed animated */ -.ui-panel-animate.ui-panel-position-right.ui-panel-display-overlay, -.ui-panel-animate.ui-panel-position-right.ui-panel-display-push { - right: 0; - -webkit-transform: translate3d(17em,0,0); - -moz-transform: translate3d(17em,0,0); - transform: translate3d(17em,0,0); -} -/* Panel right open */ -.ui-panel-position-right.ui-panel-display-reveal, /* Unset "panel right closed" for reveal */ -.ui-panel-position-right.ui-panel-open { - right: 0; -} -/* Panel right open animated */ -.ui-panel-animate.ui-panel-open.ui-panel-position-right.ui-panel-display-overlay, -.ui-panel-animate.ui-panel-open.ui-panel-position-right.ui-panel-display-push { - -webkit-transform: translate3d(0,0,0); - transform: translate3d(0,0,0); - -moz-transform: none; -} -/* Wrapper and fixed toolbars positioning (for reveal and push) */ -/* Panel left open */ -.ui-panel-page-content-position-left { - left: 17em; - right: -17em; -} -/* Panel left open animated */ -.ui-panel-animate.ui-panel-page-content-position-left { - left: 0; - right: 0; - -webkit-transform: translate3d(17em,0,0); - -moz-transform: translate3d(17em,0,0); - transform: translate3d(17em,0,0); -} -/* Panel right open */ -.ui-panel-page-content-position-right { - left: -17em; - right: 17em; -} -/* Panel right open animated */ -.ui-panel-animate.ui-panel-page-content-position-right { - left: 0; - right: 0; - -webkit-transform: translate3d(-17em,0,0); - -moz-transform: translate3d(-17em,0,0); - transform: translate3d(-17em,0,0); -} -/* Dismiss model open */ -.ui-panel-dismiss-open.ui-panel-dismiss-position-left { - left: 17em; -} -.ui-panel-dismiss-open.ui-panel-dismiss-position-right { - right: 17em; -} -/* Shadows and borders */ -.ui-panel-display-reveal { - -webkit-box-shadow: inset -5px 0 5px rgba(0,0,0,.15); - -moz-box-shadow: inset -5px 0 5px rgba(0,0,0,.15); - box-shadow: inset -5px 0 5px rgba(0,0,0,.15); -} -.ui-panel-position-right.ui-panel-display-reveal { - -webkit-box-shadow: inset 5px 0 5px rgba(0,0,0,.15); - -moz-box-shadow: inset 5px 0 5px rgba(0,0,0,.15); - box-shadow: inset 5px 0 5px rgba(0,0,0,.15); -} -.ui-panel-display-overlay { - -webkit-box-shadow: 5px 0 5px rgba(0,0,0,.15); - -moz-box-shadow: 5px 0 5px rgba(0,0,0,.15); - box-shadow: 5px 0 5px rgba(0,0,0,.15); -} -.ui-panel-position-right.ui-panel-display-overlay { - -webkit-box-shadow: -5px 0 5px rgba(0,0,0,.15); - -moz-box-shadow: -5px 0 5px rgba(0,0,0,.15); - box-shadow: -5px 0 5px rgba(0,0,0,.15); -} -.ui-panel-open.ui-panel-position-left.ui-panel-display-push { - border-right-width: 1px; - margin-right: -1px; -} -.ui-panel-page-content-position-left.ui-panel-page-content-display-push { - margin-left: 1px; - width: auto; -} -.ui-panel-open.ui-panel-position-right.ui-panel-display-push { - border-left-width: 1px; - margin-left: -1px; -} -.ui-panel-page-content-position-right.ui-panel-page-content-display-push { - margin-right: 1px; - width: auto; -} -/* Responsive: wrap on wide viewports once open */ -@media (min-width:55em) { - .ui-responsive-panel .ui-panel-page-content-open.ui-panel-page-content-position-left { - margin-right: 17em; - } - .ui-responsive-panel .ui-panel-page-content-open.ui-panel-page-content-position-right { - margin-left: 17em; - } - .ui-responsive-panel .ui-panel-page-content-open { - width: auto; - } - .ui-responsive-panel .ui-panel-dismiss-display-push, - .ui-responsive-panel.ui-page-active ~ .ui-panel-dismiss-display-push { - display: none; - } -} -.ui-tabs { - position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ - padding: .2em; -} diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/rjs_jquerymobile_css.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/rjs_jquerymobile_css.xml deleted file mode 100644 index 07d3487c3dfe588ce2cd91a550787b1dd3113a90..0000000000000000000000000000000000000000 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/rjs_jquerymobile_css.xml +++ /dev/null @@ -1,322 +0,0 @@ -<?xml version="1.0"?> -<ZopeData> - <record id="1" aka="AAAAAAAAAAE="> - <pickle> - <global name="Web Style" module="erp5.portal_type"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>_Access_contents_information_Permission</string> </key> - <value> - <tuple> - <string>Anonymous</string> - <string>Assignee</string> - <string>Assignor</string> - <string>Associate</string> - <string>Auditor</string> - <string>Manager</string> - <string>Owner</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Add_portal_content_Permission</string> </key> - <value> - <tuple> - <string>Assignee</string> - <string>Assignor</string> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Change_local_roles_Permission</string> </key> - <value> - <tuple> - <string>Assignor</string> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Modify_portal_content_Permission</string> </key> - <value> - <tuple> - <string>Assignee</string> - <string>Assignor</string> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_View_Permission</string> </key> - <value> - <tuple> - <string>Anonymous</string> - <string>Assignee</string> - <string>Assignor</string> - <string>Associate</string> - <string>Auditor</string> - <string>Manager</string> - <string>Owner</string> - </tuple> - </value> - </item> - <item> - <key> <string>content_md5</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>default_reference</string> </key> - <value> <string>jquerymobile.css</string> </value> - </item> - <item> - <key> <string>description</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>rjs_jquerymobile_css</string> </value> - </item> - <item> - <key> <string>language</string> </key> - <value> <string>en</string> </value> - </item> - <item> - <key> <string>portal_type</string> </key> - <value> <string>Web Style</string> </value> - </item> - <item> - <key> <string>short_title</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>title</string> </key> - <value> <string>jQuery Mobile CSS</string> </value> - </item> - <item> - <key> <string>version</string> </key> - <value> <string>1.4.0-alpha.2</string> </value> - </item> - <item> - <key> <string>workflow_history</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> - </value> - </item> - </dictionary> - </pickle> - </record> - <record id="2" aka="AAAAAAAAAAI="> - <pickle> - <global name="PersistentMapping" module="Persistence.mapping"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>data</string> </key> - <value> - <dictionary> - <item> - <key> <string>document_publication_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> - </value> - </item> - <item> - <key> <string>edit_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> - </value> - </item> - <item> - <key> <string>processing_status_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent> - </value> - </item> - </dictionary> - </value> - </item> - </dictionary> - </pickle> - </record> - <record id="3" aka="AAAAAAAAAAM="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>publish_alive</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>romain</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1406898405.64</float> - <string>GMT</string> - </tuple> - </state> - </object> - </value> - </item> - <item> - <key> <string>validation_state</string> </key> - <value> <string>published_alive</string> </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> - <record id="4" aka="AAAAAAAAAAQ="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>edit</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>zope</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>serial</string> </key> - <value> <string>946.44927.40202.16725</string> </value> - </item> - <item> - <key> <string>state</string> </key> - <value> <string>current</string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1446483721.78</float> - <string>UTC</string> - </tuple> - </state> - </object> - </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> - <record id="5" aka="AAAAAAAAAAU="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>romain</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>external_processing_state</string> </key> - <value> <string>empty</string> </value> - </item> - <item> - <key> <string>serial</string> </key> - <value> <string>0.0.0.0</string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1404999442.96</float> - <string>GMT</string> - </tuple> - </state> - </object> - </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/rjs_jquerymobile_js.js b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/rjs_jquerymobile_js.js deleted file mode 100644 index 07d7039d0db35de9b9254e4da26d6f2e94d9b22f..0000000000000000000000000000000000000000 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/rjs_jquerymobile_js.js +++ /dev/null @@ -1,14988 +0,0 @@ -// CUSTOM HACKS: -// added wrapper class property on select to enable readonly (wontfix) - -/*! -* jQuery Mobile 1.5.0-pre -* Git HEAD hash: 39cb20fe26969941329347e2f41a222f94c63138 <> Date: Tue Aug 26 2014 13:31:05 UTC -* http://jquerymobile.com -* -* Copyright 2010, 2014 jQuery Foundation, Inc. and othercontributors -* Released under the MIT license. -* http://jquery.org/license -* -*/ - - -(function ( root, doc, factory ) { - if ( typeof define === "function" && define.amd ) { - // AMD. Register as an anonymous module. - define( [ "jquery" ], function ( $ ) { - factory( $, root, doc ); - return $.mobile; - }); - } else { - // Browser globals - factory( root.jQuery, root, doc ); - } -}( this, document, function ( jQuery, window, document, undefined ) { -(function( $ ) { - $.mobile = {}; -}( jQuery )); - -(function( $, window, undefined ) { - $.extend( $.mobile, { - - // Version of the jQuery Mobile Framework - version: "1.5.0-pre", - - // Deprecated and no longer used in 1.4 remove in 1.5 - // Define the url parameter used for referencing widget-generated sub-pages. - // Translates to example.html&ui-page=subpageIdentifier - // hash segment before &ui-page= is used to make Ajax request - subPageUrlKey: "ui-page", - - hideUrlBar: true, - - // Keepnative Selector - keepNative: ":jqmData(role='none'), :jqmData(role='nojs')", - - // Deprecated in 1.4 remove in 1.5 - // Class assigned to page currently in view, and during transitions - activePageClass: "ui-page-active", - - // Deprecated in 1.4 remove in 1.5 - // Class used for "active" button state, from CSS framework - activeBtnClass: "ui-btn-active", - - // Deprecated in 1.4 remove in 1.5 - // Class used for "focus" form element state, from CSS framework - focusClass: "ui-focus", - - // Automatically handle clicks and form submissions through Ajax, when same-domain - ajaxEnabled: true, - - // Automatically load and show pages based on location.hash - hashListeningEnabled: true, - - // disable to prevent jquery from bothering with links - linkBindingEnabled: true, - - // Set default page transition - 'none' for no transitions - defaultPageTransition: "fade", - - // Set maximum window width for transitions to apply - 'false' for no limit - maxTransitionWidth: false, - - // Minimum scroll distance that will be remembered when returning to a page - // Deprecated remove in 1.5 - minScrollBack: 0, - - // Set default dialog transition - 'none' for no transitions - defaultDialogTransition: "pop", - - // Error response message - appears when an Ajax page request fails - pageLoadErrorMessage: "Error Loading Page", - - // For error messages, which theme does the box use? - pageLoadErrorMessageTheme: "a", - - // replace calls to window.history.back with phonegaps navigation helper - // where it is provided on the window object - phonegapNavigationEnabled: false, - - //automatically initialize the DOM when it's ready - autoInitializePage: true, - - pushStateEnabled: true, - - // allows users to opt in to ignoring content by marking a parent element as - // data-ignored - ignoreContentEnabled: false, - - buttonMarkup: { - hoverDelay: 200 - }, - - // disable the alteration of the dynamic base tag or links in the case - // that a dynamic base tag isn't supported - dynamicBaseEnabled: true, - - // default the property to remove dependency on assignment in init module - pageContainer: $(), - - //enable cross-domain page support - allowCrossDomainPages: false, - - dialogHashKey: "&ui-state=dialog" - }); -})( jQuery, this ); - -(function( $, window, undefined ) { - var nsNormalizeDict = {}, - oldFind = $.find, - rbrace = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/, - jqmDataRE = /:jqmData\(([^)]*)\)/g; - - $.extend( $.mobile, { - - // Namespace used framework-wide for data-attrs. Default is no namespace - - ns: "", - - // Retrieve an attribute from an element and perform some massaging of the value - - getAttribute: function( element, key ) { - var data; - - element = element.jquery ? element[0] : element; - - if ( element && element.getAttribute ) { - data = element.getAttribute( "data-" + $.mobile.ns + key ); - } - - // Copied from core's src/data.js:dataAttr() - // Convert from a string to a proper data type - try { - data = data === "true" ? true : - data === "false" ? false : - data === "null" ? null : - // Only convert to a number if it doesn't change the string - +data + "" === data ? +data : - rbrace.test( data ) ? JSON.parse( data ) : - data; - } catch( err ) {} - - return data; - }, - - // Expose our cache for testing purposes. - nsNormalizeDict: nsNormalizeDict, - - // Take a data attribute property, prepend the namespace - // and then camel case the attribute string. Add the result - // to our nsNormalizeDict so we don't have to do this again. - nsNormalize: function( prop ) { - return nsNormalizeDict[ prop ] || - ( nsNormalizeDict[ prop ] = $.camelCase( $.mobile.ns + prop ) ); - }, - - // Find the closest javascript page element to gather settings data jsperf test - // http://jsperf.com/single-complex-selector-vs-many-complex-selectors/edit - // possibly naive, but it shows that the parsing overhead for *just* the page selector vs - // the page and dialog selector is negligable. This could probably be speed up by - // doing a similar parent node traversal to the one found in the inherited theme code above - closestPageData: function( $target ) { - return $target - .closest( ":jqmData(role='page'), :jqmData(role='dialog')" ) - .data( "mobile-page" ); - } - - }); - - // Mobile version of data and removeData and hasData methods - // ensures all data is set and retrieved using jQuery Mobile's data namespace - $.fn.jqmData = function( prop, value ) { - var result; - if ( typeof prop !== "undefined" ) { - if ( prop ) { - prop = $.mobile.nsNormalize( prop ); - } - - // undefined is permitted as an explicit input for the second param - // in this case it returns the value and does not set it to undefined - if ( arguments.length < 2 || value === undefined ) { - result = this.data( prop ); - } else { - result = this.data( prop, value ); - } - } - return result; - }; - - $.jqmData = function( elem, prop, value ) { - var result; - if ( typeof prop !== "undefined" ) { - result = $.data( elem, prop ? $.mobile.nsNormalize( prop ) : prop, value ); - } - return result; - }; - - $.fn.jqmRemoveData = function( prop ) { - return this.removeData( $.mobile.nsNormalize( prop ) ); - }; - - $.jqmRemoveData = function( elem, prop ) { - return $.removeData( elem, $.mobile.nsNormalize( prop ) ); - }; - - $.find = function( selector, context, ret, extra ) { - if ( selector.indexOf( ":jqmData" ) > -1 ) { - selector = selector.replace( jqmDataRE, "[data-" + ( $.mobile.ns || "" ) + "$1]" ); - } - - return oldFind.call( this, selector, context, ret, extra ); - }; - - $.extend( $.find, oldFind ); - -})( jQuery, this ); - -/*! - * jQuery UI Core c0ab71056b936627e8a7821f03c044aec6280a40 - * http://jqueryui.com - * - * Copyright 2013 jQuery Foundation and other contributors - * Released under the MIT license. - * http://jquery.org/license - * - * http://api.jqueryui.com/category/ui-core/ - */ -(function( $, undefined ) { - -var uuid = 0, - runiqueId = /^ui-id-\d+$/; - -// $.ui might exist from components with no dependencies, e.g., $.ui.position -$.ui = $.ui || {}; - -$.extend( $.ui, { - version: "c0ab71056b936627e8a7821f03c044aec6280a40", - - keyCode: { - BACKSPACE: 8, - COMMA: 188, - DELETE: 46, - DOWN: 40, - END: 35, - ENTER: 13, - ESCAPE: 27, - HOME: 36, - LEFT: 37, - PAGE_DOWN: 34, - PAGE_UP: 33, - PERIOD: 190, - RIGHT: 39, - SPACE: 32, - TAB: 9, - UP: 38 - } -}); - -// plugins -$.fn.extend({ - focus: (function( orig ) { - return function( delay, fn ) { - return typeof delay === "number" ? - this.each(function() { - var elem = this; - setTimeout(function() { - $( elem ).focus(); - if ( fn ) { - fn.call( elem ); - } - }, delay ); - }) : - orig.apply( this, arguments ); - }; - })( $.fn.focus ), - - scrollParent: function() { - var scrollParent; - if (($.ui.ie && (/(static|relative)/).test(this.css("position"))) || (/absolute/).test(this.css("position"))) { - scrollParent = this.parents().filter(function() { - return (/(relative|absolute|fixed)/).test($.css(this,"position")) && (/(auto|scroll)/).test($.css(this,"overflow")+$.css(this,"overflow-y")+$.css(this,"overflow-x")); - }).eq(0); - } else { - scrollParent = this.parents().filter(function() { - return (/(auto|scroll)/).test($.css(this,"overflow")+$.css(this,"overflow-y")+$.css(this,"overflow-x")); - }).eq(0); - } - - return ( /fixed/ ).test( this.css( "position") ) || !scrollParent.length ? $( this[ 0 ].ownerDocument || document ) : scrollParent; - }, - - uniqueId: function() { - return this.each(function() { - if ( !this.id ) { - this.id = "ui-id-" + (++uuid); - } - }); - }, - - removeUniqueId: function() { - return this.each(function() { - if ( runiqueId.test( this.id ) ) { - $( this ).removeAttr( "id" ); - } - }); - } -}); - -// selectors -function focusable( element, isTabIndexNotNaN ) { - var map, mapName, img, - nodeName = element.nodeName.toLowerCase(); - if ( "area" === nodeName ) { - map = element.parentNode; - mapName = map.name; - if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) { - return false; - } - img = $( "img[usemap=#" + mapName + "]" )[0]; - return !!img && visible( img ); - } - return ( /input|select|textarea|button|object/.test( nodeName ) ? - !element.disabled : - "a" === nodeName ? - element.href || isTabIndexNotNaN : - isTabIndexNotNaN) && - // the element and all of its ancestors must be visible - visible( element ); -} - -function visible( element ) { - return $.expr.filters.visible( element ) && - !$( element ).parents().addBack().filter(function() { - return $.css( this, "visibility" ) === "hidden"; - }).length; -} - -$.extend( $.expr[ ":" ], { - data: $.expr.createPseudo ? - $.expr.createPseudo(function( dataName ) { - return function( elem ) { - return !!$.data( elem, dataName ); - }; - }) : - // support: jQuery <1.8 - function( elem, i, match ) { - return !!$.data( elem, match[ 3 ] ); - }, - - focusable: function( element ) { - return focusable( element, !isNaN( $.attr( element, "tabindex" ) ) ); - }, - - tabbable: function( element ) { - var tabIndex = $.attr( element, "tabindex" ), - isTabIndexNaN = isNaN( tabIndex ); - return ( isTabIndexNaN || tabIndex >= 0 ) && focusable( element, !isTabIndexNaN ); - } -}); - -// support: jQuery <1.8 -if ( !$( "<a>" ).outerWidth( 1 ).jquery ) { - $.each( [ "Width", "Height" ], function( i, name ) { - var side = name === "Width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ], - type = name.toLowerCase(), - orig = { - innerWidth: $.fn.innerWidth, - innerHeight: $.fn.innerHeight, - outerWidth: $.fn.outerWidth, - outerHeight: $.fn.outerHeight - }; - - function reduce( elem, size, border, margin ) { - $.each( side, function() { - size -= parseFloat( $.css( elem, "padding" + this ) ) || 0; - if ( border ) { - size -= parseFloat( $.css( elem, "border" + this + "Width" ) ) || 0; - } - if ( margin ) { - size -= parseFloat( $.css( elem, "margin" + this ) ) || 0; - } - }); - return size; - } - - $.fn[ "inner" + name ] = function( size ) { - if ( size === undefined ) { - return orig[ "inner" + name ].call( this ); - } - - return this.each(function() { - $( this ).css( type, reduce( this, size ) + "px" ); - }); - }; - - $.fn[ "outer" + name] = function( size, margin ) { - if ( typeof size !== "number" ) { - return orig[ "outer" + name ].call( this, size ); - } - - return this.each(function() { - $( this).css( type, reduce( this, size, true, margin ) + "px" ); - }); - }; - }); -} - -// support: jQuery <1.8 -if ( !$.fn.addBack ) { - $.fn.addBack = function( selector ) { - return this.add( selector == null ? - this.prevObject : this.prevObject.filter( selector ) - ); - }; -} - -// support: jQuery 1.6.1, 1.6.2 (http://bugs.jquery.com/ticket/9413) -if ( $( "<a>" ).data( "a-b", "a" ).removeData( "a-b" ).data( "a-b" ) ) { - $.fn.removeData = (function( removeData ) { - return function( key ) { - if ( arguments.length ) { - return removeData.call( this, $.camelCase( key ) ); - } else { - return removeData.call( this ); - } - }; - })( $.fn.removeData ); -} - - - - - -// deprecated -$.ui.ie = !!/msie [\w.]+/.exec( navigator.userAgent.toLowerCase() ); - -$.support.selectstart = "onselectstart" in document.createElement( "div" ); -$.fn.extend({ - disableSelection: function() { - return this.bind( ( $.support.selectstart ? "selectstart" : "mousedown" ) + - ".ui-disableSelection", function( event ) { - event.preventDefault(); - }); - }, - - enableSelection: function() { - return this.unbind( ".ui-disableSelection" ); - }, - - zIndex: function( zIndex ) { - if ( zIndex !== undefined ) { - return this.css( "zIndex", zIndex ); - } - - if ( this.length ) { - var elem = $( this[ 0 ] ), position, value; - while ( elem.length && elem[ 0 ] !== document ) { - // Ignore z-index if position is set to a value where z-index is ignored by the browser - // This makes behavior of this function consistent across browsers - // WebKit always returns auto if the element is positioned - position = elem.css( "position" ); - if ( position === "absolute" || position === "relative" || position === "fixed" ) { - // IE returns 0 when zIndex is not specified - // other browsers return a string - // we ignore the case of nested elements with an explicit value of 0 - // <div style="z-index: -10;"><div style="z-index: 0;"></div></div> - value = parseInt( elem.css( "zIndex" ), 10 ); - if ( !isNaN( value ) && value !== 0 ) { - return value; - } - } - elem = elem.parent(); - } - } - - return 0; - } -}); - -// $.ui.plugin is deprecated. Use $.widget() extensions instead. -$.ui.plugin = { - add: function( module, option, set ) { - var i, - proto = $.ui[ module ].prototype; - for ( i in set ) { - proto.plugins[ i ] = proto.plugins[ i ] || []; - proto.plugins[ i ].push( [ option, set[ i ] ] ); - } - }, - call: function( instance, name, args, allowDisconnected ) { - var i, - set = instance.plugins[ name ]; - - if ( !set ) { - return; - } - - if ( !allowDisconnected && ( !instance.element[ 0 ].parentNode || instance.element[ 0 ].parentNode.nodeType === 11 ) ) { - return; - } - - for ( i = 0; i < set.length; i++ ) { - if ( instance.options[ set[ i ][ 0 ] ] ) { - set[ i ][ 1 ].apply( instance.element, args ); - } - } - } -}; - -})( jQuery ); - -(function( $, window, undefined ) { - - // Subtract the height of external toolbars from the page height, if the page does not have - // internal toolbars of the same type - var compensateToolbars = function( page, desiredHeight ) { - var pageParent = page.parent(), - toolbarsAffectingHeight = [], - externalHeaders = pageParent.children( ":jqmData(role='header')" ), - internalHeaders = page.children( ":jqmData(role='header')" ), - externalFooters = pageParent.children( ":jqmData(role='footer')" ), - internalFooters = page.children( ":jqmData(role='footer')" ); - - // If we have no internal headers, but we do have external headers, then their height - // reduces the page height - if ( internalHeaders.length === 0 && externalHeaders.length > 0 ) { - toolbarsAffectingHeight = toolbarsAffectingHeight.concat( externalHeaders.toArray() ); - } - - // If we have no internal footers, but we do have external footers, then their height - // reduces the page height - if ( internalFooters.length === 0 && externalFooters.length > 0 ) { - toolbarsAffectingHeight = toolbarsAffectingHeight.concat( externalFooters.toArray() ); - } - - $.each( toolbarsAffectingHeight, function( index, value ) { - desiredHeight -= $( value ).outerHeight(); - }); - - // Height must be at least zero - return Math.max( 0, desiredHeight ); - }; - - $.extend( $.mobile, { - // define the window and the document objects - window: $( window ), - document: $( document ), - - // TODO: Remove and use $.ui.keyCode directly - keyCode: $.ui.keyCode, - - // Place to store various widget extensions - behaviors: {}, - - // Scroll page vertically: scroll to 0 to hide iOS address bar, or pass a Y value - silentScroll: function( ypos ) { - if ( $.type( ypos ) !== "number" ) { - ypos = $.mobile.defaultHomeScroll; - } - - // prevent scrollstart and scrollstop events - $.event.special.scrollstart.enabled = false; - - setTimeout(function() { - window.scrollTo( 0, ypos ); - $.mobile.document.trigger( "silentscroll", { x: 0, y: ypos }); - }, 20 ); - - setTimeout(function() { - $.event.special.scrollstart.enabled = true; - }, 150 ); - }, - - getClosestBaseUrl: function( ele ) { - // Find the closest page and extract out its url. - var url = $( ele ).closest( ".ui-page" ).jqmData( "url" ), - base = $.mobile.path.documentBase.hrefNoHash; - - if ( !$.mobile.dynamicBaseEnabled || !url || !$.mobile.path.isPath( url ) ) { - url = base; - } - - return $.mobile.path.makeUrlAbsolute( url, base ); - }, - removeActiveLinkClass: function( forceRemoval ) { - if ( !!$.mobile.activeClickedLink && - ( !$.mobile.activeClickedLink.closest( "." + $.mobile.activePageClass ).length || - forceRemoval ) ) { - - $.mobile.activeClickedLink.removeClass( $.mobile.activeBtnClass ); - } - $.mobile.activeClickedLink = null; - }, - - // DEPRECATED in 1.4 - // Find the closest parent with a theme class on it. Note that - // we are not using $.fn.closest() on purpose here because this - // method gets called quite a bit and we need it to be as fast - // as possible. - getInheritedTheme: function( el, defaultTheme ) { - var e = el[ 0 ], - ltr = "", - re = /ui-(bar|body|overlay)-([a-z])\b/, - c, m; - while ( e ) { - c = e.className || ""; - if ( c && ( m = re.exec( c ) ) && ( ltr = m[ 2 ] ) ) { - // We found a parent with a theme class - // on it so bail from this loop. - break; - } - - e = e.parentNode; - } - // Return the theme letter we found, if none, return the - // specified default. - return ltr || defaultTheme || "a"; - }, - - enhanceable: function( elements ) { - return this.haveParents( elements, "enhance" ); - }, - - hijackable: function( elements ) { - return this.haveParents( elements, "ajax" ); - }, - - haveParents: function( elements, attr ) { - if ( !$.mobile.ignoreContentEnabled ) { - return elements; - } - - var count = elements.length, - $newSet = $(), - e, $element, excluded, - i, c; - - for ( i = 0; i < count; i++ ) { - $element = elements.eq( i ); - excluded = false; - e = elements[ i ]; - - while ( e ) { - c = e.getAttribute ? e.getAttribute( "data-" + $.mobile.ns + attr ) : ""; - - if ( c === "false" ) { - excluded = true; - break; - } - - e = e.parentNode; - } - - if ( !excluded ) { - $newSet = $newSet.add( $element ); - } - } - - return $newSet; - }, - - getScreenHeight: function() { - // Native innerHeight returns more accurate value for this across platforms, - // jQuery version is here as a normalized fallback for platforms like Symbian - return window.innerHeight || $.mobile.window.height(); - }, - - //simply set the active page's minimum height to screen height, depending on orientation - resetActivePageHeight: function( height ) { - var page = $( "." + $.mobile.activePageClass ), - pageHeight = page.height(), - pageOuterHeight = page.outerHeight( true ); - - height = compensateToolbars( page, - ( typeof height === "number" ) ? height : $.mobile.getScreenHeight() ); - - // Remove any previous min-height setting - page.css( "min-height", "" ); - - // Set the minimum height only if the height as determined by CSS is insufficient - if ( page.height() < height ) { - page.css( "min-height", height - ( pageOuterHeight - pageHeight ) ); - } - }, - - loading: function() { - // If this is the first call to this function, instantiate a loader widget - var loader = this.loading._widget || $( $.mobile.loader.prototype.defaultHtml ).loader(), - - // Call the appropriate method on the loader - returnValue = loader.loader.apply( loader, arguments ); - - // Make sure the loader is retained for future calls to this function. - this.loading._widget = loader; - - return returnValue; - } - }); - - $.addDependents = function( elem, newDependents ) { - var $elem = $( elem ), - dependents = $elem.jqmData( "dependents" ) || $(); - - $elem.jqmData( "dependents", $( dependents ).add( newDependents ) ); - }; - - // plugins - $.fn.extend({ - removeWithDependents: function() { - $.removeWithDependents( this ); - }, - - // Enhance child elements - enhanceWithin: function() { - var index, - widgetElements = {}, - keepNative = $.mobile.page.prototype.keepNativeSelector(), - that = this; - - // Add no js class to elements - if ( $.mobile.nojs ) { - $.mobile.nojs( this ); - } - - // Bind links for ajax nav - if ( $.mobile.links ) { - $.mobile.links( this ); - } - - // Degrade inputs for styleing - if ( $.mobile.degradeInputsWithin ) { - $.mobile.degradeInputsWithin( this ); - } - - // Run buttonmarkup - if ( $.fn.buttonMarkup ) { - this.find( $.fn.buttonMarkup.initSelector ).not( keepNative ) - .jqmEnhanceable().buttonMarkup(); - } - - // Add classes for fieldContain - if ( $.fn.fieldcontain ) { - this.find( ":jqmData(role='fieldcontain')" ).not( keepNative ) - .jqmEnhanceable().fieldcontain(); - } - - // Enhance widgets - $.each( $.mobile.widgets, function( name, constructor ) { - - // If initSelector not false find elements - if ( constructor.initSelector ) { - - // Filter elements that should not be enhanced based on parents - var elements = $.mobile.enhanceable( that.find( constructor.initSelector ) ); - - // If any matching elements remain filter ones with keepNativeSelector - if ( elements.length > 0 ) { - - // $.mobile.page.prototype.keepNativeSelector is deprecated this is just for backcompat - // Switch to $.mobile.keepNative in 1.5 which is just a value not a function - elements = elements.not( keepNative ); - } - - // Enhance whatever is left - if ( elements.length > 0 ) { - widgetElements[ constructor.prototype.widgetName ] = elements; - } - } - }); - - for ( index in widgetElements ) { - widgetElements[ index ][ index ](); - } - - return this; - }, - - addDependents: function( newDependents ) { - $.addDependents( this, newDependents ); - }, - - // note that this helper doesn't attempt to handle the callback - // or setting of an html element's text, its only purpose is - // to return the html encoded version of the text in all cases. (thus the name) - getEncodedText: function() { - return $( "<a>" ).text( this.text() ).html(); - }, - - // fluent helper function for the mobile namespaced equivalent - jqmEnhanceable: function() { - return $.mobile.enhanceable( this ); - }, - - jqmHijackable: function() { - return $.mobile.hijackable( this ); - } - }); - - $.removeWithDependents = function( nativeElement ) { - var element = $( nativeElement ); - - ( element.jqmData( "dependents" ) || $() ).remove(); - element.remove(); - }; - $.addDependents = function( nativeElement, newDependents ) { - var element = $( nativeElement ), - dependents = element.jqmData( "dependents" ) || $(); - - element.jqmData( "dependents", $( dependents ).add( newDependents ) ); - }; - - $.find.matches = function( expr, set ) { - return $.find( expr, null, null, set ); - }; - - $.find.matchesSelector = function( node, expr ) { - return $.find( expr, null, null, [ node ] ).length > 0; - }; - -})( jQuery, this ); - - -/*! - * jQuery UI Widget c0ab71056b936627e8a7821f03c044aec6280a40 - * http://jqueryui.com - * - * Copyright 2013 jQuery Foundation and other contributors - * Released under the MIT license. - * http://jquery.org/license - * - * http://api.jqueryui.com/jQuery.widget/ - */ -(function( $, undefined ) { - -var uuid = 0, - slice = Array.prototype.slice, - _cleanData = $.cleanData; -$.cleanData = function( elems ) { - for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) { - try { - $( elem ).triggerHandler( "remove" ); - // http://bugs.jquery.com/ticket/8235 - } catch( e ) {} - } - _cleanData( elems ); -}; - -$.widget = function( name, base, prototype ) { - var fullName, existingConstructor, constructor, basePrototype, - // proxiedPrototype allows the provided prototype to remain unmodified - // so that it can be used as a mixin for multiple widgets (#8876) - proxiedPrototype = {}, - namespace = name.split( "." )[ 0 ]; - - name = name.split( "." )[ 1 ]; - fullName = namespace + "-" + name; - - if ( !prototype ) { - prototype = base; - base = $.Widget; - } - - // create selector for plugin - $.expr[ ":" ][ fullName.toLowerCase() ] = function( elem ) { - return !!$.data( elem, fullName ); - }; - - $[ namespace ] = $[ namespace ] || {}; - existingConstructor = $[ namespace ][ name ]; - constructor = $[ namespace ][ name ] = function( options, element ) { - // allow instantiation without "new" keyword - if ( !this._createWidget ) { - return new constructor( options, element ); - } - - // allow instantiation without initializing for simple inheritance - // must use "new" keyword (the code above always passes args) - if ( arguments.length ) { - this._createWidget( options, element ); - } - }; - // extend with the existing constructor to carry over any static properties - $.extend( constructor, existingConstructor, { - version: prototype.version, - // copy the object used to create the prototype in case we need to - // redefine the widget later - _proto: $.extend( {}, prototype ), - // track widgets that inherit from this widget in case this widget is - // redefined after a widget inherits from it - _childConstructors: [] - }); - - basePrototype = new base(); - // we need to make the options hash a property directly on the new instance - // otherwise we'll modify the options hash on the prototype that we're - // inheriting from - basePrototype.options = $.widget.extend( {}, basePrototype.options ); - $.each( prototype, function( prop, value ) { - if ( !$.isFunction( value ) ) { - proxiedPrototype[ prop ] = value; - return; - } - proxiedPrototype[ prop ] = (function() { - var _super = function() { - return base.prototype[ prop ].apply( this, arguments ); - }, - _superApply = function( args ) { - return base.prototype[ prop ].apply( this, args ); - }; - return function() { - var __super = this._super, - __superApply = this._superApply, - returnValue; - - this._super = _super; - this._superApply = _superApply; - - returnValue = value.apply( this, arguments ); - - this._super = __super; - this._superApply = __superApply; - - return returnValue; - }; - })(); - }); - constructor.prototype = $.widget.extend( basePrototype, { - // TODO: remove support for widgetEventPrefix - // always use the name + a colon as the prefix, e.g., draggable:start - // don't prefix for widgets that aren't DOM-based - widgetEventPrefix: existingConstructor ? (basePrototype.widgetEventPrefix || name) : name - }, proxiedPrototype, { - constructor: constructor, - namespace: namespace, - widgetName: name, - widgetFullName: fullName - }); - - // If this widget is being redefined then we need to find all widgets that - // are inheriting from it and redefine all of them so that they inherit from - // the new version of this widget. We're essentially trying to replace one - // level in the prototype chain. - if ( existingConstructor ) { - $.each( existingConstructor._childConstructors, function( i, child ) { - var childPrototype = child.prototype; - - // redefine the child widget using the same prototype that was - // originally used, but inherit from the new version of the base - $.widget( childPrototype.namespace + "." + childPrototype.widgetName, constructor, child._proto ); - }); - // remove the list of existing child constructors from the old constructor - // so the old child constructors can be garbage collected - delete existingConstructor._childConstructors; - } else { - base._childConstructors.push( constructor ); - } - - $.widget.bridge( name, constructor ); - - return constructor; -}; - -$.widget.extend = function( target ) { - var input = slice.call( arguments, 1 ), - inputIndex = 0, - inputLength = input.length, - key, - value; - for ( ; inputIndex < inputLength; inputIndex++ ) { - for ( key in input[ inputIndex ] ) { - value = input[ inputIndex ][ key ]; - if ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) { - // Clone objects - if ( $.isPlainObject( value ) ) { - target[ key ] = $.isPlainObject( target[ key ] ) ? - $.widget.extend( {}, target[ key ], value ) : - // Don't extend strings, arrays, etc. with objects - $.widget.extend( {}, value ); - // Copy everything else by reference - } else { - target[ key ] = value; - } - } - } - } - return target; -}; - -$.widget.bridge = function( name, object ) { - var fullName = object.prototype.widgetFullName || name; - $.fn[ name ] = function( options ) { - var isMethodCall = typeof options === "string", - args = slice.call( arguments, 1 ), - returnValue = this; - - // allow multiple hashes to be passed on init - options = !isMethodCall && args.length ? - $.widget.extend.apply( null, [ options ].concat(args) ) : - options; - - if ( isMethodCall ) { - this.each(function() { - var methodValue, - instance = $.data( this, fullName ); - if ( options === "instance" ) { - returnValue = instance; - return false; - } - if ( !instance ) { - return $.error( "cannot call methods on " + name + " prior to initialization; " + - "attempted to call method '" + options + "'" ); - } - if ( !$.isFunction( instance[options] ) || options.charAt( 0 ) === "_" ) { - return $.error( "no such method '" + options + "' for " + name + " widget instance" ); - } - methodValue = instance[ options ].apply( instance, args ); - if ( methodValue !== instance && methodValue !== undefined ) { - returnValue = methodValue && methodValue.jquery ? - returnValue.pushStack( methodValue.get() ) : - methodValue; - return false; - } - }); - } else { - this.each(function() { - var instance = $.data( this, fullName ); - if ( instance ) { - instance.option( options || {} )._init(); - } else { - $.data( this, fullName, new object( options, this ) ); - } - }); - } - - return returnValue; - }; -}; - -$.Widget = function( /* options, element */ ) {}; -$.Widget._childConstructors = []; - -$.Widget.prototype = { - widgetName: "widget", - widgetEventPrefix: "", - defaultElement: "<div>", - options: { - disabled: false, - - // callbacks - create: null - }, - _createWidget: function( options, element ) { - element = $( element || this.defaultElement || this )[ 0 ]; - this.element = $( element ); - this.uuid = uuid++; - this.eventNamespace = "." + this.widgetName + this.uuid; - this.options = $.widget.extend( {}, - this.options, - this._getCreateOptions(), - options ); - - this.bindings = $(); - this.hoverable = $(); - this.focusable = $(); - - if ( element !== this ) { - $.data( element, this.widgetFullName, this ); - this._on( true, this.element, { - remove: function( event ) { - if ( event.target === element ) { - this.destroy(); - } - } - }); - this.document = $( element.style ? - // element within the document - element.ownerDocument : - // element is window or document - element.document || element ); - this.window = $( this.document[0].defaultView || this.document[0].parentWindow ); - } - - this._create(); - this._trigger( "create", null, this._getCreateEventData() ); - this._init(); - }, - _getCreateOptions: $.noop, - _getCreateEventData: $.noop, - _create: $.noop, - _init: $.noop, - - destroy: function() { - this._destroy(); - // we can probably remove the unbind calls in 2.0 - // all event bindings should go through this._on() - this.element - .unbind( this.eventNamespace ) - .removeData( this.widgetFullName ) - // support: jquery <1.6.3 - // http://bugs.jquery.com/ticket/9413 - .removeData( $.camelCase( this.widgetFullName ) ); - this.widget() - .unbind( this.eventNamespace ) - .removeAttr( "aria-disabled" ) - .removeClass( - this.widgetFullName + "-disabled " + - "ui-state-disabled" ); - - // clean up events and states - this.bindings.unbind( this.eventNamespace ); - this.hoverable.removeClass( "ui-state-hover" ); - this.focusable.removeClass( "ui-state-focus" ); - }, - _destroy: $.noop, - - widget: function() { - return this.element; - }, - - option: function( key, value ) { - var options = key, - parts, - curOption, - i; - - if ( arguments.length === 0 ) { - // don't return a reference to the internal hash - return $.widget.extend( {}, this.options ); - } - - if ( typeof key === "string" ) { - // handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } } - options = {}; - parts = key.split( "." ); - key = parts.shift(); - if ( parts.length ) { - curOption = options[ key ] = $.widget.extend( {}, this.options[ key ] ); - for ( i = 0; i < parts.length - 1; i++ ) { - curOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {}; - curOption = curOption[ parts[ i ] ]; - } - key = parts.pop(); - if ( value === undefined ) { - return curOption[ key ] === undefined ? null : curOption[ key ]; - } - curOption[ key ] = value; - } else { - if ( value === undefined ) { - return this.options[ key ] === undefined ? null : this.options[ key ]; - } - options[ key ] = value; - } - } - - this._setOptions( options ); - - return this; - }, - _setOptions: function( options ) { - var key; - - for ( key in options ) { - this._setOption( key, options[ key ] ); - } - - return this; - }, - _setOption: function( key, value ) { - this.options[ key ] = value; - - if ( key === "disabled" ) { - this.widget() - .toggleClass( this.widgetFullName + "-disabled", !!value ); - this.hoverable.removeClass( "ui-state-hover" ); - this.focusable.removeClass( "ui-state-focus" ); - } - - return this; - }, - - enable: function() { - return this._setOptions({ disabled: false }); - }, - disable: function() { - return this._setOptions({ disabled: true }); - }, - - _on: function( suppressDisabledCheck, element, handlers ) { - var delegateElement, - instance = this; - - // no suppressDisabledCheck flag, shuffle arguments - if ( typeof suppressDisabledCheck !== "boolean" ) { - handlers = element; - element = suppressDisabledCheck; - suppressDisabledCheck = false; - } - - // no element argument, shuffle and use this.element - if ( !handlers ) { - handlers = element; - element = this.element; - delegateElement = this.widget(); - } else { - // accept selectors, DOM elements - element = delegateElement = $( element ); - this.bindings = this.bindings.add( element ); - } - - $.each( handlers, function( event, handler ) { - function handlerProxy() { - // allow widgets to customize the disabled handling - // - disabled as an array instead of boolean - // - disabled class as method for disabling individual parts - if ( !suppressDisabledCheck && - ( instance.options.disabled === true || - $( this ).hasClass( "ui-state-disabled" ) ) ) { - return; - } - return ( typeof handler === "string" ? instance[ handler ] : handler ) - .apply( instance, arguments ); - } - - // copy the guid so direct unbinding works - if ( typeof handler !== "string" ) { - handlerProxy.guid = handler.guid = - handler.guid || handlerProxy.guid || $.guid++; - } - - var match = event.match( /^(\w+)\s*(.*)$/ ), - eventName = match[1] + instance.eventNamespace, - selector = match[2]; - if ( selector ) { - delegateElement.delegate( selector, eventName, handlerProxy ); - } else { - element.bind( eventName, handlerProxy ); - } - }); - }, - - _off: function( element, eventName ) { - eventName = (eventName || "").split( " " ).join( this.eventNamespace + " " ) + this.eventNamespace; - element.unbind( eventName ).undelegate( eventName ); - }, - - _delay: function( handler, delay ) { - function handlerProxy() { - return ( typeof handler === "string" ? instance[ handler ] : handler ) - .apply( instance, arguments ); - } - var instance = this; - return setTimeout( handlerProxy, delay || 0 ); - }, - - _hoverable: function( element ) { - this.hoverable = this.hoverable.add( element ); - this._on( element, { - mouseenter: function( event ) { - $( event.currentTarget ).addClass( "ui-state-hover" ); - }, - mouseleave: function( event ) { - $( event.currentTarget ).removeClass( "ui-state-hover" ); - } - }); - }, - - _focusable: function( element ) { - this.focusable = this.focusable.add( element ); - this._on( element, { - focusin: function( event ) { - $( event.currentTarget ).addClass( "ui-state-focus" ); - }, - focusout: function( event ) { - $( event.currentTarget ).removeClass( "ui-state-focus" ); - } - }); - }, - - _trigger: function( type, event, data ) { - var prop, orig, - callback = this.options[ type ]; - - data = data || {}; - event = $.Event( event ); - event.type = ( type === this.widgetEventPrefix ? - type : - this.widgetEventPrefix + type ).toLowerCase(); - // the original event may come from any element - // so we need to reset the target on the new event - event.target = this.element[ 0 ]; - - // copy original event properties over to the new event - orig = event.originalEvent; - if ( orig ) { - for ( prop in orig ) { - if ( !( prop in event ) ) { - event[ prop ] = orig[ prop ]; - } - } - } - - this.element.trigger( event, data ); - return !( $.isFunction( callback ) && - callback.apply( this.element[0], [ event ].concat( data ) ) === false || - event.isDefaultPrevented() ); - } -}; - -$.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) { - $.Widget.prototype[ "_" + method ] = function( element, options, callback ) { - if ( typeof options === "string" ) { - options = { effect: options }; - } - var hasOptions, - effectName = !options ? - method : - options === true || typeof options === "number" ? - defaultEffect : - options.effect || defaultEffect; - options = options || {}; - if ( typeof options === "number" ) { - options = { duration: options }; - } - hasOptions = !$.isEmptyObject( options ); - options.complete = callback; - if ( options.delay ) { - element.delay( options.delay ); - } - if ( hasOptions && $.effects && $.effects.effect[ effectName ] ) { - element[ method ]( options ); - } else if ( effectName !== method && element[ effectName ] ) { - element[ effectName ]( options.duration, options.easing, callback ); - } else { - element.queue(function( next ) { - $( this )[ method ](); - if ( callback ) { - callback.call( element[ 0 ] ); - } - next(); - }); - } - }; -}); - -})( jQuery ); - -(function( $, undefined ) { - -var rcapitals = /[A-Z]/g, - replaceFunction = function( c ) { - return "-" + c.toLowerCase(); - }; - -$.extend( $.Widget.prototype, { - _getCreateOptions: function() { - var option, value, - elem = this.element[ 0 ], - options = {}; - - // - if ( !$.mobile.getAttribute( elem, "defaults" ) ) { - for ( option in this.options ) { - value = $.mobile.getAttribute( elem, option.replace( rcapitals, replaceFunction ) ); - - if ( value != null ) { - options[ option ] = value; - } - } - } - - return options; - } -}); - -//TODO: Remove in 1.5 for backcompat only -$.mobile.widget = $.Widget; - -})( jQuery ); - - -(function( $ ) { - // TODO move loader class down into the widget settings - var loaderClass = "ui-loader", $html = $( "html" ); - - $.widget( "mobile.loader", { - // NOTE if the global config settings are defined they will override these - // options - options: { - // the theme for the loading message - theme: "a", - - // whether the text in the loading message is shown - textVisible: false, - - // custom html for the inner content of the loading message - html: "", - - // the text to be displayed when the popup is shown - text: "loading" - }, - - defaultHtml: "<div class='" + loaderClass + "'>" + - "<span class='ui-icon-loading'></span>" + - "<h1></h1>" + - "</div>", - - // For non-fixed supportin browsers. Position at y center (if scrollTop supported), above the activeBtn (if defined), or just 100px from top - fakeFixLoader: function() { - var activeBtn = $( "." + $.mobile.activeBtnClass ).first(); - - this.element - .css({ - top: $.support.scrollTop && this.window.scrollTop() + this.window.height() / 2 || - activeBtn.length && activeBtn.offset().top || 100 - }); - }, - - // check position of loader to see if it appears to be "fixed" to center - // if not, use abs positioning - checkLoaderPosition: function() { - var offset = this.element.offset(), - scrollTop = this.window.scrollTop(), - screenHeight = $.mobile.getScreenHeight(); - - if ( offset.top < scrollTop || ( offset.top - scrollTop ) > screenHeight ) { - this.element.addClass( "ui-loader-fakefix" ); - this.fakeFixLoader(); - this.window - .unbind( "scroll", this.checkLoaderPosition ) - .bind( "scroll", $.proxy( this.fakeFixLoader, this ) ); - } - }, - - resetHtml: function() { - this.element.html( $( this.defaultHtml ).html() ); - }, - - // Turn on/off page loading message. Theme doubles as an object argument - // with the following shape: { theme: '', text: '', html: '', textVisible: '' } - // NOTE that the $.mobile.loading* settings and params past the first are deprecated - // TODO sweet jesus we need to break some of this out - show: function( theme, msgText, textonly ) { - var textVisible, message, loadSettings; - - this.resetHtml(); - - // use the prototype options so that people can set them globally at - // mobile init. Consistency, it's what's for dinner - if ( $.type( theme ) === "object" ) { - loadSettings = $.extend( {}, this.options, theme ); - - theme = loadSettings.theme; - } else { - loadSettings = this.options; - - // here we prefer the theme value passed as a string argument, then - // we prefer the global option because we can't use undefined default - // prototype options, then the prototype option - theme = theme || loadSettings.theme; - } - - // set the message text, prefer the param, then the settings object - // then loading message - message = msgText || ( loadSettings.text === false ? "" : loadSettings.text ); - - // prepare the dom - $html.addClass( "ui-loading" ); - - textVisible = loadSettings.textVisible; - - // add the proper css given the options (theme, text, etc) - // Force text visibility if the second argument was supplied, or - // if the text was explicitly set in the object args - this.element.attr("class", loaderClass + - " ui-corner-all ui-body-" + theme + - " ui-loader-" + ( textVisible || msgText || theme.text ? "verbose" : "default" ) + - ( loadSettings.textonly || textonly ? " ui-loader-textonly" : "" ) ); - - // TODO verify that jquery.fn.html is ok to use in both cases here - // this might be overly defensive in preventing unknowing xss - // if the html attribute is defined on the loading settings, use that - // otherwise use the fallbacks from above - if ( loadSettings.html ) { - this.element.html( loadSettings.html ); - } else { - this.element.find( "h1" ).text( message ); - } - - // attach the loader to the DOM - this.element.appendTo( $.mobile.pageContainer ); - - // check that the loader is visible - this.checkLoaderPosition(); - - // on scroll check the loader position - this.window.bind( "scroll", $.proxy( this.checkLoaderPosition, this ) ); - }, - - hide: function() { - $html.removeClass( "ui-loading" ); - - if ( this.options.text ) { - this.element.removeClass( "ui-loader-fakefix" ); - } - - $.mobile.window.unbind( "scroll", this.fakeFixLoader ); - $.mobile.window.unbind( "scroll", this.checkLoaderPosition ); - } - }); - -})(jQuery, this); - - -(function( $, undefined ) { - - /*! matchMedia() polyfill - Test a CSS media type/query in JS. Authors & copyright (c) 2012: Scott Jehl, Paul Irish, Nicholas Zakas. Dual MIT/BSD license */ - window.matchMedia = window.matchMedia || (function( doc, undefined ) { - - var bool, - docElem = doc.documentElement, - refNode = docElem.firstElementChild || docElem.firstChild, - // fakeBody required for <FF4 when executed in <head> - fakeBody = doc.createElement( "body" ), - div = doc.createElement( "div" ); - - div.id = "mq-test-1"; - div.style.cssText = "position:absolute;top:-100em"; - fakeBody.style.background = "none"; - fakeBody.appendChild(div); - - return function(q){ - - div.innerHTML = "­<style media=\"" + q + "\"> #mq-test-1 { width: 42px; }</style>"; - - docElem.insertBefore( fakeBody, refNode ); - bool = div.offsetWidth === 42; - docElem.removeChild( fakeBody ); - - return { - matches: bool, - media: q - }; - - }; - - }( document )); - - // $.mobile.media uses matchMedia to return a boolean. - $.mobile.media = function( q ) { - return window.matchMedia( q ).matches; - }; - -})(jQuery); - - (function( $, undefined ) { - var support = { - touch: "ontouchend" in document - }; - - $.mobile.support = $.mobile.support || {}; - $.extend( $.support, support ); - $.extend( $.mobile.support, support ); - }( jQuery )); - - (function( $, undefined ) { - $.extend( $.support, { - orientation: "orientation" in window && "onorientationchange" in window - }); - }( jQuery )); - -(function( $, undefined ) { - -// thx Modernizr -function propExists( prop ) { - var uc_prop = prop.charAt( 0 ).toUpperCase() + prop.substr( 1 ), - props = ( prop + " " + vendors.join( uc_prop + " " ) + uc_prop ).split( " " ), - v; - - for ( v in props ) { - if ( fbCSS[ props[ v ] ] !== undefined ) { - return true; - } - } -} - -var fakeBody = $( "<body>" ).prependTo( "html" ), - fbCSS = fakeBody[ 0 ].style, - vendors = [ "Webkit", "Moz", "O" ], - webos = "palmGetResource" in window, //only used to rule out scrollTop - operamini = window.operamini && ({}).toString.call( window.operamini ) === "[object OperaMini]", - bb = window.blackberry && !propExists( "-webkit-transform" ), //only used to rule out box shadow, as it's filled opaque on BB 5 and lower - nokiaLTE7_3; - -// inline SVG support test -function inlineSVG() { - // Thanks Modernizr & Erik Dahlstrom - var w = window, - svg = !!w.document.createElementNS && !!w.document.createElementNS( "http://www.w3.org/2000/svg", "svg" ).createSVGRect && !( w.opera && navigator.userAgent.indexOf( "Chrome" ) === -1 ), - support = function( data ) { - if ( !( data && svg ) ) { - $( "html" ).addClass( "ui-nosvg" ); - } - }, - img = new w.Image(); - - img.onerror = function() { - support( false ); - }; - img.onload = function() { - support( img.width === 1 && img.height === 1 ); - }; - img.src = "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw=="; -} - -function transform3dTest() { - var mqProp = "transform-3d", - // Because the `translate3d` test below throws false positives in Android: - ret = $.mobile.media( "(-" + vendors.join( "-" + mqProp + "),(-" ) + "-" + mqProp + "),(" + mqProp + ")" ), - el, transforms, t; - - if ( ret ) { - return !!ret; - } - - el = document.createElement( "div" ); - transforms = { - // We’re omitting Opera for the time being; MS uses unprefixed. - "MozTransform": "-moz-transform", - "transform": "transform" - }; - - fakeBody.append( el ); - - for ( t in transforms ) { - if ( el.style[ t ] !== undefined ) { - el.style[ t ] = "translate3d( 100px, 1px, 1px )"; - ret = window.getComputedStyle( el ).getPropertyValue( transforms[ t ] ); - } - } - return ( !!ret && ret !== "none" ); -} - -// Test for dynamic-updating base tag support ( allows us to avoid href,src attr rewriting ) -function baseTagTest() { - var fauxBase = location.protocol + "//" + location.host + location.pathname + "ui-dir/", - base = $( "head base" ), - fauxEle = null, - href = "", - link, rebase; - - if ( !base.length ) { - base = fauxEle = $( "<base>", { "href": fauxBase }).appendTo( "head" ); - } else { - href = base.attr( "href" ); - } - - link = $( "<a href='testurl' />" ).prependTo( fakeBody ); - rebase = link[ 0 ].href; - base[ 0 ].href = href || location.pathname; - - if ( fauxEle ) { - fauxEle.remove(); - } - return rebase.indexOf( fauxBase ) === 0; -} - -// Thanks Modernizr -function cssPointerEventsTest() { - var element = document.createElement( "x" ), - documentElement = document.documentElement, - getComputedStyle = window.getComputedStyle, - supports; - - if ( !( "pointerEvents" in element.style ) ) { - return false; - } - - element.style.pointerEvents = "auto"; - element.style.pointerEvents = "x"; - documentElement.appendChild( element ); - supports = getComputedStyle && - getComputedStyle( element, "" ).pointerEvents === "auto"; - documentElement.removeChild( element ); - return !!supports; -} - -function boundingRect() { - var div = document.createElement( "div" ); - return typeof div.getBoundingClientRect !== "undefined"; -} - -// non-UA-based IE version check by James Padolsey, modified by jdalton - from http://gist.github.com/527683 -// allows for inclusion of IE 6+, including Windows Mobile 7 -$.extend( $.mobile, { browser: {} } ); -$.mobile.browser.oldIE = (function() { - var v = 3, - div = document.createElement( "div" ), - a = div.all || []; - - do { - div.innerHTML = "<!--[if gt IE " + ( ++v ) + "]><br><![endif]-->"; - } while( a[0] ); - - return v > 4 ? v : !v; -})(); - -function fixedPosition() { - var w = window, - ua = navigator.userAgent, - platform = navigator.platform, - // Rendering engine is Webkit, and capture major version - wkmatch = ua.match( /AppleWebKit\/([0-9]+)/ ), - wkversion = !!wkmatch && wkmatch[ 1 ], - ffmatch = ua.match( /Fennec\/([0-9]+)/ ), - ffversion = !!ffmatch && ffmatch[ 1 ], - operammobilematch = ua.match( /Opera Mobi\/([0-9]+)/ ), - omversion = !!operammobilematch && operammobilematch[ 1 ]; - - if ( - // iOS 4.3 and older : Platform is iPhone/Pad/Touch and Webkit version is less than 534 (ios5) - ( ( platform.indexOf( "iPhone" ) > -1 || platform.indexOf( "iPad" ) > -1 || platform.indexOf( "iPod" ) > -1 ) && wkversion && wkversion < 534 ) || - // Opera Mini - ( w.operamini && ({}).toString.call( w.operamini ) === "[object OperaMini]" ) || - ( operammobilematch && omversion < 7458 ) || - //Android lte 2.1: Platform is Android and Webkit version is less than 533 (Android 2.2) - ( ua.indexOf( "Android" ) > -1 && wkversion && wkversion < 533 ) || - // Firefox Mobile before 6.0 - - ( ffversion && ffversion < 6 ) || - // WebOS less than 3 - ( "palmGetResource" in window && wkversion && wkversion < 534 ) || - // MeeGo - ( ua.indexOf( "MeeGo" ) > -1 && ua.indexOf( "NokiaBrowser/8.5.0" ) > -1 ) ) { - return false; - } - - return true; -} - -$.extend( $.support, { - // Note, Chrome for iOS has an extremely quirky implementation of popstate. - // We've chosen to take the shortest path to a bug fix here for issue #5426 - // See the following link for information about the regex chosen - // https://developers.google.com/chrome/mobile/docs/user-agent#chrome_for_ios_user-agent - pushState: "pushState" in history && - "replaceState" in history && - // When running inside a FF iframe, calling replaceState causes an error - !( window.navigator.userAgent.indexOf( "Firefox" ) >= 0 && window.top !== window ) && - ( window.navigator.userAgent.search(/CriOS/) === -1 ), - - mediaquery: $.mobile.media( "only all" ), - cssPseudoElement: !!propExists( "content" ), - touchOverflow: !!propExists( "overflowScrolling" ), - cssTransform3d: transform3dTest(), - boxShadow: !!propExists( "boxShadow" ) && !bb, - fixedPosition: fixedPosition(), - scrollTop: ("pageXOffset" in window || - "scrollTop" in document.documentElement || - "scrollTop" in fakeBody[ 0 ]) && !webos && !operamini, - - dynamicBaseTag: baseTagTest(), - cssPointerEvents: cssPointerEventsTest(), - boundingRect: boundingRect(), - inlineSVG: inlineSVG -}); - -fakeBody.remove(); - -// $.mobile.ajaxBlacklist is used to override ajaxEnabled on platforms that have known conflicts with hash history updates (BB5, Symbian) -// or that generally work better browsing in regular http for full page refreshes (Opera Mini) -// Note: This detection below is used as a last resort. -// We recommend only using these detection methods when all other more reliable/forward-looking approaches are not possible -nokiaLTE7_3 = (function() { - - var ua = window.navigator.userAgent; - - //The following is an attempt to match Nokia browsers that are running Symbian/s60, with webkit, version 7.3 or older - return ua.indexOf( "Nokia" ) > -1 && - ( ua.indexOf( "Symbian/3" ) > -1 || ua.indexOf( "Series60/5" ) > -1 ) && - ua.indexOf( "AppleWebKit" ) > -1 && - ua.match( /(BrowserNG|NokiaBrowser)\/7\.[0-3]/ ); -})(); - -// Support conditions that must be met in order to proceed -// default enhanced qualifications are media query support OR IE 7+ - -$.mobile.gradeA = function() { - return ( ( $.support.mediaquery && $.support.cssPseudoElement ) || $.mobile.browser.oldIE && $.mobile.browser.oldIE >= 8 ) && ( $.support.boundingRect || $.fn.jquery.match(/1\.[0-7+]\.[0-9+]?/) !== null ); -}; - -$.mobile.ajaxBlacklist = - // BlackBerry browsers, pre-webkit - window.blackberry && !window.WebKitPoint || - // Opera Mini - operamini || - // Symbian webkits pre 7.3 - nokiaLTE7_3; - -// Lastly, this workaround is the only way we've found so far to get pre 7.3 Symbian webkit devices -// to render the stylesheets when they're referenced before this script, as we'd recommend doing. -// This simply reappends the CSS in place, which for some reason makes it apply -if ( nokiaLTE7_3 ) { - $(function() { - $( "head link[rel='stylesheet']" ).attr( "rel", "alternate stylesheet" ).attr( "rel", "stylesheet" ); - }); -} - -// For ruling out shadows via css -if ( !$.support.boxShadow ) { - $( "html" ).addClass( "ui-noboxshadow" ); -} - -})( jQuery ); - - -(function( $, undefined ) { - var $win = $.mobile.window, self, - dummyFnToInitNavigate = function() { - }; - - $.event.special.beforenavigate = { - setup: function() { - $win.on( "navigate", dummyFnToInitNavigate ); - }, - - teardown: function() { - $win.off( "navigate", dummyFnToInitNavigate ); - } - }; - - $.event.special.navigate = self = { - bound: false, - - pushStateEnabled: true, - - originalEventName: undefined, - - // If pushstate support is present and push state support is defined to - // be true on the mobile namespace. - isPushStateEnabled: function() { - return $.support.pushState && - $.mobile.pushStateEnabled === true && - this.isHashChangeEnabled(); - }, - - // !! assumes mobile namespace is present - isHashChangeEnabled: function() { - return $.mobile.hashListeningEnabled === true; - }, - - // TODO a lot of duplication between popstate and hashchange - popstate: function( event ) { - var newEvent = new $.Event( "navigate" ), - beforeNavigate = new $.Event( "beforenavigate" ), - state = event.originalEvent.state || {}; - - beforeNavigate.originalEvent = event; - $win.trigger( beforeNavigate ); - - if ( beforeNavigate.isDefaultPrevented() ) { - return; - } - - if ( event.historyState ) { - $.extend(state, event.historyState); - } - - // Make sure the original event is tracked for the end - // user to inspect incase they want to do something special - newEvent.originalEvent = event; - - // NOTE we let the current stack unwind because any assignment to - // location.hash will stop the world and run this event handler. By - // doing this we create a similar behavior to hashchange on hash - // assignment - setTimeout(function() { - $win.trigger( newEvent, { - state: state - }); - }, 0); - }, - - hashchange: function( event /*, data */ ) { - var newEvent = new $.Event( "navigate" ), - beforeNavigate = new $.Event( "beforenavigate" ); - - beforeNavigate.originalEvent = event; - $win.trigger( beforeNavigate ); - - if ( beforeNavigate.isDefaultPrevented() ) { - return; - } - - // Make sure the original event is tracked for the end - // user to inspect incase they want to do something special - newEvent.originalEvent = event; - - // Trigger the hashchange with state provided by the user - // that altered the hash - $win.trigger( newEvent, { - // Users that want to fully normalize the two events - // will need to do history management down the stack and - // add the state to the event before this binding is fired - // TODO consider allowing for the explicit addition of callbacks - // to be fired before this value is set to avoid event timing issues - state: event.hashchangeState || {} - }); - }, - - // TODO We really only want to set this up once - // but I'm not clear if there's a beter way to achieve - // this with the jQuery special event structure - setup: function( /* data, namespaces */ ) { - if ( self.bound ) { - return; - } - - self.bound = true; - - if ( self.isPushStateEnabled() ) { - self.originalEventName = "popstate"; - $win.bind( "popstate.navigate", self.popstate ); - } else if ( self.isHashChangeEnabled() ) { - self.originalEventName = "hashchange"; - $win.bind( "hashchange.navigate", self.hashchange ); - } - } - }; -})( jQuery ); - - - -(function( $, undefined ) { - var path, $base, dialogHashKey = "&ui-state=dialog"; - - $.mobile.path = path = { - uiStateKey: "&ui-state", - - // This scary looking regular expression parses an absolute URL or its relative - // variants (protocol, site, document, query, and hash), into the various - // components (protocol, host, path, query, fragment, etc that make up the - // URL as well as some other commonly used sub-parts. When used with RegExp.exec() - // or String.match, it parses the URL into a results array that looks like this: - // - // [0]: http://jblas:password@mycompany.com:8080/mail/inbox?msg=1234&type=unread#msg-content - // [1]: http://jblas:password@mycompany.com:8080/mail/inbox?msg=1234&type=unread - // [2]: http://jblas:password@mycompany.com:8080/mail/inbox - // [3]: http://jblas:password@mycompany.com:8080 - // [4]: http: - // [5]: // - // [6]: jblas:password@mycompany.com:8080 - // [7]: jblas:password - // [8]: jblas - // [9]: password - // [10]: mycompany.com:8080 - // [11]: mycompany.com - // [12]: 8080 - // [13]: /mail/inbox - // [14]: /mail/ - // [15]: inbox - // [16]: ?msg=1234&type=unread - // [17]: #msg-content - // - urlParseRE: /^\s*(((([^:\/#\?]+:)?(?:(\/\/)((?:(([^:@\/#\?]+)(?:\:([^:@\/#\?]+))?)@)?(([^:\/#\?\]\[]+|\[[^\/\]@#?]+\])(?:\:([0-9]+))?))?)?)?((\/?(?:[^\/\?#]+\/+)*)([^\?#]*)))?(\?[^#]+)?)(#.*)?/, - - // Abstraction to address xss (Issue #4787) by removing the authority in - // browsers that auto-decode it. All references to location.href should be - // replaced with a call to this method so that it can be dealt with properly here - getLocation: function( url ) { - var parsedUrl = this.parseUrl( url || location.href ), - uri = url ? parsedUrl : location, - - // Make sure to parse the url or the location object for the hash because using - // location.hash is autodecoded in firefox, the rest of the url should be from - // the object (location unless we're testing) to avoid the inclusion of the - // authority - hash = parsedUrl.hash; - - // mimic the browser with an empty string when the hash is empty - hash = hash === "#" ? "" : hash; - - return uri.protocol + - parsedUrl.doubleSlash + - uri.host + - - // The pathname must start with a slash if there's a protocol, because you - // can't have a protocol followed by a relative path. Also, it's impossible to - // calculate absolute URLs from relative ones if the absolute one doesn't have - // a leading "/". - ( ( uri.protocol !== "" && uri.pathname.substring( 0, 1 ) !== "/" ) ? - "/" : "" ) + - uri.pathname + - uri.search + - hash; - }, - - //return the original document url - getDocumentUrl: function( asParsedObject ) { - return asParsedObject ? $.extend( {}, path.documentUrl ) : path.documentUrl.href; - }, - - parseLocation: function() { - return this.parseUrl( this.getLocation() ); - }, - - //Parse a URL into a structure that allows easy access to - //all of the URL components by name. - parseUrl: function( url ) { - // If we're passed an object, we'll assume that it is - // a parsed url object and just return it back to the caller. - if ( $.type( url ) === "object" ) { - return url; - } - - var matches = path.urlParseRE.exec( url || "" ) || []; - - // Create an object that allows the caller to access the sub-matches - // by name. Note that IE returns an empty string instead of undefined, - // like all other browsers do, so we normalize everything so its consistent - // no matter what browser we're running on. - return { - href: matches[ 0 ] || "", - hrefNoHash: matches[ 1 ] || "", - hrefNoSearch: matches[ 2 ] || "", - domain: matches[ 3 ] || "", - protocol: matches[ 4 ] || "", - doubleSlash: matches[ 5 ] || "", - authority: matches[ 6 ] || "", - username: matches[ 8 ] || "", - password: matches[ 9 ] || "", - host: matches[ 10 ] || "", - hostname: matches[ 11 ] || "", - port: matches[ 12 ] || "", - pathname: matches[ 13 ] || "", - directory: matches[ 14 ] || "", - filename: matches[ 15 ] || "", - search: matches[ 16 ] || "", - hash: matches[ 17 ] || "" - }; - }, - - //Turn relPath into an asbolute path. absPath is - //an optional absolute path which describes what - //relPath is relative to. - makePathAbsolute: function( relPath, absPath ) { - var absStack, - relStack, - i, d; - - if ( relPath && relPath.charAt( 0 ) === "/" ) { - return relPath; - } - - relPath = relPath || ""; - absPath = absPath ? absPath.replace( /^\/|(\/[^\/]*|[^\/]+)$/g, "" ) : ""; - - absStack = absPath ? absPath.split( "/" ) : []; - relStack = relPath.split( "/" ); - - for ( i = 0; i < relStack.length; i++ ) { - d = relStack[ i ]; - switch ( d ) { - case ".": - break; - case "..": - if ( absStack.length ) { - absStack.pop(); - } - break; - default: - absStack.push( d ); - break; - } - } - return "/" + absStack.join( "/" ); - }, - - //Returns true if both urls have the same domain. - isSameDomain: function( absUrl1, absUrl2 ) { - return path.parseUrl( absUrl1 ).domain.toLowerCase() === - path.parseUrl( absUrl2 ).domain.toLowerCase(); - }, - - //Returns true for any relative variant. - isRelativeUrl: function( url ) { - // All relative Url variants have one thing in common, no protocol. - return path.parseUrl( url ).protocol === ""; - }, - - //Returns true for an absolute url. - isAbsoluteUrl: function( url ) { - return path.parseUrl( url ).protocol !== ""; - }, - - //Turn the specified realtive URL into an absolute one. This function - //can handle all relative variants (protocol, site, document, query, fragment). - makeUrlAbsolute: function( relUrl, absUrl ) { - if ( !path.isRelativeUrl( relUrl ) ) { - return relUrl; - } - - if ( absUrl === undefined ) { - absUrl = this.documentBase; - } - - var relObj = path.parseUrl( relUrl ), - absObj = path.parseUrl( absUrl ), - protocol = relObj.protocol || absObj.protocol, - doubleSlash = relObj.protocol ? relObj.doubleSlash : ( relObj.doubleSlash || absObj.doubleSlash ), - authority = relObj.authority || absObj.authority, - hasPath = relObj.pathname !== "", - pathname = path.makePathAbsolute( relObj.pathname || absObj.filename, absObj.pathname ), - search = relObj.search || ( !hasPath && absObj.search ) || "", - hash = relObj.hash; - - return protocol + doubleSlash + authority + pathname + search + hash; - }, - - //Add search (aka query) params to the specified url. - addSearchParams: function( url, params ) { - var u = path.parseUrl( url ), - p = ( typeof params === "object" ) ? $.param( params ) : params, - s = u.search || "?"; - return u.hrefNoSearch + s + ( s.charAt( s.length - 1 ) !== "?" ? "&" : "" ) + p + ( u.hash || "" ); - }, - - convertUrlToDataUrl: function( absUrl ) { - var u = path.parseUrl( absUrl ); - if ( path.isEmbeddedPage( u ) ) { - // For embedded pages, remove the dialog hash key as in getFilePath(), - // and remove otherwise the Data Url won't match the id of the embedded Page. - return u.hash - .split( dialogHashKey )[0] - .replace( /^#/, "" ) - .replace( /\?.*$/, "" ); - } else if ( path.isSameDomain( u, this.documentBase ) ) { - return u.hrefNoHash.replace( this.documentBase.domain, "" ).split( dialogHashKey )[0]; - } - - return window.decodeURIComponent(absUrl); - }, - - //get path from current hash, or from a file path - get: function( newPath ) { - if ( newPath === undefined ) { - newPath = path.parseLocation().hash; - } - return path.stripHash( newPath ).replace( /[^\/]*\.[^\/*]+$/, "" ); - }, - - //set location hash to path - set: function( path ) { - location.hash = path; - }, - - //test if a given url (string) is a path - //NOTE might be exceptionally naive - isPath: function( url ) { - return ( /\// ).test( url ); - }, - - //return a url path with the window's location protocol/hostname/pathname removed - clean: function( url ) { - return url.replace( this.documentBase.domain, "" ); - }, - - //just return the url without an initial # - stripHash: function( url ) { - return url.replace( /^#/, "" ); - }, - - stripQueryParams: function( url ) { - return url.replace( /\?.*$/, "" ); - }, - - //remove the preceding hash, any query params, and dialog notations - cleanHash: function( hash ) { - return path.stripHash( hash.replace( /\?.*$/, "" ).replace( dialogHashKey, "" ) ); - }, - - isHashValid: function( hash ) { - return ( /^#[^#]+$/ ).test( hash ); - }, - - //check whether a url is referencing the same domain, or an external domain or different protocol - //could be mailto, etc - isExternal: function( url ) { - var u = path.parseUrl( url ); - - return !!( u.protocol && - ( u.domain.toLowerCase() !== this.documentUrl.domain.toLowerCase() ) ); - }, - - hasProtocol: function( url ) { - return ( /^(:?\w+:)/ ).test( url ); - }, - - isEmbeddedPage: function( url ) { - var u = path.parseUrl( url ); - - //if the path is absolute, then we need to compare the url against - //both the this.documentUrl and the documentBase. The main reason for this - //is that links embedded within external documents will refer to the - //application document, whereas links embedded within the application - //document will be resolved against the document base. - if ( u.protocol !== "" ) { - return ( !this.isPath(u.hash) && u.hash && ( u.hrefNoHash === this.documentUrl.hrefNoHash || ( this.documentBaseDiffers && u.hrefNoHash === this.documentBase.hrefNoHash ) ) ); - } - return ( /^#/ ).test( u.href ); - }, - - squash: function( url, resolutionUrl ) { - var href, cleanedUrl, search, stateIndex, docUrl, - isPath = this.isPath( url ), - uri = this.parseUrl( url ), - preservedHash = uri.hash, - uiState = ""; - - // produce a url against which we can resolve the provided path - if ( !resolutionUrl ) { - if ( isPath ) { - resolutionUrl = path.getLocation(); - } else { - docUrl = path.getDocumentUrl( true ); - if ( path.isPath( docUrl.hash ) ) { - resolutionUrl = path.squash( docUrl.href ); - } else { - resolutionUrl = docUrl.href; - } - } - } - - // If the url is anything but a simple string, remove any preceding hash - // eg #foo/bar -> foo/bar - // #foo -> #foo - cleanedUrl = isPath ? path.stripHash( url ) : url; - - // If the url is a full url with a hash check if the parsed hash is a path - // if it is, strip the #, and use it otherwise continue without change - cleanedUrl = path.isPath( uri.hash ) ? path.stripHash( uri.hash ) : cleanedUrl; - - // Split the UI State keys off the href - stateIndex = cleanedUrl.indexOf( this.uiStateKey ); - - // store the ui state keys for use - if ( stateIndex > -1 ) { - uiState = cleanedUrl.slice( stateIndex ); - cleanedUrl = cleanedUrl.slice( 0, stateIndex ); - } - - // make the cleanedUrl absolute relative to the resolution url - href = path.makeUrlAbsolute( cleanedUrl, resolutionUrl ); - - // grab the search from the resolved url since parsing from - // the passed url may not yield the correct result - search = this.parseUrl( href ).search; - - // TODO all this crap is terrible, clean it up - if ( isPath ) { - // reject the hash if it's a path or it's just a dialog key - if ( path.isPath( preservedHash ) || preservedHash.replace("#", "").indexOf( this.uiStateKey ) === 0) { - preservedHash = ""; - } - - // Append the UI State keys where it exists and it's been removed - // from the url - if ( uiState && preservedHash.indexOf( this.uiStateKey ) === -1) { - preservedHash += uiState; - } - - // make sure that pound is on the front of the hash - if ( preservedHash.indexOf( "#" ) === -1 && preservedHash !== "" ) { - preservedHash = "#" + preservedHash; - } - - // reconstruct each of the pieces with the new search string and hash - href = path.parseUrl( href ); - href = href.protocol + href.doubleSlash + href.host + href.pathname + search + - preservedHash; - } else { - href += href.indexOf( "#" ) > -1 ? uiState : "#" + uiState; - } - - return href; - }, - - isPreservableHash: function( hash ) { - return hash.replace( "#", "" ).indexOf( this.uiStateKey ) === 0; - }, - - // Escape weird characters in the hash if it is to be used as a selector - hashToSelector: function( hash ) { - var hasHash = ( hash.substring( 0, 1 ) === "#" ); - if ( hasHash ) { - hash = hash.substring( 1 ); - } - return ( hasHash ? "#" : "" ) + hash.replace( /([!"#$%&'()*+,./:;<=>?@[\]^`{|}~])/g, "\\$1" ); - }, - - // return the substring of a filepath before the sub-page key, for making - // a server request - getFilePath: function( path ) { - var splitkey = "&" + $.mobile.subPageUrlKey; - return path && path.split( splitkey )[0].split( dialogHashKey )[0]; - }, - - // check if the specified url refers to the first page in the main - // application document. - isFirstPageUrl: function( url ) { - // We only deal with absolute paths. - var u = path.parseUrl( path.makeUrlAbsolute( url, this.documentBase ) ), - - // Does the url have the same path as the document? - samePath = u.hrefNoHash === this.documentUrl.hrefNoHash || - ( this.documentBaseDiffers && - u.hrefNoHash === this.documentBase.hrefNoHash ), - - // Get the first page element. - fp = $.mobile.firstPage, - - // Get the id of the first page element if it has one. - fpId = fp && fp[0] ? fp[0].id : undefined; - - // The url refers to the first page if the path matches the document and - // it either has no hash value, or the hash is exactly equal to the id - // of the first page element. - return samePath && - ( !u.hash || - u.hash === "#" || - ( fpId && u.hash.replace( /^#/, "" ) === fpId ) ); - }, - - // Some embedded browsers, like the web view in Phone Gap, allow - // cross-domain XHR requests if the document doing the request was loaded - // via the file:// protocol. This is usually to allow the application to - // "phone home" and fetch app specific data. We normally let the browser - // handle external/cross-domain urls, but if the allowCrossDomainPages - // option is true, we will allow cross-domain http/https requests to go - // through our page loading logic. - isPermittedCrossDomainRequest: function( docUrl, reqUrl ) { - return $.mobile.allowCrossDomainPages && - (docUrl.protocol === "file:" || docUrl.protocol === "content:") && - reqUrl.search( /^https?:/ ) !== -1; - } - }; - - path.documentUrl = path.parseLocation(); - - $base = $( "head" ).find( "base" ); - - path.documentBase = $base.length ? - path.parseUrl( path.makeUrlAbsolute( $base.attr( "href" ), path.documentUrl.href ) ) : - path.documentUrl; - - path.documentBaseDiffers = (path.documentUrl.hrefNoHash !== path.documentBase.hrefNoHash); - - //return the original document base url - path.getDocumentBase = function( asParsedObject ) { - return asParsedObject ? $.extend( {}, path.documentBase ) : path.documentBase.href; - }; - - // DEPRECATED as of 1.4.0 - remove in 1.5.0 - $.extend( $.mobile, { - - //return the original document url - getDocumentUrl: path.getDocumentUrl, - - //return the original document base url - getDocumentBase: path.getDocumentBase - }); -})( jQuery ); - - - -(function( $, undefined ) { - $.mobile.History = function( stack, index ) { - this.stack = stack || []; - this.activeIndex = index || 0; - }; - - $.extend($.mobile.History.prototype, { - getActive: function() { - return this.stack[ this.activeIndex ]; - }, - - getLast: function() { - return this.stack[ this.previousIndex ]; - }, - - getNext: function() { - return this.stack[ this.activeIndex + 1 ]; - }, - - getPrev: function() { - return this.stack[ this.activeIndex - 1 ]; - }, - - // addNew is used whenever a new page is added - add: function( url, data ) { - data = data || {}; - - //if there's forward history, wipe it - if ( this.getNext() ) { - this.clearForward(); - } - - // if the hash is included in the data make sure the shape - // is consistent for comparison - if ( data.hash && data.hash.indexOf( "#" ) === -1) { - data.hash = "#" + data.hash; - } - - data.url = url; - this.stack.push( data ); - this.activeIndex = this.stack.length - 1; - }, - - //wipe urls ahead of active index - clearForward: function() { - this.stack = this.stack.slice( 0, this.activeIndex + 1 ); - }, - - find: function( url, stack, earlyReturn ) { - stack = stack || this.stack; - - var entry, i, length = stack.length, index; - - for ( i = 0; i < length; i++ ) { - entry = stack[i]; - - if ( decodeURIComponent(url) === decodeURIComponent(entry.url) || - decodeURIComponent(url) === decodeURIComponent(entry.hash) ) { - index = i; - - if ( earlyReturn ) { - return index; - } - } - } - - return index; - }, - - _findById: function( id ) { - var stackIndex, - stackLength = this.stack.length; - - for ( stackIndex = 0 ; stackIndex < stackLength ; stackIndex++ ) { - if ( this.stack[ stackIndex ].id === id ) { - break; - } - } - - return ( stackIndex < stackLength ? stackIndex : undefined ); - }, - - closest: function( url, id ) { - var closest = ( id === undefined ? undefined : this._findById( id ) ), - a = this.activeIndex; - - // First, we check whether we've found an entry by id. If so, we're done. - if ( closest !== undefined ) { - return closest; - } - - // Failing that take the slice of the history stack before the current index and search - // for a url match. If one is found, we'll avoid avoid looking through forward history - // NOTE the preference for backward history movement is driven by the fact that - // most mobile browsers only have a dedicated back button, and users rarely use - // the forward button in desktop browser anyhow - closest = this.find( url, this.stack.slice(0, a) ); - - // If nothing was found in backward history check forward. The `true` - // value passed as the third parameter causes the find method to break - // on the first match in the forward history slice. The starting index - // of the slice must then be added to the result to get the element index - // in the original history stack :( :( - // - // TODO this is hyper confusing and should be cleaned up (ugh so bad) - if ( closest === undefined ) { - closest = this.find( url, this.stack.slice(a), true ); - closest = closest === undefined ? closest : closest + a; - } - - return closest; - }, - - direct: function( opts ) { - var newActiveIndex = this.closest( opts.url, opts.id ), a = this.activeIndex; - - // save new page index, null check to prevent falsey 0 result - // record the previous index for reference - if ( newActiveIndex !== undefined ) { - this.activeIndex = newActiveIndex; - this.previousIndex = a; - } - - // invoke callbacks where appropriate - // - // TODO this is also convoluted and confusing - if ( newActiveIndex < a ) { - ( opts.present || opts.back || $.noop )( this.getActive(), "back" ); - } else if ( newActiveIndex > a ) { - ( opts.present || opts.forward || $.noop )( this.getActive(), "forward" ); - } else if ( newActiveIndex === undefined && opts.missing ) { - opts.missing( this.getActive() ); - } - } - }); -})( jQuery ); - - - -(function( $, undefined ) { - var path = $.mobile.path, - initialHref = location.href; - - $.mobile.Navigator = function( history ) { - this.history = history; - this.ignoreInitialHashChange = true; - - $.mobile.window.bind({ - "popstate.history": $.proxy( this.popstate, this ), - "hashchange.history": $.proxy( this.hashchange, this ) - }); - }; - - $.extend($.mobile.Navigator.prototype, { - historyEntryId: 0, - squash: function( url, data ) { - var state, href, hash = path.isPath(url) ? path.stripHash(url) : url; - - href = path.squash( url ); - - // make sure to provide this information when it isn't explicitly set in the - // data object that was passed to the squash method - state = $.extend({ - id: ++this.historyEntryId, - hash: hash, - url: href - }, data); - - // replace the current url with the new href and store the state - // Note that in some cases we might be replacing an url with the - // same url. We do this anyways because we need to make sure that - // all of our history entries have a state object associated with - // them. This allows us to work around the case where $.mobile.back() - // is called to transition from an external page to an embedded page. - // In that particular case, a hashchange event is *NOT* generated by the browser. - // Ensuring each history entry has a state object means that onPopState() - // will always trigger our hashchange callback even when a hashchange event - // is not fired. - window.history.replaceState( state, state.title || document.title, href ); - - return state; - }, - - hash: function( url, href ) { - var parsed, loc, hash, resolved; - - // Grab the hash for recording. If the passed url is a path - // we used the parsed version of the squashed url to reconstruct, - // otherwise we assume it's a hash and store it directly - parsed = path.parseUrl( url ); - loc = path.parseLocation(); - - if ( loc.pathname + loc.search === parsed.pathname + parsed.search ) { - // If the pathname and search of the passed url is identical to the current loc - // then we must use the hash. Otherwise there will be no event - // eg, url = "/foo/bar?baz#bang", location.href = "http://example.com/foo/bar?baz" - hash = parsed.hash ? parsed.hash : parsed.pathname + parsed.search; - } else if ( path.isPath(url) ) { - resolved = path.parseUrl( href ); - // If the passed url is a path, make it domain relative and remove any trailing hash - hash = resolved.pathname + resolved.search + (path.isPreservableHash( resolved.hash )? resolved.hash.replace( "#", "" ) : ""); - } else { - hash = url; - } - - return hash; - }, - - // TODO reconsider name - go: function( url, data, noEvents ) { - var state, href, hash, popstateEvent, - isPopStateEvent = $.event.special.navigate.isPushStateEnabled(); - - // Get the url as it would look squashed on to the current resolution url - href = path.squash( url ); - - // sort out what the hash sould be from the url - hash = this.hash( url, href ); - - // Here we prevent the next hash change or popstate event from doing any - // history management. In the case of hashchange we don't swallow it - // if there will be no hashchange fired (since that won't reset the value) - // and will swallow the following hashchange - if ( noEvents && hash !== path.stripHash(path.parseLocation().hash) ) { - this.preventNextHashChange = noEvents; - } - - // IMPORTANT in the case where popstate is supported the event will be triggered - // directly, stopping further execution - ie, interupting the flow of this - // method call to fire bindings at this expression. Below the navigate method - // there is a binding to catch this event and stop its propagation. - // - // We then trigger a new popstate event on the window with a null state - // so that the navigate events can conclude their work properly - // - // if the url is a path we want to preserve the query params that are available on - // the current url. - this.preventHashAssignPopState = true; - window.location.hash = hash; - - // If popstate is enabled and the browser triggers `popstate` events when the hash - // is set (this often happens immediately in browsers like Chrome), then the - // this flag will be set to false already. If it's a browser that does not trigger - // a `popstate` on hash assignement or `replaceState` then we need avoid the branch - // that swallows the event created by the popstate generated by the hash assignment - // At the time of this writing this happens with Opera 12 and some version of IE - this.preventHashAssignPopState = false; - - state = $.extend({ - url: href, - hash: hash, - title: document.title - }, data); - - if ( isPopStateEvent ) { - popstateEvent = new $.Event( "popstate" ); - popstateEvent.originalEvent = { - type: "popstate", - state: null - }; - - state.id = ( this.squash( url, state ) || {} ).id; - - // Trigger a new faux popstate event to replace the one that we - // caught that was triggered by the hash setting above. - if ( !noEvents ) { - this.ignorePopState = true; - $.mobile.window.trigger( popstateEvent ); - } - } - - // record the history entry so that the information can be included - // in hashchange event driven navigate events in a similar fashion to - // the state that's provided by popstate - this.history.add( state.url, state ); - }, - - // This binding is intended to catch the popstate events that are fired - // when execution of the `$.navigate` method stops at window.location.hash = url; - // and completely prevent them from propagating. The popstate event will then be - // retriggered after execution resumes - // - // TODO grab the original event here and use it for the synthetic event in the - // second half of the navigate execution that will follow this binding - popstate: function( event ) { - var hash, state; - - // Partly to support our test suite which manually alters the support - // value to test hashchange. Partly to prevent all around weirdness - if ( !$.event.special.navigate.isPushStateEnabled() ) { - return; - } - - // If this is the popstate triggered by the actual alteration of the hash - // prevent it completely. History is tracked manually - if ( this.preventHashAssignPopState ) { - this.preventHashAssignPopState = false; - event.stopImmediatePropagation(); - return; - } - - // if this is the popstate triggered after the `replaceState` call in the go - // method, then simply ignore it. The history entry has already been captured - if ( this.ignorePopState ) { - this.ignorePopState = false; - return; - } - - // If there is no state, and the history stack length is one were - // probably getting the page load popstate fired by browsers like chrome - // avoid it and set the one time flag to false. - // TODO: Do we really need all these conditions? Comparing location hrefs - // should be sufficient. - if ( !event.originalEvent.state && - this.history.stack.length === 1 && - this.ignoreInitialHashChange ) { - this.ignoreInitialHashChange = false; - - if ( location.href === initialHref ) { - event.preventDefault(); - return; - } - } - - // account for direct manipulation of the hash. That is, we will receive a popstate - // when the hash is changed by assignment, and it won't have a state associated. We - // then need to squash the hash. See below for handling of hash assignment that - // matches an existing history entry - // TODO it might be better to only add to the history stack - // when the hash is adjacent to the active history entry - hash = path.parseLocation().hash; - if ( !event.originalEvent.state && hash ) { - // squash the hash that's been assigned on the URL with replaceState - // also grab the resulting state object for storage - state = this.squash( hash ); - - // record the new hash as an additional history entry - // to match the browser's treatment of hash assignment - this.history.add( state.url, state ); - - // pass the newly created state information - // along with the event - event.historyState = state; - - // do not alter history, we've added a new history entry - // so we know where we are - return; - } - - // If all else fails this is a popstate that comes from the back or forward buttons - // make sure to set the state of our history stack properly, and record the directionality - this.history.direct({ - id: ( event.originalEvent.state || {} ).id, - url: (event.originalEvent.state || {}).url || hash, - - // When the url is either forward or backward in history include the entry - // as data on the event object for merging as data in the navigate event - present: function( historyEntry, direction ) { - // make sure to create a new object to pass down as the navigate event data - event.historyState = $.extend({}, historyEntry); - event.historyState.direction = direction; - } - }); - }, - - // NOTE must bind before `navigate` special event hashchange binding otherwise the - // navigation data won't be attached to the hashchange event in time for those - // bindings to attach it to the `navigate` special event - // TODO add a check here that `hashchange.navigate` is bound already otherwise it's - // broken (exception?) - hashchange: function( event ) { - var history, hash; - - // If hashchange listening is explicitly disabled or pushstate is supported - // avoid making use of the hashchange handler. - if (!$.event.special.navigate.isHashChangeEnabled() || - $.event.special.navigate.isPushStateEnabled() ) { - return; - } - - // On occasion explicitly want to prevent the next hash from propogating because we only - // with to alter the url to represent the new state do so here - if ( this.preventNextHashChange ) { - this.preventNextHashChange = false; - event.stopImmediatePropagation(); - return; - } - - history = this.history; - hash = path.parseLocation().hash; - - // If this is a hashchange caused by the back or forward button - // make sure to set the state of our history stack properly - this.history.direct({ - url: hash, - - // When the url is either forward or backward in history include the entry - // as data on the event object for merging as data in the navigate event - present: function( historyEntry, direction ) { - // make sure to create a new object to pass down as the navigate event data - event.hashchangeState = $.extend({}, historyEntry); - event.hashchangeState.direction = direction; - }, - - // When we don't find a hash in our history clearly we're aiming to go there - // record the entry as new for future traversal - // - // NOTE it's not entirely clear that this is the right thing to do given that we - // can't know the users intention. It might be better to explicitly _not_ - // support location.hash assignment in preference to $.navigate calls - // TODO first arg to add should be the href, but it causes issues in identifying - // embeded pages - missing: function() { - history.add( hash, { - hash: hash, - title: document.title - }); - } - }); - } - }); -})( jQuery ); - - - -(function( $, undefined ) { - // TODO consider queueing navigation activity until previous activities have completed - // so that end users don't have to think about it. Punting for now - // TODO !! move the event bindings into callbacks on the navigate event - $.mobile.navigate = function( url, data, noEvents ) { - $.mobile.navigate.navigator.go( url, data, noEvents ); - }; - - // expose the history on the navigate method in anticipation of full integration with - // existing navigation functionalty that is tightly coupled to the history information - $.mobile.navigate.history = new $.mobile.History(); - - // instantiate an instance of the navigator for use within the $.navigate method - $.mobile.navigate.navigator = new $.mobile.Navigator( $.mobile.navigate.history ); - - var loc = $.mobile.path.parseLocation(); - $.mobile.navigate.history.add( loc.href, {hash: loc.hash} ); -})( jQuery ); - - -(function( $, undefined ) { - var props = { - "animation": {}, - "transition": {} - }, - testElement = document.createElement( "a" ), - vendorPrefixes = [ "", "webkit-", "moz-", "o-" ]; - - $.each( [ "animation", "transition" ], function( i, test ) { - - // Get correct name for test - var testName = ( i === 0 ) ? test + "-" + "name" : test; - - $.each( vendorPrefixes, function( j, prefix ) { - if ( testElement.style[ $.camelCase( prefix + testName ) ] !== undefined ) { - props[ test ][ "prefix" ] = prefix; - return false; - } - }); - - // Set event and duration names for later use - props[ test ][ "duration" ] = - $.camelCase( props[ test ][ "prefix" ] + test + "-" + "duration" ); - props[ test ][ "event" ] = - $.camelCase( props[ test ][ "prefix" ] + test + "-" + "end" ); - - // All lower case if not a vendor prop - if ( props[ test ][ "prefix" ] === "" ) { - props[ test ][ "event" ] = props[ test ][ "event" ].toLowerCase(); - } - }); - - // If a valid prefix was found then the it is supported by the browser - $.support.cssTransitions = ( props[ "transition" ][ "prefix" ] !== undefined ); - $.support.cssAnimations = ( props[ "animation" ][ "prefix" ] !== undefined ); - - // Remove the testElement - $( testElement ).remove(); - - // Animation complete callback - $.fn.animationComplete = function( callback, type, fallbackTime ) { - var timer, duration, - that = this, - eventBinding = function() { - - // Clear the timer so we don't call callback twice - clearTimeout( timer ); - callback.apply( this, arguments ); - }, - animationType = ( !type || type === "animation" ) ? "animation" : "transition"; - - // Make sure selected type is supported by browser - if ( ( $.support.cssTransitions && animationType === "transition" ) || - ( $.support.cssAnimations && animationType === "animation" ) ) { - - // If a fallback time was not passed set one - if ( fallbackTime === undefined ) { - - // Make sure the was not bound to document before checking .css - if ( $( this ).context !== document ) { - - // Parse the durration since its in second multiple by 1000 for milliseconds - // Multiply by 3 to make sure we give the animation plenty of time. - duration = parseFloat( - $( this ).css( props[ animationType ].duration ) - ) * 3000; - } - - // If we could not read a duration use the default - if ( duration === 0 || duration === undefined || isNaN( duration ) ) { - duration = $.fn.animationComplete.defaultDuration; - } - } - - // Sets up the fallback if event never comes - timer = setTimeout( function() { - $( that ).off( props[ animationType ].event, eventBinding ); - callback.apply( that ); - }, duration ); - - // Bind the event - return $( this ).one( props[ animationType ].event, eventBinding ); - } else { - - // CSS animation / transitions not supported - // Defer execution for consistency between webkit/non webkit - setTimeout( $.proxy( callback, this ), 0 ); - return $( this ); - } - }; - - // Allow default callback to be configured on mobileInit - $.fn.animationComplete.defaultDuration = 1000; -})( jQuery ); - -// This plugin is an experiment for abstracting away the touch and mouse -// events so that developers don't have to worry about which method of input -// the device their document is loaded on supports. -// -// The idea here is to allow the developer to register listeners for the -// basic mouse events, such as mousedown, mousemove, mouseup, and click, -// and the plugin will take care of registering the correct listeners -// behind the scenes to invoke the listener at the fastest possible time -// for that device, while still retaining the order of event firing in -// the traditional mouse environment, should multiple handlers be registered -// on the same element for different events. -// -// The current version exposes the following virtual events to jQuery bind methods: -// "vmouseover vmousedown vmousemove vmouseup vclick vmouseout vmousecancel" - -(function( $, window, document, undefined ) { - -var dataPropertyName = "virtualMouseBindings", - touchTargetPropertyName = "virtualTouchID", - virtualEventNames = "vmouseover vmousedown vmousemove vmouseup vclick vmouseout vmousecancel".split( " " ), - touchEventProps = "clientX clientY pageX pageY screenX screenY".split( " " ), - mouseHookProps = $.event.mouseHooks ? $.event.mouseHooks.props : [], - mouseEventProps = $.event.props.concat( mouseHookProps ), - activeDocHandlers = {}, - resetTimerID = 0, - startX = 0, - startY = 0, - didScroll = false, - clickBlockList = [], - blockMouseTriggers = false, - blockTouchTriggers = false, - eventCaptureSupported = "addEventListener" in document, - $document = $( document ), - nextTouchID = 1, - lastTouchID = 0, threshold, - i; - -$.vmouse = { - moveDistanceThreshold: 10, - clickDistanceThreshold: 10, - resetTimerDuration: 1500 -}; - -function getNativeEvent( event ) { - - while ( event && typeof event.originalEvent !== "undefined" ) { - event = event.originalEvent; - } - return event; -} - -function createVirtualEvent( event, eventType ) { - - var t = event.type, - oe, props, ne, prop, ct, touch, i, j, len; - - event = $.Event( event ); - event.type = eventType; - - oe = event.originalEvent; - props = $.event.props; - - // addresses separation of $.event.props in to $.event.mouseHook.props and Issue 3280 - // https://github.com/jquery/jquery-mobile/issues/3280 - if ( t.search( /^(mouse|click)/ ) > -1 ) { - props = mouseEventProps; - } - - // copy original event properties over to the new event - // this would happen if we could call $.event.fix instead of $.Event - // but we don't have a way to force an event to be fixed multiple times - if ( oe ) { - for ( i = props.length, prop; i; ) { - prop = props[ --i ]; - event[ prop ] = oe[ prop ]; - } - } - - // make sure that if the mouse and click virtual events are generated - // without a .which one is defined - if ( t.search(/mouse(down|up)|click/) > -1 && !event.which ) { - event.which = 1; - } - - if ( t.search(/^touch/) !== -1 ) { - ne = getNativeEvent( oe ); - t = ne.touches; - ct = ne.changedTouches; - touch = ( t && t.length ) ? t[0] : ( ( ct && ct.length ) ? ct[ 0 ] : undefined ); - - if ( touch ) { - for ( j = 0, len = touchEventProps.length; j < len; j++) { - prop = touchEventProps[ j ]; - event[ prop ] = touch[ prop ]; - } - } - } - - return event; -} - -function getVirtualBindingFlags( element ) { - - var flags = {}, - b, k; - - while ( element ) { - - b = $.data( element, dataPropertyName ); - - for ( k in b ) { - if ( b[ k ] ) { - flags[ k ] = flags.hasVirtualBinding = true; - } - } - element = element.parentNode; - } - return flags; -} - -function getClosestElementWithVirtualBinding( element, eventType ) { - var b; - while ( element ) { - - b = $.data( element, dataPropertyName ); - - if ( b && ( !eventType || b[ eventType ] ) ) { - return element; - } - element = element.parentNode; - } - return null; -} - -function enableTouchBindings() { - blockTouchTriggers = false; -} - -function disableTouchBindings() { - blockTouchTriggers = true; -} - -function enableMouseBindings() { - lastTouchID = 0; - clickBlockList.length = 0; - blockMouseTriggers = false; - - // When mouse bindings are enabled, our - // touch bindings are disabled. - disableTouchBindings(); -} - -function disableMouseBindings() { - // When mouse bindings are disabled, our - // touch bindings are enabled. - enableTouchBindings(); -} - -function startResetTimer() { - clearResetTimer(); - resetTimerID = setTimeout( function() { - resetTimerID = 0; - enableMouseBindings(); - }, $.vmouse.resetTimerDuration ); -} - -function clearResetTimer() { - if ( resetTimerID ) { - clearTimeout( resetTimerID ); - resetTimerID = 0; - } -} - -function triggerVirtualEvent( eventType, event, flags ) { - var ve; - - if ( ( flags && flags[ eventType ] ) || - ( !flags && getClosestElementWithVirtualBinding( event.target, eventType ) ) ) { - - ve = createVirtualEvent( event, eventType ); - - $( event.target).trigger( ve ); - } - - return ve; -} - -function mouseEventCallback( event ) { - var touchID = $.data( event.target, touchTargetPropertyName ), - ve; - - if ( !blockMouseTriggers && ( !lastTouchID || lastTouchID !== touchID ) ) { - ve = triggerVirtualEvent( "v" + event.type, event ); - if ( ve ) { - if ( ve.isDefaultPrevented() ) { - event.preventDefault(); - } - if ( ve.isPropagationStopped() ) { - event.stopPropagation(); - } - if ( ve.isImmediatePropagationStopped() ) { - event.stopImmediatePropagation(); - } - } - } -} - -function handleTouchStart( event ) { - - var touches = getNativeEvent( event ).touches, - target, flags, t; - - if ( touches && touches.length === 1 ) { - - target = event.target; - flags = getVirtualBindingFlags( target ); - - if ( flags.hasVirtualBinding ) { - - lastTouchID = nextTouchID++; - $.data( target, touchTargetPropertyName, lastTouchID ); - - clearResetTimer(); - - disableMouseBindings(); - didScroll = false; - - t = getNativeEvent( event ).touches[ 0 ]; - startX = t.pageX; - startY = t.pageY; - - triggerVirtualEvent( "vmouseover", event, flags ); - triggerVirtualEvent( "vmousedown", event, flags ); - } - } -} - -function handleScroll( event ) { - if ( blockTouchTriggers ) { - return; - } - - if ( !didScroll ) { - triggerVirtualEvent( "vmousecancel", event, getVirtualBindingFlags( event.target ) ); - } - - didScroll = true; - startResetTimer(); -} - -function handleTouchMove( event ) { - if ( blockTouchTriggers ) { - return; - } - - var t = getNativeEvent( event ).touches[ 0 ], - didCancel = didScroll, - moveThreshold = $.vmouse.moveDistanceThreshold, - flags = getVirtualBindingFlags( event.target ); - - didScroll = didScroll || - ( Math.abs( t.pageX - startX ) > moveThreshold || - Math.abs( t.pageY - startY ) > moveThreshold ); - - if ( didScroll && !didCancel ) { - triggerVirtualEvent( "vmousecancel", event, flags ); - } - - triggerVirtualEvent( "vmousemove", event, flags ); - startResetTimer(); -} - -function handleTouchEnd( event ) { - if ( blockTouchTriggers ) { - return; - } - - disableTouchBindings(); - - var flags = getVirtualBindingFlags( event.target ), - ve, t; - triggerVirtualEvent( "vmouseup", event, flags ); - - if ( !didScroll ) { - ve = triggerVirtualEvent( "vclick", event, flags ); - if ( ve && ve.isDefaultPrevented() ) { - // The target of the mouse events that follow the touchend - // event don't necessarily match the target used during the - // touch. This means we need to rely on coordinates for blocking - // any click that is generated. - t = getNativeEvent( event ).changedTouches[ 0 ]; - clickBlockList.push({ - touchID: lastTouchID, - x: t.clientX, - y: t.clientY - }); - - // Prevent any mouse events that follow from triggering - // virtual event notifications. - blockMouseTriggers = true; - } - } - triggerVirtualEvent( "vmouseout", event, flags); - didScroll = false; - - startResetTimer(); -} - -function hasVirtualBindings( ele ) { - var bindings = $.data( ele, dataPropertyName ), - k; - - if ( bindings ) { - for ( k in bindings ) { - if ( bindings[ k ] ) { - return true; - } - } - } - return false; -} - -function dummyMouseHandler() {} - -function getSpecialEventObject( eventType ) { - var realType = eventType.substr( 1 ); - - return { - setup: function(/* data, namespace */) { - // If this is the first virtual mouse binding for this element, - // add a bindings object to its data. - - if ( !hasVirtualBindings( this ) ) { - $.data( this, dataPropertyName, {} ); - } - - // If setup is called, we know it is the first binding for this - // eventType, so initialize the count for the eventType to zero. - var bindings = $.data( this, dataPropertyName ); - bindings[ eventType ] = true; - - // If this is the first virtual mouse event for this type, - // register a global handler on the document. - - activeDocHandlers[ eventType ] = ( activeDocHandlers[ eventType ] || 0 ) + 1; - - if ( activeDocHandlers[ eventType ] === 1 ) { - $document.bind( realType, mouseEventCallback ); - } - - // Some browsers, like Opera Mini, won't dispatch mouse/click events - // for elements unless they actually have handlers registered on them. - // To get around this, we register dummy handlers on the elements. - - $( this ).bind( realType, dummyMouseHandler ); - - // For now, if event capture is not supported, we rely on mouse handlers. - if ( eventCaptureSupported ) { - // If this is the first virtual mouse binding for the document, - // register our touchstart handler on the document. - - activeDocHandlers[ "touchstart" ] = ( activeDocHandlers[ "touchstart" ] || 0) + 1; - - if ( activeDocHandlers[ "touchstart" ] === 1 ) { - $document.bind( "touchstart", handleTouchStart ) - .bind( "touchend", handleTouchEnd ) - - // On touch platforms, touching the screen and then dragging your finger - // causes the window content to scroll after some distance threshold is - // exceeded. On these platforms, a scroll prevents a click event from being - // dispatched, and on some platforms, even the touchend is suppressed. To - // mimic the suppression of the click event, we need to watch for a scroll - // event. Unfortunately, some platforms like iOS don't dispatch scroll - // events until *AFTER* the user lifts their finger (touchend). This means - // we need to watch both scroll and touchmove events to figure out whether - // or not a scroll happenens before the touchend event is fired. - - .bind( "touchmove", handleTouchMove ) - .bind( "scroll", handleScroll ); - } - } - }, - - teardown: function(/* data, namespace */) { - // If this is the last virtual binding for this eventType, - // remove its global handler from the document. - - --activeDocHandlers[ eventType ]; - - if ( !activeDocHandlers[ eventType ] ) { - $document.unbind( realType, mouseEventCallback ); - } - - if ( eventCaptureSupported ) { - // If this is the last virtual mouse binding in existence, - // remove our document touchstart listener. - - --activeDocHandlers[ "touchstart" ]; - - if ( !activeDocHandlers[ "touchstart" ] ) { - $document.unbind( "touchstart", handleTouchStart ) - .unbind( "touchmove", handleTouchMove ) - .unbind( "touchend", handleTouchEnd ) - .unbind( "scroll", handleScroll ); - } - } - - var $this = $( this ), - bindings = $.data( this, dataPropertyName ); - - // teardown may be called when an element was - // removed from the DOM. If this is the case, - // jQuery core may have already stripped the element - // of any data bindings so we need to check it before - // using it. - if ( bindings ) { - bindings[ eventType ] = false; - } - - // Unregister the dummy event handler. - - $this.unbind( realType, dummyMouseHandler ); - - // If this is the last virtual mouse binding on the - // element, remove the binding data from the element. - - if ( !hasVirtualBindings( this ) ) { - $this.removeData( dataPropertyName ); - } - } - }; -} - -// Expose our custom events to the jQuery bind/unbind mechanism. - -for ( i = 0; i < virtualEventNames.length; i++ ) { - $.event.special[ virtualEventNames[ i ] ] = getSpecialEventObject( virtualEventNames[ i ] ); -} - -// Add a capture click handler to block clicks. -// Note that we require event capture support for this so if the device -// doesn't support it, we punt for now and rely solely on mouse events. -if ( eventCaptureSupported ) { - document.addEventListener( "click", function( e ) { - var cnt = clickBlockList.length, - target = e.target, - x, y, ele, i, o, touchID; - - if ( cnt ) { - x = e.clientX; - y = e.clientY; - threshold = $.vmouse.clickDistanceThreshold; - - // The idea here is to run through the clickBlockList to see if - // the current click event is in the proximity of one of our - // vclick events that had preventDefault() called on it. If we find - // one, then we block the click. - // - // Why do we have to rely on proximity? - // - // Because the target of the touch event that triggered the vclick - // can be different from the target of the click event synthesized - // by the browser. The target of a mouse/click event that is synthesized - // from a touch event seems to be implementation specific. For example, - // some browsers will fire mouse/click events for a link that is near - // a touch event, even though the target of the touchstart/touchend event - // says the user touched outside the link. Also, it seems that with most - // browsers, the target of the mouse/click event is not calculated until the - // time it is dispatched, so if you replace an element that you touched - // with another element, the target of the mouse/click will be the new - // element underneath that point. - // - // Aside from proximity, we also check to see if the target and any - // of its ancestors were the ones that blocked a click. This is necessary - // because of the strange mouse/click target calculation done in the - // Android 2.1 browser, where if you click on an element, and there is a - // mouse/click handler on one of its ancestors, the target will be the - // innermost child of the touched element, even if that child is no where - // near the point of touch. - - ele = target; - - while ( ele ) { - for ( i = 0; i < cnt; i++ ) { - o = clickBlockList[ i ]; - touchID = 0; - - if ( ( ele === target && Math.abs( o.x - x ) < threshold && Math.abs( o.y - y ) < threshold ) || - $.data( ele, touchTargetPropertyName ) === o.touchID ) { - // XXX: We may want to consider removing matches from the block list - // instead of waiting for the reset timer to fire. - e.preventDefault(); - e.stopPropagation(); - return; - } - } - ele = ele.parentNode; - } - } - }, true); -} -})( jQuery, window, document ); - - -(function( $, window, undefined ) { - var $document = $( document ), - supportTouch = $.mobile.support.touch, - scrollEvent = "touchmove scroll", - touchStartEvent = supportTouch ? "touchstart" : "mousedown", - touchStopEvent = supportTouch ? "touchend" : "mouseup", - touchMoveEvent = supportTouch ? "touchmove" : "mousemove"; - - // setup new event shortcuts - $.each( ( "touchstart touchmove touchend " + - "tap taphold " + - "swipe swipeleft swiperight " + - "scrollstart scrollstop" ).split( " " ), function( i, name ) { - - $.fn[ name ] = function( fn ) { - return fn ? this.bind( name, fn ) : this.trigger( name ); - }; - - // jQuery < 1.8 - if ( $.attrFn ) { - $.attrFn[ name ] = true; - } - }); - - function triggerCustomEvent( obj, eventType, event, bubble ) { - var originalType = event.type; - event.type = eventType; - if ( bubble ) { - $.event.trigger( event, undefined, obj ); - } else { - $.event.dispatch.call( obj, event ); - } - event.type = originalType; - } - - // also handles scrollstop - $.event.special.scrollstart = { - - enabled: true, - setup: function() { - - var thisObject = this, - $this = $( thisObject ), - scrolling, - timer; - - function trigger( event, state ) { - scrolling = state; - triggerCustomEvent( thisObject, scrolling ? "scrollstart" : "scrollstop", event ); - } - - // iPhone triggers scroll after a small delay; use touchmove instead - $this.bind( scrollEvent, function( event ) { - - if ( !$.event.special.scrollstart.enabled ) { - return; - } - - if ( !scrolling ) { - trigger( event, true ); - } - - clearTimeout( timer ); - timer = setTimeout( function() { - trigger( event, false ); - }, 50 ); - }); - }, - teardown: function() { - $( this ).unbind( scrollEvent ); - } - }; - - // also handles taphold - $.event.special.tap = { - tapholdThreshold: 750, - emitTapOnTaphold: true, - setup: function() { - var thisObject = this, - $this = $( thisObject ), - isTaphold = false; - - $this.bind( "vmousedown", function( event ) { - isTaphold = false; - if ( event.which && event.which !== 1 ) { - return false; - } - - var origTarget = event.target, - timer; - - function clearTapTimer() { - clearTimeout( timer ); - } - - function clearTapHandlers() { - clearTapTimer(); - - $this.unbind( "vclick", clickHandler ) - .unbind( "vmouseup", clearTapTimer ); - $document.unbind( "vmousecancel", clearTapHandlers ); - } - - function clickHandler( event ) { - clearTapHandlers(); - - // ONLY trigger a 'tap' event if the start target is - // the same as the stop target. - if ( !isTaphold && origTarget === event.target ) { - triggerCustomEvent( thisObject, "tap", event ); - } else if ( isTaphold ) { - event.preventDefault(); - } - } - - $this.bind( "vmouseup", clearTapTimer ) - .bind( "vclick", clickHandler ); - $document.bind( "vmousecancel", clearTapHandlers ); - - timer = setTimeout( function() { - if ( !$.event.special.tap.emitTapOnTaphold ) { - isTaphold = true; - } - triggerCustomEvent( thisObject, "taphold", $.Event( "taphold", { target: origTarget } ) ); - }, $.event.special.tap.tapholdThreshold ); - }); - }, - teardown: function() { - $( this ).unbind( "vmousedown" ).unbind( "vclick" ).unbind( "vmouseup" ); - $document.unbind( "vmousecancel" ); - } - }; - - // Also handles swipeleft, swiperight - $.event.special.swipe = { - - // More than this horizontal displacement, and we will suppress scrolling. - scrollSupressionThreshold: 30, - - // More time than this, and it isn't a swipe. - durationThreshold: 1000, - - // Swipe horizontal displacement must be more than this. - horizontalDistanceThreshold: 30, - - // Swipe vertical displacement must be less than this. - verticalDistanceThreshold: 30, - - getLocation: function ( event ) { - var winPageX = window.pageXOffset, - winPageY = window.pageYOffset, - x = event.clientX, - y = event.clientY; - - if ( event.pageY === 0 && Math.floor( y ) > Math.floor( event.pageY ) || - event.pageX === 0 && Math.floor( x ) > Math.floor( event.pageX ) ) { - - // iOS4 clientX/clientY have the value that should have been - // in pageX/pageY. While pageX/page/ have the value 0 - x = x - winPageX; - y = y - winPageY; - } else if ( y < ( event.pageY - winPageY) || x < ( event.pageX - winPageX ) ) { - - // Some Android browsers have totally bogus values for clientX/Y - // when scrolling/zooming a page. Detectable since clientX/clientY - // should never be smaller than pageX/pageY minus page scroll - x = event.pageX - winPageX; - y = event.pageY - winPageY; - } - - return { - x: x, - y: y - }; - }, - - start: function( event ) { - var data = event.originalEvent.touches ? - event.originalEvent.touches[ 0 ] : event, - location = $.event.special.swipe.getLocation( data ); - return { - time: ( new Date() ).getTime(), - coords: [ location.x, location.y ], - origin: $( event.target ) - }; - }, - - stop: function( event ) { - var data = event.originalEvent.touches ? - event.originalEvent.touches[ 0 ] : event, - location = $.event.special.swipe.getLocation( data ); - return { - time: ( new Date() ).getTime(), - coords: [ location.x, location.y ] - }; - }, - - handleSwipe: function( start, stop, thisObject, origTarget ) { - if ( stop.time - start.time < $.event.special.swipe.durationThreshold && - Math.abs( start.coords[ 0 ] - stop.coords[ 0 ] ) > $.event.special.swipe.horizontalDistanceThreshold && - Math.abs( start.coords[ 1 ] - stop.coords[ 1 ] ) < $.event.special.swipe.verticalDistanceThreshold ) { - var direction = start.coords[0] > stop.coords[ 0 ] ? "swipeleft" : "swiperight"; - - triggerCustomEvent( thisObject, "swipe", $.Event( "swipe", { target: origTarget, swipestart: start, swipestop: stop }), true ); - triggerCustomEvent( thisObject, direction,$.Event( direction, { target: origTarget, swipestart: start, swipestop: stop } ), true ); - return true; - } - return false; - - }, - - // This serves as a flag to ensure that at most one swipe event event is - // in work at any given time - eventInProgress: false, - - setup: function() { - var events, - thisObject = this, - $this = $( thisObject ), - context = {}; - - // Retrieve the events data for this element and add the swipe context - events = $.data( this, "mobile-events" ); - if ( !events ) { - events = { length: 0 }; - $.data( this, "mobile-events", events ); - } - events.length++; - events.swipe = context; - - context.start = function( event ) { - - // Bail if we're already working on a swipe event - if ( $.event.special.swipe.eventInProgress ) { - return; - } - $.event.special.swipe.eventInProgress = true; - - var stop, - start = $.event.special.swipe.start( event ), - origTarget = event.target, - emitted = false; - - context.move = function( event ) { - if ( !start || event.isDefaultPrevented() ) { - return; - } - - stop = $.event.special.swipe.stop( event ); - if ( !emitted ) { - emitted = $.event.special.swipe.handleSwipe( start, stop, thisObject, origTarget ); - if ( emitted ) { - - // Reset the context to make way for the next swipe event - $.event.special.swipe.eventInProgress = false; - } - } - // prevent scrolling - if ( Math.abs( start.coords[ 0 ] - stop.coords[ 0 ] ) > $.event.special.swipe.scrollSupressionThreshold ) { - event.preventDefault(); - } - }; - - context.stop = function() { - emitted = true; - - // Reset the context to make way for the next swipe event - $.event.special.swipe.eventInProgress = false; - $document.off( touchMoveEvent, context.move ); - context.move = null; - }; - - $document.on( touchMoveEvent, context.move ) - .one( touchStopEvent, context.stop ); - }; - $this.on( touchStartEvent, context.start ); - }, - - teardown: function() { - var events, context; - - events = $.data( this, "mobile-events" ); - if ( events ) { - context = events.swipe; - delete events.swipe; - events.length--; - if ( events.length === 0 ) { - $.removeData( this, "mobile-events" ); - } - } - - if ( context ) { - if ( context.start ) { - $( this ).off( touchStartEvent, context.start ); - } - if ( context.move ) { - $document.off( touchMoveEvent, context.move ); - } - if ( context.stop ) { - $document.off( touchStopEvent, context.stop ); - } - } - } - }; - $.each({ - scrollstop: "scrollstart", - taphold: "tap", - swipeleft: "swipe.left", - swiperight: "swipe.right" - }, function( event, sourceEvent ) { - - $.event.special[ event ] = { - setup: function() { - $( this ).bind( sourceEvent, $.noop ); - }, - teardown: function() { - $( this ).unbind( sourceEvent ); - } - }; - }); - -})( jQuery, this ); - - - // throttled resize event - (function( $ ) { - $.event.special.throttledresize = { - setup: function() { - $( this ).bind( "resize", handler ); - }, - teardown: function() { - $( this ).unbind( "resize", handler ); - } - }; - - var throttle = 250, - handler = function() { - curr = ( new Date() ).getTime(); - diff = curr - lastCall; - - if ( diff >= throttle ) { - - lastCall = curr; - $( this ).trigger( "throttledresize" ); - - } else { - - if ( heldCall ) { - clearTimeout( heldCall ); - } - - // Promise a held call will still execute - heldCall = setTimeout( handler, throttle - diff ); - } - }, - lastCall = 0, - heldCall, - curr, - diff; - })( jQuery ); - - -(function( $, window ) { - var win = $( window ), - event_name = "orientationchange", - get_orientation, - last_orientation, - initial_orientation_is_landscape, - initial_orientation_is_default, - portrait_map = { "0": true, "180": true }, - ww, wh, landscape_threshold; - - // It seems that some device/browser vendors use window.orientation values 0 and 180 to - // denote the "default" orientation. For iOS devices, and most other smart-phones tested, - // the default orientation is always "portrait", but in some Android and RIM based tablets, - // the default orientation is "landscape". The following code attempts to use the window - // dimensions to figure out what the current orientation is, and then makes adjustments - // to the to the portrait_map if necessary, so that we can properly decode the - // window.orientation value whenever get_orientation() is called. - // - // Note that we used to use a media query to figure out what the orientation the browser - // thinks it is in: - // - // initial_orientation_is_landscape = $.mobile.media("all and (orientation: landscape)"); - // - // but there was an iPhone/iPod Touch bug beginning with iOS 4.2, up through iOS 5.1, - // where the browser *ALWAYS* applied the landscape media query. This bug does not - // happen on iPad. - - if ( $.support.orientation ) { - - // Check the window width and height to figure out what the current orientation - // of the device is at this moment. Note that we've initialized the portrait map - // values to 0 and 180, *AND* we purposely check for landscape so that if we guess - // wrong, , we default to the assumption that portrait is the default orientation. - // We use a threshold check below because on some platforms like iOS, the iPhone - // form-factor can report a larger width than height if the user turns on the - // developer console. The actual threshold value is somewhat arbitrary, we just - // need to make sure it is large enough to exclude the developer console case. - - ww = window.innerWidth || win.width(); - wh = window.innerHeight || win.height(); - landscape_threshold = 50; - - initial_orientation_is_landscape = ww > wh && ( ww - wh ) > landscape_threshold; - - // Now check to see if the current window.orientation is 0 or 180. - initial_orientation_is_default = portrait_map[ window.orientation ]; - - // If the initial orientation is landscape, but window.orientation reports 0 or 180, *OR* - // if the initial orientation is portrait, but window.orientation reports 90 or -90, we - // need to flip our portrait_map values because landscape is the default orientation for - // this device/browser. - if ( ( initial_orientation_is_landscape && initial_orientation_is_default ) || ( !initial_orientation_is_landscape && !initial_orientation_is_default ) ) { - portrait_map = { "-90": true, "90": true }; - } - } - - $.event.special.orientationchange = $.extend( {}, $.event.special.orientationchange, { - setup: function() { - // If the event is supported natively, return false so that jQuery - // will bind to the event using DOM methods. - if ( $.support.orientation && !$.event.special.orientationchange.disabled ) { - return false; - } - - // Get the current orientation to avoid initial double-triggering. - last_orientation = get_orientation(); - - // Because the orientationchange event doesn't exist, simulate the - // event by testing window dimensions on resize. - win.bind( "throttledresize", handler ); - }, - teardown: function() { - // If the event is not supported natively, return false so that - // jQuery will unbind the event using DOM methods. - if ( $.support.orientation && !$.event.special.orientationchange.disabled ) { - return false; - } - - // Because the orientationchange event doesn't exist, unbind the - // resize event handler. - win.unbind( "throttledresize", handler ); - }, - add: function( handleObj ) { - // Save a reference to the bound event handler. - var old_handler = handleObj.handler; - - handleObj.handler = function( event ) { - // Modify event object, adding the .orientation property. - event.orientation = get_orientation(); - - // Call the originally-bound event handler and return its result. - return old_handler.apply( this, arguments ); - }; - } - }); - - // If the event is not supported natively, this handler will be bound to - // the window resize event to simulate the orientationchange event. - function handler() { - // Get the current orientation. - var orientation = get_orientation(); - - if ( orientation !== last_orientation ) { - // The orientation has changed, so trigger the orientationchange event. - last_orientation = orientation; - win.trigger( event_name ); - } - } - - // Get the current page orientation. This method is exposed publicly, should it - // be needed, as jQuery.event.special.orientationchange.orientation() - $.event.special.orientationchange.orientation = get_orientation = function() { - var isPortrait = true, elem = document.documentElement; - - // prefer window orientation to the calculation based on screensize as - // the actual screen resize takes place before or after the orientation change event - // has been fired depending on implementation (eg android 2.3 is before, iphone after). - // More testing is required to determine if a more reliable method of determining the new screensize - // is possible when orientationchange is fired. (eg, use media queries + element + opacity) - if ( $.support.orientation ) { - // if the window orientation registers as 0 or 180 degrees report - // portrait, otherwise landscape - isPortrait = portrait_map[ window.orientation ]; - } else { - isPortrait = elem && elem.clientWidth / elem.clientHeight < 1.1; - } - - return isPortrait ? "portrait" : "landscape"; - }; - - $.fn[ event_name ] = function( fn ) { - return fn ? this.bind( event_name, fn ) : this.trigger( event_name ); - }; - - // jQuery < 1.8 - if ( $.attrFn ) { - $.attrFn[ event_name ] = true; - } - -}( jQuery, this )); - - - - -(function( $, undefined ) { - - // existing base tag? - var baseElement = $( "head" ).children( "base" ), - - // base element management, defined depending on dynamic base tag support - // TODO move to external widget - base = { - - // define base element, for use in routing asset urls that are referenced - // in Ajax-requested markup - element: ( baseElement.length ? baseElement : - $( "<base>", { href: $.mobile.path.documentBase.hrefNoHash } ).prependTo( $( "head" ) ) ), - - linkSelector: "[src], link[href], a[rel='external'], :jqmData(ajax='false'), a[target]", - - // set the generated BASE element's href to a new page's base path - set: function( href ) { - - // we should do nothing if the user wants to manage their url base - // manually - if ( !$.mobile.dynamicBaseEnabled ) { - return; - } - - // we should use the base tag if we can manipulate it dynamically - if ( $.support.dynamicBaseTag ) { - base.element.attr( "href", - $.mobile.path.makeUrlAbsolute( href, $.mobile.path.documentBase ) ); - } - }, - - rewrite: function( href, page ) { - var newPath = $.mobile.path.get( href ); - - page.find( base.linkSelector ).each(function( i, link ) { - var thisAttr = $( link ).is( "[href]" ) ? "href" : - $( link ).is( "[src]" ) ? "src" : "action", - theLocation = $.mobile.path.parseLocation(), - thisUrl = $( link ).attr( thisAttr ); - - // XXX_jblas: We need to fix this so that it removes the document - // base URL, and then prepends with the new page URL. - // if full path exists and is same, chop it - helps IE out - thisUrl = thisUrl.replace( theLocation.protocol + theLocation.doubleSlash + - theLocation.host + theLocation.pathname, "" ); - - if ( !/^(\w+:|#|\/)/.test( thisUrl ) ) { - $( link ).attr( thisAttr, newPath + thisUrl ); - } - }); - }, - - // set the generated BASE element's href to a new page's base path - reset: function(/* href */) { - base.element.attr( "href", $.mobile.path.documentBase.hrefNoSearch ); - } - }; - - $.mobile.base = base; - -})( jQuery ); - - -(function( $, undefined ) { -$.mobile.widgets = {}; - -var originalWidget = $.widget, - - // Record the original, non-mobileinit-modified version of $.mobile.keepNative - // so we can later determine whether someone has modified $.mobile.keepNative - keepNativeFactoryDefault = $.mobile.keepNative; - -$.widget = (function( orig ) { - return function() { - var constructor = orig.apply( this, arguments ), - name = constructor.prototype.widgetName; - - constructor.initSelector = ( ( constructor.prototype.initSelector !== undefined ) ? - constructor.prototype.initSelector : ":jqmData(role='" + name + "')" ); - - $.mobile.widgets[ name ] = constructor; - - return constructor; - }; -})( $.widget ); - -// Make sure $.widget still has bridge and extend methods -$.extend( $.widget, originalWidget ); - -// For backcompat remove in 1.5 -$.mobile.document.on( "create", function( event ) { - $( event.target ).enhanceWithin(); -}); - -$.widget( "mobile.page", { - options: { - theme: "a", - domCache: false, - - // Deprecated in 1.4 remove in 1.5 - keepNativeDefault: $.mobile.keepNative, - - // Deprecated in 1.4 remove in 1.5 - contentTheme: null, - enhanced: false - }, - - // DEPRECATED for > 1.4 - // TODO remove at 1.5 - _createWidget: function() { - $.Widget.prototype._createWidget.apply( this, arguments ); - this._trigger( "init" ); - }, - - _create: function() { - // If false is returned by the callbacks do not create the page - if ( this._trigger( "beforecreate" ) === false ) { - return false; - } - - if ( !this.options.enhanced ) { - this._enhance(); - } - - this._on( this.element, { - pagebeforehide: "removeContainerBackground", - pagebeforeshow: "_handlePageBeforeShow" - }); - - this.element.enhanceWithin(); - // Dialog widget is deprecated in 1.4 remove this in 1.5 - if ( $.mobile.getAttribute( this.element[0], "role" ) === "dialog" && $.mobile.dialog ) { - this.element.dialog(); - } - }, - - _enhance: function () { - var attrPrefix = "data-" + $.mobile.ns, - self = this; - - if ( this.options.role ) { - this.element.attr( "data-" + $.mobile.ns + "role", this.options.role ); - } - - this.element - .attr( "tabindex", "0" ) - .addClass( "ui-page ui-page-theme-" + this.options.theme ); - - // Manipulation of content os Deprecated as of 1.4 remove in 1.5 - this.element.find( "[" + attrPrefix + "role='content']" ).each( function() { - var $this = $( this ), - theme = this.getAttribute( attrPrefix + "theme" ) || undefined; - self.options.contentTheme = theme || self.options.contentTheme || ( self.options.dialog && self.options.theme ) || ( self.element.jqmData("role") === "dialog" && self.options.theme ); - $this.addClass( "ui-content" ); - if ( self.options.contentTheme ) { - $this.addClass( "ui-body-" + ( self.options.contentTheme ) ); - } - // Add ARIA role - $this.attr( "role", "main" ).addClass( "ui-content" ); - }); - }, - - bindRemove: function( callback ) { - var page = this.element; - - // when dom caching is not enabled or the page is embedded bind to remove the page on hide - if ( !page.data( "mobile-page" ).options.domCache && - page.is( ":jqmData(external-page='true')" ) ) { - - // TODO use _on - that is, sort out why it doesn't work in this case - page.bind( "pagehide.remove", callback || function( e, data ) { - - //check if this is a same page transition and if so don't remove the page - if( !data.samePage ){ - var $this = $( this ), - prEvent = new $.Event( "pageremove" ); - - $this.trigger( prEvent ); - - if ( !prEvent.isDefaultPrevented() ) { - $this.removeWithDependents(); - } - } - }); - } - }, - - _setOptions: function( o ) { - if ( o.theme !== undefined ) { - this.element.removeClass( "ui-page-theme-" + this.options.theme ).addClass( "ui-page-theme-" + o.theme ); - } - - if ( o.contentTheme !== undefined ) { - this.element.find( "[data-" + $.mobile.ns + "='content']" ).removeClass( "ui-body-" + this.options.contentTheme ) - .addClass( "ui-body-" + o.contentTheme ); - } - }, - - _handlePageBeforeShow: function(/* e */) { - this.setContainerBackground(); - }, - // Deprecated in 1.4 remove in 1.5 - removeContainerBackground: function() { - this.element.closest( ":mobile-pagecontainer" ).pagecontainer({ "theme": "none" }); - }, - // Deprecated in 1.4 remove in 1.5 - // set the page container background to the page theme - setContainerBackground: function( theme ) { - this.element.parent().pagecontainer( { "theme": theme || this.options.theme } ); - }, - // Deprecated in 1.4 remove in 1.5 - keepNativeSelector: function() { - var options = this.options, - keepNative = $.trim( options.keepNative || "" ), - globalValue = $.trim( $.mobile.keepNative ), - optionValue = $.trim( options.keepNativeDefault ), - - // Check if $.mobile.keepNative has changed from the factory default - newDefault = ( keepNativeFactoryDefault === globalValue ? - "" : globalValue ), - - // If $.mobile.keepNative has not changed, use options.keepNativeDefault - oldDefault = ( newDefault === "" ? optionValue : "" ); - - // Concatenate keepNative selectors from all sources where the value has - // changed or, if nothing has changed, return the default - return ( ( keepNative ? [ keepNative ] : [] ) - .concat( newDefault ? [ newDefault ] : [] ) - .concat( oldDefault ? [ oldDefault ] : [] ) - .join( ", " ) ); - } -}); -})( jQuery ); - -(function( $, undefined ) { - - $.widget( "mobile.pagecontainer", { - options: { - theme: "a" - }, - - initSelector: false, - - _create: function() { - this._trigger( "beforecreate" ); - this.setLastScrollEnabled = true; - - this._on( this.window, { - // disable an scroll setting when a hashchange has been fired, - // this only works because the recording of the scroll position - // is delayed for 100ms after the browser might have changed the - // position because of the hashchange - navigate: "_disableRecordScroll", - - // bind to scrollstop for the first page, "pagechange" won't be - // fired in that case - scrollstop: "_delayedRecordScroll" - }); - - // TODO consider moving the navigation handler OUT of widget into - // some other object as glue between the navigate event and the - // content widget load and change methods - this._on( this.window, { navigate: "_filterNavigateEvents" }); - - // TODO move from page* events to content* events - this._on({ pagechange: "_afterContentChange" }); - - // handle initial hashchange from chrome :( - this.window.one( "navigate", $.proxy(function() { - this.setLastScrollEnabled = true; - }, this)); - }, - - _setOptions: function( options ) { - if ( options.theme !== undefined && options.theme !== "none" ) { - this.element.removeClass( "ui-overlay-" + this.options.theme ) - .addClass( "ui-overlay-" + options.theme ); - } else if ( options.theme !== undefined ) { - this.element.removeClass( "ui-overlay-" + this.options.theme ); - } - - this._super( options ); - }, - - _disableRecordScroll: function() { - this.setLastScrollEnabled = false; - }, - - _enableRecordScroll: function() { - this.setLastScrollEnabled = true; - }, - - // TODO consider the name here, since it's purpose specific - _afterContentChange: function() { - // once the page has changed, re-enable the scroll recording - this.setLastScrollEnabled = true; - - // remove any binding that previously existed on the get scroll - // which may or may not be different than the scroll element - // determined for this page previously - this._off( this.window, "scrollstop" ); - - // determine and bind to the current scoll element which may be the - // window or in the case of touch overflow the element touch overflow - this._on( this.window, { scrollstop: "_delayedRecordScroll" }); - }, - - _recordScroll: function() { - // this barrier prevents setting the scroll value based on - // the browser scrolling the window based on a hashchange - if ( !this.setLastScrollEnabled ) { - return; - } - - var active = this._getActiveHistory(), - currentScroll, minScroll, defaultScroll; - - if ( active ) { - currentScroll = this._getScroll(); - minScroll = this._getMinScroll(); - defaultScroll = this._getDefaultScroll(); - - // Set active page's lastScroll prop. If the location we're - // scrolling to is less than minScrollBack, let it go. - active.lastScroll = currentScroll < minScroll ? defaultScroll : currentScroll; - } - }, - - _delayedRecordScroll: function() { - setTimeout( $.proxy(this, "_recordScroll"), 100 ); - }, - - _getScroll: function() { - return this.window.scrollTop(); - }, - - _getMinScroll: function() { - return $.mobile.minScrollBack; - }, - - _getDefaultScroll: function() { - return $.mobile.defaultHomeScroll; - }, - - _filterNavigateEvents: function( e, data ) { - var url; - - if ( e.originalEvent && e.originalEvent.isDefaultPrevented() ) { - return; - } - - url = e.originalEvent.type.indexOf( "hashchange" ) > -1 ? data.state.hash : data.state.url; - - if ( !url ) { - url = this._getHash(); - } - - if ( !url || url === "#" || url.indexOf( "#" + $.mobile.path.uiStateKey ) === 0 ) { - url = location.href; - } - - this._handleNavigate( url, data.state ); - }, - - _getHash: function() { - return $.mobile.path.parseLocation().hash; - }, - - // TODO active page should be managed by the container (ie, it should be a property) - getActivePage: function() { - return this.activePage; - }, - - // TODO the first page should be a property set during _create using the logic - // that currently resides in init - _getInitialContent: function() { - return $.mobile.firstPage; - }, - - // TODO each content container should have a history object - _getHistory: function() { - return $.mobile.navigate.history; - }, - - _getActiveHistory: function() { - return this._getHistory().getActive(); - }, - - // TODO the document base should be determined at creation - _getDocumentBase: function() { - return $.mobile.path.documentBase; - }, - - back: function() { - this.go( -1 ); - }, - - forward: function() { - this.go( 1 ); - }, - - go: function( steps ) { - - //if hashlistening is enabled use native history method - if ( $.mobile.hashListeningEnabled ) { - window.history.go( steps ); - } else { - - //we are not listening to the hash so handle history internally - var activeIndex = $.mobile.navigate.history.activeIndex, - index = activeIndex + parseInt( steps, 10 ), - url = $.mobile.navigate.history.stack[ index ].url, - direction = ( steps >= 1 )? "forward" : "back"; - - //update the history object - $.mobile.navigate.history.activeIndex = index; - $.mobile.navigate.history.previousIndex = activeIndex; - - //change to the new page - this.change( url, { direction: direction, changeHash: false, fromHashChange: true } ); - } - }, - - // TODO rename _handleDestination - _handleDestination: function( to ) { - var history; - - // clean the hash for comparison if it's a url - if ( $.type(to) === "string" ) { - to = $.mobile.path.stripHash( to ); - } - - if ( to ) { - history = this._getHistory(); - - // At this point, 'to' can be one of 3 things, a cached page - // element from a history stack entry, an id, or site-relative / - // absolute URL. If 'to' is an id, we need to resolve it against - // the documentBase, not the location.href, since the hashchange - // could've been the result of a forward/backward navigation - // that crosses from an external page/dialog to an internal - // page/dialog. - // - // TODO move check to history object or path object? - to = !$.mobile.path.isPath( to ) ? ( $.mobile.path.makeUrlAbsolute( "#" + to, this._getDocumentBase() ) ) : to; - } - return to || this._getInitialContent(); - }, - - // The options by which a given page was reached are stored in the history entry for that - // page. When this function is called, history is already at the new entry. So, when moving - // back, this means we need to consult the old entry and reverse the meaning of the - // options. Otherwise, if we're moving forward, we need to consult the options for the - // current entry. - _optionFromHistory: function( direction, optionName, fallbackValue ) { - var history = this._getHistory(), - entry = ( direction === "back" ? history.getLast() : history.getActive() ); - - return ( ( entry && entry[ optionName ] ) || fallbackValue ); - }, - - _handleDialog: function( changePageOptions, data ) { - var to, active, activeContent = this.getActivePage(); - - // If current active page is not a dialog skip the dialog and continue - // in the same direction - // Note: The dialog widget is deprecated as of 1.4.0 and will be removed in 1.5.0. - // Thus, as of 1.5.0 activeContent.data( "mobile-dialog" ) will always evaluate to - // falsy, so the second condition in the if-statement below can be removed altogether. - if ( activeContent && !activeContent.data( "mobile-dialog" ) ) { - // determine if we're heading forward or backward and continue - // accordingly past the current dialog - if ( data.direction === "back" ) { - this.back(); - } else { - this.forward(); - } - - // prevent changePage call - return false; - } else { - // if the current active page is a dialog and we're navigating - // to a dialog use the dialog objected saved in the stack - to = data.pageUrl; - active = this._getActiveHistory(); - - // make sure to set the role, transition and reversal - // as most of this is lost by the domCache cleaning - $.extend( changePageOptions, { - role: active.role, - transition: this._optionFromHistory( data.direction, "transition", - changePageOptions.transition ), - reverse: data.direction === "back" - }); - } - - return to; - }, - - _handleNavigate: function( url, data ) { - //find first page via hash - // TODO stripping the hash twice with handleUrl - var to = $.mobile.path.stripHash( url ), history = this._getHistory(), - - // transition is false if it's the first page, undefined - // otherwise (and may be overridden by default) - transition = history.stack.length === 0 ? "none" : - this._optionFromHistory( data.direction, "transition" ), - - // default options for the changPage calls made after examining - // the current state of the page and the hash, NOTE that the - // transition is derived from the previous history entry - changePageOptions = { - changeHash: false, - fromHashChange: true, - reverse: data.direction === "back" - }; - - $.extend( changePageOptions, data, { - transition: transition, - allowSamePageTransition: this._optionFromHistory( data.direction, - "allowSamePageTransition" ) - }); - - // TODO move to _handleDestination ? - // If this isn't the first page, if the current url is a dialog hash - // key, and the initial destination isn't equal to the current target - // page, use the special dialog handling - if ( history.activeIndex > 0 && - to.indexOf( $.mobile.dialogHashKey ) > -1 ) { - - to = this._handleDialog( changePageOptions, data ); - - if ( to === false ) { - return; - } - } - - this._changeContent( this._handleDestination( to ), changePageOptions ); - }, - - _changeContent: function( to, opts ) { - $.mobile.changePage( to, opts ); - }, - - _getBase: function() { - return $.mobile.base; - }, - - _getNs: function() { - return $.mobile.ns; - }, - - _enhance: function( content, role ) { - // TODO consider supporting a custom callback, and passing in - // the settings which includes the role - return content.page({ role: role }); - }, - - _include: function( page, settings ) { - // append to page and enhance - page.appendTo( this.element ); - - // use the page widget to enhance - this._enhance( page, settings.role ); - - // remove page on hide - page.page( "bindRemove" ); - }, - - _find: function( absUrl ) { - // TODO consider supporting a custom callback - var fileUrl = this._createFileUrl( absUrl ), - dataUrl = this._createDataUrl( absUrl ), - page, initialContent = this._getInitialContent(); - - // Check to see if the page already exists in the DOM. - // NOTE do _not_ use the :jqmData pseudo selector because parenthesis - // are a valid url char and it breaks on the first occurence - page = this.element - .children( "[data-" + this._getNs() +"url='" + dataUrl + "']" ); - - // If we failed to find the page, check to see if the url is a - // reference to an embedded page. If so, it may have been dynamically - // injected by a developer, in which case it would be lacking a - // data-url attribute and in need of enhancement. - if ( page.length === 0 && dataUrl && !$.mobile.path.isPath( dataUrl ) ) { - page = this.element.children( $.mobile.path.hashToSelector("#" + dataUrl) ) - .attr( "data-" + this._getNs() + "url", dataUrl ) - .jqmData( "url", dataUrl ); - } - - // If we failed to find a page in the DOM, check the URL to see if it - // refers to the first page in the application. Also check to make sure - // our cached-first-page is actually in the DOM. Some user deployed - // apps are pruning the first page from the DOM for various reasons. - // We check for this case here because we don't want a first-page with - // an id falling through to the non-existent embedded page error case. - if ( page.length === 0 && - $.mobile.path.isFirstPageUrl( fileUrl ) && - initialContent && - initialContent.parent().length ) { - page = $( initialContent ); - } - - return page; - }, - - _getLoader: function() { - return $.mobile.loading(); - }, - - _showLoading: function( delay, theme, msg, textonly ) { - // This configurable timeout allows cached pages a brief - // delay to load without showing a message - if ( this._loadMsg ) { - return; - } - - this._loadMsg = setTimeout($.proxy(function() { - this._getLoader().loader( "show", theme, msg, textonly ); - this._loadMsg = 0; - }, this), delay ); - }, - - _hideLoading: function() { - // Stop message show timer - clearTimeout( this._loadMsg ); - this._loadMsg = 0; - - // Hide loading message - this._getLoader().loader( "hide" ); - }, - - _showError: function() { - // make sure to remove the current loading message - this._hideLoading(); - - // show the error message - this._showLoading( 0, $.mobile.pageLoadErrorMessageTheme, $.mobile.pageLoadErrorMessage, true ); - - // hide the error message after a delay - // TODO configuration - setTimeout( $.proxy(this, "_hideLoading"), 1500 ); - }, - - _parse: function( html, fileUrl ) { - // TODO consider allowing customization of this method. It's very JQM specific - var page, all = $( "<div></div>" ); - - //workaround to allow scripts to execute when included in page divs - all.get( 0 ).innerHTML = html; - - page = all.find( ":jqmData(role='page'), :jqmData(role='dialog')" ).first(); - - //if page elem couldn't be found, create one and insert the body element's contents - if ( !page.length ) { - page = $( "<div data-" + this._getNs() + "role='page'>" + - ( html.split( /<\/?body[^>]*>/gmi )[1] || "" ) + - "</div>" ); - } - - // TODO tagging a page with external to make sure that embedded pages aren't - // removed by the various page handling code is bad. Having page handling code - // in many places is bad. Solutions post 1.0 - page.attr( "data-" + this._getNs() + "url", $.mobile.path.convertUrlToDataUrl(fileUrl) ) - .attr( "data-" + this._getNs() + "external-page", true ); - - return page; - }, - - _setLoadedTitle: function( page, html ) { - //page title regexp - var newPageTitle = html.match( /<title[^>]*>([^<]*)/ ) && RegExp.$1; - - if ( newPageTitle && !page.jqmData("title") ) { - newPageTitle = $( "<div>" + newPageTitle + "</div>" ).text(); - page.jqmData( "title", newPageTitle ); - } - }, - - _isRewritableBaseTag: function() { - return $.mobile.dynamicBaseEnabled && !$.support.dynamicBaseTag; - }, - - _createDataUrl: function( absoluteUrl ) { - return $.mobile.path.convertUrlToDataUrl( absoluteUrl ); - }, - - _createFileUrl: function( absoluteUrl ) { - return $.mobile.path.getFilePath( absoluteUrl ); - }, - - _triggerWithDeprecated: function( name, data, page ) { - var deprecatedEvent = $.Event( "page" + name ), - newEvent = $.Event( this.widgetName + name ); - - // DEPRECATED - // trigger the old deprecated event on the page if it's provided - ( page || this.element ).trigger( deprecatedEvent, data ); - - // use the widget trigger method for the new content* event - this._trigger( name, newEvent, data ); - - return { - deprecatedEvent: deprecatedEvent, - event: newEvent - }; - }, - - // TODO it would be nice to split this up more but everything appears to be "one off" - // or require ordering such that other bits are sprinkled in between parts that - // could be abstracted out as a group - _loadSuccess: function( absUrl, triggerData, settings, deferred ) { - var fileUrl = this._createFileUrl( absUrl ), - dataUrl = this._createDataUrl( absUrl ); - - return $.proxy(function( html, textStatus, xhr ) { - //pre-parse html to check for a data-url, - //use it as the new fileUrl, base path, etc - var content, - - // TODO handle dialogs again - pageElemRegex = new RegExp( "(<[^>]+\\bdata-" + this._getNs() + "role=[\"']?page[\"']?[^>]*>)" ), - - dataUrlRegex = new RegExp( "\\bdata-" + this._getNs() + "url=[\"']?([^\"'>]*)[\"']?" ); - - // data-url must be provided for the base tag so resource requests - // can be directed to the correct url. loading into a temprorary - // element makes these requests immediately - if ( pageElemRegex.test( html ) && - RegExp.$1 && - dataUrlRegex.test( RegExp.$1 ) && - RegExp.$1 ) { - fileUrl = $.mobile.path.getFilePath( $("<div>" + RegExp.$1 + "</div>").text() ); - } - - //dont update the base tag if we are prefetching - if ( settings.prefetch === undefined ) { - this._getBase().set( fileUrl ); - } - - content = this._parse( html, fileUrl ); - - this._setLoadedTitle( content, html ); - - // Add the content reference and xhr to our triggerData. - triggerData.xhr = xhr; - triggerData.textStatus = textStatus; - - // DEPRECATED - triggerData.page = content; - - triggerData.content = content; - - triggerData.toPage = content; - - // If the default behavior is prevented, stop here! - // Note that it is the responsibility of the listener/handler - // that called preventDefault(), to resolve/reject the - // deferred object within the triggerData. - if ( this._triggerWithDeprecated( "load", triggerData ).event.isDefaultPrevented() ) { - return; - } - - // rewrite src and href attrs to use a base url if the base tag won't work - if ( this._isRewritableBaseTag() && content ) { - this._getBase().rewrite( fileUrl, content ); - } - - this._include( content, settings ); - - // Enhancing the content may result in new dialogs/sub content being inserted - // into the DOM. If the original absUrl refers to a sub-content, that is the - // real content we are interested in. - if ( absUrl.indexOf( "&" + $.mobile.subPageUrlKey ) > -1 ) { - content = this.element.children( "[data-" + this._getNs() +"url='" + dataUrl + "']" ); - } - - // Remove loading message. - if ( settings.showLoadMsg ) { - this._hideLoading(); - } - - deferred.resolve( absUrl, settings, content ); - }, this); - }, - - _loadDefaults: { - type: "get", - data: undefined, - - // DEPRECATED - reloadPage: false, - - reload: false, - - // By default we rely on the role defined by the @data-role attribute. - role: undefined, - - showLoadMsg: false, - - // This delay allows loads that pull from browser cache to - // occur without showing the loading message. - loadMsgDelay: 50 - }, - - load: function( url, options ) { - // This function uses deferred notifications to let callers - // know when the content is done loading, or if an error has occurred. - var deferred = ( options && options.deferred ) || $.Deferred(), - - // The default load options with overrides specified by the caller. - settings = $.extend( {}, this._loadDefaults, options ), - - // The DOM element for the content after it has been loaded. - content = null, - - // The absolute version of the URL passed into the function. This - // version of the URL may contain dialog/subcontent params in it. - absUrl = $.mobile.path.makeUrlAbsolute( url, this._findBaseWithDefault() ), - fileUrl, dataUrl, pblEvent, triggerData; - - // DEPRECATED reloadPage - settings.reload = settings.reloadPage; - - // If the caller provided data, and we're using "get" request, - // append the data to the URL. - if ( settings.data && settings.type === "get" ) { - absUrl = $.mobile.path.addSearchParams( absUrl, settings.data ); - settings.data = undefined; - } - - // If the caller is using a "post" request, reload must be true - if ( settings.data && settings.type === "post" ) { - settings.reload = true; - } - - // The absolute version of the URL minus any dialog/subcontent params. - // In otherwords the real URL of the content to be loaded. - fileUrl = this._createFileUrl( absUrl ); - - // The version of the Url actually stored in the data-url attribute of - // the content. For embedded content, it is just the id of the page. For - // content within the same domain as the document base, it is the site - // relative path. For cross-domain content (Phone Gap only) the entire - // absolute Url is used to load the content. - dataUrl = this._createDataUrl( absUrl ); - - content = this._find( absUrl ); - - // If it isn't a reference to the first content and refers to missing - // embedded content reject the deferred and return - if ( content.length === 0 && - $.mobile.path.isEmbeddedPage(fileUrl) && - !$.mobile.path.isFirstPageUrl(fileUrl) ) { - deferred.reject( absUrl, settings ); - return deferred.promise(); - } - - // Reset base to the default document base - // TODO figure out why we doe this - this._getBase().reset(); - - // If the content we are interested in is already in the DOM, - // and the caller did not indicate that we should force a - // reload of the file, we are done. Resolve the deferrred so that - // users can bind to .done on the promise - if ( content.length && !settings.reload ) { - this._enhance( content, settings.role ); - deferred.resolve( absUrl, settings, content ); - - //if we are reloading the content make sure we update - // the base if its not a prefetch - if ( !settings.prefetch ) { - this._getBase().set(url); - } - - return deferred.promise(); - } - - triggerData = { - url: url, - absUrl: absUrl, - toPage: url, - prevPage: options ? options.fromPage : undefined, - dataUrl: dataUrl, - deferred: deferred, - options: settings - }; - - // Let listeners know we're about to load content. - pblEvent = this._triggerWithDeprecated( "beforeload", triggerData ); - - // If the default behavior is prevented, stop here! - if ( pblEvent.deprecatedEvent.isDefaultPrevented() || - pblEvent.event.isDefaultPrevented() ) { - return deferred.promise(); - } - - if ( settings.showLoadMsg ) { - this._showLoading( settings.loadMsgDelay ); - } - - // Reset base to the default document base. - // only reset if we are not prefetching - if ( settings.prefetch === undefined ) { - this._getBase().reset(); - } - - if ( !( $.mobile.allowCrossDomainPages || - $.mobile.path.isSameDomain($.mobile.path.documentUrl, absUrl ) ) ) { - deferred.reject( absUrl, settings ); - return deferred.promise(); - } - - // Load the new content. - $.ajax({ - url: fileUrl, - type: settings.type, - data: settings.data, - contentType: settings.contentType, - dataType: "html", - success: this._loadSuccess( absUrl, triggerData, settings, deferred ), - error: this._loadError( absUrl, triggerData, settings, deferred ) - }); - - return deferred.promise(); - }, - - _loadError: function( absUrl, triggerData, settings, deferred ) { - return $.proxy(function( xhr, textStatus, errorThrown ) { - //set base back to current path - this._getBase().set( $.mobile.path.get() ); - - // Add error info to our triggerData. - triggerData.xhr = xhr; - triggerData.textStatus = textStatus; - triggerData.errorThrown = errorThrown; - - // Let listeners know the page load failed. - var plfEvent = this._triggerWithDeprecated( "loadfailed", triggerData ); - - // If the default behavior is prevented, stop here! - // Note that it is the responsibility of the listener/handler - // that called preventDefault(), to resolve/reject the - // deferred object within the triggerData. - if ( plfEvent.deprecatedEvent.isDefaultPrevented() || - plfEvent.event.isDefaultPrevented() ) { - return; - } - - // Remove loading message. - if ( settings.showLoadMsg ) { - this._showError(); - } - - deferred.reject( absUrl, settings ); - }, this); - }, - - _getTransitionHandler: function( transition ) { - transition = $.mobile._maybeDegradeTransition( transition ); - - //find the transition handler for the specified transition. If there - //isn't one in our transitionHandlers dictionary, use the default one. - //call the handler immediately to kick-off the transition. - return $.mobile.transitionHandlers[ transition ] || $.mobile.defaultTransitionHandler; - }, - - // TODO move into transition handlers? - _triggerCssTransitionEvents: function( to, from, prefix ) { - var samePage = false; - - prefix = prefix || ""; - - // TODO decide if these events should in fact be triggered on the container - if ( from ) { - - //Check if this is a same page transition and tell the handler in page - if( to[0] === from[0] ){ - samePage = true; - } - - //trigger before show/hide events - // TODO deprecate nextPage in favor of next - this._triggerWithDeprecated( prefix + "hide", { - - // Deprecated in 1.4 remove in 1.5 - nextPage: to, - toPage: to, - prevPage: from, - samePage: samePage - }, from ); - } - - // TODO deprecate prevPage in favor of previous - this._triggerWithDeprecated( prefix + "show", { - prevPage: from || $( "" ), - toPage: to - }, to ); - }, - - // TODO make private once change has been defined in the widget - _cssTransition: function( to, from, options ) { - var transition = options.transition, - reverse = options.reverse, - deferred = options.deferred, - TransitionHandler, - promise; - - this._triggerCssTransitionEvents( to, from, "before" ); - - // TODO put this in a binding to events *outside* the widget - this._hideLoading(); - - TransitionHandler = this._getTransitionHandler( transition ); - - promise = ( new TransitionHandler( transition, reverse, to, from ) ).transition(); - - promise.done( $.proxy( function() { - this._triggerCssTransitionEvents( to, from ); - }, this )); - - // TODO temporary accomodation of argument deferred - promise.done(function() { - deferred.resolve.apply( deferred, arguments ); - }); - }, - - _releaseTransitionLock: function() { - //release transition lock so navigation is free again - isPageTransitioning = false; - if ( pageTransitionQueue.length > 0 ) { - $.mobile.changePage.apply( null, pageTransitionQueue.pop() ); - } - }, - - _removeActiveLinkClass: function( force ) { - //clear out the active button state - $.mobile.removeActiveLinkClass( force ); - }, - - _loadUrl: function( to, triggerData, settings ) { - // preserve the original target as the dataUrl value will be - // simplified eg, removing ui-state, and removing query params - // from the hash this is so that users who want to use query - // params have access to them in the event bindings for the page - // life cycle See issue #5085 - settings.target = to; - settings.deferred = $.Deferred(); - - this.load( to, settings ); - - settings.deferred.done($.proxy(function( url, options, content ) { - isPageTransitioning = false; - - // store the original absolute url so that it can be provided - // to events in the triggerData of the subsequent changePage call - options.absUrl = triggerData.absUrl; - - this.transition( content, triggerData, options ); - }, this)); - - settings.deferred.fail($.proxy(function(/* url, options */) { - this._removeActiveLinkClass( true ); - this._releaseTransitionLock(); - this._triggerWithDeprecated( "changefailed", triggerData ); - }, this)); - }, - - _triggerPageBeforeChange: function( to, triggerData, settings ) { - var returnEvents; - - triggerData.prevPage = this.activePage; - $.extend( triggerData, { - toPage: to, - options: settings - }); - - // NOTE: preserve the original target as the dataUrl value will be - // simplified eg, removing ui-state, and removing query params from - // the hash this is so that users who want to use query params have - // access to them in the event bindings for the page life cycle - // See issue #5085 - if ( $.type(to) === "string" ) { - // if the toPage is a string simply convert it - triggerData.absUrl = $.mobile.path.makeUrlAbsolute( to, this._findBaseWithDefault() ); - } else { - // if the toPage is a jQuery object grab the absolute url stored - // in the loadPage callback where it exists - triggerData.absUrl = settings.absUrl; - } - - // Let listeners know we're about to change the current page. - returnEvents = this._triggerWithDeprecated( "beforechange", triggerData ); - - // If the default behavior is prevented, stop here! - if ( returnEvents.event.isDefaultPrevented() || - returnEvents.deprecatedEvent.isDefaultPrevented() ) { - return false; - } - - return true; - }, - - change: function( to, options ) { - // If we are in the midst of a transition, queue the current request. - // We'll call changePage() once we're done with the current transition - // to service the request. - if ( isPageTransitioning ) { - pageTransitionQueue.unshift( arguments ); - return; - } - - var settings = $.extend( {}, $.mobile.changePage.defaults, options ), - triggerData = {}; - - // Make sure we have a fromPage. - settings.fromPage = settings.fromPage || this.activePage; - - // if the page beforechange default is prevented return early - if ( !this._triggerPageBeforeChange(to, triggerData, settings) ) { - return; - } - - // We allow "pagebeforechange" observers to modify the to in - // the trigger data to allow for redirects. Make sure our to is - // updated. We also need to re-evaluate whether it is a string, - // because an object can also be replaced by a string - to = triggerData.toPage; - - // If the caller passed us a url, call loadPage() - // to make sure it is loaded into the DOM. We'll listen - // to the promise object it returns so we know when - // it is done loading or if an error ocurred. - if ( $.type(to) === "string" ) { - // Set the isPageTransitioning flag to prevent any requests from - // entering this method while we are in the midst of loading a page - // or transitioning. - isPageTransitioning = true; - - this._loadUrl( to, triggerData, settings ); - } else { - this.transition( to, triggerData, settings ); - } - }, - - transition: function( toPage, triggerData, settings ) { - var fromPage, url, pageUrl, fileUrl, - active, activeIsInitialPage, - historyDir, pageTitle, isDialog, - alreadyThere, newPageTitle, - params, cssTransitionDeferred, - beforeTransition; - - // If we are in the midst of a transition, queue the current request. - // We'll call changePage() once we're done with the current transition - // to service the request. - if ( isPageTransitioning ) { - // make sure to only queue the to and settings values so the arguments - // work with a call to the change method - pageTransitionQueue.unshift( [toPage, settings] ); - return; - } - - // DEPRECATED - this call only, in favor of the before transition - // if the page beforechange default is prevented return early - if ( !this._triggerPageBeforeChange(toPage, triggerData, settings) ) { - return; - } - - triggerData.prevPage = settings.fromPage; - // if the (content|page)beforetransition default is prevented return early - // Note, we have to check for both the deprecated and new events - beforeTransition = this._triggerWithDeprecated( "beforetransition", triggerData ); - if (beforeTransition.deprecatedEvent.isDefaultPrevented() || - beforeTransition.event.isDefaultPrevented() ) { - return; - } - - // Set the isPageTransitioning flag to prevent any requests from - // entering this method while we are in the midst of loading a page - // or transitioning. - isPageTransitioning = true; - - // If we are going to the first-page of the application, we need to make - // sure settings.dataUrl is set to the application document url. This allows - // us to avoid generating a document url with an id hash in the case where the - // first-page of the document has an id attribute specified. - if ( toPage[ 0 ] === $.mobile.firstPage[ 0 ] && !settings.dataUrl ) { - settings.dataUrl = $.mobile.path.documentUrl.hrefNoHash; - } - - // The caller passed us a real page DOM element. Update our - // internal state and then trigger a transition to the page. - fromPage = settings.fromPage; - url = ( settings.dataUrl && $.mobile.path.convertUrlToDataUrl(settings.dataUrl) ) || - toPage.jqmData( "url" ); - - // The pageUrl var is usually the same as url, except when url is obscured - // as a dialog url. pageUrl always contains the file path - pageUrl = url; - fileUrl = $.mobile.path.getFilePath( url ); - active = $.mobile.navigate.history.getActive(); - activeIsInitialPage = $.mobile.navigate.history.activeIndex === 0; - historyDir = 0; - pageTitle = document.title; - isDialog = ( settings.role === "dialog" || - toPage.jqmData( "role" ) === "dialog" ) && - toPage.jqmData( "dialog" ) !== true; - - // By default, we prevent changePage requests when the fromPage and toPage - // are the same element, but folks that generate content - // manually/dynamically and reuse pages want to be able to transition to - // the same page. To allow this, they will need to change the default - // value of allowSamePageTransition to true, *OR*, pass it in as an - // option when they manually call changePage(). It should be noted that - // our default transition animations assume that the formPage and toPage - // are different elements, so they may behave unexpectedly. It is up to - // the developer that turns on the allowSamePageTransitiona option to - // either turn off transition animations, or make sure that an appropriate - // animation transition is used. - if ( fromPage && fromPage[0] === toPage[0] && - !settings.allowSamePageTransition ) { - - isPageTransitioning = false; - this._triggerWithDeprecated( "transition", triggerData ); - this._triggerWithDeprecated( "change", triggerData ); - - // Even if there is no page change to be done, we should keep the - // urlHistory in sync with the hash changes - if ( settings.fromHashChange ) { - $.mobile.navigate.history.direct({ url: url }); - } - - return; - } - - // We need to make sure the page we are given has already been enhanced. - toPage.page({ role: settings.role }); - - // If the changePage request was sent from a hashChange event, check to - // see if the page is already within the urlHistory stack. If so, we'll - // assume the user hit the forward/back button and will try to match the - // transition accordingly. - if ( settings.fromHashChange ) { - historyDir = settings.direction === "back" ? -1 : 1; - } - - // Kill the keyboard. - // XXX_jblas: We need to stop crawling the entire document to kill focus. - // Instead, we should be tracking focus with a delegate() - // handler so we already have the element in hand at this - // point. - // Wrap this in a try/catch block since IE9 throw "Unspecified error" if - // document.activeElement is undefined when we are in an IFrame. - try { - if ( document.activeElement && - document.activeElement.nodeName.toLowerCase() !== "body" ) { - - $( document.activeElement ).blur(); - } else { - $( "input:focus, textarea:focus, select:focus" ).blur(); - } - } catch( e ) {} - - // Record whether we are at a place in history where a dialog used to be - - // if so, do not add a new history entry and do not change the hash either - alreadyThere = false; - - // If we're displaying the page as a dialog, we don't want the url - // for the dialog content to be used in the hash. Instead, we want - // to append the dialogHashKey to the url of the current page. - if ( isDialog && active ) { - // on the initial page load active.url is undefined and in that case - // should be an empty string. Moving the undefined -> empty string back - // into urlHistory.addNew seemed imprudent given undefined better - // represents the url state - - // If we are at a place in history that once belonged to a dialog, reuse - // this state without adding to urlHistory and without modifying the - // hash. However, if a dialog is already displayed at this point, and - // we're about to display another dialog, then we must add another hash - // and history entry on top so that one may navigate back to the - // original dialog - if ( active.url && - active.url.indexOf( $.mobile.dialogHashKey ) > -1 && - this.activePage && - !this.activePage.hasClass( "ui-dialog" ) && - $.mobile.navigate.history.activeIndex > 0 ) { - - settings.changeHash = false; - alreadyThere = true; - } - - // Normally, we tack on a dialog hash key, but if this is the location - // of a stale dialog, we reuse the URL from the entry - url = ( active.url || "" ); - - // account for absolute urls instead of just relative urls use as hashes - if ( !alreadyThere && url.indexOf("#") > -1 ) { - url += $.mobile.dialogHashKey; - } else { - url += "#" + $.mobile.dialogHashKey; - } - } - - // if title element wasn't found, try the page div data attr too - // If this is a deep-link or a reload ( active === undefined ) then just - // use pageTitle - newPageTitle = ( !active ) ? pageTitle : toPage.jqmData( "title" ) || - toPage.children( ":jqmData(role='header')" ).find( ".ui-title" ).text(); - if ( !!newPageTitle && pageTitle === document.title ) { - pageTitle = newPageTitle; - } - if ( !toPage.jqmData( "title" ) ) { - toPage.jqmData( "title", pageTitle ); - } - - // Make sure we have a transition defined. - settings.transition = settings.transition || - ( ( historyDir && !activeIsInitialPage ) ? active.transition : undefined ) || - ( isDialog ? $.mobile.defaultDialogTransition : $.mobile.defaultPageTransition ); - - //add page to history stack if it's not back or forward - if ( !historyDir && alreadyThere ) { - $.mobile.navigate.history.getActive().pageUrl = pageUrl; - } - - // Set the location hash. - if ( url && !settings.fromHashChange ) { - - // rebuilding the hash here since we loose it earlier on - // TODO preserve the originally passed in path - if ( !$.mobile.path.isPath( url ) && url.indexOf( "#" ) < 0 ) { - url = "#" + url; - } - - // TODO the property names here are just silly - params = { - allowSamePageTransition: settings.allowSamePageTransition, - transition: settings.transition, - title: pageTitle, - pageUrl: pageUrl, - role: settings.role - }; - - if ( settings.changeHash !== false && $.mobile.hashListeningEnabled ) { - $.mobile.navigate( url, params, true); - } else if ( toPage[ 0 ] !== $.mobile.firstPage[ 0 ] ) { - $.mobile.navigate.history.add( url, params ); - } - } - - //set page title - document.title = pageTitle; - - //set "toPage" as activePage deprecated in 1.4 remove in 1.5 - $.mobile.activePage = toPage; - - //new way to handle activePage - this.activePage = toPage; - - // If we're navigating back in the URL history, set reverse accordingly. - settings.reverse = settings.reverse || historyDir < 0; - - cssTransitionDeferred = $.Deferred(); - - this._cssTransition(toPage, fromPage, { - transition: settings.transition, - reverse: settings.reverse, - deferred: cssTransitionDeferred - }); - - cssTransitionDeferred.done($.proxy(function( name, reverse, $to, $from, alreadyFocused ) { - $.mobile.removeActiveLinkClass(); - - //if there's a duplicateCachedPage, remove it from the DOM now that it's hidden - if ( settings.duplicateCachedPage ) { - settings.duplicateCachedPage.remove(); - } - - // despite visibility: hidden addresses issue #2965 - // https://github.com/jquery/jquery-mobile/issues/2965 - if ( !alreadyFocused ) { - $.mobile.focusPage( toPage ); - } - - this._releaseTransitionLock(); - this._triggerWithDeprecated( "transition", triggerData ); - this._triggerWithDeprecated( "change", triggerData ); - }, this)); - }, - - // determine the current base url - _findBaseWithDefault: function() { - var closestBase = ( this.activePage && - $.mobile.getClosestBaseUrl( this.activePage ) ); - return closestBase || $.mobile.path.documentBase.hrefNoHash; - } - }); - - // The following handlers should be bound after mobileinit has been triggered - // the following deferred is resolved in the init file - $.mobile.navreadyDeferred = $.Deferred(); - - //these variables make all page containers use the same queue and only navigate one at a time - // queue to hold simultanious page transitions - var pageTransitionQueue = [], - - // indicates whether or not page is in process of transitioning - isPageTransitioning = false; - -})( jQuery ); - -(function( $, undefined ) { - - // resolved on domready - var domreadyDeferred = $.Deferred(), - - // resolved and nulled on window.load() - loadDeferred = $.Deferred(), - - // function that resolves the above deferred - pageIsFullyLoaded = function() { - - // Resolve and null the deferred - loadDeferred.resolve(); - loadDeferred = null; - }, - - documentUrl = $.mobile.path.documentUrl, - - // used to track last vclicked element to make sure its value is added to form data - $lastVClicked = null; - - /* Event Bindings - hashchange, submit, and click */ - function findClosestLink( ele ) { - while ( ele ) { - // Look for the closest element with a nodeName of "a". - // Note that we are checking if we have a valid nodeName - // before attempting to access it. This is because the - // node we get called with could have originated from within - // an embedded SVG document where some symbol instance elements - // don't have nodeName defined on them, or strings are of type - // SVGAnimatedString. - if ( ( typeof ele.nodeName === "string" ) && ele.nodeName.toLowerCase() === "a" ) { - break; - } - ele = ele.parentNode; - } - return ele; - } - - $.mobile.loadPage = function( url, opts ) { - var container; - - opts = opts || {}; - container = ( opts.pageContainer || $.mobile.pageContainer ); - - // create the deferred that will be supplied to loadPage callers - // and resolved by the content widget's load method - opts.deferred = $.Deferred(); - - // Preferring to allow exceptions for uninitialized opts.pageContainer - // widgets so we know if we need to force init here for users - container.pagecontainer( "load", url, opts ); - - // provide the deferred - return opts.deferred.promise(); - }; - - //define vars for interal use - - /* internal utility functions */ - - // NOTE Issue #4950 Android phonegap doesn't navigate back properly - // when a full page refresh has taken place. It appears that hashchange - // and replacestate history alterations work fine but we need to support - // both forms of history traversal in our code that uses backward history - // movement - $.mobile.back = function() { - var nav = window.navigator; - - // if the setting is on and the navigator object is - // available use the phonegap navigation capability - if ( this.phonegapNavigationEnabled && - nav && - nav.app && - nav.app.backHistory ) { - nav.app.backHistory(); - } else { - $.mobile.pageContainer.pagecontainer( "back" ); - } - }; - - // Direct focus to the page title, or otherwise first focusable element - $.mobile.focusPage = function ( page ) { - var autofocus = page.find( "[autofocus]" ), - pageTitle = page.find( ".ui-title:eq(0)" ); - - if ( autofocus.length ) { - autofocus.focus(); - return; - } - - if ( pageTitle.length ) { - pageTitle.focus(); - } else{ - page.focus(); - } - }; - - // No-op implementation of transition degradation - $.mobile._maybeDegradeTransition = $.mobile._maybeDegradeTransition || function( transition ) { - return transition; - }; - - // Exposed $.mobile methods - - $.mobile.changePage = function( to, options ) { - $.mobile.pageContainer.pagecontainer( "change", to, options ); - }; - - $.mobile.changePage.defaults = { - transition: undefined, - reverse: false, - changeHash: true, - fromHashChange: false, - role: undefined, // By default we rely on the role defined by the @data-role attribute. - duplicateCachedPage: undefined, - pageContainer: undefined, - showLoadMsg: true, //loading message shows by default when pages are being fetched during changePage - dataUrl: undefined, - fromPage: undefined, - allowSamePageTransition: false - }; - - $.mobile._registerInternalEvents = function() { - var getAjaxFormData = function( $form, calculateOnly ) { - var url, ret = true, formData, vclickedName, method; - if ( !$.mobile.ajaxEnabled || - // test that the form is, itself, ajax false - $form.is( ":jqmData(ajax='false')" ) || - // test that $.mobile.ignoreContentEnabled is set and - // the form or one of it's parents is ajax=false - !$form.jqmHijackable().length || - $form.attr( "target" ) ) { - return false; - } - - url = ( $lastVClicked && $lastVClicked.attr( "formaction" ) ) || - $form.attr( "action" ); - method = ( $form.attr( "method" ) || "get" ).toLowerCase(); - - // If no action is specified, browsers default to using the - // URL of the document containing the form. Since we dynamically - // pull in pages from external documents, the form should submit - // to the URL for the source document of the page containing - // the form. - if ( !url ) { - // Get the @data-url for the page containing the form. - url = $.mobile.getClosestBaseUrl( $form ); - - // NOTE: If the method is "get", we need to strip off the query string - // because it will get replaced with the new form data. See issue #5710. - if ( method === "get" ) { - url = $.mobile.path.parseUrl( url ).hrefNoSearch; - } - - if ( url === $.mobile.path.documentBase.hrefNoHash ) { - // The url we got back matches the document base, - // which means the page must be an internal/embedded page, - // so default to using the actual document url as a browser - // would. - url = documentUrl.hrefNoSearch; - } - } - - url = $.mobile.path.makeUrlAbsolute( url, $.mobile.getClosestBaseUrl( $form ) ); - - if ( ( $.mobile.path.isExternal( url ) && !$.mobile.path.isPermittedCrossDomainRequest( documentUrl, url ) ) ) { - return false; - } - - if ( !calculateOnly ) { - formData = $form.serializeArray(); - - if ( $lastVClicked && $lastVClicked[ 0 ].form === $form[ 0 ] ) { - vclickedName = $lastVClicked.attr( "name" ); - if ( vclickedName ) { - // Make sure the last clicked element is included in the form - $.each( formData, function( key, value ) { - if ( value.name === vclickedName ) { - // Unset vclickedName - we've found it in the serialized data already - vclickedName = ""; - return false; - } - }); - if ( vclickedName ) { - formData.push( { name: vclickedName, value: $lastVClicked.attr( "value" ) } ); - } - } - } - - ret = { - url: url, - options: { - type: method, - data: $.param( formData ), - transition: $form.jqmData( "transition" ), - reverse: $form.jqmData( "direction" ) === "reverse", - reloadPage: true - } - }; - } - - return ret; - }; - - //bind to form submit events, handle with Ajax - $.mobile.document.delegate( "form", "submit", function( event ) { - var formData; - - if ( !event.isDefaultPrevented() ) { - formData = getAjaxFormData( $( this ) ); - if ( formData ) { - $.mobile.changePage( formData.url, formData.options ); - event.preventDefault(); - } - } - }); - - //add active state on vclick - $.mobile.document.bind( "vclick", function( event ) { - var $btn, btnEls, target = event.target, needClosest = false; - // if this isn't a left click we don't care. Its important to note - // that when the virtual event is generated it will create the which attr - if ( event.which > 1 || !$.mobile.linkBindingEnabled ) { - return; - } - - // Record that this element was clicked, in case we need it for correct - // form submission during the "submit" handler above - $lastVClicked = $( target ); - - // Try to find a target element to which the active class will be applied - if ( $.data( target, "mobile-button" ) ) { - // If the form will not be submitted via AJAX, do not add active class - if ( !getAjaxFormData( $( target ).closest( "form" ), true ) ) { - return; - } - // We will apply the active state to this button widget - the parent - // of the input that was clicked will have the associated data - if ( target.parentNode ) { - target = target.parentNode; - } - } else { - target = findClosestLink( target ); - if ( !( target && $.mobile.path.parseUrl( target.getAttribute( "href" ) || "#" ).hash !== "#" ) ) { - return; - } - - // TODO teach $.mobile.hijackable to operate on raw dom elements so the - // link wrapping can be avoided - if ( !$( target ).jqmHijackable().length ) { - return; - } - } - - // Avoid calling .closest by using the data set during .buttonMarkup() - // List items have the button data in the parent of the element clicked - if ( !!~target.className.indexOf( "ui-link-inherit" ) ) { - if ( target.parentNode ) { - btnEls = $.data( target.parentNode, "buttonElements" ); - } - // Otherwise, look for the data on the target itself - } else { - btnEls = $.data( target, "buttonElements" ); - } - // If found, grab the button's outer element - if ( btnEls ) { - target = btnEls.outer; - } else { - needClosest = true; - } - - $btn = $( target ); - // If the outer element wasn't found by the our heuristics, use .closest() - if ( needClosest ) { - $btn = $btn.closest( ".ui-btn" ); - } - - if ( $btn.length > 0 && - !( $btn.hasClass( "ui-state-disabled" || - - // DEPRECATED as of 1.4.0 - remove after 1.4.0 release - // only ui-state-disabled should be present thereafter - $btn.hasClass( "ui-disabled" ) ) ) ) { - $.mobile.removeActiveLinkClass( true ); - $.mobile.activeClickedLink = $btn; - $.mobile.activeClickedLink.addClass( $.mobile.activeBtnClass ); - } - }); - - // click routing - direct to HTTP or Ajax, accordingly - $.mobile.document.bind( "click", function( event ) { - if ( !$.mobile.linkBindingEnabled || event.isDefaultPrevented() ) { - return; - } - - var link = findClosestLink( event.target ), - $link = $( link ), - - //remove active link class if external (then it won't be there if you come back) - httpCleanup = function() { - window.setTimeout(function() { $.mobile.removeActiveLinkClass( true ); }, 200 ); - }, - baseUrl, href, - useDefaultUrlHandling, isExternal, - transition, reverse, role; - - // If a button was clicked, clean up the active class added by vclick above - if ( $.mobile.activeClickedLink && - $.mobile.activeClickedLink[ 0 ] === event.target.parentNode ) { - httpCleanup(); - } - - // If there is no link associated with the click or its not a left - // click we want to ignore the click - // TODO teach $.mobile.hijackable to operate on raw dom elements so the link wrapping - // can be avoided - if ( !link || event.which > 1 || !$link.jqmHijackable().length ) { - return; - } - - //if there's a data-rel=back attr, go back in history - if ( $link.is( ":jqmData(rel='back')" ) ) { - $.mobile.back(); - return false; - } - - baseUrl = $.mobile.getClosestBaseUrl( $link ); - - //get href, if defined, otherwise default to empty hash - href = $.mobile.path.makeUrlAbsolute( $link.attr( "href" ) || "#", baseUrl ); - - //if ajax is disabled, exit early - if ( !$.mobile.ajaxEnabled && !$.mobile.path.isEmbeddedPage( href ) ) { - httpCleanup(); - //use default click handling - return; - } - - // XXX_jblas: Ideally links to application pages should be specified as - // an url to the application document with a hash that is either - // the site relative path or id to the page. But some of the - // internal code that dynamically generates sub-pages for nested - // lists and select dialogs, just write a hash in the link they - // create. This means the actual URL path is based on whatever - // the current value of the base tag is at the time this code - // is called. - if ( href.search( "#" ) !== -1 && - !( $.mobile.path.isExternal( href ) && $.mobile.path.isAbsoluteUrl( href ) ) ) { - - href = href.replace( /[^#]*#/, "" ); - if ( !href ) { - //link was an empty hash meant purely - //for interaction, so we ignore it. - event.preventDefault(); - return; - } else if ( $.mobile.path.isPath( href ) ) { - //we have apath so make it the href we want to load. - href = $.mobile.path.makeUrlAbsolute( href, baseUrl ); - } else { - //we have a simple id so use the documentUrl as its base. - href = $.mobile.path.makeUrlAbsolute( "#" + href, documentUrl.hrefNoHash ); - } - } - - // Should we handle this link, or let the browser deal with it? - useDefaultUrlHandling = $link.is( "[rel='external']" ) || $link.is( ":jqmData(ajax='false')" ) || $link.is( "[target]" ); - - // Some embedded browsers, like the web view in Phone Gap, allow cross-domain XHR - // requests if the document doing the request was loaded via the file:// protocol. - // This is usually to allow the application to "phone home" and fetch app specific - // data. We normally let the browser handle external/cross-domain urls, but if the - // allowCrossDomainPages option is true, we will allow cross-domain http/https - // requests to go through our page loading logic. - - //check for protocol or rel and its not an embedded page - //TODO overlap in logic from isExternal, rel=external check should be - // moved into more comprehensive isExternalLink - isExternal = useDefaultUrlHandling || ( $.mobile.path.isExternal( href ) && !$.mobile.path.isPermittedCrossDomainRequest( documentUrl, href ) ); - - if ( isExternal ) { - httpCleanup(); - //use default click handling - return; - } - - //use ajax - transition = $link.jqmData( "transition" ); - reverse = $link.jqmData( "direction" ) === "reverse" || - // deprecated - remove by 1.0 - $link.jqmData( "back" ); - - //this may need to be more specific as we use data-rel more - role = $link.attr( "data-" + $.mobile.ns + "rel" ) || undefined; - - $.mobile.changePage( href, { transition: transition, reverse: reverse, role: role, link: $link } ); - event.preventDefault(); - }); - - //prefetch pages when anchors with data-prefetch are encountered - $.mobile.document.delegate( ".ui-page", "pageshow.prefetch", function() { - var urls = []; - $( this ).find( "a:jqmData(prefetch)" ).each(function() { - var $link = $( this ), - url = $link.attr( "href" ); - - if ( url && $.inArray( url, urls ) === -1 ) { - urls.push( url ); - - $.mobile.loadPage( url, { role: $link.attr( "data-" + $.mobile.ns + "rel" ),prefetch: true } ); - } - }); - }); - - // TODO ensure that the navigate binding in the content widget happens at the right time - $.mobile.pageContainer.pagecontainer(); - - //set page min-heights to be device specific - $.mobile.document.bind( "pageshow", function() { - - // We need to wait for window.load to make sure that styles have already been rendered, - // otherwise heights of external toolbars will have the wrong value - if ( loadDeferred ) { - loadDeferred.done( $.mobile.resetActivePageHeight ); - } else { - $.mobile.resetActivePageHeight(); - } - }); - $.mobile.window.bind( "throttledresize", $.mobile.resetActivePageHeight ); - - };//navreadyDeferred done callback - - $( function() { domreadyDeferred.resolve(); } ); - - // Account for the possibility that the load event has already fired - if ( document.readyState === "complete" ) { - pageIsFullyLoaded(); - } else { - $.mobile.window.load( pageIsFullyLoaded ); - } - - $.when( domreadyDeferred, $.mobile.navreadyDeferred ).done( function() { $.mobile._registerInternalEvents(); } ); -})( jQuery ); - - -(function( $, window, undefined ) { - - // TODO remove direct references to $.mobile and properties, we should - // favor injection with params to the constructor - $.mobile.Transition = function() { - this.init.apply( this, arguments ); - }; - - $.extend($.mobile.Transition.prototype, { - toPreClass: " ui-page-pre-in", - - init: function( name, reverse, $to, $from ) { - $.extend(this, { - name: name, - reverse: reverse, - $to: $to, - $from: $from, - deferred: new $.Deferred() - }); - }, - - cleanFrom: function() { - this.$from - .removeClass( $.mobile.activePageClass + " out in reverse " + this.name ) - .height( "" ); - }, - - // NOTE overridden by child object prototypes, noop'd here as defaults - beforeDoneIn: function() {}, - beforeDoneOut: function() {}, - beforeStartOut: function() {}, - - doneIn: function() { - this.beforeDoneIn(); - - this.$to.removeClass( "out in reverse " + this.name ).height( "" ); - - this.toggleViewportClass(); - - // In some browsers (iOS5), 3D transitions block the ability to scroll to the desired location during transition - // This ensures we jump to that spot after the fact, if we aren't there already. - if ( $.mobile.window.scrollTop() !== this.toScroll ) { - this.scrollPage(); - } - if ( !this.sequential ) { - this.$to.addClass( $.mobile.activePageClass ); - } - this.deferred.resolve( this.name, this.reverse, this.$to, this.$from, true ); - }, - - doneOut: function( screenHeight, reverseClass, none, preventFocus ) { - this.beforeDoneOut(); - this.startIn( screenHeight, reverseClass, none, preventFocus ); - }, - - hideIn: function( callback ) { - // Prevent flickering in phonegap container: see comments at #4024 regarding iOS - this.$to.css( "z-index", -10 ); - callback.call( this ); - this.$to.css( "z-index", "" ); - }, - - scrollPage: function() { - // By using scrollTo instead of silentScroll, we can keep things better in order - // Just to be precautios, disable scrollstart listening like silentScroll would - $.event.special.scrollstart.enabled = false; - //if we are hiding the url bar or the page was previously scrolled scroll to hide or return to position - if ( $.mobile.hideUrlBar || this.toScroll !== $.mobile.defaultHomeScroll ) { - window.scrollTo( 0, this.toScroll ); - } - - // reenable scrollstart listening like silentScroll would - setTimeout( function() { - $.event.special.scrollstart.enabled = true; - }, 150 ); - }, - - startIn: function( screenHeight, reverseClass, none, preventFocus ) { - this.hideIn(function() { - this.$to.addClass( $.mobile.activePageClass + this.toPreClass ); - - // Send focus to page as it is now display: block - if ( !preventFocus ) { - $.mobile.focusPage( this.$to ); - } - - // Set to page height - this.$to.height( screenHeight + this.toScroll ); - - if ( !none ) { - this.scrollPage(); - } - }); - - this.$to - .removeClass( this.toPreClass ) - .addClass( this.name + " in " + reverseClass ); - - if ( !none ) { - this.$to.animationComplete( $.proxy(function() { - this.doneIn(); - }, this )); - } else { - this.doneIn(); - } - - }, - - startOut: function( screenHeight, reverseClass, none ) { - this.beforeStartOut( screenHeight, reverseClass, none ); - - // Set the from page's height and start it transitioning out - // Note: setting an explicit height helps eliminate tiling in the transitions - this.$from - .height( screenHeight + $.mobile.window.scrollTop() ) - .addClass( this.name + " out" + reverseClass ); - }, - - toggleViewportClass: function() { - $.mobile.pageContainer.toggleClass( "ui-mobile-viewport-transitioning viewport-" + this.name ); - }, - - transition: function() { - // NOTE many of these could be calculated/recorded in the constructor, it's my - // opinion that binding them as late as possible has value with regards to - // better transitions with fewer bugs. Ie, it's not guaranteed that the - // object will be created and transition will be run immediately after as - // it is today. So we wait until transition is invoked to gather the following - var none, - reverseClass = this.reverse ? " reverse" : "", - screenHeight = $.mobile.getScreenHeight(), - maxTransitionOverride = $.mobile.maxTransitionWidth !== false && - $.mobile.window.width() > $.mobile.maxTransitionWidth; - - this.toScroll = $.mobile.navigate.history.getActive().lastScroll || $.mobile.defaultHomeScroll; - - none = !$.support.cssTransitions || !$.support.cssAnimations || - maxTransitionOverride || !this.name || this.name === "none" || - Math.max( $.mobile.window.scrollTop(), this.toScroll ) > - $.mobile.getMaxScrollForTransition(); - - this.toggleViewportClass(); - - if ( this.$from && !none ) { - this.startOut( screenHeight, reverseClass, none ); - } else { - this.doneOut( screenHeight, reverseClass, none, true ); - } - - return this.deferred.promise(); - } - }); -})( jQuery, this ); - - -(function( $ ) { - - $.mobile.SerialTransition = function() { - this.init.apply(this, arguments); - }; - - $.extend($.mobile.SerialTransition.prototype, $.mobile.Transition.prototype, { - sequential: true, - - beforeDoneOut: function() { - if ( this.$from ) { - this.cleanFrom(); - } - }, - - beforeStartOut: function( screenHeight, reverseClass, none ) { - this.$from.animationComplete($.proxy(function() { - this.doneOut( screenHeight, reverseClass, none ); - }, this )); - } - }); - -})( jQuery ); - - -(function( $ ) { - - $.mobile.ConcurrentTransition = function() { - this.init.apply(this, arguments); - }; - - $.extend($.mobile.ConcurrentTransition.prototype, $.mobile.Transition.prototype, { - sequential: false, - - beforeDoneIn: function() { - if ( this.$from ) { - this.cleanFrom(); - } - }, - - beforeStartOut: function( screenHeight, reverseClass, none ) { - this.doneOut( screenHeight, reverseClass, none ); - } - }); - -})( jQuery ); - - -(function( $ ) { - - // generate the handlers from the above - var defaultGetMaxScrollForTransition = function() { - return $.mobile.getScreenHeight() * 3; - }; - - //transition handler dictionary for 3rd party transitions - $.mobile.transitionHandlers = { - "sequential": $.mobile.SerialTransition, - "simultaneous": $.mobile.ConcurrentTransition - }; - - // Make our transition handler the public default. - $.mobile.defaultTransitionHandler = $.mobile.transitionHandlers.sequential; - - $.mobile.transitionFallbacks = {}; - - // If transition is defined, check if css 3D transforms are supported, and if not, if a fallback is specified - $.mobile._maybeDegradeTransition = function( transition ) { - if ( transition && !$.support.cssTransform3d && $.mobile.transitionFallbacks[ transition ] ) { - transition = $.mobile.transitionFallbacks[ transition ]; - } - - return transition; - }; - - // Set the getMaxScrollForTransition to default if no implementation was set by user - $.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defaultGetMaxScrollForTransition; - -})( jQuery ); - -/* -* fallback transition for flip in non-3D supporting browsers (which tend to handle complex transitions poorly in general -*/ - -(function( $, window, undefined ) { - -$.mobile.transitionFallbacks.flip = "fade"; - -})( jQuery, this ); - -/* -* fallback transition for flow in non-3D supporting browsers (which tend to handle complex transitions poorly in general -*/ - -(function( $, window, undefined ) { - -$.mobile.transitionFallbacks.flow = "fade"; - -})( jQuery, this ); - -/* -* fallback transition for pop in non-3D supporting browsers (which tend to handle complex transitions poorly in general -*/ - -(function( $, window, undefined ) { - -$.mobile.transitionFallbacks.pop = "fade"; - -})( jQuery, this ); - -/* -* fallback transition for slide in non-3D supporting browsers (which tend to handle complex transitions poorly in general -*/ - -(function( $, window, undefined ) { - -// Use the simultaneous transitions handler for slide transitions -$.mobile.transitionHandlers.slide = $.mobile.transitionHandlers.simultaneous; - -// Set the slide transitions's fallback to "fade" -$.mobile.transitionFallbacks.slide = "fade"; - -})( jQuery, this ); - -/* -* fallback transition for slidedown in non-3D supporting browsers (which tend to handle complex transitions poorly in general -*/ - -(function( $, window, undefined ) { - -$.mobile.transitionFallbacks.slidedown = "fade"; - -})( jQuery, this ); - -/* -* fallback transition for slidefade in non-3D supporting browsers (which tend to handle complex transitions poorly in general -*/ - -(function( $, window, undefined ) { - -// Set the slide transitions's fallback to "fade" -$.mobile.transitionFallbacks.slidefade = "fade"; - -})( jQuery, this ); - -/* -* fallback transition for slideup in non-3D supporting browsers (which tend to handle complex transitions poorly in general -*/ - -(function( $, window, undefined ) { - -$.mobile.transitionFallbacks.slideup = "fade"; - -})( jQuery, this ); - -/* -* fallback transition for turn in non-3D supporting browsers (which tend to handle complex transitions poorly in general -*/ - -(function( $, window, undefined ) { - -$.mobile.transitionFallbacks.turn = "fade"; - -})( jQuery, this ); - - -(function( $, undefined ) { - -$.mobile.degradeInputs = { - color: false, - date: false, - datetime: false, - "datetime-local": false, - email: false, - month: false, - number: false, - range: "number", - search: "text", - tel: false, - time: false, - url: false, - week: false -}; -// Backcompat remove in 1.5 -$.mobile.page.prototype.options.degradeInputs = $.mobile.degradeInputs; - -// Auto self-init widgets -$.mobile.degradeInputsWithin = function( target ) { - - target = $( target ); - - // Degrade inputs to avoid poorly implemented native functionality - target.find( "input" ).not( $.mobile.page.prototype.keepNativeSelector() ).each(function() { - var element = $( this ), - type = this.getAttribute( "type" ), - optType = $.mobile.degradeInputs[ type ] || "text", - html, hasType, findstr, repstr; - - if ( $.mobile.degradeInputs[ type ] ) { - html = $( "<div>" ).html( element.clone() ).html(); - // In IE browsers, the type sometimes doesn't exist in the cloned markup, so we replace the closing tag instead - hasType = html.indexOf( " type=" ) > -1; - findstr = hasType ? /\s+type=["']?\w+['"]?/ : /\/?>/; - repstr = " type=\"" + optType + "\" data-" + $.mobile.ns + "type=\"" + type + "\"" + ( hasType ? "" : ">" ); - - element.replaceWith( html.replace( findstr, repstr ) ); - } - }); - -}; - -})( jQuery ); - -(function( $, window, undefined ) { - -$.widget( "mobile.page", $.mobile.page, { - options: { - - // Accepts left, right and none - closeBtn: "left", - closeBtnText: "Close", - overlayTheme: "a", - corners: true, - dialog: false - }, - - _create: function() { - this._super(); - if ( this.options.dialog ) { - - $.extend( this, { - _inner: this.element.children(), - _headerCloseButton: null - }); - - if ( !this.options.enhanced ) { - this._setCloseBtn( this.options.closeBtn ); - } - } - }, - - _enhance: function() { - this._super(); - - // Class the markup for dialog styling and wrap interior - if ( this.options.dialog ) { - this.element.addClass( "ui-dialog" ) - .wrapInner( $( "<div/>", { - - // ARIA role - "role" : "dialog", - "class" : "ui-dialog-contain ui-overlay-shadow" + - ( this.options.corners ? " ui-corner-all" : "" ) - })); - } - }, - - _setOptions: function( options ) { - var closeButtonLocation, closeButtonText, - currentOpts = this.options; - - if ( options.corners !== undefined ) { - this._inner.toggleClass( "ui-corner-all", !!options.corners ); - } - - if ( options.overlayTheme !== undefined ) { - if ( $.mobile.activePage[ 0 ] === this.element[ 0 ] ) { - currentOpts.overlayTheme = options.overlayTheme; - this._handlePageBeforeShow(); - } - } - - if ( options.closeBtnText !== undefined ) { - closeButtonLocation = currentOpts.closeBtn; - closeButtonText = options.closeBtnText; - } - - if ( options.closeBtn !== undefined ) { - closeButtonLocation = options.closeBtn; - } - - if ( closeButtonLocation ) { - this._setCloseBtn( closeButtonLocation, closeButtonText ); - } - - this._super( options ); - }, - - _handlePageBeforeShow: function () { - if ( this.options.overlayTheme && this.options.dialog ) { - this.removeContainerBackground(); - this.setContainerBackground( this.options.overlayTheme ); - } else { - this._super(); - } - }, - - _setCloseBtn: function( location, text ) { - var dst, - btn = this._headerCloseButton; - - // Sanitize value - location = "left" === location ? "left" : "right" === location ? "right" : "none"; - - if ( "none" === location ) { - if ( btn ) { - btn.remove(); - btn = null; - } - } else if ( btn ) { - btn.removeClass( "ui-btn-left ui-btn-right" ).addClass( "ui-btn-" + location ); - if ( text ) { - btn.text( text ); - } - } else { - dst = this._inner.find( ":jqmData(role='header')" ).first(); - btn = $( "<a></a>", { - "href": "#", - "class": "ui-btn ui-corner-all ui-icon-delete ui-btn-icon-notext ui-btn-" + location - }) - .attr( "data-" + $.mobile.ns + "rel", "back" ) - .text( text || this.options.closeBtnText || "" ) - .prependTo( dst ); - } - - this._headerCloseButton = btn; - } -}); - -})( jQuery, this ); - -(function( $, window, undefined ) { - -$.widget( "mobile.dialog", { - options: { - - // Accepts left, right and none - closeBtn: "left", - closeBtnText: "Close", - overlayTheme: "a", - corners: true - }, - - // Override the theme set by the page plugin on pageshow - _handlePageBeforeShow: function() { - this._isCloseable = true; - if ( this.options.overlayTheme ) { - this.element - .page( "removeContainerBackground" ) - .page( "setContainerBackground", this.options.overlayTheme ); - } - }, - - _handlePageBeforeHide: function() { - this._isCloseable = false; - }, - - // click and submit events: - // - clicks and submits should use the closing transition that the dialog - // opened with unless a data-transition is specified on the link/form - // - if the click was on the close button, or the link has a data-rel="back" - // it'll go back in history naturally - _handleVClickSubmit: function( event ) { - var attrs, - $target = $( event.target ).closest( event.type === "vclick" ? "a" : "form" ); - - if ( $target.length && !$target.jqmData( "transition" ) ) { - attrs = {}; - attrs[ "data-" + $.mobile.ns + "transition" ] = - ( $.mobile.navigate.history.getActive() || {} )[ "transition" ] || - $.mobile.defaultDialogTransition; - attrs[ "data-" + $.mobile.ns + "direction" ] = "reverse"; - $target.attr( attrs ); - } - }, - - _create: function() { - var elem = this.element, - opts = this.options; - - // Class the markup for dialog styling and wrap interior - elem.addClass( "ui-dialog" ) - .wrapInner( $( "<div/>", { - - // ARIA role - "role" : "dialog", - "class" : "ui-dialog-contain ui-overlay-shadow" + - ( !!opts.corners ? " ui-corner-all" : "" ) - })); - - $.extend( this, { - _isCloseable: false, - _inner: elem.children(), - _headerCloseButton: null - }); - - this._on( elem, { - vclick: "_handleVClickSubmit", - submit: "_handleVClickSubmit", - pagebeforeshow: "_handlePageBeforeShow", - pagebeforehide: "_handlePageBeforeHide" - }); - - this._setCloseBtn( opts.closeBtn ); - }, - - _setOptions: function( options ) { - var closeButtonLocation, closeButtonText, - currentOpts = this.options; - - if ( options.corners !== undefined ) { - this._inner.toggleClass( "ui-corner-all", !!options.corners ); - } - - if ( options.overlayTheme !== undefined ) { - if ( $.mobile.activePage[ 0 ] === this.element[ 0 ] ) { - currentOpts.overlayTheme = options.overlayTheme; - this._handlePageBeforeShow(); - } - } - - if ( options.closeBtnText !== undefined ) { - closeButtonLocation = currentOpts.closeBtn; - closeButtonText = options.closeBtnText; - } - - if ( options.closeBtn !== undefined ) { - closeButtonLocation = options.closeBtn; - } - - if ( closeButtonLocation ) { - this._setCloseBtn( closeButtonLocation, closeButtonText ); - } - - this._super( options ); - }, - - _setCloseBtn: function( location, text ) { - var dst, - btn = this._headerCloseButton; - - // Sanitize value - location = "left" === location ? "left" : "right" === location ? "right" : "none"; - - if ( "none" === location ) { - if ( btn ) { - btn.remove(); - btn = null; - } - } else if ( btn ) { - btn.removeClass( "ui-btn-left ui-btn-right" ).addClass( "ui-btn-" + location ); - if ( text ) { - btn.text( text ); - } - } else { - dst = this._inner.find( ":jqmData(role='header')" ).first(); - btn = $( "<a></a>", { - "role": "button", - "href": "#", - "class": "ui-btn ui-corner-all ui-icon-delete ui-btn-icon-notext ui-btn-" + location - }) - .text( text || this.options.closeBtnText || "" ) - .prependTo( dst ); - this._on( btn, { click: "close" } ); - } - - this._headerCloseButton = btn; - }, - - // Close method goes back in history - close: function() { - var hist = $.mobile.navigate.history; - - if ( this._isCloseable ) { - this._isCloseable = false; - // If the hash listening is enabled and there is at least one preceding history - // entry it's ok to go back. Initial pages with the dialog hash state are an example - // where the stack check is necessary - if ( $.mobile.hashListeningEnabled && hist.activeIndex > 0 ) { - $.mobile.back(); - } else { - $.mobile.pageContainer.pagecontainer( "back" ); - } - } - } -}); - -})( jQuery, this ); - -(function( $, undefined ) { - -var rInitialLetter = /([A-Z])/g, - - // Construct iconpos class from iconpos value - iconposClass = function( iconpos ) { - return ( "ui-btn-icon-" + ( iconpos === null ? "left" : iconpos ) ); - }; - -$.widget( "mobile.collapsible", { - options: { - enhanced: false, - expandCueText: null, - collapseCueText: null, - collapsed: true, - heading: "h1,h2,h3,h4,h5,h6,legend", - collapsedIcon: null, - expandedIcon: null, - iconpos: null, - theme: null, - contentTheme: null, - inset: null, - corners: null, - mini: null - }, - - _create: function() { - var elem = this.element, - ui = { - accordion: elem - .closest( ":jqmData(role='collapsible-set')," + - ":jqmData(role='collapsibleset')" + - ( $.mobile.collapsibleset ? ", :mobile-collapsibleset" : - "" ) ) - .addClass( "ui-collapsible-set" ) - }; - - this._ui = ui; - this._renderedOptions = this._getOptions( this.options ); - - if ( this.options.enhanced ) { - ui.heading = this.element.children( ".ui-collapsible-heading" ); - ui.content = ui.heading.next(); - ui.anchor = ui.heading.children(); - ui.status = ui.anchor.children( ".ui-collapsible-heading-status" ); - } else { - this._enhance( elem, ui ); - } - - this._on( ui.heading, { - "tap": function() { - ui.heading.find( "a" ).first().addClass( $.mobile.activeBtnClass ); - }, - - "click": function( event ) { - this._handleExpandCollapse( !ui.heading.hasClass( "ui-collapsible-heading-collapsed" ) ); - event.preventDefault(); - event.stopPropagation(); - } - }); - }, - - // Adjust the keys inside options for inherited values - _getOptions: function( options ) { - var key, - accordion = this._ui.accordion, - accordionWidget = this._ui.accordionWidget; - - // Copy options - options = $.extend( {}, options ); - - if ( accordion.length && !accordionWidget ) { - this._ui.accordionWidget = - accordionWidget = accordion.data( "mobile-collapsibleset" ); - } - - for ( key in options ) { - - // Retrieve the option value first from the options object passed in and, if - // null, from the parent accordion or, if that's null too, or if there's no - // parent accordion, then from the defaults. - options[ key ] = - ( options[ key ] != null ) ? options[ key ] : - ( accordionWidget ) ? accordionWidget.options[ key ] : - accordion.length ? $.mobile.getAttribute( accordion[ 0 ], - key.replace( rInitialLetter, "-$1" ).toLowerCase() ): - null; - - if ( null == options[ key ] ) { - options[ key ] = $.mobile.collapsible.defaults[ key ]; - } - } - - return options; - }, - - _themeClassFromOption: function( prefix, value ) { - return ( value ? ( value === "none" ? "" : prefix + value ) : "" ); - }, - - _enhance: function( elem, ui ) { - var iconclass, - opts = this._renderedOptions, - contentThemeClass = this._themeClassFromOption( "ui-body-", opts.contentTheme ); - - elem.addClass( "ui-collapsible " + - ( opts.inset ? "ui-collapsible-inset " : "" ) + - ( opts.inset && opts.corners ? "ui-corner-all " : "" ) + - ( contentThemeClass ? "ui-collapsible-themed-content " : "" ) ); - ui.originalHeading = elem.children( this.options.heading ).first(), - ui.content = elem - .wrapInner( "<div " + - "class='ui-collapsible-content " + - contentThemeClass + "'></div>" ) - .children( ".ui-collapsible-content" ), - ui.heading = ui.originalHeading; - - // Replace collapsibleHeading if it's a legend - if ( ui.heading.is( "legend" ) ) { - ui.heading = $( "<div role='heading'>"+ ui.heading.html() +"</div>" ); - ui.placeholder = $( "<div><!-- placeholder for legend --></div>" ).insertBefore( ui.originalHeading ); - ui.originalHeading.remove(); - } - - iconclass = ( opts.collapsed ? ( opts.collapsedIcon ? "ui-icon-" + opts.collapsedIcon : "" ): - ( opts.expandedIcon ? "ui-icon-" + opts.expandedIcon : "" ) ); - - ui.status = $( "<span class='ui-collapsible-heading-status'></span>" ); - ui.anchor = ui.heading - .detach() - //modify markup & attributes - .addClass( "ui-collapsible-heading" ) - .append( ui.status ) - .wrapInner( "<a href='#' class='ui-collapsible-heading-toggle'></a>" ) - .find( "a" ) - .first() - .addClass( "ui-btn " + - ( iconclass ? iconclass + " " : "" ) + - ( iconclass ? iconposClass( opts.iconpos ) + - " " : "" ) + - this._themeClassFromOption( "ui-btn-", opts.theme ) + " " + - ( opts.mini ? "ui-mini " : "" ) ); - - //drop heading in before content - ui.heading.insertBefore( ui.content ); - - this._handleExpandCollapse( this.options.collapsed ); - - return ui; - }, - - refresh: function() { - this._applyOptions( this.options ); - this._renderedOptions = this._getOptions( this.options ); - }, - - _applyOptions: function( options ) { - var isCollapsed, newTheme, oldTheme, hasCorners, hasIcon, - elem = this.element, - currentOpts = this._renderedOptions, - ui = this._ui, - anchor = ui.anchor, - status = ui.status, - opts = this._getOptions( options ); - - // First and foremost we need to make sure the collapsible is in the proper - // state, in case somebody decided to change the collapsed option at the - // same time as another option - if ( options.collapsed !== undefined ) { - this._handleExpandCollapse( options.collapsed ); - } - - isCollapsed = elem.hasClass( "ui-collapsible-collapsed" ); - - // We only need to apply the cue text for the current state right away. - // The cue text for the alternate state will be stored in the options - // and applied the next time the collapsible's state is toggled - if ( isCollapsed ) { - if ( opts.expandCueText !== undefined ) { - status.text( opts.expandCueText ); - } - } else { - if ( opts.collapseCueText !== undefined ) { - status.text( opts.collapseCueText ); - } - } - - // Update icon - - // Is it supposed to have an icon? - hasIcon = - - // If the collapsedIcon is being set, consult that - ( opts.collapsedIcon !== undefined ? opts.collapsedIcon !== false : - - // Otherwise consult the existing option value - currentOpts.collapsedIcon !== false ); - - - // If any icon-related options have changed, make sure the new icon - // state is reflected by first removing all icon-related classes - // reflecting the current state and then adding all icon-related - // classes for the new state - if ( !( opts.iconpos === undefined && - opts.collapsedIcon === undefined && - opts.expandedIcon === undefined ) ) { - - // Remove all current icon-related classes - anchor.removeClass( [ iconposClass( currentOpts.iconpos ) ] - .concat( ( currentOpts.expandedIcon ? - [ "ui-icon-" + currentOpts.expandedIcon ] : [] ) ) - .concat( ( currentOpts.collapsedIcon ? - [ "ui-icon-" + currentOpts.collapsedIcon ] : [] ) ) - .join( " " ) ); - - // Add new classes if an icon is supposed to be present - if ( hasIcon ) { - anchor.addClass( - [ iconposClass( opts.iconpos !== undefined ? - opts.iconpos : currentOpts.iconpos ) ] - .concat( isCollapsed ? - [ "ui-icon-" + ( opts.collapsedIcon !== undefined ? - opts.collapsedIcon : - currentOpts.collapsedIcon ) ] : - [ "ui-icon-" + ( opts.expandedIcon !== undefined ? - opts.expandedIcon : - currentOpts.expandedIcon ) ] ) - .join( " " ) ); - } - } - - if ( opts.theme !== undefined ) { - oldTheme = this._themeClassFromOption( "ui-btn-", currentOpts.theme ); - newTheme = this._themeClassFromOption( "ui-btn-", opts.theme ); - anchor.removeClass( oldTheme ).addClass( newTheme ); - } - - if ( opts.contentTheme !== undefined ) { - oldTheme = this._themeClassFromOption( "ui-body-", - currentOpts.contentTheme ); - newTheme = this._themeClassFromOption( "ui-body-", - opts.contentTheme ); - ui.content.removeClass( oldTheme ).addClass( newTheme ); - } - - if ( opts.inset !== undefined ) { - elem.toggleClass( "ui-collapsible-inset", opts.inset ); - hasCorners = !!( opts.inset && ( opts.corners || currentOpts.corners ) ); - } - - if ( opts.corners !== undefined ) { - hasCorners = !!( opts.corners && ( opts.inset || currentOpts.inset ) ); - } - - if ( hasCorners !== undefined ) { - elem.toggleClass( "ui-corner-all", hasCorners ); - } - - if ( opts.mini !== undefined ) { - anchor.toggleClass( "ui-mini", opts.mini ); - } - }, - - _setOptions: function( options ) { - this._applyOptions( options ); - this._super( options ); - this._renderedOptions = this._getOptions( this.options ); - }, - - _handleExpandCollapse: function( isCollapse ) { - var opts = this._renderedOptions, - ui = this._ui; - - ui.status.text( isCollapse ? opts.expandCueText : opts.collapseCueText ); - ui.heading - .toggleClass( "ui-collapsible-heading-collapsed", isCollapse ) - .find( "a" ).first() - .toggleClass( "ui-icon-" + opts.expandedIcon, !isCollapse ) - - // logic or cause same icon for expanded/collapsed state would remove the ui-icon-class - .toggleClass( "ui-icon-" + opts.collapsedIcon, ( isCollapse || opts.expandedIcon === opts.collapsedIcon ) ) - .removeClass( $.mobile.activeBtnClass ); - - this.element.toggleClass( "ui-collapsible-collapsed", isCollapse ); - ui.content - .toggleClass( "ui-collapsible-content-collapsed", isCollapse ) - .attr( "aria-hidden", isCollapse ) - .trigger( "updatelayout" ); - this.options.collapsed = isCollapse; - this._trigger( isCollapse ? "collapse" : "expand" ); - }, - - expand: function() { - this._handleExpandCollapse( false ); - }, - - collapse: function() { - this._handleExpandCollapse( true ); - }, - - _destroy: function() { - var ui = this._ui, - opts = this.options; - - if ( opts.enhanced ) { - return; - } - - if ( ui.placeholder ) { - ui.originalHeading.insertBefore( ui.placeholder ); - ui.placeholder.remove(); - ui.heading.remove(); - } else { - ui.status.remove(); - ui.heading - .removeClass( "ui-collapsible-heading ui-collapsible-heading-collapsed" ) - .children() - .contents() - .unwrap(); - } - - ui.anchor.contents().unwrap(); - ui.content.contents().unwrap(); - this.element - .removeClass( "ui-collapsible ui-collapsible-collapsed " + - "ui-collapsible-themed-content ui-collapsible-inset ui-corner-all" ); - } -}); - -// Defaults to be used by all instances of collapsible if per-instance values -// are unset or if nothing is specified by way of inheritance from an accordion. -// Note that this hash does not contain options "collapsed" or "heading", -// because those are not inheritable. -$.mobile.collapsible.defaults = { - expandCueText: " click to expand contents", - collapseCueText: " click to collapse contents", - collapsedIcon: "plus", - contentTheme: "inherit", - expandedIcon: "minus", - iconpos: "left", - inset: true, - corners: true, - theme: "inherit", - mini: false -}; - -})( jQuery ); - -(function( $, undefined ) { - -var uiScreenHiddenRegex = /\bui-screen-hidden\b/; -function noHiddenClass( elements ) { - var index, - length = elements.length, - result = []; - - for ( index = 0; index < length; index++ ) { - if ( !elements[ index ].className.match( uiScreenHiddenRegex ) ) { - result.push( elements[ index ] ); - } - } - - return $( result ); -} - -$.mobile.behaviors.addFirstLastClasses = { - _getVisibles: function( $els, create ) { - var visibles; - - if ( create ) { - visibles = noHiddenClass( $els ); - } else { - visibles = $els.filter( ":visible" ); - if ( visibles.length === 0 ) { - visibles = noHiddenClass( $els ); - } - } - - return visibles; - }, - - _addFirstLastClasses: function( $els, $visibles, create ) { - $els.removeClass( "ui-first-child ui-last-child" ); - $visibles.eq( 0 ).addClass( "ui-first-child" ).end().last().addClass( "ui-last-child" ); - if ( !create ) { - this.element.trigger( "updatelayout" ); - } - }, - - _removeFirstLastClasses: function( $els ) { - $els.removeClass( "ui-first-child ui-last-child" ); - } -}; - -})( jQuery ); - -(function( $, undefined ) { - -var childCollapsiblesSelector = ":mobile-collapsible, " + $.mobile.collapsible.initSelector; - -$.widget( "mobile.collapsibleset", $.extend( { - - // The initSelector is deprecated as of 1.4.0. In 1.5.0 we will use - // :jqmData(role='collapsibleset') which will allow us to get rid of the line - // below altogether, because the autoinit will generate such an initSelector - initSelector: ":jqmData(role='collapsible-set'),:jqmData(role='collapsibleset')", - - options: $.extend( { - enhanced: false - }, $.mobile.collapsible.defaults ), - - _handleCollapsibleExpand: function( event ) { - var closestCollapsible = $( event.target ).closest( ".ui-collapsible" ); - - if ( closestCollapsible.parent().is( ":mobile-collapsibleset, :jqmData(role='collapsible-set')" ) ) { - closestCollapsible - .siblings( ".ui-collapsible:not(.ui-collapsible-collapsed)" ) - .collapsible( "collapse" ); - } - }, - - _create: function() { - var elem = this.element, - opts = this.options; - - $.extend( this, { - _classes: "" - }); - - if ( !opts.enhanced ) { - elem.addClass( "ui-collapsible-set " + - this._themeClassFromOption( "ui-group-theme-", opts.theme ) + " " + - ( opts.corners && opts.inset ? "ui-corner-all " : "" ) ); - this.element.find( $.mobile.collapsible.initSelector ).collapsible(); - } - - this._on( elem, { collapsibleexpand: "_handleCollapsibleExpand" } ); - }, - - _themeClassFromOption: function( prefix, value ) { - return ( value ? ( value === "none" ? "" : prefix + value ) : "" ); - }, - - _init: function() { - this._refresh( true ); - - // Because the corners are handled by the collapsible itself and the default state is collapsed - // That was causing https://github.com/jquery/jquery-mobile/issues/4116 - this.element - .children( childCollapsiblesSelector ) - .filter( ":jqmData(collapsed='false')" ) - .collapsible( "expand" ); - }, - - _setOptions: function( options ) { - var ret, hasCorners, - elem = this.element, - themeClass = this._themeClassFromOption( "ui-group-theme-", options.theme ); - - if ( themeClass ) { - elem - .removeClass( this._themeClassFromOption( "ui-group-theme-", this.options.theme ) ) - .addClass( themeClass ); - } - - if ( options.inset !== undefined ) { - hasCorners = !!( options.inset && ( options.corners || this.options.corners ) ); - } - - if ( options.corners !== undefined ) { - hasCorners = !!( options.corners && ( options.inset || this.options.inset ) ); - } - - if ( hasCorners !== undefined ) { - elem.toggleClass( "ui-corner-all", hasCorners ); - } - - ret = this._super( options ); - this.element.children( ":mobile-collapsible" ).collapsible( "refresh" ); - return ret; - }, - - _destroy: function() { - var el = this.element; - - this._removeFirstLastClasses( el.children( childCollapsiblesSelector ) ); - el - .removeClass( "ui-collapsible-set ui-corner-all " + - this._themeClassFromOption( "ui-group-theme-", this.options.theme ) ) - .children( ":mobile-collapsible" ) - .collapsible( "destroy" ); - }, - - _refresh: function( create ) { - var collapsiblesInSet = this.element.children( childCollapsiblesSelector ); - - this.element.find( $.mobile.collapsible.initSelector ).not( ".ui-collapsible" ).collapsible(); - - this._addFirstLastClasses( collapsiblesInSet, this._getVisibles( collapsiblesInSet, create ), create ); - }, - - refresh: function() { - this._refresh( false ); - } -}, $.mobile.behaviors.addFirstLastClasses ) ); - -})( jQuery ); - -(function( $, undefined ) { - -// Deprecated in 1.4 -$.fn.fieldcontain = function(/* options */) { - return this.addClass( "ui-field-contain" ); -}; - -})( jQuery ); - -(function( $, undefined ) { - -$.fn.grid = function( options ) { - return this.each(function() { - - var $this = $( this ), - o = $.extend({ - grid: null - }, options ), - $kids = $this.children(), - gridCols = { solo:1, a:2, b:3, c:4, d:5 }, - grid = o.grid, - iterator, - letter; - - if ( !grid ) { - if ( $kids.length <= 5 ) { - for ( letter in gridCols ) { - if ( gridCols[ letter ] === $kids.length ) { - grid = letter; - } - } - } else { - grid = "a"; - $this.addClass( "ui-grid-duo" ); - } - } - iterator = gridCols[grid]; - - $this.addClass( "ui-grid-" + grid ); - - $kids.filter( ":nth-child(" + iterator + "n+1)" ).addClass( "ui-block-a" ); - - if ( iterator > 1 ) { - $kids.filter( ":nth-child(" + iterator + "n+2)" ).addClass( "ui-block-b" ); - } - if ( iterator > 2 ) { - $kids.filter( ":nth-child(" + iterator + "n+3)" ).addClass( "ui-block-c" ); - } - if ( iterator > 3 ) { - $kids.filter( ":nth-child(" + iterator + "n+4)" ).addClass( "ui-block-d" ); - } - if ( iterator > 4 ) { - $kids.filter( ":nth-child(" + iterator + "n+5)" ).addClass( "ui-block-e" ); - } - }); -}; -})( jQuery ); - -(function( $, undefined ) { - -$.widget( "mobile.navbar", { - options: { - iconpos: "top", - grid: null - }, - - _create: function() { - - var $navbar = this.element, - $navbtns = $navbar.find( "a, button" ), - iconpos = $navbtns.filter( ":jqmData(icon)" ).length ? this.options.iconpos : undefined; - - $navbar.addClass( "ui-navbar" ) - .attr( "role", "navigation" ) - .find( "ul" ) - .jqmEnhanceable() - .grid({ grid: this.options.grid }); - - $navbtns - .each( function() { - var icon = $.mobile.getAttribute( this, "icon" ), - theme = $.mobile.getAttribute( this, "theme" ), - classes = "ui-btn"; - - if ( theme ) { - classes += " ui-btn-" + theme; - } - if ( icon ) { - classes += " ui-icon-" + icon + " ui-btn-icon-" + iconpos; - } - $( this ).addClass( classes ); - }); - - $navbar.delegate( "a", "vclick", function( /* event */ ) { - var activeBtn = $( this ); - - if ( !( activeBtn.hasClass( "ui-state-disabled" ) || - - // DEPRECATED as of 1.4.0 - remove after 1.4.0 release - // only ui-state-disabled should be present thereafter - activeBtn.hasClass( "ui-disabled" ) || - activeBtn.hasClass( $.mobile.activeBtnClass ) ) ) { - - $navbtns.removeClass( $.mobile.activeBtnClass ); - activeBtn.addClass( $.mobile.activeBtnClass ); - - // The code below is a workaround to fix #1181 - $( document ).one( "pagehide", function() { - activeBtn.removeClass( $.mobile.activeBtnClass ); - }); - } - }); - - // Buttons in the navbar with ui-state-persist class should regain their active state before page show - $navbar.closest( ".ui-page" ).bind( "pagebeforeshow", function() { - $navbtns.filter( ".ui-state-persist" ).addClass( $.mobile.activeBtnClass ); - }); - } -}); - -})( jQuery ); - -(function( $, undefined ) { - -var getAttr = $.mobile.getAttribute; - -$.widget( "mobile.listview", $.extend( { - - options: { - theme: null, - countTheme: null, /* Deprecated in 1.4 */ - dividerTheme: null, - icon: "carat-r", - splitIcon: "carat-r", - splitTheme: null, - corners: true, - shadow: true, - inset: false - }, - - _create: function() { - var t = this, - listviewClasses = ""; - - listviewClasses += t.options.inset ? " ui-listview-inset" : ""; - - if ( !!t.options.inset ) { - listviewClasses += t.options.corners ? " ui-corner-all" : ""; - listviewClasses += t.options.shadow ? " ui-shadow" : ""; - } - - // create listview markup - t.element.addClass( " ui-listview" + listviewClasses ); - - t.refresh( true ); - }, - - // TODO: Remove in 1.5 - _findFirstElementByTagName: function( ele, nextProp, lcName, ucName ) { - var dict = {}; - dict[ lcName ] = dict[ ucName ] = true; - while ( ele ) { - if ( dict[ ele.nodeName ] ) { - return ele; - } - ele = ele[ nextProp ]; - } - return null; - }, - // TODO: Remove in 1.5 - _addThumbClasses: function( containers ) { - var i, img, len = containers.length; - for ( i = 0; i < len; i++ ) { - img = $( this._findFirstElementByTagName( containers[ i ].firstChild, "nextSibling", "img", "IMG" ) ); - if ( img.length ) { - $( this._findFirstElementByTagName( img[ 0 ].parentNode, "parentNode", "li", "LI" ) ).addClass( img.hasClass( "ui-li-icon" ) ? "ui-li-has-icon" : "ui-li-has-thumb" ); - } - } - }, - - _getChildrenByTagName: function( ele, lcName, ucName ) { - var results = [], - dict = {}; - dict[ lcName ] = dict[ ucName ] = true; - ele = ele.firstChild; - while ( ele ) { - if ( dict[ ele.nodeName ] ) { - results.push( ele ); - } - ele = ele.nextSibling; - } - return $( results ); - }, - - _beforeListviewRefresh: $.noop, - _afterListviewRefresh: $.noop, - - refresh: function( create ) { - var buttonClass, pos, numli, item, itemClass, itemTheme, itemIcon, icon, a, - isDivider, startCount, newStartCount, value, last, splittheme, splitThemeClass, spliticon, - altButtonClass, dividerTheme, li, - o = this.options, - $list = this.element, - ol = !!$.nodeName( $list[ 0 ], "ol" ), - start = $list.attr( "start" ), - itemClassDict = {}, - countBubbles = $list.find( ".ui-li-count" ), - countTheme = getAttr( $list[ 0 ], "counttheme" ) || this.options.countTheme, - countThemeClass = countTheme ? "ui-body-" + countTheme : "ui-body-inherit"; - - if ( o.theme ) { - $list.addClass( "ui-group-theme-" + o.theme ); - } - - // Check if a start attribute has been set while taking a value of 0 into account - if ( ol && ( start || start === 0 ) ) { - startCount = parseInt( start, 10 ) - 1; - $list.css( "counter-reset", "listnumbering " + startCount ); - } - - this._beforeListviewRefresh(); - - li = this._getChildrenByTagName( $list[ 0 ], "li", "LI" ); - - for ( pos = 0, numli = li.length; pos < numli; pos++ ) { - item = li.eq( pos ); - itemClass = ""; - - if ( create || item[ 0 ].className.search( /\bui-li-static\b|\bui-li-divider\b/ ) < 0 ) { - a = this._getChildrenByTagName( item[ 0 ], "a", "A" ); - isDivider = ( getAttr( item[ 0 ], "role" ) === "list-divider" ); - value = item.attr( "value" ); - itemTheme = getAttr( item[ 0 ], "theme" ); - - if ( a.length && a[ 0 ].className.search( /\bui-btn\b/ ) < 0 && !isDivider ) { - itemIcon = getAttr( item[ 0 ], "icon" ); - icon = ( itemIcon === false ) ? false : ( itemIcon || o.icon ); - - // TODO: Remove in 1.5 together with links.js (links.js / .ui-link deprecated in 1.4) - a.removeClass( "ui-link" ); - - buttonClass = "ui-btn"; - - if ( itemTheme ) { - buttonClass += " ui-btn-" + itemTheme; - } - - if ( a.length > 1 ) { - itemClass = "ui-li-has-alt"; - - last = a.last(); - splittheme = getAttr( last[ 0 ], "theme" ) || o.splitTheme || getAttr( item[ 0 ], "theme", true ); - splitThemeClass = splittheme ? " ui-btn-" + splittheme : ""; - spliticon = getAttr( last[ 0 ], "icon" ) || getAttr( item[ 0 ], "icon" ) || o.splitIcon; - altButtonClass = "ui-btn ui-btn-icon-notext ui-icon-" + spliticon + splitThemeClass; - - last - .attr( "title", $.trim( last.getEncodedText() ) ) - .addClass( altButtonClass ) - .empty(); - - // Reduce to the first anchor, because only the first gets the buttonClass - a = a.first(); - } else if ( icon ) { - buttonClass += " ui-btn-icon-right ui-icon-" + icon; - } - - // Apply buttonClass to the (first) anchor - a.addClass( buttonClass ); - } else if ( isDivider ) { - dividerTheme = ( getAttr( item[ 0 ], "theme" ) || o.dividerTheme || o.theme ); - - itemClass = "ui-li-divider ui-bar-" + ( dividerTheme ? dividerTheme : "inherit" ); - - item.attr( "role", "heading" ); - } else if ( a.length <= 0 ) { - itemClass = "ui-li-static ui-body-" + ( itemTheme ? itemTheme : "inherit" ); - } - if ( ol && value ) { - newStartCount = parseInt( value , 10 ) - 1; - - item.css( "counter-reset", "listnumbering " + newStartCount ); - } - } - - // Instead of setting item class directly on the list item - // at this point in time, push the item into a dictionary - // that tells us what class to set on it so we can do this after this - // processing loop is finished. - - if ( !itemClassDict[ itemClass ] ) { - itemClassDict[ itemClass ] = []; - } - - itemClassDict[ itemClass ].push( item[ 0 ] ); - } - - // Set the appropriate listview item classes on each list item. - // The main reason we didn't do this - // in the for-loop above is because we can eliminate per-item function overhead - // by calling addClass() and children() once or twice afterwards. This - // can give us a significant boost on platforms like WP7.5. - - for ( itemClass in itemClassDict ) { - $( itemClassDict[ itemClass ] ).addClass( itemClass ); - } - - countBubbles.each( function() { - $( this ).closest( "li" ).addClass( "ui-li-has-count" ); - }); - if ( countThemeClass ) { - countBubbles.not( "[class*='ui-body-']" ).addClass( countThemeClass ); - } - - // Deprecated in 1.4. From 1.5 you have to add class ui-li-has-thumb or ui-li-has-icon to the LI. - this._addThumbClasses( li ); - this._addThumbClasses( li.find( ".ui-btn" ) ); - - this._afterListviewRefresh(); - - this._addFirstLastClasses( li, this._getVisibles( li, create ), create ); - } -}, $.mobile.behaviors.addFirstLastClasses ) ); - -})( jQuery ); - -(function( $, undefined ) { - -function defaultAutodividersSelector( elt ) { - // look for the text in the given element - var text = $.trim( elt.text() ) || null; - - if ( !text ) { - return null; - } - - // create the text for the divider (first uppercased letter) - text = text.slice( 0, 1 ).toUpperCase(); - - return text; -} - -$.widget( "mobile.listview", $.mobile.listview, { - options: { - autodividers: false, - autodividersSelector: defaultAutodividersSelector - }, - - _beforeListviewRefresh: function() { - if ( this.options.autodividers ) { - this._replaceDividers(); - this._superApply( arguments ); - } - }, - - _replaceDividers: function() { - var i, lis, li, dividerText, - lastDividerText = null, - list = this.element, - divider; - - list.children( "li:jqmData(role='list-divider')" ).remove(); - - lis = list.children( "li" ); - - for ( i = 0; i < lis.length ; i++ ) { - li = lis[ i ]; - dividerText = this.options.autodividersSelector( $( li ) ); - - if ( dividerText && lastDividerText !== dividerText ) { - divider = document.createElement( "li" ); - divider.appendChild( document.createTextNode( dividerText ) ); - divider.setAttribute( "data-" + $.mobile.ns + "role", "list-divider" ); - li.parentNode.insertBefore( divider, li ); - } - - lastDividerText = dividerText; - } - } -}); - -})( jQuery ); - -(function( $, undefined ) { - -var rdivider = /(^|\s)ui-li-divider($|\s)/, - rhidden = /(^|\s)ui-screen-hidden($|\s)/; - -$.widget( "mobile.listview", $.mobile.listview, { - options: { - hideDividers: false - }, - - _afterListviewRefresh: function() { - var items, idx, item, hideDivider = true; - - this._superApply( arguments ); - - if ( this.options.hideDividers ) { - items = this._getChildrenByTagName( this.element[ 0 ], "li", "LI" ); - for ( idx = items.length - 1 ; idx > -1 ; idx-- ) { - item = items[ idx ]; - if ( item.className.match( rdivider ) ) { - if ( hideDivider ) { - item.className = item.className + " ui-screen-hidden"; - } - hideDivider = true; - } else { - if ( !item.className.match( rhidden ) ) { - hideDivider = false; - } - } - } - } - } -}); - -})( jQuery ); - -(function( $, undefined ) { - -$.mobile.nojs = function( target ) { - $( ":jqmData(role='nojs')", target ).addClass( "ui-nojs" ); -}; - -})( jQuery ); - -(function( $, undefined ) { - -$.mobile.behaviors.formReset = { - _handleFormReset: function() { - this._on( this.element.closest( "form" ), { - reset: function() { - this._delay( "_reset" ); - } - }); - } -}; - -})( jQuery ); - -/* -* "checkboxradio" plugin -*/ - -(function( $, undefined ) { - -var escapeId = $.mobile.path.hashToSelector; - -$.widget( "mobile.checkboxradio", $.extend( { - - initSelector: "input:not( :jqmData(role='flipswitch' ) )[type='checkbox'],input[type='radio']:not( :jqmData(role='flipswitch' ))", - - options: { - theme: "inherit", - - // Deprecated as of 1.5.0 - mini: false, - wrapperClass: null, - enhanced: false, - iconpos: "left" - - }, - _create: function() { - var input = this.element, - o = this.options, - inheritAttr = function( input, dataAttr ) { - return input.jqmData( dataAttr ) || - input.closest( "form, fieldset" ).jqmData( dataAttr ); - }, - label = this.options.enhanced ? - { - element: this.element.siblings( "label" ), - isParent: false - } : - this._findLabel(), - inputtype = input[0].type, - checkedClass = "ui-" + inputtype + "-on", - uncheckedClass = "ui-" + inputtype + "-off"; - - if ( inputtype !== "checkbox" && inputtype !== "radio" ) { - return; - } - - if ( this.element[0].disabled ) { - this.options.disabled = true; - } - - o.iconpos = inheritAttr( input, "iconpos" ) || - label.element.attr( "data-" + $.mobile.ns + "iconpos" ) || o.iconpos, - - // Deprecated as of 1.5.0 - // Establish options - o.mini = inheritAttr( input, "mini" ) || o.mini; - - // Expose for other methods - $.extend( this, { - input: input, - label: label.element, - labelIsParent: label.isParent, - inputtype: inputtype, - checkedClass: checkedClass, - uncheckedClass: uncheckedClass - }); - - if ( !this.options.enhanced ) { - this._enhance(); - } - - this._on( label.element, { - vmouseover: "_handleLabelVMouseOver", - vclick: "_handleLabelVClick" - }); - - this._on( input, { - vmousedown: "_cacheVals", - vclick: "_handleInputVClick", - focus: "_handleInputFocus", - blur: "_handleInputBlur" - }); - - this._handleFormReset(); - this.refresh(); - }, - - _findLabel: function() { - var parentLabel, label, isParent, - input = this.element, - labelsList = input[ 0 ].labels; - - if( labelsList && labelsList.length > 0 ) { - label = $( labelsList[ 0 ] ); - isParent = $.contains( label[ 0 ], input[ 0 ] ); - } else { - parentLabel = input.closest( "label" ); - isParent = ( parentLabel.length > 0 ); - - // NOTE: Windows Phone could not find the label through a selector - // filter works though. - label = isParent ? parentLabel : - $( this.document[ 0 ].getElementsByTagName( "label" ) ) - .filter( "[for='" + escapeId( input[ 0 ].id ) + "']" ) - .first(); - } - - return { - element: label, - isParent: isParent - }; - }, - - _enhance: function() { - this.label.addClass( "ui-btn ui-corner-all"); - - if ( this.labelIsParent ) { - this.input.add( this.label ).wrapAll( this._wrapper() ); - } else { - //this.element.replaceWith( this.input.add( this.label ).wrapAll( this._wrapper() ) ); - this.element.wrap( this._wrapper() ); - this.element.parent().prepend( this.label ); - } - - // Wrap the input + label in a div - - this._setOptions({ - "theme": this.options.theme, - "iconpos": this.options.iconpos, - "wrapperClass": this.options.wrapperClass, - - // Deprecated as of 1.5.0 - "mini": this.options.mini - }); - - }, - - _wrapper: function() { - return $( "<div class='ui-" + this.inputtype + - ( this.options.disabled ? " ui-state-disabled" : "" ) + "' ></div>" ); - }, - - _handleInputFocus: function() { - this.label.addClass( $.mobile.focusClass ); - }, - - _handleInputBlur: function() { - this.label.removeClass( $.mobile.focusClass ); - }, - - _handleInputVClick: function() { - // Adds checked attribute to checked input when keyboard is used - this.element.prop( "checked", this.element.is( ":checked" ) ); - this._getInputSet().not( this.element ).prop( "checked", false ); - this._updateAll( true ); - }, - - _handleLabelVMouseOver: function( event ) { - if ( this.label.parent().hasClass( "ui-state-disabled" ) ) { - event.stopPropagation(); - } - }, - - _handleLabelVClick: function( event ) { - var input = this.element; - - if ( input.is( ":disabled" ) ) { - event.preventDefault(); - return; - } - - this._cacheVals(); - - input.prop( "checked", this.inputtype === "radio" && true || !input.prop( "checked" ) ); - - // trigger click handler's bound directly to the input as a substitute for - // how label clicks behave normally in the browsers - // TODO: it would be nice to let the browser's handle the clicks and pass them - // through to the associate input. we can swallow that click at the parent - // wrapper element level - input.triggerHandler( "click" ); - - // Input set for common radio buttons will contain all the radio - // buttons, but will not for checkboxes. clearing the checked status - // of other radios ensures the active button state is applied properly - this._getInputSet().not( input ).prop( "checked", false ); - - this._updateAll(); - return false; - }, - - _cacheVals: function() { - this._getInputSet().each( function() { - $( this ).attr("data-" + $.mobile.ns + "cacheVal", this.checked ); - }); - }, - - // Returns those radio buttons that are supposed to be in the same group as - // this radio button. In the case of a checkbox or a radio lacking a name - // attribute, it returns this.element. - _getInputSet: function() { - var selector, formId, - radio = this.element[ 0 ], - name = radio.name, - form = radio.form, - doc = this.element.parents().last().get( 0 ), - - // A radio is always a member of its own group - radios = this.element; - - // Only start running selectors if this is an attached radio button with a name - if ( name && this.inputtype === "radio" && doc ) { - selector = "input[type='radio'][name='" + escapeId( name ) + "']"; - - // If we're inside a form - if ( form ) { - formId = form.getAttribute( "id" ); - - // If the form has an ID, collect radios scattered throught the document which - // nevertheless are part of the form by way of the value of their form attribute - if ( formId ) { - radios = $( selector + "[form='" + escapeId( formId ) + "']", doc ); - } - - // Also add to those the radios in the form itself - radios = $( form ).find( selector ).filter( function() { - - // Some radios inside the form may belong to some other form by virtue of - // having a form attribute defined on them, so we must filter them out here - return ( this.form === form ); - }).add( radios ); - - // If we're outside a form - } else { - - // Collect all those radios which are also outside of a form and match our name - radios = $( selector, doc ).filter( function() { - return !this.form; - }); - } - } - return radios; - }, - - _updateAll: function( changeTriggered ) { - var self = this; - - this._getInputSet().each( function() { - var $this = $( this ); - - if ( ( this.checked || self.inputtype === "checkbox" ) && !changeTriggered ) { - $this.trigger( "change" ); - } - }) - .checkboxradio( "refresh" ); - }, - - _reset: function() { - this.refresh(); - }, - - // Is the widget supposed to display an icon? - _hasIcon: function() { - var controlgroup, controlgroupWidget, - controlgroupConstructor = $.mobile.controlgroup; - - // If the controlgroup widget is defined ... - if ( controlgroupConstructor ) { - controlgroup = this.element.closest( - ":mobile-controlgroup," + - controlgroupConstructor.prototype.initSelector ); - - // ... and the checkbox is in a controlgroup ... - if ( controlgroup.length > 0 ) { - - // ... look for a controlgroup widget instance, and ... - controlgroupWidget = $.data( controlgroup[ 0 ], "mobile-controlgroup" ); - - // ... if found, decide based on the option value, ... - return ( ( controlgroupWidget ? controlgroupWidget.options.type : - - // ... otherwise decide based on the "type" data attribute. - controlgroup.attr( "data-" + $.mobile.ns + "type" ) ) !== "horizontal" ); - } - } - - // Normally, the widget displays an icon. - return true; - }, - - refresh: function() { - var isChecked = this.element[ 0 ].checked, - active = $.mobile.activeBtnClass, - iconposClass = "ui-btn-icon-" + this.options.iconpos, - addClasses = [], - removeClasses = []; - - if ( this._hasIcon() ) { - removeClasses.push( active ); - addClasses.push( iconposClass ); - } else { - removeClasses.push( iconposClass ); - ( isChecked ? addClasses : removeClasses ).push( active ); - } - - if ( isChecked ) { - addClasses.push( this.checkedClass ); - removeClasses.push( this.uncheckedClass ); - } else { - addClasses.push( this.uncheckedClass ); - removeClasses.push( this.checkedClass ); - } - - this.widget().toggleClass( "ui-state-disabled", this.element.prop( "disabled" ) ); - - this.label - .addClass( addClasses.join( " " ) ) - .removeClass( removeClasses.join( " " ) ); - }, - - widget: function() { - return this.label.parent(); - }, - - _setOptions: function( options ) { - var label = this.label, - currentOptions = this.options, - outer = this.widget(), - hasIcon = this._hasIcon(); - - if ( options.disabled !== undefined ) { - this.input.prop( "disabled", !!options.disabled ); - outer.toggleClass( "ui-state-disabled", !!options.disabled ); - } - - // Deprecated as of 1.5.0 - if ( options.mini !== undefined ) { - outer.toggleClass( "ui-mini", !!options.mini ); - } - if ( options.theme !== undefined ) { - label - .removeClass( "ui-btn-" + currentOptions.theme ) - .addClass( "ui-btn-" + options.theme ); - } - if ( options.wrapperClass !== undefined ) { - outer - .removeClass( currentOptions.wrapperClass ) - .addClass( options.wrapperClass ); - } - if ( options.iconpos !== undefined && hasIcon ) { - label.removeClass( "ui-btn-icon-" + currentOptions.iconpos ).addClass( "ui-btn-icon-" + options.iconpos ); - } else if ( !hasIcon ) { - label.removeClass( "ui-btn-icon-" + currentOptions.iconpos ); - } - this._super( options ); - } - -}, $.mobile.behaviors.formReset ) ); - -})( jQuery ); - -(function( $, undefined ) { - -$.widget( "mobile.button", { - - initSelector: "input[type='button'], input[type='submit'], input[type='reset']", - - options: { - theme: null, - icon: null, - iconpos: "left", - iconshadow: false, /* TODO: Deprecated in 1.4, remove in 1.5. */ - corners: true, - shadow: true, - inline: null, - mini: null, - wrapperClass: null, - enhanced: false - }, - - _create: function() { - - if ( this.element.is( ":disabled" ) ) { - this.options.disabled = true; - } - - if ( !this.options.enhanced ) { - this._enhance(); - } - - $.extend( this, { - wrapper: this.element.parent() - }); - - this._on( { - focus: function() { - this.widget().addClass( $.mobile.focusClass ); - }, - - blur: function() { - this.widget().removeClass( $.mobile.focusClass ); - } - }); - - this.refresh( true ); - }, - - _enhance: function() { - this.element.wrap( this._button() ); - }, - - _button: function() { - var options = this.options, - iconClasses = this._getIconClasses( this.options ); - - return $("<div class='ui-btn ui-input-btn" + - ( options.wrapperClass ? " " + options.wrapperClass : "" ) + - ( options.theme ? " ui-btn-" + options.theme : "" ) + - ( options.corners ? " ui-corner-all" : "" ) + - ( options.shadow ? " ui-shadow" : "" ) + - ( options.inline ? " ui-btn-inline" : "" ) + - ( options.mini ? " ui-mini" : "" ) + - ( options.disabled ? " ui-state-disabled" : "" ) + - ( iconClasses ? ( " " + iconClasses ) : "" ) + - "' >" + this.element.val() + "</div>" ); - }, - - widget: function() { - return this.wrapper; - }, - - _destroy: function() { - this.element.insertBefore( this.wrapper ); - this.wrapper.remove(); - }, - - _getIconClasses: function( options ) { - return ( options.icon ? ( "ui-icon-" + options.icon + - ( options.iconshadow ? " ui-shadow-icon" : "" ) + /* TODO: Deprecated in 1.4, remove in 1.5. */ - " ui-btn-icon-" + options.iconpos ) : "" ); - }, - - _setOptions: function( options ) { - var outer = this.widget(); - - if ( options.theme !== undefined ) { - outer - .removeClass( this.options.theme ) - .addClass( "ui-btn-" + options.theme ); - } - if ( options.corners !== undefined ) { - outer.toggleClass( "ui-corner-all", options.corners ); - } - if ( options.shadow !== undefined ) { - outer.toggleClass( "ui-shadow", options.shadow ); - } - if ( options.inline !== undefined ) { - outer.toggleClass( "ui-btn-inline", options.inline ); - } - if ( options.mini !== undefined ) { - outer.toggleClass( "ui-mini", options.mini ); - } - if ( options.disabled !== undefined ) { - this.element.prop( "disabled", options.disabled ); - outer.toggleClass( "ui-state-disabled", options.disabled ); - } - - if ( options.icon !== undefined || - options.iconshadow !== undefined || /* TODO: Deprecated in 1.4, remove in 1.5. */ - options.iconpos !== undefined ) { - outer - .removeClass( this._getIconClasses( this.options ) ) - .addClass( this._getIconClasses( - $.extend( {}, this.options, options ) ) ); - } - - this._super( options ); - }, - - refresh: function( create ) { - var originalElement, - isDisabled = this.element.prop( "disabled" ); - - if ( this.options.icon && this.options.iconpos === "notext" && this.element.attr( "title" ) ) { - this.element.attr( "title", this.element.val() ); - } - if ( !create ) { - originalElement = this.element.detach(); - $( this.wrapper ).text( this.element.val() ).append( originalElement ); - } - if ( this.options.disabled !== isDisabled ) { - this._setOptions({ disabled: isDisabled }); - } - } -}); - -})( jQuery ); - -(function( $ ) { - var meta = $( "meta[name=viewport]" ), - initialContent = meta.attr( "content" ), - disabledZoom = initialContent + ",maximum-scale=1, user-scalable=no", - enabledZoom = initialContent + ",maximum-scale=10, user-scalable=yes", - disabledInitially = /(user-scalable[\s]*=[\s]*no)|(maximum-scale[\s]*=[\s]*1)[$,\s]/.test( initialContent ); - - $.mobile.zoom = $.extend( {}, { - enabled: !disabledInitially, - locked: false, - disable: function( lock ) { - if ( !disabledInitially && !$.mobile.zoom.locked ) { - meta.attr( "content", disabledZoom ); - $.mobile.zoom.enabled = false; - $.mobile.zoom.locked = lock || false; - } - }, - enable: function( unlock ) { - if ( !disabledInitially && ( !$.mobile.zoom.locked || unlock === true ) ) { - meta.attr( "content", enabledZoom ); - $.mobile.zoom.enabled = true; - $.mobile.zoom.locked = false; - } - }, - restore: function() { - if ( !disabledInitially ) { - meta.attr( "content", initialContent ); - $.mobile.zoom.enabled = true; - } - } - }); - -}( jQuery )); - -(function( $, undefined ) { - -$.widget( "mobile.textinput", { - initSelector: "input[type='text']," + - "input[type='search']," + - ":jqmData(type='search')," + - "input[type='number']," + - ":jqmData(type='number')," + - "input[type='password']," + - "input[type='email']," + - "input[type='url']," + - "input[type='tel']," + - "textarea," + - "input[type='time']," + - "input[type='date']," + - "input[type='month']," + - "input[type='week']," + - "input[type='datetime']," + - "input[type='datetime-local']," + - "input[type='color']," + - "input:not([type])," + - "input[type='file']", - - options: { - theme: null, - corners: true, - mini: false, - // This option defaults to true on iOS devices. - preventFocusZoom: /iPhone|iPad|iPod/.test( navigator.platform ) && navigator.userAgent.indexOf( "AppleWebKit" ) > -1, - wrapperClass: "", - enhanced: false - }, - - _create: function() { - - var options = this.options, - isSearch = this.element.is( "[type='search'], :jqmData(type='search')" ), - isTextarea = this.element[ 0 ].tagName === "TEXTAREA", - isRange = this.element.is( "[data-" + ( $.mobile.ns || "" ) + "type='range']" ), - inputNeedsWrap = ( (this.element.is( "input" ) || - this.element.is( "[data-" + ( $.mobile.ns || "" ) + "type='search']" ) ) && - !isRange ); - - if ( this.element.prop( "disabled" ) ) { - options.disabled = true; - } - - $.extend( this, { - classes: this._classesFromOptions(), - isSearch: isSearch, - isTextarea: isTextarea, - isRange: isRange, - inputNeedsWrap: inputNeedsWrap - }); - - this._autoCorrect(); - - if ( !options.enhanced ) { - this._enhance(); - } - - this._on( { - "focus": "_handleFocus", - "blur": "_handleBlur" - }); - - }, - - refresh: function() { - this.setOptions({ - "disabled" : this.element.is( ":disabled" ) - }); - }, - - _enhance: function() { - var elementClasses = []; - - if ( this.isTextarea ) { - elementClasses.push( "ui-input-text" ); - } - - if ( this.isTextarea || this.isRange ) { - elementClasses.push( "ui-shadow-inset" ); - } - - //"search" and "text" input widgets - if ( this.inputNeedsWrap ) { - this.element.wrap( this._wrap() ); - } else { - elementClasses = elementClasses.concat( this.classes ); - } - - this.element.addClass( elementClasses.join( " " ) ); - }, - - widget: function() { - return ( this.inputNeedsWrap ) ? this.element.parent() : this.element; - }, - - _classesFromOptions: function() { - var options = this.options, - classes = []; - - classes.push( "ui-body-" + ( ( options.theme === null ) ? "inherit" : options.theme ) ); - if ( options.corners ) { - classes.push( "ui-corner-all" ); - } - if ( options.mini ) { - classes.push( "ui-mini" ); - } - if ( options.disabled ) { - classes.push( "ui-state-disabled" ); - } - if ( options.wrapperClass ) { - classes.push( options.wrapperClass ); - } - - return classes; - }, - - _wrap: function() { - return $( "<div class='" + - ( this.isSearch ? "ui-input-search " : "ui-input-text " ) + - this.classes.join( " " ) + " " + - "ui-shadow-inset'></div>" ); - }, - - _autoCorrect: function() { - // XXX: Temporary workaround for issue 785 (Apple bug 8910589). - // Turn off autocorrect and autocomplete on non-iOS 5 devices - // since the popup they use can't be dismissed by the user. Note - // that we test for the presence of the feature by looking for - // the autocorrect property on the input element. We currently - // have no test for iOS 5 or newer so we're temporarily using - // the touchOverflow support flag for jQM 1.0. Yes, I feel dirty. - // - jblas - if ( typeof this.element[0].autocorrect !== "undefined" && - !$.support.touchOverflow ) { - - // Set the attribute instead of the property just in case there - // is code that attempts to make modifications via HTML. - this.element[0].setAttribute( "autocorrect", "off" ); - this.element[0].setAttribute( "autocomplete", "off" ); - } - }, - - _handleBlur: function() { - this.widget().removeClass( $.mobile.focusClass ); - if ( this.options.preventFocusZoom ) { - $.mobile.zoom.enable( true ); - } - }, - - _handleFocus: function() { - // In many situations, iOS will zoom into the input upon tap, this - // prevents that from happening - if ( this.options.preventFocusZoom ) { - $.mobile.zoom.disable( true ); - } - this.widget().addClass( $.mobile.focusClass ); - }, - - _setOptions: function ( options ) { - var outer = this.widget(); - - this._super( options ); - - if ( !( options.disabled === undefined && - options.mini === undefined && - options.corners === undefined && - options.theme === undefined && - options.wrapperClass === undefined ) ) { - - outer.removeClass( this.classes.join( " " ) ); - this.classes = this._classesFromOptions(); - outer.addClass( this.classes.join( " " ) ); - } - - if ( options.disabled !== undefined ) { - this.element.prop( "disabled", !!options.disabled ); - } - }, - - _destroy: function() { - if ( this.options.enhanced ) { - return; - } - if ( this.inputNeedsWrap ) { - this.element.unwrap(); - } - this.element.removeClass( "ui-input-text " + this.classes.join( " " ) ); - } -}); - -})( jQuery ); - -(function( $, undefined ) { - -$.widget( "mobile.slider", $.extend( { - initSelector: "input[type='range'], :jqmData(type='range'), :jqmData(role='slider')", - - widgetEventPrefix: "slide", - - options: { - theme: null, - trackTheme: null, - corners: true, - mini: false, - highlight: false - }, - - _create: function() { - - // TODO: Each of these should have comments explain what they're for - var self = this, - control = this.element, - trackTheme = this.options.trackTheme || $.mobile.getAttribute( control[ 0 ], "theme" ), - trackThemeClass = trackTheme ? " ui-bar-" + trackTheme : " ui-bar-inherit", - cornerClass = ( this.options.corners || control.jqmData( "corners" ) ) ? " ui-corner-all" : "", - miniClass = ( this.options.mini || control.jqmData( "mini" ) ) ? " ui-mini" : "", - cType = control[ 0 ].nodeName.toLowerCase(), - isToggleSwitch = ( cType === "select" ), - isRangeslider = control.parent().is( ":jqmData(role='rangeslider')" ), - selectClass = ( isToggleSwitch ) ? "ui-slider-switch" : "", - controlID = control.attr( "id" ), - $label = $( "[for='" + controlID + "']" ), - labelID = $label.attr( "id" ) || controlID + "-label", - min = !isToggleSwitch ? parseFloat( control.attr( "min" ) ) : 0, - max = !isToggleSwitch ? parseFloat( control.attr( "max" ) ) : control.find( "option" ).length-1, - step = window.parseFloat( control.attr( "step" ) || 1 ), - domHandle = document.createElement( "a" ), - handle = $( domHandle ), - domSlider = document.createElement( "div" ), - slider = $( domSlider ), - valuebg = this.options.highlight && !isToggleSwitch ? (function() { - var bg = document.createElement( "div" ); - bg.className = "ui-slider-bg " + $.mobile.activeBtnClass; - return $( bg ).prependTo( slider ); - })() : false, - options, - wrapper, - j, length, - i, optionsCount, origTabIndex, - side, activeClass, sliderImg; - - $label.attr( "id", labelID ); - this.isToggleSwitch = isToggleSwitch; - - domHandle.setAttribute( "href", "#" ); - domSlider.setAttribute( "role", "application" ); - domSlider.className = [ this.isToggleSwitch ? "ui-slider ui-slider-track ui-shadow-inset " : "ui-slider-track ui-shadow-inset ", selectClass, trackThemeClass, cornerClass, miniClass ].join( "" ); - domHandle.className = "ui-slider-handle"; - domSlider.appendChild( domHandle ); - - handle.attr({ - "role": "slider", - "aria-valuemin": min, - "aria-valuemax": max, - "aria-valuenow": this._value(), - "aria-valuetext": this._value(), - "title": this._value(), - "aria-labelledby": labelID - }); - - $.extend( this, { - slider: slider, - handle: handle, - control: control, - type: cType, - step: step, - max: max, - min: min, - valuebg: valuebg, - isRangeslider: isRangeslider, - dragging: false, - beforeStart: null, - userModified: false, - mouseMoved: false - }); - - if ( isToggleSwitch ) { - // TODO: restore original tabindex (if any) in a destroy method - origTabIndex = control.attr( "tabindex" ); - if ( origTabIndex ) { - handle.attr( "tabindex", origTabIndex ); - } - control.attr( "tabindex", "-1" ).focus(function() { - $( this ).blur(); - handle.focus(); - }); - - wrapper = document.createElement( "div" ); - wrapper.className = "ui-slider-inneroffset"; - - for ( j = 0, length = domSlider.childNodes.length; j < length; j++ ) { - wrapper.appendChild( domSlider.childNodes[j] ); - } - - domSlider.appendChild( wrapper ); - - // slider.wrapInner( "<div class='ui-slider-inneroffset'></div>" ); - - // make the handle move with a smooth transition - handle.addClass( "ui-slider-handle-snapping" ); - - options = control.find( "option" ); - - for ( i = 0, optionsCount = options.length; i < optionsCount; i++ ) { - side = !i ? "b" : "a"; - activeClass = !i ? "" : " " + $.mobile.activeBtnClass; - sliderImg = document.createElement( "span" ); - - sliderImg.className = [ "ui-slider-label ui-slider-label-", side, activeClass ].join( "" ); - sliderImg.setAttribute( "role", "img" ); - sliderImg.appendChild( document.createTextNode( options[i].innerHTML ) ); - $( sliderImg ).prependTo( slider ); - } - - self._labels = $( ".ui-slider-label", slider ); - - } - - // monitor the input for updated values - control.addClass( isToggleSwitch ? "ui-slider-switch" : "ui-slider-input" ); - - this._on( control, { - "change": "_controlChange", - "keyup": "_controlKeyup", - "blur": "_controlBlur", - "vmouseup": "_controlVMouseUp" - }); - - slider.bind( "vmousedown", $.proxy( this._sliderVMouseDown, this ) ) - .bind( "vclick", false ); - - // We have to instantiate a new function object for the unbind to work properly - // since the method itself is defined in the prototype (causing it to unbind everything) - this._on( document, { "vmousemove": "_preventDocumentDrag" }); - this._on( slider.add( document ), { "vmouseup": "_sliderVMouseUp" }); - - slider.insertAfter( control ); - - // wrap in a div for styling purposes - if ( !isToggleSwitch && !isRangeslider ) { - wrapper = this.options.mini ? "<div class='ui-slider ui-mini'>" : "<div class='ui-slider'>"; - - control.add( slider ).wrapAll( wrapper ); - } - - // bind the handle event callbacks and set the context to the widget instance - this._on( this.handle, { - "vmousedown": "_handleVMouseDown", - "keydown": "_handleKeydown", - "keyup": "_handleKeyup" - }); - - this.handle.bind( "vclick", false ); - - this._handleFormReset(); - - this.refresh( undefined, undefined, true ); - }, - - _setOptions: function( options ) { - if ( options.theme !== undefined ) { - this._setTheme( options.theme ); - } - - if ( options.trackTheme !== undefined ) { - this._setTrackTheme( options.trackTheme ); - } - - if ( options.corners !== undefined ) { - this._setCorners( options.corners ); - } - - if ( options.mini !== undefined ) { - this._setMini( options.mini ); - } - - if ( options.highlight !== undefined ) { - this._setHighlight( options.highlight ); - } - - if ( options.disabled !== undefined ) { - this._setDisabled( options.disabled ); - } - this._super( options ); - }, - - _controlChange: function( event ) { - // if the user dragged the handle, the "change" event was triggered from inside refresh(); don't call refresh() again - if ( this._trigger( "controlchange", event ) === false ) { - return false; - } - if ( !this.mouseMoved ) { - this.refresh( this._value(), true ); - } - }, - - _controlKeyup: function(/* event */) { // necessary? - this.refresh( this._value(), true, true ); - }, - - _controlBlur: function(/* event */) { - this.refresh( this._value(), true ); - }, - - // it appears the clicking the up and down buttons in chrome on - // range/number inputs doesn't trigger a change until the field is - // blurred. Here we check thif the value has changed and refresh - _controlVMouseUp: function(/* event */) { - this._checkedRefresh(); - }, - - // NOTE force focus on handle - _handleVMouseDown: function(/* event */) { - this.handle.focus(); - }, - - _handleKeydown: function( event ) { - var index = this._value(); - if ( this.options.disabled ) { - return; - } - - // In all cases prevent the default and mark the handle as active - switch ( event.keyCode ) { - case $.mobile.keyCode.HOME: - case $.mobile.keyCode.END: - case $.mobile.keyCode.PAGE_UP: - case $.mobile.keyCode.PAGE_DOWN: - case $.mobile.keyCode.UP: - case $.mobile.keyCode.RIGHT: - case $.mobile.keyCode.DOWN: - case $.mobile.keyCode.LEFT: - event.preventDefault(); - - if ( !this._keySliding ) { - this._keySliding = true; - this.handle.addClass( "ui-state-active" ); /* TODO: We don't use this class for styling. Do we need to add it? */ - } - - break; - } - - // move the slider according to the keypress - switch ( event.keyCode ) { - case $.mobile.keyCode.HOME: - this.refresh( this.min ); - break; - case $.mobile.keyCode.END: - this.refresh( this.max ); - break; - case $.mobile.keyCode.PAGE_UP: - case $.mobile.keyCode.UP: - case $.mobile.keyCode.RIGHT: - this.refresh( index + this.step ); - break; - case $.mobile.keyCode.PAGE_DOWN: - case $.mobile.keyCode.DOWN: - case $.mobile.keyCode.LEFT: - this.refresh( index - this.step ); - break; - } - }, // remove active mark - - _handleKeyup: function(/* event */) { - if ( this._keySliding ) { - this._keySliding = false; - this.handle.removeClass( "ui-state-active" ); /* See comment above. */ - } - }, - - _sliderVMouseDown: function( event ) { - // NOTE: we don't do this in refresh because we still want to - // support programmatic alteration of disabled inputs - if ( this.options.disabled || !( event.which === 1 || event.which === 0 || event.which === undefined ) ) { - return false; - } - if ( this._trigger( "beforestart", event ) === false ) { - return false; - } - this.dragging = true; - this.userModified = false; - this.mouseMoved = false; - - if ( this.isToggleSwitch ) { - this.beforeStart = this.element[0].selectedIndex; - } - - this.refresh( event ); - this._trigger( "start" ); - return false; - }, - - _sliderVMouseUp: function() { - if ( this.dragging ) { - this.dragging = false; - - if ( this.isToggleSwitch ) { - // make the handle move with a smooth transition - this.handle.addClass( "ui-slider-handle-snapping" ); - - if ( this.mouseMoved ) { - // this is a drag, change the value only if user dragged enough - if ( this.userModified ) { - this.refresh( this.beforeStart === 0 ? 1 : 0 ); - } else { - this.refresh( this.beforeStart ); - } - } else { - // this is just a click, change the value - this.refresh( this.beforeStart === 0 ? 1 : 0 ); - } - } - - this.mouseMoved = false; - this._trigger( "stop" ); - return false; - } - }, - - _preventDocumentDrag: function( event ) { - // NOTE: we don't do this in refresh because we still want to - // support programmatic alteration of disabled inputs - if ( this._trigger( "drag", event ) === false) { - return false; - } - if ( this.dragging && !this.options.disabled ) { - - // this.mouseMoved must be updated before refresh() because it will be used in the control "change" event - this.mouseMoved = true; - - if ( this.isToggleSwitch ) { - // make the handle move in sync with the mouse - this.handle.removeClass( "ui-slider-handle-snapping" ); - } - - this.refresh( event ); - - // only after refresh() you can calculate this.userModified - this.userModified = this.beforeStart !== this.element[0].selectedIndex; - return false; - } - }, - - _checkedRefresh: function() { - if ( this.value !== this._value() ) { - this.refresh( this._value() ); - } - }, - - _value: function() { - return this.isToggleSwitch ? this.element[0].selectedIndex : parseFloat( this.element.val() ) ; - }, - - _reset: function() { - this.refresh( undefined, false, true ); - }, - - refresh: function( val, isfromControl, preventInputUpdate ) { - // NOTE: we don't return here because we want to support programmatic - // alteration of the input value, which should still update the slider - - var self = this, - parentTheme = $.mobile.getAttribute( this.element[ 0 ], "theme" ), - theme = this.options.theme || parentTheme, - themeClass = theme ? " ui-btn-" + theme : "", - trackTheme = this.options.trackTheme || parentTheme, - trackThemeClass = trackTheme ? " ui-bar-" + trackTheme : " ui-bar-inherit", - cornerClass = this.options.corners ? " ui-corner-all" : "", - miniClass = this.options.mini ? " ui-mini" : "", - left, width, data, tol, - pxStep, percent, - control, isInput, optionElements, min, max, step, - newval, valModStep, alignValue, percentPerStep, - handlePercent, aPercent, bPercent, - valueChanged; - - self.slider[0].className = [ this.isToggleSwitch ? "ui-slider ui-slider-switch ui-slider-track ui-shadow-inset" : "ui-slider-track ui-shadow-inset", trackThemeClass, cornerClass, miniClass ].join( "" ); - if ( this.options.disabled || this.element.prop( "disabled" ) ) { - this.disable(); - } - - // set the stored value for comparison later - this.value = this._value(); - if ( this.options.highlight && !this.isToggleSwitch && this.slider.find( ".ui-slider-bg" ).length === 0 ) { - this.valuebg = (function() { - var bg = document.createElement( "div" ); - bg.className = "ui-slider-bg " + $.mobile.activeBtnClass; - return $( bg ).prependTo( self.slider ); - })(); - } - this.handle.addClass( "ui-btn" + themeClass + " ui-shadow" ); - - control = this.element; - isInput = !this.isToggleSwitch; - optionElements = isInput ? [] : control.find( "option" ); - min = isInput ? parseFloat( control.attr( "min" ) ) : 0; - max = isInput ? parseFloat( control.attr( "max" ) ) : optionElements.length - 1; - step = ( isInput && parseFloat( control.attr( "step" ) ) > 0 ) ? parseFloat( control.attr( "step" ) ) : 1; - - if ( typeof val === "object" ) { - data = val; - // a slight tolerance helped get to the ends of the slider - tol = 8; - - left = this.slider.offset().left; - width = this.slider.width(); - pxStep = width/((max-min)/step); - if ( !this.dragging || - data.pageX < left - tol || - data.pageX > left + width + tol ) { - return; - } - if ( pxStep > 1 ) { - percent = ( ( data.pageX - left ) / width ) * 100; - } else { - percent = Math.round( ( ( data.pageX - left ) / width ) * 100 ); - } - } else { - if ( val == null ) { - val = isInput ? parseFloat( control.val() || 0 ) : control[0].selectedIndex; - } - percent = ( parseFloat( val ) - min ) / ( max - min ) * 100; - } - - if ( isNaN( percent ) ) { - return; - } - - newval = ( percent / 100 ) * ( max - min ) + min; - - //from jQuery UI slider, the following source will round to the nearest step - valModStep = ( newval - min ) % step; - alignValue = newval - valModStep; - - if ( Math.abs( valModStep ) * 2 >= step ) { - alignValue += ( valModStep > 0 ) ? step : ( -step ); - } - - percentPerStep = 100/((max-min)/step); - // Since JavaScript has problems with large floats, round - // the final value to 5 digits after the decimal point (see jQueryUI: #4124) - newval = parseFloat( alignValue.toFixed(5) ); - - if ( typeof pxStep === "undefined" ) { - pxStep = width / ( (max-min) / step ); - } - if ( pxStep > 1 && isInput ) { - percent = ( newval - min ) * percentPerStep * ( 1 / step ); - } - if ( percent < 0 ) { - percent = 0; - } - - if ( percent > 100 ) { - percent = 100; - } - - if ( newval < min ) { - newval = min; - } - - if ( newval > max ) { - newval = max; - } - - this.handle.css( "left", percent + "%" ); - - this.handle[0].setAttribute( "aria-valuenow", isInput ? newval : optionElements.eq( newval ).attr( "value" ) ); - - this.handle[0].setAttribute( "aria-valuetext", isInput ? newval : optionElements.eq( newval ).getEncodedText() ); - - this.handle[0].setAttribute( "title", isInput ? newval : optionElements.eq( newval ).getEncodedText() ); - - if ( this.valuebg ) { - this.valuebg.css( "width", percent + "%" ); - } - - // drag the label widths - if ( this._labels ) { - handlePercent = this.handle.width() / this.slider.width() * 100; - aPercent = percent && handlePercent + ( 100 - handlePercent ) * percent / 100; - bPercent = percent === 100 ? 0 : Math.min( handlePercent + 100 - aPercent, 100 ); - - this._labels.each(function() { - var ab = $( this ).hasClass( "ui-slider-label-a" ); - $( this ).width( ( ab ? aPercent : bPercent ) + "%" ); - }); - } - - if ( !preventInputUpdate ) { - valueChanged = false; - - // update control"s value - if ( isInput ) { - valueChanged = control.val() !== newval; - control.val( newval ); - } else { - valueChanged = control[ 0 ].selectedIndex !== newval; - control[ 0 ].selectedIndex = newval; - } - if ( this._trigger( "beforechange", val ) === false) { - return false; - } - if ( !isfromControl && valueChanged ) { - control.trigger( "change" ); - } - } - }, - - _setHighlight: function( value ) { - value = !!value; - if ( value ) { - this.options.highlight = !!value; - this.refresh(); - } else if ( this.valuebg ) { - this.valuebg.remove(); - this.valuebg = false; - } - }, - - _setTheme: function( value ) { - this.handle - .removeClass( "ui-btn-" + this.options.theme ) - .addClass( "ui-btn-" + value ); - - var currentTheme = this.options.theme ? this.options.theme : "inherit", - newTheme = value ? value : "inherit"; - - this.control - .removeClass( "ui-body-" + currentTheme ) - .addClass( "ui-body-" + newTheme ); - }, - - _setTrackTheme: function( value ) { - var currentTrackTheme = this.options.trackTheme ? this.options.trackTheme : "inherit", - newTrackTheme = value ? value : "inherit"; - - this.slider - .removeClass( "ui-body-" + currentTrackTheme ) - .addClass( "ui-body-" + newTrackTheme ); - }, - - _setMini: function( value ) { - value = !!value; - if ( !this.isToggleSwitch && !this.isRangeslider ) { - this.slider.parent().toggleClass( "ui-mini", value ); - this.element.toggleClass( "ui-mini", value ); - } - this.slider.toggleClass( "ui-mini", value ); - }, - - _setCorners: function( value ) { - this.slider.toggleClass( "ui-corner-all", value ); - - if ( !this.isToggleSwitch ) { - this.control.toggleClass( "ui-corner-all", value ); - } - }, - - _setDisabled: function( value ) { - value = !!value; - this.element.prop( "disabled", value ); - this.slider - .toggleClass( "ui-state-disabled", value ) - .attr( "aria-disabled", value ); - - this.element.toggleClass( "ui-state-disabled", value ); - } - -}, $.mobile.behaviors.formReset ) ); - -})( jQuery ); - -(function( $, undefined ) { - -var popup; - -function getPopup() { - if ( !popup ) { - popup = $( "<div></div>", { - "class": "ui-slider-popup ui-shadow ui-corner-all" - }); - } - return popup.clone(); -} - -$.widget( "mobile.slider", $.mobile.slider, { - options: { - popupEnabled: false, - showValue: false - }, - - _create: function() { - this._super(); - - $.extend( this, { - _currentValue: null, - _popup: null, - _popupVisible: false - }); - - this._setOption( "popupEnabled", this.options.popupEnabled ); - - this._on( this.handle, { "vmousedown" : "_showPopup" } ); - this._on( this.slider.add( this.document ), { "vmouseup" : "_hidePopup" } ); - this._refresh(); - }, - - // position the popup centered 5px above the handle - _positionPopup: function() { - var dstOffset = this.handle.offset(); - - this._popup.offset( { - left: dstOffset.left + ( this.handle.width() - this._popup.width() ) / 2, - top: dstOffset.top - this._popup.outerHeight() - 5 - }); - }, - - _setOption: function( key, value ) { - this._super( key, value ); - - if ( key === "showValue" ) { - this.handle.html( value && !this.options.mini ? this._value() : "" ); - } else if ( key === "popupEnabled" ) { - if ( value && !this._popup ) { - this._popup = getPopup() - .addClass( "ui-body-" + ( this.options.theme || "a" ) ) - .hide() - .insertBefore( this.element ); - } - } - }, - - // show value on the handle and in popup - refresh: function() { - this._super.apply( this, arguments ); - this._refresh(); - }, - - _refresh: function() { - var o = this.options, newValue; - - if ( o.popupEnabled ) { - // remove the title attribute from the handle (which is - // responsible for the annoying tooltip); NB we have - // to do it here as the jqm slider sets it every time - // the slider's value changes :( - this.handle.removeAttr( "title" ); - } - - newValue = this._value(); - if ( newValue === this._currentValue ) { - return; - } - this._currentValue = newValue; - - if ( o.popupEnabled && this._popup ) { - this._positionPopup(); - this._popup.html( newValue ); - } - - if ( o.showValue && !this.options.mini ) { - this.handle.html( newValue ); - } - }, - - _showPopup: function() { - if ( this.options.popupEnabled && !this._popupVisible ) { - this.handle.html( "" ); - this._popup.show(); - this._positionPopup(); - this._popupVisible = true; - } - }, - - _hidePopup: function() { - var o = this.options; - - if ( o.popupEnabled && this._popupVisible ) { - if ( o.showValue && !o.mini ) { - this.handle.html( this._value() ); - } - this._popup.hide(); - this._popupVisible = false; - } - } -}); - -})( jQuery ); - -(function( $, undefined ) { - -$.widget( "mobile.flipswitch", $.extend({ - - options: { - onText: "On", - offText: "Off", - theme: null, - enhanced: false, - wrapperClass: null, - corners: true, - mini: false - }, - - _create: function() { - if ( !this.options.enhanced ) { - this._enhance(); - } else { - $.extend( this, { - flipswitch: this.element.parent(), - on: this.element.find( ".ui-flipswitch-on" ).eq( 0 ), - off: this.element.find( ".ui-flipswitch-off" ).eq(0), - type: this.element.get( 0 ).tagName - }); - } - - this._handleFormReset(); - - // Transfer tabindex to "on" element and make input unfocusable - this._originalTabIndex = this.element.attr( "tabindex" ); - if ( this._originalTabIndex != null ) { - this.on.attr( "tabindex", this._originalTabIndex ); - } - this.element.attr( "tabindex", "-1" ); - this._on({ - "focus" : "_handleInputFocus" - }); - - if ( this.element.is( ":disabled" ) ) { - this._setOptions({ - "disabled": true - }); - } - - this._on( this.flipswitch, { - "click": "_toggle", - "swipeleft": "_left", - "swiperight": "_right" - }); - - this._on( this.on, { - "keydown": "_keydown" - }); - - this._on( { - "change": "refresh" - }); - }, - - _handleInputFocus: function() { - this.on.focus(); - }, - - widget: function() { - return this.flipswitch; - }, - - _left: function() { - this.flipswitch.removeClass( "ui-flipswitch-active" ); - if ( this.type === "SELECT" ) { - this.element.get( 0 ).selectedIndex = 0; - } else { - this.element.prop( "checked", false ); - } - this.element.trigger( "change" ); - }, - - _right: function() { - this.flipswitch.addClass( "ui-flipswitch-active" ); - if ( this.type === "SELECT" ) { - this.element.get( 0 ).selectedIndex = 1; - } else { - this.element.prop( "checked", true ); - } - this.element.trigger( "change" ); - }, - - _enhance: function() { - var flipswitch = $( "<div>" ), - options = this.options, - element = this.element, - theme = options.theme ? options.theme : "inherit", - - // The "on" button is an anchor so it's focusable - on = $( "<a></a>", { - "href": "#" - }), - off = $( "<span></span>" ), - type = element.get( 0 ).tagName, - onText = ( type === "INPUT" ) ? - options.onText : element.find( "option" ).eq( 1 ).text(), - offText = ( type === "INPUT" ) ? - options.offText : element.find( "option" ).eq( 0 ).text(); - - on - .addClass( "ui-flipswitch-on ui-btn ui-shadow ui-btn-inherit" ) - .text( onText ); - off - .addClass( "ui-flipswitch-off" ) - .text( offText ); - - flipswitch - .addClass( "ui-flipswitch ui-shadow-inset " + - "ui-bar-" + theme + " " + - ( options.wrapperClass ? options.wrapperClass : "" ) + " " + - ( ( element.is( ":checked" ) || - element - .find( "option" ) - .eq( 1 ) - .is( ":selected" ) ) ? "ui-flipswitch-active" : "" ) + - ( element.is(":disabled") ? " ui-state-disabled": "") + - ( options.corners ? " ui-corner-all": "" ) + - ( options.mini ? " ui-mini": "" ) ) - .append( on, off ); - - element - .addClass( "ui-flipswitch-input" ) - .after( flipswitch ) - .appendTo( flipswitch ); - - $.extend( this, { - flipswitch: flipswitch, - on: on, - off: off, - type: type - }); - }, - - _reset: function() { - this.refresh(); - }, - - refresh: function() { - var direction, - existingDirection = this.flipswitch.hasClass( "ui-flipswitch-active" ) ? "_right" : "_left"; - - if ( this.type === "SELECT" ) { - direction = ( this.element.get( 0 ).selectedIndex > 0 ) ? "_right": "_left"; - } else { - direction = this.element.prop( "checked" ) ? "_right": "_left"; - } - - if ( direction !== existingDirection ) { - this[ direction ](); - } - }, - - _toggle: function() { - var direction = this.flipswitch.hasClass( "ui-flipswitch-active" ) ? "_left" : "_right"; - - this[ direction ](); - }, - - _keydown: function( e ) { - if ( e.which === $.mobile.keyCode.LEFT ) { - this._left(); - } else if ( e.which === $.mobile.keyCode.RIGHT ) { - this._right(); - } else if ( e.which === $.mobile.keyCode.SPACE ) { - this._toggle(); - e.preventDefault(); - } - }, - - _setOptions: function( options ) { - if ( options.theme !== undefined ) { - var currentTheme = options.theme ? options.theme : "inherit", - newTheme = options.theme ? options.theme : "inherit"; - - this.widget() - .removeClass( "ui-bar-" + currentTheme ) - .addClass( "ui-bar-" + newTheme ); - } - if ( options.onText !== undefined ) { - this.on.text( options.onText ); - } - if ( options.offText !== undefined ) { - this.off.text( options.offText ); - } - if ( options.disabled !== undefined ) { - this.widget().toggleClass( "ui-state-disabled", options.disabled ); - } - if ( options.mini !== undefined ) { - this.widget().toggleClass( "ui-mini", options.mini ); - } - if ( options.corners !== undefined ) { - this.widget().toggleClass( "ui-corner-all", options.corners ); - } - - this._super( options ); - }, - - _destroy: function() { - if ( this.options.enhanced ) { - return; - } - if ( this._originalTabIndex != null ) { - this.element.attr( "tabindex", this._originalTabIndex ); - } else { - this.element.removeAttr( "tabindex" ); - } - this.on.remove(); - this.off.remove(); - this.element.unwrap(); - this.flipswitch.remove(); - this.removeClass( "ui-flipswitch-input" ); - } - -}, $.mobile.behaviors.formReset ) ); - -})( jQuery ); - -(function( $, undefined ) { - $.widget( "mobile.rangeslider", $.extend( { - - options: { - theme: null, - trackTheme: null, - corners: true, - mini: false, - highlight: true - }, - - _create: function() { - var $el = this.element, - elClass = this.options.mini ? "ui-rangeslider ui-mini" : "ui-rangeslider", - _inputFirst = $el.find( "input" ).first(), - _inputLast = $el.find( "input" ).last(), - _label = $el.find( "label" ).first(), - _sliderWidgetFirst = $.data( _inputFirst.get( 0 ), "mobile-slider" ) || - $.data( _inputFirst.slider().get( 0 ), "mobile-slider" ), - _sliderWidgetLast = $.data( _inputLast.get(0), "mobile-slider" ) || - $.data( _inputLast.slider().get( 0 ), "mobile-slider" ), - _sliderFirst = _sliderWidgetFirst.slider, - _sliderLast = _sliderWidgetLast.slider, - firstHandle = _sliderWidgetFirst.handle, - _sliders = $( "<div class='ui-rangeslider-sliders' />" ).appendTo( $el ); - - _inputFirst.addClass( "ui-rangeslider-first" ); - _inputLast.addClass( "ui-rangeslider-last" ); - $el.addClass( elClass ); - - _sliderFirst.appendTo( _sliders ); - _sliderLast.appendTo( _sliders ); - _label.insertBefore( $el ); - firstHandle.prependTo( _sliderLast ); - - $.extend( this, { - _inputFirst: _inputFirst, - _inputLast: _inputLast, - _sliderFirst: _sliderFirst, - _sliderLast: _sliderLast, - _label: _label, - _targetVal: null, - _sliderTarget: false, - _sliders: _sliders, - _proxy: false - }); - - this.refresh(); - this._on( this.element.find( "input.ui-slider-input" ), { - "slidebeforestart": "_slidebeforestart", - "slidestop": "_slidestop", - "slidedrag": "_slidedrag", - "slidebeforechange": "_change", - "blur": "_change", - "keyup": "_change" - }); - this._on({ - "mousedown":"_change" - }); - this._on( this.element.closest( "form" ), { - "reset":"_handleReset" - }); - this._on( firstHandle, { - "vmousedown": "_dragFirstHandle" - }); - }, - _handleReset: function() { - var self = this; - //we must wait for the stack to unwind before updateing other wise sliders will not have updated yet - setTimeout( function() { - self._updateHighlight(); - },0); - }, - - _dragFirstHandle: function( event ) { - //if the first handle is dragged send the event to the first slider - $.data( this._inputFirst.get(0), "mobile-slider" ).dragging = true; - $.data( this._inputFirst.get(0), "mobile-slider" ).refresh( event ); - $.data( this._inputFirst.get(0), "mobile-slider" )._trigger( "start" ); - return false; - }, - - _slidedrag: function( event ) { - var first = $( event.target ).is( this._inputFirst ), - otherSlider = ( first ) ? this._inputLast : this._inputFirst; - - this._sliderTarget = false; - //if the drag was initiated on an extreme and the other handle is focused send the events to - //the closest handle - if ( ( this._proxy === "first" && first ) || ( this._proxy === "last" && !first ) ) { - $.data( otherSlider.get(0), "mobile-slider" ).dragging = true; - $.data( otherSlider.get(0), "mobile-slider" ).refresh( event ); - return false; - } - }, - - _slidestop: function( event ) { - var first = $( event.target ).is( this._inputFirst ); - - this._proxy = false; - //this stops dragging of the handle and brings the active track to the front - //this makes clicks on the track go the the last handle used - this.element.find( "input" ).trigger( "vmouseup" ); - this._sliderFirst.css( "z-index", first ? 1 : "" ); - }, - - _slidebeforestart: function( event ) { - this._sliderTarget = false; - //if the track is the target remember this and the original value - if ( $( event.originalEvent.target ).hasClass( "ui-slider-track" ) ) { - this._sliderTarget = true; - this._targetVal = $( event.target ).val(); - } - }, - - _setOptions: function( options ) { - if ( options.theme !== undefined ) { - this._setTheme( options.theme ); - } - - if ( options.trackTheme !== undefined ) { - this._setTrackTheme( options.trackTheme ); - } - - if ( options.mini !== undefined ) { - this._setMini( options.mini ); - } - - if ( options.highlight !== undefined ) { - this._setHighlight( options.highlight ); - } - - if ( options.disabled !== undefined ) { - this._setDisabled( options.disabled ); - } - - this._super( options ); - this.refresh(); - }, - - refresh: function() { - var $el = this.element, - o = this.options; - - if ( this._inputFirst.is( ":disabled" ) || this._inputLast.is( ":disabled" ) ) { - this.options.disabled = true; - } - - $el.find( "input" ).slider({ - theme: o.theme, - trackTheme: o.trackTheme, - disabled: o.disabled, - corners: o.corners, - mini: o.mini, - highlight: o.highlight - }).slider( "refresh" ); - this._updateHighlight(); - }, - - _change: function( event ) { - if ( event.type === "keyup" ) { - this._updateHighlight(); - return false; - } - - var self = this, - min = parseFloat( this._inputFirst.val(), 10 ), - max = parseFloat( this._inputLast.val(), 10 ), - first = $( event.target ).hasClass( "ui-rangeslider-first" ), - thisSlider = first ? this._inputFirst : this._inputLast, - otherSlider = first ? this._inputLast : this._inputFirst; - - if ( ( this._inputFirst.val() > this._inputLast.val() && event.type === "mousedown" && !$(event.target).hasClass("ui-slider-handle")) ) { - thisSlider.blur(); - } else if ( event.type === "mousedown" ) { - return; - } - if ( min > max && !this._sliderTarget ) { - //this prevents min from being greater then max - thisSlider.val( first ? max: min ).slider( "refresh" ); - this._trigger( "normalize" ); - } else if ( min > max ) { - //this makes it so clicks on the target on either extreme go to the closest handle - thisSlider.val( this._targetVal ).slider( "refresh" ); - - //You must wait for the stack to unwind so first slider is updated before updating second - setTimeout( function() { - otherSlider.val( first ? min: max ).slider( "refresh" ); - $.data( otherSlider.get(0), "mobile-slider" ).handle.focus(); - self._sliderFirst.css( "z-index", first ? "" : 1 ); - self._trigger( "normalize" ); - }, 0 ); - this._proxy = ( first ) ? "first" : "last"; - } - //fixes issue where when both _sliders are at min they cannot be adjusted - if ( min === max ) { - $.data( thisSlider.get(0), "mobile-slider" ).handle.css( "z-index", 1 ); - $.data( otherSlider.get(0), "mobile-slider" ).handle.css( "z-index", 0 ); - } else { - $.data( otherSlider.get(0), "mobile-slider" ).handle.css( "z-index", "" ); - $.data( thisSlider.get(0), "mobile-slider" ).handle.css( "z-index", "" ); - } - - this._updateHighlight(); - - if ( min >= max ) { - return false; - } - }, - - _updateHighlight: function() { - var min = parseInt( $.data( this._inputFirst.get(0), "mobile-slider" ).handle.get(0).style.left, 10 ), - max = parseInt( $.data( this._inputLast.get(0), "mobile-slider" ).handle.get(0).style.left, 10 ), - width = (max - min); - - this.element.find( ".ui-slider-bg" ).css({ - "margin-left": min + "%", - "width": width + "%" - }); - }, - - _setTheme: function( value ) { - this._inputFirst.slider( "option", "theme", value ); - this._inputLast.slider( "option", "theme", value ); - }, - - _setTrackTheme: function( value ) { - this._inputFirst.slider( "option", "trackTheme", value ); - this._inputLast.slider( "option", "trackTheme", value ); - }, - - _setMini: function( value ) { - this._inputFirst.slider( "option", "mini", value ); - this._inputLast.slider( "option", "mini", value ); - this.element.toggleClass( "ui-mini", !!value ); - }, - - _setHighlight: function( value ) { - this._inputFirst.slider( "option", "highlight", value ); - this._inputLast.slider( "option", "highlight", value ); - }, - - _setDisabled: function( value ) { - this._inputFirst.prop( "disabled", value ); - this._inputLast.prop( "disabled", value ); - }, - - _destroy: function() { - this._label.prependTo( this.element ); - this.element.removeClass( "ui-rangeslider ui-mini" ); - this._inputFirst.after( this._sliderFirst ); - this._inputLast.after( this._sliderLast ); - this._sliders.remove(); - this.element.find( "input" ).removeClass( "ui-rangeslider-first ui-rangeslider-last" ).slider( "destroy" ); - } - - }, $.mobile.behaviors.formReset ) ); - -})( jQuery ); - -(function( $, undefined ) { - - $.widget( "mobile.textinput", $.mobile.textinput, { - options: { - clearBtn: false, - clearBtnText: "Clear text" - }, - - _create: function() { - this._super(); - - if ( this.isSearch ) { - this.options.clearBtn = true; - } - - if ( !!this.options.clearBtn && this.inputNeedsWrap ) { - this._addClearBtn(); - } - }, - - clearButton: function() { - return $( "<a href='#' " + - "class='ui-input-clear ui-btn ui-icon-delete ui-btn-icon-notext ui-corner-all'>" + - "</a>" ) - .attr( "title", this.options.clearBtnText ) - .text( this.options.clearBtnText ); - }, - - _clearBtnClick: function( event ) { - this.element.val( "" ) - .focus() - .trigger( "change" ); - - this._clearBtn.addClass( "ui-input-clear-hidden" ); - event.preventDefault(); - }, - - _addClearBtn: function() { - - if ( !this.options.enhanced ) { - this._enhanceClear(); - } - - $.extend( this, { - _clearBtn: this.widget().find("a.ui-input-clear") - }); - - this._bindClearEvents(); - - this._toggleClear(); - - }, - - _enhanceClear: function() { - - this.clearButton().appendTo( this.widget() ); - this.widget().addClass( "ui-input-has-clear" ); - - }, - - _bindClearEvents: function() { - - this._on( this._clearBtn, { - "click": "_clearBtnClick" - }); - - this._on({ - "keyup": "_toggleClear", - "change": "_toggleClear", - "input": "_toggleClear", - "focus": "_toggleClear", - "blur": "_toggleClear", - "cut": "_toggleClear", - "paste": "_toggleClear" - - }); - - }, - - _unbindClear: function() { - this._off( this._clearBtn, "click"); - this._off( this.element, "keyup change input focus blur cut paste" ); - }, - - _setOptions: function( options ) { - this._super( options ); - - if ( options.clearBtn !== undefined && - !this.element.is( "textarea, :jqmData(type='range')" ) ) { - if ( options.clearBtn ) { - this._addClearBtn(); - } else { - this._destroyClear(); - } - } - - if ( options.clearBtnText !== undefined && this._clearBtn !== undefined ) { - this._clearBtn.text( options.clearBtnText ) - .attr("title", options.clearBtnText); - } - }, - - _toggleClear: function() { - this._delay( "_toggleClearClass", 0 ); - }, - - _toggleClearClass: function() { - this._clearBtn.toggleClass( "ui-input-clear-hidden", !this.element.val() ); - }, - - _destroyClear: function() { - this.widget().removeClass( "ui-input-has-clear" ); - this._unbindClear(); - this._clearBtn.remove(); - }, - - _destroy: function() { - this._super(); - this._destroyClear(); - } - - }); - -})( jQuery ); - -(function( $, undefined ) { - - $.widget( "mobile.textinput", $.mobile.textinput, { - options: { - autogrow:true, - keyupTimeoutBuffer: 100 - }, - - _create: function() { - this._super(); - - if ( this.options.autogrow && this.isTextarea ) { - this._autogrow(); - } - }, - - _autogrow: function() { - this.element.addClass( "ui-textinput-autogrow" ); - - this._on({ - "keyup": "_timeout", - "change": "_timeout", - "input": "_timeout", - "paste": "_timeout" - }); - - // Attach to the various you-have-become-visible notifications that the - // various framework elements emit. - // TODO: Remove all but the updatelayout handler once #6426 is fixed. - this._on( true, this.document, { - - // TODO: Move to non-deprecated event - "pageshow": "_handleShow", - "popupbeforeposition": "_handleShow", - "updatelayout": "_handleShow", - "panelopen": "_handleShow" - }); - }, - - // Synchronously fix the widget height if this widget's parents are such - // that they show/hide content at runtime. We still need to check whether - // the widget is actually visible in case it is contained inside multiple - // such containers. For example: panel contains collapsible contains - // autogrow textinput. The panel may emit "panelopen" indicating that its - // content has become visible, but the collapsible is still collapsed, so - // the autogrow textarea is still not visible. - _handleShow: function( event ) { - if ( $.contains( event.target, this.element[ 0 ] ) && - this.element.is( ":visible" ) ) { - - if ( event.type !== "popupbeforeposition" ) { - this.element - .addClass( "ui-textinput-autogrow-resize" ) - .animationComplete( - $.proxy( function() { - this.element.removeClass( "ui-textinput-autogrow-resize" ); - }, this ), - "transition" ); - } - this._prepareHeightUpdate(); - } - }, - - _unbindAutogrow: function() { - this.element.removeClass( "ui-textinput-autogrow" ); - this._off( this.element, "keyup change input paste" ); - this._off( this.document, - "pageshow popupbeforeposition updatelayout panelopen" ); - }, - - keyupTimeout: null, - - _prepareHeightUpdate: function( delay ) { - if ( this.keyupTimeout ) { - clearTimeout( this.keyupTimeout ); - } - if ( delay === undefined ) { - this._updateHeight(); - } else { - this.keyupTimeout = this._delay( "_updateHeight", delay ); - } - }, - - _timeout: function() { - this._prepareHeightUpdate( this.options.keyupTimeoutBuffer ); - }, - - _updateHeight: function() { - var paddingTop, paddingBottom, paddingHeight, scrollHeight, clientHeight, - borderTop, borderBottom, borderHeight, height, - scrollTop = this.window.scrollTop(); - this.keyupTimeout = 0; - - // IE8 textareas have the onpage property - others do not - if ( !( "onpage" in this.element[ 0 ] ) ) { - this.element.css({ - "height": 0, - "min-height": 0, - "max-height": 0 - }); - } - - scrollHeight = this.element[ 0 ].scrollHeight; - clientHeight = this.element[ 0 ].clientHeight; - borderTop = parseFloat( this.element.css( "border-top-width" ) ); - borderBottom = parseFloat( this.element.css( "border-bottom-width" ) ); - borderHeight = borderTop + borderBottom; - height = scrollHeight + borderHeight + 15; - - // Issue 6179: Padding is not included in scrollHeight and - // clientHeight by Firefox if no scrollbar is visible. Because - // textareas use the border-box box-sizing model, padding should be - // included in the new (assigned) height. Because the height is set - // to 0, clientHeight == 0 in Firefox. Therefore, we can use this to - // check if padding must be added. - if ( clientHeight === 0 ) { - paddingTop = parseFloat( this.element.css( "padding-top" ) ); - paddingBottom = parseFloat( this.element.css( "padding-bottom" ) ); - paddingHeight = paddingTop + paddingBottom; - - height += paddingHeight; - } - - this.element.css({ - "height": height, - "min-height": "", - "max-height": "" - }); - - this.window.scrollTop( scrollTop ); - }, - - refresh: function() { - if ( this.options.autogrow && this.isTextarea ) { - this._updateHeight(); - } - }, - - _setOptions: function( options ) { - - this._super( options ); - - if ( options.autogrow !== undefined && this.isTextarea ) { - if ( options.autogrow ) { - this._autogrow(); - } else { - this._unbindAutogrow(); - } - } - } - - }); -})( jQuery ); - -(function( $, undefined ) { - -$.widget( "mobile.selectmenu", $.extend( { - initSelector: "select:not( :jqmData(role='slider')):not( :jqmData(role='flipswitch') )", - - options: { - theme: null, - icon: "carat-d", - iconpos: "right", - inline: false, - corners: true, - shadow: true, - iconshadow: false, /* TODO: Deprecated in 1.4, remove in 1.5. */ - overlayTheme: null, - dividerTheme: null, - hidePlaceholderMenuItems: true, - closeText: "Close", - nativeMenu: true, - // XXX Sven added wrapper class - wrapperClass: null, - // This option defaults to true on iOS devices. - preventFocusZoom: /iPhone|iPad|iPod/.test( navigator.platform ) && navigator.userAgent.indexOf( "AppleWebKit" ) > -1, - mini: false - }, - - _button: function() { - return $( "<div/>" ); - }, - - _setDisabled: function( value ) { - this.element.attr( "disabled", value ); - this.button.attr( "aria-disabled", value ); - return this._setOption( "disabled", value ); - }, - - _focusButton : function() { - var self = this; - - setTimeout( function() { - self.button.focus(); - }, 40); - }, - - _selectOptions: function() { - return this.select.find( "option" ); - }, - - // setup items that are generally necessary for select menu extension - _preExtension: function() { - var inline = this.options.inline || this.element.jqmData( "inline" ), - mini = this.options.mini || this.element.jqmData( "mini" ), - classes = ""; - // TODO: Post 1.1--once we have time to test thoroughly--any classes manually applied to the original element should be carried over to the enhanced element, with an `-enhanced` suffix. See https://github.com/jquery/jquery-mobile/issues/3577 - /* if ( $el[0].className.length ) { - classes = $el[0].className; - } */ - if ( !!~this.element[0].className.indexOf( "ui-btn-left" ) ) { - classes = " ui-btn-left"; - } - - if ( !!~this.element[0].className.indexOf( "ui-btn-right" ) ) { - classes = " ui-btn-right"; - } - - if ( inline ) { - classes += " ui-btn-inline"; - } - if ( mini ) { - classes += " ui-mini"; - } - - this.select = this.element.removeClass( "ui-btn-left ui-btn-right" ).wrap( "<div class='ui-select" + classes + "'>" ); - this.selectId = this.select.attr( "id" ) || ( "select-" + this.uuid ); - this.buttonId = this.selectId + "-button"; - this.label = $( "label[for='"+ this.selectId +"']" ); - this.isMultiple = this.select[ 0 ].multiple; - }, - - _destroy: function() { - var wrapper = this.element.parents( ".ui-select" ); - if ( wrapper.length > 0 ) { - if ( wrapper.is( ".ui-btn-left, .ui-btn-right" ) ) { - this.element.addClass( wrapper.hasClass( "ui-btn-left" ) ? "ui-btn-left" : "ui-btn-right" ); - } - this.element.insertAfter( wrapper ); - wrapper.remove(); - } - }, - - _create: function() { - this._preExtension(); - - this.button = this._button(); - - var self = this, - - options = this.options, - - iconpos = options.icon ? ( options.iconpos || this.select.jqmData( "iconpos" ) ) : false, - - button = this.button - .insertBefore( this.select ) - .attr( "id", this.buttonId ) - .addClass( "ui-btn" + - ( options.icon ? ( " ui-icon-" + options.icon + " ui-btn-icon-" + iconpos + - ( options.iconshadow ? " ui-shadow-icon" : "" ) ) : "" ) + /* TODO: Remove in 1.5. */ - ( options.theme ? " ui-btn-" + options.theme : "" ) + - ( options.corners ? " ui-corner-all" : "" ) + - // XXX Sven wrapper class - ( options.shadow ? " ui-shadow " : "" ) + - ( options.wrapperClass || "" ) ); - - this.setButtonText(); - - // Opera does not properly support opacity on select elements - // In Mini, it hides the element, but not its text - // On the desktop,it seems to do the opposite - // for these reasons, using the nativeMenu option results in a full native select in Opera - if ( options.nativeMenu && window.opera && window.opera.version ) { - button.addClass( "ui-select-nativeonly" ); - } - - // Add counter for multi selects - if ( this.isMultiple ) { - this.buttonCount = $( "<span>" ) - .addClass( "ui-li-count ui-body-inherit" ) - .hide() - .appendTo( button.addClass( "ui-li-has-count" ) ); - } - - // Disable if specified - if ( options.disabled || this.element.attr( "disabled" )) { - this.disable(); - } - - // Events on native select - this.select.change(function() { - self.refresh(); - - if ( !!options.nativeMenu ) { - this.blur(); - } - }); - - this._handleFormReset(); - - this._on( this.button, { - keydown: "_handleKeydown" - }); - - this.build(); - }, - - build: function() { - var self = this; - - this.select - .appendTo( self.button ) - .bind( "vmousedown", function() { - // Add active class to button - self.button.addClass( $.mobile.activeBtnClass ); - }) - .bind( "focus", function() { - self.button.addClass( $.mobile.focusClass ); - }) - .bind( "blur", function() { - self.button.removeClass( $.mobile.focusClass ); - }) - .bind( "focus vmouseover", function() { - self.button.trigger( "vmouseover" ); - }) - .bind( "vmousemove", function() { - // Remove active class on scroll/touchmove - self.button.removeClass( $.mobile.activeBtnClass ); - }) - .bind( "change blur vmouseout", function() { - self.button.trigger( "vmouseout" ) - .removeClass( $.mobile.activeBtnClass ); - }); - - // In many situations, iOS will zoom into the select upon tap, this prevents that from happening - self.button.bind( "vmousedown", function() { - if ( self.options.preventFocusZoom ) { - $.mobile.zoom.disable( true ); - } - }); - self.label.bind( "click focus", function() { - if ( self.options.preventFocusZoom ) { - $.mobile.zoom.disable( true ); - } - }); - self.select.bind( "focus", function() { - if ( self.options.preventFocusZoom ) { - $.mobile.zoom.disable( true ); - } - }); - self.button.bind( "mouseup", function() { - if ( self.options.preventFocusZoom ) { - setTimeout(function() { - $.mobile.zoom.enable( true ); - }, 0 ); - } - }); - self.select.bind( "blur", function() { - if ( self.options.preventFocusZoom ) { - $.mobile.zoom.enable( true ); - } - }); - - }, - - selected: function() { - return this._selectOptions().filter( ":selected" ); - }, - - selectedIndices: function() { - var self = this; - - return this.selected().map(function() { - return self._selectOptions().index( this ); - }).get(); - }, - - setButtonText: function() { - var self = this, - selected = this.selected(), - text = this.placeholder, - span = $( document.createElement( "span" ) ); - - this.button.children( "span" ).not( ".ui-li-count" ).remove().end().end().prepend( (function() { - if ( selected.length ) { - text = selected.map(function() { - return $( this ).text(); - }).get().join( ", " ); - } else { - text = self.placeholder; - } - - if ( text ) { - span.text( text ); - } else { - - // Set the contents to which we write as   to be XHTML compliant - see gh-6699 - span.html( " " ); - } - - // TODO possibly aggregate multiple select option classes - return span - .addClass( self.select.attr( "class" ) ) - .addClass( selected.attr( "class" ) ) - .removeClass( "ui-screen-hidden" ); - })()); - }, - - setButtonCount: function() { - var selected = this.selected(); - - // multiple count inside button - if ( this.isMultiple ) { - this.buttonCount[ selected.length > 1 ? "show" : "hide" ]().text( selected.length ); - } - }, - - _handleKeydown: function( /* event */ ) { - this._delay( "_refreshButton" ); - }, - - _reset: function() { - this.refresh(); - }, - - _refreshButton: function() { - this.setButtonText(); - this.setButtonCount(); - }, - - refresh: function() { - this._refreshButton(); - }, - - // open and close preserved in native selects - // to simplify users code when looping over selects - open: $.noop, - close: $.noop, - - disable: function() { - this._setDisabled( true ); - this.button.addClass( "ui-state-disabled" ); - }, - - enable: function() { - this._setDisabled( false ); - this.button.removeClass( "ui-state-disabled" ); - } -}, $.mobile.behaviors.formReset ) ); - -})( jQuery ); - -(function( $, undefined ) { - -$.mobile.links = function( target ) { - - //links within content areas, tests included with page - $( target ) - .find( "a" ) - .jqmEnhanceable() - .filter( ":jqmData(rel='popup')[href][href!='']" ) - .each( function() { - // Accessibility info for popups - var element = this, - idref = element.getAttribute( "href" ).substring( 1 ); - - if ( idref ) { - element.setAttribute( "aria-haspopup", true ); - element.setAttribute( "aria-owns", idref ); - element.setAttribute( "aria-expanded", false ); - } - }) - .end() - .not( ".ui-btn, :jqmData(role='none'), :jqmData(role='nojs')" ) - .addClass( "ui-link" ); - -}; - -})( jQuery ); - - -(function( $, undefined ) { - -function fitSegmentInsideSegment( windowSize, segmentSize, offset, desired ) { - var returnValue = desired; - - if ( windowSize < segmentSize ) { - // Center segment if it's bigger than the window - returnValue = offset + ( windowSize - segmentSize ) / 2; - } else { - // Otherwise center it at the desired coordinate while keeping it completely inside the window - returnValue = Math.min( Math.max( offset, desired - segmentSize / 2 ), offset + windowSize - segmentSize ); - } - - return returnValue; -} - -function getWindowCoordinates( theWindow ) { - return { - x: theWindow.scrollLeft(), - y: theWindow.scrollTop(), - cx: ( theWindow[ 0 ].innerWidth || theWindow.width() ), - cy: ( theWindow[ 0 ].innerHeight || theWindow.height() ) - }; -} - -$.widget( "mobile.popup", { - options: { - wrapperClass: null, - theme: null, - overlayTheme: null, - shadow: true, - corners: true, - transition: "none", - positionTo: "origin", - tolerance: null, - closeLinkSelector: "a:jqmData(rel='back')", - closeLinkEvents: "click.popup", - navigateEvents: "navigate.popup", - closeEvents: "navigate.popup pagebeforechange.popup", - dismissible: true, - enhanced: false, - - // NOTE Windows Phone 7 has a scroll position caching issue that - // requires us to disable popup history management by default - // https://github.com/jquery/jquery-mobile/issues/4784 - // - // NOTE this option is modified in _create! - history: !$.mobile.browser.oldIE - }, - - // When the user depresses the mouse/finger on an element inside the popup while the popup is - // open, we ignore resize events for a short while. This prevents #6961. - _handleDocumentVmousedown: function( theEvent ) { - if ( this._isOpen && $.contains( this._ui.container[ 0 ], theEvent.target ) ) { - this._ignoreResizeEvents(); - } - }, - - _create: function() { - var theElement = this.element, - myId = theElement.attr( "id" ), - currentOptions = this.options; - - // We need to adjust the history option to be false if there's no AJAX nav. - // We can't do it in the option declarations because those are run before - // it is determined whether there shall be AJAX nav. - currentOptions.history = currentOptions.history && $.mobile.ajaxEnabled && $.mobile.hashListeningEnabled; - - this._on( this.document, { - "vmousedown": "_handleDocumentVmousedown" - }); - - // Define instance variables - $.extend( this, { - _scrollTop: 0, - _page: theElement.closest( ".ui-page" ), - _ui: null, - _fallbackTransition: "", - _currentTransition: false, - _prerequisites: null, - _isOpen: false, - _tolerance: null, - _resizeData: null, - _ignoreResizeTo: 0, - _orientationchangeInProgress: false - }); - - if ( this._page.length === 0 ) { - this._page = $( "body" ); - } - - if ( currentOptions.enhanced ) { - this._ui = { - container: theElement.parent(), - screen: theElement.parent().prev(), - placeholder: $( this.document[ 0 ].getElementById( myId + "-placeholder" ) ) - }; - } else { - this._ui = this._enhance( theElement, myId ); - this._applyTransition( currentOptions.transition ); - } - this - ._setTolerance( currentOptions.tolerance ) - ._ui.focusElement = this._ui.container; - - // Event handlers - this._on( this._ui.screen, { "vclick": "_eatEventAndClose" } ); - this._on( this.window, { - orientationchange: $.proxy( this, "_handleWindowOrientationchange" ), - resize: $.proxy( this, "_handleWindowResize" ), - keyup: $.proxy( this, "_handleWindowKeyUp" ) - }); - this._on( this.document, { "focusin": "_handleDocumentFocusIn" } ); - }, - - _enhance: function( theElement, myId ) { - var currentOptions = this.options, - wrapperClass = currentOptions.wrapperClass, - ui = { - screen: $( "<div class='ui-screen-hidden ui-popup-screen " + - this._themeClassFromOption( "ui-overlay-", currentOptions.overlayTheme ) + "'></div>" ), - placeholder: $( "<div style='display: none;'><!-- placeholder --></div>" ), - container: $( "<div class='ui-popup-container ui-popup-hidden ui-popup-truncate" + - ( wrapperClass ? ( " " + wrapperClass ) : "" ) + "'></div>" ) - }, - fragment = this.document[ 0 ].createDocumentFragment(); - - fragment.appendChild( ui.screen[ 0 ] ); - fragment.appendChild( ui.container[ 0 ] ); - - if ( myId ) { - ui.screen.attr( "id", myId + "-screen" ); - ui.container.attr( "id", myId + "-popup" ); - ui.placeholder - .attr( "id", myId + "-placeholder" ) - .html( "<!-- placeholder for " + myId + " -->" ); - } - - // Apply the proto - this._page[ 0 ].appendChild( fragment ); - // Leave a placeholder where the element used to be - ui.placeholder.insertAfter( theElement ); - theElement - .detach() - .addClass( "ui-popup " + - this._themeClassFromOption( "ui-body-", currentOptions.theme ) + " " + - ( currentOptions.shadow ? "ui-overlay-shadow " : "" ) + - ( currentOptions.corners ? "ui-corner-all " : "" ) ) - .appendTo( ui.container ); - - return ui; - }, - - _eatEventAndClose: function( theEvent ) { - theEvent.preventDefault(); - theEvent.stopImmediatePropagation(); - if ( this.options.dismissible ) { - this.close(); - } - return false; - }, - - // Make sure the screen covers the entire document - CSS is sometimes not - // enough to accomplish this. - _resizeScreen: function() { - var screen = this._ui.screen, - popupHeight = this._ui.container.outerHeight( true ), - screenHeight = screen.removeAttr( "style" ).height(), - - // Subtracting 1 here is necessary for an obscure Andrdoid 4.0 bug where - // the browser hangs if the screen covers the entire document :/ - documentHeight = this.document.height() - 1; - - if ( screenHeight < documentHeight ) { - screen.height( documentHeight ); - } else if ( popupHeight > screenHeight ) { - screen.height( popupHeight ); - } - }, - - _handleWindowKeyUp: function( theEvent ) { - if ( this._isOpen && theEvent.keyCode === $.mobile.keyCode.ESCAPE ) { - return this._eatEventAndClose( theEvent ); - } - }, - - _expectResizeEvent: function() { - var windowCoordinates = getWindowCoordinates( this.window ); - - if ( this._resizeData ) { - if ( windowCoordinates.x === this._resizeData.windowCoordinates.x && - windowCoordinates.y === this._resizeData.windowCoordinates.y && - windowCoordinates.cx === this._resizeData.windowCoordinates.cx && - windowCoordinates.cy === this._resizeData.windowCoordinates.cy ) { - // timeout not refreshed - return false; - } else { - // clear existing timeout - it will be refreshed below - clearTimeout( this._resizeData.timeoutId ); - } - } - - this._resizeData = { - timeoutId: this._delay( "_resizeTimeout", 200 ), - windowCoordinates: windowCoordinates - }; - - return true; - }, - - _resizeTimeout: function() { - if ( this._isOpen ) { - if ( !this._expectResizeEvent() ) { - if ( this._ui.container.hasClass( "ui-popup-hidden" ) ) { - // effectively rapid-open the popup while leaving the screen intact - this._ui.container.removeClass( "ui-popup-hidden ui-popup-truncate" ); - this.reposition( { positionTo: "window" } ); - this._ignoreResizeEvents(); - } - - this._resizeScreen(); - this._resizeData = null; - this._orientationchangeInProgress = false; - } - } else { - this._resizeData = null; - this._orientationchangeInProgress = false; - } - }, - - _stopIgnoringResizeEvents: function() { - this._ignoreResizeTo = 0; - }, - - _ignoreResizeEvents: function() { - if ( this._ignoreResizeTo ) { - clearTimeout( this._ignoreResizeTo ); - } - this._ignoreResizeTo = this._delay( "_stopIgnoringResizeEvents", 1000 ); - }, - - _handleWindowResize: function(/* theEvent */) { - if ( this._isOpen && this._ignoreResizeTo === 0 ) { - if ( ( this._expectResizeEvent() || this._orientationchangeInProgress ) && - !this._ui.container.hasClass( "ui-popup-hidden" ) ) { - // effectively rapid-close the popup while leaving the screen intact - this._ui.container - .addClass( "ui-popup-hidden ui-popup-truncate" ) - .removeAttr( "style" ); - } - } - }, - - _handleWindowOrientationchange: function(/* theEvent */) { - if ( !this._orientationchangeInProgress && this._isOpen && this._ignoreResizeTo === 0 ) { - this._expectResizeEvent(); - this._orientationchangeInProgress = true; - } - }, - - // When the popup is open, attempting to focus on an element that is not a - // child of the popup will redirect focus to the popup - _handleDocumentFocusIn: function( theEvent ) { - var target, - targetElement = theEvent.target, - ui = this._ui; - - if ( !this._isOpen ) { - return; - } - - if ( targetElement !== ui.container[ 0 ] ) { - target = $( targetElement ); - if ( 0 === target.parents().filter( ui.container[ 0 ] ).length ) { - $( this.document[ 0 ].activeElement ).one( "focus", function(/* theEvent */) { - if ( targetElement.nodeName.toLowerCase() !== "body" ) { - target.blur(); - } - }); - ui.focusElement.focus(); - theEvent.preventDefault(); - theEvent.stopImmediatePropagation(); - return false; - } else if ( ui.focusElement[ 0 ] === ui.container[ 0 ] ) { - ui.focusElement = target; - } - } - - this._ignoreResizeEvents(); - }, - - _themeClassFromOption: function( prefix, value ) { - return ( value ? ( value === "none" ? "" : ( prefix + value ) ) : ( prefix + "inherit" ) ); - }, - - _applyTransition: function( value ) { - if ( value ) { - this._ui.container.removeClass( this._fallbackTransition ); - if ( value !== "none" ) { - this._fallbackTransition = $.mobile._maybeDegradeTransition( value ); - if ( this._fallbackTransition === "none" ) { - this._fallbackTransition = ""; - } - this._ui.container.addClass( this._fallbackTransition ); - } - } - - return this; - }, - - _setOptions: function( newOptions ) { - var currentOptions = this.options, - theElement = this.element, - screen = this._ui.screen; - - if ( newOptions.wrapperClass !== undefined ) { - this._ui.container - .removeClass( currentOptions.wrapperClass ) - .addClass( newOptions.wrapperClass ); - } - - if ( newOptions.theme !== undefined ) { - theElement - .removeClass( this._themeClassFromOption( "ui-body-", currentOptions.theme ) ) - .addClass( this._themeClassFromOption( "ui-body-", newOptions.theme ) ); - } - - if ( newOptions.overlayTheme !== undefined ) { - screen - .removeClass( this._themeClassFromOption( "ui-overlay-", currentOptions.overlayTheme ) ) - .addClass( this._themeClassFromOption( "ui-overlay-", newOptions.overlayTheme ) ); - - if ( this._isOpen ) { - screen.addClass( "in" ); - } - } - - if ( newOptions.shadow !== undefined ) { - theElement.toggleClass( "ui-overlay-shadow", newOptions.shadow ); - } - - if ( newOptions.corners !== undefined ) { - theElement.toggleClass( "ui-corner-all", newOptions.corners ); - } - - if ( newOptions.transition !== undefined ) { - if ( !this._currentTransition ) { - this._applyTransition( newOptions.transition ); - } - } - - if ( newOptions.tolerance !== undefined ) { - this._setTolerance( newOptions.tolerance ); - } - - if ( newOptions.disabled !== undefined ) { - if ( newOptions.disabled ) { - this.close(); - } - } - - return this._super( newOptions ); - }, - - _setTolerance: function( value ) { - var tol = { t: 30, r: 15, b: 30, l: 15 }, - ar; - - if ( value !== undefined ) { - ar = String( value ).split( "," ); - - $.each( ar, function( idx, val ) { ar[ idx ] = parseInt( val, 10 ); } ); - - switch( ar.length ) { - // All values are to be the same - case 1: - if ( !isNaN( ar[ 0 ] ) ) { - tol.t = tol.r = tol.b = tol.l = ar[ 0 ]; - } - break; - - // The first value denotes top/bottom tolerance, and the second value denotes left/right tolerance - case 2: - if ( !isNaN( ar[ 0 ] ) ) { - tol.t = tol.b = ar[ 0 ]; - } - if ( !isNaN( ar[ 1 ] ) ) { - tol.l = tol.r = ar[ 1 ]; - } - break; - - // The array contains values in the order top, right, bottom, left - case 4: - if ( !isNaN( ar[ 0 ] ) ) { - tol.t = ar[ 0 ]; - } - if ( !isNaN( ar[ 1 ] ) ) { - tol.r = ar[ 1 ]; - } - if ( !isNaN( ar[ 2 ] ) ) { - tol.b = ar[ 2 ]; - } - if ( !isNaN( ar[ 3 ] ) ) { - tol.l = ar[ 3 ]; - } - break; - - default: - break; - } - } - - this._tolerance = tol; - return this; - }, - - _clampPopupWidth: function( infoOnly ) { - var menuSize, - windowCoordinates = getWindowCoordinates( this.window ), - // rectangle within which the popup must fit - rectangle = { - x: this._tolerance.l, - y: windowCoordinates.y + this._tolerance.t, - cx: windowCoordinates.cx - this._tolerance.l - this._tolerance.r, - cy: windowCoordinates.cy - this._tolerance.t - this._tolerance.b - }; - - if ( !infoOnly ) { - // Clamp the width of the menu before grabbing its size - this._ui.container.css( "max-width", rectangle.cx ); - } - - menuSize = { - cx: this._ui.container.outerWidth( true ), - cy: this._ui.container.outerHeight( true ) - }; - - return { rc: rectangle, menuSize: menuSize }; - }, - - _calculateFinalLocation: function( desired, clampInfo ) { - var returnValue, - rectangle = clampInfo.rc, - menuSize = clampInfo.menuSize; - - // Center the menu over the desired coordinates, while not going outside - // the window tolerances. This will center wrt. the window if the popup is - // too large. - returnValue = { - left: fitSegmentInsideSegment( rectangle.cx, menuSize.cx, rectangle.x, desired.x ), - top: fitSegmentInsideSegment( rectangle.cy, menuSize.cy, rectangle.y, desired.y ) - }; - - // Make sure the top of the menu is visible - returnValue.top = Math.max( 0, returnValue.top ); - - // If the height of the menu is smaller than the height of the document - // align the bottom with the bottom of the document - - returnValue.top -= Math.min( returnValue.top, - Math.max( 0, returnValue.top + menuSize.cy - this.document.height() ) ); - - return returnValue; - }, - - // Try and center the overlay over the given coordinates - _placementCoords: function( desired ) { - return this._calculateFinalLocation( desired, this._clampPopupWidth() ); - }, - - _createPrerequisites: function( screenPrerequisite, containerPrerequisite, whenDone ) { - var prerequisites, - self = this; - - // It is important to maintain both the local variable prerequisites and - // self._prerequisites. The local variable remains in the closure of the - // functions which call the callbacks passed in. The comparison between the - // local variable and self._prerequisites is necessary, because once a - // function has been passed to .animationComplete() it will be called next - // time an animation completes, even if that's not the animation whose end - // the function was supposed to catch (for example, if an abort happens - // during the opening animation, the .animationComplete handler is not - // called for that animation anymore, but the handler remains attached, so - // it is called the next time the popup is opened - making it stale. - // Comparing the local variable prerequisites to the widget-level variable - // self._prerequisites ensures that callbacks triggered by a stale - // .animationComplete will be ignored. - - prerequisites = { - screen: $.Deferred(), - container: $.Deferred() - }; - - prerequisites.screen.then( function() { - if ( prerequisites === self._prerequisites ) { - screenPrerequisite(); - } - }); - - prerequisites.container.then( function() { - if ( prerequisites === self._prerequisites ) { - containerPrerequisite(); - } - }); - - $.when( prerequisites.screen, prerequisites.container ).done( function() { - if ( prerequisites === self._prerequisites ) { - self._prerequisites = null; - whenDone(); - } - }); - - self._prerequisites = prerequisites; - }, - - _animate: function( args ) { - // NOTE before removing the default animation of the screen - // this had an animate callback that would resolve the deferred - // now the deferred is resolved immediately - // TODO remove the dependency on the screen deferred - this._ui.screen - .removeClass( args.classToRemove ) - .addClass( args.screenClassToAdd ); - - args.prerequisites.screen.resolve(); - - if ( args.transition && args.transition !== "none" ) { - if ( args.applyTransition ) { - this._applyTransition( args.transition ); - } - if ( this._fallbackTransition ) { - this._ui.container - .addClass( args.containerClassToAdd ) - .removeClass( args.classToRemove ) - .animationComplete( $.proxy( args.prerequisites.container, "resolve" ) ); - return; - } - } - this._ui.container.removeClass( args.classToRemove ); - args.prerequisites.container.resolve(); - }, - - // The desired coordinates passed in will be returned untouched if no reference element can be identified via - // desiredPosition.positionTo. Nevertheless, this function ensures that its return value always contains valid - // x and y coordinates by specifying the center middle of the window if the coordinates are absent. - // options: { x: coordinate, y: coordinate, positionTo: string: "origin", "window", or jQuery selector - _desiredCoords: function( openOptions ) { - var offset, - dst = null, - windowCoordinates = getWindowCoordinates( this.window ), - x = openOptions.x, - y = openOptions.y, - pTo = openOptions.positionTo; - - // Establish which element will serve as the reference - if ( pTo && pTo !== "origin" ) { - if ( pTo === "window" ) { - x = windowCoordinates.cx / 2 + windowCoordinates.x; - y = windowCoordinates.cy / 2 + windowCoordinates.y; - } else { - try { - dst = $( pTo ); - } catch( err ) { - dst = null; - } - if ( dst ) { - dst.filter( ":visible" ); - if ( dst.length === 0 ) { - dst = null; - } - } - } - } - - // If an element was found, center over it - if ( dst ) { - offset = dst.offset(); - x = offset.left + dst.outerWidth() / 2; - y = offset.top + dst.outerHeight() / 2; - } - - // Make sure x and y are valid numbers - center over the window - if ( $.type( x ) !== "number" || isNaN( x ) ) { - x = windowCoordinates.cx / 2 + windowCoordinates.x; - } - if ( $.type( y ) !== "number" || isNaN( y ) ) { - y = windowCoordinates.cy / 2 + windowCoordinates.y; - } - - return { x: x, y: y }; - }, - - _reposition: function( openOptions ) { - // We only care about position-related parameters for repositioning - openOptions = { - x: openOptions.x, - y: openOptions.y, - positionTo: openOptions.positionTo - }; - this._trigger( "beforeposition", undefined, openOptions ); - this._ui.container.offset( this._placementCoords( this._desiredCoords( openOptions ) ) ); - }, - - reposition: function( openOptions ) { - if ( this._isOpen ) { - this._reposition( openOptions ); - } - }, - - _openPrerequisitesComplete: function() { - var id = this.element.attr( "id" ); - - this._ui.container.addClass( "ui-popup-active" ); - this._isOpen = true; - this._resizeScreen(); - this._ui.container.attr( "tabindex", "0" ).focus(); - this._ignoreResizeEvents(); - if ( id ) { - this.document.find( "[aria-haspopup='true'][aria-owns='" + id + "']" ).attr( "aria-expanded", true ); - } - this._trigger( "afteropen" ); - }, - - _open: function( options ) { - var openOptions = $.extend( {}, this.options, options ), - // TODO move blacklist to private method - androidBlacklist = ( function() { - var ua = navigator.userAgent, - // Rendering engine is Webkit, and capture major version - wkmatch = ua.match( /AppleWebKit\/([0-9\.]+)/ ), - wkversion = !!wkmatch && wkmatch[ 1 ], - androidmatch = ua.match( /Android (\d+(?:\.\d+))/ ), - andversion = !!androidmatch && androidmatch[ 1 ], - chromematch = ua.indexOf( "Chrome" ) > -1; - - // Platform is Android, WebKit version is greater than 534.13 ( Android 3.2.1 ) and not Chrome. - if ( androidmatch !== null && andversion === "4.0" && wkversion && wkversion > 534.13 && !chromematch ) { - return true; - } - return false; - }()); - - // Count down to triggering "popupafteropen" - we have two prerequisites: - // 1. The popup window animation completes (container()) - // 2. The screen opacity animation completes (screen()) - this._createPrerequisites( - $.noop, - $.noop, - $.proxy( this, "_openPrerequisitesComplete" ) ); - - this._currentTransition = openOptions.transition; - this._applyTransition( openOptions.transition ); - - this._ui.screen.removeClass( "ui-screen-hidden" ); - this._ui.container.removeClass( "ui-popup-truncate" ); - - // Give applications a chance to modify the contents of the container before it appears - this._reposition( openOptions ); - - this._ui.container.removeClass( "ui-popup-hidden" ); - - if ( this.options.overlayTheme && androidBlacklist ) { - /* TODO: The native browser on Android 4.0.X ("Ice Cream Sandwich") suffers from an issue where the popup overlay appears to be z-indexed above the popup itself when certain other styles exist on the same page -- namely, any element set to `position: fixed` and certain types of input. These issues are reminiscent of previously uncovered bugs in older versions of Android's native browser: https://github.com/scottjehl/Device-Bugs/issues/3 - This fix closes the following bugs ( I use "closes" with reluctance, and stress that this issue should be revisited as soon as possible ): - https://github.com/jquery/jquery-mobile/issues/4816 - https://github.com/jquery/jquery-mobile/issues/4844 - https://github.com/jquery/jquery-mobile/issues/4874 - */ - - // TODO sort out why this._page isn't working - this.element.closest( ".ui-page" ).addClass( "ui-popup-open" ); - } - this._animate({ - additionalCondition: true, - transition: openOptions.transition, - classToRemove: "", - screenClassToAdd: "in", - containerClassToAdd: "in", - applyTransition: false, - prerequisites: this._prerequisites - }); - }, - - _closePrerequisiteScreen: function() { - this._ui.screen - .removeClass( "out" ) - .addClass( "ui-screen-hidden" ); - }, - - _closePrerequisiteContainer: function() { - this._ui.container - .removeClass( "reverse out" ) - .addClass( "ui-popup-hidden ui-popup-truncate" ) - .removeAttr( "style" ); - }, - - _closePrerequisitesDone: function() { - var container = this._ui.container, - id = this.element.attr( "id" ); - - container.removeAttr( "tabindex" ); - - // remove the global mutex for popups - $.mobile.popup.active = undefined; - - // Blur elements inside the container, including the container - $( ":focus", container[ 0 ] ).add( container[ 0 ] ).blur(); - - if ( id ) { - this.document.find( "[aria-haspopup='true'][aria-owns='" + id + "']" ).attr( "aria-expanded", false ); - } - - // alert users that the popup is closed - this._trigger( "afterclose" ); - }, - - _close: function( immediate ) { - this._ui.container.removeClass( "ui-popup-active" ); - this._page.removeClass( "ui-popup-open" ); - - this._isOpen = false; - - // Count down to triggering "popupafterclose" - we have two prerequisites: - // 1. The popup window reverse animation completes (container()) - // 2. The screen opacity animation completes (screen()) - this._createPrerequisites( - $.proxy( this, "_closePrerequisiteScreen" ), - $.proxy( this, "_closePrerequisiteContainer" ), - $.proxy( this, "_closePrerequisitesDone" ) ); - - this._animate( { - additionalCondition: this._ui.screen.hasClass( "in" ), - transition: ( immediate ? "none" : ( this._currentTransition ) ), - classToRemove: "in", - screenClassToAdd: "out", - containerClassToAdd: "reverse out", - applyTransition: true, - prerequisites: this._prerequisites - }); - }, - - _unenhance: function() { - if ( this.options.enhanced ) { - return; - } - - // Put the element back to where the placeholder was and remove the "ui-popup" class - this._setOptions( { theme: $.mobile.popup.prototype.options.theme } ); - this.element - // Cannot directly insertAfter() - we need to detach() first, because - // insertAfter() will do nothing if the payload div was not attached - // to the DOM at the time the widget was created, and so the payload - // will remain inside the container even after we call insertAfter(). - // If that happens and we remove the container a few lines below, we - // will cause an infinite recursion - #5244 - .detach() - .insertAfter( this._ui.placeholder ) - .removeClass( "ui-popup ui-overlay-shadow ui-corner-all ui-body-inherit" ); - this._ui.screen.remove(); - this._ui.container.remove(); - this._ui.placeholder.remove(); - }, - - _destroy: function() { - if ( $.mobile.popup.active === this ) { - this.element.one( "popupafterclose", $.proxy( this, "_unenhance" ) ); - this.close(); - } else { - this._unenhance(); - } - - return this; - }, - - _closePopup: function( theEvent, data ) { - var parsedDst, toUrl, - currentOptions = this.options, - immediate = false; - - if ( ( theEvent && theEvent.isDefaultPrevented() ) || $.mobile.popup.active !== this ) { - return; - } - - // restore location on screen - window.scrollTo( 0, this._scrollTop ); - - if ( theEvent && theEvent.type === "pagebeforechange" && data ) { - // Determine whether we need to rapid-close the popup, or whether we can - // take the time to run the closing transition - if ( typeof data.toPage === "string" ) { - parsedDst = data.toPage; - } else { - parsedDst = data.toPage.jqmData( "url" ); - } - parsedDst = $.mobile.path.parseUrl( parsedDst ); - toUrl = parsedDst.pathname + parsedDst.search + parsedDst.hash; - - if ( this._myUrl !== $.mobile.path.makeUrlAbsolute( toUrl ) ) { - // Going to a different page - close immediately - immediate = true; - } else { - theEvent.preventDefault(); - } - } - - // remove nav bindings - this.window.off( currentOptions.closeEvents ); - // unbind click handlers added when history is disabled - this.element.undelegate( currentOptions.closeLinkSelector, currentOptions.closeLinkEvents ); - - this._close( immediate ); - }, - - // any navigation event after a popup is opened should close the popup - // NOTE the pagebeforechange is bound to catch navigation events that don't - // alter the url (eg, dialogs from popups) - _bindContainerClose: function() { - this.window - .on( this.options.closeEvents, $.proxy( this, "_closePopup" ) ); - }, - - widget: function() { - return this._ui.container; - }, - - // TODO no clear deliniation of what should be here and - // what should be in _open. Seems to be "visual" vs "history" for now - open: function( options ) { - var url, hashkey, activePage, currentIsDialog, hasHash, urlHistory, - self = this, - currentOptions = this.options; - - // make sure open is idempotent - if ( $.mobile.popup.active || currentOptions.disabled ) { - return this; - } - - // set the global popup mutex - $.mobile.popup.active = this; - this._scrollTop = this.window.scrollTop(); - - // if history alteration is disabled close on navigate events - // and leave the url as is - if ( !( currentOptions.history ) ) { - self._open( options ); - self._bindContainerClose(); - - // When histoy is disabled we have to grab the data-rel - // back link clicks so we can close the popup instead of - // relying on history to do it for us - self.element - .delegate( currentOptions.closeLinkSelector, currentOptions.closeLinkEvents, function( theEvent ) { - self.close(); - theEvent.preventDefault(); - }); - - return this; - } - - // cache some values for min/readability - urlHistory = $.mobile.navigate.history; - hashkey = $.mobile.dialogHashKey; - activePage = $.mobile.activePage; - currentIsDialog = ( activePage ? activePage.hasClass( "ui-dialog" ) : false ); - this._myUrl = url = urlHistory.getActive().url; - hasHash = ( url.indexOf( hashkey ) > -1 ) && !currentIsDialog && ( urlHistory.activeIndex > 0 ); - - if ( hasHash ) { - self._open( options ); - self._bindContainerClose(); - return this; - } - - // if the current url has no dialog hash key proceed as normal - // otherwise, if the page is a dialog simply tack on the hash key - if ( url.indexOf( hashkey ) === -1 && !currentIsDialog ) { - url = url + (url.indexOf( "#" ) > -1 ? hashkey : "#" + hashkey); - } else { - url = $.mobile.path.parseLocation().hash + hashkey; - } - - // swallow the the initial navigation event, and bind for the next - this.window.one( "beforenavigate", function( theEvent ) { - theEvent.preventDefault(); - self._open( options ); - self._bindContainerClose(); - }); - - this.urlAltered = true; - $.mobile.navigate( url, { role: "dialog" } ); - - return this; - }, - - close: function() { - // make sure close is idempotent - if ( $.mobile.popup.active !== this ) { - return this; - } - - this._scrollTop = this.window.scrollTop(); - - if ( this.options.history && this.urlAltered ) { - $.mobile.back(); - this.urlAltered = false; - } else { - // simulate the nav bindings having fired - this._closePopup(); - } - - return this; - } -}); - -// TODO this can be moved inside the widget -$.mobile.popup.handleLink = function( $link ) { - var offset, - path = $.mobile.path, - - // NOTE make sure to get only the hash from the href because ie7 (wp7) - // returns the absolute href in this case ruining the element selection - popup = $( path.hashToSelector( path.parseUrl( $link.attr( "href" ) ).hash ) ).first(); - - if ( popup.length > 0 && popup.data( "mobile-popup" ) ) { - offset = $link.offset(); - popup.popup( "open", { - x: offset.left + $link.outerWidth() / 2, - y: offset.top + $link.outerHeight() / 2, - transition: $link.jqmData( "transition" ), - positionTo: $link.jqmData( "position-to" ) - }); - } - - //remove after delay - setTimeout( function() { - $link.removeClass( $.mobile.activeBtnClass ); - }, 300 ); -}; - -// TODO move inside _create -$.mobile.document.on( "pagebeforechange", function( theEvent, data ) { - if ( data.options.role === "popup" ) { - $.mobile.popup.handleLink( data.options.link ); - theEvent.preventDefault(); - } -}); - -})( jQuery ); - -/* -* custom "selectmenu" plugin -*/ - -(function( $, undefined ) { - -var unfocusableItemSelector = ".ui-disabled,.ui-state-disabled,.ui-li-divider,.ui-screen-hidden,:jqmData(role='placeholder')", - goToAdjacentItem = function( item, target, direction ) { - var adjacent = item[ direction + "All" ]() - .not( unfocusableItemSelector ) - .first(); - - // if there's a previous option, focus it - if ( adjacent.length ) { - target - .blur() - .attr( "tabindex", "-1" ); - - adjacent.find( "a" ).first().focus(); - } - }; - -$.widget( "mobile.selectmenu", $.mobile.selectmenu, { - _create: function() { - var o = this.options; - - // Custom selects cannot exist inside popups, so revert the "nativeMenu" - // option to true if a parent is a popup - o.nativeMenu = o.nativeMenu || ( this.element.parents( ":jqmData(role='popup'),:mobile-popup" ).length > 0 ); - - return this._super(); - }, - - _handleSelectFocus: function() { - this.element.blur(); - this.button.focus(); - }, - - _handleKeydown: function( event ) { - this._super( event ); - this._handleButtonVclickKeydown( event ); - }, - - _handleButtonVclickKeydown: function( event ) { - if ( this.options.disabled || this.isOpen || this.options.nativeMenu ) { - return; - } - - if (event.type === "vclick" || - event.keyCode && (event.keyCode === $.mobile.keyCode.ENTER || event.keyCode === $.mobile.keyCode.SPACE)) { - - this._decideFormat(); - if ( this.menuType === "overlay" ) { - this.button.attr( "href", "#" + this.popupId ).attr( "data-" + ( $.mobile.ns || "" ) + "rel", "popup" ); - } else { - this.button.attr( "href", "#" + this.dialogId ).attr( "data-" + ( $.mobile.ns || "" ) + "rel", "dialog" ); - } - this.isOpen = true; - // Do not prevent default, so the navigation may have a chance to actually open the chosen format - } - }, - - _handleListFocus: function( e ) { - var params = ( e.type === "focusin" ) ? - { tabindex: "0", event: "vmouseover" }: - { tabindex: "-1", event: "vmouseout" }; - - $( e.target ) - .attr( "tabindex", params.tabindex ) - .trigger( params.event ); - }, - - _handleListKeydown: function( event ) { - var target = $( event.target ), - li = target.closest( "li" ); - - // switch logic based on which key was pressed - switch ( event.keyCode ) { - // up or left arrow keys - case 38: - goToAdjacentItem( li, target, "prev" ); - return false; - // down or right arrow keys - case 40: - goToAdjacentItem( li, target, "next" ); - return false; - // If enter or space is pressed, trigger click - case 13: - case 32: - target.trigger( "click" ); - return false; - } - }, - - _handleMenuPageHide: function() { - - // After the dialog's done, we may want to trigger change if the value has actually changed - this._delayedTrigger(); - - // TODO centralize page removal binding / handling in the page plugin. - // Suggestion from @jblas to do refcounting - // - // TODO extremely confusing dependency on the open method where the pagehide.remove - // bindings are stripped to prevent the parent page from disappearing. The way - // we're keeping pages in the DOM right now sucks - // - // rebind the page remove that was unbound in the open function - // to allow for the parent page removal from actions other than the use - // of a dialog sized custom select - // - // doing this here provides for the back button on the custom select dialog - this.thisPage.page( "bindRemove" ); - }, - - _handleHeaderCloseClick: function() { - if ( this.menuType === "overlay" ) { - this.close(); - return false; - } - }, - - _handleListItemClick: function( event ) { - var listItem = $( event.target ).closest( "li" ), - - // Index of option tag to be selected - oldIndex = this.select[ 0 ].selectedIndex, - newIndex = $.mobile.getAttribute( listItem, "option-index" ), - option = this._selectOptions().eq( newIndex )[ 0 ]; - - // Toggle selected status on the tag for multi selects - option.selected = this.isMultiple ? !option.selected : true; - - // Toggle checkbox class for multiple selects - if ( this.isMultiple ) { - listItem.find( "a" ) - .toggleClass( "ui-checkbox-on", option.selected ) - .toggleClass( "ui-checkbox-off", !option.selected ); - } - - // If it's not a multiple select, trigger change after it has finished closing - if ( !this.isMultiple && oldIndex !== newIndex ) { - this._triggerChange = true; - } - - // Trigger change if it's a multiple select - // Hide custom select for single selects only - otherwise focus clicked item - // We need to grab the clicked item the hard way, because the list may have been rebuilt - if ( this.isMultiple ) { - this.select.trigger( "change" ); - this.list.find( "li:not(.ui-li-divider)" ).eq( newIndex ) - .find( "a" ).first().focus(); - } - else { - this.close(); - } - - event.preventDefault(); - }, - - build: function() { - var selectId, popupId, dialogId, label, thisPage, isMultiple, menuId, - themeAttr, overlayTheme, overlayThemeAttr, dividerThemeAttr, - menuPage, listbox, list, header, headerTitle, menuPageContent, - menuPageClose, headerClose, - o = this.options; - - if ( o.nativeMenu ) { - return this._super(); - } - - selectId = this.selectId; - popupId = selectId + "-listbox"; - dialogId = selectId + "-dialog"; - label = this.label; - thisPage = this.element.closest( ".ui-page" ); - isMultiple = this.element[ 0 ].multiple; - menuId = selectId + "-menu"; - themeAttr = o.theme ? ( " data-" + $.mobile.ns + "theme='" + o.theme + "'" ) : ""; - overlayTheme = o.overlayTheme || o.theme || null; - overlayThemeAttr = overlayTheme ? ( " data-" + $.mobile.ns + - "overlay-theme='" + overlayTheme + "'" ) : ""; - dividerThemeAttr = ( o.dividerTheme && isMultiple ) ? ( " data-" + $.mobile.ns + "divider-theme='" + o.dividerTheme + "'" ) : ""; - menuPage = $( "<div data-" + $.mobile.ns + "role='dialog' class='ui-selectmenu' id='" + dialogId + "'" + themeAttr + overlayThemeAttr + ">" + - "<div data-" + $.mobile.ns + "role='header'>" + - "<div class='ui-title'></div>"+ - "</div>"+ - "<div data-" + $.mobile.ns + "role='content'></div>"+ - "</div>" ); - listbox = $( "<div" + themeAttr + overlayThemeAttr + " id='" + popupId + - "' class='ui-selectmenu'></div>" ) - .insertAfter( this.select ) - .popup(); - list = $( "<ul class='ui-selectmenu-list' id='" + menuId + "' role='listbox' aria-labelledby='" + this.buttonId + "'" + themeAttr + dividerThemeAttr + "></ul>" ).appendTo( listbox ); - header = $( "<div class='ui-header ui-bar-" + ( o.theme ? o.theme : "inherit" ) + "'></div>" ).prependTo( listbox ); - headerTitle = $( "<h1 class='ui-title'></h1>" ).appendTo( header ); - - if ( this.isMultiple ) { - headerClose = $( "<a>", { - "role": "button", - "text": o.closeText, - "href": "#", - "class": "ui-btn ui-corner-all ui-btn-left ui-btn-icon-notext ui-icon-delete" - }).appendTo( header ); - } - - $.extend( this, { - selectId: selectId, - menuId: menuId, - popupId: popupId, - dialogId: dialogId, - thisPage: thisPage, - menuPage: menuPage, - label: label, - isMultiple: isMultiple, - theme: o.theme, - listbox: listbox, - list: list, - header: header, - headerTitle: headerTitle, - headerClose: headerClose, - menuPageContent: menuPageContent, - menuPageClose: menuPageClose, - placeholder: "" - }); - - // Create list from select, update state - this.refresh(); - - if ( this._origTabIndex === undefined ) { - // Map undefined to false, because this._origTabIndex === undefined - // indicates that we have not yet checked whether the select has - // originally had a tabindex attribute, whereas false indicates that - // we have checked the select for such an attribute, and have found - // none present. - this._origTabIndex = ( this.select[ 0 ].getAttribute( "tabindex" ) === null ) ? false : this.select.attr( "tabindex" ); - } - this.select.attr( "tabindex", "-1" ); - this._on( this.select, { focus : "_handleSelectFocus" } ); - - // Button events - this._on( this.button, { - vclick: "_handleButtonVclickKeydown" - }); - - // Events for list items - this.list.attr( "role", "listbox" ); - this._on( this.list, { - "focusin": "_handleListFocus", - "focusout": "_handleListFocus", - "keydown": "_handleListKeydown", - "click li:not(.ui-disabled,.ui-state-disabled,.ui-li-divider)": "_handleListItemClick" - }); - - // button refocus ensures proper height calculation - // by removing the inline style and ensuring page inclusion - this._on( this.menuPage, { pagehide: "_handleMenuPageHide" } ); - - // Events on the popup - this._on( this.listbox, { popupafterclose: "_popupClosed" } ); - - // Close button on small overlays - if ( this.isMultiple ) { - this._on( this.headerClose, { click: "_handleHeaderCloseClick" } ); - } - - return this; - }, - - _popupClosed: function() { - this.close(); - this._delayedTrigger(); - }, - - _delayedTrigger: function() { - if ( this._triggerChange ) { - this.element.trigger( "change" ); - } - this._triggerChange = false; - }, - - _isRebuildRequired: function() { - var list = this.list.find( "li" ), - options = this._selectOptions().not( ".ui-screen-hidden" ); - - // TODO exceedingly naive method to determine difference - // ignores value changes etc in favor of a forcedRebuild - // from the user in the refresh method - return options.text() !== list.text(); - }, - - selected: function() { - return this._selectOptions().filter( ":selected:not( :jqmData(placeholder='true') )" ); - }, - - refresh: function( force ) { - var self, indices; - - if ( this.options.nativeMenu ) { - return this._super( force ); - } - - self = this; - if ( force || this._isRebuildRequired() ) { - self._buildList(); - } - - indices = this.selectedIndices(); - - self.setButtonText(); - self.setButtonCount(); - - self.list.find( "li:not(.ui-li-divider)" ) - .find( "a" ).removeClass( $.mobile.activeBtnClass ).end() - .attr( "aria-selected", false ) - .each(function( i ) { - - if ( $.inArray( i, indices ) > -1 ) { - var item = $( this ); - - // Aria selected attr - item.attr( "aria-selected", true ); - - // Multiple selects: add the "on" checkbox state to the icon - if ( self.isMultiple ) { - item.find( "a" ).removeClass( "ui-checkbox-off" ).addClass( "ui-checkbox-on" ); - } else { - if ( item.hasClass( "ui-screen-hidden" ) ) { - item.next().find( "a" ).addClass( $.mobile.activeBtnClass ); - } else { - item.find( "a" ).addClass( $.mobile.activeBtnClass ); - } - } - } - }); - }, - - close: function() { - if ( this.options.disabled || !this.isOpen ) { - return; - } - - var self = this; - - if ( self.menuType === "page" ) { - self.menuPage.dialog( "close" ); - self.list.appendTo( self.listbox ); - } else { - self.listbox.popup( "close" ); - } - - self._focusButton(); - // allow the dialog to be closed again - self.isOpen = false; - }, - - open: function() { - this.button.click(); - }, - - _focusMenuItem: function() { - var selector = this.list.find( "a." + $.mobile.activeBtnClass ); - if ( selector.length === 0 ) { - selector = this.list.find( "li:not(" + unfocusableItemSelector + ") a.ui-btn" ); - } - selector.first().focus(); - }, - - _decideFormat: function() { - var self = this, - $window = this.window, - selfListParent = self.list.parent(), - menuHeight = selfListParent.outerHeight(), - scrollTop = $window.scrollTop(), - btnOffset = self.button.offset().top, - screenHeight = $window.height(); - - if ( menuHeight > screenHeight - 80 || !$.support.scrollTop ) { - - self.menuPage.appendTo( $.mobile.pageContainer ).page(); - self.menuPageContent = self.menuPage.find( ".ui-content" ); - self.menuPageClose = self.menuPage.find( ".ui-header a" ); - - // prevent the parent page from being removed from the DOM, - // otherwise the results of selecting a list item in the dialog - // fall into a black hole - self.thisPage.unbind( "pagehide.remove" ); - - //for WebOS/Opera Mini (set lastscroll using button offset) - if ( scrollTop === 0 && btnOffset > screenHeight ) { - self.thisPage.one( "pagehide", function() { - $( this ).jqmData( "lastScroll", btnOffset ); - }); - } - - self.menuPage.one( { - pageshow: $.proxy( this, "_focusMenuItem" ), - pagehide: $.proxy( this, "close" ) - }); - - self.menuType = "page"; - self.menuPageContent.append( self.list ); - self.menuPage - .find( "div .ui-title" ) - .text( self.label.getEncodedText() || self.placeholder ); - } else { - self.menuType = "overlay"; - - self.listbox.one( { popupafteropen: $.proxy( this, "_focusMenuItem" ) } ); - } - }, - - _buildList: function() { - var self = this, - o = this.options, - placeholder = this.placeholder, - needPlaceholder = true, - dataIcon = "false", - $options, numOptions, select, - dataPrefix = "data-" + $.mobile.ns, - dataIndexAttr = dataPrefix + "option-index", - dataIconAttr = dataPrefix + "icon", - dataRoleAttr = dataPrefix + "role", - dataPlaceholderAttr = dataPrefix + "placeholder", - fragment = document.createDocumentFragment(), - isPlaceholderItem = false, - optGroup, - i, - option, $option, parent, text, anchor, classes, - optLabel, divider, item; - - self.list.empty().filter( ".ui-listview" ).listview( "destroy" ); - $options = this._selectOptions(); - numOptions = $options.length; - select = this.select[ 0 ]; - - for ( i = 0; i < numOptions;i++, isPlaceholderItem = false) { - option = $options[i]; - $option = $( option ); - - // Do not create options based on ui-screen-hidden select options - if ( $option.hasClass( "ui-screen-hidden" ) ) { - continue; - } - - parent = option.parentNode; - classes = []; - - // Although using .text() here raises the risk that, when we later paste this into the - // list item we end up pasting possibly malicious things like <script> tags, that risk - // only arises if we do something like $( "<li><a href='#'>" + text + "</a></li>" ). We - // don't do that. We do document.createTextNode( text ) instead, which guarantees that - // whatever we paste in will end up as text, with characters like <, > and & escaped. - text = $option.text(); - anchor = document.createElement( "a" ); - anchor.setAttribute( "href", "#" ); - anchor.appendChild( document.createTextNode( text ) ); - - // Are we inside an optgroup? - if ( parent !== select && parent.nodeName.toLowerCase() === "optgroup" ) { - optLabel = parent.getAttribute( "label" ); - if ( optLabel !== optGroup ) { - divider = document.createElement( "li" ); - divider.setAttribute( dataRoleAttr, "list-divider" ); - divider.setAttribute( "role", "option" ); - divider.setAttribute( "tabindex", "-1" ); - divider.appendChild( document.createTextNode( optLabel ) ); - fragment.appendChild( divider ); - optGroup = optLabel; - } - } - - if ( needPlaceholder && ( !option.getAttribute( "value" ) || text.length === 0 || $option.jqmData( "placeholder" ) ) ) { - needPlaceholder = false; - isPlaceholderItem = true; - - // If we have identified a placeholder, record the fact that it was - // us who have added the placeholder to the option and mark it - // retroactively in the select as well - if ( null === option.getAttribute( dataPlaceholderAttr ) ) { - this._removePlaceholderAttr = true; - } - option.setAttribute( dataPlaceholderAttr, true ); - if ( o.hidePlaceholderMenuItems ) { - classes.push( "ui-screen-hidden" ); - } - if ( placeholder !== text ) { - placeholder = self.placeholder = text; - } - } - - item = document.createElement( "li" ); - if ( option.disabled ) { - classes.push( "ui-state-disabled" ); - item.setAttribute( "aria-disabled", true ); - } - item.setAttribute( dataIndexAttr, i ); - item.setAttribute( dataIconAttr, dataIcon ); - if ( isPlaceholderItem ) { - item.setAttribute( dataPlaceholderAttr, true ); - } - item.className = classes.join( " " ); - item.setAttribute( "role", "option" ); - anchor.setAttribute( "tabindex", "-1" ); - if ( this.isMultiple ) { - $( anchor ).addClass( "ui-btn ui-checkbox-off ui-btn-icon-right" ); - } - - item.appendChild( anchor ); - fragment.appendChild( item ); - } - - self.list[0].appendChild( fragment ); - - // Hide header if it's not a multiselect and there's no placeholder - if ( !this.isMultiple && !placeholder.length ) { - this.header.addClass( "ui-screen-hidden" ); - } else { - this.headerTitle.text( this.placeholder ); - } - - // Now populated, create listview - self.list.listview(); - }, - - _button: function() { - return this.options.nativeMenu ? - this._super() : - $( "<a>", { - "href": "#", - "role": "button", - // TODO value is undefined at creation - "id": this.buttonId, - "aria-haspopup": "true", - - // TODO value is undefined at creation - "aria-owns": this.menuId - }); - }, - - _destroy: function() { - - if ( !this.options.nativeMenu ) { - this.close(); - - // Restore the tabindex attribute to its original value - if ( this._origTabIndex !== undefined ) { - if ( this._origTabIndex !== false ) { - this.select.attr( "tabindex", this._origTabIndex ); - } else { - this.select.removeAttr( "tabindex" ); - } - } - - // Remove the placeholder attribute if we were the ones to add it - if ( this._removePlaceholderAttr ) { - this._selectOptions().removeAttr( "data-" + $.mobile.ns + "placeholder" ); - } - - // Remove the popup - this.listbox.remove(); - - // Remove the dialog - this.menuPage.remove(); - } - - // Chain up - this._super(); - } -}); - -})( jQuery ); - - -// buttonMarkup is deprecated as of 1.4.0 and will be removed in 1.5.0. - -(function( $, undefined ) { - -// General policy: Do not access data-* attributes except during enhancement. -// In all other cases we determine the state of the button exclusively from its -// className. That's why optionsToClasses expects a full complement of options, -// and the jQuery plugin completes the set of options from the default values. - -// Map classes to buttonMarkup boolean options - used in classNameToOptions() -var reverseBoolOptionMap = { - "ui-shadow" : "shadow", - "ui-corner-all" : "corners", - "ui-btn-inline" : "inline", - "ui-shadow-icon" : "iconshadow", /* TODO: Remove in 1.5 */ - "ui-mini" : "mini" - }, - getAttrFixed = function() { - var ret = $.mobile.getAttribute.apply( this, arguments ); - - return ( ret == null ? undefined : ret ); - }, - capitalLettersRE = /[A-Z]/g; - -// optionsToClasses: -// @options: A complete set of options to convert to class names. -// @existingClasses: extra classes to add to the result -// -// Converts @options to buttonMarkup classes and returns the result as an array -// that can be converted to an element's className with .join( " " ). All -// possible options must be set inside @options. Use $.fn.buttonMarkup.defaults -// to get a complete set and use $.extend to override your choice of options -// from that set. -function optionsToClasses( options, existingClasses ) { - var classes = existingClasses ? existingClasses : []; - - // Add classes to the array - first ui-btn - classes.push( "ui-btn" ); - - // If there is a theme - if ( options.theme ) { - classes.push( "ui-btn-" + options.theme ); - } - - // If there's an icon, add the icon-related classes - if ( options.icon ) { - classes = classes.concat([ - "ui-icon-" + options.icon, - "ui-btn-icon-" + options.iconpos - ]); - if ( options.iconshadow ) { - classes.push( "ui-shadow-icon" ); /* TODO: Remove in 1.5 */ - } - } - - // Add the appropriate class for each boolean option - if ( options.inline ) { - classes.push( "ui-btn-inline" ); - } - if ( options.shadow ) { - classes.push( "ui-shadow" ); - } - if ( options.corners ) { - classes.push( "ui-corner-all" ); - } - if ( options.mini ) { - classes.push( "ui-mini" ); - } - - // Create a string from the array and return it - return classes; -} - -// classNameToOptions: -// @classes: A string containing a .className-style space-separated class list -// -// Loops over @classes and calculates an options object based on the -// buttonMarkup-related classes it finds. It records unrecognized classes in an -// array. -// -// Returns: An object containing the following items: -// -// "options": buttonMarkup options found to be present because of the -// presence/absence of corresponding classes -// -// "unknownClasses": a string containing all the non-buttonMarkup-related -// classes found in @classes -// -// "alreadyEnhanced": A boolean indicating whether the ui-btn class was among -// those found to be present -function classNameToOptions( classes ) { - var idx, map, unknownClass, - alreadyEnhanced = false, - noIcon = true, - o = { - icon: "", - inline: false, - shadow: false, - corners: false, - iconshadow: false, - mini: false - }, - unknownClasses = []; - - classes = classes.split( " " ); - - // Loop over the classes - for ( idx = 0 ; idx < classes.length ; idx++ ) { - - // Assume it's an unrecognized class - unknownClass = true; - - // Recognize boolean options from the presence of classes - map = reverseBoolOptionMap[ classes[ idx ] ]; - if ( map !== undefined ) { - unknownClass = false; - o[ map ] = true; - - // Recognize the presence of an icon and establish the icon position - } else if ( classes[ idx ].indexOf( "ui-btn-icon-" ) === 0 ) { - unknownClass = false; - noIcon = false; - o.iconpos = classes[ idx ].substring( 12 ); - - // Establish which icon is present - } else if ( classes[ idx ].indexOf( "ui-icon-" ) === 0 ) { - unknownClass = false; - o.icon = classes[ idx ].substring( 8 ); - - // Establish the theme - this recognizes one-letter theme swatch names - } else if ( classes[ idx ].indexOf( "ui-btn-" ) === 0 && classes[ idx ].length === 8 ) { - unknownClass = false; - o.theme = classes[ idx ].substring( 7 ); - - // Recognize that this element has already been buttonMarkup-enhanced - } else if ( classes[ idx ] === "ui-btn" ) { - unknownClass = false; - alreadyEnhanced = true; - } - - // If this class has not been recognized, add it to the list - if ( unknownClass ) { - unknownClasses.push( classes[ idx ] ); - } - } - - // If a "ui-btn-icon-*" icon position class is absent there cannot be an icon - if ( noIcon ) { - o.icon = ""; - } - - return { - options: o, - unknownClasses: unknownClasses, - alreadyEnhanced: alreadyEnhanced - }; -} - -function camelCase2Hyphenated( c ) { - return "-" + c.toLowerCase(); -} - -// $.fn.buttonMarkup: -// DOM: gets/sets .className -// -// @options: options to apply to the elements in the jQuery object -// @overwriteClasses: boolean indicating whether to honour existing classes -// -// Calculates the classes to apply to the elements in the jQuery object based on -// the options passed in. If @overwriteClasses is true, it sets the className -// property of each element in the jQuery object to the buttonMarkup classes -// it calculates based on the options passed in. -// -// If you wish to preserve any classes that are already present on the elements -// inside the jQuery object, including buttonMarkup-related classes that were -// added by a previous call to $.fn.buttonMarkup() or during page enhancement -// then you should omit @overwriteClasses or set it to false. -$.fn.buttonMarkup = function( options, overwriteClasses ) { - var idx, data, el, retrievedOptions, optionKey, - defaults = $.fn.buttonMarkup.defaults; - - for ( idx = 0 ; idx < this.length ; idx++ ) { - el = this[ idx ]; - data = overwriteClasses ? - - // Assume this element is not enhanced and ignore its classes - { alreadyEnhanced: false, unknownClasses: [] } : - - // Otherwise analyze existing classes to establish existing options and - // classes - classNameToOptions( el.className ); - - retrievedOptions = $.extend( {}, - - // If the element already has the class ui-btn, then we assume that - // it has passed through buttonMarkup before - otherwise, the options - // returned by classNameToOptions do not correctly reflect the state of - // the element - ( data.alreadyEnhanced ? data.options : {} ), - - // Finally, apply the options passed in - options ); - - // If this is the first call on this element, retrieve remaining options - // from the data-attributes - if ( !data.alreadyEnhanced ) { - for ( optionKey in defaults ) { - if ( retrievedOptions[ optionKey ] === undefined ) { - retrievedOptions[ optionKey ] = getAttrFixed( el, - optionKey.replace( capitalLettersRE, camelCase2Hyphenated ) - ); - } - } - } - - el.className = optionsToClasses( - - // Merge all the options and apply them as classes - $.extend( {}, - - // The defaults form the basis - defaults, - - // Add the computed options - retrievedOptions - ), - - // ... and re-apply any unrecognized classes that were found - data.unknownClasses ).join( " " ); - if ( el.tagName.toLowerCase() !== "button" ) { - el.setAttribute( "role", "button" ); - } - } - - return this; -}; - -// buttonMarkup defaults. This must be a complete set, i.e., a value must be -// given here for all recognized options -$.fn.buttonMarkup.defaults = { - icon: "", - iconpos: "left", - theme: null, - inline: false, - shadow: true, - corners: true, - iconshadow: false, /* TODO: Remove in 1.5. Option deprecated in 1.4. */ - mini: false -}; - -$.extend( $.fn.buttonMarkup, { - initSelector: "a:jqmData(role='button'), .ui-bar > a, .ui-bar > :jqmData(role='controlgroup') > a, button:not(:jqmData(role='navbar') button)" -}); - -})( jQuery ); - - -(function( $, undefined ) { - -$.widget( "mobile.controlgroup", $.extend( { - options: { - enhanced: false, - theme: null, - shadow: false, - corners: true, - excludeInvisible: true, - type: "vertical", - mini: false - }, - - _create: function() { - var elem = this.element, - opts = this.options; - - // Run buttonmarkup - if ( $.fn.buttonMarkup ) { - this.element.find( $.fn.buttonMarkup.initSelector ).buttonMarkup(); - } - // Enhance child widgets - $.each( this._childWidgets, $.proxy( function( number, widgetName ) { - if ( $.mobile[ widgetName ] ) { - this.element.find( $.mobile[ widgetName ].initSelector ).not( $.mobile.page.prototype.keepNativeSelector() )[ widgetName ](); - } - }, this )); - - $.extend( this, { - _ui: null, - _initialRefresh: true - }); - - if ( opts.enhanced ) { - this._ui = { - groupLegend: elem.children( ".ui-controlgroup-label" ).children(), - childWrapper: elem.children( ".ui-controlgroup-controls" ) - }; - } else { - this._ui = this._enhance(); - } - - }, - - _childWidgets: [ "checkboxradio", "selectmenu", "button" ], - - _themeClassFromOption: function( value ) { - return ( value ? ( value === "none" ? "" : "ui-group-theme-" + value ) : "" ); - }, - - _enhance: function() { - var elem = this.element, - opts = this.options, - ui = { - groupLegend: elem.children( "legend" ), - childWrapper: elem - .addClass( "ui-controlgroup " + - "ui-controlgroup-" + - ( opts.type === "horizontal" ? "horizontal" : "vertical" ) + " " + - this._themeClassFromOption( opts.theme ) + " " + - ( opts.corners ? "ui-corner-all " : "" ) + - ( opts.mini ? "ui-mini " : "" ) ) - .wrapInner( "<div " + - "class='ui-controlgroup-controls " + - ( opts.shadow === true ? "ui-shadow" : "" ) + "'></div>" ) - .children() - }; - - if ( ui.groupLegend.length > 0 ) { - $( "<div role='heading' class='ui-controlgroup-label'></div>" ) - .append( ui.groupLegend ) - .prependTo( elem ); - } - - return ui; - }, - - _init: function() { - this.refresh(); - }, - - _setOptions: function( options ) { - var callRefresh, returnValue, - elem = this.element; - - // Must have one of horizontal or vertical - if ( options.type !== undefined ) { - elem - .removeClass( "ui-controlgroup-horizontal ui-controlgroup-vertical" ) - .addClass( "ui-controlgroup-" + ( options.type === "horizontal" ? "horizontal" : "vertical" ) ); - callRefresh = true; - } - - if ( options.theme !== undefined ) { - elem - .removeClass( this._themeClassFromOption( this.options.theme ) ) - .addClass( this._themeClassFromOption( options.theme ) ); - } - - if ( options.corners !== undefined ) { - elem.toggleClass( "ui-corner-all", options.corners ); - } - - if ( options.mini !== undefined ) { - elem.toggleClass( "ui-mini", options.mini ); - } - - if ( options.shadow !== undefined ) { - this._ui.childWrapper.toggleClass( "ui-shadow", options.shadow ); - } - - if ( options.excludeInvisible !== undefined ) { - this.options.excludeInvisible = options.excludeInvisible; - callRefresh = true; - } - - returnValue = this._super( options ); - - if ( callRefresh ) { - this.refresh(); - } - - return returnValue; - }, - - container: function() { - return this._ui.childWrapper; - }, - - refresh: function() { - var $el = this.container(), - els = $el.find( ".ui-btn" ).not( ".ui-slider-handle" ), - create = this._initialRefresh; - if ( $.mobile.checkboxradio ) { - $el.find( ":mobile-checkboxradio" ).checkboxradio( "refresh" ); - } - this._addFirstLastClasses( els, - this.options.excludeInvisible ? this._getVisibles( els, create ) : els, - create ); - this._initialRefresh = false; - }, - - // Caveat: If the legend is not the first child of the controlgroup at enhance - // time, it will be after _destroy(). - _destroy: function() { - var ui, buttons, - opts = this.options; - - if ( opts.enhanced ) { - return this; - } - - ui = this._ui; - buttons = this.element - .removeClass( "ui-controlgroup " + - "ui-controlgroup-horizontal ui-controlgroup-vertical ui-corner-all ui-mini " + - this._themeClassFromOption( opts.theme ) ) - .find( ".ui-btn" ) - .not( ".ui-slider-handle" ); - - this._removeFirstLastClasses( buttons ); - - ui.groupLegend.unwrap(); - ui.childWrapper.children().unwrap(); - } -}, $.mobile.behaviors.addFirstLastClasses ) ); - -})(jQuery); - -(function( $, undefined ) { - - $.widget( "mobile.toolbar", { - initSelector: ":jqmData(role='footer'), :jqmData(role='header')", - - options: { - theme: null, - addBackBtn: false, - backBtnTheme: null, - backBtnText: "Back" - }, - - _create: function() { - var leftbtn, rightbtn, - role = this.element.is( ":jqmData(role='header')" ) ? "header" : "footer", - page = this.element.closest( ".ui-page" ); - if ( page.length === 0 ) { - page = false; - this._on( this.document, { - "pageshow": "refresh" - }); - } - $.extend( this, { - role: role, - page: page, - leftbtn: leftbtn, - rightbtn: rightbtn - }); - this.element.attr( "role", role === "header" ? "banner" : "contentinfo" ).addClass( "ui-" + role ); - this.refresh(); - this._setOptions( this.options ); - }, - _setOptions: function( o ) { - if ( o.addBackBtn !== undefined ) { - this._updateBackButton(); - } - if ( o.backBtnTheme != null ) { - this.element - .find( ".ui-toolbar-back-btn" ) - .addClass( "ui-btn ui-btn-" + o.backBtnTheme ); - } - if ( o.backBtnText !== undefined ) { - this.element.find( ".ui-toolbar-back-btn .ui-btn-text" ).text( o.backBtnText ); - } - if ( o.theme !== undefined ) { - var currentTheme = this.options.theme ? this.options.theme : "inherit", - newTheme = o.theme ? o.theme : "inherit"; - - this.element.removeClass( "ui-bar-" + currentTheme ).addClass( "ui-bar-" + newTheme ); - } - - this._super( o ); - }, - refresh: function() { - if ( this.role === "header" ) { - this._addHeaderButtonClasses(); - } - if ( !this.page ) { - this._setRelative(); - if ( this.role === "footer" ) { - this.element.appendTo( "body" ); - } else if ( this.role === "header" ) { - this._updateBackButton(); - } - } - this._addHeadingClasses(); - this._btnMarkup(); - }, - - //we only want this to run on non fixed toolbars so make it easy to override - _setRelative: function() { - $( "[data-"+ $.mobile.ns + "role='page']" ).css({ "position": "relative" }); - }, - - // Deprecated in 1.4. As from 1.5 button classes have to be present in the markup. - _btnMarkup: function() { - this.element - .children( "a" ) - .filter( ":not([data-" + $.mobile.ns + "role='none'])" ) - .attr( "data-" + $.mobile.ns + "role", "button" ); - this.element.trigger( "create" ); - }, - // Deprecated in 1.4. As from 1.5 ui-btn-left/right classes have to be present in the markup. - _addHeaderButtonClasses: function() { - var headerAnchors = this.element.children( "a, button" ); - - // Do not mistake a back button for a left toolbar button - this.leftbtn = headerAnchors.hasClass( "ui-btn-left" ) && - !headerAnchors.hasClass( "ui-toolbar-back-btn" ); - - this.rightbtn = headerAnchors.hasClass( "ui-btn-right" ); - - // Filter out right buttons and back buttons - this.leftbtn = this.leftbtn || - headerAnchors.eq( 0 ) - .not( ".ui-btn-right,.ui-toolbar-back-btn" ) - .addClass( "ui-btn-left" ) - .length; - - this.rightbtn = this.rightbtn || headerAnchors.eq( 1 ).addClass( "ui-btn-right" ).length; - }, - _updateBackButton: function() { - var backButton, - options = this.options, - theme = options.backBtnTheme || options.theme; - - // Retrieve the back button or create a new, empty one - backButton = this._backButton = ( this._backButton || {} ); - - // We add a back button only if the option to do so is on - if ( this.options.addBackBtn && - - // This must also be a header toolbar - this.role === "header" && - - // There must be multiple pages in the DOM - $( ".ui-page" ).length > 1 && - ( this.page ? - - // If the toolbar is internal the page's URL must differ from the hash - ( this.page[ 0 ].getAttribute( "data-" + $.mobile.ns + "url" ) !== - $.mobile.path.stripHash( location.hash ) ) : - - // Otherwise, if the toolbar is external there must be at least one - // history item to which one can go back - ( $.mobile.navigate && $.mobile.navigate.history && - $.mobile.navigate.history.activeIndex > 0 ) ) && - - // The toolbar does not have a left button - !this.leftbtn ) { - - // Skip back button creation if one is already present - if ( !backButton.attached ) { - backButton.element = ( backButton.element || - $( "<a role='button' href='javascript:void(0);' " + - "class='ui-btn ui-corner-all ui-shadow ui-btn-left " + - ( theme ? "ui-btn-" + theme + " " : "" ) + - "ui-toolbar-back-btn ui-icon-carat-l ui-btn-icon-left' " + - "data-" + $.mobile.ns + "rel='back'>" + options.backBtnText + - "</a>" ) ) - .prependTo( this.element ); - backButton.attached = true; - } - - // If we are not adding a back button, then remove the one present, if any - } else if ( backButton.element ) { - backButton.element.detach(); - backButton.attached = false; - } - }, - _addHeadingClasses: function() { - this.element.children( "h1, h2, h3, h4, h5, h6" ) - .addClass( "ui-title" ) - // Regardless of h element number in src, it becomes h1 for the enhanced page - .attr({ - "role": "heading", - "aria-level": "1" - }); - } - }); - -})( jQuery ); - -(function( $, undefined ) { - - $.widget( "mobile.toolbar", $.mobile.toolbar, { - options: { - position:null, - visibleOnPageShow: true, - disablePageZoom: true, - transition: "slide", //can be none, fade, slide (slide maps to slideup or slidedown) - fullscreen: false, - tapToggle: true, - tapToggleBlacklist: "a, button, input, select, textarea, .ui-header-fixed, .ui-footer-fixed, .ui-flipswitch, .ui-popup, .ui-panel, .ui-panel-dismiss-open", - hideDuringFocus: "input, textarea, select", - updatePagePadding: true, - trackPersistentToolbars: true, - - // Browser detection! Weeee, here we go... - // Unfortunately, position:fixed is costly, not to mention probably impossible, to feature-detect accurately. - // Some tests exist, but they currently return false results in critical devices and browsers, which could lead to a broken experience. - // Testing fixed positioning is also pretty obtrusive to page load, requiring injected elements and scrolling the window - // The following function serves to rule out some popular browsers with known fixed-positioning issues - // This is a plugin option like any other, so feel free to improve or overwrite it - supportBlacklist: function() { - return !$.support.fixedPosition; - } - }, - - _create: function() { - this._super(); - if ( this.options.position === "fixed" && !this.options.supportBlacklist() ) { - this._makeFixed(); - } - }, - - _makeFixed: function() { - this.element.addClass( "ui-"+ this.role +"-fixed" ); - this.updatePagePadding(); - this._addTransitionClass(); - this._bindPageEvents(); - this._bindToggleHandlers(); - }, - - _setOptions: function( o ) { - if ( o.position === "fixed" && this.options.position !== "fixed" ) { - this._makeFixed(); - } - if ( this.options.position === "fixed" && !this.options.supportBlacklist() ) { - var $page = ( !!this.page )? this.page: ( $(".ui-page-active").length > 0 )? $(".ui-page-active"): $(".ui-page").eq(0); - - if ( o.fullscreen !== undefined) { - if ( o.fullscreen ) { - this.element.addClass( "ui-"+ this.role +"-fullscreen" ); - $page.addClass( "ui-page-" + this.role + "-fullscreen" ); - } - // If not fullscreen, add class to page to set top or bottom padding - else { - this.element.removeClass( "ui-"+ this.role +"-fullscreen" ); - $page.removeClass( "ui-page-" + this.role + "-fullscreen" ).addClass( "ui-page-" + this.role+ "-fixed" ); - } - } - } - this._super(o); - }, - - _addTransitionClass: function() { - var tclass = this.options.transition; - - if ( tclass && tclass !== "none" ) { - // use appropriate slide for header or footer - if ( tclass === "slide" ) { - tclass = this.element.hasClass( "ui-header" ) ? "slidedown" : "slideup"; - } - - this.element.addClass( tclass ); - } - }, - - _bindPageEvents: function() { - var page = ( !!this.page )? this.element.closest( ".ui-page" ): this.document; - //page event bindings - // Fixed toolbars require page zoom to be disabled, otherwise usability issues crop up - // This method is meant to disable zoom while a fixed-positioned toolbar page is visible - this._on( page , { - "pagebeforeshow": "_handlePageBeforeShow", - "webkitAnimationStart":"_handleAnimationStart", - "animationstart":"_handleAnimationStart", - "updatelayout": "_handleAnimationStart", - "pageshow": "_handlePageShow", - "pagebeforehide": "_handlePageBeforeHide" - }); - }, - - _handlePageBeforeShow: function( ) { - var o = this.options; - if ( o.disablePageZoom ) { - $.mobile.zoom.disable( true ); - } - if ( !o.visibleOnPageShow ) { - this.hide( true ); - } - }, - - _handleAnimationStart: function() { - if ( this.options.updatePagePadding ) { - this.updatePagePadding( ( !!this.page )? this.page: ".ui-page-active" ); - } - }, - - _handlePageShow: function() { - this.updatePagePadding( ( !!this.page )? this.page: ".ui-page-active" ); - if ( this.options.updatePagePadding ) { - this._on( this.window, { "throttledresize": "updatePagePadding" } ); - } - }, - - _handlePageBeforeHide: function( e, ui ) { - var o = this.options, - thisFooter, thisHeader, nextFooter, nextHeader; - - if ( o.disablePageZoom ) { - $.mobile.zoom.enable( true ); - } - if ( o.updatePagePadding ) { - this._off( this.window, "throttledresize" ); - } - - if ( o.trackPersistentToolbars ) { - thisFooter = $( ".ui-footer-fixed:jqmData(id)", this.page ); - thisHeader = $( ".ui-header-fixed:jqmData(id)", this.page ); - nextFooter = thisFooter.length && ui.nextPage && $( ".ui-footer-fixed:jqmData(id='" + thisFooter.jqmData( "id" ) + "')", ui.nextPage ) || $(); - nextHeader = thisHeader.length && ui.nextPage && $( ".ui-header-fixed:jqmData(id='" + thisHeader.jqmData( "id" ) + "')", ui.nextPage ) || $(); - - if ( nextFooter.length || nextHeader.length ) { - - nextFooter.add( nextHeader ).appendTo( $.mobile.pageContainer ); - - ui.nextPage.one( "pageshow", function() { - nextHeader.prependTo( this ); - nextFooter.appendTo( this ); - }); - } - } - }, - - _visible: true, - - // This will set the content element's top or bottom padding equal to the toolbar's height - updatePagePadding: function( tbPage ) { - var $el = this.element, - header = ( this.role ==="header" ), - pos = parseFloat( $el.css( header ? "top" : "bottom" ) ); - - // This behavior only applies to "fixed", not "fullscreen" - if ( this.options.fullscreen ) { return; } - // tbPage argument can be a Page object or an event, if coming from throttled resize. - tbPage = ( tbPage && tbPage.type === undefined && tbPage ) || this.page || $el.closest( ".ui-page" ); - tbPage = ( !!this.page )? this.page: ".ui-page-active"; - $( tbPage ).css( "padding-" + ( header ? "top" : "bottom" ), $el.outerHeight() + pos ); - }, - - _useTransition: function( notransition ) { - var $win = this.window, - $el = this.element, - scroll = $win.scrollTop(), - elHeight = $el.height(), - pHeight = ( !!this.page )? $el.closest( ".ui-page" ).height():$(".ui-page-active").height(), - viewportHeight = $.mobile.getScreenHeight(); - - return !notransition && - ( this.options.transition && this.options.transition !== "none" && - ( - ( this.role === "header" && !this.options.fullscreen && scroll > elHeight ) || - ( this.role === "footer" && !this.options.fullscreen && scroll + viewportHeight < pHeight - elHeight ) - ) || this.options.fullscreen - ); - }, - - show: function( notransition ) { - var hideClass = "ui-fixed-hidden", - $el = this.element; - - if ( this._useTransition( notransition ) ) { - $el - .removeClass( "out " + hideClass ) - .addClass( "in" ) - .animationComplete(function () { - $el.removeClass( "in" ); - }); - } - else { - $el.removeClass( hideClass ); - } - this._visible = true; - }, - - hide: function( notransition ) { - var hideClass = "ui-fixed-hidden", - $el = this.element, - // if it's a slide transition, our new transitions need the reverse class as well to slide outward - outclass = "out" + ( this.options.transition === "slide" ? " reverse" : "" ); - - if ( this._useTransition( notransition ) ) { - $el - .addClass( outclass ) - .removeClass( "in" ) - .animationComplete(function() { - $el.addClass( hideClass ).removeClass( outclass ); - }); - } - else { - $el.addClass( hideClass ).removeClass( outclass ); - } - this._visible = false; - }, - - toggle: function() { - this[ this._visible ? "hide" : "show" ](); - }, - - _bindToggleHandlers: function() { - var self = this, - o = self.options, - delayShow, delayHide, - isVisible = true, - page = ( !!this.page )? this.page: $(".ui-page"); - - // tap toggle - page - .bind( "vclick", function( e ) { - if ( o.tapToggle && !$( e.target ).closest( o.tapToggleBlacklist ).length ) { - self.toggle(); - } - }) - .bind( "focusin focusout", function( e ) { - //this hides the toolbars on a keyboard pop to give more screen room and prevent ios bug which - //positions fixed toolbars in the middle of the screen on pop if the input is near the top or - //bottom of the screen addresses issues #4410 Footer navbar moves up when clicking on a textbox in an Android environment - //and issue #4113 Header and footer change their position after keyboard popup - iOS - //and issue #4410 Footer navbar moves up when clicking on a textbox in an Android environment - if ( screen.width < 1025 && $( e.target ).is( o.hideDuringFocus ) && !$( e.target ).closest( ".ui-header-fixed, .ui-footer-fixed" ).length ) { - //Fix for issue #4724 Moving through form in Mobile Safari with "Next" and "Previous" system - //controls causes fixed position, tap-toggle false Header to reveal itself - // isVisible instead of self._visible because the focusin and focusout events fire twice at the same time - // Also use a delay for hiding the toolbars because on Android native browser focusin is direclty followed - // by a focusout when a native selects opens and the other way around when it closes. - if ( e.type === "focusout" && !isVisible ) { - isVisible = true; - //wait for the stack to unwind and see if we have jumped to another input - clearTimeout( delayHide ); - delayShow = setTimeout( function() { - self.show(); - }, 0 ); - } else if ( e.type === "focusin" && !!isVisible ) { - //if we have jumped to another input clear the time out to cancel the show. - clearTimeout( delayShow ); - isVisible = false; - delayHide = setTimeout( function() { - self.hide(); - }, 0 ); - } - } - }); - }, - - _setRelative: function() { - if( this.options.position !== "fixed" ){ - $( "[data-"+ $.mobile.ns + "role='page']" ).css({ "position": "relative" }); - } - }, - - _destroy: function() { - var $el = this.element, - header = $el.hasClass( "ui-header" ); - - $el.closest( ".ui-page" ).css( "padding-" + ( header ? "top" : "bottom" ), "" ); - $el.removeClass( "ui-header-fixed ui-footer-fixed ui-header-fullscreen ui-footer-fullscreen in out fade slidedown slideup ui-fixed-hidden" ); - $el.closest( ".ui-page" ).removeClass( "ui-page-header-fixed ui-page-footer-fixed ui-page-header-fullscreen ui-page-footer-fullscreen" ); - } - - }); -})( jQuery ); - -(function( $, undefined ) { - $.widget( "mobile.toolbar", $.mobile.toolbar, { - - _makeFixed: function() { - this._super(); - this._workarounds(); - }, - - //check the browser and version and run needed workarounds - _workarounds: function() { - var ua = navigator.userAgent, - platform = navigator.platform, - // Rendering engine is Webkit, and capture major version - wkmatch = ua.match( /AppleWebKit\/([0-9]+)/ ), - wkversion = !!wkmatch && wkmatch[ 1 ], - os = null, - self = this; - //set the os we are working in if it dosent match one with workarounds return - if ( platform.indexOf( "iPhone" ) > -1 || platform.indexOf( "iPad" ) > -1 || platform.indexOf( "iPod" ) > -1 ) { - os = "ios"; - } else if ( ua.indexOf( "Android" ) > -1 ) { - os = "android"; - } else { - return; - } - //check os version if it dosent match one with workarounds return - if ( os === "ios" ) { - //iOS workarounds - self._bindScrollWorkaround(); - } else if ( os === "android" && wkversion && wkversion < 534 ) { - //Android 2.3 run all Android 2.3 workaround - self._bindScrollWorkaround(); - self._bindListThumbWorkaround(); - } else { - return; - } - }, - - //Utility class for checking header and footer positions relative to viewport - _viewportOffset: function() { - var $el = this.element, - header = $el.hasClass( "ui-header" ), - offset = Math.abs( $el.offset().top - this.window.scrollTop() ); - if ( !header ) { - offset = Math.round( offset - this.window.height() + $el.outerHeight() ) - 60; - } - return offset; - }, - - //bind events for _triggerRedraw() function - _bindScrollWorkaround: function() { - var self = this; - //bind to scrollstop and check if the toolbars are correctly positioned - this._on( this.window, { scrollstop: function() { - var viewportOffset = self._viewportOffset(); - //check if the header is visible and if its in the right place - if ( viewportOffset > 2 && self._visible ) { - self._triggerRedraw(); - } - }}); - }, - - //this addresses issue #4250 Persistent footer instability in v1.1 with long select lists in Android 2.3.3 - //and issue #3748 Android 2.x: Page transitions broken when fixed toolbars used - //the absolutely positioned thumbnail in a list view causes problems with fixed position buttons above in a nav bar - //setting the li's to -webkit-transform:translate3d(0,0,0); solves this problem to avoide potential issues in other - //platforms we scope this with the class ui-android-2x-fix - _bindListThumbWorkaround: function() { - this.element.closest( ".ui-page" ).addClass( "ui-android-2x-fixed" ); - }, - //this addresses issues #4337 Fixed header problem after scrolling content on iOS and Android - //and device bugs project issue #1 Form elements can lose click hit area in position: fixed containers. - //this also addresses not on fixed toolbars page in docs - //adding 1px of padding to the bottom then removing it causes a "redraw" - //which positions the toolbars correctly (they will always be visually correct) - _triggerRedraw: function() { - var paddingBottom = parseFloat( $( ".ui-page-active" ).css( "padding-bottom" ) ); - //trigger page redraw to fix incorrectly positioned fixed elements - $( ".ui-page-active" ).css( "padding-bottom", ( paddingBottom + 1 ) + "px" ); - //if the padding is reset with out a timeout the reposition will not occure. - //this is independant of JQM the browser seems to need the time to react. - setTimeout( function() { - $( ".ui-page-active" ).css( "padding-bottom", paddingBottom + "px" ); - }, 0 ); - }, - - destroy: function() { - this._super(); - //Remove the class we added to the page previously in android 2.x - this.element.closest( ".ui-page-active" ).removeClass( "ui-android-2x-fix" ); - } - }); - -})( jQuery ); - - -( function( $, undefined ) { - -var ieHack = ( $.mobile.browser.oldIE && $.mobile.browser.oldIE <= 8 ), - uiTemplate = $( - "<div class='ui-popup-arrow-guide'></div>" + - "<div class='ui-popup-arrow-container" + ( ieHack ? " ie" : "" ) + "'>" + - "<div class='ui-popup-arrow'></div>" + - "</div>" - ); - -function getArrow() { - var clone = uiTemplate.clone(), - gd = clone.eq( 0 ), - ct = clone.eq( 1 ), - ar = ct.children(); - - return { arEls: ct.add( gd ), gd: gd, ct: ct, ar: ar }; -} - -$.widget( "mobile.popup", $.mobile.popup, { - options: { - - arrow: "" - }, - - _create: function() { - var ar, - ret = this._super(); - - if ( this.options.arrow ) { - this._ui.arrow = ar = this._addArrow(); - } - - return ret; - }, - - _addArrow: function() { - var theme, - opts = this.options, - ar = getArrow(); - - theme = this._themeClassFromOption( "ui-body-", opts.theme ); - ar.ar.addClass( theme + ( opts.shadow ? " ui-overlay-shadow" : "" ) ); - ar.arEls.hide().appendTo( this.element ); - - return ar; - }, - - _unenhance: function() { - var ar = this._ui.arrow; - - if ( ar ) { - ar.arEls.remove(); - } - - return this._super(); - }, - - // Pretend to show an arrow described by @p and @dir and calculate the - // distance from the desired point. If a best-distance is passed in, return - // the minimum of the one passed in and the one calculated. - _tryAnArrow: function( p, dir, desired, s, best ) { - var result, r, diff, desiredForArrow = {}, tip = {}; - - // If the arrow has no wiggle room along the edge of the popup, it cannot - // be displayed along the requested edge without it sticking out. - if ( s.arFull[ p.dimKey ] > s.guideDims[ p.dimKey ] ) { - return best; - } - - desiredForArrow[ p.fst ] = desired[ p.fst ] + - ( s.arHalf[ p.oDimKey ] + s.menuHalf[ p.oDimKey ] ) * p.offsetFactor - - s.contentBox[ p.fst ] + ( s.clampInfo.menuSize[ p.oDimKey ] - s.contentBox[ p.oDimKey ] ) * p.arrowOffsetFactor; - desiredForArrow[ p.snd ] = desired[ p.snd ]; - - result = s.result || this._calculateFinalLocation( desiredForArrow, s.clampInfo ); - r = { x: result.left, y: result.top }; - - tip[ p.fst ] = r[ p.fst ] + s.contentBox[ p.fst ] + p.tipOffset; - tip[ p.snd ] = Math.max( result[ p.prop ] + s.guideOffset[ p.prop ] + s.arHalf[ p.dimKey ], - Math.min( result[ p.prop ] + s.guideOffset[ p.prop ] + s.guideDims[ p.dimKey ] - s.arHalf[ p.dimKey ], - desired[ p.snd ] ) ); - - diff = Math.abs( desired.x - tip.x ) + Math.abs( desired.y - tip.y ); - if ( !best || diff < best.diff ) { - // Convert tip offset to coordinates inside the popup - tip[ p.snd ] -= s.arHalf[ p.dimKey ] + result[ p.prop ] + s.contentBox[ p.snd ]; - best = { dir: dir, diff: diff, result: result, posProp: p.prop, posVal: tip[ p.snd ] }; - } - - return best; - }, - - _getPlacementState: function( clamp ) { - var offset, gdOffset, - ar = this._ui.arrow, - state = { - clampInfo: this._clampPopupWidth( !clamp ), - arFull: { cx: ar.ct.width(), cy: ar.ct.height() }, - guideDims: { cx: ar.gd.width(), cy: ar.gd.height() }, - guideOffset: ar.gd.offset() - }; - - offset = this.element.offset(); - - ar.gd.css( { left: 0, top: 0, right: 0, bottom: 0 } ); - gdOffset = ar.gd.offset(); - state.contentBox = { - x: gdOffset.left - offset.left, - y: gdOffset.top - offset.top, - cx: ar.gd.width(), - cy: ar.gd.height() - }; - ar.gd.removeAttr( "style" ); - - // The arrow box moves between guideOffset and guideOffset + guideDims - arFull - state.guideOffset = { left: state.guideOffset.left - offset.left, top: state.guideOffset.top - offset.top }; - state.arHalf = { cx: state.arFull.cx / 2, cy: state.arFull.cy / 2 }; - state.menuHalf = { cx: state.clampInfo.menuSize.cx / 2, cy: state.clampInfo.menuSize.cy / 2 }; - - return state; - }, - - _placementCoords: function( desired ) { - var state, best, params, elOffset, bgRef, - optionValue = this.options.arrow, - ar = this._ui.arrow; - - if ( !ar ) { - return this._super( desired ); - } - - ar.arEls.show(); - - bgRef = {}; - state = this._getPlacementState( true ); - params = { - "l": { fst: "x", snd: "y", prop: "top", dimKey: "cy", oDimKey: "cx", offsetFactor: 1, tipOffset: -state.arHalf.cx, arrowOffsetFactor: 0 }, - "r": { fst: "x", snd: "y", prop: "top", dimKey: "cy", oDimKey: "cx", offsetFactor: -1, tipOffset: state.arHalf.cx + state.contentBox.cx, arrowOffsetFactor: 1 }, - "b": { fst: "y", snd: "x", prop: "left", dimKey: "cx", oDimKey: "cy", offsetFactor: -1, tipOffset: state.arHalf.cy + state.contentBox.cy, arrowOffsetFactor: 1 }, - "t": { fst: "y", snd: "x", prop: "left", dimKey: "cx", oDimKey: "cy", offsetFactor: 1, tipOffset: -state.arHalf.cy, arrowOffsetFactor: 0 } - }; - - // Try each side specified in the options to see on which one the arrow - // should be placed such that the distance between the tip of the arrow and - // the desired coordinates is the shortest. - $.each( ( optionValue === true ? "l,t,r,b" : optionValue ).split( "," ), - $.proxy( function( key, value ) { - best = this._tryAnArrow( params[ value ], value, desired, state, best ); - }, this ) ); - - // Could not place the arrow along any of the edges - behave as if showing - // the arrow was turned off. - if ( !best ) { - ar.arEls.hide(); - return this._super( desired ); - } - - // Move the arrow into place - ar.ct - .removeClass( "ui-popup-arrow-l ui-popup-arrow-t ui-popup-arrow-r ui-popup-arrow-b" ) - .addClass( "ui-popup-arrow-" + best.dir ) - .removeAttr( "style" ).css( best.posProp, best.posVal ) - .show(); - - // Do not move/size the background div on IE, because we use the arrow div for background as well. - if ( !ieHack ) { - elOffset = this.element.offset(); - bgRef[ params[ best.dir ].fst ] = ar.ct.offset(); - bgRef[ params[ best.dir ].snd ] = { - left: elOffset.left + state.contentBox.x, - top: elOffset.top + state.contentBox.y - }; - } - - return best.result; - }, - - _setOptions: function( opts ) { - var newTheme, - oldTheme = this.options.theme, - ar = this._ui.arrow, - ret = this._super( opts ); - - if ( opts.arrow !== undefined ) { - if ( !ar && opts.arrow ) { - this._ui.arrow = this._addArrow(); - - // Important to return here so we don't set the same options all over - // again below. - return; - } else if ( ar && !opts.arrow ) { - ar.arEls.remove(); - this._ui.arrow = null; - } - } - - // Reassign with potentially new arrow - ar = this._ui.arrow; - - if ( ar ) { - if ( opts.theme !== undefined ) { - oldTheme = this._themeClassFromOption( "ui-body-", oldTheme ); - newTheme = this._themeClassFromOption( "ui-body-", opts.theme ); - ar.ar.removeClass( oldTheme ).addClass( newTheme ); - } - - if ( opts.shadow !== undefined ) { - ar.ar.toggleClass( "ui-overlay-shadow", opts.shadow ); - } - } - - return ret; - }, - - _destroy: function() { - var ar = this._ui.arrow; - - if ( ar ) { - ar.arEls.remove(); - } - - return this._super(); - } -}); - -})( jQuery ); - - -(function( $, undefined ) { - -$.widget( "mobile.panel", { - options: { - classes: { - panel: "ui-panel", - panelOpen: "ui-panel-open", - panelClosed: "ui-panel-closed", - panelFixed: "ui-panel-fixed", - panelInner: "ui-panel-inner", - modal: "ui-panel-dismiss", - modalOpen: "ui-panel-dismiss-open", - pageContainer: "ui-panel-page-container", - pageWrapper: "ui-panel-wrapper", - pageFixedToolbar: "ui-panel-fixed-toolbar", - pageContentPrefix: "ui-panel-page-content", /* Used for wrapper and fixed toolbars position, display and open classes. */ - animate: "ui-panel-animate" - }, - animate: true, - theme: null, - position: "left", - dismissible: true, - display: "reveal", //accepts reveal, push, overlay - swipeClose: true, - positionFixed: false - }, - - _closeLink: null, - _parentPage: null, - _page: null, - _modal: null, - _panelInner: null, - _wrapper: null, - _fixedToolbars: null, - - _create: function() { - var el = this.element, - parentPage = el.closest( ".ui-page, :jqmData(role='page')" ); - - // expose some private props to other methods - $.extend( this, { - _closeLink: el.find( ":jqmData(rel='close')" ), - _parentPage: ( parentPage.length > 0 ) ? parentPage : false, - _openedPage: null, - _page: this._getPage, - _panelInner: this._getPanelInner(), - _fixedToolbars: this._getFixedToolbars - }); - if ( this.options.display !== "overlay" ){ - this._getWrapper(); - } - this._addPanelClasses(); - - // if animating, add the class to do so - if ( $.support.cssTransform3d && !!this.options.animate ) { - this.element.addClass( this.options.classes.animate ); - } - - this._bindUpdateLayout(); - this._bindCloseEvents(); - this._bindLinkListeners(); - this._bindPageEvents(); - - if ( !!this.options.dismissible ) { - this._createModal(); - } - - this._bindSwipeEvents(); - }, - - _getPanelInner: function() { - var panelInner = this.element.find( "." + this.options.classes.panelInner ); - - if ( panelInner.length === 0 ) { - panelInner = this.element.children().wrapAll( "<div class='" + this.options.classes.panelInner + "' />" ).parent(); - } - - return panelInner; - }, - - _createModal: function() { - var self = this, - target = self._parentPage ? self._parentPage.parent() : self.element.parent(); - - self._modal = $( "<div class='" + self.options.classes.modal + "'></div>" ) - .on( "mousedown", function() { - self.close(); - }) - .appendTo( target ); - }, - - _getPage: function() { - var page = this._openedPage || this._parentPage || $( "." + $.mobile.activePageClass ); - - return page; - }, - - _getWrapper: function() { - var wrapper = this._page().find( "." + this.options.classes.pageWrapper ); - if ( wrapper.length === 0 ) { - wrapper = this._page().children( ".ui-header:not(.ui-header-fixed), .ui-content:not(.ui-popup), .ui-footer:not(.ui-footer-fixed)" ) - .wrapAll( "<div class='" + this.options.classes.pageWrapper + "'></div>" ) - .parent(); - } - - this._wrapper = wrapper; - }, - - _getFixedToolbars: function() { - var extFixedToolbars = $( "body" ).children( ".ui-header-fixed, .ui-footer-fixed" ), - intFixedToolbars = this._page().find( ".ui-header-fixed, .ui-footer-fixed" ), - fixedToolbars = extFixedToolbars.add( intFixedToolbars ).addClass( this.options.classes.pageFixedToolbar ); - - return fixedToolbars; - }, - - _getPosDisplayClasses: function( prefix ) { - return prefix + "-position-" + this.options.position + " " + prefix + "-display-" + this.options.display; - }, - - _getPanelClasses: function() { - var panelClasses = this.options.classes.panel + - " " + this._getPosDisplayClasses( this.options.classes.panel ) + - " " + this.options.classes.panelClosed + - " " + "ui-body-" + ( this.options.theme ? this.options.theme : "inherit" ); - - if ( !!this.options.positionFixed ) { - panelClasses += " " + this.options.classes.panelFixed; - } - - return panelClasses; - }, - - _addPanelClasses: function() { - this.element.addClass( this._getPanelClasses() ); - }, - - _handleCloseClick: function( event ) { - if ( !event.isDefaultPrevented() ) { - this.close(); - } - }, - - _bindCloseEvents: function() { - this._on( this._closeLink, { - "click": "_handleCloseClick" - }); - - this._on({ - "click a:jqmData(ajax='false')": "_handleCloseClick" - }); - }, - - _positionPanel: function( scrollToTop ) { - var self = this, - panelInnerHeight = self._panelInner.outerHeight(), - expand = panelInnerHeight > $.mobile.getScreenHeight(); - - if ( expand || !self.options.positionFixed ) { - if ( expand ) { - self._unfixPanel(); - $.mobile.resetActivePageHeight( panelInnerHeight ); - } - if ( scrollToTop ) { - this.window[ 0 ].scrollTo( 0, $.mobile.defaultHomeScroll ); - } - } else { - self._fixPanel(); - } - }, - - _bindFixListener: function() { - this._on( $( window ), { "throttledresize": "_positionPanel" }); - }, - - _unbindFixListener: function() { - this._off( $( window ), "throttledresize" ); - }, - - _unfixPanel: function() { - if ( !!this.options.positionFixed && $.support.fixedPosition ) { - this.element.removeClass( this.options.classes.panelFixed ); - } - }, - - _fixPanel: function() { - if ( !!this.options.positionFixed && $.support.fixedPosition ) { - this.element.addClass( this.options.classes.panelFixed ); - } - }, - - _bindUpdateLayout: function() { - var self = this; - - self.element.on( "updatelayout", function(/* e */) { - if ( self._open ) { - self._positionPanel(); - } - }); - }, - - _bindLinkListeners: function() { - this._on( "body", { - "click a": "_handleClick" - }); - - }, - - _handleClick: function( e ) { - var link, - panelId = this.element.attr( "id" ); - - if ( e.currentTarget.href.split( "#" )[ 1 ] === panelId && panelId !== undefined ) { - - e.preventDefault(); - link = $( e.target ); - if ( link.hasClass( "ui-btn" ) ) { - link.addClass( $.mobile.activeBtnClass ); - this.element.one( "panelopen panelclose", function() { - link.removeClass( $.mobile.activeBtnClass ); - }); - } - this.toggle(); - } - }, - - _bindSwipeEvents: function() { - var self = this, - area = self._modal ? self.element.add( self._modal ) : self.element; - - // on swipe, close the panel - if ( !!self.options.swipeClose ) { - if ( self.options.position === "left" ) { - area.on( "swipeleft.panel", function(/* e */) { - self.close(); - }); - } else { - area.on( "swiperight.panel", function(/* e */) { - self.close(); - }); - } - } - }, - - _bindPageEvents: function() { - var self = this; - - this.document - // Close the panel if another panel on the page opens - .on( "panelbeforeopen", function( e ) { - if ( self._open && e.target !== self.element[ 0 ] ) { - self.close(); - } - }) - // On escape, close? might need to have a target check too... - .on( "keyup.panel", function( e ) { - if ( e.keyCode === 27 && self._open ) { - self.close(); - } - }); - if ( !this._parentPage && this.options.display !== "overlay" ) { - this._on( this.document, { - "pageshow": "_getWrapper" - }); - } - // Clean up open panels after page hide - if ( self._parentPage ) { - this.document.on( "pagehide", ":jqmData(role='page')", function() { - if ( self._open ) { - self.close( true ); - } - }); - } else { - this.document.on( "pagebeforehide", function() { - if ( self._open ) { - self.close( true ); - } - }); - } - }, - - // state storage of open or closed - _open: false, - _pageContentOpenClasses: null, - _modalOpenClasses: null, - - open: function( immediate ) { - if ( !this._open ) { - var self = this, - o = self.options, - - _openPanel = function() { - self._off( self.document , "panelclose" ); - self._page().jqmData( "panel", "open" ); - - if ( $.support.cssTransform3d && !!o.animate && o.display !== "overlay" ) { - self._wrapper.addClass( o.classes.animate ); - self._fixedToolbars().addClass( o.classes.animate ); - } - - if ( !immediate && $.support.cssTransform3d && !!o.animate ) { - ( self._wrapper || self.element ) - .animationComplete( complete, "transition" ); - } else { - setTimeout( complete, 0 ); - } - - if ( o.theme && o.display !== "overlay" ) { - self._page().parent() - .addClass( o.classes.pageContainer + "-themed " + o.classes.pageContainer + "-" + o.theme ); - } - - self.element - .removeClass( o.classes.panelClosed ) - .addClass( o.classes.panelOpen ); - - self._positionPanel( true ); - - self._pageContentOpenClasses = self._getPosDisplayClasses( o.classes.pageContentPrefix ); - - if ( o.display !== "overlay" ) { - self._page().parent().addClass( o.classes.pageContainer ); - self._wrapper.addClass( self._pageContentOpenClasses ); - self._fixedToolbars().addClass( self._pageContentOpenClasses ); - } - - self._modalOpenClasses = self._getPosDisplayClasses( o.classes.modal ) + " " + o.classes.modalOpen; - if ( self._modal ) { - self._modal - .addClass( self._modalOpenClasses ) - .height( Math.max( self._modal.height(), self.document.height() ) ); - } - }, - complete = function() { - - // Bail if the panel was closed before the opening animation has completed - if ( !self._open ) { - return; - } - - if ( o.display !== "overlay" ) { - self._wrapper.addClass( o.classes.pageContentPrefix + "-open" ); - self._fixedToolbars().addClass( o.classes.pageContentPrefix + "-open" ); - } - - self._bindFixListener(); - - self._trigger( "open" ); - - self._openedPage = self._page(); - }; - - self._trigger( "beforeopen" ); - - if ( self._page().jqmData( "panel" ) === "open" ) { - self._on( self.document, { - "panelclose": _openPanel - }); - } else { - _openPanel(); - } - - self._open = true; - } - }, - - close: function( immediate ) { - if ( this._open ) { - var self = this, - o = this.options, - - _closePanel = function() { - - self.element.removeClass( o.classes.panelOpen ); - - if ( o.display !== "overlay" ) { - self._wrapper.removeClass( self._pageContentOpenClasses ); - self._fixedToolbars().removeClass( self._pageContentOpenClasses ); - } - - if ( !immediate && $.support.cssTransform3d && !!o.animate ) { - ( self._wrapper || self.element ) - .animationComplete( complete, "transition" ); - } else { - setTimeout( complete, 0 ); - } - - if ( self._modal ) { - self._modal - .removeClass( self._modalOpenClasses ) - .height( "" ); - } - }, - complete = function() { - if ( o.theme && o.display !== "overlay" ) { - self._page().parent().removeClass( o.classes.pageContainer + "-themed " + o.classes.pageContainer + "-" + o.theme ); - } - - self.element.addClass( o.classes.panelClosed ); - - if ( o.display !== "overlay" ) { - self._page().parent().removeClass( o.classes.pageContainer ); - self._wrapper.removeClass( o.classes.pageContentPrefix + "-open" ); - self._fixedToolbars().removeClass( o.classes.pageContentPrefix + "-open" ); - } - - if ( $.support.cssTransform3d && !!o.animate && o.display !== "overlay" ) { - self._wrapper.removeClass( o.classes.animate ); - self._fixedToolbars().removeClass( o.classes.animate ); - } - - self._fixPanel(); - self._unbindFixListener(); - $.mobile.resetActivePageHeight(); - - self._page().jqmRemoveData( "panel" ); - - self._trigger( "close" ); - - self._openedPage = null; - }; - - self._trigger( "beforeclose" ); - - _closePanel(); - - self._open = false; - } - }, - - toggle: function() { - this[ this._open ? "close" : "open" ](); - }, - - _destroy: function() { - var otherPanels, - o = this.options, - multiplePanels = ( $( "body > :mobile-panel" ).length + $.mobile.activePage.find( ":mobile-panel" ).length ) > 1; - - if ( o.display !== "overlay" ) { - - // remove the wrapper if not in use by another panel - otherPanels = $( "body > :mobile-panel" ).add( $.mobile.activePage.find( ":mobile-panel" ) ); - if ( otherPanels.not( ".ui-panel-display-overlay" ).not( this.element ).length === 0 ) { - this._wrapper.children().unwrap(); - } - - if ( this._open ) { - - this._fixedToolbars().removeClass( o.classes.pageContentPrefix + "-open" ); - - if ( $.support.cssTransform3d && !!o.animate ) { - this._fixedToolbars().removeClass( o.classes.animate ); - } - - this._page().parent().removeClass( o.classes.pageContainer ); - - if ( o.theme ) { - this._page().parent().removeClass( o.classes.pageContainer + "-themed " + o.classes.pageContainer + "-" + o.theme ); - } - } - } - - if ( !multiplePanels ) { - - this.document.off( "panelopen panelclose" ); - - } - - if ( this._open ) { - this._page().jqmRemoveData( "panel" ); - } - - this._panelInner.children().unwrap(); - - this.element - .removeClass( [ this._getPanelClasses(), o.classes.panelOpen, o.classes.animate ].join( " " ) ) - .off( "swipeleft.panel swiperight.panel" ) - .off( "panelbeforeopen" ) - .off( "panelhide" ) - .off( "keyup.panel" ) - .off( "updatelayout" ); - - if ( this._modal ) { - this._modal.remove(); - } - } -}); - -})( jQuery ); - -(function( $, undefined ) { - -$.widget( "mobile.table", { - options: { - classes: { - table: "ui-table" - }, - enhanced: false - }, - - _create: function() { - if ( !this.options.enhanced ) { - this.element.addClass( this.options.classes.table ); - } - - // extend here, assign on refresh > _setHeaders - $.extend( this, { - - // Expose headers and allHeaders properties on the widget - // headers references the THs within the first TR in the table - headers: undefined, - - // allHeaders references headers, plus all THs in the thead, which may - // include several rows, or not - allHeaders: undefined - }); - - this._refresh( true ); - }, - - _setHeaders: function() { - var trs = this.element.find( "thead tr" ); - - this.headers = this.element.find( "tr:eq(0)" ).children(); - this.allHeaders = this.headers.add( trs.children() ); - }, - - refresh: function() { - this._refresh(); - }, - - rebuild: $.noop, - - _refresh: function( /* create */ ) { - var table = this.element, - trs = table.find( "thead tr" ); - - // updating headers on refresh (fixes #5880) - this._setHeaders(); - - // Iterate over the trs - trs.each( function() { - var columnCount = 0; - - // Iterate over the children of the tr - $( this ).children().each( function() { - var span = parseInt( this.getAttribute( "colspan" ), 10 ), - selector = ":nth-child(" + ( columnCount + 1 ) + ")", - j; - - this.setAttribute( "data-" + $.mobile.ns + "colstart", columnCount + 1 ); - - if ( span ) { - for( j = 0; j < span - 1; j++ ) { - columnCount++; - selector += ", :nth-child(" + ( columnCount + 1 ) + ")"; - } - } - - // Store "cells" data on header as a reference to all cells in the - // same column as this TH - $( this ).jqmData( "cells", table.find( "tr" ).not( trs.eq( 0 ) ).not( this ).children( selector ) ); - - columnCount++; - }); - }); - } -}); - -})( jQuery ); - - -(function( $, undefined ) { - -$.widget( "mobile.table", $.mobile.table, { - options: { - mode: "columntoggle", - columnBtnTheme: null, - columnPopupTheme: null, - columnBtnText: "Columns...", - classes: $.extend( $.mobile.table.prototype.options.classes, { - popup: "ui-table-columntoggle-popup", - columnBtn: "ui-table-columntoggle-btn", - priorityPrefix: "ui-table-priority-", - columnToggleTable: "ui-table-columntoggle" - }) - }, - - _create: function() { - this._super(); - - if ( this.options.mode !== "columntoggle" ) { - return; - } - - $.extend( this, { - _menu: null - }); - - if ( this.options.enhanced ) { - this._menu = $( this.document[ 0 ].getElementById( this._id() + "-popup" ) ).children().first(); - this._addToggles( this._menu, true ); - } else { - this._menu = this._enhanceColToggle(); - this.element.addClass( this.options.classes.columnToggleTable ); - } - - this._setupEvents(); - - this._setToggleState(); - }, - - _id: function() { - return ( this.element.attr( "id" ) || ( this.widgetName + this.uuid ) ); - }, - - _setupEvents: function() { - //NOTE: inputs are bound in bindToggles, - // so it can be called on refresh, too - - // update column toggles on resize - this._on( this.window, { - throttledresize: "_setToggleState" - }); - this._on( this._menu, { - "change input": "_menuInputChange" - }); - }, - - _addToggles: function( menu, keep ) { - var inputs, - checkboxIndex = 0, - opts = this.options, - container = menu.controlgroup( "container" ); - - // allow update of menu on refresh (fixes #5880) - if ( keep ) { - inputs = menu.find( "input" ); - } else { - container.empty(); - } - - // create the hide/show toggles - this.headers.not( "td" ).each( function() { - var input, cells, - header = $( this ), - priority = $.mobile.getAttribute( this, "priority" ); - - if ( priority ) { - cells = header.add( header.jqmData( "cells" ) ); - cells.addClass( opts.classes.priorityPrefix + priority ); - - // Make sure the (new?) checkbox is associated with its header via .jqmData() and - // that, vice versa, the header is also associated with the checkbox - input = ( keep ? inputs.eq( checkboxIndex++ ) : - $("<label><input type='checkbox' checked />" + - ( header.children( "abbr" ).first().attr( "title" ) || - header.text() ) + - "</label>" ) - .appendTo( container ) - .children( 0 ) - .checkboxradio( { - theme: opts.columnPopupTheme - }) ) - - // Associate the header with the checkbox - .jqmData( "header", header ) - .jqmData( "cells", cells ); - - // Associate the checkbox with the header - header.jqmData( "input", input ); - } - }); - - // set bindings here - if ( !keep ) { - menu.controlgroup( "refresh" ); - } - }, - - _menuInputChange: function( evt ) { - var input = $( evt.target ), - checked = input[ 0 ].checked; - - input.jqmData( "cells" ) - .toggleClass( "ui-table-cell-hidden", !checked ) - .toggleClass( "ui-table-cell-visible", checked ); - }, - - _unlockCells: function( cells ) { - // allow hide/show via CSS only = remove all toggle-locks - cells.removeClass( "ui-table-cell-hidden ui-table-cell-visible"); - }, - - _enhanceColToggle: function() { - var id , menuButton, popup, menu, - table = this.element, - opts = this.options, - ns = $.mobile.ns, - fragment = this.document[ 0 ].createDocumentFragment(); - - id = this._id() + "-popup"; - menuButton = $( "<a href='#" + id + "' " + - "class='" + opts.classes.columnBtn + " ui-btn " + - "ui-btn-" + ( opts.columnBtnTheme || "a" ) + - " ui-corner-all ui-shadow ui-mini' " + - "data-" + ns + "rel='popup'>" + opts.columnBtnText + "</a>" ); - popup = $( "<div class='" + opts.classes.popup + "' id='" + id + "'></div>" ); - menu = $( "<fieldset></fieldset>" ).controlgroup(); - - // set extension here, send "false" to trigger build/rebuild - this._addToggles( menu, false ); - - menu.appendTo( popup ); - - fragment.appendChild( popup[ 0 ] ); - fragment.appendChild( menuButton[ 0 ] ); - table.before( fragment ); - - popup.popup(); - - return menu; - }, - - rebuild: function() { - this._super(); - - if ( this.options.mode === "columntoggle" ) { - // NOTE: rebuild passes "false", while refresh passes "undefined" - // both refresh the table, but inside addToggles, !false will be true, - // so a rebuild call can be indentified - this._refresh( false ); - } - }, - - _refresh: function( create ) { - var headers, hiddenColumns, index; - - // Calling _super() here updates this.headers - this._super( create ); - - if ( !create && this.options.mode === "columntoggle" ) { - headers = this.headers; - hiddenColumns = []; - - // Find the index of the column header associated with each old checkbox among the - // post-refresh headers and, if the header is still there, make sure the corresponding - // column will be hidden if the pre-refresh checkbox indicates that the column is - // hidden by recording its index in the array of hidden columns. - this._menu.find( "input" ).each( function() { - var input = $( this ), - header = input.jqmData( "header" ), - index = headers.index( header[ 0 ] ); - - if ( index > -1 && !input.prop( "checked" ) ) { - - // The column header associated with /this/ checkbox is still present in the - // post-refresh table and the checkbox is not checked, so the column associated - // with this column header is currently hidden. Let's record that. - hiddenColumns.push( index ); - } - }); - - // columns not being replaced must be cleared from input toggle-locks - this._unlockCells( this.element.find( ".ui-table-cell-hidden, " + - ".ui-table-cell-visible" ) ); - - // update columntoggles and cells - this._addToggles( this._menu, create ); - - // At this point all columns are visible, so uncheck the checkboxes that correspond to - // those columns we've found to be hidden - for ( index = hiddenColumns.length - 1 ; index > -1 ; index-- ) { - headers.eq( hiddenColumns[ index ] ).jqmData( "input" ) - .prop( "checked", false ) - .checkboxradio( "refresh" ) - .trigger( "change" ); - } - } - }, - - _setToggleState: function() { - this._menu.find( "input" ).each( function() { - var checkbox = $( this ); - - this.checked = checkbox.jqmData( "cells" ).eq( 0 ).css( "display" ) === "table-cell"; - checkbox.checkboxradio( "refresh" ); - }); - }, - - _destroy: function() { - this._super(); - } -}); - -})( jQuery ); - -(function( $, undefined ) { - -$.widget( "mobile.table", $.mobile.table, { - options: { - mode: "reflow", - classes: $.extend( $.mobile.table.prototype.options.classes, { - reflowTable: "ui-table-reflow", - cellLabels: "ui-table-cell-label" - }) - }, - - _create: function() { - this._super(); - - // If it's not reflow mode, return here. - if ( this.options.mode !== "reflow" ) { - return; - } - - if ( !this.options.enhanced ) { - this.element.addClass( this.options.classes.reflowTable ); - - this._updateReflow(); - } - }, - - rebuild: function() { - this._super(); - - if ( this.options.mode === "reflow" ) { - this._refresh( false ); - } - }, - - _refresh: function( create ) { - this._super( create ); - if ( !create && this.options.mode === "reflow" ) { - this._updateReflow( ); - } - }, - - _updateReflow: function() { - var table = this, - opts = this.options; - - // get headers in reverse order so that top-level headers are appended last - $( table.allHeaders.get().reverse() ).each( function() { - var cells = $( this ).jqmData( "cells" ), - colstart = $.mobile.getAttribute( this, "colstart" ), - hierarchyClass = cells.not( this ).filter( "thead th" ).length && " ui-table-cell-label-top", - contents = $( this ).clone().contents(), - iteration, filter; - - if ( contents.length > 0 ) { - - if ( hierarchyClass ) { - iteration = parseInt( this.getAttribute( "colspan" ), 10 ); - filter = ""; - - if ( iteration ) { - filter = "td:nth-child("+ iteration +"n + " + ( colstart ) +")"; - } - - table._addLabels( cells.filter( filter ), - opts.classes.cellLabels + hierarchyClass, contents ); - } else { - table._addLabels( cells, opts.classes.cellLabels, contents ); - } - - } - }); - }, - - _addLabels: function( cells, label, contents ) { - if ( contents.length === 1 && contents[ 0 ].nodeName.toLowerCase() === "abbr" ) { - contents = contents.eq( 0 ).attr( "title" ); - } - // .not fixes #6006 - cells - .not( ":has(b." + label + ")" ) - .prepend( $( "<b class='" + label + "'></b>" ).append( contents ) ); - } -}); - -})( jQuery ); - -(function( $, undefined ) { - -// TODO rename filterCallback/deprecate and default to the item itself as the first argument -var defaultFilterCallback = function( index, searchValue ) { - return ( ( "" + ( $.mobile.getAttribute( this, "filtertext" ) || $( this ).text() ) ) - .toLowerCase().indexOf( searchValue ) === -1 ); -}; - -$.widget( "mobile.filterable", { - - initSelector: ":jqmData(filter='true')", - - options: { - filterReveal: false, - filterCallback: defaultFilterCallback, - enhanced: false, - input: null, - children: "> li, > option, > optgroup option, > tbody tr, > .ui-controlgroup-controls > .ui-btn, > .ui-controlgroup-controls > .ui-checkbox, > .ui-controlgroup-controls > .ui-radio" - }, - - _create: function() { - var opts = this.options; - - $.extend( this, { - _search: null, - _timer: 0 - }); - - this._setInput( opts.input ); - if ( !opts.enhanced ) { - this._filterItems( ( ( this._search && this._search.val() ) || "" ).toLowerCase() ); - } - }, - - _onKeyUp: function() { - var val, lastval, - search = this._search; - - if ( search ) { - val = search.val().toLowerCase(), - lastval = $.mobile.getAttribute( search[ 0 ], "lastval" ) + ""; - - if ( lastval && lastval === val ) { - // Execute the handler only once per value change - return; - } - - if ( this._timer ) { - window.clearTimeout( this._timer ); - this._timer = 0; - } - - this._timer = this._delay( function() { - if ( this._trigger( "beforefilter", null, { input: search } ) === false ) { - return false; - } - - // Change val as lastval for next execution - search[ 0 ].setAttribute( "data-" + $.mobile.ns + "lastval", val ); - - this._filterItems( val ); - this._timer = 0; - }, 250 ); - } - }, - - _getFilterableItems: function() { - var elem = this.element, - children = this.options.children, - items = !children ? { length: 0 }: - $.isFunction( children ) ? children(): - children.nodeName ? $( children ): - children.jquery ? children: - this.element.find( children ); - - if ( items.length === 0 ) { - items = elem.children(); - } - - return items; - }, - - _filterItems: function( val ) { - var idx, callback, length, dst, - show = [], - hide = [], - opts = this.options, - filterItems = this._getFilterableItems(); - - if ( val != null ) { - callback = opts.filterCallback || defaultFilterCallback; - length = filterItems.length; - - // Partition the items into those to be hidden and those to be shown - for ( idx = 0 ; idx < length ; idx++ ) { - dst = ( callback.call( filterItems[ idx ], idx, val ) ) ? hide : show; - dst.push( filterItems[ idx ] ); - } - } - - // If nothing is hidden, then the decision whether to hide or show the items - // is based on the "filterReveal" option. - if ( hide.length === 0 ) { - filterItems[ ( opts.filterReveal && val.length === 0 ) ? - "addClass" : "removeClass" ]( "ui-screen-hidden" ); - } else { - $( hide ).addClass( "ui-screen-hidden" ); - $( show ).removeClass( "ui-screen-hidden" ); - } - - this._refreshChildWidget(); - - this._trigger( "filter", null, { - items: filterItems - }); - }, - - // The Default implementation of _refreshChildWidget attempts to call - // refresh on collapsibleset, controlgroup, selectmenu, or listview - _refreshChildWidget: function() { - var widget, idx, - recognizedWidgets = [ "collapsibleset", "selectmenu", "controlgroup", "listview" ]; - - for ( idx = recognizedWidgets.length - 1 ; idx > -1 ; idx-- ) { - widget = recognizedWidgets[ idx ]; - if ( $.mobile[ widget ] ) { - widget = this.element.data( "mobile-" + widget ); - if ( widget && $.isFunction( widget.refresh ) ) { - widget.refresh(); - } - } - } - }, - - // TODO: When the input is not internal, do not even store it in this._search - _setInput: function ( selector ) { - var search = this._search; - - // Stop a pending filter operation - if ( this._timer ) { - window.clearTimeout( this._timer ); - this._timer = 0; - } - - if ( search ) { - this._off( search, "keyup change input" ); - search = null; - } - - if ( selector ) { - search = selector.jquery ? selector: - selector.nodeName ? $( selector ): - this.document.find( selector ); - - this._on( search, { - keydown: "_onKeyDown", - keypress: "_onKeyPress", - keyup: "_onKeyUp", - change: "_onKeyUp", - input: "_onKeyUp" - }); - } - - this._search = search; - }, - - // Prevent form submission - _onKeyDown: function( event ) { - if ( event.keyCode === $.ui.keyCode.ENTER ) { - event.preventDefault(); - this._preventKeyPress = true; - } - }, - - _onKeyPress: function( event ) { - if ( this._preventKeyPress ) { - event.preventDefault(); - this._preventKeyPress = false; - } - }, - - _setOptions: function( options ) { - var refilter = !( ( options.filterReveal === undefined ) && - ( options.filterCallback === undefined ) && - ( options.children === undefined ) ); - - this._super( options ); - - if ( options.input !== undefined ) { - this._setInput( options.input ); - refilter = true; - } - - if ( refilter ) { - this.refresh(); - } - }, - - _destroy: function() { - var opts = this.options, - items = this._getFilterableItems(); - - if ( opts.enhanced ) { - items.toggleClass( "ui-screen-hidden", opts.filterReveal ); - } else { - items.removeClass( "ui-screen-hidden" ); - } - }, - - refresh: function() { - if ( this._timer ) { - window.clearTimeout( this._timer ); - this._timer = 0; - } - this._filterItems( ( ( this._search && this._search.val() ) || "" ).toLowerCase() ); - } -}); - -})( jQuery ); - -(function( $, undefined ) { - -// Create a function that will replace the _setOptions function of a widget, -// and will pass the options on to the input of the filterable. -var replaceSetOptions = function( self, orig ) { - return function( options ) { - orig.call( this, options ); - self._syncTextInputOptions( options ); - }; - }, - rDividerListItem = /(^|\s)ui-li-divider(\s|$)/, - origDefaultFilterCallback = $.mobile.filterable.prototype.options.filterCallback; - -// Override the default filter callback with one that does not hide list dividers -$.mobile.filterable.prototype.options.filterCallback = function( index, searchValue ) { - return !this.className.match( rDividerListItem ) && - origDefaultFilterCallback.call( this, index, searchValue ); -}; - -$.widget( "mobile.filterable", $.mobile.filterable, { - options: { - filterPlaceholder: "Filter items...", - filterTheme: null - }, - - _create: function() { - var idx, widgetName, - elem = this.element, - recognizedWidgets = [ "collapsibleset", "selectmenu", "controlgroup", "listview" ], - createHandlers = {}; - - this._super(); - - $.extend( this, { - _widget: null - }); - - for ( idx = recognizedWidgets.length - 1 ; idx > -1 ; idx-- ) { - widgetName = recognizedWidgets[ idx ]; - if ( $.mobile[ widgetName ] ) { - if ( this._setWidget( elem.data( "mobile-" + widgetName ) ) ) { - break; - } else { - createHandlers[ widgetName + "create" ] = "_handleCreate"; - } - } - } - - if ( !this._widget ) { - this._on( elem, createHandlers ); - } - }, - - _handleCreate: function( evt ) { - this._setWidget( this.element.data( "mobile-" + evt.type.substring( 0, evt.type.length - 6 ) ) ); - }, - - _trigger: function( type, event, data ) { - if ( this._widget && this._widget.widgetFullName === "mobile-listview" && - type === "beforefilter" ) { - - // Also trigger listviewbeforefilter if this widget is also a listview - this._widget._trigger( "beforefilter", event, data ); - } - - // Passing back the response enables calling preventDefault() - return this._super( type, event, data ); - }, - - _setWidget: function( widget ) { - if ( !this._widget && widget ) { - this._widget = widget; - this._widget._setOptions = replaceSetOptions( this, this._widget._setOptions ); - } - - if ( !!this._widget ) { - this._syncTextInputOptions( this._widget.options ); - if ( this._widget.widgetName === "listview" ) { - this._widget.options.hideDividers = true; - this._widget.element.listview( "refresh" ); - } - } - - return !!this._widget; - }, - - _isSearchInternal: function() { - return ( this._search && this._search.jqmData( "ui-filterable-" + this.uuid + "-internal" ) ); - }, - - _setInput: function( selector ) { - var opts = this.options, - updatePlaceholder = true, - textinputOpts = {}; - - if ( !selector ) { - if ( this._isSearchInternal() ) { - - // Ignore the call to set a new input if the selector goes to falsy and - // the current textinput is already of the internally generated variety. - return; - } else { - - // Generating a new textinput widget. No need to set the placeholder - // further down the function. - updatePlaceholder = false; - selector = $( "<input " + - "data-" + $.mobile.ns + "type='search' " + - "placeholder='" + opts.filterPlaceholder + "'></input>" ) - .jqmData( "ui-filterable-" + this.uuid + "-internal", true ); - $( "<form class='ui-filterable'></form>" ) - .append( selector ) - .submit( function( evt ) { - evt.preventDefault(); - selector.blur(); - }) - .insertBefore( this.element ); - if ( $.mobile.textinput ) { - if ( this.options.filterTheme != null ) { - textinputOpts[ "theme" ] = opts.filterTheme; - } - - selector.textinput( textinputOpts ); - } - } - } - - this._super( selector ); - - if ( this._isSearchInternal() && updatePlaceholder ) { - this._search.attr( "placeholder", this.options.filterPlaceholder ); - } - }, - - _setOptions: function( options ) { - var ret = this._super( options ); - - // Need to set the filterPlaceholder after having established the search input - if ( options.filterPlaceholder !== undefined ) { - if ( this._isSearchInternal() ) { - this._search.attr( "placeholder", options.filterPlaceholder ); - } - } - - if ( options.filterTheme !== undefined && this._search && $.mobile.textinput ) { - this._search.textinput( "option", "theme", options.filterTheme ); - } - - return ret; - }, - - _destroy: function() { - if ( this._isSearchInternal() ) { - this._search.remove(); - } - this._super(); - }, - - _syncTextInputOptions: function( options ) { - var idx, - textinputOptions = {}; - - // We only sync options if the filterable's textinput is of the internally - // generated variety, rather than one specified by the user. - if ( this._isSearchInternal() && $.mobile.textinput ) { - - // Apply only the options understood by textinput - for ( idx in $.mobile.textinput.prototype.options ) { - if ( options[ idx ] !== undefined ) { - if ( idx === "theme" && this.options.filterTheme != null ) { - textinputOptions[ idx ] = this.options.filterTheme; - } else { - textinputOptions[ idx ] = options[ idx ]; - } - } - } - this._search.textinput( "option", textinputOptions ); - } - } -}); - -// Instantiate a filterable on a listview that has the data-filter="true" attribute -// This is not necessary for static content, because the auto-enhance takes care of instantiating -// the filterable upon encountering data-filter="true". However, because of 1.3.x it is expected -// that a listview with data-filter="true" will be filterable even if you just instantiate a -// listview on it. The extension below ensures that this continues to happen in 1.4.x. -$.widget( "mobile.listview", $.mobile.listview, { - options: { - filter: false - }, - _create: function() { - if ( this.options.filter === true && - !this.element.data( "mobile-filterable" ) ) { - this.element.filterable(); - } - return this._super(); - } -}); - -})( jQuery ); - -/*! - * jQuery UI Tabs c0ab71056b936627e8a7821f03c044aec6280a40 - * http://jqueryui.com - * - * Copyright 2013 jQuery Foundation and other contributors - * Released under the MIT license. - * http://jquery.org/license - * - * http://api.jqueryui.com/tabs/ - * - * Depends: - * jquery.ui.core.js - * jquery.ui.widget.js - */ -(function( $, undefined ) { - -var tabId = 0, - rhash = /#.*$/; - -function getNextTabId() { - return ++tabId; -} - -function isLocal( anchor ) { - // support: IE7 - // IE7 doesn't normalize the href property when set via script (#9317) - anchor = anchor.cloneNode( false ); - - return anchor.hash.length > 1 && - decodeURIComponent( anchor.href.replace( rhash, "" ) ) === - decodeURIComponent( location.href.replace( rhash, "" ) ); -} - -$.widget( "ui.tabs", { - version: "c0ab71056b936627e8a7821f03c044aec6280a40", - delay: 300, - options: { - active: null, - collapsible: false, - event: "click", - heightStyle: "content", - hide: null, - show: null, - - // callbacks - activate: null, - beforeActivate: null, - beforeLoad: null, - load: null - }, - - _create: function() { - var that = this, - options = this.options; - - this.running = false; - - this.element - .addClass( "ui-tabs ui-widget ui-widget-content ui-corner-all" ) - .toggleClass( "ui-tabs-collapsible", options.collapsible ) - // Prevent users from focusing disabled tabs via click - .delegate( ".ui-tabs-nav > li", "mousedown" + this.eventNamespace, function( event ) { - if ( $( this ).is( ".ui-state-disabled" ) ) { - event.preventDefault(); - } - }) - // support: IE <9 - // Preventing the default action in mousedown doesn't prevent IE - // from focusing the element, so if the anchor gets focused, blur. - // We don't have to worry about focusing the previously focused - // element since clicking on a non-focusable element should focus - // the body anyway. - .delegate( ".ui-tabs-anchor", "focus" + this.eventNamespace, function() { - if ( $( this ).closest( "li" ).is( ".ui-state-disabled" ) ) { - this.blur(); - } - }); - - this._processTabs(); - options.active = this._initialActive(); - - // Take disabling tabs via class attribute from HTML - // into account and update option properly. - if ( $.isArray( options.disabled ) ) { - options.disabled = $.unique( options.disabled.concat( - $.map( this.tabs.filter( ".ui-state-disabled" ), function( li ) { - return that.tabs.index( li ); - }) - ) ).sort(); - } - - // check for length avoids error when initializing empty list - if ( this.options.active !== false && this.anchors.length ) { - this.active = this._findActive( options.active ); - } else { - this.active = $(); - } - - this._refresh(); - - if ( this.active.length ) { - this.load( options.active ); - } - }, - - _initialActive: function() { - var active = this.options.active, - collapsible = this.options.collapsible, - locationHash = location.hash.substring( 1 ); - - if ( active === null ) { - // check the fragment identifier in the URL - if ( locationHash ) { - this.tabs.each(function( i, tab ) { - if ( $( tab ).attr( "aria-controls" ) === locationHash ) { - active = i; - return false; - } - }); - } - - // check for a tab marked active via a class - if ( active === null ) { - active = this.tabs.index( this.tabs.filter( ".ui-tabs-active" ) ); - } - - // no active tab, set to false - if ( active === null || active === -1 ) { - active = this.tabs.length ? 0 : false; - } - } - - // handle numbers: negative, out of range - if ( active !== false ) { - active = this.tabs.index( this.tabs.eq( active ) ); - if ( active === -1 ) { - active = collapsible ? false : 0; - } - } - - // don't allow collapsible: false and active: false - if ( !collapsible && active === false && this.anchors.length ) { - active = 0; - } - - return active; - }, - - _getCreateEventData: function() { - return { - tab: this.active, - panel: !this.active.length ? $() : this._getPanelForTab( this.active ) - }; - }, - - _tabKeydown: function( event ) { - var focusedTab = $( this.document[0].activeElement ).closest( "li" ), - selectedIndex = this.tabs.index( focusedTab ), - goingForward = true; - - if ( this._handlePageNav( event ) ) { - return; - } - - switch ( event.keyCode ) { - case $.ui.keyCode.RIGHT: - case $.ui.keyCode.DOWN: - selectedIndex++; - break; - case $.ui.keyCode.UP: - case $.ui.keyCode.LEFT: - goingForward = false; - selectedIndex--; - break; - case $.ui.keyCode.END: - selectedIndex = this.anchors.length - 1; - break; - case $.ui.keyCode.HOME: - selectedIndex = 0; - break; - case $.ui.keyCode.SPACE: - // Activate only, no collapsing - event.preventDefault(); - clearTimeout( this.activating ); - this._activate( selectedIndex ); - return; - case $.ui.keyCode.ENTER: - // Toggle (cancel delayed activation, allow collapsing) - event.preventDefault(); - clearTimeout( this.activating ); - // Determine if we should collapse or activate - this._activate( selectedIndex === this.options.active ? false : selectedIndex ); - return; - default: - return; - } - - // Focus the appropriate tab, based on which key was pressed - event.preventDefault(); - clearTimeout( this.activating ); - selectedIndex = this._focusNextTab( selectedIndex, goingForward ); - - // Navigating with control key will prevent automatic activation - if ( !event.ctrlKey ) { - // Update aria-selected immediately so that AT think the tab is already selected. - // Otherwise AT may confuse the user by stating that they need to activate the tab, - // but the tab will already be activated by the time the announcement finishes. - focusedTab.attr( "aria-selected", "false" ); - this.tabs.eq( selectedIndex ).attr( "aria-selected", "true" ); - - this.activating = this._delay(function() { - this.option( "active", selectedIndex ); - }, this.delay ); - } - }, - - _panelKeydown: function( event ) { - if ( this._handlePageNav( event ) ) { - return; - } - - // Ctrl+up moves focus to the current tab - if ( event.ctrlKey && event.keyCode === $.ui.keyCode.UP ) { - event.preventDefault(); - this.active.focus(); - } - }, - - // Alt+page up/down moves focus to the previous/next tab (and activates) - _handlePageNav: function( event ) { - if ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_UP ) { - this._activate( this._focusNextTab( this.options.active - 1, false ) ); - return true; - } - if ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_DOWN ) { - this._activate( this._focusNextTab( this.options.active + 1, true ) ); - return true; - } - }, - - _findNextTab: function( index, goingForward ) { - var lastTabIndex = this.tabs.length - 1; - - function constrain() { - if ( index > lastTabIndex ) { - index = 0; - } - if ( index < 0 ) { - index = lastTabIndex; - } - return index; - } - - while ( $.inArray( constrain(), this.options.disabled ) !== -1 ) { - index = goingForward ? index + 1 : index - 1; - } - - return index; - }, - - _focusNextTab: function( index, goingForward ) { - index = this._findNextTab( index, goingForward ); - this.tabs.eq( index ).focus(); - return index; - }, - - _setOption: function( key, value ) { - if ( key === "active" ) { - // _activate() will handle invalid values and update this.options - this._activate( value ); - return; - } - - if ( key === "disabled" ) { - // don't use the widget factory's disabled handling - this._setupDisabled( value ); - return; - } - - this._super( key, value); - - if ( key === "collapsible" ) { - this.element.toggleClass( "ui-tabs-collapsible", value ); - // Setting collapsible: false while collapsed; open first panel - if ( !value && this.options.active === false ) { - this._activate( 0 ); - } - } - - if ( key === "event" ) { - this._setupEvents( value ); - } - - if ( key === "heightStyle" ) { - this._setupHeightStyle( value ); - } - }, - - _tabId: function( tab ) { - return tab.attr( "aria-controls" ) || "ui-tabs-" + getNextTabId(); - }, - - _sanitizeSelector: function( hash ) { - return hash ? hash.replace( /[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g, "\\$&" ) : ""; - }, - - refresh: function() { - var options = this.options, - lis = this.tablist.children( ":has(a[href])" ); - - // get disabled tabs from class attribute from HTML - // this will get converted to a boolean if needed in _refresh() - options.disabled = $.map( lis.filter( ".ui-state-disabled" ), function( tab ) { - return lis.index( tab ); - }); - - this._processTabs(); - - // was collapsed or no tabs - if ( options.active === false || !this.anchors.length ) { - options.active = false; - this.active = $(); - // was active, but active tab is gone - } else if ( this.active.length && !$.contains( this.tablist[ 0 ], this.active[ 0 ] ) ) { - // all remaining tabs are disabled - if ( this.tabs.length === options.disabled.length ) { - options.active = false; - this.active = $(); - // activate previous tab - } else { - this._activate( this._findNextTab( Math.max( 0, options.active - 1 ), false ) ); - } - // was active, active tab still exists - } else { - // make sure active index is correct - options.active = this.tabs.index( this.active ); - } - - this._refresh(); - }, - - _refresh: function() { - this._setupDisabled( this.options.disabled ); - this._setupEvents( this.options.event ); - this._setupHeightStyle( this.options.heightStyle ); - - this.tabs.not( this.active ).attr({ - "aria-selected": "false", - tabIndex: -1 - }); - this.panels.not( this._getPanelForTab( this.active ) ) - .hide() - .attr({ - "aria-expanded": "false", - "aria-hidden": "true" - }); - - // Make sure one tab is in the tab order - if ( !this.active.length ) { - this.tabs.eq( 0 ).attr( "tabIndex", 0 ); - } else { - this.active - .addClass( "ui-tabs-active ui-state-active" ) - .attr({ - "aria-selected": "true", - tabIndex: 0 - }); - this._getPanelForTab( this.active ) - .show() - .attr({ - "aria-expanded": "true", - "aria-hidden": "false" - }); - } - }, - - _processTabs: function() { - var that = this; - - this.tablist = this._getList() - .addClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" ) - .attr( "role", "tablist" ); - - this.tabs = this.tablist.find( "> li:has(a[href])" ) - .addClass( "ui-state-default ui-corner-top" ) - .attr({ - role: "tab", - tabIndex: -1 - }); - - this.anchors = this.tabs.map(function() { - return $( "a", this )[ 0 ]; - }) - .addClass( "ui-tabs-anchor" ) - .attr({ - role: "presentation", - tabIndex: -1 - }); - - this.panels = $(); - - this.anchors.each(function( i, anchor ) { - var selector, panel, panelId, - anchorId = $( anchor ).uniqueId().attr( "id" ), - tab = $( anchor ).closest( "li" ), - originalAriaControls = tab.attr( "aria-controls" ); - - // inline tab - if ( isLocal( anchor ) ) { - selector = anchor.hash; - panel = that.element.find( that._sanitizeSelector( selector ) ); - // remote tab - } else { - panelId = that._tabId( tab ); - selector = "#" + panelId; - panel = that.element.find( selector ); - if ( !panel.length ) { - panel = that._createPanel( panelId ); - panel.insertAfter( that.panels[ i - 1 ] || that.tablist ); - } - panel.attr( "aria-live", "polite" ); - } - - if ( panel.length) { - that.panels = that.panels.add( panel ); - } - if ( originalAriaControls ) { - tab.data( "ui-tabs-aria-controls", originalAriaControls ); - } - tab.attr({ - "aria-controls": selector.substring( 1 ), - "aria-labelledby": anchorId - }); - panel.attr( "aria-labelledby", anchorId ); - }); - - this.panels - .addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" ) - .attr( "role", "tabpanel" ); - }, - - // allow overriding how to find the list for rare usage scenarios (#7715) - _getList: function() { - return this.element.find( "ol,ul" ).eq( 0 ); - }, - - _createPanel: function( id ) { - return $( "<div>" ) - .attr( "id", id ) - .addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" ) - .data( "ui-tabs-destroy", true ); - }, - - _setupDisabled: function( disabled ) { - if ( $.isArray( disabled ) ) { - if ( !disabled.length ) { - disabled = false; - } else if ( disabled.length === this.anchors.length ) { - disabled = true; - } - } - - // disable tabs - for ( var i = 0, li; ( li = this.tabs[ i ] ); i++ ) { - if ( disabled === true || $.inArray( i, disabled ) !== -1 ) { - $( li ) - .addClass( "ui-state-disabled" ) - .attr( "aria-disabled", "true" ); - } else { - $( li ) - .removeClass( "ui-state-disabled" ) - .removeAttr( "aria-disabled" ); - } - } - - this.options.disabled = disabled; - }, - - _setupEvents: function( event ) { - var events = {}; - if ( event ) { - $.each( event.split(" "), function( index, eventName ) { - events[ eventName ] = "_eventHandler"; - }); - } - - this._off( this.anchors.add( this.tabs ).add( this.panels ) ); - // Always prevent the default action, even when disabled - this._on( true, this.anchors, { - click: function( event ) { - event.preventDefault(); - } - }); - this._on( this.anchors, events ); - this._on( this.tabs, { keydown: "_tabKeydown" } ); - this._on( this.panels, { keydown: "_panelKeydown" } ); - - this._focusable( this.tabs ); - this._hoverable( this.tabs ); - }, - - _setupHeightStyle: function( heightStyle ) { - var maxHeight, - parent = this.element.parent(); - - if ( heightStyle === "fill" ) { - maxHeight = parent.height(); - maxHeight -= this.element.outerHeight() - this.element.height(); - - this.element.siblings( ":visible" ).each(function() { - var elem = $( this ), - position = elem.css( "position" ); - - if ( position === "absolute" || position === "fixed" ) { - return; - } - maxHeight -= elem.outerHeight( true ); - }); - - this.element.children().not( this.panels ).each(function() { - maxHeight -= $( this ).outerHeight( true ); - }); - - this.panels.each(function() { - $( this ).height( Math.max( 0, maxHeight - - $( this ).innerHeight() + $( this ).height() ) ); - }) - .css( "overflow", "auto" ); - } else if ( heightStyle === "auto" ) { - maxHeight = 0; - this.panels.each(function() { - maxHeight = Math.max( maxHeight, $( this ).height( "" ).height() ); - }).height( maxHeight ); - } - }, - - _eventHandler: function( event ) { - var options = this.options, - active = this.active, - anchor = $( event.currentTarget ), - tab = anchor.closest( "li" ), - clickedIsActive = tab[ 0 ] === active[ 0 ], - collapsing = clickedIsActive && options.collapsible, - toShow = collapsing ? $() : this._getPanelForTab( tab ), - toHide = !active.length ? $() : this._getPanelForTab( active ), - eventData = { - oldTab: active, - oldPanel: toHide, - newTab: collapsing ? $() : tab, - newPanel: toShow - }; - - event.preventDefault(); - - if ( tab.hasClass( "ui-state-disabled" ) || - // tab is already loading - tab.hasClass( "ui-tabs-loading" ) || - // can't switch durning an animation - this.running || - // click on active header, but not collapsible - ( clickedIsActive && !options.collapsible ) || - // allow canceling activation - ( this._trigger( "beforeActivate", event, eventData ) === false ) ) { - return; - } - - options.active = collapsing ? false : this.tabs.index( tab ); - - this.active = clickedIsActive ? $() : tab; - if ( this.xhr ) { - this.xhr.abort(); - } - - if ( !toHide.length && !toShow.length ) { - $.error( "jQuery UI Tabs: Mismatching fragment identifier." ); - } - - if ( toShow.length ) { - this.load( this.tabs.index( tab ), event ); - } - this._toggle( event, eventData ); - }, - - // handles show/hide for selecting tabs - _toggle: function( event, eventData ) { - var that = this, - toShow = eventData.newPanel, - toHide = eventData.oldPanel; - - this.running = true; - - function complete() { - that.running = false; - that._trigger( "activate", event, eventData ); - } - - function show() { - eventData.newTab.closest( "li" ).addClass( "ui-tabs-active ui-state-active" ); - - if ( toShow.length && that.options.show ) { - that._show( toShow, that.options.show, complete ); - } else { - toShow.show(); - complete(); - } - } - - // start out by hiding, then showing, then completing - if ( toHide.length && this.options.hide ) { - this._hide( toHide, this.options.hide, function() { - eventData.oldTab.closest( "li" ).removeClass( "ui-tabs-active ui-state-active" ); - show(); - }); - } else { - eventData.oldTab.closest( "li" ).removeClass( "ui-tabs-active ui-state-active" ); - toHide.hide(); - show(); - } - - toHide.attr({ - "aria-expanded": "false", - "aria-hidden": "true" - }); - eventData.oldTab.attr( "aria-selected", "false" ); - // If we're switching tabs, remove the old tab from the tab order. - // If we're opening from collapsed state, remove the previous tab from the tab order. - // If we're collapsing, then keep the collapsing tab in the tab order. - if ( toShow.length && toHide.length ) { - eventData.oldTab.attr( "tabIndex", -1 ); - } else if ( toShow.length ) { - this.tabs.filter(function() { - return $( this ).attr( "tabIndex" ) === 0; - }) - .attr( "tabIndex", -1 ); - } - - toShow.attr({ - "aria-expanded": "true", - "aria-hidden": "false" - }); - eventData.newTab.attr({ - "aria-selected": "true", - tabIndex: 0 - }); - }, - - _activate: function( index ) { - var anchor, - active = this._findActive( index ); - - // trying to activate the already active panel - if ( active[ 0 ] === this.active[ 0 ] ) { - return; - } - - // trying to collapse, simulate a click on the current active header - if ( !active.length ) { - active = this.active; - } - - anchor = active.find( ".ui-tabs-anchor" )[ 0 ]; - this._eventHandler({ - target: anchor, - currentTarget: anchor, - preventDefault: $.noop - }); - }, - - _findActive: function( index ) { - return index === false ? $() : this.tabs.eq( index ); - }, - - _getIndex: function( index ) { - // meta-function to give users option to provide a href string instead of a numerical index. - if ( typeof index === "string" ) { - index = this.anchors.index( this.anchors.filter( "[href$='" + index + "']" ) ); - } - - return index; - }, - - _destroy: function() { - if ( this.xhr ) { - this.xhr.abort(); - } - - this.element.removeClass( "ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible" ); - - this.tablist - .removeClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" ) - .removeAttr( "role" ); - - this.anchors - .removeClass( "ui-tabs-anchor" ) - .removeAttr( "role" ) - .removeAttr( "tabIndex" ) - .removeUniqueId(); - - this.tabs.add( this.panels ).each(function() { - if ( $.data( this, "ui-tabs-destroy" ) ) { - $( this ).remove(); - } else { - $( this ) - .removeClass( "ui-state-default ui-state-active ui-state-disabled " + - "ui-corner-top ui-corner-bottom ui-widget-content ui-tabs-active ui-tabs-panel" ) - .removeAttr( "tabIndex" ) - .removeAttr( "aria-live" ) - .removeAttr( "aria-busy" ) - .removeAttr( "aria-selected" ) - .removeAttr( "aria-labelledby" ) - .removeAttr( "aria-hidden" ) - .removeAttr( "aria-expanded" ) - .removeAttr( "role" ); - } - }); - - this.tabs.each(function() { - var li = $( this ), - prev = li.data( "ui-tabs-aria-controls" ); - if ( prev ) { - li - .attr( "aria-controls", prev ) - .removeData( "ui-tabs-aria-controls" ); - } else { - li.removeAttr( "aria-controls" ); - } - }); - - this.panels.show(); - - if ( this.options.heightStyle !== "content" ) { - this.panels.css( "height", "" ); - } - }, - - enable: function( index ) { - var disabled = this.options.disabled; - if ( disabled === false ) { - return; - } - - if ( index === undefined ) { - disabled = false; - } else { - index = this._getIndex( index ); - if ( $.isArray( disabled ) ) { - disabled = $.map( disabled, function( num ) { - return num !== index ? num : null; - }); - } else { - disabled = $.map( this.tabs, function( li, num ) { - return num !== index ? num : null; - }); - } - } - this._setupDisabled( disabled ); - }, - - disable: function( index ) { - var disabled = this.options.disabled; - if ( disabled === true ) { - return; - } - - if ( index === undefined ) { - disabled = true; - } else { - index = this._getIndex( index ); - if ( $.inArray( index, disabled ) !== -1 ) { - return; - } - if ( $.isArray( disabled ) ) { - disabled = $.merge( [ index ], disabled ).sort(); - } else { - disabled = [ index ]; - } - } - this._setupDisabled( disabled ); - }, - - load: function( index, event ) { - index = this._getIndex( index ); - var that = this, - tab = this.tabs.eq( index ), - anchor = tab.find( ".ui-tabs-anchor" ), - panel = this._getPanelForTab( tab ), - eventData = { - tab: tab, - panel: panel - }; - - // not remote - if ( isLocal( anchor[ 0 ] ) ) { - return; - } - - this.xhr = $.ajax( this._ajaxSettings( anchor, event, eventData ) ); - - // support: jQuery <1.8 - // jQuery <1.8 returns false if the request is canceled in beforeSend, - // but as of 1.8, $.ajax() always returns a jqXHR object. - if ( this.xhr && this.xhr.statusText !== "canceled" ) { - tab.addClass( "ui-tabs-loading" ); - panel.attr( "aria-busy", "true" ); - - this.xhr - .success(function( response ) { - // support: jQuery <1.8 - // http://bugs.jquery.com/ticket/11778 - setTimeout(function() { - panel.html( response ); - that._trigger( "load", event, eventData ); - }, 1 ); - }) - .complete(function( jqXHR, status ) { - // support: jQuery <1.8 - // http://bugs.jquery.com/ticket/11778 - setTimeout(function() { - if ( status === "abort" ) { - that.panels.stop( false, true ); - } - - tab.removeClass( "ui-tabs-loading" ); - panel.removeAttr( "aria-busy" ); - - if ( jqXHR === that.xhr ) { - delete that.xhr; - } - }, 1 ); - }); - } - }, - - _ajaxSettings: function( anchor, event, eventData ) { - var that = this; - return { - url: anchor.attr( "href" ), - beforeSend: function( jqXHR, settings ) { - return that._trigger( "beforeLoad", event, - $.extend( { jqXHR : jqXHR, ajaxSettings: settings }, eventData ) ); - } - }; - }, - - _getPanelForTab: function( tab ) { - var id = $( tab ).attr( "aria-controls" ); - return this.element.find( this._sanitizeSelector( "#" + id ) ); - } -}); - -})( jQuery ); - -(function( $, undefined ) { - -})( jQuery ); - -(function( $, window ) { - - $.mobile.iosorientationfixEnabled = true; - - // This fix addresses an iOS bug, so return early if the UA claims it's something else. - var ua = navigator.userAgent, - zoom, - evt, x, y, z, aig; - if ( !( /iPhone|iPad|iPod/.test( navigator.platform ) && /OS [1-5]_[0-9_]* like Mac OS X/i.test( ua ) && ua.indexOf( "AppleWebKit" ) > -1 ) ) { - $.mobile.iosorientationfixEnabled = false; - return; - } - - zoom = $.mobile.zoom; - - function checkTilt( e ) { - evt = e.originalEvent; - aig = evt.accelerationIncludingGravity; - - x = Math.abs( aig.x ); - y = Math.abs( aig.y ); - z = Math.abs( aig.z ); - - // If portrait orientation and in one of the danger zones - if ( !window.orientation && ( x > 7 || ( ( z > 6 && y < 8 || z < 8 && y > 6 ) && x > 5 ) ) ) { - if ( zoom.enabled ) { - zoom.disable(); - } - } else if ( !zoom.enabled ) { - zoom.enable(); - } - } - - $.mobile.document.on( "mobileinit", function() { - if ( $.mobile.iosorientationfixEnabled ) { - $.mobile.window - .bind( "orientationchange.iosorientationfix", zoom.enable ) - .bind( "devicemotion.iosorientationfix", checkTilt ); - } - }); - -}( jQuery, this )); - -(function( $, window, undefined ) { - var $html = $( "html" ), - $window = $.mobile.window; - - //remove initial build class (only present on first pageshow) - function hideRenderingClass() { - $html.removeClass( "ui-mobile-rendering" ); - } - - // trigger mobileinit event - useful hook for configuring $.mobile settings before they're used - $( window.document ).trigger( "mobileinit" ); - - // support conditions - // if device support condition(s) aren't met, leave things as they are -> a basic, usable experience, - // otherwise, proceed with the enhancements - if ( !$.mobile.gradeA() ) { - return; - } - - // override ajaxEnabled on platforms that have known conflicts with hash history updates - // or generally work better browsing in regular http for full page refreshes (BB5, Opera Mini) - if ( $.mobile.ajaxBlacklist ) { - $.mobile.ajaxEnabled = false; - } - - // Add mobile, initial load "rendering" classes to docEl - $html.addClass( "ui-mobile ui-mobile-rendering" ); - - // This is a fallback. If anything goes wrong (JS errors, etc), or events don't fire, - // this ensures the rendering class is removed after 5 seconds, so content is visible and accessible - setTimeout( hideRenderingClass, 5000 ); - - $.extend( $.mobile, { - // find and enhance the pages in the dom and transition to the first page. - initializePage: function() { - // find present pages - var path = $.mobile.path, - $pages = $( ":jqmData(role='page'), :jqmData(role='dialog')" ), - hash = path.stripHash( path.stripQueryParams(path.parseLocation().hash) ), - theLocation = $.mobile.path.parseLocation(), - hashPage = hash ? document.getElementById( hash ) : undefined; - - // if no pages are found, create one with body's inner html - if ( !$pages.length ) { - $pages = $( "body" ).wrapInner( "<div data-" + $.mobile.ns + "role='page'></div>" ).children( 0 ); - } - - // add dialogs, set data-url attrs - $pages.each(function() { - var $this = $( this ); - - // unless the data url is already set set it to the pathname - if ( !$this[ 0 ].getAttribute( "data-" + $.mobile.ns + "url" ) ) { - $this.attr( "data-" + $.mobile.ns + "url", $this.attr( "id" ) || - theLocation.pathname + theLocation.search ); - } - }); - - // define first page in dom case one backs out to the directory root (not always the first page visited, but defined as fallback) - $.mobile.firstPage = $pages.first(); - - // define page container - $.mobile.pageContainer = $.mobile.firstPage - .parent() - .addClass( "ui-mobile-viewport" ) - .pagecontainer(); - - // initialize navigation events now, after mobileinit has occurred and the page container - // has been created but before the rest of the library is alerted to that fact - $.mobile.navreadyDeferred.resolve(); - - // alert listeners that the pagecontainer has been determined for binding - // to events triggered on it - $window.trigger( "pagecontainercreate" ); - - // cue page loading message - $.mobile.loading( "show" ); - - //remove initial build class (only present on first pageshow) - hideRenderingClass(); - - // if hashchange listening is disabled, there's no hash deeplink, - // the hash is not valid (contains more than one # or does not start with #) - // or there is no page with that hash, change to the first page in the DOM - // Remember, however, that the hash can also be a path! - if ( ! ( $.mobile.hashListeningEnabled && - $.mobile.path.isHashValid( location.hash ) && - ( $( hashPage ).is( ":jqmData(role='page')" ) || - $.mobile.path.isPath( hash ) || - hash === $.mobile.dialogHashKey ) ) ) { - - // make sure to set initial popstate state if it exists - // so that navigation back to the initial page works properly - if ( $.event.special.navigate.isPushStateEnabled() ) { - $.mobile.navigate.navigator.squash( path.parseLocation().href ); - } - - $.mobile.changePage( $.mobile.firstPage, { - transition: "none", - reverse: true, - changeHash: false, - fromHashChange: true - }); - } else { - // trigger hashchange or navigate to squash and record the correct - // history entry for an initial hash path - if ( !$.event.special.navigate.isPushStateEnabled() ) { - $window.trigger( "hashchange", [true] ); - } else { - // TODO figure out how to simplify this interaction with the initial history entry - // at the bottom js/navigate/navigate.js - $.mobile.navigate.history.stack = []; - $.mobile.navigate( $.mobile.path.isPath( location.hash ) ? location.hash : location.href ); - } - } - } - }); - - $(function() { - //Run inlineSVG support test - $.support.inlineSVG(); - - // check which scrollTop value should be used by scrolling to 1 immediately at domready - // then check what the scroll top is. Android will report 0... others 1 - // note that this initial scroll won't hide the address bar. It's just for the check. - - // hide iOS browser chrome on load if hideUrlBar is true this is to try and do it as soon as possible - if ( $.mobile.hideUrlBar ) { - window.scrollTo( 0, 1 ); - } - - // if defaultHomeScroll hasn't been set yet, see if scrollTop is 1 - // it should be 1 in most browsers, but android treats 1 as 0 (for hiding addr bar) - // so if it's 1, use 0 from now on - $.mobile.defaultHomeScroll = ( !$.support.scrollTop || $.mobile.window.scrollTop() === 1 ) ? 0 : 1; - - //dom-ready inits - if ( $.mobile.autoInitializePage ) { - $.mobile.initializePage(); - } - - // window load event - // hide iOS browser chrome on load if hideUrlBar is true this is as fall back incase we were too early before - if ( $.mobile.hideUrlBar ) { - $window.load( $.mobile.silentScroll ); - } - - if ( !$.support.cssPointerEvents ) { - // IE and Opera don't support CSS pointer-events: none that we use to disable link-based buttons - // by adding the 'ui-disabled' class to them. Using a JavaScript workaround for those browser. - // https://github.com/jquery/jquery-mobile/issues/3558 - - // DEPRECATED as of 1.4.0 - remove ui-disabled after 1.4.0 release - // only ui-state-disabled should be present thereafter - $.mobile.document.delegate( ".ui-state-disabled,.ui-disabled", "vclick", - function( e ) { - e.preventDefault(); - e.stopImmediatePropagation(); - } - ); - } - }); -}( jQuery, this )); - - -})); diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/rjs_jquerymobile_js.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/rjs_jquerymobile_js.xml deleted file mode 100644 index 0b627ba1e4198efcd7f2065bd63a83d1bbb10e9e..0000000000000000000000000000000000000000 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_page_module/rjs_jquerymobile_js.xml +++ /dev/null @@ -1,320 +0,0 @@ -<?xml version="1.0"?> -<ZopeData> - <record id="1" aka="AAAAAAAAAAE="> - <pickle> - <global name="Web Script" module="erp5.portal_type"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>_Access_contents_information_Permission</string> </key> - <value> - <tuple> - <string>Anonymous</string> - <string>Assignee</string> - <string>Assignor</string> - <string>Associate</string> - <string>Auditor</string> - <string>Manager</string> - <string>Owner</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Add_portal_content_Permission</string> </key> - <value> - <tuple> - <string>Assignee</string> - <string>Assignor</string> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Change_local_roles_Permission</string> </key> - <value> - <tuple> - <string>Assignor</string> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_Modify_portal_content_Permission</string> </key> - <value> - <tuple> - <string>Assignee</string> - <string>Assignor</string> - <string>Manager</string> - </tuple> - </value> - </item> - <item> - <key> <string>_View_Permission</string> </key> - <value> - <tuple> - <string>Anonymous</string> - <string>Assignee</string> - <string>Assignor</string> - <string>Associate</string> - <string>Auditor</string> - <string>Manager</string> - <string>Owner</string> - </tuple> - </value> - </item> - <item> - <key> <string>content_md5</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>default_reference</string> </key> - <value> <string>jquerymobile.js</string> </value> - </item> - <item> - <key> <string>description</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>id</string> </key> - <value> <string>rjs_jquerymobile_js</string> </value> - </item> - <item> - <key> <string>language</string> </key> - <value> <string>en</string> </value> - </item> - <item> - <key> <string>portal_type</string> </key> - <value> <string>Web Script</string> </value> - </item> - <item> - <key> <string>short_title</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>title</string> </key> - <value> <string>jQuery Mobile JS</string> </value> - </item> - <item> - <key> <string>version</string> </key> - <value> <string>1.4.0-alpha.2</string> </value> - </item> - <item> - <key> <string>workflow_history</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> - </value> - </item> - </dictionary> - </pickle> - </record> - <record id="2" aka="AAAAAAAAAAI="> - <pickle> - <global name="PersistentMapping" module="Persistence.mapping"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>data</string> </key> - <value> - <dictionary> - <item> - <key> <string>document_publication_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> - </value> - </item> - <item> - <key> <string>edit_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAQ=</string> </persistent> - </value> - </item> - <item> - <key> <string>processing_status_workflow</string> </key> - <value> - <persistent> <string encoding="base64">AAAAAAAAAAU=</string> </persistent> - </value> - </item> - </dictionary> - </value> - </item> - </dictionary> - </pickle> - </record> - <record id="3" aka="AAAAAAAAAAM="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>publish_alive</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>romain</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1406898405.74</float> - <string>GMT</string> - </tuple> - </state> - </object> - </value> - </item> - <item> - <key> <string>validation_state</string> </key> - <value> <string>published_alive</string> </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> - <record id="4" aka="AAAAAAAAAAQ="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>edit</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>sven</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> - <none/> - </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>serial</string> </key> - <value> <string>938.18960.34745.36676</string> </value> - </item> - <item> - <key> <string>state</string> </key> - <value> <string>current</string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1413468526.28</float> - <string>GMT</string> - </tuple> - </state> - </object> - </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> - <record id="5" aka="AAAAAAAAAAU="> - <pickle> - <global name="WorkflowHistoryList" module="Products.ERP5Type.patches.WorkflowTool"/> - </pickle> - <pickle> - <tuple> - <none/> - <list> - <dictionary> - <item> - <key> <string>action</string> </key> - <value> <string>detect_converted_file</string> </value> - </item> - <item> - <key> <string>actor</string> </key> - <value> <string>romain</string> </value> - </item> - <item> - <key> <string>comment</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>error_message</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>external_processing_state</string> </key> - <value> <string>converted</string> </value> - </item> - <item> - <key> <string>serial</string> </key> - <value> <string>0.0.0.0</string> </value> - </item> - <item> - <key> <string>time</string> </key> - <value> - <object> - <klass> - <global name="DateTime" module="DateTime.DateTime"/> - </klass> - <tuple> - <none/> - </tuple> - <state> - <tuple> - <float>1404998932.44</float> - <string>GMT</string> - </tuple> - </state> - </object> - </value> - </item> - </dictionary> - </list> - </tuple> - </pickle> - </record> -</ZopeData> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_site_module/monitoring_render_js.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_site_module/officejs_monitoring.xml similarity index 95% rename from bt5/erp5_web_monitoring/PathTemplateItem/web_site_module/monitoring_render_js.xml rename to bt5/erp5_web_monitoring/PathTemplateItem/web_site_module/officejs_monitoring.xml index 3e3efae3c11d4f451f36792e5f9c1bec57d2d156..bed894f230f8365f45a80e85e516817fd268bdf2 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_site_module/monitoring_render_js.xml +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_site_module/officejs_monitoring.xml @@ -133,7 +133,7 @@ <key> <tuple> <int>99</int> - <string>ERP5 Web Site/monitoring_render_js</string> + <string>ERP5 Web Site/officejs_monitoring</string> </tuple> </key> <value> @@ -253,17 +253,17 @@ <value> <tuple> <string>aggregate/web_page_module/gadget_officejs_bootloader.html</string> - <string>caching_policy/no-cache</string> + <string>caching_policy/must-revalidate</string> </tuple> </value> </item> <item> <key> <string>configuration_cache_file</string> </key> - <value> <string>gadget_monitoring.appcache</string> </value> + <value> <string>gadget_officejs_monitoring.appcache</string> </value> </item> <item> <key> <string>configuration_content_security_policy</string> </key> - <value> <string>default-src \'self\'; img-src \'self\' data:; media-src \'self\' blob:; connect-src \'self\' https://content.dropboxapi.com https://api.dropboxapi.com mail.tiolive.com data: localhost:5378 *.host.vifib.net *.node.vifib.com *.erp5.net https://netdna.bootstrapcdn.com; script-src \'self\' \'unsafe-eval\' \'unsafe-inline\'; font-src \'self\' netdna.bootstrapcdn.com; style-src \'self\' netdna.bootstrapcdn.com \'unsafe-inline\' data:; frame-src \'self\' data:</string> </value> + <value> <string>default-src \'self\'; img-src \'self\' data:; media-src \'self\' blob:; connect-src \'self\' https://content.dropboxapi.com https://api.dropboxapi.com mail.tiolive.com data: * localhost:5378 *.vifib.erp5.net *.host.vifib.net *.node.vifib.com *.erp5.net https://netdna.bootstrapcdn.com; script-src \'self\' \'unsafe-eval\' \'unsafe-inline\'; font-src \'self\' netdna.bootstrapcdn.com; style-src \'self\' netdna.bootstrapcdn.com \'unsafe-inline\' data:; frame-src \'self\' data:</string> </value> </item> <item> <key> <string>configuration_latest_document_version</string> </key> @@ -301,7 +301,7 @@ </item> <item> <key> <string>id</string> </key> - <value> <string>monitoring_render_js</string> </value> + <value> <string>officejs_monitoring</string> </value> </item> <item> <key> <string>layout_configuration_form_id</string> </key> @@ -467,7 +467,7 @@ </tuple> <state> <tuple> - <float>1503922757.92</float> + <float>1507825401.94</float> <string>UTC</string> </tuple> </state> @@ -512,7 +512,7 @@ </item> <item> <key> <string>serial</string> </key> - <value> <string>961.48211.31484.14250</string> </value> + <value> <string>963.16563.15280.46899</string> </value> </item> <item> <key> <string>state</string> </key> @@ -530,7 +530,7 @@ </tuple> <state> <tuple> - <float>1504021651.02</float> + <float>1510153533.44</float> <string>UTC</string> </tuple> </state> diff --git a/bt5/erp5_web_monitoring/PathTemplateItem/web_site_module/monitoring_render_js/app.xml b/bt5/erp5_web_monitoring/PathTemplateItem/web_site_module/officejs_monitoring/app.xml similarity index 86% rename from bt5/erp5_web_monitoring/PathTemplateItem/web_site_module/monitoring_render_js/app.xml rename to bt5/erp5_web_monitoring/PathTemplateItem/web_site_module/officejs_monitoring/app.xml index 4fc25f3e32484157cecaf769e794658b122f6a00..b19e2f8fb2725b3c1bdab56999da518704b0a451 100644 --- a/bt5/erp5_web_monitoring/PathTemplateItem/web_site_module/monitoring_render_js/app.xml +++ b/bt5/erp5_web_monitoring/PathTemplateItem/web_site_module/officejs_monitoring/app.xml @@ -253,6 +253,36 @@ <value> <string>string</string> </value> </item> </dictionary> + <dictionary> + <item> + <key> <string>id</string> </key> + <value> <string>configuration_default_jio_document_page_gadget_url</string> </value> + </item> + <item> + <key> <string>type</string> </key> + <value> <string>string</string> </value> + </item> + </dictionary> + <dictionary> + <item> + <key> <string>id</string> </key> + <value> <string>configuration_frontpage_gadget_url</string> </value> + </item> + <item> + <key> <string>type</string> </key> + <value> <string>string</string> </value> + </item> + </dictionary> + <dictionary> + <item> + <key> <string>id</string> </key> + <value> <string>configuration_default_view_action_reference</string> </value> + </item> + <item> + <key> <string>type</string> </key> + <value> <string>string</string> </value> + </item> + </dictionary> </tuple> </value> </item> @@ -267,7 +297,7 @@ <value> <tuple> <string>caching_policy/must-revalidate</string> - <string>aggregate/web_page_module/rjs_gadget_monitoring_html</string> + <string>aggregate/web_page_module/rjs_gadget_erp5_launcher_html</string> </tuple> </value> </item> @@ -277,7 +307,19 @@ </item> <item> <key> <string>configuration_content_security_policy</string> </key> - <value> <string>default-src \'self\'; img-src \'self\' data:; media-src \'self\' blob:; connect-src \'self\' https://content.dropboxapi.com https://api.dropboxapi.com mail.tiolive.com data: localhost:5378 *.host.vifib.net *.node.vifib.com *.erp5.net https://netdna.bootstrapcdn.com; script-src \'self\' \'unsafe-eval\' \'unsafe-inline\'; font-src \'self\' netdna.bootstrapcdn.com; style-src \'self\' netdna.bootstrapcdn.com \'unsafe-inline\' data:; frame-src \'self\' data:</string> </value> + <value> <string>default-src \'self\'; img-src \'self\' data:; media-src \'self\' blob:; connect-src \'self\' https://content.dropboxapi.com https://api.dropboxapi.com mail.tiolive.com data: * localhost:5378 *.vifib.erp5.net *.host.vifib.net *.node.vifib.com *.erp5.net https://netdna.bootstrapcdn.com; script-src \'self\' \'unsafe-eval\' \'unsafe-inline\'; font-src \'self\' netdna.bootstrapcdn.com; style-src \'self\' netdna.bootstrapcdn.com \'unsafe-inline\' data:; frame-src \'self\' data:</string> </value> + </item> + <item> + <key> <string>configuration_default_jio_document_page_gadget_url</string> </key> + <value> <string>ojs_controller</string> </value> + </item> + <item> + <key> <string>configuration_default_view_action_reference</string> </key> + <value> <string>jio_view</string> </value> + </item> + <item> + <key> <string>configuration_frontpage_gadget_url</string> </key> + <value> <string>ojsm_status_list</string> </value> </item> <item> <key> <string>configuration_hateoas_url</string> </key> @@ -285,23 +327,23 @@ </item> <item> <key> <string>configuration_header_gadget_url</string> </key> - <value> <string>gadget_monitoring_header.html</string> </value> + <value> <string>gadget_officejs_monitoring_header.html</string> </value> </item> <item> <key> <string>configuration_jio_gadget_url</string> </key> - <value> <string>gadget_monitoring_jio.html</string> </value> + <value> <string>gadget_officejs_monitoring_jio.html</string> </value> </item> <item> <key> <string>configuration_manifest_url</string> </key> - <value> <string>gadget_monitoring.appcache</string> </value> + <value> <string>gadget_officejs_monitoring.appcache</string> </value> </item> <item> <key> <string>configuration_panel_gadget_url</string> </key> - <value> <string>gadget_monitoring_application_panel.html</string> </value> + <value> <string>gadget_officejs_monitoring_panel.html</string> </value> </item> <item> <key> <string>configuration_router_gadget_url</string> </key> - <value> <string>gadget_monitoring_router.html</string> </value> + <value> <string>gadget_officejs_monitoring_router.html</string> </value> </item> <item> <key> <string>configuration_translation_gadget_url</string> </key> @@ -475,7 +517,7 @@ </tuple> <state> <tuple> - <float>1503929920.58</float> + <float>1507825544.87</float> <string>UTC</string> </tuple> </state> @@ -520,7 +562,7 @@ </item> <item> <key> <string>serial</string> </key> - <value> <string>961.48181.3137.59750</string> </value> + <value> <string>963.16563.15280.46899</string> </value> </item> <item> <key> <string>state</string> </key> @@ -538,7 +580,7 @@ </tuple> <state> <tuple> - <float>1504021642.59</float> + <float>1510153673.61</float> <string>UTC</string> </tuple> </state> diff --git a/bt5/erp5_web_monitoring/RegisteredSkinSelectionTemplateItem/registered_skin_selection.xml b/bt5/erp5_web_monitoring/RegisteredSkinSelectionTemplateItem/registered_skin_selection.xml deleted file mode 100644 index d6f6a428c1e40dfa4596465e6d46a03cca954328..0000000000000000000000000000000000000000 --- a/bt5/erp5_web_monitoring/RegisteredSkinSelectionTemplateItem/registered_skin_selection.xml +++ /dev/null @@ -1,6 +0,0 @@ -<registered_skin_selection> - <skin_folder_selection> - <skin_folder>erp5_web_renderjs_ui</skin_folder> - <skin_selection>RJS</skin_selection> - </skin_folder_selection> -</registered_skin_selection> \ No newline at end of file diff --git a/bt5/erp5_web_monitoring/bt/dependency_list b/bt5/erp5_web_monitoring/bt/dependency_list index 102f336e450cb70e91e7c8080e46c1efb998e633..0a285366fafc2e9dfe21ff87188130a9a35aef41 100644 --- a/bt5/erp5_web_monitoring/bt/dependency_list +++ b/bt5/erp5_web_monitoring/bt/dependency_list @@ -1,3 +1,2 @@ -erp5_web erp5_web_renderjs_ui erp5_officejs \ No newline at end of file diff --git a/bt5/erp5_web_monitoring/bt/template_keep_last_workflow_history_only_path_list b/bt5/erp5_web_monitoring/bt/template_keep_last_workflow_history_only_path_list index e31da8463cf6b177f05eca50d735635d1ba3f06a..51aefd45d1ebf66372368796abcd5ffd482e98c7 100644 --- a/bt5/erp5_web_monitoring/bt/template_keep_last_workflow_history_only_path_list +++ b/bt5/erp5_web_monitoring/bt/template_keep_last_workflow_history_only_path_list @@ -1,15 +1,20 @@ +web_page_module/gadget_erp5_page_settings_configurator_* +web_page_module/ojsm_gadget_erp5_statusfield_* web_page_module/Notify_min_js -web_page_module/gadget_monitoring_* -web_page_module/jquery.magnific-popup.min.js +web_page_module/gadget_erp5_field_status_* +web_page_module/gadget_erp5_page_ojsm_* +web_page_module/gadget_officejs_jio_global_view_html +web_page_module/gadget_officejs_jio_global_view_js +web_page_module/gadget_officejs_jio_opml_view_html +web_page_module/gadget_officejs_jio_opml_view_js +web_page_module/gadget_officejs_jio_promise_view_html +web_page_module/gadget_officejs_jio_promise_view_js +web_page_module/gadget_officejs_monitoring_* web_page_module/jsen_json_validator_js -web_page_module/magnific-popup.css -web_page_module/monitoring_jio_* -web_page_module/rjs_gadget_erp5_css -web_page_module/rjs_gadget_erp5_js -web_page_module/rjs_gadget_global_js -web_page_module/rjs_gadget_monitoring_html +web_page_module/monitoring_jio_http_storage_js +web_page_module/monitoring_jio_parser_storage_js +web_page_module/monitoring_jio_storage_js +web_page_module/monitoring_jio_web_storage_js web_page_module/rjs_jquery_js -web_page_module/rjs_jquerymobile_css -web_page_module/rjs_jquerymobile_js -web_site_module/monitoring_render_js -web_site_module/monitoring_render_js/** \ No newline at end of file +web_site_module/officejs_monitoring +web_site_module/officejs_monitoring/** \ No newline at end of file diff --git a/bt5/erp5_web_monitoring/bt/template_keep_workflow_path_list b/bt5/erp5_web_monitoring/bt/template_keep_workflow_path_list index e31da8463cf6b177f05eca50d735635d1ba3f06a..51aefd45d1ebf66372368796abcd5ffd482e98c7 100644 --- a/bt5/erp5_web_monitoring/bt/template_keep_workflow_path_list +++ b/bt5/erp5_web_monitoring/bt/template_keep_workflow_path_list @@ -1,15 +1,20 @@ +web_page_module/gadget_erp5_page_settings_configurator_* +web_page_module/ojsm_gadget_erp5_statusfield_* web_page_module/Notify_min_js -web_page_module/gadget_monitoring_* -web_page_module/jquery.magnific-popup.min.js +web_page_module/gadget_erp5_field_status_* +web_page_module/gadget_erp5_page_ojsm_* +web_page_module/gadget_officejs_jio_global_view_html +web_page_module/gadget_officejs_jio_global_view_js +web_page_module/gadget_officejs_jio_opml_view_html +web_page_module/gadget_officejs_jio_opml_view_js +web_page_module/gadget_officejs_jio_promise_view_html +web_page_module/gadget_officejs_jio_promise_view_js +web_page_module/gadget_officejs_monitoring_* web_page_module/jsen_json_validator_js -web_page_module/magnific-popup.css -web_page_module/monitoring_jio_* -web_page_module/rjs_gadget_erp5_css -web_page_module/rjs_gadget_erp5_js -web_page_module/rjs_gadget_global_js -web_page_module/rjs_gadget_monitoring_html +web_page_module/monitoring_jio_http_storage_js +web_page_module/monitoring_jio_parser_storage_js +web_page_module/monitoring_jio_storage_js +web_page_module/monitoring_jio_web_storage_js web_page_module/rjs_jquery_js -web_page_module/rjs_jquerymobile_css -web_page_module/rjs_jquerymobile_js -web_site_module/monitoring_render_js -web_site_module/monitoring_render_js/** \ No newline at end of file +web_site_module/officejs_monitoring +web_site_module/officejs_monitoring/** \ No newline at end of file diff --git a/bt5/erp5_web_monitoring/bt/template_path_list b/bt5/erp5_web_monitoring/bt/template_path_list index e31da8463cf6b177f05eca50d735635d1ba3f06a..c0910b1dd042451cc2ec582269c462ad8680a9c2 100644 --- a/bt5/erp5_web_monitoring/bt/template_path_list +++ b/bt5/erp5_web_monitoring/bt/template_path_list @@ -1,15 +1,20 @@ web_page_module/Notify_min_js -web_page_module/gadget_monitoring_* -web_page_module/jquery.magnific-popup.min.js +web_page_module/gadget_erp5_field_status_* +web_page_module/gadget_erp5_page_ojsm_* +web_page_module/gadget_erp5_page_settings_configurator_* +web_page_module/gadget_officejs_jio_global_view_html +web_page_module/gadget_officejs_jio_global_view_js +web_page_module/gadget_officejs_jio_opml_view_html +web_page_module/gadget_officejs_jio_opml_view_js +web_page_module/gadget_officejs_jio_promise_view_html +web_page_module/gadget_officejs_jio_promise_view_js +web_page_module/gadget_officejs_monitoring_* web_page_module/jsen_json_validator_js -web_page_module/magnific-popup.css -web_page_module/monitoring_jio_* -web_page_module/rjs_gadget_erp5_css -web_page_module/rjs_gadget_erp5_js -web_page_module/rjs_gadget_global_js -web_page_module/rjs_gadget_monitoring_html +web_page_module/monitoring_jio_http_storage_js +web_page_module/monitoring_jio_parser_storage_js +web_page_module/monitoring_jio_storage_js +web_page_module/monitoring_jio_web_storage_js +web_page_module/ojsm_gadget_erp5_statusfield_* web_page_module/rjs_jquery_js -web_page_module/rjs_jquerymobile_css -web_page_module/rjs_jquerymobile_js -web_site_module/monitoring_render_js -web_site_module/monitoring_render_js/** \ No newline at end of file +web_site_module/officejs_monitoring +web_site_module/officejs_monitoring/** \ No newline at end of file diff --git a/bt5/erp5_web_monitoring/bt/template_registered_skin_selection_list b/bt5/erp5_web_monitoring/bt/template_registered_skin_selection_list deleted file mode 100644 index 6d44cbb909588f66956d4d5f646785b8a38fa5ce..0000000000000000000000000000000000000000 --- a/bt5/erp5_web_monitoring/bt/template_registered_skin_selection_list +++ /dev/null @@ -1 +0,0 @@ -erp5_web_renderjs_ui | RJS \ No newline at end of file