diff --git a/.gitignore b/.gitignore index 03aa910d..58fd025c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,130 @@ -# PyCharm -# http://www.jetbrains.com/pycharm/webhelp/project.html -.idea -.iml -/app_odoo_customize/_resource -/app_web_studio -/web_studio +#个人文件目录,不传到git,每个人将个人文件放到 _s 目录下 +_s/ +addons_ent_remove/ +addons_odoo/ +app-dev/ +myconf/ +z/ +/.idea +.idea/ +\.idea +.git/ +.gitee/ +.vscode/ +.tx/ +~*.* +.pyc +.DS_Store +u*.bat +ivan.conf +chill.conf +vcs.xml +deployment.xml + +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +parts/ +sdist/ +var/ +wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +.hypothesis/ +.pytest_cache/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +.python-version + +# celery beat schedule file +celerybeat-schedule + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json diff --git a/app_dynamic_list/__init__.py b/app_dynamic_list/__init__.py deleted file mode 100644 index faaaf799..00000000 --- a/app_dynamic_list/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -# -*- coding: utf-8 -*- - - diff --git a/app_dynamic_list/__openerp__.py b/app_dynamic_list/__openerp__.py deleted file mode 100644 index 3f1dd57b..00000000 --- a/app_dynamic_list/__openerp__.py +++ /dev/null @@ -1,34 +0,0 @@ - -{ - 'name': 'App Customize Columns of List (Tree) View Dynamic', - 'version': '10.0.1.6', - 'author': 'Sunpop.cn', - 'category': 'Productivity', - 'website': 'http://www.odooapp.cn', - 'sequence': 2, - 'summary': 'App Customize columns of List (Tree) View. Dynamic list.', - 'description': """ - -App Customize Columns of List (Tree) View -============ -App Customize Columns of List (Tree) View module is made to show/hide the columns on the list/tree view of Odoo. After installing the module, a "Set Columns" button will be show to the list view. -You can customize every odoo list/tree view easily. - -This module is ready for Community and Enterprise Edition. - - """, - 'images': ['static/description/sales_coms.jpg' - ], - 'depends': ['web'], - 'data': [ - 'views/listview_button.xml', - ], - 'demo': [], - 'test': [ - ], - 'installable': True, - 'application': True, - 'auto_install': False, - 'qweb': ['static/src/xml/listview_button_view.xml'], -} - diff --git a/app_dynamic_list/i18n/zh_CN.po b/app_dynamic_list/i18n/zh_CN.po deleted file mode 100644 index c07d57f0..00000000 --- a/app_dynamic_list/i18n/zh_CN.po +++ /dev/null @@ -1,24 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * apps_material_backend_theme -# -msgid "" -msgstr "" -"Project-Id-Version: Odoo Server 10.0c\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-09-07 08:57+0000\n" -"PO-Revision-Date: 2016-09-07 08:57+0000\n" -"Last-Translator: Ivan Deng <300883@qq.com>, 2017\n" -"Language-Team: Chinese (China) (https://www.transifex.com/odoo/teams/41243/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -#. module: app_dynamic_list -#. openerp-web -#: code:addons/apps_material_backend_theme/static/src/xml/listview_button_view.xml:121 -#, python-format -msgid "Set Columns" -msgstr "显示列" diff --git a/app_dynamic_list/images/dynamiclist_homepage.jpg b/app_dynamic_list/images/dynamiclist_homepage.jpg deleted file mode 100644 index 5563db16..00000000 Binary files a/app_dynamic_list/images/dynamiclist_homepage.jpg and /dev/null differ diff --git a/app_dynamic_list/static/description/icon.png b/app_dynamic_list/static/description/icon.png deleted file mode 100644 index 2a04f219..00000000 Binary files a/app_dynamic_list/static/description/icon.png and /dev/null differ diff --git a/app_dynamic_list/static/description/index.html b/app_dynamic_list/static/description/index.html deleted file mode 100644 index f75d97bc..00000000 --- a/app_dynamic_list/static/description/index.html +++ /dev/null @@ -1,62 +0,0 @@ -
-
-
-

Customize hide/show the columns on the list (tree) view dynamically

-
-

This moduld allows user to customize columns dynamically in list (tree) view of any object of any - installed module.

- -
-

"Set Columns" button contains all field(s) in dropdown with checkbox which will exist in - list view of current object. So if user wants to show/hide any field, then he/she has to just do - check/uncheck that respective checkbox besides field name in dropdown list and then just click on - "Apply" button.

-
-
-
- - -
- -
-
    -
  • Sales leads in Enterprise Edition

  • -
-
-
- -
-
- -
-
    -
  • Sales leads in Community Edition

  • -
-
- -
- -
-
-
- -
-
-
-
-

Technical Help & Support

-
-
-
-

- For any type of technical help & support requests, Feel free to contact us

- - guohuadeng@hotmail.com -
-
-
-
diff --git a/app_dynamic_list/static/description/sales_com.png b/app_dynamic_list/static/description/sales_com.png deleted file mode 100644 index 48b199f5..00000000 Binary files a/app_dynamic_list/static/description/sales_com.png and /dev/null differ diff --git a/app_dynamic_list/static/description/sales_ent.png b/app_dynamic_list/static/description/sales_ent.png deleted file mode 100644 index 55986b90..00000000 Binary files a/app_dynamic_list/static/description/sales_ent.png and /dev/null differ diff --git a/app_dynamic_list/static/src/css/my.css b/app_dynamic_list/static/src/css/my.css deleted file mode 100644 index e69de29b..00000000 diff --git a/app_dynamic_list/static/src/js/dynamic_list.js b/app_dynamic_list/static/src/js/dynamic_list.js deleted file mode 100644 index dd4f8470..00000000 --- a/app_dynamic_list/static/src/js/dynamic_list.js +++ /dev/null @@ -1,97 +0,0 @@ -odoo.define('app_dynamic_list.shcolumns', function (require) { -"use strict"; - -var core = require('web.core'); -var ListView = require('web.ListView'); -var QWeb = core.qweb; - -ListView.include({ - reload: function () { - this.setup_columns(this.fields_view.fields, this.grouped); - this.$el.html(QWeb.render(this._template, this)); - return this.reload_content(); - }, - - render_buttons: function($node) { - var self = this; - this._super($node); - this.$buttons.find('.oe_select_columns').click(this.proxy('my_setup_columns')); - this.$buttons.find('.oe_dropdown_btn').click(this.proxy('hide_show_columns')); - this.$buttons.find('.dropdown-menu').click(this.proxy('stop_event')); - }, - - my_setup_columns: function (fields, grouped) { - $("#showcb").toggle(); - var getcb = document.getElementById('showcb'); - this.visible_columns = _.filter(this.columns, function (column) { - var firstcheck = document.getElementById(column.id); - if(firstcheck == null) - { - var li= document.createElement("li"); - var description = document.createTextNode(column.string); - var checkbox = document.createElement("input"); - checkbox.id = column.id; - checkbox.type = "checkbox"; - checkbox.name = "cb"; - - if(column.invisible !== '1') - { - checkbox.checked = true; - } - li.appendChild(checkbox); - li.appendChild(description); - getcb.appendChild(li); - } - else - { - if(column.invisible !== '1') - { - firstcheck.checked = true; - } - else - { - firstcheck.checked = false; - } - } - }); - }, - stop_event : function(e) - { - e.stopPropagation(); - }, - - hide_show_columns : function() - { - $("#showcb").hide(); - this.setup_columns(this.fields_view.fields, this.grouped); - this.$el.html(QWeb.render(this._template, this)); - return this.reload_content(); - }, - - setup_columns: function (fields, grouped) { - this._super(fields, grouped); - this.visible_columns = _.filter(this.columns, function (column) { - var cbid = document.getElementById(column.id); - if(cbid !== null) - { - var cbid = cbid.checked; - if(cbid !== false) - { - column.invisible = '2'; - } - else - { - column.invisible = '1'; - } - } - return column.invisible !== '1'; - }); - this.aggregate_columns = _(this.visible_columns).invoke('to_aggregate'); - }, -}); - -$(document).click(function(){ - $("#showcb").hide(); -}); - -}); diff --git a/app_dynamic_list/static/src/xml/listview_button_view.xml b/app_dynamic_list/static/src/xml/listview_button_view.xml deleted file mode 100644 index a5c0e58f..00000000 --- a/app_dynamic_list/static/src/xml/listview_button_view.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - -
- - - -
-
-
-
diff --git a/app_dynamic_list/views/listview_button.xml b/app_dynamic_list/views/listview_button.xml deleted file mode 100644 index fdad6af3..00000000 --- a/app_dynamic_list/views/listview_button.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - diff --git a/app_odoo_customize/__init__.py b/app_odoo_customize/__init__.py deleted file mode 100644 index e49c8b6f..00000000 --- a/app_odoo_customize/__init__.py +++ /dev/null @@ -1,4 +0,0 @@ -# -*- coding: utf-8 -*- -import models - - diff --git a/app_odoo_customize/__openerp__.py b/app_odoo_customize/__openerp__.py deleted file mode 100644 index fd243a50..00000000 --- a/app_odoo_customize/__openerp__.py +++ /dev/null @@ -1,73 +0,0 @@ -# -*- coding: utf-8 -*- - -# Created on 2017-11-05 -# author: 广州尚鹏,http://www.sunpop.cn -# email: 300883@qq.com -# resource of Sunpop -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). - -# Odoo在线中文用户手册(长期更新) -# http://www.sunpop.cn/documentation/user/10.0/zh_CN/index.html - -# Odoo10离线中文用户手册下载 -# http://www.sunpop.cn/odoo10_user_manual_document_offline/ -# Odoo10离线开发手册下载-含python教程,jquery参考,Jinja2模板,PostgresSQL参考(odoo开发必备) -# http://www.sunpop.cn/odoo10_developer_document_offline/ -# description: -{ - 'name': 'App Odoo Customize(Backend Debranding Title,Language,Documentation,Quick Debug,Delete clear)', - 'version': '10.0.2.4', - 'author': 'Sunpop.cn', - 'category': 'Productivity', - 'website': 'http://www.sunpop.cn', - 'license': 'AGPL-3', - 'sequence': 2, - 'summary': 'Quick customize and debranding your own Odoo. Quick debug, Language Switcher, Online Documentation Access,Delete test data.', - 'description': """ - -App Odoo Customize(Debranding Title,Language,Documentation,Quick Debug) -============ -White label odoo. -You can config odoo, make it look like your own platform. -1. Deletes Odoo label in footer -2. Replaces "Odoo" in Windows title -3. Customize Documentation, Support, About links and title in usermenu -4. Adds "Developer mode" link to the top right-hand User Menu. -5. Adds Quick Language Switcher to the top right-hand User Menu. -6. Adds Country flags to the top right-hand User Menu. -7. Adds English and Chinese user documentation access to the top right-hand User Menu. -8. Adds developer documentation access to the top right-hand User Menu. -9. Customize "My odoo.com account" button -10. Standalone setting panel, easy to setup. -11. Provide 236 country flags. -12. Multi-language Support. -13. Change Powered by Odoo in login screen.(Please change '../views/app_odoo_customize_view.xml' #15) -14. Quick delete test data in Apps: Sales/POS/Purchase/MRP/Inventory/Accounting/Message/Workflow etc. -15. Reset All the Sequence to beginning of 1: SO/PO/MO/Invoice... -16. Fix odoo reload module translation bug while enable english language -17. Stop Odoo Auto Subscribe(Performance Improve) - -This module can help to white label the Odoo. -Also helpful for training and support for your odoo end-user. -The user can get the help document just by one click. - - """, - 'images': ['static/description/banner.png'], - 'depends': ['web','mail'], - 'data': [ - 'views/app_odoo_customize_view.xml', - 'views/app_theme_config_settings_view.xml', - # data - 'data/ir_config_parameter.xml', - ], - 'demo': [], - 'test': [ - ], - 'installable': True, - 'application': True, - 'auto_install': False, - 'qweb': [ - 'static/src/xml/customize_user_menu.xml', - ], -} - diff --git a/app_odoo_customize/data/ir_config_parameter.xml b/app_odoo_customize/data/ir_config_parameter.xml deleted file mode 100644 index ede752c1..00000000 --- a/app_odoo_customize/data/ir_config_parameter.xml +++ /dev/null @@ -1,71 +0,0 @@ - - - - - app_system_name - odooApp - - - - app_show_lang - True - - - app_show_debug - True - - - app_show_documentation - True - - - app_show_documentation_dev - True - - - app_show_support - True - - - app_show_account - True - - - app_show_enterprise - False - - - app_show_share - False - - - app_show_poweredby - False - - - app_stop_subscribe - False - - - - app_documentation_url - http://www.sunpop.cn/documentation/user/10.0/zh_CN/index.html - - - app_documentation_dev_url - http://www.sunpop.cn/documentation/10.0/index.html - - - app_support_url - http://www.sunpop.cn/trial - - - app_account_title - My Online Account - - - app_account_url - http://www.sunpop.cn/my-account - - - \ No newline at end of file diff --git a/app_odoo_customize/i18n/zh_CN.po b/app_odoo_customize/i18n/zh_CN.po deleted file mode 100644 index aea4159b..00000000 --- a/app_odoo_customize/i18n/zh_CN.po +++ /dev/null @@ -1,397 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * app_odoo_customize -# -msgid "" -msgstr "" -"Project-Id-Version: Odoo Server 10.0+e-20171107\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-01-10 11:41+0000\n" -"PO-Revision-Date: 2018-01-10 11:41+0000\n" -"Last-Translator: <>\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" -"Plural-Forms: \n" - -#. module: app_odoo_customize -#: model:ir.ui.view,arch_db:app_odoo_customize.view_app_theme_config_settings -msgid "Accounting" -msgstr "会计" - -#. module: app_odoo_customize -#. openerp-web -#: code:addons/app_odoo_customize/static/src/xml/customize_user_menu.xml:7 -#, python-format -msgid "Activate the developer mode" -msgstr "激活开发者模式" - -#. module: app_odoo_customize -#. openerp-web -#: code:addons/app_odoo_customize/static/src/xml/customize_user_menu.xml:10 -#, python-format -msgid "Activate the developer mode (with assets)" -msgstr "激活开发者模式 (assets)" - -#. module: app_odoo_customize -#: model:ir.model,name:app_odoo_customize.model_app_theme_config_settings -msgid "App Odoo Customize settings" -msgstr "App Odoo 自定义设置" - -#. module: app_odoo_customize -#: model:ir.ui.view,arch_db:app_odoo_customize.view_app_theme_config_settings -msgid "Apply" -msgstr "应用" - -#. module: app_odoo_customize -#: model:ir.ui.view,arch_db:app_odoo_customize.view_app_theme_config_settings -msgid "Base Models" -msgstr "基础模型数据" - -#. module: app_odoo_customize -#: model:ir.ui.view,arch_db:app_odoo_customize.view_app_theme_config_settings -msgid "Cancel" -msgstr "取消" - -#. module: app_odoo_customize -#: model:ir.model.fields,help:app_odoo_customize.field_app_theme_config_settings_app_stop_subscribe -msgid "Check to stop Odoo Subscribe function" -msgstr "Check to stop Odoo Subscribe function" - -#. module: app_odoo_customize -#: model:ir.model.fields,field_description:app_odoo_customize.field_app_theme_config_settings_create_uid -msgid "Created by" -msgstr "创建人" - -#. module: app_odoo_customize -#: model:ir.model.fields,field_description:app_odoo_customize.field_app_theme_config_settings_create_date -msgid "Created on" -msgstr "创建时间" - -#. module: app_odoo_customize -#: model:ir.ui.view,arch_db:app_odoo_customize.view_app_theme_config_settings -msgid "Data Cleaning (Be careful to do that!)" -msgstr "数据清理(请谨慎操作!)" - -#. module: app_odoo_customize -#. openerp-web -#: code:addons/app_odoo_customize/static/src/xml/customize_user_menu.xml:13 -#, python-format -msgid "Deactivate the developer mode" -msgstr "取消激活开发者模式" - -#. module: app_odoo_customize -#: model:ir.ui.view,arch_db:app_odoo_customize.view_app_theme_config_settings -msgid "Delete All BOM" -msgstr "删除所有物料清单" - -#. module: app_odoo_customize -#: model:ir.ui.view,arch_db:app_odoo_customize.view_app_theme_config_settings -msgid "Delete All Manufacturing Order" -msgstr "删除所有生产单" - -#. module: app_odoo_customize -#: model:ir.ui.view,arch_db:app_odoo_customize.view_app_theme_config_settings -msgid "Delete All Message" -msgstr "删除所有消息" - -#. module: app_odoo_customize -#: model:ir.ui.view,arch_db:app_odoo_customize.view_app_theme_config_settings -msgid "Delete All Move/Picking/Package/Lot" -msgstr "删除所有库存调拨/拣货/包装/批次数据" - -#. module: app_odoo_customize -#: model:ir.ui.view,arch_db:app_odoo_customize.view_app_theme_config_settings -msgid "Delete All POS Order" -msgstr "删除所有POS订单" - -#. module: app_odoo_customize -#: model:ir.ui.view,arch_db:app_odoo_customize.view_app_theme_config_settings -msgid "Delete All Product" -msgstr "删除所有产品及变体" - -#. module: app_odoo_customize -#: model:ir.ui.view,arch_db:app_odoo_customize.view_app_theme_config_settings -msgid "Delete All Product Attribute" -msgstr "删除所有产品属性" - -#. module: app_odoo_customize -#: model:ir.ui.view,arch_db:app_odoo_customize.view_app_theme_config_settings -msgid "Delete All Purchase Order and Requisition" -msgstr "删除所有询价单、采购单,采购招标" - -#. module: app_odoo_customize -#: model:ir.ui.view,arch_db:app_odoo_customize.view_app_theme_config_settings -msgid "Delete All Sales Order" -msgstr "删除所有报价单、销售单" - -#. module: app_odoo_customize -#: model:ir.ui.view,arch_db:app_odoo_customize.view_app_theme_config_settings -msgid "Delete All Voucher/Invoice/Bill" -msgstr "删除所有收据/发票/账单" - -#. module: app_odoo_customize -#: model:ir.ui.view,arch_db:app_odoo_customize.view_app_theme_config_settings -msgid "Delete All Workflow" -msgstr "删除所有工作流" - -#. module: app_odoo_customize -#: model:ir.model.fields,field_description:app_odoo_customize.field_app_theme_config_settings_app_documentation_dev_url -msgid "Developer Documentation Url" -msgstr "开发者手册链接" - -#. module: app_odoo_customize -#. openerp-web -#: code:addons/app_odoo_customize/static/src/xml/customize_user_menu.xml:16 -#, python-format -msgid "Developer Manual" -msgstr "开发者手册" - -#. module: app_odoo_customize -#: model:ir.model.fields,field_description:app_odoo_customize.field_app_theme_config_settings_display_name -msgid "Display Name" -msgstr "显示名称" - -#. module: app_odoo_customize -#: model:ir.model.fields,field_description:app_odoo_customize.field_app_theme_config_settings_app_documentation_url -msgid "Documentation Url" -msgstr "用户手册链接" - -#. module: app_odoo_customize -#: model:ir.model,name:app_odoo_customize.model_mail_thread -msgid "Email Thread" -msgstr "Email线程" - -#. module: app_odoo_customize -#: model:ir.model.fields,field_description:app_odoo_customize.field_app_theme_config_settings_id -msgid "ID" -msgstr "ID" - -#. module: app_odoo_customize -#: model:ir.model,name:app_odoo_customize.model_base_language_install -msgid "Install Language" -msgstr "安装语言" - -#. module: app_odoo_customize -#: model:ir.ui.view,arch_db:app_odoo_customize.view_app_theme_config_settings -msgid "Inventory" -msgstr "库存" - -#. module: app_odoo_customize -#: model:ir.ui.view,arch_db:app_odoo_customize.view_app_theme_config_settings -msgid "Item to Show" -msgstr "显示/隐藏菜单项" - -#. module: app_odoo_customize -#: model:ir.model.fields,field_description:app_odoo_customize.field_app_theme_config_settings___last_update -msgid "Last Modified on" -msgstr "最后修改日" - -#. module: app_odoo_customize -#: model:ir.model.fields,field_description:app_odoo_customize.field_app_theme_config_settings_write_uid -msgid "Last Updated by" -msgstr "最后更新人" - -#. module: app_odoo_customize -#: model:ir.model.fields,field_description:app_odoo_customize.field_app_theme_config_settings_write_date -msgid "Last Updated on" -msgstr "最后更新时间" - -#. module: app_odoo_customize -#: model:ir.ui.view,arch_db:app_odoo_customize.view_app_theme_config_settings -msgid "MRP" -msgstr "生产" - -#. module: app_odoo_customize -#: model:ir.model.fields,field_description:app_odoo_customize.field_app_theme_config_settings_app_account_title -msgid "My Odoo.com Account Title" -msgstr "我的帐户显示标题" - -#. module: app_odoo_customize -#: model:ir.model.fields,field_description:app_odoo_customize.field_app_theme_config_settings_app_account_url -msgid "My Odoo.com Account Url" -msgstr "我的帐户链接" - -#. module: app_odoo_customize -#: model:ir.ui.view,arch_db:app_odoo_customize.view_app_theme_config_settings -msgid "Online Support" -msgstr "系统支持" - -#. module: app_odoo_customize -#: model:ir.ui.view,arch_db:app_odoo_customize.view_app_theme_config_settings -msgid "POS" -msgstr "POS门店" - -#. module: app_odoo_customize -#: model:ir.ui.view,arch_db:app_odoo_customize.view_app_theme_config_settings -msgid "Please confirm to delete the select data?" -msgstr "确认删除指定数据?" - -#. module: app_odoo_customize -#: model:ir.ui.view,arch_db:app_odoo_customize.replace_login -msgid "Powered by odooApp" -msgstr "技术支持 odooApp" - -#. module: app_odoo_customize -#: model:ir.ui.view,arch_db:app_odoo_customize.view_app_theme_config_settings -msgid "Purchase" -msgstr "采购" - -#. module: app_odoo_customize -#: model:ir.ui.view,arch_db:app_odoo_customize.view_app_theme_config_settings -msgid "Sales" -msgstr "销售" - -#. module: app_odoo_customize -#: model:ir.model.fields,help:app_odoo_customize.field_app_theme_config_settings_app_system_name -msgid "Setup System Name,which replace Odoo" -msgstr "设置系统名称,取代Odoo" - -#. module: app_odoo_customize -#: model:ir.model.fields,field_description:app_odoo_customize.field_app_theme_config_settings_app_show_documentation_dev -msgid "Show Developer Documentation" -msgstr "显示开发者文档" - -#. module: app_odoo_customize -#: model:ir.model.fields,field_description:app_odoo_customize.field_app_theme_config_settings_app_show_documentation -msgid "Show Documentation" -msgstr "显示文档" - -#. module: app_odoo_customize -#: model:ir.model.fields,field_description:app_odoo_customize.field_app_theme_config_settings_app_show_enterprise -msgid "Show Enterprise Tag" -msgstr "显示升级企业版标签提醒" - -#. module: app_odoo_customize -#: model:ir.model.fields,field_description:app_odoo_customize.field_app_theme_config_settings_app_show_account -msgid "Show My Account" -msgstr "显示我的帐户" - -#. module: app_odoo_customize -#: model:ir.model.fields,field_description:app_odoo_customize.field_app_theme_config_settings_app_show_poweredby -msgid "Show Powered by Odoo" -msgstr "显示Powered by Odoo" - -#. module: app_odoo_customize -#: model:ir.model.fields,field_description:app_odoo_customize.field_app_theme_config_settings_app_show_debug -msgid "Show Quick Debug" -msgstr "显示快速调试" - -#. module: app_odoo_customize -#: model:ir.model.fields,field_description:app_odoo_customize.field_app_theme_config_settings_app_show_lang -msgid "Show Quick Language Switcher" -msgstr "显示快速多语言切换" - -#. module: app_odoo_customize -#: model:ir.model.fields,field_description:app_odoo_customize.field_app_theme_config_settings_app_show_share -msgid "Show Share Dashboard" -msgstr "显示分享Odoo" - -#. module: app_odoo_customize -#: model:ir.model.fields,field_description:app_odoo_customize.field_app_theme_config_settings_app_show_support -msgid "Show Support" -msgstr "显示支持" - -#. module: app_odoo_customize -#: model:ir.model.fields,field_description:app_odoo_customize.field_app_theme_config_settings_app_stop_subscribe -msgid "Stop Odoo Subscribe(Performance Improve)" -msgstr "停用Odoo自动订阅(提高性能)" - -#. module: app_odoo_customize -#: model:ir.model.fields,field_description:app_odoo_customize.field_app_theme_config_settings_app_support_url -msgid "Support Url" -msgstr "支持链接" - -#. module: app_odoo_customize -#: model:ir.model.fields,field_description:app_odoo_customize.field_app_theme_config_settings_app_system_name -#: model:ir.ui.view,arch_db:app_odoo_customize.view_app_theme_config_settings -msgid "System Name" -msgstr "系统名称" - -#. module: app_odoo_customize -#: model:ir.model.fields,help:app_odoo_customize.field_app_theme_config_settings_app_show_enterprise -msgid "Uncheck to hide the Enterprise tag" -msgstr "Uncheck to hide the Enterprise tag" - -#. module: app_odoo_customize -#: model:ir.model.fields,help:app_odoo_customize.field_app_theme_config_settings_app_show_share -msgid "Uncheck to hide the Odoo Share Dashboard" -msgstr "Uncheck to hide the Odoo Share Dashboard" - -#. module: app_odoo_customize -#: model:ir.model.fields,help:app_odoo_customize.field_app_theme_config_settings_app_show_poweredby -msgid "Uncheck to hide the Powered by text" -msgstr "不勾选则不显示Odoo Powered by" - -#. module: app_odoo_customize -#: model:ir.ui.view,arch_db:app_odoo_customize.view_app_theme_config_settings -msgid "User Menu" -msgstr "用户菜单" - -#. module: app_odoo_customize -#: model:ir.ui.view,arch_db:app_odoo_customize.view_app_theme_config_settings -msgid "User Menu Content" -msgstr "菜单项具体操作设置" - -#. module: app_odoo_customize -#: model:ir.ui.view,arch_db:app_odoo_customize.view_app_theme_config_settings -msgid "Visit our website for more apps and Support. http://www.sunpop.cn" -msgstr "请访问我们的网站获取更多支持. http://www.sunpop.cn" - -#. module: app_odoo_customize -#: model:ir.model.fields,help:app_odoo_customize.field_app_theme_config_settings_app_show_account -msgid "When enable,User can login to your website" -msgstr "启用后,会显示登录到你的网站" - -#. module: app_odoo_customize -#: model:ir.model.fields,help:app_odoo_customize.field_app_theme_config_settings_app_show_lang -msgid "When enable,User can quick switch language in user menu" -msgstr "启用后,会显示快速语言切换菜单" - -#. module: app_odoo_customize -#: model:ir.model.fields,help:app_odoo_customize.field_app_theme_config_settings_app_show_documentation_dev -msgid "When enable,User can visit development documentation" -msgstr "启用后,会显示开发手册链接" - -#. module: app_odoo_customize -#: model:ir.model.fields,help:app_odoo_customize.field_app_theme_config_settings_app_show_documentation -msgid "When enable,User can visit user manual" -msgstr "启用后,会显示用户手册链接" - -#. module: app_odoo_customize -#: model:ir.model.fields,help:app_odoo_customize.field_app_theme_config_settings_app_show_support -msgid "When enable,User can vist your support site" -msgstr "启用后,会显示在线支持链接" - -#. module: app_odoo_customize -#: model:ir.model.fields,help:app_odoo_customize.field_app_theme_config_settings_app_show_debug -msgid "When enable,everyone login can see the debug menu" -msgstr "启用后,会显示快速调试菜单" - -#. module: app_odoo_customize -#: model:ir.ui.view,arch_db:app_odoo_customize.view_app_theme_config_settings -msgid "White Label Setting" -msgstr "个性化odoo设置" - -#. module: app_odoo_customize -#: model:ir.model,name:app_odoo_customize.model_ir_ui_view -msgid "ir.ui.view" -msgstr "ir.ui.view" - -#. module: app_odoo_customize -#: model:ir.actions.act_window,name:app_odoo_customize.action_app_theme_config -#: model:ir.ui.menu,name:app_odoo_customize.menu_app_theme_config -msgid "odooApp Customize" -msgstr "odooApp 定制" - -#. module: app_odoo_customize -#: model:ir.ui.menu,name:app_odoo_customize.menu_app_group -msgid "odooApp" -msgstr "odooApp" - -#. module: app_odoo_customize -#: model:ir.ui.view,arch_db:app_odoo_customize.view_app_theme_config_settings -msgid "odooApp Customize Settings" -msgstr "odooApp 定制化设置" - diff --git a/app_odoo_customize/models/__init__.py b/app_odoo_customize/models/__init__.py deleted file mode 100644 index 36ac87dc..00000000 --- a/app_odoo_customize/models/__init__.py +++ /dev/null @@ -1,6 +0,0 @@ -# -*- coding: utf-8 -*- - -import ir_ui_view -import app_theme_config_settings -import base_language_install -import mail_thread diff --git a/app_odoo_customize/models/app_theme_config_settings.py b/app_odoo_customize/models/app_theme_config_settings.py deleted file mode 100644 index 44079a48..00000000 --- a/app_odoo_customize/models/app_theme_config_settings.py +++ /dev/null @@ -1,440 +0,0 @@ -# -*- coding: utf-8 -*- - -import logging - -from openerp import api, fields, models, _ - -_logger = logging.getLogger(__name__) - - -class AppThemeConfigSettings(models.TransientModel): - _inherit = 'res.config.settings' - _name = 'app.theme.config.settings' - - _description = u"App Odoo Customize settings" - app_system_name = fields.Char('System Name', help=u"Setup System Name,which replace Odoo") - app_show_lang = fields.Boolean('Show Quick Language Switcher', - help=u"When enable,User can quick switch language in user menu") - app_show_debug = fields.Boolean('Show Quick Debug', help=u"When enable,everyone login can see the debug menu") - app_show_documentation = fields.Boolean('Show Documentation', help=u"When enable,User can visit user manual") - app_show_documentation_dev = fields.Boolean('Show Developer Documentation', - help=u"When enable,User can visit development documentation") - app_show_support = fields.Boolean('Show Support', help=u"When enable,User can vist your support site") - app_show_account = fields.Boolean('Show My Account', help=u"When enable,User can login to your website") - app_show_enterprise = fields.Boolean('Show Enterprise Tag', help=u"Uncheck to hide the Enterprise tag") - app_show_share = fields.Boolean('Show Share Dashboard', help=u"Uncheck to hide the Odoo Share Dashboard") - app_show_poweredby = fields.Boolean('Show Powered by Odoo', help=u"Uncheck to hide the Powered by text") - app_stop_subscribe = fields.Boolean('Stop Odoo Subscribe(Performance Improve)', help=u"Check to stop Odoo Subscribe function") - - app_documentation_url = fields.Char('Documentation Url') - app_documentation_dev_url = fields.Char('Developer Documentation Url') - app_support_url = fields.Char('Support Url') - app_account_title = fields.Char('My Odoo.com Account Title') - app_account_url = fields.Char('My Odoo.com Account Url') - - @api.model - def get_default_all(self, fields): - ir_config = self.env['ir.config_parameter'] - app_system_name = ir_config.get_param('app_system_name', default='odooApp') - - app_show_lang = True if ir_config.get_param('app_show_lang') == "True" else False - app_show_debug = True if ir_config.get_param('app_show_debug') == "True" else False - app_show_documentation = True if ir_config.get_param('app_show_documentation') == "True" else False - app_show_documentation_dev = True if ir_config.get_param('app_show_documentation_dev') == "True" else False - app_show_support = True if ir_config.get_param('app_show_support') == "True" else False - app_show_account = True if ir_config.get_param('app_show_account') == "True" else False - app_show_enterprise = True if ir_config.get_param('app_show_enterprise') == "True" else False - app_show_share = True if ir_config.get_param('app_show_share') == "True" else False - app_show_poweredby = True if ir_config.get_param('app_show_poweredby') == "True" else False - app_stop_subscribe = True if ir_config.get_param('app_stop_subscribe') == "True" else False - - app_documentation_url = ir_config.get_param('app_documentation_url', - default='http://www.sunpop.cn/documentation/user/10.0/en/index.html') - app_documentation_dev_url = ir_config.get_param('app_documentation_dev_url', - default='http://www.sunpop.cn/documentation/10.0/index.html') - app_support_url = ir_config.get_param('app_support_url', default='http://www.sunpop.cn/trial/') - app_account_title = ir_config.get_param('app_account_title', default='My Online Account') - app_account_url = ir_config.get_param('app_account_url', default='http://www.sunpop.cn/my-account/') - return dict( - app_system_name=app_system_name, - app_show_lang=app_show_lang, - app_show_debug=app_show_debug, - app_show_documentation=app_show_documentation, - app_show_documentation_dev=app_show_documentation_dev, - app_show_support=app_show_support, - app_show_account=app_show_account, - app_show_enterprise=app_show_enterprise, - app_show_share=app_show_share, - app_show_poweredby=app_show_poweredby, - app_stop_subscribe=app_stop_subscribe, - - app_documentation_url=app_documentation_url, - app_documentation_dev_url=app_documentation_dev_url, - app_support_url=app_support_url, - app_account_title=app_account_title, - app_account_url=app_account_url - ) - - @api.multi - def set_default_all(self): - self.ensure_one() - ir_config = self.env['ir.config_parameter'] - ir_config.set_param("app_system_name", self.app_system_name or "") - ir_config.set_param("app_show_lang", self.app_show_lang or "False") - ir_config.set_param("app_show_debug", self.app_show_debug or "False") - ir_config.set_param("app_show_documentation", self.app_show_documentation or "False") - ir_config.set_param("app_show_documentation_dev", self.app_show_documentation_dev or "False") - ir_config.set_param("app_show_support", self.app_show_support or "False") - ir_config.set_param("app_show_account", self.app_show_account or "False") - ir_config.set_param("app_show_enterprise", self.app_show_enterprise or "False") - ir_config.set_param("app_show_share", self.app_show_share or "False") - ir_config.set_param("app_show_poweredby", self.app_show_poweredby or "False") - ir_config.set_param("app_stop_subscribe", self.app_stop_subscribe or "False") - - ir_config.set_param("app_documentation_url", - self.app_documentation_url or "http://www.sunpop.cn/documentation/user/10.0/en/index.html") - ir_config.set_param("app_documentation_dev_url", - self.app_documentation_dev_url or "http://www.sunpop.cn/documentation/10.0/index.html") - ir_config.set_param("app_support_url", self.app_support_url or "http://www.sunpop.cn/trial/") - ir_config.set_param("app_account_title", self.app_account_title or "My Online Account") - ir_config.set_param("app_account_url", self.app_account_url or "http://www.sunpop.cn/my-account/") - - return True - - @api.multi - def remove_sales(self): - to_removes = [ - # 清除销售单据 - ['sale.order.line', ], - ['sale.order', ], - ] - try: - for line in to_removes : - obj_name = line[0] - obj = self.pool.get(obj_name) - if obj and obj._table_exist: - sql = "delete from %s" % obj._table - self._cr.execute(sql) - # 更新序号 - seqs = self.env['ir.sequence'].search([('code', '=', 'sale.order')]) - for seq in seqs: - seq.write({ - 'number_next': 1, - }) - sql = "update ir_sequence set number_next=1 where code ='sale.order';" - self._cr.execute(sql) - except Exception, e: - raise Warning(e) - return True - - def remove_product(self): - to_removes = [ - # 清除产品数据 - ['product.product', ], - ['product.template', ], - ] - try: - for line in to_removes : - obj_name = line[0] - obj = self.pool.get(obj_name) - if obj and obj._table_exist: - sql = "delete from %s" % obj._table - self._cr.execute(sql) - # 更新序号,针对自动产品编号 - seqs = self.env['ir.sequence'].search([('code', '=', 'product.product')]) - for seq in seqs: - seq.write({ - 'number_next': 1, - }) - sql = "update ir_sequence set number_next=1 where code ='product.product';" - self._cr.execute(sql) - except Exception, e: - raise Warning(e) - return True - - def remove_product_attribute(self): - to_removes = [ - # 清除产品属性 - ['product.attribute.value', ], - ['product.attribute', ], - ] - try: - for line in to_removes : - obj_name = line[0] - obj = self.pool.get(obj_name) - if obj and obj._table_exist: - sql = "delete from %s" % obj._table - self._cr.execute(sql) - except Exception, e: - raise Warning(e) - return True - - @api.multi - def remove_pos(self): - to_removes = [ - # 清除POS单据 - ['pos.order.line', ], - ['pos.order', ], - ] - try: - for line in to_removes : - obj_name = line[0] - obj = self.pool.get(obj_name) - if obj and obj._table_exist: - sql = "delete from %s" % obj._table - self._cr.execute(sql) - # 更新序号 - seqs = self.env['ir.sequence'].search([('code', '=', 'pos.order')]) - for seq in seqs: - seq.write({ - 'number_next': 1, - }) - sql = "update ir_sequence set number_next=1 where code ='pos.order';" - self._cr.execute(sql) - except Exception, e: - raise Warning(e) - return True - - @api.multi - def remove_purchase(self): - to_removes = [ - # 清除采购单据 - ['purchase.order.line', ], - ['purchase.order', ], - ['purchase.requisition.line', ], - ['purchase.requisition', ], - ] - try: - for line in to_removes : - obj_name = line[0] - obj = self.pool.get(obj_name) - if obj and obj._table_exist: - sql = "delete from %s" % obj._table - self._cr.execute(sql) - # 更新序号 - seqs = self.env['ir.sequence'].search([('code', '=', 'purchase.order')]) - for seq in seqs: - seq.write({ - 'number_next': 1, - }) - sql = "update ir_sequence set number_next=1 where code ='purchase.order';" - self._cr.execute(sql) - except Exception, e: - raise Warning(e) - return True - - @api.multi - def remove_mrp(self): - to_removes = [ - # 清除生产单据 - ['mrp.workcenter.productivity', ], - ['mrp.workorder', ], - ['mrp.production.workcenter.line', ], - ['mrp.production', ], - ['mrp.production.product.line', ], - ['mrp.unbuild', ], - ['change.production.qty', ], - ] - try: - for line in to_removes : - obj_name = line[0] - obj = self.pool.get(obj_name) - if obj and obj._table_exist: - sql = "delete from %s" % obj._table - self._cr.execute(sql) - # 更新序号 - seqs = self.env['ir.sequence'].search(['|', ('code', '=', 'mrp.production'), ('code', '=', 'mrp.unbuild')]) - for seq in seqs: - seq.write({ - 'number_next': 1, - }) - sql = "update ir_sequence set number_next=1 where (code ='mrp.production' or code ='mrp.unbuild');" - self._cr.execute(sql) - except Exception, e: - raise Warning(e) - return True - - @api.multi - def remove_mrp_bom(self): - to_removes = [ - # 清除生产BOM - ['mrp.bom.line', ], - ['mrp.bom', ], - ] - try: - for line in to_removes : - obj_name = line[0] - obj = self.pool.get(obj_name) - if obj and obj._table_exist: - sql = "delete from %s" % obj._table - self._cr.execute(sql) - except Exception, e: - raise Warning(e) - return True - - @api.multi - def remove_inventory(self): - to_removes = [ - # 清除库存单据 - ['stock.quant', ], - ['stock.quant.package', ], - ['stock.quant.move.rel', ], - ['stock.move', ], - ['stock.pack.operation', ], - ['stock.picking', ], - ['stock.scrap', ], - ['stock.inventory.line', ], - ['stock.inventory', ], - ['stock.production.lot', ], - ['stock.fixed.putaway.strat', ], - ['make.procurement', ], - ['procurement.order', ], - ['procurement.group', ], - ] - try: - for line in to_removes : - obj_name = line[0] - obj = self.pool.get(obj_name) - if obj and obj._table_exist: - sql = "delete from %s" % obj._table - self._cr.execute(sql) - # 更新序号 - seqs = self.env['ir.sequence'].search([ - '|', ('code', '=', 'stock.lot.serial'), - '|', ('code', '=', 'stock.lot.tracking'), - '|', ('code', '=', 'stock.orderpoint'), - '|', ('code', '=', 'stock.picking'), - '|', ('code', '=', 'stock.quant.package'), - '|', ('code', '=', 'stock.scrap'), - '|', ('code', '=', 'stock.picking'), - '|', ('prefix', '=', 'WH/IN/'), - '|', ('prefix', '=', 'WH/INT/'), - '|', ('prefix', '=', 'WH/OUT/'), - '|', ('prefix', '=', 'WH/PACK/'), - ('prefix', '=', 'WH/PICK/') - ]) - - for seq in seqs: - seq.write({ - 'number_next': 1, - }) - sql = "update ir_sequence set number_next=1 where (" \ - "code ='stock.lot.serial' " \ - "or code ='stock.lot.tracking' " \ - "or code ='stock.orderpoint'" \ - "or code ='stock.picking'" \ - "or code ='stock.quant.package'" \ - "or code ='stock.scrap'" \ - "or code ='stock.picking'" \ - "or prefix ='WH/IN/'" \ - "or prefix ='WH/INT/'" \ - "or prefix ='WH/OUT/'" \ - "or prefix ='WH/PACK/'" \ - "or prefix ='WH/PICK/'" \ - ");" - self._cr.execute(sql) - except Exception, e: - raise Warning(e) - return True - - @api.multi - def remove_account(self): - to_removes = [ - # 清除财务会计单据 - ['account.voucher.line', ], - ['account.voucher', ], - ['account.bank.statement', ], - ['account.bank.statement.line', ], - ['account.payment', ], - ['account.analytic.line', ], - ['account.invoice.line', ], - ['account.invoice', ], - ['account.partial.reconcile', ], - ['account.move.line', ], - ['account.move', ], - ] - try: - for line in to_removes : - obj_name = line[0] - obj = self.pool.get(obj_name) - if obj and obj._table_exist: - sql = "delete from %s" % obj._table - self._cr.execute(sql) - - # 更新序号 - seqs = self.env['ir.sequence'].search([ - '|', ('code', '=', 'account.reconcile'), - '|', ('code', '=', 'account.payment.customer.invoice'), - '|', ('code', '=', 'account.payment.customer.refund'), - '|', ('code', '=', 'account.payment.supplier.invoice'), - '|', ('code', '=', 'account.payment.supplier.refund'), - '|', ('code', '=', 'account.payment.transfer'), - '|', ('prefix', 'like', 'BNK1/'), - '|', ('prefix', 'like', 'CSH1/'), - '|', ('prefix', 'like', 'INV/'), - '|', ('prefix', 'like', 'EXCH/'), - '|', ('prefix', 'like', 'MISC/'), - '|', ('prefix', 'like', u'账单/'), - ('prefix', 'like', u'杂项/') - ]) - - for seq in seqs: - seq.write({ - 'number_next': 1, - }) - # todo: 帐单 or BILL/% - sql = "update ir_sequence set number_next=1 where (" \ - "code ='account.reconcile' " \ - "or code ='account.payment.customer.invoice' " \ - "or code ='account.payment.customer.refund' " \ - "or code ='account.payment.supplier.invoice' " \ - "or code ='account.payment.supplier.refund' " \ - "or prefix like 'BNK1/%'" \ - "or prefix like 'CSH1/%'" \ - "or prefix like 'INV/%'" \ - "or prefix like 'EXCH/%'" \ - "or prefix like 'MISC/%'" \ - "or prefix like '账单/%'" \ - "or prefix like '杂项/%'" \ - ");" - self._cr.execute(sql) - except Exception, e: - raise Warning(e) - return True - - @api.multi - def remove_message(self): - to_removes = [ - # 清除消息数据 - ['mail.message', ], - ['mail.followers', ], - ] - try: - for line in to_removes : - obj_name = line[0] - obj = self.pool.get(obj_name) - if obj and obj._table_exist: - sql = "delete from %s" % obj._table - self._cr.execute(sql) - except Exception, e: - raise Warning(e) - return True - - @api.multi - def remove_workflow(self): - to_removes = [ - # 清除工作流 - ['wkf.workitem', ], - ['wkf.instance', ], - ] - try: - for line in to_removes : - obj_name = line[0] - obj = self.pool.get(obj_name) - if obj and obj._table_exist: - sql = "delete from %s" % obj._table - self._cr.execute(sql) - - except Exception, e: - raise Warning(e) - return True diff --git a/app_odoo_customize/models/base_language_install.py b/app_odoo_customize/models/base_language_install.py deleted file mode 100644 index 727dd549..00000000 --- a/app_odoo_customize/models/base_language_install.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Copyright 2017 Jarvis (www.odoomod.com) -# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html). - -from openerp import api, fields, models, _ - - -class BaseLanguageInstall(models.TransientModel): - _inherit = "base.language.install" - - @api.multi - def lang_install(self): - self.ensure_one() - self.env.cr.execute(""" - delete from ir_translation - where (name='ir.module.module,shortdesc' - or name='ir.module.module,description' - or name='ir.module.module,summary') - and lang=%s - """, (self.lang,)) - return super(BaseLanguageInstall, self).lang_install() diff --git a/app_odoo_customize/models/ir_ui_view.py b/app_odoo_customize/models/ir_ui_view.py deleted file mode 100644 index eca8ed13..00000000 --- a/app_odoo_customize/models/ir_ui_view.py +++ /dev/null @@ -1,18 +0,0 @@ -# -*- coding: utf-8 -*- - -import logging - -from openerp import api, fields, models, _ - -_logger = logging.getLogger(__name__) - -class View(models.Model): - _inherit = 'ir.ui.view' - - @api.model - def render_template(self, template, values=None, engine='ir.qweb'): - if template in ['web.login', 'web.webclient_bootstrap']: - if not values: - values = {} - values["title"] = self.env['ir.config_parameter'].get_param("app_system_name", "odooApp") - return super(View, self).render_template(template, values=values, engine=engine) \ No newline at end of file diff --git a/app_odoo_customize/models/mail_thread.py b/app_odoo_customize/models/mail_thread.py deleted file mode 100644 index ec59b6e6..00000000 --- a/app_odoo_customize/models/mail_thread.py +++ /dev/null @@ -1,39 +0,0 @@ -# -*- coding: utf-8 -*- -# Copyright 2017 Jarvis (www.odoomod.com) -# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html). - -from openerp import api, fields, models, _ - - -class MailThread(models.AbstractModel): - _inherit = "mail.thread" - - @api.multi - def message_subscribe(self, partner_ids=None, channel_ids=None, subtype_ids=None, force=True): - """ 停用订阅功能. """ - ir_config = self.env['ir.config_parameter'] - app_stop_subscribe = True if ir_config.get_param('app_stop_subscribe') == "True" else False - if app_stop_subscribe: - return - else: - return super(MailThread, self).message_subscribe(partner_ids, channel_ids, subtype_ids, force) - - @api.multi - def message_auto_subscribe(self, updated_fields, values=None): - """ 停用订阅功能. """ - ir_config = self.env['ir.config_parameter'] - app_stop_subscribe = True if ir_config.get_param('app_stop_subscribe') == "True" else False - if app_stop_subscribe: - return - else: - return super(MailThread, self).message_auto_subscribe(updated_fields, values) - - @api.multi - def _message_auto_subscribe_notify(self, partner_ids): - """ 停用订阅功能. """ - ir_config = self.env['ir.config_parameter'] - app_stop_subscribe = True if ir_config.get_param('app_stop_subscribe') == "True" else False - if app_stop_subscribe: - return - else: - return super(MailThread, self)._message_auto_subscribe_notify(partner_ids) \ No newline at end of file diff --git a/app_odoo_customize/readme.md b/app_odoo_customize/readme.md deleted file mode 100644 index dcde3067..00000000 --- a/app_odoo_customize/readme.md +++ /dev/null @@ -1,60 +0,0 @@ -##App Odoo Customize(Debranding Title,Language,Documentation,Quick Debug,Quick Data Clear) -============ -White label odoo. -You can config odoo, make it look like your own platform. -1. Deletes Odoo label in footer -2. Replaces "Odoo" in Windows title -3. Customize Documentation, Support, About links and title in usermenu -4. Adds "Developer mode" link to the top right-hand User Menu. -5. Adds Quick Language Switcher to the top right-hand User Menu. -6. Adds Country flags to the top right-hand User Menu. -7. Adds English and Chinese user documentation access to the top right-hand User Menu. -8. Adds developer documentation access to the top right-hand User Menu. -9. Customize "My odoo.com account" button -10. Standalone setting panel, easy to setup. -11. Provide 236 country flags. -12. Multi-language Support. -13. Change Powered by Odoo in login screen.(Please change '../views/app_odoo_customize_view.xml' #15) -14. Quick delete test data in Apps: Sales/POS/Purchase/MRP/Inventory/Accounting/Message/Workflow etc. -15. Reset All the Sequence to beginning of 1: SO/PO/MO/Invoice... -16. Fix odoo reload module translation bug while enable english language -17. Stop Odoo Auto Subscribe(Performance Improve) -This module can help to white label the Odoo. -Also helpful for training and support for your odoo end-user. -The user can get the help document just by one click. - -For more support -http://www.sunpop.cn - -## 在符合odoo开源协议的前提下,去除odoo版权信息,自定义你的odoo -可完全自行设置下列 odoo 选项,让 odoo 看上去像是你的软件产品 -1. 删除菜单导航页脚的 Odoo 标签 -2. 将弹出窗口中 "Odoo" 设置为自定义名称 -3. 自定义用户菜单中的 Documentation, Support, About 的链接 -4. 在用户菜单中增加快速切换开发模式 -5. 在用户菜单中增加快速切换多国语言 -6. 对语言菜单进行美化,设置国旗图标 -7. 在用户菜单中增加中/英文用户手册,可以不用翻墙加速了 -8. 在用户菜单中增加开发者手册,含python教程,jquery参考,Jinja2模板,PostgresSQL参考 -9. 在用户菜单中自定义"My odoo.com account" -10. 单独设置面板,每个选项都可以自定义 -11. 提供236个国家的国旗文件(部份需要自行设置文件名) -12. 多语言版本 -13. 自定义登陆界面中的 Powered by Odoo -14. 快速删除测试数据,支持模块包括:销售/POS门店/采购/生产/库存/会计/消息与工作流等. -15. 将各类单据的序号重置,从1开始,包括:SO/PO/MO/Invoice 等 -16. 修复odoo启用英文后模块不显示中文的Bug -17. 可停用odoo自动订阅功能,避免“同样对象关注2次”bug,同时提升性能 - -使用方法:将解压后的 app_odoo_customize 放到 odoo的 addons目录下,激活开发者模式,应用-->更新应用列表, -找到 "App odoo Customize"模块,安装即可。 - -## 其它技术资源: -#### odoo10-windows64位高性能最新绿色版下载及制作方法-提速50% -http://www.sunpop.cn/odoo10_fast_x64_download/ -#### Odoo10离线中文用户手册下载 -http://www.sunpop.cn/odoo10_user_manual_document_offline/ -#### Odoo10离线开发手册下载-含python教程,jquery参考,Jinja2模板,PostgresSQL参考(odoo开发必备) -http://www.sunpop.cn/odoo10_developer_document_offline/ - - diff --git a/app_odoo_customize/static/description/banner.png b/app_odoo_customize/static/description/banner.png deleted file mode 100644 index 6bd0fba1..00000000 Binary files a/app_odoo_customize/static/description/banner.png and /dev/null differ diff --git a/app_odoo_customize/static/description/cnreadme.png b/app_odoo_customize/static/description/cnreadme.png deleted file mode 100644 index d76676e0..00000000 Binary files a/app_odoo_customize/static/description/cnreadme.png and /dev/null differ diff --git a/app_odoo_customize/static/description/icon.png b/app_odoo_customize/static/description/icon.png deleted file mode 100644 index 4c57f611..00000000 Binary files a/app_odoo_customize/static/description/icon.png and /dev/null differ diff --git a/app_odoo_customize/static/description/index.html b/app_odoo_customize/static/description/index.html deleted file mode 100644 index 565c9e10..00000000 --- a/app_odoo_customize/static/description/index.html +++ /dev/null @@ -1,137 +0,0 @@ -
-
-
-

App Odoo Customize

-
-

This moduld allows user to quickly customize and debranding Odoo. Quick debug, Language Switcher, - Online Documentation Access,Quick Data Clear.

-

More Powerful UI addons: - App UI enhance -

-
-

Lastest update: v10.0.2.4, 2018-02-04

-
    -
  • 1. Deletes Odoo label in footer
  • -
  • 2. Replaces "Odoo" in Windows title
  • -
  • 3. Customize Documentation, Support, About links and title in usermenu
  • -
  • 4. Adds "Developer mode" link to the top right-hand User Menu.
  • -
  • 5. Adds Quick Language Switcher to the top right-hand User Menu.
  • -
  • 6. Adds Country flags to the top right-hand User Menu.
  • -
  • 7. Adds English and Chinese user documentation access to the top right-hand User Menu.
  • -
  • 8. Adds developer documentation access to the top right-hand User Menu.
  • -
  • 9. Customize "My odoo.com account" button
  • -
  • 10. Standalone setting panel, easy to setup.
  • -
  • 11. Provide 236 country flags.
  • -
  • 12. Multi-language Support.
  • -
  • 13. Change Powered by Odoo in login screen.(Please change '../views/app_odoo_customize_view.xml' #15)
  • -
  • 14. Quick delete test data in Apps: Sales/POS/Purchase/MRP/Inventory/Accounting/Base Models.
  • -
  • 15. Reset All the Sequence to beginning of 1: SO/PO/MO/Invoice...
  • -
  • 16. Fix odoo reload module translation bug while enable english language
  • -
  • 17. Stop Odoo Auto Subscribe(Performance Improve)
  • -
-

- This module can help to white label the Odoo. - Also helpful for training and support for your odoo end-user.
- The user can get the help document just by one click. -

-
- -
- -
-
-
-
- - -
-
-

Odoo Customize(Debranding Title,Language,Documentation,Quick Debug)

-
-
- -
- -
-
-
-

Multi-language support: Chinese ready

-
-
- -
- -
-
-
- -
-
-

How to use: Go to Settings -> odooApp Settings

-
-
- -
-
-
- -
-
-

Setup more flags: just rename the flag pic to locale code of the country

-

You can find the pictures in "\app-odoo\app_odoo_customize\static\src\img\flags"

-
-
- -
-
-
- -
-
-

Quick Delete test Data.

-

You can quickly delete all the test data in Apps: Sales/POS/Purchase/MRP/Inventory/Accounting/Message/Workflow etc.

-
-
- -
-
-
-
- -
-
-
-

Technical Help & Support

-
-
-
-

- For any type of technical help & support requests, Feel free to contact us

- - guohuadeng@hotmail.com -

- Via QQ: 300883

- - 300883@qq.com -
-
-

- Visit our website for more support.

- - http://www.sunpop.cn -
-
-
-
- diff --git a/app_odoo_customize/static/description/set1.png b/app_odoo_customize/static/description/set1.png deleted file mode 100644 index b68f7abe..00000000 Binary files a/app_odoo_customize/static/description/set1.png and /dev/null differ diff --git a/app_odoo_customize/static/description/set11.png b/app_odoo_customize/static/description/set11.png deleted file mode 100644 index 3f004c03..00000000 Binary files a/app_odoo_customize/static/description/set11.png and /dev/null differ diff --git a/app_odoo_customize/static/description/set12.png b/app_odoo_customize/static/description/set12.png deleted file mode 100644 index bda7ea1b..00000000 Binary files a/app_odoo_customize/static/description/set12.png and /dev/null differ diff --git a/app_odoo_customize/static/description/set2.png b/app_odoo_customize/static/description/set2.png deleted file mode 100644 index 896f33b1..00000000 Binary files a/app_odoo_customize/static/description/set2.png and /dev/null differ diff --git a/app_odoo_customize/static/description/set3.png b/app_odoo_customize/static/description/set3.png deleted file mode 100644 index 0c2edc58..00000000 Binary files a/app_odoo_customize/static/description/set3.png and /dev/null differ diff --git a/app_odoo_customize/static/src/css/app.css b/app_odoo_customize/static/src/css/app.css deleted file mode 100644 index bc4301a5..00000000 --- a/app_odoo_customize/static/src/css/app.css +++ /dev/null @@ -1,4 +0,0 @@ -.o_user_menu .dropdown-menu img { - height: 20px; - margin: 2px; -} \ No newline at end of file diff --git a/app_odoo_customize/static/src/img/flags/de_DE.png b/app_odoo_customize/static/src/img/flags/de_DE.png deleted file mode 100644 index 5bcb0b2b..00000000 Binary files a/app_odoo_customize/static/src/img/flags/de_DE.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/en_US.png b/app_odoo_customize/static/src/img/flags/en_US.png deleted file mode 100644 index 5c4f03e2..00000000 Binary files a/app_odoo_customize/static/src/img/flags/en_US.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/es_ES.png b/app_odoo_customize/static/src/img/flags/es_ES.png deleted file mode 100644 index 0c9580b0..00000000 Binary files a/app_odoo_customize/static/src/img/flags/es_ES.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/es_ES.png~HEAD b/app_odoo_customize/static/src/img/flags/es_ES.png~HEAD deleted file mode 100644 index 0c9580b0..00000000 Binary files a/app_odoo_customize/static/src/img/flags/es_ES.png~HEAD and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/es_ES.png~origin_10.0 b/app_odoo_customize/static/src/img/flags/es_ES.png~origin_10.0 deleted file mode 100644 index 0c9580b0..00000000 Binary files a/app_odoo_customize/static/src/img/flags/es_ES.png~origin_10.0 and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_afghanistan.png b/app_odoo_customize/static/src/img/flags/flag_afghanistan.png deleted file mode 100644 index e5ee97f1..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_afghanistan.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_albania.png b/app_odoo_customize/static/src/img/flags/flag_albania.png deleted file mode 100644 index 8aac6dce..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_albania.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_algeria.png b/app_odoo_customize/static/src/img/flags/flag_algeria.png deleted file mode 100644 index afaf8142..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_algeria.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_american_samoa.png b/app_odoo_customize/static/src/img/flags/flag_american_samoa.png deleted file mode 100644 index 49a77ce6..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_american_samoa.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_andorra.png b/app_odoo_customize/static/src/img/flags/flag_andorra.png deleted file mode 100644 index b1fb0225..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_andorra.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_angola.png b/app_odoo_customize/static/src/img/flags/flag_angola.png deleted file mode 100644 index d16b690f..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_angola.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_anguilla.png b/app_odoo_customize/static/src/img/flags/flag_anguilla.png deleted file mode 100644 index b63d5f43..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_anguilla.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_antigua_and_barbuda.png b/app_odoo_customize/static/src/img/flags/flag_antigua_and_barbuda.png deleted file mode 100644 index 1ed51774..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_antigua_and_barbuda.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_argentina.png b/app_odoo_customize/static/src/img/flags/flag_argentina.png deleted file mode 100644 index 3adecbad..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_argentina.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_armenia.png b/app_odoo_customize/static/src/img/flags/flag_armenia.png deleted file mode 100644 index e819b9b5..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_armenia.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_aruba.png b/app_odoo_customize/static/src/img/flags/flag_aruba.png deleted file mode 100644 index 35cd54d6..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_aruba.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_australia.png b/app_odoo_customize/static/src/img/flags/flag_australia.png deleted file mode 100644 index 8108cc37..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_australia.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_austria.png b/app_odoo_customize/static/src/img/flags/flag_austria.png deleted file mode 100644 index 0993dfa8..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_austria.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_azerbaijan.png b/app_odoo_customize/static/src/img/flags/flag_azerbaijan.png deleted file mode 100644 index e0d7c6a7..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_azerbaijan.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_bahamas.png b/app_odoo_customize/static/src/img/flags/flag_bahamas.png deleted file mode 100644 index 5b75d213..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_bahamas.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_bahrain.png b/app_odoo_customize/static/src/img/flags/flag_bahrain.png deleted file mode 100644 index 131c494a..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_bahrain.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_bangladesh.png b/app_odoo_customize/static/src/img/flags/flag_bangladesh.png deleted file mode 100644 index 14ccd4c7..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_bangladesh.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_barbados.png b/app_odoo_customize/static/src/img/flags/flag_barbados.png deleted file mode 100644 index 1923c7a5..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_barbados.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_belarus.png b/app_odoo_customize/static/src/img/flags/flag_belarus.png deleted file mode 100644 index 5d098126..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_belarus.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_belgium.png b/app_odoo_customize/static/src/img/flags/flag_belgium.png deleted file mode 100644 index d19bd942..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_belgium.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_belize.png b/app_odoo_customize/static/src/img/flags/flag_belize.png deleted file mode 100644 index e5c30ded..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_belize.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_benin.png b/app_odoo_customize/static/src/img/flags/flag_benin.png deleted file mode 100644 index 500fd032..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_benin.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_bermuda.png b/app_odoo_customize/static/src/img/flags/flag_bermuda.png deleted file mode 100644 index f44a1100..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_bermuda.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_bhutan.png b/app_odoo_customize/static/src/img/flags/flag_bhutan.png deleted file mode 100644 index 94c81a9e..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_bhutan.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_bolivia.png b/app_odoo_customize/static/src/img/flags/flag_bolivia.png deleted file mode 100644 index e44677a1..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_bolivia.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_bosnia_and_herzegovina.png b/app_odoo_customize/static/src/img/flags/flag_bosnia_and_herzegovina.png deleted file mode 100644 index d3595a50..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_bosnia_and_herzegovina.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_botswana.png b/app_odoo_customize/static/src/img/flags/flag_botswana.png deleted file mode 100644 index b458e964..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_botswana.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_brazil.png b/app_odoo_customize/static/src/img/flags/flag_brazil.png deleted file mode 100644 index 9b01d07d..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_brazil.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_british_indian_ocean_territory.png b/app_odoo_customize/static/src/img/flags/flag_british_indian_ocean_territory.png deleted file mode 100644 index 4ca19cfb..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_british_indian_ocean_territory.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_british_virgin_islands.png b/app_odoo_customize/static/src/img/flags/flag_british_virgin_islands.png deleted file mode 100644 index 5b88c96a..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_british_virgin_islands.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_brunei.png b/app_odoo_customize/static/src/img/flags/flag_brunei.png deleted file mode 100644 index 433a7465..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_brunei.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_bulgaria.png b/app_odoo_customize/static/src/img/flags/flag_bulgaria.png deleted file mode 100644 index 8716c7a0..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_bulgaria.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_burkina_faso.png b/app_odoo_customize/static/src/img/flags/flag_burkina_faso.png deleted file mode 100644 index 9d105b7e..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_burkina_faso.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_burma.png b/app_odoo_customize/static/src/img/flags/flag_burma.png deleted file mode 100644 index 31a5fc27..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_burma.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_burundi.png b/app_odoo_customize/static/src/img/flags/flag_burundi.png deleted file mode 100644 index 7a11bf80..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_burundi.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_cambodia.png b/app_odoo_customize/static/src/img/flags/flag_cambodia.png deleted file mode 100644 index 4b313803..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_cambodia.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_cameroon.png b/app_odoo_customize/static/src/img/flags/flag_cameroon.png deleted file mode 100644 index e5b98fd6..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_cameroon.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_canada.png b/app_odoo_customize/static/src/img/flags/flag_canada.png deleted file mode 100644 index 30e76b08..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_canada.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_cape_verde.png b/app_odoo_customize/static/src/img/flags/flag_cape_verde.png deleted file mode 100644 index a12b2618..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_cape_verde.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_cayman_islands.png b/app_odoo_customize/static/src/img/flags/flag_cayman_islands.png deleted file mode 100644 index 2751dd1c..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_cayman_islands.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_central_african_republic.png b/app_odoo_customize/static/src/img/flags/flag_central_african_republic.png deleted file mode 100644 index 5ce7df13..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_central_african_republic.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_chad.png b/app_odoo_customize/static/src/img/flags/flag_chad.png deleted file mode 100644 index 250ea6f4..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_chad.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_checkered.png b/app_odoo_customize/static/src/img/flags/flag_checkered.png deleted file mode 100644 index 128d5d78..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_checkered.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_chile.png b/app_odoo_customize/static/src/img/flags/flag_chile.png deleted file mode 100644 index 85d3a6c8..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_chile.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_colombia.png b/app_odoo_customize/static/src/img/flags/flag_colombia.png deleted file mode 100644 index 736d7618..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_colombia.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_comoros.png b/app_odoo_customize/static/src/img/flags/flag_comoros.png deleted file mode 100644 index c09c3927..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_comoros.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_congo_democratic_republic.png b/app_odoo_customize/static/src/img/flags/flag_congo_democratic_republic.png deleted file mode 100644 index 4091ed9a..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_congo_democratic_republic.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_congo_republic.png b/app_odoo_customize/static/src/img/flags/flag_congo_republic.png deleted file mode 100644 index 2f4795aa..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_congo_republic.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_cook_islands.png b/app_odoo_customize/static/src/img/flags/flag_cook_islands.png deleted file mode 100644 index f337d0c9..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_cook_islands.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_costa_rica.png b/app_odoo_customize/static/src/img/flags/flag_costa_rica.png deleted file mode 100644 index 361a65fe..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_costa_rica.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_cote_divoire.png b/app_odoo_customize/static/src/img/flags/flag_cote_divoire.png deleted file mode 100644 index 536abd6a..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_cote_divoire.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_croatia.png b/app_odoo_customize/static/src/img/flags/flag_croatia.png deleted file mode 100644 index 1471bf15..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_croatia.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_cuba.png b/app_odoo_customize/static/src/img/flags/flag_cuba.png deleted file mode 100644 index e5b23f52..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_cuba.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_cyprus.png b/app_odoo_customize/static/src/img/flags/flag_cyprus.png deleted file mode 100644 index 1d30fa97..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_cyprus.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_czech_republic.png b/app_odoo_customize/static/src/img/flags/flag_czech_republic.png deleted file mode 100644 index 6c5556a8..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_czech_republic.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_denmark.png b/app_odoo_customize/static/src/img/flags/flag_denmark.png deleted file mode 100644 index c9e4450b..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_denmark.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_djibouti.png b/app_odoo_customize/static/src/img/flags/flag_djibouti.png deleted file mode 100644 index db95c50b..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_djibouti.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_dominica.png b/app_odoo_customize/static/src/img/flags/flag_dominica.png deleted file mode 100644 index d2dc6374..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_dominica.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_dominican_republic.png b/app_odoo_customize/static/src/img/flags/flag_dominican_republic.png deleted file mode 100644 index 29970e73..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_dominican_republic.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_east_timor.png b/app_odoo_customize/static/src/img/flags/flag_east_timor.png deleted file mode 100644 index 1553f1e5..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_east_timor.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_ecuador.png b/app_odoo_customize/static/src/img/flags/flag_ecuador.png deleted file mode 100644 index 0273da66..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_ecuador.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_egypt.png b/app_odoo_customize/static/src/img/flags/flag_egypt.png deleted file mode 100644 index ebe257ad..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_egypt.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_el_salvador.png b/app_odoo_customize/static/src/img/flags/flag_el_salvador.png deleted file mode 100644 index 0c114b89..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_el_salvador.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_england.png b/app_odoo_customize/static/src/img/flags/flag_england.png deleted file mode 100644 index 41940377..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_england.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_equatorial_guinea.png b/app_odoo_customize/static/src/img/flags/flag_equatorial_guinea.png deleted file mode 100644 index 5bf6458b..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_equatorial_guinea.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_eritrea.png b/app_odoo_customize/static/src/img/flags/flag_eritrea.png deleted file mode 100644 index 6e7e770e..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_eritrea.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_estonia.png b/app_odoo_customize/static/src/img/flags/flag_estonia.png deleted file mode 100644 index 5ef87c07..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_estonia.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_ethiopia.png b/app_odoo_customize/static/src/img/flags/flag_ethiopia.png deleted file mode 100644 index 5330161f..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_ethiopia.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_eu.png b/app_odoo_customize/static/src/img/flags/flag_eu.png deleted file mode 100644 index 7b67730d..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_eu.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_faeroe_islands.png b/app_odoo_customize/static/src/img/flags/flag_faeroe_islands.png deleted file mode 100644 index 5d781a32..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_faeroe_islands.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_falkland_islands.png b/app_odoo_customize/static/src/img/flags/flag_falkland_islands.png deleted file mode 100644 index 788bee08..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_falkland_islands.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_fiji.png b/app_odoo_customize/static/src/img/flags/flag_fiji.png deleted file mode 100644 index ffc11731..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_fiji.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_finland.png b/app_odoo_customize/static/src/img/flags/flag_finland.png deleted file mode 100644 index 24f113ec..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_finland.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_french_polynesia.png b/app_odoo_customize/static/src/img/flags/flag_french_polynesia.png deleted file mode 100644 index 43b6698f..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_french_polynesia.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_gabon.png b/app_odoo_customize/static/src/img/flags/flag_gabon.png deleted file mode 100644 index bfdc1ea7..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_gabon.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_gambia.png b/app_odoo_customize/static/src/img/flags/flag_gambia.png deleted file mode 100644 index 62194b7d..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_gambia.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_generic.png b/app_odoo_customize/static/src/img/flags/flag_generic.png deleted file mode 100644 index c12b24df..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_generic.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_georgia.png b/app_odoo_customize/static/src/img/flags/flag_georgia.png deleted file mode 100644 index 09dae1d4..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_georgia.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_ghana.png b/app_odoo_customize/static/src/img/flags/flag_ghana.png deleted file mode 100644 index e985e9ce..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_ghana.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_gibraltar.png b/app_odoo_customize/static/src/img/flags/flag_gibraltar.png deleted file mode 100644 index 731a99a2..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_gibraltar.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_greece.png b/app_odoo_customize/static/src/img/flags/flag_greece.png deleted file mode 100644 index 7d5f7019..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_greece.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_greenland.png b/app_odoo_customize/static/src/img/flags/flag_greenland.png deleted file mode 100644 index 94ccb785..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_greenland.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_grenada.png b/app_odoo_customize/static/src/img/flags/flag_grenada.png deleted file mode 100644 index 6555c1b7..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_grenada.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_guam.png b/app_odoo_customize/static/src/img/flags/flag_guam.png deleted file mode 100644 index 271cd8cc..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_guam.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_guatemala.png b/app_odoo_customize/static/src/img/flags/flag_guatemala.png deleted file mode 100644 index 139e648b..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_guatemala.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_guernsey.png b/app_odoo_customize/static/src/img/flags/flag_guernsey.png deleted file mode 100644 index e45ae1d8..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_guernsey.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_guinea.png b/app_odoo_customize/static/src/img/flags/flag_guinea.png deleted file mode 100644 index 99839874..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_guinea.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_guinea_bissau.png b/app_odoo_customize/static/src/img/flags/flag_guinea_bissau.png deleted file mode 100644 index 9d743983..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_guinea_bissau.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_guyana.png b/app_odoo_customize/static/src/img/flags/flag_guyana.png deleted file mode 100644 index 0d9bb963..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_guyana.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_haiti.png b/app_odoo_customize/static/src/img/flags/flag_haiti.png deleted file mode 100644 index 4b4eb300..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_haiti.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_honduras.png b/app_odoo_customize/static/src/img/flags/flag_honduras.png deleted file mode 100644 index 62b85fa7..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_honduras.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_hong_kong.png b/app_odoo_customize/static/src/img/flags/flag_hong_kong.png deleted file mode 100644 index 8426e7cc..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_hong_kong.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_hungary.png b/app_odoo_customize/static/src/img/flags/flag_hungary.png deleted file mode 100644 index d903f3dc..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_hungary.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_iceland.png b/app_odoo_customize/static/src/img/flags/flag_iceland.png deleted file mode 100644 index 2fc4f7ab..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_iceland.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_india.png b/app_odoo_customize/static/src/img/flags/flag_india.png deleted file mode 100644 index ceb9971c..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_india.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_indonesia.png b/app_odoo_customize/static/src/img/flags/flag_indonesia.png deleted file mode 100644 index aff745b5..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_indonesia.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_iran.png b/app_odoo_customize/static/src/img/flags/flag_iran.png deleted file mode 100644 index cc6acabe..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_iran.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_iraq.png b/app_odoo_customize/static/src/img/flags/flag_iraq.png deleted file mode 100644 index 570f8994..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_iraq.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_ireland.png b/app_odoo_customize/static/src/img/flags/flag_ireland.png deleted file mode 100644 index 75c91bed..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_ireland.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_isle_of_man.png b/app_odoo_customize/static/src/img/flags/flag_isle_of_man.png deleted file mode 100644 index 1f761fee..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_isle_of_man.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_israel.png b/app_odoo_customize/static/src/img/flags/flag_israel.png deleted file mode 100644 index b05ebc26..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_israel.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_italy.png b/app_odoo_customize/static/src/img/flags/flag_italy.png deleted file mode 100644 index f6aa615e..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_italy.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_jamaica.png b/app_odoo_customize/static/src/img/flags/flag_jamaica.png deleted file mode 100644 index 3a422e62..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_jamaica.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_japan.png b/app_odoo_customize/static/src/img/flags/flag_japan.png deleted file mode 100644 index 066ab4d8..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_japan.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_jersey.png b/app_odoo_customize/static/src/img/flags/flag_jersey.png deleted file mode 100644 index 03f648fb..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_jersey.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_jordan.png b/app_odoo_customize/static/src/img/flags/flag_jordan.png deleted file mode 100644 index 6d680054..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_jordan.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_kazakhstan.png b/app_odoo_customize/static/src/img/flags/flag_kazakhstan.png deleted file mode 100644 index e1562a65..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_kazakhstan.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_kenya.png b/app_odoo_customize/static/src/img/flags/flag_kenya.png deleted file mode 100644 index 14a202cf..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_kenya.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_kiribati.png b/app_odoo_customize/static/src/img/flags/flag_kiribati.png deleted file mode 100644 index f5b08a25..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_kiribati.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_kuwait.png b/app_odoo_customize/static/src/img/flags/flag_kuwait.png deleted file mode 100644 index 82357429..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_kuwait.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_kyrgyzstan.png b/app_odoo_customize/static/src/img/flags/flag_kyrgyzstan.png deleted file mode 100644 index b4974f47..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_kyrgyzstan.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_laos.png b/app_odoo_customize/static/src/img/flags/flag_laos.png deleted file mode 100644 index 665aa7d8..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_laos.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_latvia.png b/app_odoo_customize/static/src/img/flags/flag_latvia.png deleted file mode 100644 index b466aa7f..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_latvia.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_lebanon.png b/app_odoo_customize/static/src/img/flags/flag_lebanon.png deleted file mode 100644 index 6e170b1d..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_lebanon.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_lesotho.png b/app_odoo_customize/static/src/img/flags/flag_lesotho.png deleted file mode 100644 index f6ee22d8..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_lesotho.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_liberia.png b/app_odoo_customize/static/src/img/flags/flag_liberia.png deleted file mode 100644 index d4c10fc4..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_liberia.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_libya.png b/app_odoo_customize/static/src/img/flags/flag_libya.png deleted file mode 100644 index 14f9a3a3..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_libya.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_liechtenstein.png b/app_odoo_customize/static/src/img/flags/flag_liechtenstein.png deleted file mode 100644 index a2f5fc0b..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_liechtenstein.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_lithuania.png b/app_odoo_customize/static/src/img/flags/flag_lithuania.png deleted file mode 100644 index 709383fc..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_lithuania.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_luxembourg.png b/app_odoo_customize/static/src/img/flags/flag_luxembourg.png deleted file mode 100644 index dc4814f8..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_luxembourg.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_macau.png b/app_odoo_customize/static/src/img/flags/flag_macau.png deleted file mode 100644 index cf60bb75..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_macau.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_macedonia.png b/app_odoo_customize/static/src/img/flags/flag_macedonia.png deleted file mode 100644 index 2d9a8ae7..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_macedonia.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_madagascar.png b/app_odoo_customize/static/src/img/flags/flag_madagascar.png deleted file mode 100644 index 2e84d6ee..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_madagascar.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_malawi.png b/app_odoo_customize/static/src/img/flags/flag_malawi.png deleted file mode 100644 index a17c4519..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_malawi.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_malaysia.png b/app_odoo_customize/static/src/img/flags/flag_malaysia.png deleted file mode 100644 index 1eeb7be3..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_malaysia.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_maldives.png b/app_odoo_customize/static/src/img/flags/flag_maldives.png deleted file mode 100644 index d9d72e23..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_maldives.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_mali.png b/app_odoo_customize/static/src/img/flags/flag_mali.png deleted file mode 100644 index cae153fe..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_mali.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_malta.png b/app_odoo_customize/static/src/img/flags/flag_malta.png deleted file mode 100644 index 736aa4ca..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_malta.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_marshall_islands.png b/app_odoo_customize/static/src/img/flags/flag_marshall_islands.png deleted file mode 100644 index 082eb763..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_marshall_islands.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_martinique.png b/app_odoo_customize/static/src/img/flags/flag_martinique.png deleted file mode 100644 index a20c9b38..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_martinique.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_mauritania.png b/app_odoo_customize/static/src/img/flags/flag_mauritania.png deleted file mode 100644 index 03db77f7..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_mauritania.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_mauritius.png b/app_odoo_customize/static/src/img/flags/flag_mauritius.png deleted file mode 100644 index 5336f591..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_mauritius.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_mexico.png b/app_odoo_customize/static/src/img/flags/flag_mexico.png deleted file mode 100644 index 539739fe..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_mexico.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_micronesia.png b/app_odoo_customize/static/src/img/flags/flag_micronesia.png deleted file mode 100644 index dfda47ee..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_micronesia.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_moldova.png b/app_odoo_customize/static/src/img/flags/flag_moldova.png deleted file mode 100644 index e7ee75db..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_moldova.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_monaco.png b/app_odoo_customize/static/src/img/flags/flag_monaco.png deleted file mode 100644 index b51dc7f6..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_monaco.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_mongolia.png b/app_odoo_customize/static/src/img/flags/flag_mongolia.png deleted file mode 100644 index 825a0c29..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_mongolia.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_montenegro.png b/app_odoo_customize/static/src/img/flags/flag_montenegro.png deleted file mode 100644 index 8d1ad79b..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_montenegro.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_montserrat.png b/app_odoo_customize/static/src/img/flags/flag_montserrat.png deleted file mode 100644 index 53b21152..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_montserrat.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_morocco.png b/app_odoo_customize/static/src/img/flags/flag_morocco.png deleted file mode 100644 index 193f0cd2..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_morocco.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_mozambique.png b/app_odoo_customize/static/src/img/flags/flag_mozambique.png deleted file mode 100644 index e8051d3c..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_mozambique.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_namibia.png b/app_odoo_customize/static/src/img/flags/flag_namibia.png deleted file mode 100644 index ebaa9ce1..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_namibia.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_nauru.png b/app_odoo_customize/static/src/img/flags/flag_nauru.png deleted file mode 100644 index c8cbecc4..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_nauru.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_nepal.png b/app_odoo_customize/static/src/img/flags/flag_nepal.png deleted file mode 100644 index c43e96da..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_nepal.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_netherlands.png b/app_odoo_customize/static/src/img/flags/flag_netherlands.png deleted file mode 100644 index e566685f..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_netherlands.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_netherlands_antilles.png b/app_odoo_customize/static/src/img/flags/flag_netherlands_antilles.png deleted file mode 100644 index c1fbf588..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_netherlands_antilles.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_new_zealand.png b/app_odoo_customize/static/src/img/flags/flag_new_zealand.png deleted file mode 100644 index 2ed6512e..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_new_zealand.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_nicaragua.png b/app_odoo_customize/static/src/img/flags/flag_nicaragua.png deleted file mode 100644 index e48abf3b..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_nicaragua.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_niger.png b/app_odoo_customize/static/src/img/flags/flag_niger.png deleted file mode 100644 index a54b1d8b..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_niger.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_nigeria.png b/app_odoo_customize/static/src/img/flags/flag_nigeria.png deleted file mode 100644 index afdc0fbd..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_nigeria.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_niue.png b/app_odoo_customize/static/src/img/flags/flag_niue.png deleted file mode 100644 index ec9fa49a..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_niue.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_norfolk_island.png b/app_odoo_customize/static/src/img/flags/flag_norfolk_island.png deleted file mode 100644 index 7dcad5b0..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_norfolk_island.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_north_korea.png b/app_odoo_customize/static/src/img/flags/flag_north_korea.png deleted file mode 100644 index 4df5f0a4..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_north_korea.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_northern_mariana_islands.png b/app_odoo_customize/static/src/img/flags/flag_northern_mariana_islands.png deleted file mode 100644 index 3da7c7c0..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_northern_mariana_islands.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_norway.png b/app_odoo_customize/static/src/img/flags/flag_norway.png deleted file mode 100644 index f1e64f75..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_norway.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_oman.png b/app_odoo_customize/static/src/img/flags/flag_oman.png deleted file mode 100644 index a50864e3..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_oman.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_pakistan.png b/app_odoo_customize/static/src/img/flags/flag_pakistan.png deleted file mode 100644 index e4633af1..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_pakistan.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_palau.png b/app_odoo_customize/static/src/img/flags/flag_palau.png deleted file mode 100644 index 2425cbf4..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_palau.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_panama.png b/app_odoo_customize/static/src/img/flags/flag_panama.png deleted file mode 100644 index 1fdbc11f..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_panama.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_papua_new_guinea.png b/app_odoo_customize/static/src/img/flags/flag_papua_new_guinea.png deleted file mode 100644 index cc0455c7..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_papua_new_guinea.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_paraguay.png b/app_odoo_customize/static/src/img/flags/flag_paraguay.png deleted file mode 100644 index e3b76cee..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_paraguay.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_peru.png b/app_odoo_customize/static/src/img/flags/flag_peru.png deleted file mode 100644 index a40226fd..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_peru.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_philippines.png b/app_odoo_customize/static/src/img/flags/flag_philippines.png deleted file mode 100644 index d847f8c1..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_philippines.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_pirate.png b/app_odoo_customize/static/src/img/flags/flag_pirate.png deleted file mode 100644 index bc493602..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_pirate.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_pitcairn_islands.png b/app_odoo_customize/static/src/img/flags/flag_pitcairn_islands.png deleted file mode 100644 index f2b9b5e2..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_pitcairn_islands.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_poland.png b/app_odoo_customize/static/src/img/flags/flag_poland.png deleted file mode 100644 index 9fb2f6aa..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_poland.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_portugal.png b/app_odoo_customize/static/src/img/flags/flag_portugal.png deleted file mode 100644 index c3de0b19..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_portugal.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_puerto_rico.png b/app_odoo_customize/static/src/img/flags/flag_puerto_rico.png deleted file mode 100644 index 3c995992..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_puerto_rico.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_qatar.png b/app_odoo_customize/static/src/img/flags/flag_qatar.png deleted file mode 100644 index 902fc4d5..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_qatar.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_rainbow.png b/app_odoo_customize/static/src/img/flags/flag_rainbow.png deleted file mode 100644 index 78fc721c..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_rainbow.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_romania.png b/app_odoo_customize/static/src/img/flags/flag_romania.png deleted file mode 100644 index 4e7f9f13..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_romania.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_rwanda.png b/app_odoo_customize/static/src/img/flags/flag_rwanda.png deleted file mode 100644 index 444c8c79..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_rwanda.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_saint_helena.png b/app_odoo_customize/static/src/img/flags/flag_saint_helena.png deleted file mode 100644 index 82a3b598..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_saint_helena.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_saint_kitts_and_nevis.png b/app_odoo_customize/static/src/img/flags/flag_saint_kitts_and_nevis.png deleted file mode 100644 index 796827d5..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_saint_kitts_and_nevis.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_saint_lucia.png b/app_odoo_customize/static/src/img/flags/flag_saint_lucia.png deleted file mode 100644 index d3a719dc..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_saint_lucia.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_saint_pierre_and_miquelon.png b/app_odoo_customize/static/src/img/flags/flag_saint_pierre_and_miquelon.png deleted file mode 100644 index ef0df15c..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_saint_pierre_and_miquelon.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_saint_vincent_and_the_grenadines.png b/app_odoo_customize/static/src/img/flags/flag_saint_vincent_and_the_grenadines.png deleted file mode 100644 index 15f36674..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_saint_vincent_and_the_grenadines.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_samoa.png b/app_odoo_customize/static/src/img/flags/flag_samoa.png deleted file mode 100644 index 209897e4..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_samoa.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_san_marino.png b/app_odoo_customize/static/src/img/flags/flag_san_marino.png deleted file mode 100644 index a1222635..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_san_marino.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_sao_tome_and_principe.png b/app_odoo_customize/static/src/img/flags/flag_sao_tome_and_principe.png deleted file mode 100644 index 40534684..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_sao_tome_and_principe.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_saudi_arabia.png b/app_odoo_customize/static/src/img/flags/flag_saudi_arabia.png deleted file mode 100644 index 20061b91..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_saudi_arabia.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_scotland.png b/app_odoo_customize/static/src/img/flags/flag_scotland.png deleted file mode 100644 index bb01bc94..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_scotland.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_senegal.png b/app_odoo_customize/static/src/img/flags/flag_senegal.png deleted file mode 100644 index 1047e9be..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_senegal.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_serbia.png b/app_odoo_customize/static/src/img/flags/flag_serbia.png deleted file mode 100644 index 255e428b..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_serbia.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_seychelles.png b/app_odoo_customize/static/src/img/flags/flag_seychelles.png deleted file mode 100644 index e1a139fe..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_seychelles.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_sierra_leone.png b/app_odoo_customize/static/src/img/flags/flag_sierra_leone.png deleted file mode 100644 index a223c5df..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_sierra_leone.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_singapore.png b/app_odoo_customize/static/src/img/flags/flag_singapore.png deleted file mode 100644 index a4a4a812..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_singapore.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_slovakia.png b/app_odoo_customize/static/src/img/flags/flag_slovakia.png deleted file mode 100644 index e7c39150..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_slovakia.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_slovenia.png b/app_odoo_customize/static/src/img/flags/flag_slovenia.png deleted file mode 100644 index 85385895..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_slovenia.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_solomon_islands.png b/app_odoo_customize/static/src/img/flags/flag_solomon_islands.png deleted file mode 100644 index fcd10c18..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_solomon_islands.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_somalia.png b/app_odoo_customize/static/src/img/flags/flag_somalia.png deleted file mode 100644 index 2f856d2e..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_somalia.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_south_africa.png b/app_odoo_customize/static/src/img/flags/flag_south_africa.png deleted file mode 100644 index 617fe9f4..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_south_africa.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_south_georgia.png b/app_odoo_customize/static/src/img/flags/flag_south_georgia.png deleted file mode 100644 index d4705488..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_south_georgia.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_south_korea.png b/app_odoo_customize/static/src/img/flags/flag_south_korea.png deleted file mode 100644 index b0b21dfa..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_south_korea.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_spain.png b/app_odoo_customize/static/src/img/flags/flag_spain.png deleted file mode 100644 index 0c9580b0..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_spain.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_sri_lanka.png b/app_odoo_customize/static/src/img/flags/flag_sri_lanka.png deleted file mode 100644 index 3fbe5791..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_sri_lanka.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_sudan.png b/app_odoo_customize/static/src/img/flags/flag_sudan.png deleted file mode 100644 index f607390b..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_sudan.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_suriname.png b/app_odoo_customize/static/src/img/flags/flag_suriname.png deleted file mode 100644 index d12cae84..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_suriname.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_swaziland.png b/app_odoo_customize/static/src/img/flags/flag_swaziland.png deleted file mode 100644 index 27fdf138..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_swaziland.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_sweden.png b/app_odoo_customize/static/src/img/flags/flag_sweden.png deleted file mode 100644 index 870be17a..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_sweden.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_switzerland.png b/app_odoo_customize/static/src/img/flags/flag_switzerland.png deleted file mode 100644 index e487a0e5..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_switzerland.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_syria.png b/app_odoo_customize/static/src/img/flags/flag_syria.png deleted file mode 100644 index b7f684e0..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_syria.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_tajikistan.png b/app_odoo_customize/static/src/img/flags/flag_tajikistan.png deleted file mode 100644 index 4c66da33..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_tajikistan.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_tanzania.png b/app_odoo_customize/static/src/img/flags/flag_tanzania.png deleted file mode 100644 index f2ee2ea2..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_tanzania.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_thailand.png b/app_odoo_customize/static/src/img/flags/flag_thailand.png deleted file mode 100644 index 445da6ab..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_thailand.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_togo.png b/app_odoo_customize/static/src/img/flags/flag_togo.png deleted file mode 100644 index 28a696ee..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_togo.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_tonga.png b/app_odoo_customize/static/src/img/flags/flag_tonga.png deleted file mode 100644 index bb9e9afb..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_tonga.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_trinidad_and_tobago.png b/app_odoo_customize/static/src/img/flags/flag_trinidad_and_tobago.png deleted file mode 100644 index 25226659..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_trinidad_and_tobago.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_tunisia.png b/app_odoo_customize/static/src/img/flags/flag_tunisia.png deleted file mode 100644 index 13bb8782..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_tunisia.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_turkey.png b/app_odoo_customize/static/src/img/flags/flag_turkey.png deleted file mode 100644 index 4e27f6a2..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_turkey.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_turkmenistan.png b/app_odoo_customize/static/src/img/flags/flag_turkmenistan.png deleted file mode 100644 index 981a9308..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_turkmenistan.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_turks_and_caicos_islands.png b/app_odoo_customize/static/src/img/flags/flag_turks_and_caicos_islands.png deleted file mode 100644 index 8efd241c..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_turks_and_caicos_islands.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_tuvalu.png b/app_odoo_customize/static/src/img/flags/flag_tuvalu.png deleted file mode 100644 index 6c38b44a..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_tuvalu.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_uganda.png b/app_odoo_customize/static/src/img/flags/flag_uganda.png deleted file mode 100644 index 52ee97d8..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_uganda.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_ukraine.png b/app_odoo_customize/static/src/img/flags/flag_ukraine.png deleted file mode 100644 index 4eac918d..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_ukraine.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_united_arab_emirates.png b/app_odoo_customize/static/src/img/flags/flag_united_arab_emirates.png deleted file mode 100644 index 460a9d5c..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_united_arab_emirates.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_united_kingdom.png b/app_odoo_customize/static/src/img/flags/flag_united_kingdom.png deleted file mode 100644 index 18d5ff99..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_united_kingdom.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_uruguay.png b/app_odoo_customize/static/src/img/flags/flag_uruguay.png deleted file mode 100644 index fa065560..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_uruguay.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_uzbekistan.png b/app_odoo_customize/static/src/img/flags/flag_uzbekistan.png deleted file mode 100644 index 8df3de42..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_uzbekistan.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_vanuatu.png b/app_odoo_customize/static/src/img/flags/flag_vanuatu.png deleted file mode 100644 index 697f6212..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_vanuatu.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_vatican_city.png b/app_odoo_customize/static/src/img/flags/flag_vatican_city.png deleted file mode 100644 index ffb303b5..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_vatican_city.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_venezuela.png b/app_odoo_customize/static/src/img/flags/flag_venezuela.png deleted file mode 100644 index facca467..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_venezuela.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_vietnam.png b/app_odoo_customize/static/src/img/flags/flag_vietnam.png deleted file mode 100644 index 4e89f65d..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_vietnam.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_virgin_islands.png b/app_odoo_customize/static/src/img/flags/flag_virgin_islands.png deleted file mode 100644 index ce23e137..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_virgin_islands.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_wales.png b/app_odoo_customize/static/src/img/flags/flag_wales.png deleted file mode 100644 index 4e30af59..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_wales.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_wallis_and_futuna.png b/app_odoo_customize/static/src/img/flags/flag_wallis_and_futuna.png deleted file mode 100644 index d97fc3f9..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_wallis_and_futuna.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_white.png b/app_odoo_customize/static/src/img/flags/flag_white.png deleted file mode 100644 index 0efc9ee7..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_white.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_yemen.png b/app_odoo_customize/static/src/img/flags/flag_yemen.png deleted file mode 100644 index e9dea302..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_yemen.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_zambia.png b/app_odoo_customize/static/src/img/flags/flag_zambia.png deleted file mode 100644 index 96d06e4d..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_zambia.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/flag_zimbabwe.png b/app_odoo_customize/static/src/img/flags/flag_zimbabwe.png deleted file mode 100644 index 7501780d..00000000 Binary files a/app_odoo_customize/static/src/img/flags/flag_zimbabwe.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/fr_FR.png b/app_odoo_customize/static/src/img/flags/fr_FR.png deleted file mode 100644 index ae26d3b9..00000000 Binary files a/app_odoo_customize/static/src/img/flags/fr_FR.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/ru_RU.png b/app_odoo_customize/static/src/img/flags/ru_RU.png deleted file mode 100644 index c251d628..00000000 Binary files a/app_odoo_customize/static/src/img/flags/ru_RU.png and /dev/null differ diff --git a/app_odoo_customize/static/src/img/flags/zh_CN.png b/app_odoo_customize/static/src/img/flags/zh_CN.png deleted file mode 100644 index d969efa0..00000000 Binary files a/app_odoo_customize/static/src/img/flags/zh_CN.png and /dev/null differ diff --git a/app_odoo_customize/static/src/js/app_window_title.js b/app_odoo_customize/static/src/js/app_window_title.js deleted file mode 100644 index b7c368af..00000000 --- a/app_odoo_customize/static/src/js/app_window_title.js +++ /dev/null @@ -1,12 +0,0 @@ -odoo.define('app_system_name', function (require) { -"use strict"; - -var WebClient = require('web.WebClient'); -WebClient.include({ - init: function() { - this._super.apply(this, arguments); - this.set('title_part', {"zopenerp": document.title}); - } -}); - -}); \ No newline at end of file diff --git a/app_odoo_customize/static/src/js/customize_user_menu.js b/app_odoo_customize/static/src/js/customize_user_menu.js deleted file mode 100644 index 8891bf7e..00000000 --- a/app_odoo_customize/static/src/js/customize_user_menu.js +++ /dev/null @@ -1,117 +0,0 @@ -odoo.define('app_odoo_customize.customize_user_menu', function (require) { - "use strict"; - var Model = require('web.Model'); - var session = require('web.session'); - - var UserMenu = require('web.UserMenu'); - var documentation_url; - var documentation_dev_url; - var support_url; - var account_title; - var account_url; - UserMenu.include({ - on_menu_debug: function () { - window.location = $.param.querystring(window.location.href, 'debug'); - }, - on_menu_debugassets: function () { - window.location = $.param.querystring(window.location.href, 'debug=assets'); - }, - on_menu_quitdebug: function () { - window.location.search = "?"; - }, - on_menu_documentation: function () { - window.open(documentation_url, '_blank'); - }, - on_menu_documentation_dev: function () { - window.open(documentation_dev_url, '_blank'); - }, - on_menu_support: function () { - window.open(support_url, '_blank'); - }, - on_menu_account: function () { - window.open(account_url, '_blank'); - }, - }); - - $(document).ready(function () { - var self = this; - documentation_url = 'http://www.sunpop.cn/documentation/user/10.0/zh_CN/index.html'; - documentation_dev_url = 'http://www.sunpop.cn/documentation/10.0/index.html'; - support_url = 'http://www.sunpop.cn/trial'; - account_title = 'My Online Account'; - account_url = 'http://www.sunpop.cn/my-account'; - setTimeout(function () { - new Model('ir.config_parameter').call('search_read', [[['key', '=', 'app_show_debug']], ['value']]).then(function (show) { - if (show.length >= 1 && (show[0]['value'] == "False")) { - $('[data-menu="debug"]').parent().hide(); - $('[data-menu="debugassets"]').parent().hide(); - $('[data-menu="quitdebug"]').parent().hide(); - } - }); - new Model('ir.config_parameter').call('search_read', [[['key', '=', 'app_show_documentation']], ['value']]).then(function (show) { - if (show.length >= 1 && (show[0]['value'] == "False")) - $('[data-menu="documentation"]').parent().hide(); - else { - new Model('ir.config_parameter').call('search_read', [[['key', '=', 'app_documentation_url']], ['value']]).then(function (res) { - if (res.length >= 1) { - _.each(res, function (item) { - documentation_url = item['value']; - }); - } - }); - } - }); - new Model('ir.config_parameter').call('search_read', [[['key', '=', 'app_show_documentation_dev']], ['value']]).then(function (show) { - if (show.length >= 1 && (show[0]['value'] == "False")) - $('[data-menu="documentation_dev"]').parent().hide(); - else { - new Model('ir.config_parameter').call('search_read', [[['key', '=', 'app_documentation_dev_url']], ['value']]).then(function (res) { - if (res.length >= 1) { - _.each(res, function (item) { - documentation_dev_url = item['value']; - }); - } - }); - } - }); - new Model('ir.config_parameter').call('search_read', [[['key', '=', 'app_show_support']], ['value']]).then(function (show) { - if (show.length >= 1 && (show[0]['value'] == "False")) - $('[data-menu="support"]').parent().hide(); - else { - new Model('ir.config_parameter').call('search_read', [[['key', '=', 'app_support_url']], ['value']]).then(function (res) { - if (res.length >= 1) { - _.each(res, function (item) { - support_url = item['value']; - }); - } - }); - } - }); - new Model('ir.config_parameter').call('search_read', [[['key', '=', 'app_show_account']], ['value']]).then(function (show) { - if (show.length >= 1 && (show[0]['value'] == "False")) - $('[data-menu="account"]').parent().hide(); - else { - new Model('ir.config_parameter').call('search_read', [[['key', '=', 'app_account_title']], ['value']]).then(function (res) { - if (res.length >= 1) { - _.each(res, function (item) { - account_title = item['value']; - }); - } - $('[data-menu="account"]').html(account_title); - }); - } - }); - new Model('ir.config_parameter').call('search_read', [[['key', '=', 'app_account_url']], ['value']]).then(function (res) { - if (res.length >= 1) { - _.each(res, function (item) { - account_url = item['value']; - }); - } - }); - new Model('ir.config_parameter').call('search_read', [[['key', '=', 'app_show_poweredby']], ['value']]).then(function (show) { - if (show.length >= 1 && (show[0]['value'] == "False")) - $('.o_sub_menu_footer').hide(); - }); - }, 2500); - }); -}) diff --git a/app_odoo_customize/static/src/js/switch_language.js b/app_odoo_customize/static/src/js/switch_language.js deleted file mode 100644 index 2910319f..00000000 --- a/app_odoo_customize/static/src/js/switch_language.js +++ /dev/null @@ -1,49 +0,0 @@ -odoo.define('app_odoo_customize.switch_language', function (require) { - "use strict"; - - var Model = require('web.Model'); - var session = require('web.session'); - var UserMenu = require('web.UserMenu'); - - UserMenu.include({ - on_menu_lang: function (ev) { - var self = this; - var lang = ($(ev).data("lang-id")); - new Model('res.users').call('write', [[session.uid], {'lang': lang}]).then(function () { - self.do_action({ - type: 'ir.actions.client', - res_model: 'res.users', - tag: 'reload_context', - target: 'current' - }); - }); - return false; - }, - }); - // - $(document).ready(function () { - var self = this; - var lang_list = ''; - setTimeout(function () { - new Model('ir.config_parameter').call('search_read', [[['key', '=', 'app_show_lang']], ['value']]).then(function (show) { - if (show.length >= 1 && (show[0]['value'] == "False")) - $('switch-lang').hide(); - else { - new Model('res.lang').call('search_read', [[], ['name', 'code']]).then(function (res) { - _.each(res, function (lang) { - var a = ''; - if (lang['code'] === session.user_context.lang) { - a = ''; - } else { - a = ''; - } - lang_list += '
  • ' + lang['name'] + a + '
  • '; - }); - lang_list += '
  • '; - $('switch-lang').replaceWith(lang_list); - }); - } - }); - }, 2500); - }); -}); diff --git a/app_odoo_customize/static/src/xml/customize_user_menu.xml b/app_odoo_customize/static/src/xml/customize_user_menu.xml deleted file mode 100644 index 52d45cc1..00000000 --- a/app_odoo_customize/static/src/xml/customize_user_menu.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - -
  • - Activate the developer mode -
  • -
  • - Activate the developer mode (with assets) -
  • -
  • - Deactivate the developer mode -
  • -
  • - Developer Manual -
  • -
  • - - - diff --git a/app_odoo_customize/views/app_odoo_customize_view.xml b/app_odoo_customize/views/app_odoo_customize_view.xml deleted file mode 100644 index d9bb42a9..00000000 --- a/app_odoo_customize/views/app_odoo_customize_view.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app_purchase_batch_procurement/views/menus.xml b/app_purchase_batch_procurement/views/menus.xml deleted file mode 100644 index 6c216e82..00000000 --- a/app_purchase_batch_procurement/views/menus.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - diff --git a/app_purchase_batch_procurement/views/procurement_order_views.xml b/app_purchase_batch_procurement/views/procurement_order_views.xml deleted file mode 100644 index 7bc8ae80..00000000 --- a/app_purchase_batch_procurement/views/procurement_order_views.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - Purchase Procurement Orders - ir.actions.act_window - procurement.order - form - tree,form - [('rule_id.action', '=', 'buy')] - {'search_default_exceptions': 1} - - - diff --git a/app_purchase_batch_procurement/views/product_template_views.xml b/app_purchase_batch_procurement/views/product_template_views.xml deleted file mode 100644 index a063e353..00000000 --- a/app_purchase_batch_procurement/views/product_template_views.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - felive.product.template.search.stock.form - product.template - - - - - - - - - - - - diff --git a/app_purchase_batch_procurement/wizard/__init__.py b/app_purchase_batch_procurement/wizard/__init__.py deleted file mode 100644 index 714bb2a5..00000000 --- a/app_purchase_batch_procurement/wizard/__init__.py +++ /dev/null @@ -1,4 +0,0 @@ -# -*- coding: utf-8 -*- - -from . import product_set_supplier_wiz -from . import procurement_batch_generator diff --git a/app_purchase_batch_procurement/wizard/procurement_batch_generator.py b/app_purchase_batch_procurement/wizard/procurement_batch_generator.py deleted file mode 100644 index efcc8307..00000000 --- a/app_purchase_batch_procurement/wizard/procurement_batch_generator.py +++ /dev/null @@ -1,129 +0,0 @@ -# -*- encoding: utf-8 -*- - - -from odoo import models, fields, api, _ -import odoo.addons.decimal_precision as dp -from odoo.exceptions import Warning -from datetime import datetime, timedelta -from odoo.tools import DEFAULT_SERVER_DATETIME_FORMAT - - -class ProcurementBatchGenerator(models.TransientModel): - _name = 'procurement.batch.generator' - _description = 'Wizard to create procurements from product tree' - - route_ids = fields.Many2many('stock.location.route', string='Preferred Routes') - line_ids = fields.One2many( - 'procurement.batch.generator.line', 'parent_id', - string='Procurement Request Lines') - - @api.model - def default_get(self, fields): - res = super(ProcurementBatchGenerator, self).default_get(fields) - assert isinstance(self.env.context['active_ids'], list),\ - "context['active_ids'] must be a list" - line_ids = [] - warehouses = self.env['stock.warehouse'].search( - [('company_id', '=', self.env.user.company_id.id)]) - warehouse_id = warehouses and warehouses[0].id or False - # product.template是被继承的,所以用同样方法即可 - for product in self.env['product.product'].browse( - self.env.context['active_ids']): - # todo: 库存的数量在此使用会导致运算量较大,停用。 如需要再加。未来可以考虑数据全部从前端送过来,不需再查数据库 - # partner_id = product.seller_ids and product.seller_ids[0].id or False - if product.virtual_available < 0: - procurement_qty = product.virtual_available * -1 - else: - procurement_qty = 1 - line_ids.append([0, 0, { - 'name': product.name, - 'product_id': product.id, - # 'partner_id': partner_id, - # 'qty_available': product.qty_available, - 'virtual_available': product.virtual_available, - # 'outgoing_qty': product.outgoing_qty, - # 'incoming_qty': product.incoming_qty, - 'uom_id': product.uom_id.id, - # 按预测库存数补货,or 1 - 'procurement_qty': procurement_qty, - 'warehouse_id': warehouse_id, - 'date_planned': datetime.now().strftime(DEFAULT_SERVER_DATETIME_FORMAT), - }]) - try: - res.update({ - 'line_ids': line_ids, - }) - except: - pass - return res - - @api.multi - def validate(self): - self.ensure_one() - wiz = self[0] - assert wiz.line_ids, 'wizard must have some lines' - procs = self.env['procurement.order'] - for line in wiz.line_ids: - if not line.procurement_qty: - continue - procurement = self.env['procurement.order'].create( - line._prepare_procurement_order()) - procs += procurement - if not procs.ids: - raise Warning(_('All requested quantities are null.')) - # todo: 看是否需要记录工作流 - # self.pool['procurement.order'].signal_workflow( - # self._cr, self._uid, new_po_ids, 'button_confirm') - # todo: 看是用 self.pool还是直接run,当前用直接run - # self.pool['procurement.order'].run( - # self._cr, self._uid, new_po_ids, context=self.env.context) - procs.run() - action = self.env.ref('procurement.procurement_action').read()[0] - action['domain'] = [('id', 'in', procs.ids)] - return action - -class ProcurementBatchGeneratorLine(models.TransientModel): - _name = 'procurement.batch.generator.line' - _description = 'Lines of the wizard to request procurements' - - parent_id = fields.Many2one( - 'procurement.batch.generator', string='Parent') - product_id = fields.Many2one( - 'product.product', string='Product', readonly=True) - partner_id = fields.Many2one( - 'res.partner', string='Supplier', required=False) - qty_available = fields.Float( - string='Quantity On Hand', - digits=dp.get_precision('Product Unit of Measure'), readonly=True) - virtual_available = fields.Float( - string='Forecast Quantity', - digits=dp.get_precision('Product Unit of Measure'), readonly=True) - outgoing_qty = fields.Float( - string='Incoming Quantity', - digits=dp.get_precision('Product Unit of Measure'), readonly=True) - incoming_qty = fields.Float( - string='Outgoing Quantity', - digits=dp.get_precision('Product Unit of Measure'), readonly=True) - procurement_qty = fields.Float( - string='Requested Quantity', - digits=dp.get_precision('Product Unit of Measure'), default=1) - uom_id = fields.Many2one( - 'product.uom', string='Unit of Measure', readonly=True) - warehouse_id = fields.Many2one( - 'stock.warehouse', string='Warehouse') - date_planned = fields.Datetime(string='Planned Date') - - @api.multi - def _prepare_procurement_order(self): - self.ensure_one() - vals = { - 'name': 'INT: %s' % (self.env.user.login), - 'date_planned': self.date_planned, - 'product_id': self.product_id.id, - 'product_qty': self.procurement_qty, - 'product_uom': self.uom_id.id, - 'location_id': self.warehouse_id.lot_stock_id.id, - 'company_id': self.warehouse_id.company_id.id, - 'route_ids': [(6, 0, self.parent_id.route_ids.ids)], - } - return vals diff --git a/app_purchase_batch_procurement/wizard/procurement_batch_generator_view.xml b/app_purchase_batch_procurement/wizard/procurement_batch_generator_view.xml deleted file mode 100644 index 2a6fc4df..00000000 --- a/app_purchase_batch_procurement/wizard/procurement_batch_generator_view.xml +++ /dev/null @@ -1,53 +0,0 @@ - - - - - procurement.batch.generator.form - procurement.batch.generator - -
    - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    -
    - - - -
    -
    diff --git a/app_purchase_batch_procurement/wizard/product_set_supplier_views.xml b/app_purchase_batch_procurement/wizard/product_set_supplier_views.xml deleted file mode 100644 index e7bbe2af..00000000 --- a/app_purchase_batch_procurement/wizard/product_set_supplier_views.xml +++ /dev/null @@ -1,57 +0,0 @@ - - - - - product.set.supplier.wiz.form - product.set.supplier.wiz - -
    - - - - - - - - - - - - - - - - - -
    -
    - -
    -
    - - - Set Supplier - product.set.supplier.wiz - form - form - - new - - - -
    -
    diff --git a/app_purchase_batch_procurement/wizard/product_set_supplier_wiz.py b/app_purchase_batch_procurement/wizard/product_set_supplier_wiz.py deleted file mode 100644 index 36bcf0a8..00000000 --- a/app_purchase_batch_procurement/wizard/product_set_supplier_wiz.py +++ /dev/null @@ -1,100 +0,0 @@ -# -*- coding: utf-8 -*- - -from odoo import api, fields, models, _ -from datetime import datetime, timedelta -from odoo.tools import DEFAULT_SERVER_DATETIME_FORMAT -import odoo.addons.decimal_precision as dp -from odoo.exceptions import UserError -import time - -class ProductSetSupplierWiz(models.TransientModel): - _name = 'product.set.supplier.wiz' - _description = 'Set supplier for product' - - name = fields.Many2one( - 'res.partner', 'Vendor', - domain=[('supplier', '=', True)], ondelete='cascade', required=True, - help="Vendor of this product") - min_qty = fields.Float( - 'Minimal Quantity', default=0.0, required=True, - help="The minimal quantity to purchase from this vendor, expressed in the vendor Product Unit of Measure if not any, in the default unit of measure of the product otherwise.") - price = fields.Float( - 'Price', default=0.0, digits=dp.get_precision('Product Price'), - required=True, help="The price to purchase a product") - company_id = fields.Many2one( - 'res.company', 'Company', - default=lambda self: self.env.user.company_id.id, index=1) - currency_id = fields.Many2one( - 'res.currency', 'Currency', - default=lambda self: self.env.user.company_id.currency_id.id, - required=True) - date_start = fields.Date('Start Date', help="Start date for this vendor price") - date_end = fields.Date('End Date', help="End date for this vendor price") - delay = fields.Integer( - 'Delivery Lead Time', default=1, required=True, - help="Lead time in days between the confirmation of the purchase order and the receipt of the products in your warehouse. Used by the scheduler for automatic computation of the purchase order planning.") - - # 通过过滤得到要设置的补货单 - p_ids = fields.Many2many('procurement.order', string='Procurement to set', readonly=True) - # 设置完后是否直接显示po - view_po = fields.Boolean('Show relate RFQ after set supplier', default=True) - - # 默认值 - @api.model - def default_get(self, fields): - res = super(ProductSetSupplierWiz, self).default_get(fields) - res['create_uid'] = self.env.user.id - if not res.get('min_qty'): - res['min_qty'] = 1 - if not res.get('date_start'): - res['date_start'] = datetime.now().strftime(DEFAULT_SERVER_DATETIME_FORMAT) - if not res.get('date_end'): - res['date_end'] = (datetime.now() + timedelta(days=1)).strftime(DEFAULT_SERVER_DATETIME_FORMAT) - - procs_ids = self.env.context.get('active_ids') - procs = self.env['procurement.order'].browse(procs_ids).filtered(lambda x: x.rule_id.action == 'buy' and x.state == 'exception') - p_ids = procs.ids - res['p_ids'] = p_ids - if len(p_ids) < 1: - raise UserError(_("Please select valid procurement orders. Only the 'status=Exception' and 'Buy in Inventory Routes' product can be set!")) - # 请选择有效的补货单。只有需要采购的异常补货单才可进行设置! - return res - - # 为选定的产品设定供应商,只处理系统没处理的 - @api.multi - def set_supplier(self): - self.ensure_one() - procs_ids = self.env.context.get('active_ids') - procs = self.env['procurement.order'].browse(procs_ids).filtered(lambda x: x.rule_id.action == 'buy' and x.state == 'exception') - t_ids = procs.mapped('product_id.product_tmpl_id').ids - # 去重复 - t_ids = list(set(t_ids)) - for t in t_ids: - self.env['product.supplierinfo'].create({ - 'name': self.name.id, - 'product_tmpl_id': t, - 'min_qty': self.min_qty, - 'date_start': self.date_start, - 'date_end': self.date_end, - 'delay': self.delay, - }) - time.sleep(1) - procs.run() - if self.view_po: - time.sleep(2) - p_names = procs.mapped('purchase_id.name') - p_names = list(set(p_names)) - domain = [["name", "in", p_names]] - context = { - 'search_default_name': p_names[0], - } - action = self.env.ref('purchase.purchase_rfq').read()[0] - if len(p_names) == 1: - action.update({ - 'context': context, - }) - elif len(p_names) > 1: - action.update({ - 'domain': domain, - }) - return action diff --git a/app_search_range/__init__.py b/app_search_range/__init__.py deleted file mode 100644 index 7c68785e..00000000 --- a/app_search_range/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# -*- coding: utf-8 -*- \ No newline at end of file diff --git a/app_search_range/__openerp__.py b/app_search_range/__openerp__.py deleted file mode 100644 index d50bb331..00000000 --- a/app_search_range/__openerp__.py +++ /dev/null @@ -1,49 +0,0 @@ -# -*- coding: utf-8 -*- - -# Created on 2017-11-05 -# author: 广州尚鹏,http://www.sunpop.cn -# email: 300883@qq.com -# resource of Sunpop -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). - -# Odoo在线中文用户手册(长期更新) -# http://www.sunpop.cn/documentation/user/10.0/zh_CN/index.html - -# Odoo10离线中文用户手册下载 -# http://www.sunpop.cn/odoo10_user_manual_document_offline/ -# Odoo10离线开发手册下载-含python教程,jquery参考,Jinja2模板,PostgresSQL参考(odoo开发必备) -# http://www.sunpop.cn/odoo10_developer_document_offline/ -# description: -{ - 'name': 'App Search By Date (Datetime) or Number Range', - 'version': '10.0.1.0', - 'author': 'Sunpop.cn', - 'category': 'web', - 'website': 'http://www.sunpop.cn', - 'license': 'AGPL-3', - 'sequence': 2, - 'summary': 'Search by date or number range in List view and Pivot view', - 'description': """ - -Search by date or number range in List view and Pivot view --------------------------------------------------- - - """, - 'depends': ['web','app_odoo_customize'], - 'data': [ - 'views/template_view.xml', - # data - 'data/ir_config_parameter.xml', - ], - 'qweb': [ - 'static/src/xml/*.xml', - ], - "price": 68.00, - "currency": "EUR", - - 'images': ['static/description/list_pivot.png'], - - 'installable': True, - 'auto_install': False, - 'application': True, -} diff --git a/app_search_range/data/ir_config_parameter.xml b/app_search_range/data/ir_config_parameter.xml deleted file mode 100644 index 4369230f..00000000 --- a/app_search_range/data/ir_config_parameter.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - app_show_search_date - True - - - app_show_search_number - True - - - \ No newline at end of file diff --git a/app_search_range/i18n/zh_CN.po b/app_search_range/i18n/zh_CN.po deleted file mode 100644 index 86bdb878..00000000 --- a/app_search_range/i18n/zh_CN.po +++ /dev/null @@ -1,46 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * app_odoo_customize -# -msgid "" -msgstr "" -"Project-Id-Version: Odoo Server 10.0c\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-08-07 08:57+0000\n" -"PO-Revision-Date: 2017-08-07 08:57+0000\n" -"Last-Translator: Ivan Deng <300883@qq.com>, 2017\n" -"Language-Team: http://www.sunpop.cn \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -#. module: app_search_range -#. openerp-web -#: code:addons/app_search_range/static/src/xml/pivot_view.xml:18 -#, python-format -msgid "Start date" -msgstr "开始日期" - -#. module: app_search_range -#. openerp-web -#: code:addons/app_search_range/static/src/xml/pivot_view.xml:22 -#, python-format -msgid "End date" -msgstr "结束日期" - -#. module: app_search_range -#. openerp-web -#: code:addons/app_search_range/static/src/xml/pivot_view.xml:45 -#, python-format -msgid "From" -msgstr "从" - - -#. module: app_search_range -#. openerp-web -#: code:addons/app_search_range/static/src/xml/pivot_view.xml:49 -#, python-format -msgid "To" -msgstr "至" diff --git a/app_search_range/static/description/date_range.jpg b/app_search_range/static/description/date_range.jpg deleted file mode 100644 index 8b702b90..00000000 Binary files a/app_search_range/static/description/date_range.jpg and /dev/null differ diff --git a/app_search_range/static/description/date_range.png b/app_search_range/static/description/date_range.png deleted file mode 100644 index 317099b9..00000000 Binary files a/app_search_range/static/description/date_range.png and /dev/null differ diff --git a/app_search_range/static/description/icon.png b/app_search_range/static/description/icon.png deleted file mode 100644 index 4c57f611..00000000 Binary files a/app_search_range/static/description/icon.png and /dev/null differ diff --git a/app_search_range/static/description/index.html b/app_search_range/static/description/index.html deleted file mode 100644 index 197a65aa..00000000 --- a/app_search_range/static/description/index.html +++ /dev/null @@ -1,91 +0,0 @@ -
    -
    -
    -

    App Search By Date or Number Range

    -
    -

    This moduld allows user to Search by date or number range in List view and Pivot view.

    -
    -
      -
    • 1.List all the date/datetime field to select range
    • -
    • 2.List all the integer/float/Monetary field to select range
    • -
    • 3.Auto get user timezone, global Timezone supported.
    • -
    • 4.Easy admin to enable/disable the search.
    • -
    -
    -
    -
    -
    -
    -
    -

    Date range

    -
    - -
    -
    -
    - -
    -
    -

    Value range

    -
    - -
    -
    -
    - -
    -
    -

    Pivot View

    -
    - -
    -
    -
    - -
    -
    -

    How to setup

    -

    Go to Menu: Settings->Technical->Parameters->System Parameters

    -

    You can find "app_show_search_date" and "app_show_search_number"

    -

    Go to Menu: Settings->Technical->Parameters->System Parameters.

    -

    Set the Value to "False" if you do not want to show the search. And set "True" to show.

    -
    - -
    -
    -
    - -
    -
    -
    -

    Technical Help & Support

    -
    -
    -
    -

    - For any type of technical help & support requests, Feel free to contact us

    - - guohuadeng@hotmail.com -

    - Via QQ: 300883

    - - 300883@qq.com -
    -
    -

    - Visit our website for more support.

    - - http://www.sunpop.cn -
    -
    -
    -
    - -
    -
    \ No newline at end of file diff --git a/app_search_range/static/description/list_pivot.jpg b/app_search_range/static/description/list_pivot.jpg deleted file mode 100644 index 6b9ff4e8..00000000 Binary files a/app_search_range/static/description/list_pivot.jpg and /dev/null differ diff --git a/app_search_range/static/description/list_pivot.png b/app_search_range/static/description/list_pivot.png deleted file mode 100644 index 59bf05cd..00000000 Binary files a/app_search_range/static/description/list_pivot.png and /dev/null differ diff --git a/app_search_range/static/description/setup.jpg b/app_search_range/static/description/setup.jpg deleted file mode 100644 index dcfaaf54..00000000 Binary files a/app_search_range/static/description/setup.jpg and /dev/null differ diff --git a/app_search_range/static/description/setup.png b/app_search_range/static/description/setup.png deleted file mode 100644 index 0c79efd6..00000000 Binary files a/app_search_range/static/description/setup.png and /dev/null differ diff --git a/app_search_range/static/description/setup1.jpg b/app_search_range/static/description/setup1.jpg deleted file mode 100644 index 7841f91a..00000000 Binary files a/app_search_range/static/description/setup1.jpg and /dev/null differ diff --git a/app_search_range/static/description/setup1.png b/app_search_range/static/description/setup1.png deleted file mode 100644 index eea3338d..00000000 Binary files a/app_search_range/static/description/setup1.png and /dev/null differ diff --git a/app_search_range/static/description/value_range.jpg b/app_search_range/static/description/value_range.jpg deleted file mode 100644 index 424b1369..00000000 Binary files a/app_search_range/static/description/value_range.jpg and /dev/null differ diff --git a/app_search_range/static/description/value_range.png b/app_search_range/static/description/value_range.png deleted file mode 100644 index e1b33e3b..00000000 Binary files a/app_search_range/static/description/value_range.png and /dev/null differ diff --git a/app_search_range/static/src/css/app_search_range.css b/app_search_range/static/src/css/app_search_range.css deleted file mode 100644 index 673b57ff..00000000 --- a/app_search_range/static/src/css/app_search_range.css +++ /dev/null @@ -1,11 +0,0 @@ -.tree_search_item { - cursor: pointer; -} - -.tree_search_item .selected a:before { - font-family: FontAwesome; - position: absolute; - left: 6px; - top: 3px; - content: ""; -} \ No newline at end of file diff --git a/app_search_range/static/src/js/pivot.js b/app_search_range/static/src/js/pivot.js deleted file mode 100644 index e758a449..00000000 --- a/app_search_range/static/src/js/pivot.js +++ /dev/null @@ -1,257 +0,0 @@ -odoo.define('app_search_range_range.pivot', function (require) { -"use strict"; - -var time = require('web.time'); -var core = require('web.core'); -var data = require('web.data'); -var session = require('web.session'); -var utils = require('web.utils'); -var Model = require('web.Model'); -var PivotView = require('web.PivotView'); -var datepicker = require('web.datepicker'); - -var _t = core._t; -var _lt = core._lt; -var QWeb = core.qweb; - -PivotView.include({ - - init: function() { - this._super.apply(this, arguments); - this.ts_fields = []; - }, - - tgl_on_button_click: function (event) { - var self = this; - var $target = $(event.target), - field, key, first_item; - - field = $target.parent().data('field'); - key = $target.parent().data('key'); - - if (field == -1) { - first_item = $target.parent().parent().children('.tgl_first_item.selected'); - if (!first_item.length) { - $target.parent().parent().children('li').removeClass('selected') - } - } else { - first_item = $target.parent().parent().children('.tgl_first_item').removeClass('selected'); - } - - $target.parent().toggleClass('selected'); - this.tgl_search() - event.stopPropagation(); - - }, - - - render_buttons: function($node) { - var self = this; - var ts_context = this.context.tree_search; - - this._super.apply(this, arguments); - - var l10n = _t.database.parameters; - var datepickers_options = { - pickTime: false, - startDate: moment({ y: 1900 }), - endDate: moment().add(200, "y"), - calendarWeeks: true, - icons : { - time: 'fa fa-clock-o', - date: 'fa fa-calendar', - up: 'fa fa-chevron-up', - down: 'fa fa-chevron-down' - }, - language : moment.locale(), - format : time.strftime_to_moment_format(l10n.date_format), - } - - // Dropdown list - - $(QWeb.render("TGL.TreeSearch.Placeholder", {})).appendTo($node); - - _.each(ts_context, function(item){ - var field = _.find(self.fields, function(value, key, list){ - return value.type == 'many2one' && value.relation && key === item.name; - }); - - if (field) { - self.ts_fields.push(item.name); - - new Model(field.relation).query(['id', 'display_name']).filter(new data.CompoundDomain(item.domain, field.domain)).context(new data.CompoundContext()).order_by('app_sequence').all().then(function (result) { - var $multi_search = $(QWeb.render("TGL.TreeSearch.Item", {'widget': { - 'string': item.string, - 'key': item.name, - 'class_name': 'app_multi_item_' + item.name, - 'fields': result, - }})) - - $multi_search.find('li').click(self.tgl_on_button_click.bind(self)); - - setTimeout(function(){ - $multi_search.appendTo($('.treesearch_placeholder')); - }, 2000); - }); - } - }); - // self.$buttons.find('.app-search').remove(); - - var date_fields = []; - // 增加参数控制app_show_search_date - new Model('ir.config_parameter').call('search_read', [[['key', '=', 'app_show_search_date']], ['value']]).then(function (show) { - if (show.length >= 1 && (show[0]['value'] == "True")) { - _.each(self.fields, function (value, key, list) { - if (value.store && value.type === "datetime" || value.type === "date") { - date_fields.push([key, value.string]); - } - }); - - if (date_fields.length > 0) { - self.$search_button = $(QWeb.render('odooApp.buttons', {'date_fields': date_fields})) - self.$search_button.find('.app_start_date').datetimepicker(datepickers_options); - self.$search_button.find('.app_end_date').datetimepicker(datepickers_options); - self.$search_button.find('.app_start_date').on('change', function () { - self.tgl_search(); - }); - self.$search_button.find('.app_end_date').on('change', function () { - self.tgl_search(); - }); - self.$search_button.find('.app_select_field').on('change', function () { - self.tgl_search(); - }); - setTimeout(function () { - self.$search_button.insertBefore($('.treesearch_placeholder')); - }, 500); - } - } - }); - - var number_fields = []; - - // 增加参数控制app_show_search_number - new Model('ir.config_parameter').call('search_read', [[['key', '=', 'app_show_search_number']], ['value']]).then(function (show) { - if (show.length >= 1 && (show[0]['value'] == "True")) { - number_fields = []; - _.each(self.fields, function (value, key, list) { - if (value.string && value.string.length > 1 && value.store && (value.type === "integer" || value.type === "float" || value.type === "monetary")) { - number_fields.push([key, value.string]); - } - }); - - if (number_fields.length > 0) { - self.$search_range = $(QWeb.render('odooApp.SearchRange', {'number_fields': number_fields})) - self.$search_range.find('.app_select_range_field').on('change', function () { - self.tgl_search(); - }); - self.$search_range.find('.app_start_range').on('change', function () { - self.tgl_search(); - }); - self.$search_range.find('.app_end_range').on('change', function () { - self.tgl_search(); - }); - setTimeout(function () { - self.$search_range.insertBefore($('.treesearch_placeholder')); - }, 500); - } - } - }); - }, - - do_search: function(domain, context, group_by) { - var self = this; - this.last_domain = domain; - this.last_context = context; - this.last_group_by = group_by; - this.old_search = _.bind(this._super, this); - return self.tgl_search(); - }, - - tgl_search: function() { - var self = this; - var domain = [], value, value_tmp; - - _.each(self.ts_fields, function(field){ - value = $('.app_item_' + field).val(); - - var select_fields = $('.app_multi_item_' + field).children('.selected'), - select_value = []; - if (select_fields.length > 0) { - _.each(select_fields, function(item){ - value_tmp = $(item).data('field'); - if (value_tmp > 0) { - select_value.push($(item).data('field')); - } - }); - if (select_value.length) { - domain.push([field, 'in', select_value]); - } - - } - }); - -// 注意,date和datetime型的处理是不同的,已处理完 - if (self.$search_button) { - var start_date = self.$search_button.find('.app_start_date').val(), - end_date = self.$search_button.find('.app_end_date').val(), - field = self.$search_button.find('.app_select_field').val(), - field_type = 'datetime'; - var tz = session.user_context.tz, - start_utc, - end_utc; - - _.each(self.columns, function (value, key, list) { - if (value.name == field) { - field_type = value.type; - return false; - } - }); - - moment.locale(tz); - var l10n = _t.database.parameters; - if (start_date) { - if (field_type == 'date') { - //日期类型,无须utc处理 - start_date = moment(moment(start_date, time.strftime_to_moment_format(l10n.date_format))).format('YYYY-MM-DD'); - domain.push([field, '>=', start_date]); - } else { - //日期时间,处理utc - start_date = moment(moment(start_date, time.strftime_to_moment_format(l10n.date_format))).format('YYYY-MM-DD 00:00:00'); - start_utc = moment(start_date) - domain.push([field, '>=', start_utc]); - } - } - if (end_date) { - if (field_type == 'date') { - end_date = moment(moment(end_date, time.strftime_to_moment_format(l10n.date_format))).format('YYYY-MM-DD'); - domain.push([field, '<=', end_date]); - } else { - end_date = moment(moment(end_date, time.strftime_to_moment_format(l10n.date_format))).format('YYYY-MM-DD 00:00:00'); - end_utc = moment(end_date) - domain.push([field, '<=', end_utc]); - } - } - } - - if (self.$search_range) { - var start_range = self.$search_range.find('.app_start_range').val(), - end_range = self.$search_range.find('.app_end_range').val(), - range_field = self.$search_range.find('.app_select_range_field').val(); - - if (start_range) { - domain.push([range_field, '>=', parseInt(start_range)]); - } - if (end_range) { - domain.push([range_field, '<=', parseInt(end_range)]); - } - } - // console.log(domain); - var compound_domain = new data.CompoundDomain(self.last_domain, domain); - self.dataset.domain = compound_domain.eval(); - return self.old_search(compound_domain, self.last_context, self.last_group_by); - }, - - -}); - -}); \ No newline at end of file diff --git a/app_search_range/static/src/js/tree.js b/app_search_range/static/src/js/tree.js deleted file mode 100644 index 9d0ca0c3..00000000 --- a/app_search_range/static/src/js/tree.js +++ /dev/null @@ -1,271 +0,0 @@ -odoo.define('app_search_range_range.tree', function (require) { -"use strict"; - -var time = require('web.time'); -var core = require('web.core'); -var data = require('web.data'); -var session = require('web.session'); -var utils = require('web.utils'); -var Model = require('web.Model'); -var ListView = require('web.ListView'); -var datepicker = require('web.datepicker'); -var ViewManager = require('web.ViewManager') -var _t = core._t; -var _lt = core._lt; -var QWeb = core.qweb; - -ListView.include({ - - init: function(parent, dataset, view_id, options) { - this._super.apply(this, arguments); - this.ts_context = dataset.context.tree_search; - this.fields_range = dataset.context.fields_range; - this.ts_fields = []; - }, - - on_button_click: function (event) { - var self = this; - var $target = $(event.target), - field, key, first_item; - - field = $target.parent().data('field'); - key = $target.parent().data('key'); - - if (field == -1) { - first_item = $target.parent().parent().children('.tgl_first_item.selected'); - if (!first_item.length) { - $target.parent().parent().children('li').removeClass('selected') - } - } else { - first_item = $target.parent().parent().children('.tgl_first_item').removeClass('selected'); - } - - $target.parent().toggleClass('selected'); - this.tgl_search() - event.stopPropagation(); - - }, - - render_buttons: function($node) { - var self = this; - this._super.apply(this, arguments); - - var l10n = _t.database.parameters; - var datepickers_options = { - pickTime: false, - startDate: moment({ y: 1900 }), - endDate: moment().add(200, "y"), - calendarWeeks: true, - icons : { - time: 'fa fa-clock-o', - date: 'fa fa-calendar', - up: 'fa fa-chevron-up', - down: 'fa fa-chevron-down' - }, - language : moment.locale(), - format : time.strftime_to_moment_format(l10n.date_format), - } - - self.$buttons.find('.app-search').remove(); - - var date_fields = []; - // 增加参数控制app_show_search_date - new Model('ir.config_parameter').call('search_read', [[['key', '=', 'app_show_search_date']], ['value']]).then(function (show) { - if (show.length >= 1 && (show[0]['value'] == "True")) { - _.each(self.columns, function (value, key, list) { - if (value.store && value.type === "datetime" || value.type === "date") { - date_fields.push([value.name, value.string, value.type]); - } - }); - if (date_fields.length > 0) { - self.$search_button = $(QWeb.render('odooApp.buttons', {'date_fields': date_fields})) - self.$search_button.find('.app_start_date').datetimepicker(datepickers_options); - self.$search_button.find('.app_end_date').datetimepicker(datepickers_options); - // self.$search_button.find('.app_search_date_rate').click(function() { - // self.tgl_search(); - // }); - self.$search_button.find('.app_start_date').on('change', function () { - self.tgl_search(); - }); - self.$search_button.find('.app_end_date').on('change', function () { - self.tgl_search(); - }); - self.$search_button.find('.app_select_field').on('change', function () { - self.tgl_search(); - }); - self.$search_button.appendTo(self.$buttons); - } - } - }); - - - var number_fields = []; - - // 增加参数控制app_show_search_number - new Model('ir.config_parameter').call('search_read', [[['key', '=', 'app_show_search_number']], ['value']]).then(function (show) { - if (show.length >= 1 && (show[0]['value'] == "True")) { - _.each(self.columns, function (value, key, list) { - if (value.string && value.string.length > 1 && value.store && (value.type === "integer" || value.type === "float" || value.type === "monetary")) { - number_fields.push([value.name, value.string]); - } - }); - - if (number_fields.length == 0) { - if (self.fields_range) { - number_fields = self.fields_range; - } - } - if (number_fields.length > 0) { - self.$search_range = $(QWeb.render('odooApp.SearchRange', {'number_fields': number_fields})) - // self.$search_range.find('.app_search_date_range').click(function() { - // self.tgl_search(); - // }); - self.$search_range.find('.app_select_range_field').on('change', function () { - self.tgl_search(); - }); - self.$search_range.find('.app_start_range').on('change', function () { - self.tgl_search(); - }); - self.$search_range.find('.app_end_range').on('change', function () { - self.tgl_search(); - }); - self.$search_range.appendTo(self.$buttons); - } - } - }); - - // Dropdown list - _.each(this.ts_context, function(item){ - var field = _.find(self.columns, function(column){ - return column.type == 'many2one' && column.relation && column.name === item.name; - }); - if (field) { - self.ts_fields.push(item.name); - new Model(field.relation).query(['id', 'display_name']).filter(new data.CompoundDomain(item.domain, field.domain)).context(new data.CompoundContext()).all().then(function (result) { - // var single_search = $(QWeb.render('odooApp.selection', { - // 'string': item.string, - // 'class_name': 'app_item_' + item.name, - // 'fields': result, - // })); - if (!$('.after_control_panel').length) { - // $(QWeb.render('odooApp.after_control_panel', {})).appendTo($('.o_control_panel')); - // $(QWeb.render('odooApp.after_control_panel', {})).appendTo($('.o_cp_left')); - - // $(QWeb.render('odooApp.after_control_panel', {})).appendTo(self.$buttons); - - var multi_search = $(QWeb.render("TGL.TreeSearch.Item", {'widget': { - 'string': item.string, - 'key': item.name, - 'class_name': 'app_multi_item_' + item.name, - 'fields': result, - }})) - - multi_search.find('li').click(self.on_button_click.bind(self)); - multi_search.appendTo(self.$buttons); - } - // single_search.appendTo($('.after_control_panel')); - // $('.app_item_' + item.name).on('change', function() { - // self.tgl_search(); - // }) - }); - } - }); - - - }, - - do_search: function(domain, context, group_by) { - var self = this; - this.last_domain = domain; - this.last_context = context; - this.last_group_by = group_by; - this.old_search = _.bind(this._super, this); - return self.tgl_search(); - }, - - tgl_search: function() { - var self = this; - var domain = [], value, value_tmp; - - _.each(self.ts_fields, function(field){ - value = $('.app_item_' + field).val(); - - var select_fields = $('.app_multi_item_' + field).children('.selected'), - select_value = []; - if (select_fields.length > 0) { - _.each(select_fields, function(item){ - value_tmp = $(item).data('field'); - if (value_tmp > 0) { - select_value.push($(item).data('field')); - } - }); - if (select_value.length) { - domain.push([field, 'in', select_value]); - } - - } - }); -// 注意,date和datetime型的处理是不同的,已处理完 - if (self.$search_button) { - var start_date = self.$search_button.find('.app_start_date').val(), - end_date = self.$search_button.find('.app_end_date').val(), - field = self.$search_button.find('.app_select_field').val(), - field_type = 'datetime'; - var tz = session.user_context.tz, - start_utc, - end_utc; - - _.each(self.columns, function (value, key, list) { - if (value.name == field) { - field_type = value.type; - return false; - } - }); - - moment.locale(tz); - var l10n = _t.database.parameters; - if (start_date) { - if (field_type === 'date') { - //日期类型,无须utc处理 - start_date = moment(moment(start_date, time.strftime_to_moment_format(l10n.date_format))).format('YYYY-MM-DD'); - domain.push([field, '>=', start_date]); - } else { - //日期时间,处理utc - start_date = moment(moment(start_date, time.strftime_to_moment_format(l10n.date_format))).format('YYYY-MM-DD 00:00:00'); - start_utc = moment(start_date) - domain.push([field, '>=', start_utc]); - } - } - if (end_date) { - if (field_type === 'date') { - end_date = moment(moment(end_date, time.strftime_to_moment_format(l10n.date_format))).format('YYYY-MM-DD'); - domain.push([field, '<=', end_date]); - } else { - end_date = moment(moment(end_date, time.strftime_to_moment_format(l10n.date_format))).format('YYYY-MM-DD 00:00:00'); - end_utc = moment(end_date) - domain.push([field, '<=', end_utc]); - } - } - } - - if (self.$search_range) { - var start_range = self.$search_range.find('.app_start_range').val(), - end_range = self.$search_range.find('.app_end_range').val(), - range_field = self.$search_range.find('.app_select_range_field').val(); - - if (start_range) { - domain.push([range_field, '>=', parseInt(start_range)]); - } - if (end_range) { - domain.push([range_field, '<=', parseInt(end_range)]); - } - } - // console.log(domain); - var compound_domain = new data.CompoundDomain(self.last_domain, domain); - self.dataset.domain = compound_domain.eval(); - return self.old_search(compound_domain, self.last_context, self.last_group_by); - }, - -}); - -}); \ No newline at end of file diff --git a/app_search_range/static/src/xml/pivot_view.xml b/app_search_range/static/src/xml/pivot_view.xml deleted file mode 100644 index 4ba3d0c3..00000000 --- a/app_search_range/static/src/xml/pivot_view.xml +++ /dev/null @@ -1,101 +0,0 @@ - - - - - - - - - - -

    -
    - - - -
    - - - -
    -
    - -
    - - - -
    -
    -
    -
    - - -
    - - - -
    - -
      -
    • All
    • -
    • - -
    • -
    -
    - -
    - - - \ No newline at end of file diff --git a/app_search_range/views/template_view.xml b/app_search_range/views/template_view.xml deleted file mode 100644 index b6cc479d..00000000 --- a/app_search_range/views/template_view.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/app_ui_enhance/__init__.py b/app_ui_enhance/__init__.py deleted file mode 100644 index 0f7cb6b2..00000000 --- a/app_ui_enhance/__init__.py +++ /dev/null @@ -1,2 +0,0 @@ -# -*- coding: utf-8 -*- -import models \ No newline at end of file diff --git a/app_ui_enhance/__openerp__.py b/app_ui_enhance/__openerp__.py deleted file mode 100644 index 9e3f5537..00000000 --- a/app_ui_enhance/__openerp__.py +++ /dev/null @@ -1,76 +0,0 @@ -# -*- coding: utf-8 -*- - -# Created on 2017-11-05 -# author: 广州尚鹏,http://www.sunpop.cn -# email: 300883@qq.com -# resource of Sunpop -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). - -# Odoo在线中文用户手册(长期更新) -# http://www.sunpop.cn/documentation/user/10.0/zh_CN/index.html - -# Odoo10离线中文用户手册下载 -# http://www.sunpop.cn/odoo10_user_manual_document_offline/ -# Odoo10离线开发手册下载-含python教程,jquery参考,Jinja2模板,PostgresSQL参考(odoo开发必备) -# http://www.sunpop.cn/odoo10_developer_document_offline/ -# description: -{ - 'name': 'App Web UI Enhance(Search by date or number range,List background color,Barcode Setting.)', - 'version': '10.0.1.0', - 'category': 'web', - 'author': 'Sunpop.cn', - 'website': 'http://www.sunpop.cn', - 'license': 'AGPL-3', - 'sequence': 2, - 'summary': """ - UI Enhance for Odoo. - 1.Search by date or number range in List view and Pivot view. - 2.Instructions for Activating List background color property. - 3.Reset the barcode format. - 4.Draggable Dialog - """, - 'description': """ - -1.Search by date or number range in List view and Pivot view --------------------------------------------------- -2.Instructions for Activating List background color property - -Just add tree attribute like style and colors with condition you want. - -bg_colors="grey:state=='cancel';green:state=='draft';blue:state in ('done');red:state in ('waiting')" - - -eg. - - - demo.tree - demo.model - - - - - - - --------------------------------------------------- - - """, - 'depends': ['web', 'report', 'app_odoo_customize'], - 'data': [ - 'views/app_ui_config_settings_view.xml', - 'views/template_view.xml', - # data - 'data/ir_config_parameter.xml', - ], - 'qweb': [ - 'static/src/xml/*.xml', - ], - "price": 68.00, - "currency": "EUR", - - 'images': ['static/description/list_pivot.png'], - - 'installable': True, - 'auto_install': False, - 'application': True, -} diff --git a/app_ui_enhance/data/ir_config_parameter.xml b/app_ui_enhance/data/ir_config_parameter.xml deleted file mode 100644 index cb432dd2..00000000 --- a/app_ui_enhance/data/ir_config_parameter.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - app_ui_show_search_date - True - - - app_ui_show_search_number - False - - - app_ui_force_barcode - Code128 - - - - app_ui_allow_barcode - QR,Standard39 - - - \ No newline at end of file diff --git a/app_ui_enhance/i18n/zh_CN.po b/app_ui_enhance/i18n/zh_CN.po deleted file mode 100644 index 5d5c82a4..00000000 --- a/app_ui_enhance/i18n/zh_CN.po +++ /dev/null @@ -1,270 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * app_ui_enhance -# -msgid "" -msgstr "" -"Project-Id-Version: Odoo Server 10.0+e-20171107\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-01-28 19:12+0000\n" -"PO-Revision-Date: 2018-01-28 19:12+0000\n" -"Last-Translator: <>\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" -"Plural-Forms: \n" - -#. module: app_ui_enhance -#. openerp-web -#: code:addons/app_ui_enhance/static/src/xml/pivot_view.xml:71 -#: code:addons/app_ui_enhance/static/src/xml/pivot_view.xml:92 -#, python-format -msgid "All" -msgstr "全部" - -#. module: app_ui_enhance -#: model:ir.model.fields,field_description:app_ui_enhance.field_app_ui_config_settings_app_ui_allow_barcode -msgid "Allow Barcode, Seperated by \",\"" -msgstr "允许的条码,用\",\"分隔" - -#. module: app_ui_enhance -#: model:ir.model,name:app_ui_enhance.model_app_ui_config_settings -msgid "App Web UI enhance settings" -msgstr "界面优化设置" - -#. module: app_ui_enhance -#: model:ir.ui.view,arch_db:app_ui_enhance.view_app_ui_config_settings -msgid "Apply" -msgstr "应用" - -#. module: app_ui_enhance -#: model:ir.ui.view,arch_db:app_ui_enhance.view_app_ui_config_settings -msgid "Cancel" -msgstr "取消" - -#. module: app_ui_enhance -#: selection:app.ui.config.settings,app_ui_force_barcode:0 -msgid "Codabar" -msgstr "Codabar" - -#. module: app_ui_enhance -#: selection:app.ui.config.settings,app_ui_force_barcode:0 -msgid "Code11" -msgstr "Code11" - -#. module: app_ui_enhance -#: selection:app.ui.config.settings,app_ui_force_barcode:0 -msgid "Code128" -msgstr "Code128" - -#. module: app_ui_enhance -#: model:ir.model.fields,field_description:app_ui_enhance.field_app_ui_config_settings_create_uid -msgid "Created by" -msgstr "创建人" - -#. module: app_ui_enhance -#: model:ir.model.fields,field_description:app_ui_enhance.field_app_ui_config_settings_create_date -msgid "Created on" -msgstr "创建时间" - -#. module: app_ui_enhance -#: model:ir.model.fields,help:app_ui_enhance.field_app_ui_config_settings_app_ui_allow_barcode -msgid "Default Allow QR and Standard39." -msgstr "建议默认输入 QR,Standard39" - -#. module: app_ui_enhance -#: model:ir.model.fields,field_description:app_ui_enhance.field_app_ui_config_settings_display_name -msgid "Display Name" -msgstr "显示名称" - -#. module: app_ui_enhance -#: selection:app.ui.config.settings,app_ui_force_barcode:0 -msgid "EAN13" -msgstr "EAN13" - -#. module: app_ui_enhance -#: selection:app.ui.config.settings,app_ui_force_barcode:0 -msgid "EAN8" -msgstr "EAN8" - -#. module: app_ui_enhance -#. openerp-web -#: code:addons/app_ui_enhance/static/src/xml/pivot_view.xml:22 -#, python-format -msgid "End date" -msgstr "结束日期" - -#. module: app_ui_enhance -#: selection:app.ui.config.settings,app_ui_force_barcode:0 -msgid "Extended39" -msgstr "Extended39" - -#. module: app_ui_enhance -#: selection:app.ui.config.settings,app_ui_force_barcode:0 -msgid "Extended93" -msgstr "Extended93" - -#. module: app_ui_enhance -#: selection:app.ui.config.settings,app_ui_force_barcode:0 -msgid "FIM" -msgstr "FIM" - -#. module: app_ui_enhance -#: model:ir.model.fields,field_description:app_ui_enhance.field_app_ui_config_settings_app_ui_force_barcode -msgid "Force all Odoo Barcode to:" -msgstr "强制设置所有Odoo条码格式:" - -#. module: app_ui_enhance -#. openerp-web -#: code:addons/app_ui_enhance/static/src/xml/pivot_view.xml:43 -#, python-format -msgid "From" -msgstr "从" - -#. module: app_ui_enhance -#: selection:app.ui.config.settings,app_ui_force_barcode:0 -msgid "I2of5" -msgstr "I2of5" - -#. module: app_ui_enhance -#: model:ir.model.fields,field_description:app_ui_enhance.field_app_ui_config_settings_id -msgid "ID" -msgstr "ID" - -#. module: app_ui_enhance -#: model:ir.ui.view,arch_db:app_ui_enhance.view_app_ui_config_settings -msgid "Item to Show" -msgstr "显示/隐藏菜单项" - -#. module: app_ui_enhance -#: model:ir.model.fields,field_description:app_ui_enhance.field_app_ui_config_settings___last_update -msgid "Last Modified on" -msgstr "最后修改日" - -#. module: app_ui_enhance -#: model:ir.model.fields,field_description:app_ui_enhance.field_app_ui_config_settings_write_uid -msgid "Last Updated by" -msgstr "最后更新人" - -#. module: app_ui_enhance -#: model:ir.model.fields,field_description:app_ui_enhance.field_app_ui_config_settings_write_date -msgid "Last Updated on" -msgstr "最后更新时间" - -#. module: app_ui_enhance -#: selection:app.ui.config.settings,app_ui_force_barcode:0 -msgid "MSI" -msgstr "MSI" - -#. module: app_ui_enhance -#: selection:app.ui.config.settings,app_ui_force_barcode:0 -msgid "Odoo Default" -msgstr "Odoo 默认" - -#. module: app_ui_enhance -#: selection:app.ui.config.settings,app_ui_force_barcode:0 -msgid "POSTNET" -msgstr "POSTNET" - -#. module: app_ui_enhance -#. openerp-web -#: code:addons/app_ui_enhance/static/src/xml/pivot_view.xml:18 -#: code:addons/app_ui_enhance/static/src/xml/pivot_view.xml:22 -#: code:addons/app_ui_enhance/static/src/xml/pivot_view.xml:43 -#: code:addons/app_ui_enhance/static/src/xml/pivot_view.xml:47 -#, python-format -msgid "Press Enter to search" -msgstr "直接按回车即可搜索" - -#. module: app_ui_enhance -#: selection:app.ui.config.settings,app_ui_force_barcode:0 -msgid "QR" -msgstr "QR" - -#. module: app_ui_enhance -#: model:ir.model,name:app_ui_enhance.model_report -msgid "Report" -msgstr "报表" - -#. module: app_ui_enhance -#: model:ir.ui.view,arch_db:app_ui_enhance.view_app_ui_config_settings -msgid "Report Setting" -msgstr "报表输出设置" - -#. module: app_ui_enhance -#: model:ir.ui.view,arch_db:app_ui_enhance.view_app_ui_config_settings -msgid "Search Enhance" -msgstr "搜索增加" - -#. module: app_ui_enhance -#: model:ir.model.fields,help:app_ui_enhance.field_app_ui_config_settings_app_ui_show_search_date -#: model:ir.model.fields,help:app_ui_enhance.field_app_ui_config_settings_app_ui_show_search_number -msgid "Set 'True' to show, Set 'False' to hide" -msgstr "设为 'True' 则显示,设为 'False' 则隐藏" - -#. module: app_ui_enhance -#: model:ir.model.fields,help:app_ui_enhance.field_app_ui_config_settings_app_ui_force_barcode -msgid "Set Odoo Default to use the barcode odoo define in report(EAN13)." -msgstr "设置为'Odoo默认'即使用代码中设置的条码编码(EAN13)" - -#. module: app_ui_enhance -#: model:ir.model.fields,field_description:app_ui_enhance.field_app_ui_config_settings_app_ui_show_search_date -msgid "Show date range search in tree/pivot view" -msgstr "显示日期搜索,在tree/pivot视图生效" - -#. module: app_ui_enhance -#: model:ir.model.fields,field_description:app_ui_enhance.field_app_ui_config_settings_app_ui_show_search_number -msgid "Show number range search tree/pivot view" -msgstr "显示数值搜索,在tree/pivot视图生效" - -#. module: app_ui_enhance -#: selection:app.ui.config.settings,app_ui_force_barcode:0 -msgid "Standard39" -msgstr "Standard39" - -#. module: app_ui_enhance -#: selection:app.ui.config.settings,app_ui_force_barcode:0 -msgid "Standard93" -msgstr "Standard93" - -#. module: app_ui_enhance -#. openerp-web -#: code:addons/app_ui_enhance/static/src/xml/pivot_view.xml:18 -#, python-format -msgid "Start date" -msgstr "开始日期" - -#. module: app_ui_enhance -#. openerp-web -#: code:addons/app_ui_enhance/static/src/xml/pivot_view.xml:47 -#, python-format -msgid "To" -msgstr "至" - -#. module: app_ui_enhance -#: model:ir.actions.act_window,name:app_ui_enhance.action_app_ui_config -#: model:ir.ui.menu,name:app_ui_enhance.menu_app_ui_config -msgid "UI Enhance" -msgstr "界面增强" - -#. module: app_ui_enhance -#: selection:app.ui.config.settings,app_ui_force_barcode:0 -msgid "UPCA" -msgstr "UPCA" - -#. module: app_ui_enhance -#: selection:app.ui.config.settings,app_ui_force_barcode:0 -msgid "USPS_4State" -msgstr "USPS_4State" - -#. module: app_ui_enhance -#: model:ir.ui.view,arch_db:app_ui_enhance.view_app_ui_config_settings -msgid "odoo UI Enhance" -msgstr "odoo 界面增强" - -#. module: app_ui_enhance -#: model:ir.ui.view,arch_db:app_ui_enhance.view_app_ui_config_settings -msgid "odooApp UI Settings" -msgstr "界面增强设置" - diff --git a/app_ui_enhance/models/__init__.py b/app_ui_enhance/models/__init__.py deleted file mode 100644 index 748f84fd..00000000 --- a/app_ui_enhance/models/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -# -*- coding: utf-8 -*- -import app_ui_config_settings -import report diff --git a/app_ui_enhance/models/app_ui_config_settings.py b/app_ui_enhance/models/app_ui_config_settings.py deleted file mode 100644 index 3a4bede4..00000000 --- a/app_ui_enhance/models/app_ui_config_settings.py +++ /dev/null @@ -1,91 +0,0 @@ -# -*- coding: utf-8 -*- - -# Created on 2017-11-16 -# author: 广州尚鹏,http://www.sunpop.cn -# email: 300883@qq.com -# resource of Sunpop -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). - -# Odoo在线中文用户手册(长期更新) -# http://www.sunpop.cn/documentation/user/10.0/zh_CN/index.html - -# Odoo10离线中文用户手册下载 -# http://www.sunpop.cn/odoo10_user_manual_document_offline/ -# Odoo10离线开发手册下载-含python教程,jquery参考,Jinja2模板,PostgresSQL参考(odoo开发必备) -# http://www.sunpop.cn/odoo10_developer_document_offline/ -# description: - -import logging - -from openerp import api, fields, models, _ - -_logger = logging.getLogger(__name__) - - -class AppUiConfigSettings(models.TransientModel): - _inherit = 'res.config.settings' - _name = 'app.ui.config.settings' - - _description = u"App Web UI enhance settings" - app_ui_show_search_date = fields.Boolean('Show date range search in tree/pivot view', help=u"Set 'True' to show, Set 'False' to hide") - app_ui_show_search_number = fields.Boolean('Show number range search tree/pivot view', help=u"Set 'True' to show, Set 'False' to hide") - - """Contoller able to render barcode images thanks to reportlab. - Samples: - - - - :param type: Accepted types: 'Codabar', 'Code11', 'Code128', 'EAN13', 'EAN8', 'Extended39', - 'Extended93', 'FIM', 'I2of5', 'MSI', 'POSTNET', 'QR', 'Standard39', 'Standard93', - 'UPCA', 'USPS_4State' - :param humanreadable: Accepted values: 0 (default) or 1. 1 will insert the readable value - at the bottom of the output image - """ - - app_ui_force_barcode = fields.Selection([ - ('Default', 'Odoo Default'), - ('Code128', 'Code128'), - ('Standard39', 'Standard39'), - ('EAN13', 'EAN13'), - ('QR', 'QR'), - ('Codabar', 'Codabar'), - ('Code11', 'Code11'), - ('Extended39', 'Extended39'), - ('EAN8', 'EAN8'), - ('Extended93', 'Extended93'), - ('FIM', 'FIM'), - ('I2of5', 'I2of5'), - ('MSI', 'MSI'), - ('POSTNET', 'POSTNET'), - ('Standard93', 'Standard93'), - ('UPCA', 'UPCA'), - ('USPS_4State', 'USPS_4State'), - ], string='Force all Odoo Barcode to:', help=u"Set Odoo Default to use the barcode odoo define in report(EAN13).") - - app_ui_allow_barcode = fields.Char('Allow Barcode, Seperated by ","', help=u"Default Allow QR and Standard39.") - - @api.model - def get_default_all(self, fields): - ir_config = self.env['ir.config_parameter'] - app_ui_show_search_date = True if ir_config.get_param('app_ui_show_search_date') == "True" else False - app_ui_show_search_number = True if ir_config.get_param('app_ui_show_search_number') == "True" else False - app_ui_force_barcode = ir_config.get_param('app_ui_force_barcode') - app_ui_allow_barcode = ir_config.get_param('app_ui_allow_barcode') - - return dict( - app_ui_show_search_date=app_ui_show_search_date, - app_ui_show_search_number=app_ui_show_search_number, - app_ui_force_barcode=app_ui_force_barcode, - app_ui_allow_barcode=app_ui_allow_barcode - ) - - @api.multi - def set_default_all(self): - self.ensure_one() - ir_config = self.env['ir.config_parameter'] - ir_config.set_param("app_ui_show_search_date", self.app_ui_show_search_date or "False") - ir_config.set_param("app_ui_show_search_number", self.app_ui_show_search_number or "False") - ir_config.set_param("app_ui_force_barcode", self.app_ui_force_barcode or "Default") - ir_config.set_param("app_ui_allow_barcode", self.app_ui_allow_barcode or "") - return True diff --git a/app_ui_enhance/models/report.py b/app_ui_enhance/models/report.py deleted file mode 100644 index d7082d88..00000000 --- a/app_ui_enhance/models/report.py +++ /dev/null @@ -1,35 +0,0 @@ -# -*- coding: utf-8 -*- - -from odoo import api, models, fields, _ -from odoo.addons import decimal_precision as dp -from odoo.exceptions import UserError, ValidationError - -class Report(models.Model): - _inherit = 'report' - - """Contoller able to render barcode images thanks to reportlab. - Samples: - - - - :param type: Accepted types: 'Codabar', 'Code11', 'Code128', 'EAN13', 'EAN8', 'Extended39', - 'Extended93', 'FIM', 'I2of5', 'MSI', 'POSTNET', 'QR', 'Standard39', 'Standard93', - 'UPCA', 'USPS_4State' - :param humanreadable: Accepted values: 0 (default) or 1. 1 will insert the readable value - at the bottom of the output image - """ - - def barcode(self, barcode_type, value, width=600, height=100, humanreadable=0): - ir_config = self.env['ir.config_parameter'] - app_ui_force_barcode = ir_config.get_param('app_ui_force_barcode', default='Default') - app_ui_allow_barcode = ir_config.get_param('app_ui_allow_barcode', default='') - allow = app_ui_allow_barcode.strip(',').split(',') - allowtype = tuple(allow) - if not app_ui_force_barcode or app_ui_force_barcode == 'Default': - return super(Report, self).barcode(barcode_type, value, width, height, humanreadable) - # 在允许的例外列表内 - elif barcode_type in allowtype: - return super(Report, self).barcode(barcode_type, value, width, height, humanreadable) - else: - return super(Report, self).barcode(app_ui_force_barcode, value, width, height, humanreadable) diff --git a/app_ui_enhance/static/description/date_range.jpg b/app_ui_enhance/static/description/date_range.jpg deleted file mode 100644 index 8b702b90..00000000 Binary files a/app_ui_enhance/static/description/date_range.jpg and /dev/null differ diff --git a/app_ui_enhance/static/description/date_range.png b/app_ui_enhance/static/description/date_range.png deleted file mode 100644 index 317099b9..00000000 Binary files a/app_ui_enhance/static/description/date_range.png and /dev/null differ diff --git a/app_ui_enhance/static/description/icon.png b/app_ui_enhance/static/description/icon.png deleted file mode 100644 index 4c57f611..00000000 Binary files a/app_ui_enhance/static/description/icon.png and /dev/null differ diff --git a/app_ui_enhance/static/description/index.html b/app_ui_enhance/static/description/index.html deleted file mode 100644 index b5f35b0a..00000000 --- a/app_ui_enhance/static/description/index.html +++ /dev/null @@ -1,137 +0,0 @@ -
    -
    -
    -

    App Search By Date or Number Range

    -
    -

    Please install app_odoo_customize First.

    -

    This moduld allows user to Search by date or number range in List view and Pivot view.

    -
    -
      -
    • 1.List all the date/datetime field to select range
    • -
    • 2.List all the integer/float/Monetary field to select range
    • -
    • 3.Auto get user timezone, global Timezone supported.
    • -
    • 4.Easy admin to enable/disable the search.
    • -
    -
    -
      -
    • 5.Instructions for Activating List background color property.
    • -
    • 6.Reset the barcode format.
    • -
    -
    -
    -
    -
    -
    -
    -

    Date range

    -
    - -
    -
    -
    - -
    -
    -

    Value range

    -
    - -
    -
    -
    - -
    -
    -

    Pivot View

    -
    - -
    -
    -
    - -
    -
    -

    How to setup

    - -

    There are 2 way to setup

    -

    1.Go to Menu: Settings->odooApp->UI Enhance

    -

    Setup what you need

    -
    - -
    -

    2. Go to Menu: Settings->Technical->Parameters->System Parameters

    -

    You can find "app_ui_show_search_date" and "app_ui_show_search_number"

    -

    Go to Menu: Settings->Technical->Parameters->System Parameters.

    -

    Set the Value to "False" if you do not want to show the search. And set "True" to show.

    -
    - -
    -
    -
    -
    -
    -
    -

    Web list View Background Color

    -
    -

    This module changes the line color of records based on condition like state of a record and helps distinguish between different sets of - records based on condition.

    - - -

    Set Backgroud color to filed in list view based on condition same as colors and style attributes of tree view.

    -
    -

    # Instructions for Activating List background color property

    -

    - Just add tree attribute like style and colors with condition you want. -

    -
    bg_colors="grey:state=='cancel';green:state=='draft';blue:state in ('done');red:state in ('waiting')"
    -

    eg.

    -
    -    <record id="view_demo_tree" model="ir.ui.view">
    -        <field name="name">demo.tree</field>
    -        <field name="model">demo.model</field>
    -        <field name="arch" type="xml">
    -            <tree bg_colors="grey:state=='cancel';green:state=='draft';blue:state in ('done');red:state in ('waiting')" name="demo_tree">
    -                <field name="name" string="Appointment" />
    -                <field name="state" />
    -            </tree>
    -        </field>
    -    </record>
    -                
    -
    -
    -
    -
    - -
    -
    -
    -

    Technical Help & Support

    -
    -
    -
    -

    - For any type of technical help & support requests, Feel free to contact us

    - - guohuadeng@hotmail.com -

    - Via QQ: 300883

    - - 300883@qq.com -
    -
    -

    - Visit our website for more support.

    - - http://www.sunpop.cn -
    -
    -
    -
    - -
    -
    \ No newline at end of file diff --git a/app_ui_enhance/static/description/list_pivot.jpg b/app_ui_enhance/static/description/list_pivot.jpg deleted file mode 100644 index 6b9ff4e8..00000000 Binary files a/app_ui_enhance/static/description/list_pivot.jpg and /dev/null differ diff --git a/app_ui_enhance/static/description/list_pivot.png b/app_ui_enhance/static/description/list_pivot.png deleted file mode 100644 index 59bf05cd..00000000 Binary files a/app_ui_enhance/static/description/list_pivot.png and /dev/null differ diff --git a/app_ui_enhance/static/description/odoo_web_tree_bg_color.png b/app_ui_enhance/static/description/odoo_web_tree_bg_color.png deleted file mode 100644 index 6101c90a..00000000 Binary files a/app_ui_enhance/static/description/odoo_web_tree_bg_color.png and /dev/null differ diff --git a/app_ui_enhance/static/description/setup.png b/app_ui_enhance/static/description/setup.png deleted file mode 100644 index 0c79efd6..00000000 Binary files a/app_ui_enhance/static/description/setup.png and /dev/null differ diff --git a/app_ui_enhance/static/description/setup1.jpg b/app_ui_enhance/static/description/setup1.jpg deleted file mode 100644 index c2f5c09f..00000000 Binary files a/app_ui_enhance/static/description/setup1.jpg and /dev/null differ diff --git a/app_ui_enhance/static/description/setup1.png b/app_ui_enhance/static/description/setup1.png deleted file mode 100644 index e44465d4..00000000 Binary files a/app_ui_enhance/static/description/setup1.png and /dev/null differ diff --git a/app_ui_enhance/static/description/setup2.jpg b/app_ui_enhance/static/description/setup2.jpg deleted file mode 100644 index dcfaaf54..00000000 Binary files a/app_ui_enhance/static/description/setup2.jpg and /dev/null differ diff --git a/app_ui_enhance/static/description/value_range.jpg b/app_ui_enhance/static/description/value_range.jpg deleted file mode 100644 index 424b1369..00000000 Binary files a/app_ui_enhance/static/description/value_range.jpg and /dev/null differ diff --git a/app_ui_enhance/static/description/value_range.png b/app_ui_enhance/static/description/value_range.png deleted file mode 100644 index e1b33e3b..00000000 Binary files a/app_ui_enhance/static/description/value_range.png and /dev/null differ diff --git a/app_ui_enhance/static/description/web_bg_color_change.png b/app_ui_enhance/static/description/web_bg_color_change.png deleted file mode 100644 index cecd5f37..00000000 Binary files a/app_ui_enhance/static/description/web_bg_color_change.png and /dev/null differ diff --git a/app_ui_enhance/static/src/css/app_report_enhance.css b/app_ui_enhance/static/src/css/app_report_enhance.css deleted file mode 100644 index 8d69b38c..00000000 --- a/app_ui_enhance/static/src/css/app_report_enhance.css +++ /dev/null @@ -1,10 +0,0 @@ -/* report更紧凑,无边框 */ -.table-tight td { - padding: 2px !important; - border-top: 0px !important; -} -.table-tight > thead > tr > th, .table-tight > tbody > tr > th, .table-tight > tfoot > tr > th, -.table-tight > thead > tr > td, .table-tight > tbody > tr > td, .table-tight > tfoot > tr > td{ - padding: 2px !important; - border-top: 0px !important; -} \ No newline at end of file diff --git a/app_ui_enhance/static/src/css/app_ui_enhance.css b/app_ui_enhance/static/src/css/app_ui_enhance.css deleted file mode 100644 index 929a62b0..00000000 --- a/app_ui_enhance/static/src/css/app_ui_enhance.css +++ /dev/null @@ -1,71 +0,0 @@ -.tree_search_item { - cursor: pointer; -} - -.tree_search_item .selected a:before { - font-family: FontAwesome; - position: absolute; - left: 6px; - top: 3px; - content: ""; -} - -/* -list标头不换行 -*/ -.table-responsive { - white-space: nowrap !important; -} - -/* -sheet全宽 -*/ -.o_form_view .o_form_sheet_bg .o_form_sheet { - max-width: 98% !important; -} - -/* -强制表格滚动,企业版/社区版中生效 -*/ - -.force_scroll .table-responsive { - white-space: nowrap !important; - overflow: hidden !important; - overflow-x: auto !important; -} - -.force_scroll ::-webkit-scrollbar { - height: 16px !important; -} - -/* 滚动条的滑轨背景颜色 */ -.force_scroll ::-webkit-scrollbar-track { - background-color: lightgrey !important; - -webkit-border-radius: 2em !important; - -moz-border-radius: 2em !important; - border-radius: 2em !important; -} - -/* 滑块颜色 */ -.force_scroll ::-webkit-scrollbar-thumb { - background-color: #666666 !important; - -webkit-border-radius: 2em !important; - -moz-border-radius: 2em !important; - border-radius: 2em !important; -} - -/* 横向滚动条和纵向滚动条相交处尖角的颜色 */ -.force_scroll ::-webkit-scrollbar-corner { - background-color: black; -} - -/* report更紧凑,无边框 */ -.table-tight td { - padding: 2px !important; - border-top: 0px !important; -} -.table-tight > thead > tr > th, .table-tight > tbody > tr > th, .table-tight > tfoot > tr > th, -.table-tight > thead > tr > td, .table-tight > tbody > tr > td, .table-tight > tfoot > tr > td{ - padding: 2px !important; - border-top: 0px !important; -} \ No newline at end of file diff --git a/app_ui_enhance/static/src/css/app_web_enhance.css b/app_ui_enhance/static/src/css/app_web_enhance.css deleted file mode 100644 index 05039982..00000000 --- a/app_ui_enhance/static/src/css/app_web_enhance.css +++ /dev/null @@ -1,60 +0,0 @@ -.tree_search_item { - cursor: pointer; -} - -.tree_search_item .selected a:before { - font-family: FontAwesome; - position: absolute; - left: 6px; - top: 3px; - content: ""; -} - -/* -list标头不换行 -*/ -.table-responsive { - white-space: nowrap !important; -} - -/* -sheet全宽 -*/ -.o_form_view .o_form_sheet_bg .o_form_sheet { - max-width: 98% !important; -} - -/* -强制表格滚动,企业版/社区版中生效 -*/ - -.force_scroll .table-responsive { - white-space: nowrap !important; - overflow: hidden !important; - overflow-x: auto !important; -} - -.force_scroll ::-webkit-scrollbar { - height: 16px !important; -} - -/* 滚动条的滑轨背景颜色 */ -.force_scroll ::-webkit-scrollbar-track { - background-color: lightgrey !important; - -webkit-border-radius: 2em !important; - -moz-border-radius: 2em !important; - border-radius: 2em !important; -} - -/* 滑块颜色 */ -.force_scroll ::-webkit-scrollbar-thumb { - background-color: #666666 !important; - -webkit-border-radius: 2em !important; - -moz-border-radius: 2em !important; - border-radius: 2em !important; -} - -/* 横向滚动条和纵向滚动条相交处尖角的颜色 */ -.force_scroll ::-webkit-scrollbar-corner { - background-color: black; -} \ No newline at end of file diff --git a/app_ui_enhance/static/src/css/web_list_bg_color.css b/app_ui_enhance/static/src/css/web_list_bg_color.css deleted file mode 100644 index 2afb2614..00000000 --- a/app_ui_enhance/static/src/css/web_list_bg_color.css +++ /dev/null @@ -1,7 +0,0 @@ - -.oe_list_field_bg_color div{ - display: inline-block; - height: 100%; - position: relative; - width: 100%; -} diff --git a/app_ui_enhance/static/src/js/pivot.js b/app_ui_enhance/static/src/js/pivot.js deleted file mode 100644 index f98ce534..00000000 --- a/app_ui_enhance/static/src/js/pivot.js +++ /dev/null @@ -1,261 +0,0 @@ -odoo.define('app_ui_enhance.pivot', function (require) { -"use strict"; - -var time = require('web.time'); -var core = require('web.core'); -var data = require('web.data'); -var session = require('web.session'); -var utils = require('web.utils'); -var Model = require('web.Model'); -var PivotView = require('web.PivotView'); -var datepicker = require('web.datepicker'); - -var _t = core._t; -var _lt = core._lt; -var QWeb = core.qweb; - -PivotView.include({ - - init: function() { - this._super.apply(this, arguments); - this.ts_fields = []; - }, - - tgl_on_button_click: function (event) { - var self = this; - var $target = $(event.target), - field, key, first_item; - - field = $target.parent().data('field'); - key = $target.parent().data('key'); - - if (field == -1) { - first_item = $target.parent().parent().children('.tgl_first_item.selected'); - if (!first_item.length) { - $target.parent().parent().children('li').removeClass('selected') - } - } else { - first_item = $target.parent().parent().children('.tgl_first_item').removeClass('selected'); - } - - $target.parent().toggleClass('selected'); - this.tgl_search() - event.stopPropagation(); - - }, - - - render_buttons: function($node) { - var self = this; - var ts_context = this.context.tree_search; - - this._super.apply(this, arguments); - - var l10n = _t.database.parameters; - var datepickers_options = { - pickTime: false, - startDate: moment({ y: 1900 }), - endDate: moment().add(200, "y"), - calendarWeeks: true, - icons : { - time: 'fa fa-clock-o', - date: 'fa fa-calendar', - up: 'fa fa-chevron-up', - down: 'fa fa-chevron-down' - }, - language : moment.locale(), - format : time.strftime_to_moment_format(l10n.date_format), - } - - $(QWeb.render("odooApp.TreeSearch.Placeholder", {})).appendTo($node); - - var date_fields = []; - // 增加参数控制app_ui_show_search_date - new Model('ir.config_parameter').call('search_read', [[['key', '=', 'app_ui_show_search_date']], ['value']]).then(function (show) { - if (show.length >= 1 && (show[0]['value'] == "True")) { - _.each(self.fields, function (value, key, list) { - if (value.store && value.type === "datetime" || value.type === "date") { - date_fields.push([key, value.string]); - } - }); - - if (date_fields.length > 0) { - self.$search_date = $(QWeb.render('odooApp.SearchDate', {'date_fields': date_fields})) - self.$search_date.find('.app_start_date').datetimepicker(datepickers_options); - self.$search_date.find('.app_end_date').datetimepicker(datepickers_options); - - self.$search_date.find('.app_start_date').on('keypress', function (e) { - self.do_keypress(e); - }); - self.$search_date.find('.app_end_date').on('keypress', function (e) { - self.do_keypress(e); - }); - self.$search_date.appendTo($('.o_cp_buttons')); - self.set_search_btn(1); - } - } - }); - - var number_fields = []; - - // 增加参数控制app_ui_show_search_number - new Model('ir.config_parameter').call('search_read', [[['key', '=', 'app_ui_show_search_number']], ['value']]).then(function (show) { - if (show.length >= 1 && (show[0]['value'] == "True")) { - number_fields = []; - _.each(self.fields, function (value, key, list) { - if (value.string && value.string.length > 1 && value.store && (value.type === "integer" || value.type === "float" || value.type === "monetary")) { - number_fields.push([key, value.string]); - } - }); - - if (number_fields.length > 0) { - self.$search_number = $(QWeb.render('odooApp.SearchNumber', {'number_fields': number_fields})) - - self.$search_number.find('.app_start_number').on('keypress', function (e) { - self.do_keypress(e); - }); - self.$search_number.find('.app_end_number').on('keypress', function (e) { - self.do_keypress(e); - }); - self.$search_number.appendTo($('.o_cp_buttons')); - self.set_search_btn(1); - } - } - }); - - //显示搜索键,因为pivot特殊,故要单独处理 - }, - - set_search_btn: function (show) { - var self = this; - if (self.$search_btn) { - self.$search_btn.remove(); - } - if (show) { - self.$search_btn = $(QWeb.render("odooApp.odooapp-btn", {})).appendTo($('.o_cp_buttons')); - self.$search_btn.children('.odooapp-search-btn').on('click', function () { - self.tgl_search(); - }); - self.$search_btn.children('.odooapp-clear-btn').on('click', function () { - self.do_clear(); - }); - } - }, - - do_search: function(domain, context, group_by) { - var self = this; - this.last_domain = domain; - this.last_context = context; - this.last_group_by = group_by; - this.old_search = _.bind(this._super, this); - return self.tgl_search(); - }, - - do_keypress: function(e) { - var self = this; - var keynum = window.event ? e.keyCode : e.which; - if (keynum==13) - return self.tgl_search(); - }, - - do_clear: function() { - var self = this; - if (self.$search_date) { - self.$search_date.find('.app_start_date').val(''); - self.$search_date.find('.app_end_date').val(''); - } - if (self.$search_number) { - self.$search_number.find('.app_start_number').val(''); - self.$search_number.find('.app_end_number').val(''); - } - return self.tgl_search(); - }, - - tgl_search: function() { - var self = this; - var domain = [], value, value_tmp; - - _.each(self.ts_fields, function(field){ - value = $('.app_item_' + field).val(); - - var select_fields = $('.app_multi_item_' + field).children('.selected'), - select_value = []; - if (select_fields.length > 0) { - _.each(select_fields, function(item){ - value_tmp = $(item).data('field'); - if (value_tmp > 0) { - select_value.push($(item).data('field')); - } - }); - if (select_value.length) { - domain.push([field, 'in', select_value]); - } - - } - }); - -// 注意,date和datetime型的处理是不同的,已处理完 - if (self.$search_date) { - var start_date = self.$search_date.find('.app_start_date').val(), - end_date = self.$search_date.find('.app_end_date').val(), - field = self.$search_date.find('.app_select_field').val(), - field_type = 'datetime'; - var tz = session.user_context.tz, - start_utc, - end_utc; - - _.each(self.columns, function (value, key, list) { - if (value.name == field) { - field_type = value.type; - return false; - } - }); - - moment.locale(tz); - var l10n = _t.database.parameters; - if (start_date) { - if (field_type == 'date') { - //日期类型,无须utc处理 - start_date = moment(moment(start_date, time.strftime_to_moment_format(l10n.date_format))).format('YYYY-MM-DD'); - domain.push([field, '>=', start_date]); - } else { - //日期时间,处理utc - start_date = moment(moment(start_date, time.strftime_to_moment_format(l10n.date_format))).format('YYYY-MM-DD 00:00:00'); - start_utc = moment(start_date) - domain.push([field, '>=', start_utc]); - } - } - if (end_date) { - if (field_type == 'date') { - end_date = moment(moment(end_date, time.strftime_to_moment_format(l10n.date_format))).format('YYYY-MM-DD'); - domain.push([field, '<=', end_date]); - } else { - end_date = moment(moment(end_date, time.strftime_to_moment_format(l10n.date_format))).format('YYYY-MM-DD 00:00:00'); - end_utc = moment(end_date) - domain.push([field, '<=', end_utc]); - } - } - } - - if (self.$search_number) { - var start_range = self.$search_number.find('.app_start_number').val(), - end_range = self.$search_number.find('.app_end_number').val(), - range_field = self.$search_number.find('.app_select_range_field').val(); - - if (start_range) { - domain.push([range_field, '>=', parseInt(start_range)]); - } - if (end_range) { - domain.push([range_field, '<=', parseInt(end_range)]); - } - } - // console.log(domain); - var compound_domain = new data.CompoundDomain(self.last_domain, domain); - self.dataset.domain = compound_domain.eval(); - return self.old_search(compound_domain, self.last_context, self.last_group_by); - }, - - -}); - -}); \ No newline at end of file diff --git a/app_ui_enhance/static/src/js/tree.js b/app_ui_enhance/static/src/js/tree.js deleted file mode 100644 index ce587996..00000000 --- a/app_ui_enhance/static/src/js/tree.js +++ /dev/null @@ -1,260 +0,0 @@ -odoo.define('app_ui_enhance.tree', function (require) { -"use strict"; - -var time = require('web.time'); -var core = require('web.core'); -var data = require('web.data'); -var session = require('web.session'); -var utils = require('web.utils'); -var Model = require('web.Model'); -var ListView = require('web.ListView'); -var datepicker = require('web.datepicker'); -var ViewManager = require('web.ViewManager') -var _t = core._t; -var _lt = core._lt; -var QWeb = core.qweb; - -ListView.include({ - - init: function(parent, dataset, view_id, options) { - this._super.apply(this, arguments); - this.ts_context = dataset.context.tree_search; - this.fields_range = dataset.context.fields_range; - this.ts_fields = []; - }, - - on_button_click: function (event) { - var self = this; - var $target = $(event.target), - field, key, first_item; - - field = $target.parent().data('field'); - key = $target.parent().data('key'); - - if (field == -1) { - first_item = $target.parent().parent().children('.tgl_first_item.selected'); - if (!first_item.length) { - $target.parent().parent().children('li').removeClass('selected') - } - } else { - first_item = $target.parent().parent().children('.tgl_first_item').removeClass('selected'); - } - - $target.parent().toggleClass('selected'); - this.tgl_search() - event.stopPropagation(); - - }, - - render_buttons: function($node) { - var self = this; - this._super.apply(this, arguments); - - var l10n = _t.database.parameters; - var datepickers_options = { - pickTime: false, - startDate: moment({ y: 1900 }), - endDate: moment().add(200, "y"), - calendarWeeks: true, - icons : { - time: 'fa fa-clock-o', - date: 'fa fa-calendar', - up: 'fa fa-chevron-up', - down: 'fa fa-chevron-down' - }, - language : moment.locale(), - format : time.strftime_to_moment_format(l10n.date_format), - } - - self.$buttons.find('.app-search').remove(); - - var date_fields = []; - // 增加参数控制app_ui_show_search_date - new Model('ir.config_parameter').call('search_read', [[['key', '=', 'app_ui_show_search_date']], ['value']]).then(function (show) { - if (show.length >= 1 && (show[0]['value'] == "True")) { - _.each(self.columns, function (value, key, list) { - if (value.store && value.type === "datetime" || value.type === "date") { - date_fields.push([value.name, value.string, value.type]); - } - }); - if (date_fields.length > 0) { - self.$search_date = $(QWeb.render('odooApp.SearchDate', {'date_fields': date_fields})) - self.$search_date.find('.app_start_date').datetimepicker(datepickers_options); - self.$search_date.find('.app_end_date').datetimepicker(datepickers_options); - - self.$search_date.find('.app_start_date').on('keypress', function (e) { - self.do_keypress(e); - }); - self.$search_date.find('.app_end_date').on('keypress', function (e) { - self.do_keypress(e); - }); - self.$search_date.appendTo(self.$buttons); - self.set_search_btn(1); - } - } - }); - - - var number_fields = []; - - // 增加参数控制app_ui_show_search_number - new Model('ir.config_parameter').call('search_read', [[['key', '=', 'app_ui_show_search_number']], ['value']]).then(function (show) { - if (show.length >= 1 && (show[0]['value'] == "True")) { - _.each(self.columns, function (value, key, list) { - if (value.string && value.string.length > 1 && value.store && (value.type === "integer" || value.type === "float" || value.type === "monetary")) { - number_fields.push([value.name, value.string]); - } - }); - - if (number_fields.length == 0) { - if (self.fields_range) { - number_fields = self.fields_range; - } - } - if (number_fields.length > 0) { - self.$search_number = $(QWeb.render('odooApp.SearchNumber', {'number_fields': number_fields})) - - self.$search_number.find('.app_start_number').on('keypress', function (e) { - self.do_keypress(e); - }); - self.$search_number.find('.app_end_number').on('keypress', function (e) { - self.do_keypress(e); - }); - self.$search_number.appendTo(self.$buttons); - self.set_search_btn(1); - } - } - }); - }, - - set_search_btn: function (show) { - var self = this; - if (self.$search_btn) { - self.$search_btn.remove(); - } - if (show) { - self.$search_btn = $(QWeb.render("odooApp.odooapp-btn", {})).appendTo(self.$buttons); - self.$search_btn.children('.odooapp-search-btn').on('click', function () { - self.tgl_search(); - }); - self.$search_btn.children('.odooapp-clear-btn').on('click', function () { - self.do_clear(); - }); - } - }, - - do_search: function(domain, context, group_by) { - var self = this; - this.last_domain = domain; - this.last_context = context; - this.last_group_by = group_by; - this.old_search = _.bind(this._super, this); - return self.tgl_search(); - }, - - do_keypress: function(e) { - var self = this; - var keynum = window.event ? e.keyCode : e.which; - if (keynum==13) - return self.tgl_search(); - }, - - do_clear: function() { - var self = this; - if (self.$search_date) { - self.$search_date.find('.app_start_date').val(''); - self.$search_date.find('.app_end_date').val(''); - } - if (self.$search_number) { - self.$search_number.find('.app_start_number').val(''); - self.$search_number.find('.app_end_number').val(''); - } - return self.tgl_search(); - }, - - tgl_search: function() { - var self = this; - var domain = [], value, value_tmp; - - _.each(self.ts_fields, function(field){ - value = $('.app_item_' + field).val(); - - var select_fields = $('.app_multi_item_' + field).children('.selected'), - select_value = []; - if (select_fields.length > 0) { - _.each(select_fields, function(item){ - value_tmp = $(item).data('field'); - if (value_tmp > 0) { - select_value.push($(item).data('field')); - } - }); - if (select_value.length) { - domain.push([field, 'in', select_value]); - } - - } - }); -// 注意,date和datetime型的处理是不同的,已处理完 - if (self.$search_date) { - var start_date = self.$search_date.find('.app_start_date').val(), - end_date = self.$search_date.find('.app_end_date').val(), - field = self.$search_date.find('.app_select_field').val(), - field_type = 'datetime'; - var tz = session.user_context.tz, - start_utc, - end_utc; - - _.each(self.columns, function (value, key, list) { - if (value.name == field) { - field_type = value.type; - return false; - } - }); - - moment.locale(tz); - var l10n = _t.database.parameters; - if (start_date) { - if (field_type === 'date') { - //日期类型,无须utc处理 - start_date = moment(moment(start_date, time.strftime_to_moment_format(l10n.date_format))).format('YYYY-MM-DD'); - domain.push([field, '>=', start_date]); - } else { - //日期时间,处理utc - start_date = moment(moment(start_date, time.strftime_to_moment_format(l10n.date_format))).format('YYYY-MM-DD 00:00:00'); - start_utc = moment(start_date) - domain.push([field, '>=', start_utc]); - } - } - if (end_date) { - if (field_type === 'date') { - end_date = moment(moment(end_date, time.strftime_to_moment_format(l10n.date_format))).format('YYYY-MM-DD'); - domain.push([field, '<=', end_date]); - } else { - end_date = moment(moment(end_date, time.strftime_to_moment_format(l10n.date_format))).format('YYYY-MM-DD 00:00:00'); - end_utc = moment(end_date) - domain.push([field, '<=', end_utc]); - } - } - } - - if (self.$search_number) { - var start_range = self.$search_number.find('.app_start_number').val(), - end_range = self.$search_number.find('.app_end_number').val(), - range_field = self.$search_number.find('.app_select_range_field').val(); - - if (start_range) { - domain.push([range_field, '>=', parseInt(start_range)]); - } - if (end_range) { - domain.push([range_field, '<=', parseInt(end_range)]); - } - } - // console.log(domain); - var compound_domain = new data.CompoundDomain(self.last_domain, domain); - self.dataset.domain = compound_domain.eval(); - return self.old_search(compound_domain, self.last_context, self.last_group_by); - }, - -}); - -}); \ No newline at end of file diff --git a/app_ui_enhance/static/src/js/web_draggable_dialog.js b/app_ui_enhance/static/src/js/web_draggable_dialog.js deleted file mode 100644 index ae191708..00000000 --- a/app_ui_enhance/static/src/js/web_draggable_dialog.js +++ /dev/null @@ -1,17 +0,0 @@ -odoo.define('app_ui_enhance.web_draggable_dialog', function (require) { -'use strict'; - - var Dialog = require('web.Dialog'); - - Dialog.include({ - open: function () { - this._super.apply(this, arguments); - this._opened.done(function(){ - $(".modal.in").draggable({ - handle: ".modal-header" - }); - }); - return this; - }, - }); -}); diff --git a/app_ui_enhance/static/src/js/web_list_bg_color.js b/app_ui_enhance/static/src/js/web_list_bg_color.js deleted file mode 100644 index 0778f211..00000000 --- a/app_ui_enhance/static/src/js/web_list_bg_color.js +++ /dev/null @@ -1,57 +0,0 @@ -odoo.define('app_ui_enhance.list_bg_color', function (require) { -"use strict"; - -var core = require('web.core'); -var common = require('web.form_common'); -var Model = require('web.Model'); -var time = require('web.time'); -var ListView = require('web.ListView'); -var session = require('web.session'); -var compatibility = require('web.compatibility'); - - ListView.include({ - willStart: function() { - if (this.fields_view.arch.attrs.bg_colors) { - this.bg_colors = _(this.fields_view.arch.attrs.bg_colors.split(';')).chain() - .compact() - .map(function(color_pair) { - var pair = color_pair.split(':'), - color = pair[0], - expr = pair[1]; - return [color, py.parse(py.tokenize(expr)), expr]; - }).value(); - - if (!this.colors) { this.colors = [] } - } - return this._super(); - }, - - style_for: function (record) { - var len, style= ''; - - var context = _.extend({}, record.attributes, { - uid: session.uid, - current_date: moment().format('YYYY-MM-DD') - // TODO: time, datetime, relativedelta - }); - - var i; - var pair; - var expression; - style = this._super(record); - - if (!this.bg_colors) { return style; } - for(i=0, len=this.bg_colors.length; i - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - -
    - - - -
    -
    -
    -
    - - - - - - -
    - -
      -
    • All
    • -
    • - -
    • -
    -
    - -
    - - -
    \ No newline at end of file diff --git a/app_ui_enhance/views/app_ui_config_settings_view.xml b/app_ui_enhance/views/app_ui_config_settings_view.xml deleted file mode 100644 index 7e9241ab..00000000 --- a/app_ui_enhance/views/app_ui_config_settings_view.xml +++ /dev/null @@ -1,51 +0,0 @@ - - - - - App Odoo Customize Settings - app.ui.config.settings - -
    -
    -
    - - - - - - - - - -
    -
    - - - UI Enhance - ir.actions.act_window - app.ui.config.settings - form - inline - - - -
    -
    diff --git a/app_ui_enhance/views/template_view.xml b/app_ui_enhance/views/template_view.xml deleted file mode 100644 index ff147b7d..00000000 --- a/app_ui_enhance/views/template_view.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/app_widget_extra/__init__.py b/app_widget_extra/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/app_widget_extra/__openerp__.py b/app_widget_extra/__openerp__.py deleted file mode 100644 index 1b41543c..00000000 --- a/app_widget_extra/__openerp__.py +++ /dev/null @@ -1,119 +0,0 @@ -# -*- coding: utf-8 -*- - -# Created on 2017-11-05 -# author: 广州尚鹏,http://www.sunpop.cn -# email: 300883@qq.com -# resource of Sunpop -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). - -# Odoo在线中文用户手册(长期更新) -# http://www.sunpop.cn/documentation/user/10.0/zh_CN/index.html - -# Odoo10离线中文用户手册下载 -# http://www.sunpop.cn/odoo10_user_manual_document_offline/ -# Odoo10离线开发手册下载-含python教程,jquery参考,Jinja2模板,PostgresSQL参考(odoo开发必备) -# http://www.sunpop.cn/odoo10_developer_document_offline/ -# description: - -# base on 'author': "Gilvan Leal", -# website': "https://gilvanleal.github.io/odoowidgets/", -{ - 'name': "App widget extra(Inputmask Widget)", - 'author': "Sunpop.cn", - 'website': 'http://www.sunpop.cn', - 'currency': 'EUR', - 'price': 38, - - 'summary': """ - A Widget to make masks on form fields""", - - 'description': """ -================ -Inputmask Widget -================ - -Based on jquery.inputmask 3.x `Docs in GitHub -`_. - -| An Inputmask Widget helps the user with the input by ensuring a predefined format. -| This can be useful for dates, numerics, phone numbers, ... - -Instructions: -------------- - -- Just add attribute *widget="mask"* and *data-inputmask[-]=""* to **** on form, tree and kanban - - Some examples:: - - - - - - - Or:: - - - - - - - **Note:** Use *contenteditable="true"* for apply mask in others HTML tags: span, div, etc. **Improve** - - -- Just add attribute *widget="mask_regex"* and *data-inputmask[-regex]=""* to **** - - With the regex extension you can use any regular expression as a mask. Currently this does only input restriction. There is no further masking visualization. - - Example email validation:: - - - -- Masking definition: - - :9: Numeric value - :a: Alphabetical value - :\*: Alphanumeric value - :A: Alphabetical uppercasing - :&: Alfanumeric uppercasing - (Use **&** for escape **&** in XML file) - :#: Hexadecimal - -- Attributes: - - :mask: The mask to use. - :repeat: Mask repeat function. Repeat the mask definition x-times. - :greedy: Toggle to allocate as much possible or the opposite. Non-greedy repeat function. - :placeholder: Change the mask placeholder. Default: "_" - :autounmask: Automatically unmask the value when retrieved. Default: false. - :removemaskonsubmit: Remove the mask before submitting the form.Default: false - :clearmaskonlostfocus: Remove the empty mask on blur or when not empty removes the optional trailing part Default: true - :insertmode: Toggle to insert or overwrite input. Default: true. - :clearincomplete: Clear the incomplete input on blur. - :alias: The alias to use. - -- Aliases: - - Some aliases found in the extensions are: email, currency, decimal, integer, date, datetime, dd/mm/yyyy, url, ip, etc. - - Docs: - - * `Date and Datetime `_ - * `Numeric `_ - * `Regex `_ - * `Phone `_ - * `Other `_""", - - - # Categories can be used to filter modules in modules listing - # Check https://github.com/odoo/odoo/blob/master/openerp/addons/base/module/module_data.xml - # for the full list - 'category': 'Extra Tools', - 'version': '1.0', - - # any module necessary for this one to work correctly - 'depends': ['web'], - - # always loaded - "data": ['views/inputmask_templates.xml'], - "qweb": ['static/src/xml/*.xml'], - 'images': ['static/description/main_screenshot.png'] -} diff --git a/app_widget_extra/static/description/icon.png b/app_widget_extra/static/description/icon.png deleted file mode 100644 index 4c57f611..00000000 Binary files a/app_widget_extra/static/description/icon.png and /dev/null differ diff --git a/app_widget_extra/static/description/main_screenshot.png b/app_widget_extra/static/description/main_screenshot.png deleted file mode 100644 index ea045220..00000000 Binary files a/app_widget_extra/static/description/main_screenshot.png and /dev/null differ diff --git a/app_widget_extra/static/lib/jquery.inputmask/jquery.inputmask.bundle.js b/app_widget_extra/static/lib/jquery.inputmask/jquery.inputmask.bundle.js deleted file mode 100644 index 7e02a74c..00000000 --- a/app_widget_extra/static/lib/jquery.inputmask/jquery.inputmask.bundle.js +++ /dev/null @@ -1,2710 +0,0 @@ -/*! -* jquery.inputmask.bundle.js -* https://github.com/RobinHerbots/jquery.inputmask -* Copyright (c) 2010 - 2017 Robin Herbots -* Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php) -* Version: 3.3.5-34 -*/ -!function($) { - function Inputmask(alias, options, internal) { - return this instanceof Inputmask ? (this.el = void 0, this.events = {}, this.maskset = void 0, - this.refreshValue = !1, void (internal !== !0 && ($.isPlainObject(alias) ? options = alias : (options = options || {}, - options.alias = alias), this.opts = $.extend(!0, {}, this.defaults, options), this.noMasksCache = options && void 0 !== options.definitions, - this.userOptions = options || {}, this.isRTL = this.opts.numericInput, resolveAlias(this.opts.alias, options, this.opts)))) : new Inputmask(alias, options, internal); - } - function resolveAlias(aliasStr, options, opts) { - var aliasDefinition = Inputmask.prototype.aliases[aliasStr]; - return aliasDefinition ? (aliasDefinition.alias && resolveAlias(aliasDefinition.alias, void 0, opts), - $.extend(!0, opts, aliasDefinition), $.extend(!0, opts, options), !0) : (null === opts.mask && (opts.mask = aliasStr), - !1); - } - function generateMaskSet(opts, nocache) { - function generateMask(mask, metadata, opts) { - if (null !== mask && "" !== mask) { - if (1 === mask.length && opts.greedy === !1 && 0 !== opts.repeat && (opts.placeholder = ""), - opts.repeat > 0 || "*" === opts.repeat || "+" === opts.repeat) { - var repeatStart = "*" === opts.repeat ? 0 : "+" === opts.repeat ? 1 : opts.repeat; - mask = opts.groupmarker.start + mask + opts.groupmarker.end + opts.quantifiermarker.start + repeatStart + "," + opts.repeat + opts.quantifiermarker.end; - } - var masksetDefinition; - return void 0 === Inputmask.prototype.masksCache[mask] || nocache === !0 ? (masksetDefinition = { - mask: mask, - maskToken: Inputmask.prototype.analyseMask(mask, opts), - validPositions: {}, - _buffer: void 0, - buffer: void 0, - tests: {}, - metadata: metadata, - maskLength: void 0 - }, nocache !== !0 && (Inputmask.prototype.masksCache[opts.numericInput ? mask.split("").reverse().join("") : mask] = masksetDefinition, - masksetDefinition = $.extend(!0, {}, Inputmask.prototype.masksCache[opts.numericInput ? mask.split("").reverse().join("") : mask]))) : masksetDefinition = $.extend(!0, {}, Inputmask.prototype.masksCache[opts.numericInput ? mask.split("").reverse().join("") : mask]), - masksetDefinition; - } - } - var ms; - if ($.isFunction(opts.mask) && (opts.mask = opts.mask(opts)), $.isArray(opts.mask)) { - if (opts.mask.length > 1) { - opts.keepStatic = null === opts.keepStatic || opts.keepStatic; - var altMask = opts.groupmarker.start; - return $.each(opts.numericInput ? opts.mask.reverse() : opts.mask, function(ndx, msk) { - altMask.length > 1 && (altMask += opts.groupmarker.end + opts.alternatormarker + opts.groupmarker.start), - altMask += void 0 === msk.mask || $.isFunction(msk.mask) ? msk : msk.mask; - }), altMask += opts.groupmarker.end, generateMask(altMask, opts.mask, opts); - } - opts.mask = opts.mask.pop(); - } - return opts.mask && (ms = void 0 === opts.mask.mask || $.isFunction(opts.mask.mask) ? generateMask(opts.mask, opts.mask, opts) : generateMask(opts.mask.mask, opts.mask, opts)), - ms; - } - function maskScope(actionObj, maskset, opts) { - function getMaskTemplate(baseOnInput, minimalPos, includeMode) { - minimalPos = minimalPos || 0; - var ndxIntlzr, test, testPos, maskTemplate = [], pos = 0, lvp = getLastValidPosition(); - maxLength = void 0 !== el ? el.maxLength : void 0, maxLength === -1 && (maxLength = void 0); - do baseOnInput === !0 && getMaskSet().validPositions[pos] ? (testPos = getMaskSet().validPositions[pos], - test = testPos.match, ndxIntlzr = testPos.locator.slice(), maskTemplate.push(includeMode === !0 ? testPos.input : includeMode === !1 ? test.nativeDef : getPlaceholder(pos, test))) : (testPos = getTestTemplate(pos, ndxIntlzr, pos - 1), - test = testPos.match, ndxIntlzr = testPos.locator.slice(), (opts.jitMasking === !1 || pos < lvp || "number" == typeof opts.jitMasking && isFinite(opts.jitMasking) && opts.jitMasking > pos) && maskTemplate.push(includeMode === !1 ? test.nativeDef : getPlaceholder(pos, test))), - pos++; while ((void 0 === maxLength || pos < maxLength) && (null !== test.fn || "" !== test.def) || minimalPos > pos); - return "" === maskTemplate[maskTemplate.length - 1] && maskTemplate.pop(), getMaskSet().maskLength = pos + 1, - maskTemplate; - } - function getMaskSet() { - return maskset; - } - function resetMaskSet(soft) { - var maskset = getMaskSet(); - maskset.buffer = void 0, soft !== !0 && (maskset._buffer = void 0, maskset.validPositions = {}, - maskset.p = 0); - } - function getLastValidPosition(closestTo, strict, validPositions) { - var before = -1, after = -1, valids = validPositions || getMaskSet().validPositions; - void 0 === closestTo && (closestTo = -1); - for (var posNdx in valids) { - var psNdx = parseInt(posNdx); - valids[psNdx] && (strict || valids[psNdx].generatedInput !== !0) && (psNdx <= closestTo && (before = psNdx), - psNdx >= closestTo && (after = psNdx)); - } - return before !== -1 && closestTo - before > 1 || after < closestTo ? before : after; - } - function stripValidPositions(start, end, nocheck, strict) { - function IsEnclosedStatic(pos) { - var posMatch = getMaskSet().validPositions[pos]; - if (void 0 !== posMatch && null === posMatch.match.fn) { - var prevMatch = getMaskSet().validPositions[pos - 1], nextMatch = getMaskSet().validPositions[pos + 1]; - return void 0 !== prevMatch && void 0 !== nextMatch; - } - return !1; - } - var i, startPos = start, positionsClone = $.extend(!0, {}, getMaskSet().validPositions), needsValidation = !1; - for (getMaskSet().p = start, i = end - 1; i >= startPos; i--) void 0 !== getMaskSet().validPositions[i] && (nocheck !== !0 && (!getMaskSet().validPositions[i].match.optionality && IsEnclosedStatic(i) || opts.canClearPosition(getMaskSet(), i, getLastValidPosition(), strict, opts) === !1) || delete getMaskSet().validPositions[i]); - for (resetMaskSet(!0), i = startPos + 1; i <= getLastValidPosition(); ) { - for (;void 0 !== getMaskSet().validPositions[startPos]; ) startPos++; - if (i < startPos && (i = startPos + 1), void 0 === getMaskSet().validPositions[i] && isMask(i)) i++; else { - var t = getTestTemplate(i); - needsValidation === !1 && positionsClone[startPos] && positionsClone[startPos].match.def === t.match.def ? (getMaskSet().validPositions[startPos] = $.extend(!0, {}, positionsClone[startPos]), - getMaskSet().validPositions[startPos].input = t.input, delete getMaskSet().validPositions[i], - i++) : positionCanMatchDefinition(startPos, t.match.def) ? isValid(startPos, t.input || getPlaceholder(i), !0) !== !1 && (delete getMaskSet().validPositions[i], - i++, needsValidation = !0) : isMask(i) || (i++, startPos--), startPos++; - } - } - resetMaskSet(!0); - } - function determineTestTemplate(tests, guessNextBest) { - for (var testPos, testPositions = tests, lvp = getLastValidPosition(), lvTest = getMaskSet().validPositions[lvp] || getTests(0)[0], lvTestAltArr = void 0 !== lvTest.alternation ? lvTest.locator[lvTest.alternation].toString().split(",") : [], ndx = 0; ndx < testPositions.length && (testPos = testPositions[ndx], - !(testPos.match && (opts.greedy && testPos.match.optionalQuantifier !== !0 || (testPos.match.optionality === !1 || testPos.match.newBlockMarker === !1) && testPos.match.optionalQuantifier !== !0) && (void 0 === lvTest.alternation || lvTest.alternation !== testPos.alternation || void 0 !== testPos.locator[lvTest.alternation] && checkAlternationMatch(testPos.locator[lvTest.alternation].toString().split(","), lvTestAltArr))) || guessNextBest === !0 && (null !== testPos.match.fn || /[0-9a-bA-Z]/.test(testPos.match.def))); ndx++) ; - return testPos; - } - function getTestTemplate(pos, ndxIntlzr, tstPs) { - return getMaskSet().validPositions[pos] || determineTestTemplate(getTests(pos, ndxIntlzr ? ndxIntlzr.slice() : ndxIntlzr, tstPs)); - } - function getTest(pos) { - return getMaskSet().validPositions[pos] ? getMaskSet().validPositions[pos] : getTests(pos)[0]; - } - function positionCanMatchDefinition(pos, def) { - for (var valid = !1, tests = getTests(pos), tndx = 0; tndx < tests.length; tndx++) if (tests[tndx].match && tests[tndx].match.def === def) { - valid = !0; - break; - } - return valid; - } - function getTests(pos, ndxIntlzr, tstPs) { - function resolveTestFromToken(maskToken, ndxInitializer, loopNdx, quantifierRecurse) { - function handleMatch(match, loopNdx, quantifierRecurse) { - function isFirstMatch(latestMatch, tokenGroup) { - var firstMatch = 0 === $.inArray(latestMatch, tokenGroup.matches); - return firstMatch || $.each(tokenGroup.matches, function(ndx, match) { - if (match.isQuantifier === !0 && (firstMatch = isFirstMatch(latestMatch, tokenGroup.matches[ndx - 1]))) return !1; - }), firstMatch; - } - function resolveNdxInitializer(pos, alternateNdx, targetAlternation) { - var bestMatch, indexPos; - return (getMaskSet().tests[pos] || getMaskSet().validPositions[pos]) && $.each(getMaskSet().tests[pos] || [ getMaskSet().validPositions[pos] ], function(ndx, lmnt) { - var alternation = void 0 !== targetAlternation ? targetAlternation : lmnt.alternation, ndxPos = void 0 !== lmnt.locator[alternation] ? lmnt.locator[alternation].toString().indexOf(alternateNdx) : -1; - (void 0 === indexPos || ndxPos < indexPos) && ndxPos !== -1 && (bestMatch = lmnt, - indexPos = ndxPos); - }), bestMatch ? bestMatch.locator.slice((void 0 !== targetAlternation ? targetAlternation : bestMatch.alternation) + 1) : void 0 !== targetAlternation ? resolveNdxInitializer(pos, alternateNdx) : void 0; - } - function staticCanMatchDefinition(source, target) { - return null === source.match.fn && null !== target.match.fn && target.match.fn.test(source.match.def, getMaskSet(), pos, !1, opts, !1); - } - if (testPos > 1e4) throw "Inputmask: There is probably an error in your mask definition or in the code. Create an issue on github with an example of the mask you are using. " + getMaskSet().mask; - if (testPos === pos && void 0 === match.matches) return matches.push({ - match: match, - locator: loopNdx.reverse(), - cd: cacheDependency - }), !0; - if (void 0 !== match.matches) { - if (match.isGroup && quantifierRecurse !== match) { - if (match = handleMatch(maskToken.matches[$.inArray(match, maskToken.matches) + 1], loopNdx)) return !0; - } else if (match.isOptional) { - var optionalToken = match; - if (match = resolveTestFromToken(match, ndxInitializer, loopNdx, quantifierRecurse)) { - if (latestMatch = matches[matches.length - 1].match, !isFirstMatch(latestMatch, optionalToken)) return !0; - insertStop = !0, testPos = pos; - } - } else if (match.isAlternator) { - var maltMatches, alternateToken = match, malternateMatches = [], currentMatches = matches.slice(), loopNdxCnt = loopNdx.length, altIndex = ndxInitializer.length > 0 ? ndxInitializer.shift() : -1; - if (altIndex === -1 || "string" == typeof altIndex) { - var amndx, currentPos = testPos, ndxInitializerClone = ndxInitializer.slice(), altIndexArr = []; - if ("string" == typeof altIndex) altIndexArr = altIndex.split(","); else for (amndx = 0; amndx < alternateToken.matches.length; amndx++) altIndexArr.push(amndx); - for (var ndx = 0; ndx < altIndexArr.length; ndx++) { - if (amndx = parseInt(altIndexArr[ndx]), matches = [], ndxInitializer = resolveNdxInitializer(testPos, amndx, loopNdxCnt) || ndxInitializerClone.slice(), - match = handleMatch(alternateToken.matches[amndx] || maskToken.matches[amndx], [ amndx ].concat(loopNdx), quantifierRecurse) || match, - match !== !0 && void 0 !== match && altIndexArr[altIndexArr.length - 1] < alternateToken.matches.length) { - var ntndx = $.inArray(match, maskToken.matches) + 1; - maskToken.matches.length > ntndx && (match = handleMatch(maskToken.matches[ntndx], [ ntndx ].concat(loopNdx.slice(1, loopNdx.length)), quantifierRecurse), - match && (altIndexArr.push(ntndx.toString()), $.each(matches, function(ndx, lmnt) { - lmnt.alternation = loopNdx.length - 1; - }))); - } - maltMatches = matches.slice(), testPos = currentPos, matches = []; - for (var ndx1 = 0; ndx1 < maltMatches.length; ndx1++) { - var altMatch = maltMatches[ndx1], hasMatch = !1; - altMatch.alternation = altMatch.alternation || loopNdxCnt; - for (var ndx2 = 0; ndx2 < malternateMatches.length; ndx2++) { - var altMatch2 = malternateMatches[ndx2]; - if (("string" != typeof altIndex || $.inArray(altMatch.locator[altMatch.alternation].toString(), altIndexArr) !== -1) && (altMatch.match.def === altMatch2.match.def || staticCanMatchDefinition(altMatch, altMatch2))) { - hasMatch = altMatch.match.nativeDef === altMatch2.match.nativeDef, altMatch.alternation == altMatch2.alternation && altMatch2.locator[altMatch2.alternation].toString().indexOf(altMatch.locator[altMatch.alternation]) === -1 && (altMatch2.locator[altMatch2.alternation] = altMatch2.locator[altMatch2.alternation] + "," + altMatch.locator[altMatch.alternation], - altMatch2.alternation = altMatch.alternation, null == altMatch.match.fn && (altMatch2.na = altMatch2.na || altMatch.locator[altMatch.alternation].toString(), - altMatch2.na.indexOf(altMatch.locator[altMatch.alternation]) === -1 && (altMatch2.na = altMatch2.na + "," + altMatch.locator[altMatch.alternation]))); - break; - } - } - hasMatch || malternateMatches.push(altMatch); - } - } - "string" == typeof altIndex && (malternateMatches = $.map(malternateMatches, function(lmnt, ndx) { - if (isFinite(ndx)) { - var mamatch, alternation = lmnt.alternation, altLocArr = lmnt.locator[alternation].toString().split(","); - lmnt.locator[alternation] = void 0, lmnt.alternation = void 0; - for (var alndx = 0; alndx < altLocArr.length; alndx++) mamatch = $.inArray(altLocArr[alndx], altIndexArr) !== -1, - mamatch && (void 0 !== lmnt.locator[alternation] ? (lmnt.locator[alternation] += ",", - lmnt.locator[alternation] += altLocArr[alndx]) : lmnt.locator[alternation] = parseInt(altLocArr[alndx]), - lmnt.alternation = alternation); - if (void 0 !== lmnt.locator[alternation]) return lmnt; - } - })), matches = currentMatches.concat(malternateMatches), testPos = pos, insertStop = matches.length > 0, - ndxInitializer = ndxInitializerClone.slice(); - } else match = handleMatch(alternateToken.matches[altIndex] || maskToken.matches[altIndex], [ altIndex ].concat(loopNdx), quantifierRecurse); - if (match) return !0; - } else if (match.isQuantifier && quantifierRecurse !== maskToken.matches[$.inArray(match, maskToken.matches) - 1]) for (var qt = match, qndx = ndxInitializer.length > 0 ? ndxInitializer.shift() : 0; qndx < (isNaN(qt.quantifier.max) ? qndx + 1 : qt.quantifier.max) && testPos <= pos; qndx++) { - var tokenGroup = maskToken.matches[$.inArray(qt, maskToken.matches) - 1]; - if (match = handleMatch(tokenGroup, [ qndx ].concat(loopNdx), tokenGroup)) { - if (latestMatch = matches[matches.length - 1].match, latestMatch.optionalQuantifier = qndx > qt.quantifier.min - 1, - isFirstMatch(latestMatch, tokenGroup)) { - if (qndx > qt.quantifier.min - 1) { - insertStop = !0, testPos = pos; - break; - } - return !0; - } - return !0; - } - } else if (match = resolveTestFromToken(match, ndxInitializer, loopNdx, quantifierRecurse)) return !0; - } else testPos++; - } - for (var tndx = ndxInitializer.length > 0 ? ndxInitializer.shift() : 0; tndx < maskToken.matches.length; tndx++) if (maskToken.matches[tndx].isQuantifier !== !0) { - var match = handleMatch(maskToken.matches[tndx], [ tndx ].concat(loopNdx), quantifierRecurse); - if (match && testPos === pos) return match; - if (testPos > pos) break; - } - } - function mergeLocators(tests) { - var locator = []; - return $.isArray(tests) || (tests = [ tests ]), tests.length > 0 && (void 0 === tests[0].alternation ? (locator = determineTestTemplate(tests.slice()).locator.slice(), - 0 === locator.length && (locator = tests[0].locator.slice())) : $.each(tests, function(ndx, tst) { - if ("" !== tst.def) if (0 === locator.length) locator = tst.locator.slice(); else for (var i = 0; i < locator.length; i++) tst.locator[i] && locator[i].toString().indexOf(tst.locator[i]) === -1 && (locator[i] += "," + tst.locator[i]); - })), locator; - } - function filterTests(tests) { - return opts.keepStatic && pos > 0 && tests.length > 1 + ("" === tests[tests.length - 1].match.def ? 1 : 0) && tests[0].match.optionality !== !0 && tests[0].match.optionalQuantifier !== !0 && null === tests[0].match.fn && !/[0-9a-bA-Z]/.test(tests[0].match.def) ? [ determineTestTemplate(tests) ] : tests; - } - var latestMatch, maskTokens = getMaskSet().maskToken, testPos = ndxIntlzr ? tstPs : 0, ndxInitializer = ndxIntlzr ? ndxIntlzr.slice() : [ 0 ], matches = [], insertStop = !1, cacheDependency = ndxIntlzr ? ndxIntlzr.join("") : ""; - if (pos > -1) { - if (void 0 === ndxIntlzr) { - for (var test, previousPos = pos - 1; void 0 === (test = getMaskSet().validPositions[previousPos] || getMaskSet().tests[previousPos]) && previousPos > -1; ) previousPos--; - void 0 !== test && previousPos > -1 && (ndxInitializer = mergeLocators(test), cacheDependency = ndxInitializer.join(""), - testPos = previousPos); - } - if (getMaskSet().tests[pos] && getMaskSet().tests[pos][0].cd === cacheDependency) return filterTests(getMaskSet().tests[pos]); - for (var mtndx = ndxInitializer.shift(); mtndx < maskTokens.length; mtndx++) { - var match = resolveTestFromToken(maskTokens[mtndx], ndxInitializer, [ mtndx ]); - if (match && testPos === pos || testPos > pos) break; - } - } - return (0 === matches.length || insertStop) && matches.push({ - match: { - fn: null, - cardinality: 0, - optionality: !0, - casing: null, - def: "", - placeholder: "" - }, - locator: [], - cd: cacheDependency - }), void 0 !== ndxIntlzr && getMaskSet().tests[pos] ? filterTests($.extend(!0, [], matches)) : (getMaskSet().tests[pos] = $.extend(!0, [], matches), - filterTests(getMaskSet().tests[pos])); - } - function getBufferTemplate() { - return void 0 === getMaskSet()._buffer && (getMaskSet()._buffer = getMaskTemplate(!1, 1), - void 0 === getMaskSet().buffer && getMaskSet()._buffer.slice()), getMaskSet()._buffer; - } - function getBuffer(noCache) { - return void 0 !== getMaskSet().buffer && noCache !== !0 || (getMaskSet().buffer = getMaskTemplate(!0, getLastValidPosition(), !0)), - getMaskSet().buffer; - } - function refreshFromBuffer(start, end, buffer) { - var i; - if (start === !0) resetMaskSet(), start = 0, end = buffer.length; else for (i = start; i < end; i++) delete getMaskSet().validPositions[i]; - for (i = start; i < end; i++) resetMaskSet(!0), buffer[i] !== opts.skipOptionalPartCharacter && isValid(i, buffer[i], !0, !0); - } - function casing(elem, test, pos) { - switch (opts.casing || test.casing) { - case "upper": - elem = elem.toUpperCase(); - break; - - case "lower": - elem = elem.toLowerCase(); - break; - - case "title": - var posBefore = getMaskSet().validPositions[pos - 1]; - elem = 0 === pos || posBefore && posBefore.input === String.fromCharCode(Inputmask.keyCode.SPACE) ? elem.toUpperCase() : elem.toLowerCase(); - } - return elem; - } - function checkAlternationMatch(altArr1, altArr2, na) { - for (var naNdx, altArrC = opts.greedy ? altArr2 : altArr2.slice(0, 1), isMatch = !1, naArr = void 0 !== na ? na.split(",") : [], i = 0; i < naArr.length; i++) (naNdx = altArr1.indexOf(naArr[i])) !== -1 && altArr1.splice(naNdx, 1); - for (var alndx = 0; alndx < altArr1.length; alndx++) if ($.inArray(altArr1[alndx], altArrC) !== -1) { - isMatch = !0; - break; - } - return isMatch; - } - function isValid(pos, c, strict, fromSetValid, fromAlternate) { - function isSelection(posObj) { - var selection = isRTL ? posObj.begin - posObj.end > 1 || posObj.begin - posObj.end === 1 && opts.insertMode : posObj.end - posObj.begin > 1 || posObj.end - posObj.begin === 1 && opts.insertMode; - return selection && 0 === posObj.begin && posObj.end === getMaskSet().maskLength ? "full" : selection; - } - function _isValid(position, c, strict) { - var rslt = !1; - return $.each(getTests(position), function(ndx, tst) { - for (var test = tst.match, loopend = c ? 1 : 0, chrs = "", i = test.cardinality; i > loopend; i--) chrs += getBufferElement(position - (i - 1)); - if (c && (chrs += c), getBuffer(!0), rslt = null != test.fn ? test.fn.test(chrs, getMaskSet(), position, strict, opts, isSelection(pos)) : (c === test.def || c === opts.skipOptionalPartCharacter) && "" !== test.def && { - c: getPlaceholder(position, test, !0) || test.def, - pos: position - }, rslt !== !1) { - var elem = void 0 !== rslt.c ? rslt.c : c; - elem = elem === opts.skipOptionalPartCharacter && null === test.fn ? getPlaceholder(position, test, !0) || test.def : elem; - var validatedPos = position, possibleModifiedBuffer = getBuffer(); - if (void 0 !== rslt.remove && ($.isArray(rslt.remove) || (rslt.remove = [ rslt.remove ]), - $.each(rslt.remove.sort(function(a, b) { - return b - a; - }), function(ndx, lmnt) { - stripValidPositions(lmnt, lmnt + 1, !0); - })), void 0 !== rslt.insert && ($.isArray(rslt.insert) || (rslt.insert = [ rslt.insert ]), - $.each(rslt.insert.sort(function(a, b) { - return a - b; - }), function(ndx, lmnt) { - isValid(lmnt.pos, lmnt.c, !0, fromSetValid); - })), rslt.refreshFromBuffer) { - var refresh = rslt.refreshFromBuffer; - if (strict = !0, refreshFromBuffer(refresh === !0 ? refresh : refresh.start, refresh.end, possibleModifiedBuffer), - void 0 === rslt.pos && void 0 === rslt.c) return rslt.pos = getLastValidPosition(), - !1; - if (validatedPos = void 0 !== rslt.pos ? rslt.pos : position, validatedPos !== position) return rslt = $.extend(rslt, isValid(validatedPos, elem, !0, fromSetValid)), - !1; - } else if (rslt !== !0 && void 0 !== rslt.pos && rslt.pos !== position && (validatedPos = rslt.pos, - refreshFromBuffer(position, validatedPos, getBuffer().slice()), validatedPos !== position)) return rslt = $.extend(rslt, isValid(validatedPos, elem, !0)), - !1; - return (rslt === !0 || void 0 !== rslt.pos || void 0 !== rslt.c) && (ndx > 0 && resetMaskSet(!0), - setValidPosition(validatedPos, $.extend({}, tst, { - input: casing(elem, test, validatedPos) - }), fromSetValid, isSelection(pos)) || (rslt = !1), !1); - } - }), rslt; - } - function alternate(pos, c, strict) { - var lastAlt, alternation, altPos, prevAltPos, i, validPos, altNdxs, decisionPos, validPsClone = $.extend(!0, {}, getMaskSet().validPositions), isValidRslt = !1, lAltPos = getLastValidPosition(); - for (prevAltPos = getMaskSet().validPositions[lAltPos]; lAltPos >= 0; lAltPos--) if (altPos = getMaskSet().validPositions[lAltPos], - altPos && void 0 !== altPos.alternation) { - if (lastAlt = lAltPos, alternation = getMaskSet().validPositions[lastAlt].alternation, - prevAltPos.locator[altPos.alternation] !== altPos.locator[altPos.alternation]) break; - prevAltPos = altPos; - } - if (void 0 !== alternation) { - decisionPos = parseInt(lastAlt); - var decisionTaker = void 0 !== prevAltPos.locator[prevAltPos.alternation || alternation] ? prevAltPos.locator[prevAltPos.alternation || alternation] : altNdxs[0]; - decisionTaker.length > 0 && (decisionTaker = decisionTaker.split(",")[0]); - var possibilityPos = getMaskSet().validPositions[decisionPos], prevPos = getMaskSet().validPositions[decisionPos - 1]; - $.each(getTests(decisionPos, prevPos ? prevPos.locator : void 0, decisionPos - 1), function(ndx, test) { - altNdxs = test.locator[alternation] ? test.locator[alternation].toString().split(",") : []; - for (var mndx = 0; mndx < altNdxs.length; mndx++) { - var validInputs = [], staticInputsBeforePos = 0, staticInputsBeforePosAlternate = 0, verifyValidInput = !1; - if (decisionTaker < altNdxs[mndx] && (void 0 === test.na || $.inArray(altNdxs[mndx], test.na.split(",")) === -1)) { - getMaskSet().validPositions[decisionPos] = $.extend(!0, {}, test); - var possibilities = getMaskSet().validPositions[decisionPos].locator; - for (getMaskSet().validPositions[decisionPos].locator[alternation] = parseInt(altNdxs[mndx]), - null == test.match.fn ? (possibilityPos.input !== test.match.def && (verifyValidInput = !0, - possibilityPos.generatedInput !== !0 && validInputs.push(possibilityPos.input)), - staticInputsBeforePosAlternate++, getMaskSet().validPositions[decisionPos].generatedInput = !/[0-9a-bA-Z]/.test(test.match.def), - getMaskSet().validPositions[decisionPos].input = test.match.def) : getMaskSet().validPositions[decisionPos].input = possibilityPos.input, - i = decisionPos + 1; i < getLastValidPosition(void 0, !0) + 1; i++) validPos = getMaskSet().validPositions[i], - validPos && validPos.generatedInput !== !0 && /[0-9a-bA-Z]/.test(validPos.input) ? validInputs.push(validPos.input) : i < pos && staticInputsBeforePos++, - delete getMaskSet().validPositions[i]; - for (verifyValidInput && validInputs[0] === test.match.def && validInputs.shift(), - resetMaskSet(!0), isValidRslt = !0; validInputs.length > 0; ) { - var input = validInputs.shift(); - if (input !== opts.skipOptionalPartCharacter && !(isValidRslt = isValid(getLastValidPosition(void 0, !0) + 1, input, !1, fromSetValid, !0))) break; - } - if (isValidRslt) { - getMaskSet().validPositions[decisionPos].locator = possibilities; - var targetLvp = getLastValidPosition(pos) + 1; - for (i = decisionPos + 1; i < getLastValidPosition() + 1; i++) validPos = getMaskSet().validPositions[i], - (void 0 === validPos || null == validPos.match.fn) && i < pos + (staticInputsBeforePosAlternate - staticInputsBeforePos) && staticInputsBeforePosAlternate++; - pos += staticInputsBeforePosAlternate - staticInputsBeforePos, isValidRslt = isValid(pos > targetLvp ? targetLvp : pos, c, strict, fromSetValid, !0); - } - if (isValidRslt) return !1; - resetMaskSet(), getMaskSet().validPositions = $.extend(!0, {}, validPsClone); - } - } - }); - } - return isValidRslt; - } - function trackbackAlternations(originalPos, newPos) { - var vp = getMaskSet().validPositions[newPos]; - if (vp) for (var targetLocator = vp.locator, tll = targetLocator.length, ps = originalPos; ps < newPos; ps++) if (void 0 === getMaskSet().validPositions[ps] && !isMask(ps, !0)) { - var tests = getTests(ps).slice(), bestMatch = determineTestTemplate(tests, !0), equality = -1; - "" === tests[tests.length - 1].match.def && tests.pop(), $.each(tests, function(ndx, tst) { - for (var i = 0; i < tll; i++) { - if (void 0 === tst.locator[i] || !checkAlternationMatch(tst.locator[i].toString().split(","), targetLocator[i].toString().split(","), tst.na)) { - var targetAI = targetLocator[i], bestMatchAI = bestMatch.locator[i], tstAI = tst.locator[i]; - targetAI - bestMatchAI > Math.abs(targetAI - tstAI) && (bestMatch = tst); - break; - } - equality < i && (equality = i, bestMatch = tst); - } - }), bestMatch = $.extend({}, bestMatch, { - input: getPlaceholder(ps, bestMatch.match, !0) || bestMatch.match.def - }), bestMatch.generatedInput = !0, setValidPosition(ps, bestMatch, !0), getMaskSet().validPositions[newPos] = void 0, - _isValid(newPos, vp.input, !0); - } - } - function setValidPosition(pos, validTest, fromSetValid, isSelection) { - if (isSelection || opts.insertMode && void 0 !== getMaskSet().validPositions[pos] && void 0 === fromSetValid) { - var i, positionsClone = $.extend(!0, {}, getMaskSet().validPositions), lvp = getLastValidPosition(void 0, !0); - for (i = pos; i <= lvp; i++) delete getMaskSet().validPositions[i]; - getMaskSet().validPositions[pos] = $.extend(!0, {}, validTest); - var j, valid = !0, vps = getMaskSet().validPositions, needsValidation = !1, initialLength = getMaskSet().maskLength; - for (i = j = pos; i <= lvp; i++) { - var t = positionsClone[i]; - if (void 0 !== t) for (var posMatch = j; posMatch < getMaskSet().maskLength && (null === t.match.fn && vps[i] && (vps[i].match.optionalQuantifier === !0 || vps[i].match.optionality === !0) || null != t.match.fn); ) { - if (posMatch++, needsValidation === !1 && positionsClone[posMatch] && positionsClone[posMatch].match.def === t.match.def) getMaskSet().validPositions[posMatch] = $.extend(!0, {}, positionsClone[posMatch]), - getMaskSet().validPositions[posMatch].input = t.input, fillMissingNonMask(posMatch), - j = posMatch, valid = !0; else if (positionCanMatchDefinition(posMatch, t.match.def)) { - var result = isValid(posMatch, t.input, !0, !0); - valid = result !== !1, j = result.caret || result.insert ? getLastValidPosition() : posMatch, - needsValidation = !0; - } else if (valid = t.generatedInput === !0, !valid && posMatch >= getMaskSet().maskLength - 1) break; - if (getMaskSet().maskLength < initialLength && (getMaskSet().maskLength = initialLength), - valid) break; - } - if (!valid) break; - } - if (!valid) return getMaskSet().validPositions = $.extend(!0, {}, positionsClone), - resetMaskSet(!0), !1; - } else getMaskSet().validPositions[pos] = $.extend(!0, {}, validTest); - return resetMaskSet(!0), !0; - } - function fillMissingNonMask(maskPos) { - for (var pndx = maskPos - 1; pndx > -1 && !getMaskSet().validPositions[pndx]; pndx--) ; - var testTemplate, testsFromPos; - for (pndx++; pndx < maskPos; pndx++) void 0 === getMaskSet().validPositions[pndx] && (opts.jitMasking === !1 || opts.jitMasking > pndx) && (testsFromPos = getTests(pndx, getTestTemplate(pndx - 1).locator, pndx - 1).slice(), - "" === testsFromPos[testsFromPos.length - 1].match.def && testsFromPos.pop(), testTemplate = determineTestTemplate(testsFromPos), - testTemplate && (testTemplate.match.def === opts.radixPointDefinitionSymbol || !isMask(pndx, !0) || $.inArray(opts.radixPoint, getBuffer()) < pndx && testTemplate.match.fn && testTemplate.match.fn.test(getPlaceholder(pndx), getMaskSet(), pndx, !1, opts)) && (result = _isValid(pndx, getPlaceholder(pndx, testTemplate.match, !0) || (null == testTemplate.match.fn ? testTemplate.match.def : "" !== getPlaceholder(pndx) ? getPlaceholder(pndx) : getBuffer()[pndx]), !0), - result !== !1 && (getMaskSet().validPositions[result.pos || pndx].generatedInput = !0))); - } - strict = strict === !0; - var maskPos = pos; - void 0 !== pos.begin && (maskPos = isRTL && !isSelection(pos) ? pos.end : pos.begin); - var result = !1, positionsClone = $.extend(!0, {}, getMaskSet().validPositions); - if (fillMissingNonMask(maskPos), isSelection(pos) && (handleRemove(void 0, Inputmask.keyCode.DELETE, pos), - maskPos = getMaskSet().p), maskPos < getMaskSet().maskLength && (result = _isValid(maskPos, c, strict), - (!strict || fromSetValid === !0) && result === !1)) { - var currentPosValid = getMaskSet().validPositions[maskPos]; - if (!currentPosValid || null !== currentPosValid.match.fn || currentPosValid.match.def !== c && c !== opts.skipOptionalPartCharacter) { - if ((opts.insertMode || void 0 === getMaskSet().validPositions[seekNext(maskPos)]) && !isMask(maskPos, !0)) for (var nPos = maskPos + 1, snPos = seekNext(maskPos); nPos <= snPos; nPos++) if (result = _isValid(nPos, c, strict), - result !== !1) { - trackbackAlternations(maskPos, void 0 !== result.pos ? result.pos : nPos), maskPos = nPos; - break; - } - } else result = { - caret: seekNext(maskPos) - }; - } - return result === !1 && opts.keepStatic && !strict && fromAlternate !== !0 && (result = alternate(maskPos, c, strict)), - result === !0 && (result = { - pos: maskPos - }), $.isFunction(opts.postValidation) && result !== !1 && !strict && fromSetValid !== !0 && (result = !!opts.postValidation(getBuffer(!0), result, opts) && result), - void 0 === result.pos && (result.pos = maskPos), result === !1 && (resetMaskSet(!0), - getMaskSet().validPositions = $.extend(!0, {}, positionsClone)), result; - } - function isMask(pos, strict) { - var test; - if (strict ? (test = getTestTemplate(pos).match, "" === test.def && (test = getTest(pos).match)) : test = getTest(pos).match, - null != test.fn) return test.fn; - if (strict !== !0 && pos > -1) { - var tests = getTests(pos); - return tests.length > 1 + ("" === tests[tests.length - 1].match.def ? 1 : 0); - } - return !1; - } - function seekNext(pos, newBlock) { - var maskL = getMaskSet().maskLength; - if (pos >= maskL) return maskL; - for (var position = pos; ++position < maskL && (newBlock === !0 && (getTest(position).match.newBlockMarker !== !0 || !isMask(position)) || newBlock !== !0 && !isMask(position)); ) ; - return position; - } - function seekPrevious(pos, newBlock) { - var tests, position = pos; - if (position <= 0) return 0; - for (;--position > 0 && (newBlock === !0 && getTest(position).match.newBlockMarker !== !0 || newBlock !== !0 && !isMask(position) && (tests = getTests(position), - tests.length < 2 || 2 === tests.length && "" === tests[1].match.def)); ) ; - return position; - } - function getBufferElement(position) { - return void 0 === getMaskSet().validPositions[position] ? getPlaceholder(position) : getMaskSet().validPositions[position].input; - } - function writeBuffer(input, buffer, caretPos, event, triggerInputEvent) { - if (event && $.isFunction(opts.onBeforeWrite)) { - var result = opts.onBeforeWrite(event, buffer, caretPos, opts); - if (result) { - if (result.refreshFromBuffer) { - var refresh = result.refreshFromBuffer; - refreshFromBuffer(refresh === !0 ? refresh : refresh.start, refresh.end, result.buffer || buffer), - buffer = getBuffer(!0); - } - void 0 !== caretPos && (caretPos = void 0 !== result.caret ? result.caret : caretPos); - } - } - input.inputmask._valueSet(buffer.join("")), void 0 === caretPos || void 0 !== event && "blur" === event.type ? renderColorMask(input, buffer, caretPos) : caret(input, caretPos), - triggerInputEvent === !0 && (skipInputEvent = !0, $(input).trigger("input")); - } - function getPlaceholder(pos, test, returnPL) { - if (test = test || getTest(pos).match, void 0 !== test.placeholder || returnPL === !0) return $.isFunction(test.placeholder) ? test.placeholder(opts) : test.placeholder; - if (null === test.fn) { - if (pos > -1 && void 0 === getMaskSet().validPositions[pos]) { - var prevTest, tests = getTests(pos), staticAlternations = []; - if (tests.length > 1 + ("" === tests[tests.length - 1].match.def ? 1 : 0)) for (var i = 0; i < tests.length; i++) if (tests[i].match.optionality !== !0 && tests[i].match.optionalQuantifier !== !0 && (null === tests[i].match.fn || void 0 === prevTest || tests[i].match.fn.test(prevTest.match.def, getMaskSet(), pos, !0, opts) !== !1) && (staticAlternations.push(tests[i]), - null === tests[i].match.fn && (prevTest = tests[i]), staticAlternations.length > 1 && /[0-9a-bA-Z]/.test(staticAlternations[0].match.def))) return opts.placeholder.charAt(pos % opts.placeholder.length); - } - return test.def; - } - return opts.placeholder.charAt(pos % opts.placeholder.length); - } - function checkVal(input, writeOut, strict, nptvl, initiatingEvent, stickyCaret) { - function isTemplateMatch() { - var isMatch = !1, charCodeNdx = getBufferTemplate().slice(initialNdx, seekNext(initialNdx)).join("").indexOf(charCodes); - if (charCodeNdx !== -1 && !isMask(initialNdx)) { - isMatch = !0; - for (var bufferTemplateArr = getBufferTemplate().slice(initialNdx, initialNdx + charCodeNdx), i = 0; i < bufferTemplateArr.length; i++) if (" " !== bufferTemplateArr[i]) { - isMatch = !1; - break; - } - } - return isMatch; - } - var inputValue = nptvl.slice(), charCodes = "", initialNdx = 0, result = void 0; - if (resetMaskSet(), getMaskSet().p = seekNext(-1), !strict) if (opts.autoUnmask !== !0) { - var staticInput = getBufferTemplate().slice(0, seekNext(-1)).join(""), matches = inputValue.join("").match(new RegExp("^" + Inputmask.escapeRegex(staticInput), "g")); - matches && matches.length > 0 && (inputValue.splice(0, matches.length * staticInput.length), - initialNdx = seekNext(initialNdx)); - } else initialNdx = seekNext(initialNdx); - if ($.each(inputValue, function(ndx, charCode) { - if (void 0 !== charCode) { - var keypress = new $.Event("keypress"); - keypress.which = charCode.charCodeAt(0), charCodes += charCode; - var lvp = getLastValidPosition(void 0, !0), lvTest = getMaskSet().validPositions[lvp], nextTest = getTestTemplate(lvp + 1, lvTest ? lvTest.locator.slice() : void 0, lvp); - if (!isTemplateMatch() || strict || opts.autoUnmask) { - var pos = strict ? ndx : null == nextTest.match.fn && nextTest.match.optionality && lvp + 1 < getMaskSet().p ? lvp + 1 : getMaskSet().p; - result = EventHandlers.keypressEvent.call(input, keypress, !0, !1, strict, pos), - initialNdx = pos + 1, charCodes = ""; - } else result = EventHandlers.keypressEvent.call(input, keypress, !0, !1, !0, lvp + 1); - if (!strict && $.isFunction(opts.onBeforeWrite) && (result = opts.onBeforeWrite(keypress, getBuffer(), result.forwardPosition, opts), - result && result.refreshFromBuffer)) { - var refresh = result.refreshFromBuffer; - refreshFromBuffer(refresh === !0 ? refresh : refresh.start, refresh.end, result.buffer), - resetMaskSet(!0), result.caret && (getMaskSet().p = result.caret); - } - } - }), writeOut) { - var caretPos = void 0, lvp = getLastValidPosition(); - document.activeElement === input && (initiatingEvent || result) && (caretPos = caret(input).begin, - initiatingEvent && result === !1 && (caretPos = seekNext(getLastValidPosition(caretPos))), - result && stickyCaret !== !0 && (caretPos < lvp + 1 || lvp === -1) && (caretPos = opts.numericInput && void 0 === result.caret ? seekPrevious(result.forwardPosition) : result.forwardPosition)), - writeBuffer(input, getBuffer(), caretPos, initiatingEvent || new $.Event("checkval")); - } - } - function unmaskedvalue(input) { - if (input) { - if (void 0 === input.inputmask) return input.value; - input.inputmask && input.inputmask.refreshValue && EventHandlers.setValueEvent.call(input); - } - var umValue = [], vps = getMaskSet().validPositions; - for (var pndx in vps) vps[pndx].match && null != vps[pndx].match.fn && umValue.push(vps[pndx].input); - var unmaskedValue = 0 === umValue.length ? "" : (isRTL ? umValue.reverse() : umValue).join(""); - if ($.isFunction(opts.onUnMask)) { - var bufferValue = (isRTL ? getBuffer().slice().reverse() : getBuffer()).join(""); - unmaskedValue = opts.onUnMask(bufferValue, unmaskedValue, opts) || unmaskedValue; - } - return unmaskedValue; - } - function caret(input, begin, end, notranslate) { - function translatePosition(pos) { - if (notranslate !== !0 && isRTL && "number" == typeof pos && (!opts.greedy || "" !== opts.placeholder)) { - var bffrLght = getBuffer().join("").length; - pos = bffrLght - pos; - } - return pos; - } - var range; - if ("number" != typeof begin) return input.setSelectionRange ? (begin = input.selectionStart, - end = input.selectionEnd) : window.getSelection ? (range = window.getSelection().getRangeAt(0), - range.commonAncestorContainer.parentNode !== input && range.commonAncestorContainer !== input || (begin = range.startOffset, - end = range.endOffset)) : document.selection && document.selection.createRange && (range = document.selection.createRange(), - begin = 0 - range.duplicate().moveStart("character", -input.inputmask._valueGet().length), - end = begin + range.text.length), { - begin: translatePosition(begin), - end: translatePosition(end) - }; - begin = translatePosition(begin), end = translatePosition(end), end = "number" == typeof end ? end : begin; - var scrollCalc = parseInt(((input.ownerDocument.defaultView || window).getComputedStyle ? (input.ownerDocument.defaultView || window).getComputedStyle(input, null) : input.currentStyle).fontSize) * end; - if (input.scrollLeft = scrollCalc > input.scrollWidth ? scrollCalc : 0, mobile || opts.insertMode !== !1 || begin !== end || end++, - input.setSelectionRange) input.selectionStart = begin, input.selectionEnd = end; else if (window.getSelection) { - if (range = document.createRange(), void 0 === input.firstChild || null === input.firstChild) { - var textNode = document.createTextNode(""); - input.appendChild(textNode); - } - range.setStart(input.firstChild, begin < input.inputmask._valueGet().length ? begin : input.inputmask._valueGet().length), - range.setEnd(input.firstChild, end < input.inputmask._valueGet().length ? end : input.inputmask._valueGet().length), - range.collapse(!0); - var sel = window.getSelection(); - sel.removeAllRanges(), sel.addRange(range); - } else input.createTextRange && (range = input.createTextRange(), range.collapse(!0), - range.moveEnd("character", end), range.moveStart("character", begin), range.select()); - renderColorMask(input, void 0, { - begin: begin, - end: end - }); - } - function determineLastRequiredPosition(returnDefinition) { - var pos, testPos, buffer = getBuffer(), bl = buffer.length, lvp = getLastValidPosition(), positions = {}, lvTest = getMaskSet().validPositions[lvp], ndxIntlzr = void 0 !== lvTest ? lvTest.locator.slice() : void 0; - for (pos = lvp + 1; pos < buffer.length; pos++) testPos = getTestTemplate(pos, ndxIntlzr, pos - 1), - ndxIntlzr = testPos.locator.slice(), positions[pos] = $.extend(!0, {}, testPos); - var lvTestAlt = lvTest && void 0 !== lvTest.alternation ? lvTest.locator[lvTest.alternation] : void 0; - for (pos = bl - 1; pos > lvp && (testPos = positions[pos], (testPos.match.optionality || testPos.match.optionalQuantifier || lvTestAlt && (lvTestAlt !== positions[pos].locator[lvTest.alternation] && null != testPos.match.fn || null === testPos.match.fn && testPos.locator[lvTest.alternation] && checkAlternationMatch(testPos.locator[lvTest.alternation].toString().split(","), lvTestAlt.toString().split(",")) && "" !== getTests(pos)[0].def)) && buffer[pos] === getPlaceholder(pos, testPos.match)); pos--) bl--; - return returnDefinition ? { - l: bl, - def: positions[bl] ? positions[bl].match : void 0 - } : bl; - } - function clearOptionalTail(buffer) { - for (var validPos, rl = determineLastRequiredPosition(), bl = buffer.length; rl < bl && !isMask(rl + 1) && (validPos = getTest(rl + 1)) && validPos.match.optionality !== !0 && validPos.match.optionalQuantifier !== !0; ) rl++; - for (;(validPos = getTest(rl - 1)) && validPos.match.optionality && validPos.input === opts.skipOptionalPartCharacter; ) rl--; - return buffer.splice(rl), buffer; - } - function isComplete(buffer) { - if ($.isFunction(opts.isComplete)) return opts.isComplete(buffer, opts); - if ("*" !== opts.repeat) { - var complete = !1, lrp = determineLastRequiredPosition(!0), aml = seekPrevious(lrp.l); - if (void 0 === lrp.def || lrp.def.newBlockMarker || lrp.def.optionality || lrp.def.optionalQuantifier) { - complete = !0; - for (var i = 0; i <= aml; i++) { - var test = getTestTemplate(i).match; - if (null !== test.fn && void 0 === getMaskSet().validPositions[i] && test.optionality !== !0 && test.optionalQuantifier !== !0 || null === test.fn && buffer[i] !== getPlaceholder(i, test)) { - complete = !1; - break; - } - } - } - return complete; - } - } - function handleRemove(input, k, pos, strict) { - function generalize() { - if (opts.keepStatic) { - for (var validInputs = [], lastAlt = getLastValidPosition(-1, !0), positionsClone = $.extend(!0, {}, getMaskSet().validPositions), prevAltPos = getMaskSet().validPositions[lastAlt]; lastAlt >= 0; lastAlt--) { - var altPos = getMaskSet().validPositions[lastAlt]; - if (altPos) { - if (altPos.generatedInput !== !0 && /[0-9a-bA-Z]/.test(altPos.input) && validInputs.push(altPos.input), - delete getMaskSet().validPositions[lastAlt], void 0 !== altPos.alternation && altPos.locator[altPos.alternation] !== prevAltPos.locator[altPos.alternation]) break; - prevAltPos = altPos; - } - } - if (lastAlt > -1) for (getMaskSet().p = seekNext(getLastValidPosition(-1, !0)); validInputs.length > 0; ) { - var keypress = new $.Event("keypress"); - keypress.which = validInputs.pop().charCodeAt(0), EventHandlers.keypressEvent.call(input, keypress, !0, !1, !1, getMaskSet().p); - } else getMaskSet().validPositions = $.extend(!0, {}, positionsClone); - } - } - if ((opts.numericInput || isRTL) && (k === Inputmask.keyCode.BACKSPACE ? k = Inputmask.keyCode.DELETE : k === Inputmask.keyCode.DELETE && (k = Inputmask.keyCode.BACKSPACE), - isRTL)) { - var pend = pos.end; - pos.end = pos.begin, pos.begin = pend; - } - k === Inputmask.keyCode.BACKSPACE && (pos.end - pos.begin < 1 || opts.insertMode === !1) ? (pos.begin = seekPrevious(pos.begin), - void 0 === getMaskSet().validPositions[pos.begin] || getMaskSet().validPositions[pos.begin].input !== opts.groupSeparator && getMaskSet().validPositions[pos.begin].input !== opts.radixPoint || pos.begin--) : k === Inputmask.keyCode.DELETE && pos.begin === pos.end && (pos.end = isMask(pos.end, !0) ? pos.end + 1 : seekNext(pos.end) + 1, - void 0 === getMaskSet().validPositions[pos.begin] || getMaskSet().validPositions[pos.begin].input !== opts.groupSeparator && getMaskSet().validPositions[pos.begin].input !== opts.radixPoint || pos.end++), - stripValidPositions(pos.begin, pos.end, !1, strict), strict !== !0 && generalize(); - var lvp = getLastValidPosition(pos.begin, !0); - lvp < pos.begin ? getMaskSet().p = seekNext(lvp) : strict !== !0 && (getMaskSet().p = pos.begin); - } - function initializeColorMask(input) { - function findCaretPos(clientx) { - var caretPos, e = document.createElement("span"); - for (var style in computedStyle) isNaN(style) && style.indexOf("font") !== -1 && (e.style[style] = computedStyle[style]); - e.style.textTransform = computedStyle.textTransform, e.style.letterSpacing = computedStyle.letterSpacing, - e.style.position = "absolute", e.style.height = "auto", e.style.width = "auto", - e.style.visibility = "hidden", e.style.whiteSpace = "nowrap", document.body.appendChild(e); - var itl, inputText = input.inputmask._valueGet(), previousWidth = 0; - for (caretPos = 0, itl = inputText.length; caretPos <= itl; caretPos++) { - if (e.innerHTML += inputText.charAt(caretPos) || "_", e.offsetWidth >= clientx) { - var offset1 = clientx - previousWidth, offset2 = e.offsetWidth - clientx; - e.innerHTML = inputText.charAt(caretPos), offset1 -= e.offsetWidth / 3, caretPos = offset1 < offset2 ? caretPos - 1 : caretPos; - break; - } - previousWidth = e.offsetWidth; - } - return document.body.removeChild(e), caretPos; - } - function position() { - colorMask.style.position = "absolute", colorMask.style.top = offset.top + "px", - colorMask.style.left = offset.left + "px", colorMask.style.width = parseInt(input.offsetWidth) - parseInt(computedStyle.paddingLeft) - parseInt(computedStyle.paddingRight) - parseInt(computedStyle.borderLeftWidth) - parseInt(computedStyle.borderRightWidth) + "px", - colorMask.style.height = parseInt(input.offsetHeight) - parseInt(computedStyle.paddingTop) - parseInt(computedStyle.paddingBottom) - parseInt(computedStyle.borderTopWidth) - parseInt(computedStyle.borderBottomWidth) + "px", - colorMask.style.lineHeight = colorMask.style.height, colorMask.style.zIndex = isNaN(computedStyle.zIndex) ? -1 : computedStyle.zIndex - 1, - colorMask.style.webkitAppearance = "textfield", colorMask.style.mozAppearance = "textfield", - colorMask.style.Appearance = "textfield"; - } - var offset = $(input).position(), computedStyle = (input.ownerDocument.defaultView || window).getComputedStyle(input, null); - input.parentNode; - colorMask = document.createElement("div"), document.body.appendChild(colorMask); - for (var style in computedStyle) isNaN(style) && "cssText" !== style && style.indexOf("webkit") == -1 && (colorMask.style[style] = computedStyle[style]); - input.style.backgroundColor = "transparent", input.style.color = "transparent", - input.style.webkitAppearance = "caret", input.style.mozAppearance = "caret", input.style.Appearance = "caret", - position(), $(window).on("resize", function(e) { - offset = $(input).position(), computedStyle = (input.ownerDocument.defaultView || window).getComputedStyle(input, null), - position(); - }), $(input).on("click", function(e) { - return caret(input, findCaretPos(e.clientX)), EventHandlers.clickEvent.call(this, [ e ]); - }), $(input).on("keydown", function(e) { - e.shiftKey || opts.insertMode === !1 || setTimeout(function() { - renderColorMask(input); - }, 0); - }); - } - function renderColorMask(input, buffer, caretPos) { - function handleStatic() { - isStatic || null !== test.fn && void 0 !== testPos.input ? isStatic && null !== test.fn && void 0 !== testPos.input && (isStatic = !1, - maskTemplate += "") : (isStatic = !0, maskTemplate += ""); - } - if (void 0 !== colorMask) { - buffer = buffer || getBuffer(), void 0 === caretPos ? caretPos = caret(input) : void 0 === caretPos.begin && (caretPos = { - begin: caretPos, - end: caretPos - }); - var maskTemplate = "", isStatic = !1; - if ("" != buffer) { - var ndxIntlzr, test, testPos, pos = 0, lvp = getLastValidPosition(); - do pos === caretPos.begin && document.activeElement === input && (maskTemplate += ""), - getMaskSet().validPositions[pos] ? (testPos = getMaskSet().validPositions[pos], - test = testPos.match, ndxIntlzr = testPos.locator.slice(), handleStatic(), maskTemplate += testPos.input) : (testPos = getTestTemplate(pos, ndxIntlzr, pos - 1), - test = testPos.match, ndxIntlzr = testPos.locator.slice(), (opts.jitMasking === !1 || pos < lvp || "number" == typeof opts.jitMasking && isFinite(opts.jitMasking) && opts.jitMasking > pos) && (handleStatic(), - maskTemplate += getPlaceholder(pos, test))), pos++; while ((void 0 === maxLength || pos < maxLength) && (null !== test.fn || "" !== test.def) || lvp > pos); - } - colorMask.innerHTML = maskTemplate; - } - } - function mask(elem) { - function isElementTypeSupported(input, opts) { - function patchValueProperty(npt) { - function patchValhook(type) { - if ($.valHooks && (void 0 === $.valHooks[type] || $.valHooks[type].inputmaskpatch !== !0)) { - var valhookGet = $.valHooks[type] && $.valHooks[type].get ? $.valHooks[type].get : function(elem) { - return elem.value; - }, valhookSet = $.valHooks[type] && $.valHooks[type].set ? $.valHooks[type].set : function(elem, value) { - return elem.value = value, elem; - }; - $.valHooks[type] = { - get: function(elem) { - if (elem.inputmask) { - if (elem.inputmask.opts.autoUnmask) return elem.inputmask.unmaskedvalue(); - var result = valhookGet(elem); - return getLastValidPosition(void 0, void 0, elem.inputmask.maskset.validPositions) !== -1 || opts.nullable !== !0 ? result : ""; - } - return valhookGet(elem); - }, - set: function(elem, value) { - var result, $elem = $(elem); - return result = valhookSet(elem, value), elem.inputmask && $elem.trigger("setvalue"), - result; - }, - inputmaskpatch: !0 - }; - } - } - function getter() { - return this.inputmask ? this.inputmask.opts.autoUnmask ? this.inputmask.unmaskedvalue() : getLastValidPosition() !== -1 || opts.nullable !== !0 ? document.activeElement === this && opts.clearMaskOnLostFocus ? (isRTL ? clearOptionalTail(getBuffer().slice()).reverse() : clearOptionalTail(getBuffer().slice())).join("") : valueGet.call(this) : "" : valueGet.call(this); - } - function setter(value) { - valueSet.call(this, value), this.inputmask && $(this).trigger("setvalue"); - } - function installNativeValueSetFallback(npt) { - EventRuler.on(npt, "mouseenter", function(event) { - var $input = $(this), input = this, value = input.inputmask._valueGet(); - value !== getBuffer().join("") && $input.trigger("setvalue"); - }); - } - var valueGet, valueSet; - if (!npt.inputmask.__valueGet) { - if (opts.noValuePatching !== !0) { - if (Object.getOwnPropertyDescriptor) { - "function" != typeof Object.getPrototypeOf && (Object.getPrototypeOf = "object" == typeof "test".__proto__ ? function(object) { - return object.__proto__; - } : function(object) { - return object.constructor.prototype; - }); - var valueProperty = Object.getPrototypeOf ? Object.getOwnPropertyDescriptor(Object.getPrototypeOf(npt), "value") : void 0; - valueProperty && valueProperty.get && valueProperty.set ? (valueGet = valueProperty.get, - valueSet = valueProperty.set, Object.defineProperty(npt, "value", { - get: getter, - set: setter, - configurable: !0 - })) : "INPUT" !== npt.tagName && (valueGet = function() { - return this.textContent; - }, valueSet = function(value) { - this.textContent = value; - }, Object.defineProperty(npt, "value", { - get: getter, - set: setter, - configurable: !0 - })); - } else document.__lookupGetter__ && npt.__lookupGetter__("value") && (valueGet = npt.__lookupGetter__("value"), - valueSet = npt.__lookupSetter__("value"), npt.__defineGetter__("value", getter), - npt.__defineSetter__("value", setter)); - npt.inputmask.__valueGet = valueGet, npt.inputmask.__valueSet = valueSet; - } - npt.inputmask._valueGet = function(overruleRTL) { - return isRTL && overruleRTL !== !0 ? valueGet.call(this.el).split("").reverse().join("") : valueGet.call(this.el); - }, npt.inputmask._valueSet = function(value, overruleRTL) { - valueSet.call(this.el, null === value || void 0 === value ? "" : overruleRTL !== !0 && isRTL ? value.split("").reverse().join("") : value); - }, void 0 === valueGet && (valueGet = function() { - return this.value; - }, valueSet = function(value) { - this.value = value; - }, patchValhook(npt.type), installNativeValueSetFallback(npt)); - } - } - var elementType = input.getAttribute("type"), isSupported = "INPUT" === input.tagName && $.inArray(elementType, opts.supportsInputType) !== -1 || input.isContentEditable || "TEXTAREA" === input.tagName; - if (!isSupported) if ("INPUT" === input.tagName) { - var el = document.createElement("input"); - el.setAttribute("type", elementType), isSupported = "text" === el.type, el = null; - } else isSupported = "partial"; - return isSupported !== !1 && patchValueProperty(input), isSupported; - } - EventRuler.off(el); - var isSupported = isElementTypeSupported(elem, opts); - if (isSupported !== !1 && (el = elem, $el = $(el), ("rtl" === el.dir || opts.rightAlign) && (el.style.textAlign = "right"), - ("rtl" === el.dir || opts.numericInput) && (el.dir = "ltr", el.removeAttribute("dir"), - el.inputmask.isRTL = !0, isRTL = !0), opts.colorMask === !0 && initializeColorMask(el), - android && (el.hasOwnProperty("inputmode") && (el.inputmode = opts.inputmode, el.setAttribute("inputmode", opts.inputmode)), - "rtfm" === opts.androidHack && (opts.colorMask !== !0 && initializeColorMask(el), - el.type = "password")), isSupported === !0 && (EventRuler.on(el, "submit", EventHandlers.submitEvent), - EventRuler.on(el, "reset", EventHandlers.resetEvent), EventRuler.on(el, "mouseenter", EventHandlers.mouseenterEvent), - EventRuler.on(el, "blur", EventHandlers.blurEvent), EventRuler.on(el, "focus", EventHandlers.focusEvent), - EventRuler.on(el, "mouseleave", EventHandlers.mouseleaveEvent), opts.colorMask !== !0 && EventRuler.on(el, "click", EventHandlers.clickEvent), - EventRuler.on(el, "dblclick", EventHandlers.dblclickEvent), EventRuler.on(el, "paste", EventHandlers.pasteEvent), - EventRuler.on(el, "dragdrop", EventHandlers.pasteEvent), EventRuler.on(el, "drop", EventHandlers.pasteEvent), - EventRuler.on(el, "cut", EventHandlers.cutEvent), EventRuler.on(el, "complete", opts.oncomplete), - EventRuler.on(el, "incomplete", opts.onincomplete), EventRuler.on(el, "cleared", opts.oncleared), - android && opts.inputEventOnly === !0 || (EventRuler.on(el, "keydown", EventHandlers.keydownEvent), - EventRuler.on(el, "keypress", EventHandlers.keypressEvent)), EventRuler.on(el, "compositionstart", $.noop), - EventRuler.on(el, "compositionupdate", $.noop), EventRuler.on(el, "compositionend", $.noop), - EventRuler.on(el, "keyup", $.noop), EventRuler.on(el, "input", EventHandlers.inputFallBackEvent), - EventRuler.on(el, "beforeinput", $.noop)), EventRuler.on(el, "setvalue", EventHandlers.setValueEvent), - getBufferTemplate(), "" !== el.inputmask._valueGet() || opts.clearMaskOnLostFocus === !1 || document.activeElement === el)) { - var initialValue = $.isFunction(opts.onBeforeMask) ? opts.onBeforeMask(el.inputmask._valueGet(), opts) || el.inputmask._valueGet() : el.inputmask._valueGet(); - checkVal(el, !0, !1, initialValue.split("")); - var buffer = getBuffer().slice(); - undoValue = buffer.join(""), isComplete(buffer) === !1 && opts.clearIncomplete && resetMaskSet(), - opts.clearMaskOnLostFocus && document.activeElement !== el && (getLastValidPosition() === -1 ? buffer = [] : clearOptionalTail(buffer)), - writeBuffer(el, buffer), document.activeElement === el && caret(el, seekNext(getLastValidPosition())); - } - } - maskset = maskset || this.maskset, opts = opts || this.opts; - var undoValue, $el, maxLength, colorMask, valueBuffer, el = this.el, isRTL = this.isRTL, skipKeyPressEvent = !1, skipInputEvent = !1, ignorable = !1, mouseEnter = !1, EventRuler = { - on: function(input, eventName, eventHandler) { - var ev = function(e) { - if (void 0 === this.inputmask && "FORM" !== this.nodeName) { - var imOpts = $.data(this, "_inputmask_opts"); - imOpts ? new Inputmask(imOpts).mask(this) : EventRuler.off(this); - } else { - if ("setvalue" === e.type || "FORM" === this.nodeName || !(this.disabled || this.readOnly && !("keydown" === e.type && e.ctrlKey && 67 === e.keyCode || opts.tabThrough === !1 && e.keyCode === Inputmask.keyCode.TAB))) { - switch (e.type) { - case "input": - if (skipInputEvent === !0) return skipInputEvent = !1, e.preventDefault(); - break; - - case "keydown": - skipKeyPressEvent = !1, skipInputEvent = !1; - break; - - case "keypress": - if (skipKeyPressEvent === !0) return e.preventDefault(); - skipKeyPressEvent = !0; - break; - - case "click": - if (iemobile || iphone) { - var that = this, args = arguments; - return setTimeout(function() { - eventHandler.apply(that, args); - }, 0), !1; - } - } - var returnVal = eventHandler.apply(this, arguments); - return returnVal === !1 && (e.preventDefault(), e.stopPropagation()), returnVal; - } - e.preventDefault(); - } - }; - input.inputmask.events[eventName] = input.inputmask.events[eventName] || [], input.inputmask.events[eventName].push(ev), - $.inArray(eventName, [ "submit", "reset" ]) !== -1 ? null != input.form && $(input.form).on(eventName, ev) : $(input).on(eventName, ev); - }, - off: function(input, event) { - if (input.inputmask && input.inputmask.events) { - var events; - event ? (events = [], events[event] = input.inputmask.events[event]) : events = input.inputmask.events, - $.each(events, function(eventName, evArr) { - for (;evArr.length > 0; ) { - var ev = evArr.pop(); - $.inArray(eventName, [ "submit", "reset" ]) !== -1 ? null != input.form && $(input.form).off(eventName, ev) : $(input).off(eventName, ev); - } - delete input.inputmask.events[eventName]; - }); - } - } - }, EventHandlers = { - keydownEvent: function(e) { - function isInputEventSupported(eventName) { - var el = document.createElement("input"), evName = "on" + eventName, isSupported = evName in el; - return isSupported || (el.setAttribute(evName, "return;"), isSupported = "function" == typeof el[evName]), - el = null, isSupported; - } - var input = this, $input = $(input), k = e.keyCode, pos = caret(input); - if (k === Inputmask.keyCode.BACKSPACE || k === Inputmask.keyCode.DELETE || iphone && k === Inputmask.keyCode.BACKSPACE_SAFARI || e.ctrlKey && k === Inputmask.keyCode.X && !isInputEventSupported("cut")) e.preventDefault(), - handleRemove(input, k, pos), writeBuffer(input, getBuffer(!0), getMaskSet().p, e, input.inputmask._valueGet() !== getBuffer().join("")), - input.inputmask._valueGet() === getBufferTemplate().join("") ? $input.trigger("cleared") : isComplete(getBuffer()) === !0 && $input.trigger("complete"); else if (k === Inputmask.keyCode.END || k === Inputmask.keyCode.PAGE_DOWN) { - e.preventDefault(); - var caretPos = seekNext(getLastValidPosition()); - opts.insertMode || caretPos !== getMaskSet().maskLength || e.shiftKey || caretPos--, - caret(input, e.shiftKey ? pos.begin : caretPos, caretPos, !0); - } else k === Inputmask.keyCode.HOME && !e.shiftKey || k === Inputmask.keyCode.PAGE_UP ? (e.preventDefault(), - caret(input, 0, e.shiftKey ? pos.begin : 0, !0)) : (opts.undoOnEscape && k === Inputmask.keyCode.ESCAPE || 90 === k && e.ctrlKey) && e.altKey !== !0 ? (checkVal(input, !0, !1, undoValue.split("")), - $input.trigger("click")) : k !== Inputmask.keyCode.INSERT || e.shiftKey || e.ctrlKey ? opts.tabThrough === !0 && k === Inputmask.keyCode.TAB ? (e.shiftKey === !0 ? (null === getTest(pos.begin).match.fn && (pos.begin = seekNext(pos.begin)), - pos.end = seekPrevious(pos.begin, !0), pos.begin = seekPrevious(pos.end, !0)) : (pos.begin = seekNext(pos.begin, !0), - pos.end = seekNext(pos.begin, !0), pos.end < getMaskSet().maskLength && pos.end--), - pos.begin < getMaskSet().maskLength && (e.preventDefault(), caret(input, pos.begin, pos.end))) : e.shiftKey || opts.insertMode === !1 && (k === Inputmask.keyCode.RIGHT ? setTimeout(function() { - var caretPos = caret(input); - caret(input, caretPos.begin); - }, 0) : k === Inputmask.keyCode.LEFT && setTimeout(function() { - var caretPos = caret(input); - caret(input, isRTL ? caretPos.begin + 1 : caretPos.begin - 1); - }, 0)) : (opts.insertMode = !opts.insertMode, caret(input, opts.insertMode || pos.begin !== getMaskSet().maskLength ? pos.begin : pos.begin - 1)); - opts.onKeyDown.call(this, e, getBuffer(), caret(input).begin, opts), ignorable = $.inArray(k, opts.ignorables) !== -1; - }, - keypressEvent: function(e, checkval, writeOut, strict, ndx) { - var input = this, $input = $(input), k = e.which || e.charCode || e.keyCode; - if (!(checkval === !0 || e.ctrlKey && e.altKey) && (e.ctrlKey || e.metaKey || ignorable)) return k === Inputmask.keyCode.ENTER && undoValue !== getBuffer().join("") && (undoValue = getBuffer().join(""), - setTimeout(function() { - $input.trigger("change"); - }, 0)), !0; - if (k) { - 46 === k && e.shiftKey === !1 && "" !== opts.radixPoint && (k = opts.radixPoint.charCodeAt(0)); - var forwardPosition, pos = checkval ? { - begin: ndx, - end: ndx - } : caret(input), c = String.fromCharCode(k); - getMaskSet().writeOutBuffer = !0; - var valResult = isValid(pos, c, strict); - if (valResult !== !1 && (resetMaskSet(!0), forwardPosition = void 0 !== valResult.caret ? valResult.caret : checkval ? valResult.pos + 1 : seekNext(valResult.pos), - getMaskSet().p = forwardPosition), writeOut !== !1) { - var self = this; - if (setTimeout(function() { - opts.onKeyValidation.call(self, k, valResult, opts); - }, 0), getMaskSet().writeOutBuffer && valResult !== !1) { - var buffer = getBuffer(); - writeBuffer(input, buffer, opts.numericInput && void 0 === valResult.caret ? seekPrevious(forwardPosition) : forwardPosition, e, checkval !== !0), - checkval !== !0 && setTimeout(function() { - isComplete(buffer) === !0 && $input.trigger("complete"); - }, 0); - } - } - if (e.preventDefault(), checkval) return valResult.forwardPosition = forwardPosition, - valResult; - } - }, - pasteEvent: function(e) { - var tempValue, input = this, ev = e.originalEvent || e, $input = $(input), inputValue = input.inputmask._valueGet(!0), caretPos = caret(input); - isRTL && (tempValue = caretPos.end, caretPos.end = caretPos.begin, caretPos.begin = tempValue); - var valueBeforeCaret = inputValue.substr(0, caretPos.begin), valueAfterCaret = inputValue.substr(caretPos.end, inputValue.length); - if (valueBeforeCaret === (isRTL ? getBufferTemplate().reverse() : getBufferTemplate()).slice(0, caretPos.begin).join("") && (valueBeforeCaret = ""), - valueAfterCaret === (isRTL ? getBufferTemplate().reverse() : getBufferTemplate()).slice(caretPos.end).join("") && (valueAfterCaret = ""), - isRTL && (tempValue = valueBeforeCaret, valueBeforeCaret = valueAfterCaret, valueAfterCaret = tempValue), - window.clipboardData && window.clipboardData.getData) inputValue = valueBeforeCaret + window.clipboardData.getData("Text") + valueAfterCaret; else { - if (!ev.clipboardData || !ev.clipboardData.getData) return !0; - inputValue = valueBeforeCaret + ev.clipboardData.getData("text/plain") + valueAfterCaret; - } - var pasteValue = inputValue; - if ($.isFunction(opts.onBeforePaste)) { - if (pasteValue = opts.onBeforePaste(inputValue, opts), pasteValue === !1) return e.preventDefault(); - pasteValue || (pasteValue = inputValue); - } - return checkVal(input, !1, !1, isRTL ? pasteValue.split("").reverse() : pasteValue.toString().split("")), - writeBuffer(input, getBuffer(), seekNext(getLastValidPosition()), e, undoValue !== getBuffer().join("")), - isComplete(getBuffer()) === !0 && $input.trigger("complete"), e.preventDefault(); - }, - inputFallBackEvent: function(e) { - var input = this, inputValue = input.inputmask._valueGet(); - if (getBuffer().join("") !== inputValue) { - var caretPos = caret(input); - if (inputValue = inputValue.replace(new RegExp("(" + Inputmask.escapeRegex(getBufferTemplate().join("")) + ")*"), ""), - iemobile) { - var inputChar = inputValue.replace(getBuffer().join(""), ""); - if (1 === inputChar.length) { - var keypress = new $.Event("keypress"); - return keypress.which = inputChar.charCodeAt(0), EventHandlers.keypressEvent.call(input, keypress, !0, !0, !1, getMaskSet().validPositions[caretPos.begin - 1] ? caretPos.begin : caretPos.begin - 1), - !1; - } - } - if (caretPos.begin > inputValue.length && (caret(input, inputValue.length), caretPos = caret(input)), - getBuffer().length - inputValue.length !== 1 || inputValue.charAt(caretPos.begin) === getBuffer()[caretPos.begin] || inputValue.charAt(caretPos.begin + 1) === getBuffer()[caretPos.begin] || isMask(caretPos.begin)) { - for (var lvp = getLastValidPosition() + 1, bufferTemplate = getBufferTemplate().join(""); null === inputValue.match(Inputmask.escapeRegex(bufferTemplate) + "$"); ) bufferTemplate = bufferTemplate.slice(1); - inputValue = inputValue.replace(bufferTemplate, ""), inputValue = inputValue.split(""), - checkVal(input, !0, !1, inputValue, e, caretPos.begin < lvp), isComplete(getBuffer()) === !0 && $(input).trigger("complete"); - } else e.keyCode = Inputmask.keyCode.BACKSPACE, EventHandlers.keydownEvent.call(input, e); - e.preventDefault(); - } - }, - setValueEvent: function(e) { - this.inputmask.refreshValue = !1; - var input = this, value = input.inputmask._valueGet(); - checkVal(input, !0, !1, ($.isFunction(opts.onBeforeMask) ? opts.onBeforeMask(value, opts) || value : value).split("")), - undoValue = getBuffer().join(""), (opts.clearMaskOnLostFocus || opts.clearIncomplete) && input.inputmask._valueGet() === getBufferTemplate().join("") && input.inputmask._valueSet(""); - }, - focusEvent: function(e) { - var input = this, nptValue = input.inputmask._valueGet(); - opts.showMaskOnFocus && (!opts.showMaskOnHover || opts.showMaskOnHover && "" === nptValue) && (input.inputmask._valueGet() !== getBuffer().join("") ? writeBuffer(input, getBuffer(), seekNext(getLastValidPosition())) : mouseEnter === !1 && caret(input, seekNext(getLastValidPosition()))), - opts.positionCaretOnTab === !0 && EventHandlers.clickEvent.apply(input, [ e, !0 ]), - undoValue = getBuffer().join(""); - }, - mouseleaveEvent: function(e) { - var input = this; - if (mouseEnter = !1, opts.clearMaskOnLostFocus && document.activeElement !== input) { - var buffer = getBuffer().slice(), nptValue = input.inputmask._valueGet(); - nptValue !== input.getAttribute("placeholder") && "" !== nptValue && (getLastValidPosition() === -1 && nptValue === getBufferTemplate().join("") ? buffer = [] : clearOptionalTail(buffer), - writeBuffer(input, buffer)); - } - }, - clickEvent: function(e, tabbed) { - function doRadixFocus(clickPos) { - if ("" !== opts.radixPoint) { - var vps = getMaskSet().validPositions; - if (void 0 === vps[clickPos] || vps[clickPos].input === getPlaceholder(clickPos)) { - if (clickPos < seekNext(-1)) return !0; - var radixPos = $.inArray(opts.radixPoint, getBuffer()); - if (radixPos !== -1) { - for (var vp in vps) if (radixPos < vp && vps[vp].input !== getPlaceholder(vp)) return !1; - return !0; - } - } - } - return !1; - } - var input = this; - setTimeout(function() { - if (document.activeElement === input) { - var selectedCaret = caret(input); - if (tabbed && (selectedCaret.begin = selectedCaret.end), selectedCaret.begin === selectedCaret.end) switch (opts.positionCaretOnClick) { - case "none": - break; - - case "radixFocus": - if (doRadixFocus(selectedCaret.begin)) { - var radixPos = $.inArray(opts.radixPoint, getBuffer().join("")); - caret(input, opts.numericInput ? seekNext(radixPos) : radixPos); - break; - } - - default: - var clickPosition = selectedCaret.begin, lvclickPosition = getLastValidPosition(clickPosition, !0), lastPosition = seekNext(lvclickPosition); - if (clickPosition < lastPosition) caret(input, isMask(clickPosition) || isMask(clickPosition - 1) ? clickPosition : seekNext(clickPosition)); else { - var placeholder = getPlaceholder(lastPosition); - ("" !== placeholder && getBuffer()[lastPosition] !== placeholder && getTest(lastPosition).match.optionalQuantifier !== !0 || !isMask(lastPosition) && getTest(lastPosition).match.def === placeholder) && (lastPosition = seekNext(lastPosition)), - caret(input, lastPosition); - } - } - } - }, 0); - }, - dblclickEvent: function(e) { - var input = this; - setTimeout(function() { - caret(input, 0, seekNext(getLastValidPosition())); - }, 0); - }, - cutEvent: function(e) { - var input = this, $input = $(input), pos = caret(input), ev = e.originalEvent || e, clipboardData = window.clipboardData || ev.clipboardData, clipData = isRTL ? getBuffer().slice(pos.end, pos.begin) : getBuffer().slice(pos.begin, pos.end); - clipboardData.setData("text", isRTL ? clipData.reverse().join("") : clipData.join("")), - document.execCommand && document.execCommand("copy"), handleRemove(input, Inputmask.keyCode.DELETE, pos), - writeBuffer(input, getBuffer(), getMaskSet().p, e, undoValue !== getBuffer().join("")), - input.inputmask._valueGet() === getBufferTemplate().join("") && $input.trigger("cleared"); - }, - blurEvent: function(e) { - var $input = $(this), input = this; - if (input.inputmask) { - var nptValue = input.inputmask._valueGet(), buffer = getBuffer().slice(); - undoValue !== buffer.join("") && setTimeout(function() { - $input.trigger("change"), undoValue = buffer.join(""); - }, 0), "" !== nptValue && (opts.clearMaskOnLostFocus && (getLastValidPosition() === -1 && nptValue === getBufferTemplate().join("") ? buffer = [] : clearOptionalTail(buffer)), - isComplete(buffer) === !1 && (setTimeout(function() { - $input.trigger("incomplete"); - }, 0), opts.clearIncomplete && (resetMaskSet(), buffer = opts.clearMaskOnLostFocus ? [] : getBufferTemplate().slice())), - writeBuffer(input, buffer, void 0, e)); - } - }, - mouseenterEvent: function(e) { - var input = this; - mouseEnter = !0, document.activeElement !== input && opts.showMaskOnHover && input.inputmask._valueGet() !== getBuffer().join("") && writeBuffer(input, getBuffer()); - }, - submitEvent: function(e) { - undoValue !== getBuffer().join("") && $el.trigger("change"), opts.clearMaskOnLostFocus && getLastValidPosition() === -1 && el.inputmask._valueGet && el.inputmask._valueGet() === getBufferTemplate().join("") && el.inputmask._valueSet(""), - opts.removeMaskOnSubmit && (el.inputmask._valueSet(el.inputmask.unmaskedvalue(), !0), - setTimeout(function() { - writeBuffer(el, getBuffer()); - }, 0)); - }, - resetEvent: function(e) { - el.inputmask.refreshValue = !0, setTimeout(function() { - $el.trigger("setvalue"); - }, 0); - } - }; - if (void 0 !== actionObj) switch (actionObj.action) { - case "isComplete": - return el = actionObj.el, isComplete(getBuffer()); - - case "unmaskedvalue": - return void 0 !== el && void 0 === actionObj.value || (valueBuffer = actionObj.value, - valueBuffer = ($.isFunction(opts.onBeforeMask) ? opts.onBeforeMask(valueBuffer, opts) || valueBuffer : valueBuffer).split(""), - checkVal(void 0, !1, !1, isRTL ? valueBuffer.reverse() : valueBuffer), $.isFunction(opts.onBeforeWrite) && opts.onBeforeWrite(void 0, getBuffer(), 0, opts)), - unmaskedvalue(el); - - case "mask": - mask(el); - break; - - case "format": - return valueBuffer = ($.isFunction(opts.onBeforeMask) ? opts.onBeforeMask(actionObj.value, opts) || actionObj.value : actionObj.value).split(""), - checkVal(void 0, !1, !1, isRTL ? valueBuffer.reverse() : valueBuffer), $.isFunction(opts.onBeforeWrite) && opts.onBeforeWrite(void 0, getBuffer(), 0, opts), - actionObj.metadata ? { - value: isRTL ? getBuffer().slice().reverse().join("") : getBuffer().join(""), - metadata: maskScope.call(this, { - action: "getmetadata" - }, maskset, opts) - } : isRTL ? getBuffer().slice().reverse().join("") : getBuffer().join(""); - - case "isValid": - actionObj.value ? (valueBuffer = actionObj.value.split(""), checkVal(void 0, !1, !0, isRTL ? valueBuffer.reverse() : valueBuffer)) : actionObj.value = getBuffer().join(""); - for (var buffer = getBuffer(), rl = determineLastRequiredPosition(), lmib = buffer.length - 1; lmib > rl && !isMask(lmib); lmib--) ; - return buffer.splice(rl, lmib + 1 - rl), isComplete(buffer) && actionObj.value === getBuffer().join(""); - - case "getemptymask": - return getBufferTemplate().join(""); - - case "remove": - if (el) { - $el = $(el), el.inputmask._valueSet(unmaskedvalue(el)), EventRuler.off(el); - var valueProperty; - Object.getOwnPropertyDescriptor && Object.getPrototypeOf ? (valueProperty = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(el), "value"), - valueProperty && el.inputmask.__valueGet && Object.defineProperty(el, "value", { - get: el.inputmask.__valueGet, - set: el.inputmask.__valueSet, - configurable: !0 - })) : document.__lookupGetter__ && el.__lookupGetter__("value") && el.inputmask.__valueGet && (el.__defineGetter__("value", el.inputmask.__valueGet), - el.__defineSetter__("value", el.inputmask.__valueSet)), el.inputmask = void 0; - } - return el; - - case "getmetadata": - if ($.isArray(maskset.metadata)) { - var maskTarget = getMaskTemplate(!0, 0, !1).join(""); - return $.each(maskset.metadata, function(ndx, mtdt) { - if (mtdt.mask === maskTarget) return maskTarget = mtdt, !1; - }), maskTarget; - } - return maskset.metadata; - } - } - var ua = navigator.userAgent, mobile = /mobile/i.test(ua), iemobile = /iemobile/i.test(ua), iphone = /iphone/i.test(ua) && !iemobile, android = /android/i.test(ua) && !iemobile; - return Inputmask.prototype = { - dataAttribute: "data-inputmask", - defaults: { - placeholder: "_", - optionalmarker: { - start: "[", - end: "]" - }, - quantifiermarker: { - start: "{", - end: "}" - }, - groupmarker: { - start: "(", - end: ")" - }, - alternatormarker: "|", - escapeChar: "\\", - mask: null, - oncomplete: $.noop, - onincomplete: $.noop, - oncleared: $.noop, - repeat: 0, - greedy: !0, - autoUnmask: !1, - removeMaskOnSubmit: !1, - clearMaskOnLostFocus: !0, - insertMode: !0, - clearIncomplete: !1, - alias: null, - onKeyDown: $.noop, - onBeforeMask: null, - onBeforePaste: function(pastedValue, opts) { - return $.isFunction(opts.onBeforeMask) ? opts.onBeforeMask(pastedValue, opts) : pastedValue; - }, - onBeforeWrite: null, - onUnMask: null, - showMaskOnFocus: !0, - showMaskOnHover: !0, - onKeyValidation: $.noop, - skipOptionalPartCharacter: " ", - numericInput: !1, - rightAlign: !1, - undoOnEscape: !0, - radixPoint: "", - radixPointDefinitionSymbol: void 0, - groupSeparator: "", - keepStatic: null, - positionCaretOnTab: !0, - tabThrough: !1, - supportsInputType: [ "text", "tel", "password" ], - ignorables: [ 8, 9, 13, 19, 27, 33, 34, 35, 36, 37, 38, 39, 40, 45, 46, 93, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 0, 229 ], - isComplete: null, - canClearPosition: $.noop, - postValidation: null, - staticDefinitionSymbol: void 0, - jitMasking: !1, - nullable: !0, - inputEventOnly: !1, - noValuePatching: !1, - positionCaretOnClick: "lvp", - casing: null, - inputmode: "verbatim", - colorMask: !1, - androidHack: !1 - }, - definitions: { - "9": { - validator: "[0-9]", - cardinality: 1, - definitionSymbol: "*" - }, - a: { - validator: "[A-Za-z\u0410-\u044f\u0401\u0451\xc0-\xff\xb5]", - cardinality: 1, - definitionSymbol: "*" - }, - "*": { - validator: "[0-9A-Za-z\u0410-\u044f\u0401\u0451\xc0-\xff\xb5]", - cardinality: 1 - } - }, - aliases: {}, - masksCache: {}, - mask: function(elems) { - function importAttributeOptions(npt, opts, userOptions, dataAttribute) { - function importOption(option, optionData) { - optionData = void 0 !== optionData ? optionData : npt.getAttribute(dataAttribute + "-" + option), - null !== optionData && ("string" == typeof optionData && (0 === option.indexOf("on") ? optionData = window[optionData] : "false" === optionData ? optionData = !1 : "true" === optionData && (optionData = !0)), - userOptions[option] = optionData); - } - var option, dataoptions, optionData, p, attrOptions = npt.getAttribute(dataAttribute); - if (attrOptions && "" !== attrOptions && (attrOptions = attrOptions.replace(new RegExp("'", "g"), '"'), - dataoptions = JSON.parse("{" + attrOptions + "}")), dataoptions) { - optionData = void 0; - for (p in dataoptions) if ("alias" === p.toLowerCase()) { - optionData = dataoptions[p]; - break; - } - } - importOption("alias", optionData), userOptions.alias && resolveAlias(userOptions.alias, userOptions, opts); - for (option in opts) { - if (dataoptions) { - optionData = void 0; - for (p in dataoptions) if (p.toLowerCase() === option.toLowerCase()) { - optionData = dataoptions[p]; - break; - } - } - importOption(option, optionData); - } - return $.extend(!0, opts, userOptions), opts; - } - var that = this; - return "string" == typeof elems && (elems = document.getElementById(elems) || document.querySelectorAll(elems)), - elems = elems.nodeName ? [ elems ] : elems, $.each(elems, function(ndx, el) { - var scopedOpts = $.extend(!0, {}, that.opts); - importAttributeOptions(el, scopedOpts, $.extend(!0, {}, that.userOptions), that.dataAttribute); - var maskset = generateMaskSet(scopedOpts, that.noMasksCache); - void 0 !== maskset && (void 0 !== el.inputmask && el.inputmask.remove(), el.inputmask = new Inputmask((void 0), (void 0), (!0)), - el.inputmask.opts = scopedOpts, el.inputmask.noMasksCache = that.noMasksCache, el.inputmask.userOptions = $.extend(!0, {}, that.userOptions), - el.inputmask.isRTL = that.isRTL, el.inputmask.el = el, el.inputmask.maskset = maskset, - $.data(el, "_inputmask_opts", scopedOpts), maskScope.call(el.inputmask, { - action: "mask" - })); - }), elems && elems[0] ? elems[0].inputmask || this : this; - }, - option: function(options, noremask) { - return "string" == typeof options ? this.opts[options] : "object" == typeof options ? ($.extend(this.userOptions, options), - this.el && noremask !== !0 && this.mask(this.el), this) : void 0; - }, - unmaskedvalue: function(value) { - return this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache), - maskScope.call(this, { - action: "unmaskedvalue", - value: value - }); - }, - remove: function() { - return maskScope.call(this, { - action: "remove" - }); - }, - getemptymask: function() { - return this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache), - maskScope.call(this, { - action: "getemptymask" - }); - }, - hasMaskedValue: function() { - return !this.opts.autoUnmask; - }, - isComplete: function() { - return this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache), - maskScope.call(this, { - action: "isComplete" - }); - }, - getmetadata: function() { - return this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache), - maskScope.call(this, { - action: "getmetadata" - }); - }, - isValid: function(value) { - return this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache), - maskScope.call(this, { - action: "isValid", - value: value - }); - }, - format: function(value, metadata) { - return this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache), - maskScope.call(this, { - action: "format", - value: value, - metadata: metadata - }); - }, - analyseMask: function(mask, opts) { - function MaskToken(isGroup, isOptional, isQuantifier, isAlternator) { - this.matches = [], this.openGroup = isGroup || !1, this.isGroup = isGroup || !1, - this.isOptional = isOptional || !1, this.isQuantifier = isQuantifier || !1, this.isAlternator = isAlternator || !1, - this.quantifier = { - min: 1, - max: 1 - }; - } - function insertTestDefinition(mtoken, element, position) { - var maskdef = (opts.definitions ? opts.definitions[element] : void 0) || Inputmask.prototype.definitions[element]; - position = void 0 !== position ? position : mtoken.matches.length; - var prevMatch = mtoken.matches[position - 1]; - if (maskdef && !escaped) { - for (var prevalidators = maskdef.prevalidator, prevalidatorsL = prevalidators ? prevalidators.length : 0, i = 1; i < maskdef.cardinality; i++) { - var prevalidator = prevalidatorsL >= i ? prevalidators[i - 1] : [], validator = prevalidator.validator, cardinality = prevalidator.cardinality; - mtoken.matches.splice(position++, 0, { - fn: validator ? "string" == typeof validator ? new RegExp(validator) : new function() { - this.test = validator; - }() : new RegExp("."), - cardinality: cardinality ? cardinality : 1, - optionality: mtoken.isOptional, - newBlockMarker: void 0 === prevMatch || prevMatch.def !== (maskdef.definitionSymbol || element), - casing: maskdef.casing, - def: maskdef.definitionSymbol || element, - placeholder: maskdef.placeholder, - nativeDef: element - }), prevMatch = mtoken.matches[position - 1]; - } - mtoken.matches.splice(position++, 0, { - fn: maskdef.validator ? "string" == typeof maskdef.validator ? new RegExp(maskdef.validator) : new function() { - this.test = maskdef.validator; - }() : new RegExp("."), - cardinality: maskdef.cardinality, - optionality: mtoken.isOptional, - newBlockMarker: void 0 === prevMatch || prevMatch.def !== (maskdef.definitionSymbol || element), - casing: maskdef.casing, - def: maskdef.definitionSymbol || element, - placeholder: maskdef.placeholder, - nativeDef: element - }); - } else mtoken.matches.splice(position++, 0, { - fn: null, - cardinality: 0, - optionality: mtoken.isOptional, - newBlockMarker: void 0 === prevMatch || prevMatch.def !== element, - casing: null, - def: opts.staticDefinitionSymbol || element, - placeholder: void 0 !== opts.staticDefinitionSymbol ? element : void 0, - nativeDef: element - }), escaped = !1; - } - function verifyGroupMarker(maskToken) { - maskToken && maskToken.matches && $.each(maskToken.matches, function(ndx, token) { - var nextToken = maskToken.matches[ndx + 1]; - (void 0 === nextToken || void 0 === nextToken.matches || nextToken.isQuantifier === !1) && token && token.isGroup && (token.isGroup = !1, - insertTestDefinition(token, opts.groupmarker.start, 0), token.openGroup !== !0 && insertTestDefinition(token, opts.groupmarker.end)), - verifyGroupMarker(token); - }); - } - function defaultCase() { - if (openenings.length > 0) { - if (currentOpeningToken = openenings[openenings.length - 1], insertTestDefinition(currentOpeningToken, m), - currentOpeningToken.isAlternator) { - alternator = openenings.pop(); - for (var mndx = 0; mndx < alternator.matches.length; mndx++) alternator.matches[mndx].isGroup = !1; - openenings.length > 0 ? (currentOpeningToken = openenings[openenings.length - 1], - currentOpeningToken.matches.push(alternator)) : currentToken.matches.push(alternator); - } - } else insertTestDefinition(currentToken, m); - } - function reverseTokens(maskToken) { - function reverseStatic(st) { - return st === opts.optionalmarker.start ? st = opts.optionalmarker.end : st === opts.optionalmarker.end ? st = opts.optionalmarker.start : st === opts.groupmarker.start ? st = opts.groupmarker.end : st === opts.groupmarker.end && (st = opts.groupmarker.start), - st; - } - maskToken.matches = maskToken.matches.reverse(); - for (var match in maskToken.matches) if (maskToken.matches.hasOwnProperty(match)) { - var intMatch = parseInt(match); - if (maskToken.matches[match].isQuantifier && maskToken.matches[intMatch + 1] && maskToken.matches[intMatch + 1].isGroup) { - var qt = maskToken.matches[match]; - maskToken.matches.splice(match, 1), maskToken.matches.splice(intMatch + 1, 0, qt); - } - void 0 !== maskToken.matches[match].matches ? maskToken.matches[match] = reverseTokens(maskToken.matches[match]) : maskToken.matches[match] = reverseStatic(maskToken.matches[match]); - } - return maskToken; - } - for (var match, m, openingToken, currentOpeningToken, alternator, lastMatch, groupToken, tokenizer = /(?:[?*+]|\{[0-9\+\*]+(?:,[0-9\+\*]*)?\})|[^.?*+^${[]()|\\]+|./g, escaped = !1, currentToken = new MaskToken(), openenings = [], maskTokens = []; match = tokenizer.exec(mask); ) if (m = match[0], - escaped) defaultCase(); else switch (m.charAt(0)) { - case opts.escapeChar: - escaped = !0; - break; - - case opts.optionalmarker.end: - case opts.groupmarker.end: - if (openingToken = openenings.pop(), openingToken.openGroup = !1, void 0 !== openingToken) if (openenings.length > 0) { - if (currentOpeningToken = openenings[openenings.length - 1], currentOpeningToken.matches.push(openingToken), - currentOpeningToken.isAlternator) { - alternator = openenings.pop(); - for (var mndx = 0; mndx < alternator.matches.length; mndx++) alternator.matches[mndx].isGroup = !1; - openenings.length > 0 ? (currentOpeningToken = openenings[openenings.length - 1], - currentOpeningToken.matches.push(alternator)) : currentToken.matches.push(alternator); - } - } else currentToken.matches.push(openingToken); else defaultCase(); - break; - - case opts.optionalmarker.start: - openenings.push(new MaskToken((!1), (!0))); - break; - - case opts.groupmarker.start: - openenings.push(new MaskToken((!0))); - break; - - case opts.quantifiermarker.start: - var quantifier = new MaskToken((!1), (!1), (!0)); - m = m.replace(/[{}]/g, ""); - var mq = m.split(","), mq0 = isNaN(mq[0]) ? mq[0] : parseInt(mq[0]), mq1 = 1 === mq.length ? mq0 : isNaN(mq[1]) ? mq[1] : parseInt(mq[1]); - if ("*" !== mq1 && "+" !== mq1 || (mq0 = "*" === mq1 ? 0 : 1), quantifier.quantifier = { - min: mq0, - max: mq1 - }, openenings.length > 0) { - var matches = openenings[openenings.length - 1].matches; - match = matches.pop(), match.isGroup || (groupToken = new MaskToken((!0)), groupToken.matches.push(match), - match = groupToken), matches.push(match), matches.push(quantifier); - } else match = currentToken.matches.pop(), match.isGroup || (groupToken = new MaskToken((!0)), - groupToken.matches.push(match), match = groupToken), currentToken.matches.push(match), - currentToken.matches.push(quantifier); - break; - - case opts.alternatormarker: - openenings.length > 0 ? (currentOpeningToken = openenings[openenings.length - 1], - lastMatch = currentOpeningToken.matches.pop()) : lastMatch = currentToken.matches.pop(), - lastMatch.isAlternator ? openenings.push(lastMatch) : (alternator = new MaskToken((!1), (!1), (!1), (!0)), - alternator.matches.push(lastMatch), openenings.push(alternator)); - break; - - default: - defaultCase(); - } - for (;openenings.length > 0; ) openingToken = openenings.pop(), currentToken.matches.push(openingToken); - return currentToken.matches.length > 0 && (verifyGroupMarker(currentToken), maskTokens.push(currentToken)), - opts.numericInput && reverseTokens(maskTokens[0]), maskTokens; - } - }, Inputmask.extendDefaults = function(options) { - $.extend(!0, Inputmask.prototype.defaults, options); - }, Inputmask.extendDefinitions = function(definition) { - $.extend(!0, Inputmask.prototype.definitions, definition); - }, Inputmask.extendAliases = function(alias) { - $.extend(!0, Inputmask.prototype.aliases, alias); - }, Inputmask.format = function(value, options, metadata) { - return Inputmask(options).format(value, metadata); - }, Inputmask.unmask = function(value, options) { - return Inputmask(options).unmaskedvalue(value); - }, Inputmask.isValid = function(value, options) { - return Inputmask(options).isValid(value); - }, Inputmask.remove = function(elems) { - $.each(elems, function(ndx, el) { - el.inputmask && el.inputmask.remove(); - }); - }, Inputmask.escapeRegex = function(str) { - var specials = [ "/", ".", "*", "+", "?", "|", "(", ")", "[", "]", "{", "}", "\\", "$", "^" ]; - return str.replace(new RegExp("(\\" + specials.join("|\\") + ")", "gim"), "\\$1"); - }, Inputmask.keyCode = { - ALT: 18, - BACKSPACE: 8, - BACKSPACE_SAFARI: 127, - CAPS_LOCK: 20, - COMMA: 188, - COMMAND: 91, - COMMAND_LEFT: 91, - COMMAND_RIGHT: 93, - CONTROL: 17, - DELETE: 46, - DOWN: 40, - END: 35, - ENTER: 13, - ESCAPE: 27, - HOME: 36, - INSERT: 45, - LEFT: 37, - MENU: 93, - NUMPAD_ADD: 107, - NUMPAD_DECIMAL: 110, - NUMPAD_DIVIDE: 111, - NUMPAD_ENTER: 108, - NUMPAD_MULTIPLY: 106, - NUMPAD_SUBTRACT: 109, - PAGE_DOWN: 34, - PAGE_UP: 33, - PERIOD: 190, - RIGHT: 39, - SHIFT: 16, - SPACE: 32, - TAB: 9, - UP: 38, - WINDOWS: 91, - X: 88 - }, window.Inputmask = Inputmask, Inputmask; -}(jQuery), function($, Inputmask) { - return void 0 === $.fn.inputmask && ($.fn.inputmask = function(fn, options) { - var nptmask, input = this[0]; - if (void 0 === options && (options = {}), "string" == typeof fn) switch (fn) { - case "unmaskedvalue": - return input && input.inputmask ? input.inputmask.unmaskedvalue() : $(input).val(); - - case "remove": - return this.each(function() { - this.inputmask && this.inputmask.remove(); - }); - - case "getemptymask": - return input && input.inputmask ? input.inputmask.getemptymask() : ""; - - case "hasMaskedValue": - return !(!input || !input.inputmask) && input.inputmask.hasMaskedValue(); - - case "isComplete": - return !input || !input.inputmask || input.inputmask.isComplete(); - - case "getmetadata": - return input && input.inputmask ? input.inputmask.getmetadata() : void 0; - - case "setvalue": - $(input).val(options), input && void 0 === input.inputmask && $(input).triggerHandler("setvalue"); - break; - - case "option": - if ("string" != typeof options) return this.each(function() { - if (void 0 !== this.inputmask) return this.inputmask.option(options); - }); - if (input && void 0 !== input.inputmask) return input.inputmask.option(options); - break; - - default: - return options.alias = fn, nptmask = new Inputmask(options), this.each(function() { - nptmask.mask(this); - }); - } else { - if ("object" == typeof fn) return nptmask = new Inputmask(fn), void 0 === fn.mask && void 0 === fn.alias ? this.each(function() { - return void 0 !== this.inputmask ? this.inputmask.option(fn) : void nptmask.mask(this); - }) : this.each(function() { - nptmask.mask(this); - }); - if (void 0 === fn) return this.each(function() { - nptmask = new Inputmask(options), nptmask.mask(this); - }); - } - }), $.fn.inputmask; -}(jQuery, Inputmask), function($, Inputmask) { - function isLeapYear(year) { - return isNaN(year) || 29 === new Date(year, 2, 0).getDate(); - } - return Inputmask.extendAliases({ - "dd/mm/yyyy": { - mask: "1/2/y", - placeholder: "dd/mm/yyyy", - regex: { - val1pre: new RegExp("[0-3]"), - val1: new RegExp("0[1-9]|[12][0-9]|3[01]"), - val2pre: function(separator) { - var escapedSeparator = Inputmask.escapeRegex.call(this, separator); - return new RegExp("((0[1-9]|[12][0-9]|3[01])" + escapedSeparator + "[01])"); - }, - val2: function(separator) { - var escapedSeparator = Inputmask.escapeRegex.call(this, separator); - return new RegExp("((0[1-9]|[12][0-9])" + escapedSeparator + "(0[1-9]|1[012]))|(30" + escapedSeparator + "(0[13-9]|1[012]))|(31" + escapedSeparator + "(0[13578]|1[02]))"); - } - }, - leapday: "29/02/", - separator: "/", - yearrange: { - minyear: 1900, - maxyear: 2099 - }, - isInYearRange: function(chrs, minyear, maxyear) { - if (isNaN(chrs)) return !1; - var enteredyear = parseInt(chrs.concat(minyear.toString().slice(chrs.length))), enteredyear2 = parseInt(chrs.concat(maxyear.toString().slice(chrs.length))); - return !isNaN(enteredyear) && (minyear <= enteredyear && enteredyear <= maxyear) || !isNaN(enteredyear2) && (minyear <= enteredyear2 && enteredyear2 <= maxyear); - }, - determinebaseyear: function(minyear, maxyear, hint) { - var currentyear = new Date().getFullYear(); - if (minyear > currentyear) return minyear; - if (maxyear < currentyear) { - for (var maxYearPrefix = maxyear.toString().slice(0, 2), maxYearPostfix = maxyear.toString().slice(2, 4); maxyear < maxYearPrefix + hint; ) maxYearPrefix--; - var maxxYear = maxYearPrefix + maxYearPostfix; - return minyear > maxxYear ? minyear : maxxYear; - } - if (minyear <= currentyear && currentyear <= maxyear) { - for (var currentYearPrefix = currentyear.toString().slice(0, 2); maxyear < currentYearPrefix + hint; ) currentYearPrefix--; - var currentYearAndHint = currentYearPrefix + hint; - return currentYearAndHint < minyear ? minyear : currentYearAndHint; - } - return currentyear; - }, - onKeyDown: function(e, buffer, caretPos, opts) { - var $input = $(this); - if (e.ctrlKey && e.keyCode === Inputmask.keyCode.RIGHT) { - var today = new Date(); - $input.val(today.getDate().toString() + (today.getMonth() + 1).toString() + today.getFullYear().toString()), - $input.trigger("setvalue"); - } - }, - getFrontValue: function(mask, buffer, opts) { - for (var start = 0, length = 0, i = 0; i < mask.length && "2" !== mask.charAt(i); i++) { - var definition = opts.definitions[mask.charAt(i)]; - definition ? (start += length, length = definition.cardinality) : length++; - } - return buffer.join("").substr(start, length); - }, - postValidation: function(buffer, currentResult, opts) { - var dayMonthValue, year, bufferStr = buffer.join(""); - return 0 === opts.mask.indexOf("y") ? (year = bufferStr.substr(0, 4), dayMonthValue = bufferStr.substr(4, 11)) : (year = bufferStr.substr(6, 11), - dayMonthValue = bufferStr.substr(0, 6)), currentResult && (dayMonthValue !== opts.leapday || isLeapYear(year)); - }, - definitions: { - "1": { - validator: function(chrs, maskset, pos, strict, opts) { - var isValid = opts.regex.val1.test(chrs); - return strict || isValid || chrs.charAt(1) !== opts.separator && "-./".indexOf(chrs.charAt(1)) === -1 || !(isValid = opts.regex.val1.test("0" + chrs.charAt(0))) ? isValid : (maskset.buffer[pos - 1] = "0", - { - refreshFromBuffer: { - start: pos - 1, - end: pos - }, - pos: pos, - c: chrs.charAt(0) - }); - }, - cardinality: 2, - prevalidator: [ { - validator: function(chrs, maskset, pos, strict, opts) { - var pchrs = chrs; - isNaN(maskset.buffer[pos + 1]) || (pchrs += maskset.buffer[pos + 1]); - var isValid = 1 === pchrs.length ? opts.regex.val1pre.test(pchrs) : opts.regex.val1.test(pchrs); - if (!strict && !isValid) { - if (isValid = opts.regex.val1.test(chrs + "0")) return maskset.buffer[pos] = chrs, - maskset.buffer[++pos] = "0", { - pos: pos, - c: "0" - }; - if (isValid = opts.regex.val1.test("0" + chrs)) return maskset.buffer[pos] = "0", - pos++, { - pos: pos - }; - } - return isValid; - }, - cardinality: 1 - } ] - }, - "2": { - validator: function(chrs, maskset, pos, strict, opts) { - var frontValue = opts.getFrontValue(maskset.mask, maskset.buffer, opts); - frontValue.indexOf(opts.placeholder[0]) !== -1 && (frontValue = "01" + opts.separator); - var isValid = opts.regex.val2(opts.separator).test(frontValue + chrs); - return strict || isValid || chrs.charAt(1) !== opts.separator && "-./".indexOf(chrs.charAt(1)) === -1 || !(isValid = opts.regex.val2(opts.separator).test(frontValue + "0" + chrs.charAt(0))) ? isValid : (maskset.buffer[pos - 1] = "0", - { - refreshFromBuffer: { - start: pos - 1, - end: pos - }, - pos: pos, - c: chrs.charAt(0) - }); - }, - cardinality: 2, - prevalidator: [ { - validator: function(chrs, maskset, pos, strict, opts) { - isNaN(maskset.buffer[pos + 1]) || (chrs += maskset.buffer[pos + 1]); - var frontValue = opts.getFrontValue(maskset.mask, maskset.buffer, opts); - frontValue.indexOf(opts.placeholder[0]) !== -1 && (frontValue = "01" + opts.separator); - var isValid = 1 === chrs.length ? opts.regex.val2pre(opts.separator).test(frontValue + chrs) : opts.regex.val2(opts.separator).test(frontValue + chrs); - return strict || isValid || !(isValid = opts.regex.val2(opts.separator).test(frontValue + "0" + chrs)) ? isValid : (maskset.buffer[pos] = "0", - pos++, { - pos: pos - }); - }, - cardinality: 1 - } ] - }, - y: { - validator: function(chrs, maskset, pos, strict, opts) { - return opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear); - }, - cardinality: 4, - prevalidator: [ { - validator: function(chrs, maskset, pos, strict, opts) { - var isValid = opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear); - if (!strict && !isValid) { - var yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs + "0").toString().slice(0, 1); - if (isValid = opts.isInYearRange(yearPrefix + chrs, opts.yearrange.minyear, opts.yearrange.maxyear)) return maskset.buffer[pos++] = yearPrefix.charAt(0), - { - pos: pos - }; - if (yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs + "0").toString().slice(0, 2), - isValid = opts.isInYearRange(yearPrefix + chrs, opts.yearrange.minyear, opts.yearrange.maxyear)) return maskset.buffer[pos++] = yearPrefix.charAt(0), - maskset.buffer[pos++] = yearPrefix.charAt(1), { - pos: pos - }; - } - return isValid; - }, - cardinality: 1 - }, { - validator: function(chrs, maskset, pos, strict, opts) { - var isValid = opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear); - if (!strict && !isValid) { - var yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs).toString().slice(0, 2); - if (isValid = opts.isInYearRange(chrs[0] + yearPrefix[1] + chrs[1], opts.yearrange.minyear, opts.yearrange.maxyear)) return maskset.buffer[pos++] = yearPrefix.charAt(1), - { - pos: pos - }; - if (yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs).toString().slice(0, 2), - isValid = opts.isInYearRange(yearPrefix + chrs, opts.yearrange.minyear, opts.yearrange.maxyear)) return maskset.buffer[pos - 1] = yearPrefix.charAt(0), - maskset.buffer[pos++] = yearPrefix.charAt(1), maskset.buffer[pos++] = chrs.charAt(0), - { - refreshFromBuffer: { - start: pos - 3, - end: pos - }, - pos: pos - }; - } - return isValid; - }, - cardinality: 2 - }, { - validator: function(chrs, maskset, pos, strict, opts) { - return opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear); - }, - cardinality: 3 - } ] - } - }, - insertMode: !1, - autoUnmask: !1 - }, - "mm/dd/yyyy": { - placeholder: "mm/dd/yyyy", - alias: "dd/mm/yyyy", - regex: { - val2pre: function(separator) { - var escapedSeparator = Inputmask.escapeRegex.call(this, separator); - return new RegExp("((0[13-9]|1[012])" + escapedSeparator + "[0-3])|(02" + escapedSeparator + "[0-2])"); - }, - val2: function(separator) { - var escapedSeparator = Inputmask.escapeRegex.call(this, separator); - return new RegExp("((0[1-9]|1[012])" + escapedSeparator + "(0[1-9]|[12][0-9]))|((0[13-9]|1[012])" + escapedSeparator + "30)|((0[13578]|1[02])" + escapedSeparator + "31)"); - }, - val1pre: new RegExp("[01]"), - val1: new RegExp("0[1-9]|1[012]") - }, - leapday: "02/29/", - onKeyDown: function(e, buffer, caretPos, opts) { - var $input = $(this); - if (e.ctrlKey && e.keyCode === Inputmask.keyCode.RIGHT) { - var today = new Date(); - $input.val((today.getMonth() + 1).toString() + today.getDate().toString() + today.getFullYear().toString()), - $input.trigger("setvalue"); - } - } - }, - "yyyy/mm/dd": { - mask: "y/1/2", - placeholder: "yyyy/mm/dd", - alias: "mm/dd/yyyy", - leapday: "/02/29", - onKeyDown: function(e, buffer, caretPos, opts) { - var $input = $(this); - if (e.ctrlKey && e.keyCode === Inputmask.keyCode.RIGHT) { - var today = new Date(); - $input.val(today.getFullYear().toString() + (today.getMonth() + 1).toString() + today.getDate().toString()), - $input.trigger("setvalue"); - } - } - }, - "dd.mm.yyyy": { - mask: "1.2.y", - placeholder: "dd.mm.yyyy", - leapday: "29.02.", - separator: ".", - alias: "dd/mm/yyyy" - }, - "dd-mm-yyyy": { - mask: "1-2-y", - placeholder: "dd-mm-yyyy", - leapday: "29-02-", - separator: "-", - alias: "dd/mm/yyyy" - }, - "mm.dd.yyyy": { - mask: "1.2.y", - placeholder: "mm.dd.yyyy", - leapday: "02.29.", - separator: ".", - alias: "mm/dd/yyyy" - }, - "mm-dd-yyyy": { - mask: "1-2-y", - placeholder: "mm-dd-yyyy", - leapday: "02-29-", - separator: "-", - alias: "mm/dd/yyyy" - }, - "yyyy.mm.dd": { - mask: "y.1.2", - placeholder: "yyyy.mm.dd", - leapday: ".02.29", - separator: ".", - alias: "yyyy/mm/dd" - }, - "yyyy-mm-dd": { - mask: "y-1-2", - placeholder: "yyyy-mm-dd", - leapday: "-02-29", - separator: "-", - alias: "yyyy/mm/dd" - }, - datetime: { - mask: "1/2/y h:s", - placeholder: "dd/mm/yyyy hh:mm", - alias: "dd/mm/yyyy", - regex: { - hrspre: new RegExp("[012]"), - hrs24: new RegExp("2[0-4]|1[3-9]"), - hrs: new RegExp("[01][0-9]|2[0-4]"), - ampm: new RegExp("^[a|p|A|P][m|M]"), - mspre: new RegExp("[0-5]"), - ms: new RegExp("[0-5][0-9]") - }, - timeseparator: ":", - hourFormat: "24", - definitions: { - h: { - validator: function(chrs, maskset, pos, strict, opts) { - if ("24" === opts.hourFormat && 24 === parseInt(chrs, 10)) return maskset.buffer[pos - 1] = "0", - maskset.buffer[pos] = "0", { - refreshFromBuffer: { - start: pos - 1, - end: pos - }, - c: "0" - }; - var isValid = opts.regex.hrs.test(chrs); - if (!strict && !isValid && (chrs.charAt(1) === opts.timeseparator || "-.:".indexOf(chrs.charAt(1)) !== -1) && (isValid = opts.regex.hrs.test("0" + chrs.charAt(0)))) return maskset.buffer[pos - 1] = "0", - maskset.buffer[pos] = chrs.charAt(0), pos++, { - refreshFromBuffer: { - start: pos - 2, - end: pos - }, - pos: pos, - c: opts.timeseparator - }; - if (isValid && "24" !== opts.hourFormat && opts.regex.hrs24.test(chrs)) { - var tmp = parseInt(chrs, 10); - return 24 === tmp ? (maskset.buffer[pos + 5] = "a", maskset.buffer[pos + 6] = "m") : (maskset.buffer[pos + 5] = "p", - maskset.buffer[pos + 6] = "m"), tmp -= 12, tmp < 10 ? (maskset.buffer[pos] = tmp.toString(), - maskset.buffer[pos - 1] = "0") : (maskset.buffer[pos] = tmp.toString().charAt(1), - maskset.buffer[pos - 1] = tmp.toString().charAt(0)), { - refreshFromBuffer: { - start: pos - 1, - end: pos + 6 - }, - c: maskset.buffer[pos] - }; - } - return isValid; - }, - cardinality: 2, - prevalidator: [ { - validator: function(chrs, maskset, pos, strict, opts) { - var isValid = opts.regex.hrspre.test(chrs); - return strict || isValid || !(isValid = opts.regex.hrs.test("0" + chrs)) ? isValid : (maskset.buffer[pos] = "0", - pos++, { - pos: pos - }); - }, - cardinality: 1 - } ] - }, - s: { - validator: "[0-5][0-9]", - cardinality: 2, - prevalidator: [ { - validator: function(chrs, maskset, pos, strict, opts) { - var isValid = opts.regex.mspre.test(chrs); - return strict || isValid || !(isValid = opts.regex.ms.test("0" + chrs)) ? isValid : (maskset.buffer[pos] = "0", - pos++, { - pos: pos - }); - }, - cardinality: 1 - } ] - }, - t: { - validator: function(chrs, maskset, pos, strict, opts) { - return opts.regex.ampm.test(chrs + "m"); - }, - casing: "lower", - cardinality: 1 - } - }, - insertMode: !1, - autoUnmask: !1 - }, - datetime12: { - mask: "1/2/y h:s t\\m", - placeholder: "dd/mm/yyyy hh:mm xm", - alias: "datetime", - hourFormat: "12" - }, - "mm/dd/yyyy hh:mm xm": { - mask: "1/2/y h:s t\\m", - placeholder: "mm/dd/yyyy hh:mm xm", - alias: "datetime12", - regex: { - val2pre: function(separator) { - var escapedSeparator = Inputmask.escapeRegex.call(this, separator); - return new RegExp("((0[13-9]|1[012])" + escapedSeparator + "[0-3])|(02" + escapedSeparator + "[0-2])"); - }, - val2: function(separator) { - var escapedSeparator = Inputmask.escapeRegex.call(this, separator); - return new RegExp("((0[1-9]|1[012])" + escapedSeparator + "(0[1-9]|[12][0-9]))|((0[13-9]|1[012])" + escapedSeparator + "30)|((0[13578]|1[02])" + escapedSeparator + "31)"); - }, - val1pre: new RegExp("[01]"), - val1: new RegExp("0[1-9]|1[012]") - }, - leapday: "02/29/", - onKeyDown: function(e, buffer, caretPos, opts) { - var $input = $(this); - if (e.ctrlKey && e.keyCode === Inputmask.keyCode.RIGHT) { - var today = new Date(); - $input.val((today.getMonth() + 1).toString() + today.getDate().toString() + today.getFullYear().toString()), - $input.trigger("setvalue"); - } - } - }, - "hh:mm t": { - mask: "h:s t\\m", - placeholder: "hh:mm xm", - alias: "datetime", - hourFormat: "12" - }, - "h:s t": { - mask: "h:s t\\m", - placeholder: "hh:mm xm", - alias: "datetime", - hourFormat: "12" - }, - "hh:mm:ss": { - mask: "h:s:s", - placeholder: "hh:mm:ss", - alias: "datetime", - autoUnmask: !1 - }, - "hh:mm": { - mask: "h:s", - placeholder: "hh:mm", - alias: "datetime", - autoUnmask: !1 - }, - date: { - alias: "dd/mm/yyyy" - }, - "mm/yyyy": { - mask: "1/y", - placeholder: "mm/yyyy", - leapday: "donotuse", - separator: "/", - alias: "mm/dd/yyyy" - }, - shamsi: { - regex: { - val2pre: function(separator) { - var escapedSeparator = Inputmask.escapeRegex.call(this, separator); - return new RegExp("((0[1-9]|1[012])" + escapedSeparator + "[0-3])"); - }, - val2: function(separator) { - var escapedSeparator = Inputmask.escapeRegex.call(this, separator); - return new RegExp("((0[1-9]|1[012])" + escapedSeparator + "(0[1-9]|[12][0-9]))|((0[1-9]|1[012])" + escapedSeparator + "30)|((0[1-6])" + escapedSeparator + "31)"); - }, - val1pre: new RegExp("[01]"), - val1: new RegExp("0[1-9]|1[012]") - }, - yearrange: { - minyear: 1300, - maxyear: 1499 - }, - mask: "y/1/2", - leapday: "/12/30", - placeholder: "yyyy/mm/dd", - alias: "mm/dd/yyyy", - clearIncomplete: !0 - }, - "yyyy-mm-dd hh:mm:ss": { - mask: "y-1-2 h:s:s", - placeholder: "yyyy-mm-dd hh:mm:ss", - alias: "datetime", - separator: "-", - leapday: "-02-29", - regex: { - val2pre: function(separator) { - var escapedSeparator = Inputmask.escapeRegex.call(this, separator); - return new RegExp("((0[13-9]|1[012])" + escapedSeparator + "[0-3])|(02" + escapedSeparator + "[0-2])"); - }, - val2: function(separator) { - var escapedSeparator = Inputmask.escapeRegex.call(this, separator); - return new RegExp("((0[1-9]|1[012])" + escapedSeparator + "(0[1-9]|[12][0-9]))|((0[13-9]|1[012])" + escapedSeparator + "30)|((0[13578]|1[02])" + escapedSeparator + "31)"); - }, - val1pre: new RegExp("[01]"), - val1: new RegExp("0[1-9]|1[012]") - }, - onKeyDown: function(e, buffer, caretPos, opts) {} - } - }), Inputmask; -}(jQuery, Inputmask), function($, Inputmask) { - return Inputmask.extendDefinitions({ - A: { - validator: "[A-Za-z\u0410-\u044f\u0401\u0451\xc0-\xff\xb5]", - cardinality: 1, - casing: "upper" - }, - "&": { - validator: "[0-9A-Za-z\u0410-\u044f\u0401\u0451\xc0-\xff\xb5]", - cardinality: 1, - casing: "upper" - }, - "#": { - validator: "[0-9A-Fa-f]", - cardinality: 1, - casing: "upper" - } - }), Inputmask.extendAliases({ - url: { - definitions: { - i: { - validator: ".", - cardinality: 1 - } - }, - mask: "(\\http://)|(\\http\\s://)|(ftp://)|(ftp\\s://)i{+}", - insertMode: !1, - autoUnmask: !1, - inputmode: "url" - }, - ip: { - mask: "i[i[i]].i[i[i]].i[i[i]].i[i[i]]", - definitions: { - i: { - validator: function(chrs, maskset, pos, strict, opts) { - return pos - 1 > -1 && "." !== maskset.buffer[pos - 1] ? (chrs = maskset.buffer[pos - 1] + chrs, - chrs = pos - 2 > -1 && "." !== maskset.buffer[pos - 2] ? maskset.buffer[pos - 2] + chrs : "0" + chrs) : chrs = "00" + chrs, - new RegExp("25[0-5]|2[0-4][0-9]|[01][0-9][0-9]").test(chrs); - }, - cardinality: 1 - } - }, - onUnMask: function(maskedValue, unmaskedValue, opts) { - return maskedValue; - }, - inputmode: "numeric" - }, - email: { - mask: "*{1,64}[.*{1,64}][.*{1,64}][.*{1,63}]@-{1,63}.-{1,63}[.-{1,63}][.-{1,63}]", - greedy: !1, - onBeforePaste: function(pastedValue, opts) { - return pastedValue = pastedValue.toLowerCase(), pastedValue.replace("mailto:", ""); - }, - definitions: { - "*": { - validator: "[0-9A-Za-z!#$%&'*+/=?^_`{|}~-]", - cardinality: 1, - casing: "lower" - }, - "-": { - validator: "[0-9A-Za-z-]", - cardinality: 1, - casing: "lower" - } - }, - onUnMask: function(maskedValue, unmaskedValue, opts) { - return maskedValue; - }, - inputmode: "email" - }, - mac: { - mask: "##:##:##:##:##:##" - }, - vin: { - mask: "V{13}9{4}", - definitions: { - V: { - validator: "[A-HJ-NPR-Za-hj-npr-z\\d]", - cardinality: 1, - casing: "upper" - } - }, - clearIncomplete: !0, - autoUnmask: !0 - } - }), Inputmask; -}(jQuery, Inputmask), function($, Inputmask) { - return Inputmask.extendAliases({ - numeric: { - mask: function(opts) { - function autoEscape(txt) { - for (var escapedTxt = "", i = 0; i < txt.length; i++) escapedTxt += opts.definitions[txt.charAt(i)] || opts.optionalmarker.start === txt.charAt(i) || opts.optionalmarker.end === txt.charAt(i) || opts.quantifiermarker.start === txt.charAt(i) || opts.quantifiermarker.end === txt.charAt(i) || opts.groupmarker.start === txt.charAt(i) || opts.groupmarker.end === txt.charAt(i) || opts.alternatormarker === txt.charAt(i) ? "\\" + txt.charAt(i) : txt.charAt(i); - return escapedTxt; - } - if (0 !== opts.repeat && isNaN(opts.integerDigits) && (opts.integerDigits = opts.repeat), - opts.repeat = 0, opts.groupSeparator === opts.radixPoint && ("." === opts.radixPoint ? opts.groupSeparator = "," : "," === opts.radixPoint ? opts.groupSeparator = "." : opts.groupSeparator = ""), - " " === opts.groupSeparator && (opts.skipOptionalPartCharacter = void 0), opts.autoGroup = opts.autoGroup && "" !== opts.groupSeparator, - opts.autoGroup && ("string" == typeof opts.groupSize && isFinite(opts.groupSize) && (opts.groupSize = parseInt(opts.groupSize)), - isFinite(opts.integerDigits))) { - var seps = Math.floor(opts.integerDigits / opts.groupSize), mod = opts.integerDigits % opts.groupSize; - opts.integerDigits = parseInt(opts.integerDigits) + (0 === mod ? seps - 1 : seps), - opts.integerDigits < 1 && (opts.integerDigits = "*"); - } - opts.placeholder.length > 1 && (opts.placeholder = opts.placeholder.charAt(0)), - "radixFocus" === opts.positionCaretOnClick && "" === opts.placeholder && opts.integerOptional === !1 && (opts.positionCaretOnClick = "lvp"), - opts.definitions[";"] = opts.definitions["~"], opts.definitions[";"].definitionSymbol = "~", - opts.numericInput === !0 && (opts.positionCaretOnClick = "radixFocus" === opts.positionCaretOnClick ? "lvp" : opts.positionCaretOnClick, - opts.digitsOptional = !1, isNaN(opts.digits) && (opts.digits = 2), opts.decimalProtect = !1); - var mask = "[+]"; - if (mask += autoEscape(opts.prefix), mask += opts.integerOptional === !0 ? "~{1," + opts.integerDigits + "}" : "~{" + opts.integerDigits + "}", - void 0 !== opts.digits) { - opts.radixPointDefinitionSymbol = opts.decimalProtect ? ":" : opts.radixPoint; - var dq = opts.digits.toString().split(","); - isFinite(dq[0] && dq[1] && isFinite(dq[1])) ? mask += opts.radixPointDefinitionSymbol + ";{" + opts.digits + "}" : (isNaN(opts.digits) || parseInt(opts.digits) > 0) && (mask += opts.digitsOptional ? "[" + opts.radixPointDefinitionSymbol + ";{1," + opts.digits + "}]" : opts.radixPointDefinitionSymbol + ";{" + opts.digits + "}"); - } - return mask += autoEscape(opts.suffix), mask += "[-]", opts.greedy = !1, null !== opts.min && (opts.min = opts.min.toString().replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), "g"), ""), - "," === opts.radixPoint && (opts.min = opts.min.replace(opts.radixPoint, "."))), - null !== opts.max && (opts.max = opts.max.toString().replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), "g"), ""), - "," === opts.radixPoint && (opts.max = opts.max.replace(opts.radixPoint, "."))), - mask; - }, - placeholder: "", - greedy: !1, - digits: "*", - digitsOptional: !0, - radixPoint: ".", - positionCaretOnClick: "radixFocus", - groupSize: 3, - groupSeparator: "", - autoGroup: !1, - allowPlus: !0, - allowMinus: !0, - negationSymbol: { - front: "-", - back: "" - }, - integerDigits: "+", - integerOptional: !0, - prefix: "", - suffix: "", - rightAlign: !0, - decimalProtect: !0, - min: null, - max: null, - step: 1, - insertMode: !0, - autoUnmask: !1, - unmaskAsNumber: !1, - inputmode: "numeric", - postFormat: function(buffer, pos, opts) { - opts.numericInput === !0 && (buffer = buffer.reverse(), isFinite(pos) && (pos = buffer.join("").length - pos - 1)); - var i, l; - pos = pos >= buffer.length ? buffer.length - 1 : pos < 0 ? 0 : pos; - var charAtPos = buffer[pos], cbuf = buffer.slice(); - charAtPos === opts.groupSeparator && pos > opts.prefix.length && pos < buffer.length - opts.suffix.length && (cbuf.splice(pos--, 1), - charAtPos = cbuf[pos]); - var isNegative = cbuf.join("").match(new RegExp("^" + Inputmask.escapeRegex(opts.negationSymbol.front))); - isNegative = null !== isNegative && 1 === isNegative.length, pos > (isNegative ? opts.negationSymbol.front.length : 0) + opts.prefix.length && pos < cbuf.length - opts.suffix.length && (cbuf[pos] = "!"); - var bufVal = cbuf.join(""), bufValOrigin = cbuf.join(); - if (isNegative && (bufVal = bufVal.replace(new RegExp("^" + Inputmask.escapeRegex(opts.negationSymbol.front)), ""), - bufVal = bufVal.replace(new RegExp(Inputmask.escapeRegex(opts.negationSymbol.back) + "$"), "")), - bufVal = bufVal.replace(new RegExp(Inputmask.escapeRegex(opts.suffix) + "$"), ""), - bufVal = bufVal.replace(new RegExp("^" + Inputmask.escapeRegex(opts.prefix)), ""), - bufVal.length > 0 && opts.autoGroup || bufVal.indexOf(opts.groupSeparator) !== -1) { - var escapedGroupSeparator = Inputmask.escapeRegex(opts.groupSeparator); - bufVal = bufVal.replace(new RegExp(escapedGroupSeparator, "g"), ""); - var radixSplit = bufVal.split(charAtPos === opts.radixPoint ? "!" : opts.radixPoint); - if (bufVal = "" === opts.radixPoint ? bufVal : radixSplit[0], charAtPos !== opts.negationSymbol.front && (bufVal = bufVal.replace("!", "?")), - bufVal.length > opts.groupSize) for (var reg = new RegExp("([-+]?[\\d?]+)([\\d?]{" + opts.groupSize + "})"); reg.test(bufVal) && "" !== opts.groupSeparator; ) bufVal = bufVal.replace(reg, "$1" + opts.groupSeparator + "$2"), - bufVal = bufVal.replace(opts.groupSeparator + opts.groupSeparator, opts.groupSeparator); - bufVal = bufVal.replace("?", "!"), "" !== opts.radixPoint && radixSplit.length > 1 && (bufVal += (charAtPos === opts.radixPoint ? "!" : opts.radixPoint) + radixSplit[1]); - } - bufVal = opts.prefix + bufVal + opts.suffix, isNegative && (bufVal = opts.negationSymbol.front + bufVal + opts.negationSymbol.back); - var needsRefresh = bufValOrigin !== bufVal.split("").join(), newPos = $.inArray("!", bufVal); - if (newPos === -1 && (newPos = pos), needsRefresh) { - for (buffer.length = bufVal.length, i = 0, l = bufVal.length; i < l; i++) buffer[i] = bufVal.charAt(i); - buffer[newPos] = charAtPos; - } - return newPos = opts.numericInput && isFinite(pos) ? buffer.join("").length - newPos - 1 : newPos, - opts.numericInput && (buffer = buffer.reverse(), $.inArray(opts.radixPoint, buffer) < newPos && buffer.join("").length - opts.suffix.length !== newPos && (newPos -= 1)), - { - pos: newPos, - refreshFromBuffer: needsRefresh, - buffer: buffer, - isNegative: isNegative - }; - }, - onBeforeWrite: function(e, buffer, caretPos, opts) { - var rslt; - if (e && ("blur" === e.type || "checkval" === e.type || "keydown" === e.type)) { - var maskedValue = opts.numericInput ? buffer.slice().reverse().join("") : buffer.join(""), processValue = maskedValue.replace(opts.prefix, ""); - processValue = processValue.replace(opts.suffix, ""), processValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), "g"), ""), - "," === opts.radixPoint && (processValue = processValue.replace(opts.radixPoint, ".")); - var isNegative = processValue.match(new RegExp("[-" + Inputmask.escapeRegex(opts.negationSymbol.front) + "]", "g")); - if (isNegative = null !== isNegative && 1 === isNegative.length, processValue = processValue.replace(new RegExp("[-" + Inputmask.escapeRegex(opts.negationSymbol.front) + "]", "g"), ""), - processValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.negationSymbol.back) + "$"), ""), - isNaN(opts.placeholder) && (processValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.placeholder), "g"), "")), - processValue = processValue === opts.negationSymbol.front ? processValue + "0" : processValue, - "" !== processValue && isFinite(processValue)) { - var floatValue = parseFloat(processValue), signedFloatValue = isNegative ? floatValue * -1 : floatValue; - if ("blur" === e.type && (null !== opts.min && isFinite(opts.min) && signedFloatValue < parseFloat(opts.min) ? (floatValue = Math.abs(opts.min), - isNegative = opts.min < 0, maskedValue = void 0) : null !== opts.max && isFinite(opts.max) && signedFloatValue > parseFloat(opts.max) && (floatValue = Math.abs(opts.max), - isNegative = opts.max < 0, maskedValue = void 0)), processValue = floatValue.toString().replace(".", opts.radixPoint).split(""), - isFinite(opts.digits)) { - var radixPosition = $.inArray(opts.radixPoint, processValue), rpb = $.inArray(opts.radixPoint, maskedValue); - radixPosition === -1 && (processValue.push(opts.radixPoint), radixPosition = processValue.length - 1); - for (var i = 1; i <= opts.digits; i++) opts.digitsOptional || void 0 !== processValue[radixPosition + i] && processValue[radixPosition + i] !== opts.placeholder.charAt(0) ? rpb !== -1 && void 0 !== maskedValue[rpb + i] && (processValue[radixPosition + i] = processValue[radixPosition + i] || maskedValue[rpb + i]) : processValue[radixPosition + i] = "0"; - processValue[processValue.length - 1] === opts.radixPoint && delete processValue[processValue.length - 1]; - } - if (floatValue.toString() !== processValue && floatValue.toString() + "." !== processValue || isNegative) return processValue = (opts.prefix + processValue.join("")).split(""), - !isNegative || 0 === floatValue && "blur" === e.type || (processValue.unshift(opts.negationSymbol.front), - processValue.push(opts.negationSymbol.back)), opts.numericInput && (processValue = processValue.reverse()), - rslt = opts.postFormat(processValue, opts.numericInput ? caretPos : caretPos - 1, opts), - rslt.buffer && (rslt.refreshFromBuffer = rslt.buffer.join("") !== buffer.join("")), - rslt; - } - } - if (opts.autoGroup) return rslt = opts.postFormat(buffer, opts.numericInput ? caretPos : caretPos - 1, opts), - rslt.caret = caretPos < (rslt.isNegative ? opts.negationSymbol.front.length : 0) + opts.prefix.length || caretPos > rslt.buffer.length - (rslt.isNegative ? opts.negationSymbol.back.length : 0) ? rslt.pos : rslt.pos + 1, - rslt; - }, - regex: { - integerPart: function(opts) { - return new RegExp("[" + Inputmask.escapeRegex(opts.negationSymbol.front) + "+]?\\d+"); - }, - integerNPart: function(opts) { - return new RegExp("[\\d" + Inputmask.escapeRegex(opts.groupSeparator) + Inputmask.escapeRegex(opts.placeholder.charAt(0)) + "]+"); - } - }, - signHandler: function(chrs, maskset, pos, strict, opts) { - if (!strict && opts.allowMinus && "-" === chrs || opts.allowPlus && "+" === chrs) { - var matchRslt = maskset.buffer.join("").match(opts.regex.integerPart(opts)); - if (matchRslt && matchRslt[0].length > 0) return maskset.buffer[matchRslt.index] === ("-" === chrs ? "+" : opts.negationSymbol.front) ? "-" === chrs ? "" !== opts.negationSymbol.back ? { - pos: 0, - c: opts.negationSymbol.front, - remove: 0, - caret: pos, - insert: { - pos: maskset.buffer.length - 1, - c: opts.negationSymbol.back - } - } : { - pos: 0, - c: opts.negationSymbol.front, - remove: 0, - caret: pos - } : "" !== opts.negationSymbol.back ? { - pos: 0, - c: "+", - remove: [ 0, maskset.buffer.length - 1 ], - caret: pos - } : { - pos: 0, - c: "+", - remove: 0, - caret: pos - } : maskset.buffer[0] === ("-" === chrs ? opts.negationSymbol.front : "+") ? "-" === chrs && "" !== opts.negationSymbol.back ? { - remove: [ 0, maskset.buffer.length - 1 ], - caret: pos - 1 - } : { - remove: 0, - caret: pos - 1 - } : "-" === chrs ? "" !== opts.negationSymbol.back ? { - pos: 0, - c: opts.negationSymbol.front, - caret: pos + 1, - insert: { - pos: maskset.buffer.length, - c: opts.negationSymbol.back - } - } : { - pos: 0, - c: opts.negationSymbol.front, - caret: pos + 1 - } : { - pos: 0, - c: chrs, - caret: pos + 1 - }; - } - return !1; - }, - radixHandler: function(chrs, maskset, pos, strict, opts) { - if (!strict && opts.numericInput !== !0 && chrs === opts.radixPoint && void 0 !== opts.digits && (isNaN(opts.digits) || parseInt(opts.digits) > 0)) { - var radixPos = $.inArray(opts.radixPoint, maskset.buffer), integerValue = maskset.buffer.join("").match(opts.regex.integerPart(opts)); - if (radixPos !== -1 && maskset.validPositions[radixPos]) return maskset.validPositions[radixPos - 1] ? { - caret: radixPos + 1 - } : { - pos: integerValue.index, - c: integerValue[0], - caret: radixPos + 1 - }; - if (!integerValue || "0" === integerValue[0] && integerValue.index + 1 !== pos) return maskset.buffer[integerValue ? integerValue.index : pos] = "0", - { - pos: (integerValue ? integerValue.index : pos) + 1, - c: opts.radixPoint - }; - } - return !1; - }, - leadingZeroHandler: function(chrs, maskset, pos, strict, opts, isSelection) { - if (!strict) { - var initialPos = pos, buffer = opts.numericInput === !0 ? maskset.buffer.slice("").reverse() : maskset.buffer.slice(""); - opts.numericInput && (pos = buffer.join("").length - pos - 1), buffer.splice(0, opts.prefix.length), - buffer.splice(buffer.length - opts.suffix.length, opts.suffix.length), pos -= opts.prefix.length; - var radixPosition = $.inArray(opts.radixPoint, buffer), matchRslt = buffer.slice(0, radixPosition !== -1 ? radixPosition : void 0).join("").match(opts.regex.integerNPart(opts)); - if (matchRslt && (radixPosition === -1 || pos <= radixPosition || opts.numericInput)) { - var decimalPart = radixPosition === -1 ? 0 : parseInt(buffer.slice(radixPosition + 1).join("")), leadingZero = 0 === matchRslt[0].indexOf("" !== opts.placeholder ? opts.placeholder.charAt(0) : "0"); - if (opts.numericInput) { - if (leadingZero && 0 !== decimalPart && isSelection !== !0) return maskset.buffer.splice(buffer.length - matchRslt.index - 1 + opts.suffix.length, 1), - { - pos: initialPos, - remove: buffer.length - matchRslt.index - 1 + opts.suffix.length - }; - } else { - if (leadingZero && (matchRslt.index + 1 === pos || isSelection !== !0 && 0 === decimalPart)) return maskset.buffer.splice(matchRslt.index + opts.prefix.length, 1), - { - pos: matchRslt.index + opts.prefix.length, - remove: matchRslt.index + opts.prefix.length - }; - if ("0" === chrs && pos <= matchRslt.index && matchRslt[0] !== opts.groupSeparator) return !1; - } - } - } - return !0; - }, - definitions: { - "~": { - validator: function(chrs, maskset, pos, strict, opts, isSelection) { - var isValid = opts.signHandler(chrs, maskset, pos, strict, opts); - if (!isValid && (isValid = opts.radixHandler(chrs, maskset, pos, strict, opts), - !isValid && (isValid = strict ? new RegExp("[0-9" + Inputmask.escapeRegex(opts.groupSeparator) + "]").test(chrs) : new RegExp("[0-9]").test(chrs), - isValid === !0 && (isValid = opts.leadingZeroHandler(chrs, maskset, pos, strict, opts, isSelection), - isValid === !0 && opts.numericInput !== !0)))) { - var radixPosition = $.inArray(opts.radixPoint, maskset.buffer); - isValid = radixPosition !== -1 && (opts.digitsOptional === !1 || maskset.validPositions[pos]) && opts.numericInput !== !0 && pos > radixPosition && !strict ? { - pos: pos, - remove: pos - } : { - pos: pos - }; - } - return isValid; - }, - cardinality: 1 - }, - "+": { - validator: function(chrs, maskset, pos, strict, opts) { - var isValid = opts.signHandler(chrs, maskset, pos, strict, opts); - return !isValid && (strict && opts.allowMinus && chrs === opts.negationSymbol.front || opts.allowMinus && "-" === chrs || opts.allowPlus && "+" === chrs) && (isValid = !(!strict && "-" === chrs) || ("" !== opts.negationSymbol.back ? { - pos: pos, - c: "-" === chrs ? opts.negationSymbol.front : "+", - caret: pos + 1, - insert: { - pos: maskset.buffer.length, - c: opts.negationSymbol.back - } - } : { - pos: pos, - c: "-" === chrs ? opts.negationSymbol.front : "+", - caret: pos + 1 - })), isValid; - }, - cardinality: 1, - placeholder: "" - }, - "-": { - validator: function(chrs, maskset, pos, strict, opts) { - var isValid = opts.signHandler(chrs, maskset, pos, strict, opts); - return !isValid && strict && opts.allowMinus && chrs === opts.negationSymbol.back && (isValid = !0), - isValid; - }, - cardinality: 1, - placeholder: "" - }, - ":": { - validator: function(chrs, maskset, pos, strict, opts) { - var isValid = opts.signHandler(chrs, maskset, pos, strict, opts); - if (!isValid) { - var radix = "[" + Inputmask.escapeRegex(opts.radixPoint) + "]"; - isValid = new RegExp(radix).test(chrs), isValid && maskset.validPositions[pos] && maskset.validPositions[pos].match.placeholder === opts.radixPoint && (isValid = { - caret: pos + 1 - }); - } - return isValid; - }, - cardinality: 1, - placeholder: function(opts) { - return opts.radixPoint; - } - } - }, - onUnMask: function(maskedValue, unmaskedValue, opts) { - if ("" === unmaskedValue && opts.nullable === !0) return unmaskedValue; - var processValue = maskedValue.replace(opts.prefix, ""); - return processValue = processValue.replace(opts.suffix, ""), processValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), "g"), ""), - opts.unmaskAsNumber ? ("" !== opts.radixPoint && processValue.indexOf(opts.radixPoint) !== -1 && (processValue = processValue.replace(Inputmask.escapeRegex.call(this, opts.radixPoint), ".")), - Number(processValue)) : processValue; - }, - isComplete: function(buffer, opts) { - var maskedValue = buffer.join(""), bufClone = buffer.slice(); - if (opts.postFormat(bufClone, 0, opts), bufClone.join("") !== maskedValue) return !1; - var processValue = maskedValue.replace(opts.prefix, ""); - return processValue = processValue.replace(opts.suffix, ""), processValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), "g"), ""), - "," === opts.radixPoint && (processValue = processValue.replace(Inputmask.escapeRegex(opts.radixPoint), ".")), - isFinite(processValue); - }, - onBeforeMask: function(initialValue, opts) { - if (initialValue = initialValue.toString(), opts.numericInput === !0 && (initialValue = initialValue.split("").reverse().join("")), - "" !== opts.radixPoint && isFinite(initialValue)) { - var vs = initialValue.split("."), groupSize = "" !== opts.groupSeparator ? parseInt(opts.groupSize) : 0; - 2 === vs.length && (vs[0].length > groupSize || vs[1].length > groupSize) && (initialValue = initialValue.replace(".", opts.radixPoint)); - } - var kommaMatches = initialValue.match(/,/g), dotMatches = initialValue.match(/\./g); - if (dotMatches && kommaMatches ? dotMatches.length > kommaMatches.length ? (initialValue = initialValue.replace(/\./g, ""), - initialValue = initialValue.replace(",", opts.radixPoint)) : kommaMatches.length > dotMatches.length ? (initialValue = initialValue.replace(/,/g, ""), - initialValue = initialValue.replace(".", opts.radixPoint)) : initialValue = initialValue.indexOf(".") < initialValue.indexOf(",") ? initialValue.replace(/\./g, "") : initialValue = initialValue.replace(/,/g, "") : initialValue = initialValue.replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), "g"), ""), - 0 === opts.digits && (initialValue.indexOf(".") !== -1 ? initialValue = initialValue.substring(0, initialValue.indexOf(".")) : initialValue.indexOf(",") !== -1 && (initialValue = initialValue.substring(0, initialValue.indexOf(",")))), - "" !== opts.radixPoint && isFinite(opts.digits) && initialValue.indexOf(opts.radixPoint) !== -1) { - var valueParts = initialValue.split(opts.radixPoint), decPart = valueParts[1].match(new RegExp("\\d*"))[0]; - if (parseInt(opts.digits) < decPart.toString().length) { - var digitsFactor = Math.pow(10, parseInt(opts.digits)); - initialValue = initialValue.replace(Inputmask.escapeRegex(opts.radixPoint), "."), - initialValue = Math.round(parseFloat(initialValue) * digitsFactor) / digitsFactor, - initialValue = initialValue.toString().replace(".", opts.radixPoint); - } - } - return opts.numericInput === !0 && (initialValue = initialValue.split("").reverse().join("")), - initialValue; - }, - canClearPosition: function(maskset, position, lvp, strict, opts) { - var positionInput = maskset.validPositions[position].input, canClear = positionInput !== opts.radixPoint || null !== maskset.validPositions[position].match.fn && opts.decimalProtect === !1 || isFinite(positionInput) || position === lvp || positionInput === opts.groupSeparator || positionInput === opts.negationSymbol.front || positionInput === opts.negationSymbol.back; - return canClear; - }, - onKeyDown: function(e, buffer, caretPos, opts) { - var $input = $(this); - if (e.ctrlKey) switch (e.keyCode) { - case Inputmask.keyCode.UP: - $input.val(parseFloat(this.inputmask.unmaskedvalue()) + parseInt(opts.step)), $input.trigger("setvalue"); - break; - - case Inputmask.keyCode.DOWN: - $input.val(parseFloat(this.inputmask.unmaskedvalue()) - parseInt(opts.step)), $input.trigger("setvalue"); - } - } - }, - currency: { - prefix: "$ ", - groupSeparator: ",", - alias: "numeric", - placeholder: "0", - autoGroup: !0, - digits: 2, - digitsOptional: !1, - clearMaskOnLostFocus: !1 - }, - decimal: { - alias: "numeric" - }, - integer: { - alias: "numeric", - digits: 0, - radixPoint: "" - }, - percentage: { - alias: "numeric", - digits: 2, - radixPoint: ".", - placeholder: "0", - autoGroup: !1, - min: 0, - max: 100, - suffix: " %", - allowPlus: !1, - allowMinus: !1 - } - }), Inputmask; -}(jQuery, Inputmask), function($, Inputmask) { - function maskSort(a, b) { - var maska = (a.mask || a).replace(/#/g, "9").replace(/\)/, "9").replace(/[+()#-]/g, ""), maskb = (b.mask || b).replace(/#/g, "9").replace(/\)/, "9").replace(/[+()#-]/g, ""), maskas = (a.mask || a).split("#")[0], maskbs = (b.mask || b).split("#")[0]; - return 0 === maskbs.indexOf(maskas) ? -1 : 0 === maskas.indexOf(maskbs) ? 1 : maska.localeCompare(maskb); - } - var analyseMaskBase = Inputmask.prototype.analyseMask; - return Inputmask.prototype.analyseMask = function(mask, opts) { - function reduceVariations(masks, previousVariation, previousmaskGroup) { - previousVariation = previousVariation || "", previousmaskGroup = previousmaskGroup || maskGroups, - "" !== previousVariation && (previousmaskGroup[previousVariation] = {}); - for (var variation = "", maskGroup = previousmaskGroup[previousVariation] || previousmaskGroup, i = masks.length - 1; i >= 0; i--) mask = masks[i].mask || masks[i], - variation = mask.substr(0, 1), maskGroup[variation] = maskGroup[variation] || [], - maskGroup[variation].unshift(mask.substr(1)), masks.splice(i, 1); - for (var ndx in maskGroup) maskGroup[ndx].length > 500 && reduceVariations(maskGroup[ndx].slice(), ndx, maskGroup); - } - function rebuild(maskGroup) { - var mask = "", submasks = []; - for (var ndx in maskGroup) $.isArray(maskGroup[ndx]) ? 1 === maskGroup[ndx].length ? submasks.push(ndx + maskGroup[ndx]) : submasks.push(ndx + opts.groupmarker.start + maskGroup[ndx].join(opts.groupmarker.end + opts.alternatormarker + opts.groupmarker.start) + opts.groupmarker.end) : submasks.push(ndx + rebuild(maskGroup[ndx])); - return mask += 1 === submasks.length ? submasks[0] : opts.groupmarker.start + submasks.join(opts.groupmarker.end + opts.alternatormarker + opts.groupmarker.start) + opts.groupmarker.end; - } - var maskGroups = {}; - opts.phoneCodes && (opts.phoneCodes && opts.phoneCodes.length > 1e3 && (mask = mask.substr(1, mask.length - 2), - reduceVariations(mask.split(opts.groupmarker.end + opts.alternatormarker + opts.groupmarker.start)), - mask = rebuild(maskGroups)), mask = mask.replace(/9/g, "\\9")); - var mt = analyseMaskBase.call(this, mask, opts); - return mt; - }, Inputmask.extendAliases({ - abstractphone: { - groupmarker: { - start: "<", - end: ">" - }, - countrycode: "", - phoneCodes: [], - mask: function(opts) { - return opts.definitions = { - "#": Inputmask.prototype.definitions[9] - }, opts.phoneCodes.sort(maskSort); - }, - keepStatic: !0, - onBeforeMask: function(value, opts) { - var processedValue = value.replace(/^0{1,2}/, "").replace(/[\s]/g, ""); - return (processedValue.indexOf(opts.countrycode) > 1 || processedValue.indexOf(opts.countrycode) === -1) && (processedValue = "+" + opts.countrycode + processedValue), - processedValue; - }, - onUnMask: function(maskedValue, unmaskedValue, opts) { - return unmaskedValue; - }, - inputmode: "tel" - } - }), Inputmask; -}(jQuery, Inputmask), function($, Inputmask) { - return Inputmask.extendAliases({ - Regex: { - mask: "r", - greedy: !1, - repeat: "*", - regex: null, - regexTokens: null, - tokenizer: /\[\^?]?(?:[^\\\]]+|\\[\S\s]?)*]?|\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9][0-9]*|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|c[A-Za-z]|[\S\s]?)|\((?:\?[:=!]?)?|(?:[?*+]|\{[0-9]+(?:,[0-9]*)?\})\??|[^.?*+^${[()|\\]+|./g, - quantifierFilter: /[0-9]+[^,]/, - isComplete: function(buffer, opts) { - return new RegExp(opts.regex, opts.casing ? "i" : "").test(buffer.join("")); - }, - definitions: { - r: { - validator: function(chrs, maskset, pos, strict, opts) { - function RegexToken(isGroup, isQuantifier) { - this.matches = [], this.isGroup = isGroup || !1, this.isQuantifier = isQuantifier || !1, - this.quantifier = { - min: 1, - max: 1 - }, this.repeaterPart = void 0; - } - function analyseRegex() { - var match, m, currentToken = new RegexToken(), opengroups = []; - for (opts.regexTokens = []; match = opts.tokenizer.exec(opts.regex); ) switch (m = match[0], - m.charAt(0)) { - case "(": - opengroups.push(new RegexToken((!0))); - break; - - case ")": - groupToken = opengroups.pop(), opengroups.length > 0 ? opengroups[opengroups.length - 1].matches.push(groupToken) : currentToken.matches.push(groupToken); - break; - - case "{": - case "+": - case "*": - var quantifierToken = new RegexToken((!1), (!0)); - m = m.replace(/[{}]/g, ""); - var mq = m.split(","), mq0 = isNaN(mq[0]) ? mq[0] : parseInt(mq[0]), mq1 = 1 === mq.length ? mq0 : isNaN(mq[1]) ? mq[1] : parseInt(mq[1]); - if (quantifierToken.quantifier = { - min: mq0, - max: mq1 - }, opengroups.length > 0) { - var matches = opengroups[opengroups.length - 1].matches; - match = matches.pop(), match.isGroup || (groupToken = new RegexToken((!0)), groupToken.matches.push(match), - match = groupToken), matches.push(match), matches.push(quantifierToken); - } else match = currentToken.matches.pop(), match.isGroup || (groupToken = new RegexToken((!0)), - groupToken.matches.push(match), match = groupToken), currentToken.matches.push(match), - currentToken.matches.push(quantifierToken); - break; - - default: - opengroups.length > 0 ? opengroups[opengroups.length - 1].matches.push(m) : currentToken.matches.push(m); - } - currentToken.matches.length > 0 && opts.regexTokens.push(currentToken); - } - function validateRegexToken(token, fromGroup) { - var isvalid = !1; - fromGroup && (regexPart += "(", openGroupCount++); - for (var mndx = 0; mndx < token.matches.length; mndx++) { - var matchToken = token.matches[mndx]; - if (matchToken.isGroup === !0) isvalid = validateRegexToken(matchToken, !0); else if (matchToken.isQuantifier === !0) { - var crrntndx = $.inArray(matchToken, token.matches), matchGroup = token.matches[crrntndx - 1], regexPartBak = regexPart; - if (isNaN(matchToken.quantifier.max)) { - for (;matchToken.repeaterPart && matchToken.repeaterPart !== regexPart && matchToken.repeaterPart.length > regexPart.length && !(isvalid = validateRegexToken(matchGroup, !0)); ) ; - isvalid = isvalid || validateRegexToken(matchGroup, !0), isvalid && (matchToken.repeaterPart = regexPart), - regexPart = regexPartBak + matchToken.quantifier.max; - } else { - for (var i = 0, qm = matchToken.quantifier.max - 1; i < qm && !(isvalid = validateRegexToken(matchGroup, !0)); i++) ; - regexPart = regexPartBak + "{" + matchToken.quantifier.min + "," + matchToken.quantifier.max + "}"; - } - } else if (void 0 !== matchToken.matches) for (var k = 0; k < matchToken.length && !(isvalid = validateRegexToken(matchToken[k], fromGroup)); k++) ; else { - var testExp; - if ("[" == matchToken.charAt(0)) { - testExp = regexPart, testExp += matchToken; - for (var j = 0; j < openGroupCount; j++) testExp += ")"; - var exp = new RegExp("^(" + testExp + ")$", opts.casing ? "i" : ""); - isvalid = exp.test(bufferStr); - } else for (var l = 0, tl = matchToken.length; l < tl; l++) if ("\\" !== matchToken.charAt(l)) { - testExp = regexPart, testExp += matchToken.substr(0, l + 1), testExp = testExp.replace(/\|$/, ""); - for (var j = 0; j < openGroupCount; j++) testExp += ")"; - var exp = new RegExp("^(" + testExp + ")$", opts.casing ? "i" : ""); - if (isvalid = exp.test(bufferStr)) break; - } - regexPart += matchToken; - } - if (isvalid) break; - } - return fromGroup && (regexPart += ")", openGroupCount--), isvalid; - } - var bufferStr, groupToken, cbuffer = maskset.buffer.slice(), regexPart = "", isValid = !1, openGroupCount = 0; - null === opts.regexTokens && analyseRegex(), cbuffer.splice(pos, 0, chrs), bufferStr = cbuffer.join(""); - for (var i = 0; i < opts.regexTokens.length; i++) { - var regexToken = opts.regexTokens[i]; - if (isValid = validateRegexToken(regexToken, regexToken.isGroup)) break; - } - return isValid; - }, - cardinality: 1 - } - } - } - }), Inputmask; -}(jQuery, Inputmask); \ No newline at end of file diff --git a/app_widget_extra/static/src/js/inputmask_widget.js b/app_widget_extra/static/src/js/inputmask_widget.js deleted file mode 100644 index 36d4ee49..00000000 --- a/app_widget_extra/static/src/js/inputmask_widget.js +++ /dev/null @@ -1,119 +0,0 @@ -odoo.define('web.inputmask_widget', function (require) { - "use strict"; - var core = require('web.core'); - var formats = require('web.formats'); - var form_widgets = require('web.form_widgets'); - var kanban_widgets = require('web_kanban.widgets'); - var utils = require('web.utils'); - var list_widget_registry = core.list_widget_registry; - var QWeb = core.qweb; - - function mask_attrs(attrs) { - var keyMask = 'data-inputmask'; - var attributes = {}; - if (keyMask in attrs) - attributes[keyMask] = attrs[keyMask]; - else - attributes = Object.keys(attrs).reduce(function (filtered, key) { - if (key.indexOf(keyMask) !== -1) - filtered[key] = attrs[key]; - return filtered; - }, {}); - if (!attributes) - console.warn("The widget Mask expects the 'data-inputmask[-attribute]' attributes!") - return attributes; - } - - var FieldMask = form_widgets.FieldChar.extend({ - template: "FieldMask", - attributes: {}, - init: function (field_manager, node) { - this._super(field_manager, node) - this.attributes = mask_attrs(node.attrs); - }, - render_value: function (mask) { - this._super(); - if (this.attributes) { - if (this.$input !== undefined) - this.$input.inputmask(mask); - else if ('contenteditable' in this.node.attrs) - this.$el.inputmask(mask); - } - }, - //在前端验证输入值是否符合inputmask - is_valid: function () { - var musk = this.attributes['data-inputmask-regex'] ? this.attributes['data-inputmask-regex'] : this.attributes['data-inputmask'] ; - var reg = new RegExp (musk,"g"); - //当状态变化成只读时,则默认全部通过 - try { - var value = this.$input.val(); - } catch(err) { - return true; - } - - if (!this.get('required') && this.is_false()) { - return true; - } else if (reg.test(value)) { - return true; - } else { - return false; - } - }, - }); - - var FieldMaskRegex = FieldMask.extend({ - render_value: function () { - this._super("Regex"); - } - }); - - var ColumnMask = list_widget_registry.get('field.char').extend({ - attributes: {}, - $mask: undefined, - init: function (id, tag, attrs) { - this._super(id, tag, attrs); - this.attributes = mask_attrs(attrs); - if (this.attributes) - this.$mask = $(jQuery.parseHTML(QWeb.render('Widget.mask', {widget: this}))).inputmask(undefined, { - placeholder: '', - greedy: false - }); - }, - format: function (row_data, options) { - var value = this._super(row_data, options); - if (this.$mask) { - this.$mask.val(value); - value = this.$mask.val(); - } - return value; - } - }); - - var MaskWidget = kanban_widgets.AbstractField.extend({ - tagName: 'span', - attributes: {}, - init: function (parent, field, $node) { - this._super(parent, field, $node); - this.attributes = mask_attrs(field.__attrs); - if (this.attributes) - this.$mask = $(jQuery.parseHTML(QWeb.render('Widget.mask', {widget: this}))).inputmask(undefined, { - placeholder: '', - greedy: false - }); - }, - renderElement: function () { - var value = this.field.raw_value; - if (this.$mask) - this.$mask.val(value); - value = this.$mask.val(); - this.$el.text(value); - } - }); - - core.form_widget_registry.add('mask', FieldMask); - core.form_widget_registry.add('mask_regex', FieldMaskRegex); - list_widget_registry.add('field.mask', ColumnMask); - kanban_widgets.registry.add("mask", MaskWidget); - - return {FieldMask: FieldMask, FieldMaskRegex: FieldMaskRegex, MaskWidget: MaskWidget}; -}); diff --git a/app_widget_extra/static/src/xml/inputmask_widget.xml b/app_widget_extra/static/src/xml/inputmask_widget.xml deleted file mode 100644 index aeb0d6c8..00000000 --- a/app_widget_extra/static/src/xml/inputmask_widget.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/app_widget_extra/views/inputmask_templates.xml b/app_widget_extra/views/inputmask_templates.xml deleted file mode 100644 index b2a0aca9..00000000 --- a/app_widget_extra/views/inputmask_templates.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - -