summaryrefslogtreecommitdiff
path: root/addons
diff options
context:
space:
mode:
authorKunal Chavda (OpenERP) <kch@tinyerp.com>2011-11-08 14:29:24 +0530
committerKunal Chavda (OpenERP) <kch@tinyerp.com>2011-11-08 14:29:24 +0530
commit39066e647a4e1db9ebc0ae52d8adcb32e1e76ae2 (patch)
treefb70347699f68187b1de7a4837c2d06ad3153bb8 /addons
parentd8a2f16c434d1ebaf76d17187d1ca541b4b4b217 (diff)
parent8bceb275103eff05c6620f4ca43352df464dfbe2 (diff)
[Merge]Merge main view editor branch upto 1410 revision and fix code for getting updated arch.
bzr revid: kch@tinyerp.com-20111108085924-d7x7fgulk29fcgcq
Diffstat (limited to 'addons')
-rw-r--r--addons/web/common/openerplib/main.py19
-rw-r--r--addons/web/po/ar.po698
-rw-r--r--addons/web/po/pl.po687
-rw-r--r--addons/web/static/src/js/boot.js2
-rw-r--r--addons/web/static/src/js/view_editor.js418
-rw-r--r--addons/web/static/src/js/view_form.js63
-rw-r--r--addons/web/static/src/js/views.js8
-rw-r--r--addons/web/static/src/xml/base.xml19
-rw-r--r--addons/web_calendar/po/ar.po22
-rw-r--r--addons/web_dashboard/po/ar.po46
-rw-r--r--addons/web_dashboard/po/pl.po46
-rw-r--r--addons/web_dashboard/static/src/xml/web_dashboard.xml2
-rw-r--r--addons/web_default_home/po/ar.po38
-rw-r--r--addons/web_default_home/po/pl.po38
-rw-r--r--addons/web_default_home/po/sk.po38
-rw-r--r--addons/web_diagram/po/ar.po54
-rw-r--r--addons/web_diagram/po/pl.po54
-rw-r--r--addons/web_graph/controllers/__init__.py1
-rw-r--r--addons/web_graph/controllers/main.py11
-rw-r--r--addons/web_kanban/static/src/css/kanban.css81
-rw-r--r--addons/web_kanban/static/src/js/kanban.js716
-rw-r--r--addons/web_kanban/static/src/xml/web_kanban.xml62
-rw-r--r--addons/web_mobile/po/ar.po66
-rw-r--r--addons/web_mobile/po/pl.po66
24 files changed, 2593 insertions, 662 deletions
diff --git a/addons/web/common/openerplib/main.py b/addons/web/common/openerplib/main.py
index 5cae9ce4636..773ea020d52 100644
--- a/addons/web/common/openerplib/main.py
+++ b/addons/web/common/openerplib/main.py
@@ -129,6 +129,18 @@ class XmlRPCConnector(Connector):
# TODO should try except and wrap exception into LibException
return getattr(service, method)(*args)
+class XmlRPCSConnector(XmlRPCConnector):
+ """
+ A type of connector that uses the secured XMLRPC protocol.
+ """
+ PROTOCOL = 'xmlrpcs'
+
+ __logger = _getChildLogger(_logger, 'connector.xmlrpcs')
+
+ def __init__(self, hostname, port=8071):
+ super(XmlRPCSConnector, self).__init__(hostname, port)
+ self.url = 'https://%s:%d/xmlrpc' % (self.hostname, self.port)
+
class NetRPC_Exception(Exception):
"""
Exception for NetRPC errors.
@@ -438,6 +450,7 @@ class Model(object):
:return: A list of dictionaries containing all the specified fields.
"""
record_ids = self.search(domain or [], offset, limit or False, order or False, context or {})
+ if not record_ids: return []
records = self.read(record_ids, fields or [], context or {})
return records
@@ -450,15 +463,17 @@ def get_connector(hostname=None, protocol="xmlrpc", port="auto"):
:param port: The number of the port. Defaults to auto.
"""
if port == 'auto':
- port = 8069 if protocol=="xmlrpc" else 8070
+ port = 8069 if protocol=="xmlrpc" else (8070 if protocol == "netrpc" else 8071)
if protocol == "xmlrpc":
return XmlRPCConnector(hostname, port)
+ elif protocol == "xmlrpcs":
+ return XmlRPCSConnector(hostname, port)
elif protocol == "netrpc":
return NetRPCConnector(hostname, port)
elif protocol == "local":
return LocalConnector()
else:
- raise ValueError("You must choose xmlrpc or netrpc or local")
+ raise ValueError("You must choose xmlrpc(s), netrpc or local")
def get_connection(hostname=None, protocol="xmlrpc", port='auto', database=None,
login=None, password=None, user_id=None):
diff --git a/addons/web/po/ar.po b/addons/web/po/ar.po
new file mode 100644
index 00000000000..0802e990ae5
--- /dev/null
+++ b/addons/web/po/ar.po
@@ -0,0 +1,698 @@
+# Arabic translation for openerp-web
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the openerp-web package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openerp-web\n"
+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2011-10-07 10:38+0200\n"
+"PO-Revision-Date: 2011-11-04 16:13+0000\n"
+"Last-Translator: kifcaliph <kifcaliph@hotmail.com>\n"
+"Language-Team: Arabic <ar@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2011-11-05 06:04+0000\n"
+"X-Generator: Launchpad (build 14231)\n"
+
+#: addons/web/static/src/js/view_form.js:355
+msgid ""
+"Warning, the record has been modified, your changes will be discarded."
+msgstr "تحذير، تم تحرير السجل، تعديلاتك سيتم تجاهلها"
+
+#: addons/web/static/src/js/view_form.js:1659
+msgid "<em>   Search More...</em>"
+msgstr "<em>    مزيداً من البحث...</em>"
+
+#: addons/web/static/src/js/view_form.js:1672
+#, python-format
+msgid "<em>   Create \"<strong>%s</strong>\"</em>"
+msgstr "<em>   إنشاء \"<strong>%s</strong>\"</em>"
+
+#: addons/web/static/src/js/view_form.js:1678
+msgid "<em>   Create and Edit...</em>"
+msgstr "<em>   إنشاء و تحرير...</em>"
+
+#: addons/web/static/src/js/views.js:568
+msgid "You must choose at least one record."
+msgstr "عليك إختيار سجل واحد علي الأقل."
+
+#: addons/web/static/src/js/views.js:569
+msgid "Warning"
+msgstr "تحذير"
+
+#: addons/web/static/src/js/views.js:609
+msgid "Translations"
+msgstr "ترجمات"
+
+#: addons/web/static/src/js/views.js:614 addons/web/static/src/xml/base.xml:0
+msgid "Save"
+msgstr "حفظ"
+
+#: addons/web/static/src/js/views.js:615
+msgid "Close"
+msgstr "إغلاق"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "x"
+msgstr "x"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "#{title}"
+msgstr "#{لقب}"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "#{text}"
+msgstr "#{text}"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Powered by"
+msgstr "مدعوم من kifcaliph و"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "openerp.com"
+msgstr "openerp.com"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "."
+msgstr "."
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Loading..."
+msgstr "جاري التحميل..."
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Create"
+msgstr "إنشاء"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Drop"
+msgstr "إزالة"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Backup"
+msgstr "نسخة إحتياطية"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Restore"
+msgstr "استرجاع"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Password"
+msgstr "كلمة المرور"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Back to Login"
+msgstr "العودة للدخول"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "CREATE DATABASE"
+msgstr "إنشاء قاعدة بيانات"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Master password:"
+msgstr "كلمة المرور الرئيسية:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "New database name:"
+msgstr "اسم قاعدة البيانات الجديدة:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Load Demonstration data:"
+msgstr "تحميل البيانات الوهمية:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Default language:"
+msgstr "اللغة الافتراضية:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Admin password:"
+msgstr "كلمة مرور المشرف العام:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Confirm password:"
+msgstr "تأكيد كلمة المرور:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "DROP DATABASE"
+msgstr "إسقاط قاعدة البيانات"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Database:"
+msgstr "قاعدة البيانات:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Master Password:"
+msgstr "كلمة المرور الرئيسية:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "BACKUP DATABASE"
+msgstr "نسخ إحتياطي لقاعدة البيانات"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "RESTORE DATABASE"
+msgstr "إسترجاع قاعدة بيانات"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "File:"
+msgstr "ملف:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "CHANGE MASTER PASSWORD"
+msgstr "تغيير كلمة المرور الرئيسية"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "New master password:"
+msgstr "كلمة مرور رئيسية جديدة:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Confirm new master password:"
+msgstr "تأكيد كلمة المرور الرئيسية الجديدة:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "User:"
+msgstr "مستخدم:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Password:"
+msgstr "كلمة المرور:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Database"
+msgstr "قاعدة بيانات"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Login"
+msgstr "تسجيل الدخول"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Bad username or password"
+msgstr "اسم مستخدم او كلمة مرور خاطئة"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid ""
+"We think that daily job activities can be more intuitive, efficient, "
+"automated, .. and even fun."
+msgstr "نؤمن بأن نشاط العمل اليومي يمكن أن يكون بديهي، فعال، سريع و ممتع"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "OpenERP's vision to be:"
+msgstr "رؤي برنامج OpenERP هي:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Full featured"
+msgstr "كامل الأوصاف"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid ""
+"Today's enterprise challenges are multiple. We provide one module for each "
+"need."
+msgstr ""
+"تتعدد تحديات المنشآت اليوم، و لذلك نوفر العديد من وحدات الأكواد لكل إحتياج."
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Open Source"
+msgstr "مفتوح المصدر"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid ""
+"To Build a great product, we rely on the knowledge of thousands of "
+"contributors."
+msgstr "لبناء منتج قوي، نحن نعتمد علي معرفة ألاف المساهمين."
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "User Friendly"
+msgstr "سهل الإستخدام"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid ""
+"In order to be productive, people need clean and easy to use interface."
+msgstr "تتمثل الإنتاجية في حاجة الأفراد إلي إستخدام واجهة سهلة و لائقة."
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "("
+msgstr "("
+
+#: addons/web/static/src/xml/base.xml:0
+msgid ")"
+msgstr ")"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "LOGOUT"
+msgstr "تسجيل الخروج"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "&laquo;"
+msgstr "&laquo;"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "&raquo;"
+msgstr "&raquo;"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "oe_secondary_menu_item"
+msgstr "oe_secondary_menu_item"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "oe_secondary_submenu_item"
+msgstr "oe_secondary_submenu_item"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Hide this tip"
+msgstr "إخفاء هذه الملحوظة"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Disable all tips"
+msgstr "تعطيل جميع النصائح"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "View#"
+msgstr "View#"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Fields"
+msgstr "حقول"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "View labels"
+msgstr "عرض التسميات"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Sidebar Relates"
+msgstr "روابط الشريط الجانبي"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Field"
+msgstr "حقل"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid ":"
+msgstr ":"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Translate view"
+msgstr "ترجمة العرض"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Translate sidebar"
+msgstr "ترجمة الشريط الجانبي"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Delete"
+msgstr "حذف"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "First"
+msgstr "الأول"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "<"
+msgstr "<"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid ">"
+msgstr ">"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Last"
+msgstr "الأخير"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "♻"
+msgstr "♻"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Save & Edit"
+msgstr "حفظ و تحرير"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Create & Edit"
+msgstr "إنشاء و تحرير"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "New"
+msgstr "جديد"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Duplicate"
+msgstr "تكرار"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Readonly/Editable"
+msgstr "للقراءة فقط/قابل للتحرير"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "<<"
+msgstr ">>"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "0"
+msgstr "0"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "/"
+msgstr "/"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid ">>"
+msgstr ">>"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Add"
+msgstr "اضافة"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Unhandled widget"
+msgstr "أداة غير معالجة"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "?"
+msgstr "؟"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "#"
+msgstr "#"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Done"
+msgstr "تم"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Open..."
+msgstr "فتح..."
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Create..."
+msgstr "إنشاء..."
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Search..."
+msgstr "بحث..."
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "..."
+msgstr "..."
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Uploading ..."
+msgstr "جاري التحميل..."
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Select"
+msgstr "حدّد"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Save As"
+msgstr "حفظ كـ"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Clear"
+msgstr "إفراغ"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Advanced Filter"
+msgstr "مرشحات متقدمة"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "-- Filters --"
+msgstr "-- مرشحات --"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "-- Actions --"
+msgstr "-- إجراءات --"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Save Filter"
+msgstr "حفظ المرشح"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Manage Filters"
+msgstr "إدارة المرشحات"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Filter Name:"
+msgstr "اسم المرشح:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "(Any existing filter with the same name will be replaced)"
+msgstr "(لاحظ أن أي مرشح بنفس الاسم سيتم إستبداله)"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Any of the following conditions must match"
+msgstr "يجب تطابق أي من الشروط التالية"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "All the following conditions must match"
+msgstr "يجب تطابق كل الشروط التالية"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "None of the following conditions must match"
+msgstr "لا يجب تطابق أي من الشروط التالية"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Add condition"
+msgstr "إضافة شرط"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "and"
+msgstr "و"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Cancel"
+msgstr "إلغاء"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Save & New"
+msgstr "حفظ و جديد"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Save & Close"
+msgstr "حفظ و إغلاق"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Export"
+msgstr "تصدير"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid ""
+"This wizard will export all data that matches the current search criteria to "
+"a CSV file.\n"
+" You can export all data or only the fields that can be "
+"reimported after modification."
+msgstr ""
+"هذا المعالج سيقوم بتصدير كافة البيانات التي تطابق شروط البحث الحالية لملف "
+"CSV.\n"
+" يمكنك تصدير كل البيانات أو الحقول التي يمكن إستيرادها بعد "
+"التعديل."
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Export Type:"
+msgstr "نوع التصدير:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Import Compatible Export"
+msgstr "إستيراد بيانات ملائمة للتصدير"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Export all Data"
+msgstr "تصدير جميع البيانات"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Export Formats"
+msgstr "تنسيقات التصدير"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Available fields"
+msgstr "الحقول المتوفرة"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Fields to export"
+msgstr "حقول للتصدير"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Save fields list"
+msgstr "حفظ قائمة الحقول"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Remove"
+msgstr "إزالة"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Remove All"
+msgstr "إزالة الكل"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Name"
+msgstr "اسم"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "&nbsp;"
+msgstr "&nbsp;"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Save as:"
+msgstr "حفظ باسم:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Ok"
+msgstr "تم"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Saved exports:"
+msgstr "مُصدرة محفوظة:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Old Password:"
+msgstr "كلمة المرور القديمة:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "New Password:"
+msgstr "كلمة المرور الجديدة:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Confirm Password:"
+msgstr "تأكيد كلمة المرور:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Import"
+msgstr "استيراد"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "1. Import a .CSV file"
+msgstr "إستيراد ملف .CSV"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid ""
+"Select a .CSV file to import. If you need a sample of file to import,\n"
+" you should use the export tool with the \"Import Compatible\" option."
+msgstr ""
+"اختر ملف .CSV للإستيراد. إذا كنت بحاجة إلى عينة ملف للاستيراد،\n"
+" يجب عليك إستخدام أداة تصدير مع الخيار \" Compatible\" option."
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "CSV File:"
+msgstr "ملف CSV :"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "2. Check your file format"
+msgstr "تأكد من إمتداد الملف"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Import Options"
+msgstr "خيارات الاستيراد"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Does your file have titles?"
+msgstr "هل لملفك عناوين؟"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Separator:"
+msgstr "فاصل :"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Delimiter:"
+msgstr "محدد:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Encoding:"
+msgstr "ترميز:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "UTF-8"
+msgstr "UTF-8"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Latin 1"
+msgstr "Latin 1"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Lines to skip"
+msgstr "خطوط للتجاهل"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "The import failed due to:"
+msgstr "فشلت عملية الإستيراد للأسباب التالية:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Here is a preview of the file we could not import:"
+msgstr "هذه معاينة لملف لم يتمكن من إستيراده:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "OpenERP Web"
+msgstr "OpenERP عبر الإنترنت"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Version"
+msgstr "الإصدار"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Copyright © 2011-TODAY OpenERP SA. All Rights Reserved."
+msgstr "جميع حقوق النشر محفوظة لـ © 2011-TODAY OpenERP SA."
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "OpenERP is a trademark of the"
+msgstr "OpenERP هي علامة تجارية لـ"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "OpenERP SA Company"
+msgstr "شركة OpenERP SA"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Licenced under the terms of"
+msgstr "النظام مرخص بشروط"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "GNU Affero General Public License"
+msgstr "GNU Affero General Public License"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "About OpenERP"
+msgstr "عن OpenERP"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "OpenERP"
+msgstr "OpenERP"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid ""
+"is a free enterprise-scale software system that is designed to boost\n"
+" productivity and profit through data integration. It connects, "
+"improves and\n"
+" manages business processes in areas such as sales, finance, "
+"supply chain,\n"
+" project management, production, services, CRM, etc..."
+msgstr ""
+"هو نظام حر يناسب المؤسسات و الشركات و تم تصميمه لتعزيز\n"
+" الإنتاجية و الربح من خلال تكامل البيانات. فيمكنك من ربط، و "
+"تحسين، و\n"
+" إدارة العمليات التجارية في إدارات مثل المبيعات، المحاسبة "
+"المالية، المخازن،\n"
+" إدارة المشروعات، الإنتاج و العمليات الصناعية، و القطاع الخدمي، , "
+"إدارة علاقات العملاء..."
+
+#: addons/web/static/src/xml/base.xml:0
+msgid ""
+"The system is platform-independent, and can be installed on Windows, Mac OS "
+"X,\n"
+" and various Linux and other Unix-based distributions. Its "
+"architecture enables\n"
+" new functionality to be rapidly created, modifications to be "
+"made to a\n"
+" production system and migration to a new version to be "
+"straightforward."
+msgstr ""
+"يعمل البرنامج مع العديد من الأنظمة مثل Windows، و Mac OS X، و\n"
+" معظم أنظمة لينكس بالإضافة إلي اليونكس. فلقد تم تصميمه ليتيح "
+"إمكانية\n"
+" إضافة وظائف أخري له بسهولة، و برمجته و تعديله بسرعه ليلائم "
+"الواقع العملي\n"
+" كما أنه يتيح سهولة نقل البيانات من إصدار إلي إصدار."
+
+#: addons/web/static/src/xml/base.xml:0
+msgid ""
+"Depending on your needs, OpenERP is available through a web or application "
+"client."
+msgstr ""
+"حسب إحتياجاتك، نظام OpenERP متاح من خلال تطبيق الويب أو البرنامج المحلي."
diff --git a/addons/web/po/pl.po b/addons/web/po/pl.po
new file mode 100644
index 00000000000..fde2196a73e
--- /dev/null
+++ b/addons/web/po/pl.po
@@ -0,0 +1,687 @@
+# Polish translation for openerp-web
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the openerp-web package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openerp-web\n"
+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2011-10-07 10:38+0200\n"
+"PO-Revision-Date: 2011-11-04 16:44+0000\n"
+"Last-Translator: Grzegorz Grzelak (OpenGLOBE.pl) <grzegorz@openglobe.pl>\n"
+"Language-Team: Polish <pl@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2011-11-05 06:04+0000\n"
+"X-Generator: Launchpad (build 14231)\n"
+
+#: addons/web/static/src/js/view_form.js:355
+msgid ""
+"Warning, the record has been modified, your changes will be discarded."
+msgstr "Uwaga, rekord został zmodyfikowany, twoje zmiany zostaną odrzucone."
+
+#: addons/web/static/src/js/view_form.js:1659
+msgid "<em>   Search More...</em>"
+msgstr "<em>   Szukaj dalej...</em>"
+
+#: addons/web/static/src/js/view_form.js:1672
+#, python-format
+msgid "<em>   Create \"<strong>%s</strong>\"</em>"
+msgstr "<em>   Utwórz \"<strong>%s</strong>\"</em>"
+
+#: addons/web/static/src/js/view_form.js:1678
+msgid "<em>   Create and Edit...</em>"
+msgstr "<em>   Utwórz i edytuj...</em>"
+
+#: addons/web/static/src/js/views.js:568
+msgid "You must choose at least one record."
+msgstr "Musisz wybrac co najmniej jeden rekord."
+
+#: addons/web/static/src/js/views.js:569
+msgid "Warning"
+msgstr "Ostrzeżenie"
+
+#: addons/web/static/src/js/views.js:609
+msgid "Translations"
+msgstr "Tłumaczenia"
+
+#: addons/web/static/src/js/views.js:614 addons/web/static/src/xml/base.xml:0
+msgid "Save"
+msgstr "Zapisz"
+
+#: addons/web/static/src/js/views.js:615
+msgid "Close"
+msgstr "Zamknij"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "x"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "#{title}"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "#{text}"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Powered by"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "openerp.com"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "."
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Loading..."
+msgstr "Wczytywanie..."
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Create"
+msgstr "Utwórz"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Drop"
+msgstr "Usuń bazę danych"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Backup"
+msgstr "Kopia zapasowa bazy danych"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Restore"
+msgstr "Odtwórz bazę danych"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Password"
+msgstr "Hasło"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Back to Login"
+msgstr "Wróć do logowania"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "CREATE DATABASE"
+msgstr "UTWÓRZ BAZĘ DANYCH"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Master password:"
+msgstr "Hasło madrzędne:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "New database name:"
+msgstr "Nazwa nowej bazy danych:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Load Demonstration data:"
+msgstr "Wczytaj dane demonstracyjne:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Default language:"
+msgstr "Domyślny język:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Admin password:"
+msgstr "Hasło admina:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Confirm password:"
+msgstr "Potwierdź hasło:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "DROP DATABASE"
+msgstr "USUŃ BAZĘ DANYCH"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Database:"
+msgstr "Baza danych:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Master Password:"
+msgstr "Hasło nadrzędne:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "BACKUP DATABASE"
+msgstr "ZAPISZ BAZĘ"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "RESTORE DATABASE"
+msgstr "ODTWÓRZ BAZĘ"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "File:"
+msgstr "Plik:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "CHANGE MASTER PASSWORD"
+msgstr "ZMIEŃ HASŁO NADRZĘDNE"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "New master password:"
+msgstr "Nowe hasło nadrzędne:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Confirm new master password:"
+msgstr "Potwierdź nowe hasło nadrzędne:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "User:"
+msgstr "Użytkownik:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Password:"
+msgstr "Hasło:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Database"
+msgstr "Baza danych"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Login"
+msgstr "Login"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Bad username or password"
+msgstr "Niepoprawna nazwa użytkownika lub hasło"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid ""
+"We think that daily job activities can be more intuitive, efficient, "
+"automated, .. and even fun."
+msgstr ""
+"Sądzimy, że codzienne zadania mogą być bardziej intuicyjne, efektywne, "
+"zautomatyzowan, ... a nawet przyjemne."
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "OpenERP's vision to be:"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Full featured"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid ""
+"Today's enterprise challenges are multiple. We provide one module for each "
+"need."
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Open Source"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid ""
+"To Build a great product, we rely on the knowledge of thousands of "
+"contributors."
+msgstr ""
+"Przy budowie wielkiego produktu polegamy na wiedzy tysięcy społeczników."
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "User Friendly"
+msgstr "Przyjazne dla użytkownika"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid ""
+"In order to be productive, people need clean and easy to use interface."
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "("
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid ")"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "LOGOUT"
+msgstr "WYLOGUJ"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "&laquo;"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "&raquo;"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "oe_secondary_menu_item"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "oe_secondary_submenu_item"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Hide this tip"
+msgstr "Ukryj tę wskazówkę"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Disable all tips"
+msgstr "Wyłącz wszystkie wskazówki"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "View#"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Fields"
+msgstr "Pola"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "View labels"
+msgstr "Pokaż etykiety"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Sidebar Relates"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Field"
+msgstr "Pole"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid ":"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Translate view"
+msgstr "Przetłumacz widok"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Translate sidebar"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Delete"
+msgstr "Usuń"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "First"
+msgstr "Pierwsze"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "<"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid ">"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Last"
+msgstr "Ostatnie"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "♻"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Save & Edit"
+msgstr "Zapisz i edytuj"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Create & Edit"
+msgstr "Utwórz i edytuj"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "New"
+msgstr "Nowy"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Duplicate"
+msgstr "Duplikuj"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Readonly/Editable"
+msgstr "Tylko odczyt/Edytowalne"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "<<"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "0"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "/"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid ">>"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Add"
+msgstr "Dodaj"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Unhandled widget"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "?"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "#"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Done"
+msgstr "Wykonano"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Open..."
+msgstr "Otwórz..."
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Create..."
+msgstr "Utwórz..."
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Search..."
+msgstr "Wyszukaj..."
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "..."
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Uploading ..."
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Select"
+msgstr "Wybierz"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Save As"
+msgstr "Zapisz jako"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Clear"
+msgstr "Wyczyść"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Advanced Filter"
+msgstr "Zaawansowany filtr"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "-- Filters --"
+msgstr "-- Filtry --"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "-- Actions --"
+msgstr "-- Akcje --"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Save Filter"
+msgstr "Zapisz filtr"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Manage Filters"
+msgstr "Zarządzaj filtrami"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Filter Name:"
+msgstr "Nazwa filtra:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "(Any existing filter with the same name will be replaced)"
+msgstr "(Każdy filtr o tej samej nazwie zostanie zamazany)"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Any of the following conditions must match"
+msgstr "Jeden z tych warunków musi być spełniony"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "All the following conditions must match"
+msgstr "Wszystkie warunki muszą być spełnione"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "None of the following conditions must match"
+msgstr "Żadeń z tych warunków nie może być spełniony"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Add condition"
+msgstr "Dodaj warunek"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "and"
+msgstr "i"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Cancel"
+msgstr "Anuluj"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Save & New"
+msgstr "Zapisz i nowy"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Save & Close"
+msgstr "Zapisz i zamknij"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Export"
+msgstr "Eksportuj"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid ""
+"This wizard will export all data that matches the current search criteria to "
+"a CSV file.\n"
+" You can export all data or only the fields that can be "
+"reimported after modification."
+msgstr ""
+"Ten kreator wyeksportuje wszystkie dane, które spełniają bieżące kryteria "
+"wyszukiwania, do pliku CSV.\n"
+" Możesz eksportować wszystkie dane lub tylko pola, które mają być "
+"importowane po zmianie."
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Export Type:"
+msgstr "Typ eksportu:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Import Compatible Export"
+msgstr "Eksport kompatybilny z importem"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Export all Data"
+msgstr "Eksportuj wszystkie dane"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Export Formats"
+msgstr "Format eksportu"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Available fields"
+msgstr "Dostępne pola"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Fields to export"
+msgstr "Pola do eksportu"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Save fields list"
+msgstr "Zapisz listę pól"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Remove"
+msgstr "Usuń"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Remove All"
+msgstr "Usuń wszystko"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Name"
+msgstr "Nazwa"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "&nbsp;"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Save as:"
+msgstr "Zapisz jako:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Ok"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Saved exports:"
+msgstr "Zapisane eksporty"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Old Password:"
+msgstr "Poprzednie hasło:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "New Password:"
+msgstr "Nowe hasło:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Confirm Password:"
+msgstr "Potwierdź hasło:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Import"
+msgstr "Importuj"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "1. Import a .CSV file"
+msgstr "1. Importuj plik .CSV"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid ""
+"Select a .CSV file to import. If you need a sample of file to import,\n"
+" you should use the export tool with the \"Import Compatible\" option."
+msgstr ""
+"Wybierz plik .CSV do importu. Jeśli chcesz zobaczyć przykład pliku do "
+"importu,\n"
+" powinieneś wyeksportować dane z opcją \"Kompatybilne z importem\"."
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "CSV File:"
+msgstr "Plik CSV:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "2. Check your file format"
+msgstr "2. Sprawdź format pliku"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Import Options"
+msgstr "Opcje importu"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Does your file have titles?"
+msgstr "Czy plik zawiera nazwy pól?"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Separator:"
+msgstr "Separator:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Delimiter:"
+msgstr "Znak dziesiętny:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Encoding:"
+msgstr "Kodowanie:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "UTF-8"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Latin 1"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Lines to skip"
+msgstr "Linie do pominięcia"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "The import failed due to:"
+msgstr "Import się nie udał z powodu:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Here is a preview of the file we could not import:"
+msgstr "Oto podgląd pliku, którego nie można zaimportować:"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "OpenERP Web"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Version"
+msgstr "Wersja"
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Copyright © 2011-TODAY OpenERP SA. All Rights Reserved."
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "OpenERP is a trademark of the"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "OpenERP SA Company"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "Licenced under the terms of"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "GNU Affero General Public License"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "About OpenERP"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid "OpenERP"
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid ""
+"is a free enterprise-scale software system that is designed to boost\n"
+" productivity and profit through data integration. It connects, "
+"improves and\n"
+" manages business processes in areas such as sales, finance, "
+"supply chain,\n"
+" project management, production, services, CRM, etc..."
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid ""
+"The system is platform-independent, and can be installed on Windows, Mac OS "
+"X,\n"
+" and various Linux and other Unix-based distributions. Its "
+"architecture enables\n"
+" new functionality to be rapidly created, modifications to be "
+"made to a\n"
+" production system and migration to a new version to be "
+"straightforward."
+msgstr ""
+
+#: addons/web/static/src/xml/base.xml:0
+msgid ""
+"Depending on your needs, OpenERP is available through a web or application "
+"client."
+msgstr ""
diff --git a/addons/web/static/src/js/boot.js b/addons/web/static/src/js/boot.js
index f951d160866..5fba5f4d8d4 100644
--- a/addons/web/static/src/js/boot.js
+++ b/addons/web/static/src/js/boot.js
@@ -59,7 +59,7 @@ openerp.web = function(instance) {
openerp.web.formats(instance);
openerp.web.chrome(instance);
openerp.web.data(instance);
- var files = ["views","search","list","form","list_editable","web_mobile","view_tree","data_export","view_editor"];
+ var files = ["views","search","list","form","list_editable","web_mobile","view_tree","data_export","data_import","view_editor"];
for(var i=0; i<files.length; i++) {
if(openerp.web[files[i]]) {
openerp.web[files[i]](instance);
diff --git a/addons/web/static/src/js/view_editor.js b/addons/web/static/src/js/view_editor.js
index 881dc5cfce9..9814bb81e0f 100644
--- a/addons/web/static/src/js/view_editor.js
+++ b/addons/web/static/src/js/view_editor.js
@@ -55,32 +55,33 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({
this.element_id = element_id
this.parent = parent
this.dataset = dataset;
- this.model = this.dataset.model;
- this.xml_id = 0;
+ this.model = dataset.model;
+ this.xml_element_id = 0;
this.property = openerp.web.ViewEditor.property_widget;
},
start: function() {
- this.View_editor();
+ this.init_view_editor();
},
- View_editor : function() {
+ init_view_editor: function() {
var self = this;
var action = {
- name:'ViewEditor',
- context:this.session.user_context,
+ name: _.sprintf("Manage Views (%s)", this.model),
+ context: this.session.user_context,
domain: [["model", "=", this.dataset.model]],
- res_model : 'ir.ui.view',
- views : [[false, 'list']],
+ res_model: 'ir.ui.view',
+ views: [[false, 'list']],
type: 'ir.actions.act_window',
target: "current",
- limit : 80,
- auto_search : true,
+ limit: this.dataset.limit || 80,
+ auto_search: true,
flags: {
sidebar: false,
+ deletable: false,
views_switcher: false,
- action_buttons:false,
- search_view:false,
- pager:false,
- radio:true
+ action_buttons: false,
+ search_view: false,
+ pager: false,
+ radio: true
},
};
this.view_edit_dialog = new openerp.web.Dialog(this, {
@@ -93,204 +94,200 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({
//to do
},
"Edit": function(){
- self.xml_id=0;
- self.get_data();
+ self.xml_element_id = 0;
+ self.get_arch();
},
"Close": function(){
self.view_edit_dialog.close();
}
},
- });
- this.view_edit_dialog.start().open();
+ }).start().open();
var action_manager = new openerp.web.ActionManager(this);
action_manager.appendTo(this.view_edit_dialog);
- action_manager.do_action(action);
+ $.when(action_manager.do_action(action)).then(function() {
+ var viewmanager = action_manager.inner_viewmanager,
+ controller = viewmanager.views[viewmanager.active_view].controller;
+ controller.on_loaded.add_last(function(){
+ $(controller.groups).bind({
+ 'selected': function(e, ids, records) {
+ self.main_view_id = ids[0];
+ }
+ })
+ });
+ });
},
- check_attr: function(xml, tag, level) {
- var obj = {'child_id': [], 'id': this.xml_id++, 'level': level+1, 'att_list': [], 'name': ""};
- var render_name = "<" + tag;
+ convert_tag_to_obj: function(xml, level) {
+ var obj = {
+ 'child_id': [],
+ 'id': this.xml_element_id++,
+ 'level': level + 1,
+ 'att_list': [],
+ 'name': ''
+ };
+ var tag = xml.tagName.toLowerCase();
obj.att_list.push(tag);
+ obj.name = "<" + tag;
$(xml).each(function() {
- _.each(this.attributes, function(attrs){
- if ((tag != 'button') && (tag != 'field')){
- if (attrs.nodeName == "string" || attrs.nodeName == "name" || attrs.nodeName == "index") {
- render_name += ' ' + attrs.nodeName + '=' + '"' + attrs.nodeValue + '"' ;
+ _.each(this.attributes, function(attrs) {
+ if (tag != 'button' && tag != 'field') {
+ if (attrs.nodeName == "string" ) {
+ obj.name += ' ' + attrs.nodeName + '=' + '"' + attrs.nodeValue + '"';
}
} else {
if (attrs.nodeName == "name") {
- render_name += ' ' + attrs.nodeName + '=' + '"' + attrs.nodeValue + '"';
+ obj.name += ' ' + attrs.nodeName + '=' + '"' + attrs.nodeValue + '"';
}
}
- obj.att_list.push( [attrs.nodeName,attrs.nodeValue] );
+ obj.att_list.push([attrs.nodeName, attrs.nodeValue]);
});
- render_name+= ">";
+ obj.name += ">";
});
- obj.name = render_name;
return obj;
},
- save_object: function(val, parent_list, child_obj_list) {
+ append_child_object: function(val, parent_list, child_obj_list) {
var self = this;
- var check_id = parent_list[0];
- var p_list = parent_list.slice(1);
if (val.child_id.length != 0) {
- _.each(val.child_id, function(val, key) {
- if (val.id == check_id) {
- if (p_list.length!=0) {
- self.save_object(val, p_list, child_obj_list);
- } else {
- val.child_id = child_obj_list;
- return false;
- }
- }
+ _.each(val.child_id, function(val) {
+ (val.id == parent_list[0])?
+ self.append_child_object( val, parent_list.slice(1), child_obj_list) : false;
});
- } else {
- val.child_id = child_obj_list;
- }
+ } else { val.child_id = child_obj_list; }
},
- xml_node_create: function(xml, root, parent_list, parent_id, main_object){
+ convert_arch_to_obj: function(xml, parent_list, parent_id, main_object){
var self = this;
var child_obj_list = [];
- var children_list = $(xml).filter(root).children();
+ var children_list = $(xml).children();
var parents = $(children_list[0]).parents().get();
- _.each(children_list, function (child_node) {
- child_obj_list.push(self.check_attr(child_node,child_node.tagName.toLowerCase(),parents.length));
+ _.each(children_list, function(child_node) {
+ child_obj_list.push(self.convert_tag_to_obj(child_node, parents.length));
});
if (children_list.length != 0) {
- if (parents.length <= parent_list.length) {
- parent_list.splice(parents.length - 1);
- }
+ if(parents.length <= parent_list.length) { parent_list.splice(parents.length - 1);}
parent_list.push(parent_id);
- self.save_object(main_object[0], parent_list.slice(1), child_obj_list);
+ self.append_child_object(main_object[0], parent_list.slice(1), child_obj_list);
}
for (var i = 0; i < children_list.length; i++) {
- self.xml_node_create
- (children_list[i], children_list[i].tagName.toLowerCase(),
- parent_list, child_obj_list[i].id, main_object);
+ self.convert_arch_to_obj(children_list[i], parent_list, child_obj_list[i].id, main_object);
}
return main_object;
},
parse_xml: function(arch, view_id) {
var root = $(arch).filter(":first")[0];
var tag = root.tagName.toLowerCase();
- var obj ={'child_id':[],'id':this.xml_id++,'level':0,'att_list':[],'name':"<view view_id='"+view_id+"'>"};
- var root_object = this.check_attr(root,tag,0);
- obj.child_id = this.xml_node_create(arch, tag, [], this.xml_id-1, [root_object], []);
- return [obj];
+ var view_obj = {
+ 'child_id': [],
+ 'id': this.xml_element_id++,
+ 'level': 0,
+ 'att_list': [],
+ 'name': _.sprintf("<view view_id='%d'>", view_id),
+ };
+ var root_object = this.convert_tag_to_obj(root, 0);
+ view_obj.child_id = this.convert_arch_to_obj(arch, [], this.xml_element_id, [root_object], []);
+ return [view_obj];
},
- get_data: function() {
+ get_arch: function() {
var self = this;
var view_arch_list = [];
- self.main_view_id =((this.view_edit_dialog.$element.find("input[name='radiogroup']:checked").parent()).parent()).attr('data-id');
- var ve_dataset = new openerp.web.DataSet(this, 'ir.ui.view');
- ve_dataset.read_ids([parseInt(self.main_view_id)], ['arch', 'type'], function (arch) {
- one_object = self.parse_xml(arch[0].arch,self.main_view_id);
+ var view_dataset = new openerp.web.DataSet(this, 'ir.ui.view');
+ view_dataset.read_ids([parseInt(self.main_view_id)], ['arch', 'type'], function(arch) {
+ var arch_object = self.parse_xml(arch[0].arch, self.main_view_id);
self.main_view_type = arch[0].type
- view_arch_list.push({"view_id" : self.main_view_id, "arch" : arch[0].arch});
+ view_arch_list.push({"view_id": self.main_view_id, "arch": arch[0].arch});
dataset = new openerp.web.DataSetSearch(self, 'ir.ui.view', null, null);
- dataset.read_slice([], {domain : [['inherit_id','=', parseInt(self.main_view_id)]]}, function (result) {
+ dataset.read_slice([], {domain: [['inherit_id','=', parseInt(self.main_view_id)]]}, function(result) {
_.each(result, function(res) {
- view_arch_list.push({"view_id":res.id,"arch":res.arch});
- self.inherit_view(one_object, res);
+ view_arch_list.push({"view_id": res.id, "arch": res.arch});
+ self.inherit_view(arch_object, res);
});
- return self.edit_view({"main_object": one_object,
- "parent_child_id": self.parent_child_list(one_object, []),
- "arch": view_arch_list});
+ return self.edit_view({"main_object": arch_object,
+ "parent_child_id": self.parent_child_list(arch_object, []),
+ "arch": view_arch_list});
});
});
},
- parent_child_list : function(one_object, p_list) {
+ parent_child_list : function(one_object, parent_list) {
var self = this;
- _.each(one_object , function(element){
- if(element.child_id.length != 0){
- p_list.push({"key":element.id,"value":_.pluck(element.child_id, 'id')});
- self.parent_child_list(element.child_id, p_list);
+ _.each(one_object , function(element) {
+ if (element.child_id.length != 0) {
+ parent_list.push({"key": element.id, "value": _.pluck(element.child_id, 'id')});
+ self.parent_child_list(element.child_id, parent_list);
}
});
- return p_list;
+ return parent_list;
},
- inherit_view : function(one_object, result) {
+ inherit_view : function(arch_object, result) {
var self = this;
var root = $(result.arch).filter('*');
var xml_list = [];
- if (root[0].tagName.toLowerCase() == "data") {
- xml_list = $(root[0]).children();
- } else {
- xml_list.push(root[0]);
- }
- _.each(xml_list , function(xml){
- var parent_id;
- var check_list = [];
- var xpath_object = self.parse_xml(xml,result.id);
+ root[0].tagName.toLowerCase() == "data"? xml_list = $(root[0]).children() : xml_list.push(root[0]);
+ _.each(xml_list, function(xml) {
+ var expr_to_list = [];
+ var xpath_arch_object = self.parse_xml(xml,result.id);
if (xml.tagName.toLowerCase() == "xpath" ) {
- var part_expr = _.without($(xml).attr('expr').split("/"),"");
- _.each(part_expr,function(part){
- check_list.push(_.without($.trim(part.replace(/[^a-zA-Z 0-9 _]+/g,'!')).split("!"),""));
+ var part_expr = _.without($(xml).attr('expr').split("/"), "");
+ _.each(part_expr, function(part) {
+ expr_to_list.push(_.without($.trim(part.replace(/[^a-zA-Z 0-9 _]+/g,'!')).split("!"), ""));
});
} else {
- var temp = [];
- _.each(xpath_object[0].child_id[0].att_list, function(list){
- if(!_.include(list, "position")){
- temp.push(list);
- }
+ var temp = _.reject(xpath_arch_object[0].child_id[0].att_list, function(list) {
+ return _.include(list, "position")
});
- check_list = [_.flatten(temp)];
+ expr_to_list = [_.flatten(temp)];
}
- self.full_path_search(check_list ,one_object ,xpath_object);
+ self.inherit_apply(expr_to_list, arch_object ,xpath_arch_object);
});
},
- full_path_search: function(check_list ,val ,xpath_object) {
+ inherit_apply: function(expr_list ,arch_object ,xpath_arch_object) {
var self = this;
- if(xpath_object.length!=0){
- var check = check_list[0];
+ if (xpath_arch_object.length) {
+ var check = expr_list[0];
var obj;
switch (check.length) {
case 2:
- if(parseInt(check[1])){
- var list_1 = _.select(val,function(element){
- var main_list = _.flatten(element.att_list);
- return _.include(main_list, check[0]);
+ if (parseInt(check[1])) {
+ //for field[3]
+ var temp_list = _.select(arch_object, function(element) {
+ return _.include(_.flatten(element.att_list), check[0]);
});
- obj = val[_.indexOf(val,list_1[parseInt(check[1])-1])];
+ obj = arch_object[_.indexOf(arch_object, temp_list[parseInt(check[1]) - 1])];
} else {
- obj = _.detect(val, function(element){
- var main_list = _.flatten(element.att_list);
- return _.include(main_list, check[0]);
+ //for notebook[last()]
+ obj = _.detect(arch_object, function(element) {
+ return _.include(_.flatten(element.att_list), check[0]);
});
}
break;
case 3:
- obj = _.detect(val,function(element){
- var main_list = _.flatten(element.att_list);
- check = _.uniq(check);
- var insert = _.intersection(main_list,check);
- if(insert.length == check.length ){return element;}
+ //for field[@name='type']
+ obj = _.detect(arch_object, function(element){
+ if ((_.intersection(_.flatten(element.att_list), _.uniq(check))).length == check.length) {
+ return element;
+ }
});
break;
case 1:
- var list_1 = _.select(val,function(element){
- var main_list = _.flatten(element.att_list);
- return _.include(main_list, check[0]);
+ //for /form/notebook
+ var temp_list = _.select(arch_object, function(element) {
+ return _.include(_.flatten(element.att_list), check[0]);
});
- if(list_1.length != 0){
- (check_list.length == 1)? obj = list_1[0] : check_list.shift();
+ if (temp_list.length != 0) {
+ expr_list.length == 1 ? obj = temp_list[0] : expr_list.shift();
}
break;
}
- if(obj) {
- check_list.shift();
- if (check_list.length !=0){
- self.full_path_search(check_list ,obj.child_id ,xpath_object);
+ if (obj) {
+ expr_list.shift();
+ if (expr_list.length) {
+ self.inherit_apply(expr_list, obj.child_id, xpath_arch_object);
} else {
- var level = obj.level+1;
- self.increase_level(xpath_object[0], level)
- obj.child_id.push(xpath_object[0]);
- xpath_object.pop();
- return;
+ self.increase_level(xpath_arch_object[0], obj.level + 1);
+ obj.child_id.push(xpath_arch_object[0]);
+ xpath_arch_object.pop();
}
}
else {
- _.each(val,function(element){
- self.full_path_search(check_list ,element.child_id ,xpath_object);
+ _.each(arch_object, function(element) {
+ self.inherit_apply(expr_list, element.child_id, xpath_arch_object);
});
}
}
@@ -304,28 +301,28 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({
},
edit_view: function(one_object) {
var self = this;
- this.edit_xml_dialog = new openerp.web.Dialog(this,{
+ this.edit_xml_dialog = new openerp.web.Dialog(this, {
modal: true,
- title: 'View Editor',
+ title: _.sprintf("View Editor %d - %s", self.main_view_id, self.model),
width: 750,
height: 500,
buttons: {
- "Inherited View": function(){
+ "Inherited View": function() {
//todo
},
- "Preview": function(){
+ "Preview": function() {
var action = {
- context:self.session.user_context,
- res_model : self.model,
- views : [[self.main_view_id, self.main_view_type]],
+ context: self.session.user_context,
+ res_model: self.model,
+ views: [[self.main_view_id, self.main_view_type]],
type: 'ir.actions.act_window',
target: "new",
flags: {
sidebar: false,
views_switcher: false,
- action_buttons:false,
- search_view:false,
- pager:false,
+ action_buttons: false,
+ search_view: false,
+ pager: false,
},
};
var action_manager = new openerp.web.ActionManager(self);
@@ -335,11 +332,8 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({
self.edit_xml_dialog.close();
}
}
- });
- this.edit_xml_dialog.start().open();
- this.edit_xml_dialog.$element.html(QWeb.render('view_editor', {
- 'data': one_object['main_object'],
- }));
+ }).start().open();
+ this.edit_xml_dialog.$element.html(QWeb.render('view_editor', {'data': one_object['main_object']}));
this.edit_xml_dialog.$element.find("tr[id^='viewedit-']").click(function() {
self.edit_xml_dialog.$element.find("tr[id^='viewedit-']").removeClass('ui-selected');
$(this).addClass('ui-selected');
@@ -355,24 +349,24 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({
}
});
this.edit_xml_dialog.$element.find("img[id^='side-']").click(function() {
- var side = $(this).closest("tr[id^='viewedit-']")
- var tr_id = (side.attr('id')).split('-')[1];
- var img = side.find("img[id='parentimg-"+tr_id+"']").attr('src'); ;
- var level = parseInt(side.attr('level'));
- var list_shift =[];
- var last_tr;
+ var side = $(this).closest("tr[id^='viewedit-']");
+ var clicked_tr_id = (side.attr('id')).split('-')[1];
+ var img = side.find("img[id='parentimg-" + clicked_tr_id + "']").attr('src');
+ var clicked_tr_level = parseInt(side.attr('level'));
var cur_tr = side;
- list_shift.push(side);
+ var last_tr;
var next_tr;
- var ls = side;
+ var tr_to_move = [];
+ tr_to_move.push(side);
var view_id;
var view_xml_id;
- while(1){
- ls = ls.prev();
- if((self.edit_xml_dialog.$element.find(ls).find('a').text()).search("view_id") != -1
- && parseInt(ls.attr('level')) < level){
- view_id = parseInt(($(ls).find('a').text()).replace(/[^0-9]+/g,''));
- view_xml_id = (ls.attr('id')).split('-')[1];
+ var view_find = side;
+ while (1) {
+ view_find = view_find.prev();
+ if((self.edit_xml_dialog.$element.find(view_find).find('a').text()).search("view_id") != -1
+ && parseInt(view_find.attr('level')) < clicked_tr_level) {
+ view_id = parseInt(($(view_find).find('a').text()).replace(/[^0-9]+/g, ''));
+ view_xml_id = (view_find.attr('id')).split('-')[1];
break;
}
}
@@ -387,45 +381,48 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({
return _.includes(tr, res);
});
var properties = _PROPERTIES[tag];
- self.on_edit_node(properties, tr_id, one_object, view_id, view_xml_id, level);
+ self.on_edit_node(properties, clicked_tr_id, one_object, view_id, view_xml_id, clicked_tr_level);
break;
case "side-up":
while (1) {
var prev_tr = cur_tr.prev();
- if(level >= parseInt(prev_tr.attr('level')) || prev_tr.length == 0) {
+ if (clicked_tr_level >= parseInt(prev_tr.attr('level')) || prev_tr.length == 0) {
last_tr = prev_tr;
break;
}
cur_tr = prev_tr;
}
if (img) {
+ self.edit_xml_dialog.$element.find("img[id='parentimg-" + clicked_tr_id + "']").
+ attr('src', '/web/static/src/img/expand.gif');
while (1) {
next_tr = side.next();
- if ( parseInt(next_tr.attr('level')) <= level || next_tr.length == 0) {
+ if (parseInt(next_tr.attr('level')) <= clicked_tr_level || next_tr.length == 0) {
break;
} else {
- list_shift.push(next_tr);
+ next_tr.hide();
+ tr_to_move.push(next_tr);
side = next_tr;
}
}
}
- if (last_tr.length != 0 && parseInt(last_tr.attr('level')) == level &&
- (self.edit_xml_dialog.$element.find(last_tr).find('a').text()).search("view_id") == -1) {
- _.each(list_shift, function(rec) {
+ if (last_tr.length != 0 && parseInt(last_tr.attr('level')) == clicked_tr_level &&
+ (self.edit_xml_dialog.$element.find(last_tr).find('a').text()).search("view_id") == -1) {
+ _.each(tr_to_move, function(rec) {
$(last_tr).before(rec);
});
- self.save_move_arch(one_object, view_id, view_xml_id, tr_id, level, "up");
+ self.do_save_update_arch(one_object, view_id, view_xml_id, clicked_tr_id, clicked_tr_level, "up");
}
break;
case "side-down":
if (img) {
while (1) {
next_tr = cur_tr.next();
- if ( parseInt(next_tr.attr('level')) <= level || next_tr.length == 0) {
+ if ( parseInt(next_tr.attr('level')) <= clicked_tr_level || next_tr.length == 0) {
last_tr = next_tr;
break;
} else {
- list_shift.push(next_tr);
+ tr_to_move.push(next_tr);
cur_tr = next_tr;
}
}
@@ -433,10 +430,10 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({
else {
last_tr = cur_tr.next();
}
- if((self.edit_xml_dialog.$element.find(last_tr).find('a').text()).search("view_id") != -1){
+ if ((self.edit_xml_dialog.$element.find(last_tr).find('a').text()).search("view_id") != -1) {
return;
}
- if (last_tr.length != 0 && parseInt(last_tr.attr('level')) == level) {
+ if (last_tr.length != 0 && parseInt(last_tr.attr('level')) == clicked_tr_level) {
var last_tr_id = (last_tr.attr('id')).split('-')[1];
img = last_tr.find("img[id='parentimg-" + last_tr_id + "']").attr('src');
if (img) {
@@ -444,60 +441,60 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({
attr('src', '/web/static/src/img/expand.gif');
while (1) {
var next_tr = last_tr.next();
- if (next_tr.attr('level') <= level || next_tr.length == 0) break;
+ if (next_tr.attr('level') <= clicked_tr_level || next_tr.length == 0) break;
next_tr.hide();
last_tr = next_tr;
}
}
- list_shift.reverse();
- _.each(list_shift, function(rec) {
+ tr_to_move.reverse();
+ _.each(tr_to_move, function(rec) {
$(last_tr).after(rec);
});
- self.save_move_arch(one_object, view_id, view_xml_id, tr_id, level, "down");
+ self.do_save_update_arch(one_object, view_id, view_xml_id, clicked_tr_id, clicked_tr_level, "down");
}
break;
}
});
},
- save_move_arch: function(one_object, view_id, view_xml_id, tr_id, level, move_direct, update_values){
+ do_save_update_arch: function(one_object, view_id, view_xml_id, clicked_tr_id, clicked_tr_level, move_direct, update_values) {
var self = this;
- var arch = _.detect(one_object['arch'],function(element){
- return element.view_id == view_id;
- });
- var obj = self.get_view_object(view_xml_id, one_object['main_object'], []);
- if(($(arch.arch).filter("data")).length != 0 && view_xml_id != 0){
+ var arch = _.detect(one_object['arch'], function(element) {return element.view_id == view_id;});
+ var obj = self.get_object_by_id(view_xml_id, one_object['main_object'], []);
+ //for finding xpath tag from inherit view
+ if (($(arch.arch).filter("data")).length != 0 && view_xml_id != 0) {
var check_list = _.flatten(obj[0].child_id[0].att_list);
arch.arch = _.detect($(arch.arch).children(), function(xml_child){
- var temp_obj = self.check_attr(xml_child, xml_child.tagName.toLowerCase());
+ var temp_obj = self.convert_tag_to_obj(xml_child);
var main_list = _.flatten(temp_obj.att_list);
- check_list = _.uniq(check_list);
- var insert = _.intersection(main_list,check_list);
- if(insert.length == check_list.length ){return xml_child;}
+ var insert = _.intersection(main_list,_.uniq(check_list));
+ if (insert.length == check_list.length ) {return xml_child;}
});
}
- return self.get_node(arch.arch, obj[0].child_id[0], parseInt(tr_id), [], parseInt(level),
- parseInt(view_id), arch, move_direct, update_values);
+ return self.save_arch(arch.arch, obj[0].child_id[0], parseInt(clicked_tr_id), [], parseInt(clicked_tr_level),
+ parseInt(view_id), arch, move_direct, update_values);
},
- get_view_object: function(view_xml_id, one_object,result){
+ get_object_by_id: function(view_xml_id, one_object, result) {
var self = this;
- if(result.length==0){
- var check = _.detect(one_object , function(obj){
- return view_xml_id==obj.id;
+ if (result.length == 0 ) {
+ var check = _.detect(one_object , function(obj) {
+ return view_xml_id == obj.id;
});
- if(check){result.push(check);};
- _.each(one_object, function(obj){
- self.get_view_object(view_xml_id, obj.child_id, result);
+ if (check) {result.push(check);};
+ _.each(one_object, function(obj) {
+ self.get_object_by_id(view_xml_id, obj.child_id, result);
});
}
return result;
},
- get_node: function(arch1, obj, id, child_list, level, view_id, arch, move_direct, update_values){
+ save_arch: function(arch1, obj, id, child_list, level, view_id, arch, move_direct, update_values){
var self = this;
var children_list = $(arch1).children();
var list_obj_xml = _.zip(children_list,obj.child_id);
if (id) {
if (obj.id == id) {
- var index = _.indexOf(child_list, obj)
+ var id;
+ var parent = $(arch1).parents();
+ var index = _.indexOf(child_list, obj);
if (move_direct == "down") {
var next = $(arch1).next();
$(next).after(arch1);
@@ -512,27 +509,26 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({
_.each(update_values, function(val){
$(arch1).attr(val[0],val[1]);
});
- var new_obj = self.check_attr(arch1,arch1.tagName.toLowerCase(),obj.level - 1);
+ var new_obj = self.convert_tag_to_obj(arch1, obj.level - 1);
new_obj.id = obj.id;
new_obj.child_id = obj.child_id;
self.edit_xml_dialog.$element.find("tr[id='viewedit-"+id+"']").find('a').text(new_obj.name);
child_list.splice(index, 1, new_obj);
}
- var parent = $(arch1).parents();
- parent = parent[parent.length-1];
+ parent = parent[parent.length - 1];
var convert_to_utf = self.xml2Str(parent);
if (convert_to_utf) {
convert_to_utf = convert_to_utf.replace('xmlns="http://www.w3.org/1999/xhtml"', "");
convert_to_utf = '<?xml version="1.0"?>' + convert_to_utf;
arch.arch = convert_to_utf;
dataset = new openerp.web.DataSet(this, 'ir.ui.view');
- dataset.write(parseInt(view_id),{"arch":convert_to_utf}, function(r) {
+ dataset.write(parseInt(view_id),{"arch": convert_to_utf}, function(result) {
});
}
}
if (obj.level <= level) {
_.each(list_obj_xml, function(child_node) {
- self.get_node(child_node[0], child_node[1], id, obj.child_id, level, view_id, arch, move_direct, update_values);
+ self.save_arch(child_node[0], child_node[1], id, obj.child_id, level, view_id, arch, move_direct, update_values);
});
}
}
@@ -541,11 +537,11 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({
try {
return (new XMLSerializer()).serializeToString(xmlNode);
}
- catch (e) {
+ catch (exception) {
try {
return xmlNode.xml;
}
- catch (e) {
+ catch (exception) {
return false;
}
}
@@ -555,7 +551,7 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({
var cur_tr = $(expand_img).closest("tr[id^='viewedit-']");
while (1) {
var nxt_tr = cur_tr.next();
- if (parseInt(nxt_tr.attr('level')) > level){
+ if (parseInt(nxt_tr.attr('level')) > level) {
cur_tr = nxt_tr;
nxt_tr.hide();
} else return nxt_tr;
@@ -564,16 +560,16 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({
on_collapse: function(collapse_img, parent_child_id, id, main_object) {
var self = this;
var id = collapse_img.id.split('-')[1];
- var datas = _.detect(parent_child_id,function(res) {
+ var datas = _.detect(parent_child_id, function(res) {
return res.key == id;
});
- _.each(datas.value, function(rec) {
- var tr = self.edit_xml_dialog.$element.find("tr[id='viewedit-"+rec+"']");
- tr.find("img[id='parentimg-"+rec+"']").attr('src','/web/static/src/img/expand.gif');
+ _.each(datas.value, function (rec) {
+ var tr = self.edit_xml_dialog.$element.find("tr[id='viewedit-" + rec + "']");
+ tr.find("img[id='parentimg-" + rec + "']").attr('src', '/web/static/src/img/expand.gif');
tr.show();
});
},
- on_edit_node:function(properties, tr_id, obj, view_id, view_xml_id, level){
+ on_edit_node:function(properties, clicked_tr_id, obj, view_id, view_xml_id, clicked_tr_level){
var self = this;
this.edit_node_dialog = new openerp.web.Dialog(this,{
modal: true,
@@ -589,7 +585,7 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({
update_values.push(value);
}
});
- self.save_move_arch(obj, view_id, view_xml_id, tr_id, level, "update_node", update_values);
+ self.do_save_update_arch(obj, view_id, view_xml_id, clicked_tr_id, clicked_tr_level, "update_node", update_values);
self.edit_node_dialog.close();
},
"Cancel": function(){
@@ -599,7 +595,7 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({
});
this.edit_node_dialog.start().open();
var widget = ['readonly','required','nolabel','completion','widget','groups','position','icon','align','special','type','target'];
- var arch_val = self.get_view_object(tr_id,one_object,[]);
+ var arch_val = self.get_object_by_id(clicked_tr_id,obj['main_object'],[]);
this.edit_node_dialog.$element.append('<table id="rec_table" class="oe_forms"></table>');
this.edit_widget = [];
_.each(properties,function(record){
diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js
index d1d8cff5b9f..a2f7a89ff80 100644
--- a/addons/web/static/src/js/view_form.js
+++ b/addons/web/static/src/js/view_form.js
@@ -10,6 +10,7 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView#
* view should be displayed (if there is one active).
*/
searchable: false,
+ readonly : false,
form_template: "FormView",
identifier_prefix: 'formview-',
/**
@@ -37,7 +38,7 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView#
this.dirty_for_user = false;
this.default_focus_field = null;
this.default_focus_button = null;
- this.registry = openerp.web.form.widgets;
+ this.registry = this.readonly ? openerp.web.form.readonly : openerp.web.form.widgets;
this.has_been_loaded = $.Deferred();
this.$form_header = null;
this.translatable_fields = [];
@@ -101,10 +102,10 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView#
self.on_pager_action(action);
});
- this.$form_header.find('button.oe_form_button_save').click(this.do_save);
- this.$form_header.find('button.oe_form_button_cancel').click(this.do_cancel);
+ this.$form_header.find('button.oe_form_button_save').click(this.do_save_then_readonly);
this.$form_header.find('button.oe_form_button_new').click(this.on_button_new);
this.$form_header.find('button.oe_form_button_duplicate').click(this.on_button_duplicate);
+ this.$form_header.find('button.oe_form_button_delete').click(this.on_button_delete);
this.$form_header.find('button.oe_form_button_toggle').click(this.on_toggle_readonly);
if (this.options.sidebar && this.options.sidebar_id) {
@@ -123,11 +124,16 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView#
self.widgets = {};
self.fields = {};
self.$form_header.find('button').unbind('click');
- self.registry = self.registry === openerp.web.form.widgets
- ? openerp.web.form.readonly
- : openerp.web.form.widgets;
+ self.readonly = !self.readonly;
+ self.registry = self.readonly ? openerp.web.form.readonly : openerp.web.form.widgets;
self.on_loaded(self.fields_view);
- self.reload();
+ return self.reload();
+ },
+ do_set_readonly: function() {
+ return this.readonly ? $.Deferred().resolve() : this.on_toggle_readonly();
+ },
+ do_set_editable: function() {
+ return !this.readonly ? $.Deferred().resolve() : this.on_toggle_readonly();
},
do_show: function () {
var promise;
@@ -164,6 +170,8 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView#
this.$form_header.find('.oe_form_on_update').show();
this.$form_header.find('button.oe_form_button_new').show();
}
+ this.$form_header.find('.oe_form_on_readonly').toggle(this.readonly);
+ this.$form_header.find('.oe_form_on_editable').toggle(!this.readonly);
this.dirty_for_user = false;
this.datarecord = record;
for (var f in this.fields) {
@@ -344,14 +352,16 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView#
$.when(this.has_been_loaded).then(function() {
if (self.can_be_discarded()) {
var keys = _.keys(self.fields_view.fields);
- if (keys.length) {
- self.dataset.default_get(keys).then(self.on_record_loaded).then(function() {
+ $.when(self.do_set_editable()).then(function() {
+ if (keys.length) {
+ self.dataset.default_get(keys).then(self.on_record_loaded).then(function() {
+ def.resolve();
+ });
+ } else {
+ self.on_record_loaded({});
def.resolve();
- });
- } else {
- self.on_record_loaded({});
- def.resolve();
- }
+ }
+ });
}
});
return def.promise();
@@ -363,7 +373,20 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView#
if (self.can_be_discarded()) {
self.dataset.call('copy', [self.datarecord.id, {}, self.dataset.context]).then(function(new_id) {
return self.on_created({ result : new_id });
- }).then(function() {
+ }).then(self.do_set_editable).then(function() {
+ def.resolve();
+ });
+ }
+ });
+ return def.promise();
+ },
+ on_button_delete: function() {
+ var self = this;
+ var def = $.Deferred();
+ $.when(this.has_been_loaded).then(function() {
+ if (self.can_be_discarded() && self.datarecord.id) {
+ self.dataset.unlink([self.datarecord.id]).then(function() {
+ self.on_pager_action('next');
def.resolve();
});
}
@@ -381,6 +404,9 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView#
* @param {Function} success callback on save success
* @param {Boolean} [prepend_on_create=false] if ``do_save`` creates a new record, should that record be inserted at the start of the dataset (by default, records are added at the end)
*/
+ do_save_then_readonly: function(success, prepend_on_create) {
+ return this.do_save(success, prepend_on_create).then(this.do_set_readonly);
+ },
do_save: function(success, prepend_on_create) {
var self = this;
var action = function() {
@@ -428,10 +454,6 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView#
this.mutating_lock = this.mutating_lock.pipe(action, action);
return this.mutating_lock;
},
- switch_readonly: function() {
- },
- switch_editable: function() {
- },
on_invalid: function() {
var msg = "<ul>";
_.each(this.fields, function(f) {
@@ -489,9 +511,6 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView#
on_action: function (action) {
console.debug('Executing action', action);
},
- do_cancel: function () {
- console.debug("Cancelling form");
- },
reload: function() {
var self = this;
var act = function() {
diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js
index b6a37c82560..62928401492 100644
--- a/addons/web/static/src/js/views.js
+++ b/addons/web/static/src/js/views.js
@@ -583,7 +583,7 @@ session.web.Sidebar = session.web.Widget.extend({
]);
this.add_section(_t('Other Options'), 'other');
- this.add_items('other', [
+ this.add_items('other', [
{
label: _t("Import"),
callback: this.call_default_on_sidebar
@@ -619,7 +619,7 @@ session.web.Sidebar = session.web.Widget.extend({
}
});
},
-
+
add_section: function(name, code) {
if(!code) code = _.underscored(name);
var $section = this.sections[code];
@@ -693,7 +693,7 @@ session.web.Sidebar = session.web.Widget.extend({
}
return false;
});
-
+
var $ul = $section.find('ul');
if(!$ul.length) {
$ul = $('<ul/>').appendTo($section);
@@ -883,7 +883,7 @@ session.web.View = session.web.Widget.extend(/** @lends session.web.View# */{
}
};
var context = new session.web.CompoundContext(dataset.get_context(), action_data.context || {});
-
+
var handler = function (r) {
var action = r.result;
if (action && action.constructor == Object) {
diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml
index 8cf925990cb..648dc3a9f1d 100644
--- a/addons/web/static/src/xml/base.xml
+++ b/addons/web/static/src/xml/base.xml
@@ -473,8 +473,6 @@
<h2><t t-esc="name"/></h2>
</div>
</t>
-
-
<t t-name="Sidebar.section.items">
<li t-foreach="items" t-as="item" t-att-class="item.classname">
<a class="oe_sidebar_action_a" t-att-id="item.element_id" t-att-title="item.title" href="#">
@@ -551,6 +549,7 @@
</span>
</td>
</tr>
+
<table t-name="ListView" class="oe-listview-content">
<t t-set="columns_count" t-value="visible_columns.length + (options.selectable ? 1 : 0) + (options.deletable ? 1 : 0)"/>
<thead class="ui-widget-header">
@@ -660,16 +659,18 @@
<t t-name="ListView.row.form">
<t t-raw="frame.render()"/>
</t>
+
<t t-name="FormView">
<div class="oe_form_header">
<div class="oe_form_buttons" t-if="widget.options.action_buttons !== false">
- <button type="button" class="oe_form_button_save">
- <span class="oe_form_on_update">Save</span>
- <span class="oe_form_on_create">Create</span>
+ <button type="button" class="oe_form_button_save oe_form_on_editable">Save</button>
+ <button type="button" class="oe_form_button_toggle">
+ <span class="oe_form_on_editable">Cancel</span>
+ <span class="oe_form_on_readonly">Edit</span>
</button>
- <button type="button" class="oe_form_button_new">New</button>
- <button type="button" class="oe_form_button_duplicate oe_form_on_update">Duplicate</button>
- <button type="button" class="oe_form_button_toggle">Readonly/Editable</button>
+ <button type="button" class="oe_form_button_new oe_form_on_readonly">Create</button>
+ <button type="button" class="oe_form_button_duplicate oe_form_on_readonly">Duplicate</button>
+ <button type="button" class="oe_form_button_delete oe_form_on_readonly">Delete</button>
</div>
<div class="oe_form_pager" t-if="widget.options.pager !== false">
<button type="button" data-pager-action="first">First</button>
@@ -1010,6 +1011,7 @@
<span t-if="widget.string"><t t-esc="widget.string"/></span>
</button>
</t>
+
<t t-name="SearchView">
<form class="oe_forms">
<t t-call="SearchView.render_lines"/>
@@ -1389,7 +1391,6 @@
</tr>
</table>
-
<table t-name="ExportTreeView-Secondary"
id="field-tree-structure" class="oe_export_fields_selector_export"
cellspacing="0" cellpadding="0">
diff --git a/addons/web_calendar/po/ar.po b/addons/web_calendar/po/ar.po
new file mode 100644
index 00000000000..33e04220c2c
--- /dev/null
+++ b/addons/web_calendar/po/ar.po
@@ -0,0 +1,22 @@
+# Arabic translation for openerp-web
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the openerp-web package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openerp-web\n"
+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2011-10-07 10:38+0200\n"
+"PO-Revision-Date: 2011-11-03 15:02+0000\n"
+"Last-Translator: kifcaliph <kifcaliph@hotmail.com>\n"
+"Language-Team: Arabic <ar@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2011-11-04 05:32+0000\n"
+"X-Generator: Launchpad (build 14231)\n"
+
+#: addons/web_calendar/static/src/xml/web_calendar.xml:0
+msgid "&nbsp;"
+msgstr "&nbsp;"
diff --git a/addons/web_dashboard/po/ar.po b/addons/web_dashboard/po/ar.po
new file mode 100644
index 00000000000..0e2cf4dfcf2
--- /dev/null
+++ b/addons/web_dashboard/po/ar.po
@@ -0,0 +1,46 @@
+# Arabic translation for openerp-web
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the openerp-web package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openerp-web\n"
+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2011-10-07 10:39+0200\n"
+"PO-Revision-Date: 2011-11-03 15:09+0000\n"
+"Last-Translator: kifcaliph <kifcaliph@hotmail.com>\n"
+"Language-Team: Arabic <ar@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2011-11-04 05:32+0000\n"
+"X-Generator: Launchpad (build 14231)\n"
+
+#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0
+msgid "Reset"
+msgstr "إستعادة"
+
+#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0
+msgid "Undo"
+msgstr "تراجع"
+
+#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0
+msgid "Add Widget"
+msgstr "أضف أداة"
+
+#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0
+msgid "Change layout"
+msgstr "تغيير المخطط"
+
+#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0
+msgid "Choose dashboard layout"
+msgstr "اختر مخطط للعرض"
+
+#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0
+msgid "progress:"
+msgstr "التقدم:"
+
+#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0
+msgid "%"
+msgstr "%"
diff --git a/addons/web_dashboard/po/pl.po b/addons/web_dashboard/po/pl.po
new file mode 100644
index 00000000000..256945c9030
--- /dev/null
+++ b/addons/web_dashboard/po/pl.po
@@ -0,0 +1,46 @@
+# Polish translation for openerp-web
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the openerp-web package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openerp-web\n"
+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2011-10-07 10:39+0200\n"
+"PO-Revision-Date: 2011-11-04 16:28+0000\n"
+"Last-Translator: Grzegorz Grzelak (OpenGLOBE.pl) <grzegorz@openglobe.pl>\n"
+"Language-Team: Polish <pl@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2011-11-05 06:04+0000\n"
+"X-Generator: Launchpad (build 14231)\n"
+
+#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0
+msgid "Reset"
+msgstr "Przywróć"
+
+#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0
+msgid "Undo"
+msgstr "Cofnij"
+
+#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0
+msgid "Add Widget"
+msgstr "Dodaj kontrolkę"
+
+#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0
+msgid "Change layout"
+msgstr "Zmień układ"
+
+#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0
+msgid "Choose dashboard layout"
+msgstr "Wybierz układ konsoli"
+
+#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0
+msgid "progress:"
+msgstr "postęp:"
+
+#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0
+msgid "%"
+msgstr ""
diff --git a/addons/web_dashboard/static/src/xml/web_dashboard.xml b/addons/web_dashboard/static/src/xml/web_dashboard.xml
index 87222baa5fd..77eab4b7e28 100644
--- a/addons/web_dashboard/static/src/xml/web_dashboard.xml
+++ b/addons/web_dashboard/static/src/xml/web_dashboard.xml
@@ -30,7 +30,7 @@
</t>
<t t-name="DashBoard.action">
<div t-att-data-id="action.attrs.name" class="oe-dashboard-action">
- <h2 t-attf-class="oe-dashboard-action-header oe_view_title #{action.attrs.string ? '' : 'oe-dashboard-action-header-empty'}">
+ <h2 t-attf-class="oe-dashboard-action-header #{action.attrs.string ? '' : 'oe-dashboard-action-header-empty'}">
<input class="oe-dashboard-action-input" type="text" name="title" value="" style="display: none"/>
<t t-esc="action.attrs.string"/>
<t t-if="!action.attrs.string">&amp;nbsp;</t>
diff --git a/addons/web_default_home/po/ar.po b/addons/web_default_home/po/ar.po
new file mode 100644
index 00000000000..19363090f3b
--- /dev/null
+++ b/addons/web_default_home/po/ar.po
@@ -0,0 +1,38 @@
+# Arabic translation for openerp-web
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the openerp-web package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openerp-web\n"
+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2011-10-07 10:39+0200\n"
+"PO-Revision-Date: 2011-11-03 15:06+0000\n"
+"Last-Translator: kifcaliph <kifcaliph@hotmail.com>\n"
+"Language-Team: Arabic <ar@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2011-11-04 05:32+0000\n"
+"X-Generator: Launchpad (build 14231)\n"
+
+#: addons/web_default_home/static/src/xml/web_default_home.xml:0
+msgid "Welcome to your new OpenERP instance."
+msgstr "أهلاً و مرحباً بك في OpenERP"
+
+#: addons/web_default_home/static/src/xml/web_default_home.xml:0
+msgid "Remember to bookmark this page."
+msgstr "لا تنسي إدراج هذه الصفحة ضمن المفضلات"
+
+#: addons/web_default_home/static/src/xml/web_default_home.xml:0
+msgid "Remember your login:"
+msgstr "تذكر كلمة المرور"
+
+#: addons/web_default_home/static/src/xml/web_default_home.xml:0
+msgid "Choose the first OpenERP Application you want to install.."
+msgstr "اختر أول برنامج OpenERP للتثبيت"
+
+#: addons/web_default_home/static/src/xml/web_default_home.xml:0
+msgid "Install"
+msgstr "تثبيت"
diff --git a/addons/web_default_home/po/pl.po b/addons/web_default_home/po/pl.po
new file mode 100644
index 00000000000..3eec2b0ab49
--- /dev/null
+++ b/addons/web_default_home/po/pl.po
@@ -0,0 +1,38 @@
+# Polish translation for openerp-web
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the openerp-web package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openerp-web\n"
+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2011-10-07 10:39+0200\n"
+"PO-Revision-Date: 2011-11-04 16:30+0000\n"
+"Last-Translator: Grzegorz Grzelak (OpenGLOBE.pl) <grzegorz@openglobe.pl>\n"
+"Language-Team: Polish <pl@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2011-11-05 06:04+0000\n"
+"X-Generator: Launchpad (build 14231)\n"
+
+#: addons/web_default_home/static/src/xml/web_default_home.xml:0
+msgid "Welcome to your new OpenERP instance."
+msgstr "Witamy w twojej nowej instancji OpenERP."
+
+#: addons/web_default_home/static/src/xml/web_default_home.xml:0
+msgid "Remember to bookmark this page."
+msgstr "Pamiętaj o dodaniu tej strony do zakładek."
+
+#: addons/web_default_home/static/src/xml/web_default_home.xml:0
+msgid "Remember your login:"
+msgstr "Zapamiętaj twój login:"
+
+#: addons/web_default_home/static/src/xml/web_default_home.xml:0
+msgid "Choose the first OpenERP Application you want to install.."
+msgstr "Wybierz pierwszą aplikację OpenERP do instalacji."
+
+#: addons/web_default_home/static/src/xml/web_default_home.xml:0
+msgid "Install"
+msgstr "Instaluj"
diff --git a/addons/web_default_home/po/sk.po b/addons/web_default_home/po/sk.po
new file mode 100644
index 00000000000..bf766fb65b0
--- /dev/null
+++ b/addons/web_default_home/po/sk.po
@@ -0,0 +1,38 @@
+# Slovak translation for openerp-web
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the openerp-web package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openerp-web\n"
+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2011-10-07 10:39+0200\n"
+"PO-Revision-Date: 2011-11-01 13:27+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Slovak <sk@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2011-11-02 05:05+0000\n"
+"X-Generator: Launchpad (build 14214)\n"
+
+#: addons/web_default_home/static/src/xml/web_default_home.xml:0
+msgid "Welcome to your new OpenERP instance."
+msgstr ""
+
+#: addons/web_default_home/static/src/xml/web_default_home.xml:0
+msgid "Remember to bookmark this page."
+msgstr ""
+
+#: addons/web_default_home/static/src/xml/web_default_home.xml:0
+msgid "Remember your login:"
+msgstr ""
+
+#: addons/web_default_home/static/src/xml/web_default_home.xml:0
+msgid "Choose the first OpenERP Application you want to install.."
+msgstr ""
+
+#: addons/web_default_home/static/src/xml/web_default_home.xml:0
+msgid "Install"
+msgstr ""
diff --git a/addons/web_diagram/po/ar.po b/addons/web_diagram/po/ar.po
new file mode 100644
index 00000000000..af8c6ab7213
--- /dev/null
+++ b/addons/web_diagram/po/ar.po
@@ -0,0 +1,54 @@
+# Arabic translation for openerp-web
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the openerp-web package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openerp-web\n"
+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2011-10-07 10:39+0200\n"
+"PO-Revision-Date: 2011-11-03 15:11+0000\n"
+"Last-Translator: kifcaliph <kifcaliph@hotmail.com>\n"
+"Language-Team: Arabic <ar@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2011-11-04 05:32+0000\n"
+"X-Generator: Launchpad (build 14231)\n"
+
+#: addons/web_diagram/static/src/xml/base_diagram.xml:0
+msgid "New Node"
+msgstr "طرف جديد"
+
+#: addons/web_diagram/static/src/xml/base_diagram.xml:0
+msgid "New Edge"
+msgstr "حافة جديدة"
+
+#: addons/web_diagram/static/src/xml/base_diagram.xml:0
+msgid "Show Grid:"
+msgstr "عرض الشبكة"
+
+#: addons/web_diagram/static/src/xml/base_diagram.xml:0
+msgid "First"
+msgstr "الأول"
+
+#: addons/web_diagram/static/src/xml/base_diagram.xml:0
+msgid "<<"
+msgstr ">>"
+
+#: addons/web_diagram/static/src/xml/base_diagram.xml:0
+msgid "0"
+msgstr "0"
+
+#: addons/web_diagram/static/src/xml/base_diagram.xml:0
+msgid "/"
+msgstr "/"
+
+#: addons/web_diagram/static/src/xml/base_diagram.xml:0
+msgid ">>"
+msgstr ">>"
+
+#: addons/web_diagram/static/src/xml/base_diagram.xml:0
+msgid "Last"
+msgstr "الأخير"
diff --git a/addons/web_diagram/po/pl.po b/addons/web_diagram/po/pl.po
new file mode 100644
index 00000000000..f36f3853850
--- /dev/null
+++ b/addons/web_diagram/po/pl.po
@@ -0,0 +1,54 @@
+# Polish translation for openerp-web
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the openerp-web package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openerp-web\n"
+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2011-10-07 10:39+0200\n"
+"PO-Revision-Date: 2011-11-04 16:24+0000\n"
+"Last-Translator: Grzegorz Grzelak (OpenGLOBE.pl) <grzegorz@openglobe.pl>\n"
+"Language-Team: Polish <pl@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2011-11-05 06:04+0000\n"
+"X-Generator: Launchpad (build 14231)\n"
+
+#: addons/web_diagram/static/src/xml/base_diagram.xml:0
+msgid "New Node"
+msgstr "Nowy węzeł"
+
+#: addons/web_diagram/static/src/xml/base_diagram.xml:0
+msgid "New Edge"
+msgstr "Nowa linia"
+
+#: addons/web_diagram/static/src/xml/base_diagram.xml:0
+msgid "Show Grid:"
+msgstr "Pokaż siatkę"
+
+#: addons/web_diagram/static/src/xml/base_diagram.xml:0
+msgid "First"
+msgstr "Pierwsze"
+
+#: addons/web_diagram/static/src/xml/base_diagram.xml:0
+msgid "<<"
+msgstr ""
+
+#: addons/web_diagram/static/src/xml/base_diagram.xml:0
+msgid "0"
+msgstr ""
+
+#: addons/web_diagram/static/src/xml/base_diagram.xml:0
+msgid "/"
+msgstr ""
+
+#: addons/web_diagram/static/src/xml/base_diagram.xml:0
+msgid ">>"
+msgstr ""
+
+#: addons/web_diagram/static/src/xml/base_diagram.xml:0
+msgid "Last"
+msgstr "Ostatnie"
diff --git a/addons/web_graph/controllers/__init__.py b/addons/web_graph/controllers/__init__.py
deleted file mode 100644
index 039d9715fab..00000000000
--- a/addons/web_graph/controllers/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-import main \ No newline at end of file
diff --git a/addons/web_graph/controllers/main.py b/addons/web_graph/controllers/main.py
deleted file mode 100644
index cda868c0809..00000000000
--- a/addons/web_graph/controllers/main.py
+++ /dev/null
@@ -1,11 +0,0 @@
-from web.controllers.main import View
-import web.common as openerpweb
-
-class GraphView(View):
- _cp_path = "/web_graph/graphview"
-
- @openerpweb.jsonrequest
- def load(self, req, model, view_id):
- fields_view = self.fields_view_get(req, model, view_id, 'graph')
- all_fields = req.session.model(model).fields_get()
- return {'fields_view': fields_view, 'all_fields':all_fields}
diff --git a/addons/web_kanban/static/src/css/kanban.css b/addons/web_kanban/static/src/css/kanban.css
index d7c27510f4d..6c6ddd57dec 100644
--- a/addons/web_kanban/static/src/css/kanban.css
+++ b/addons/web_kanban/static/src/css/kanban.css
@@ -1,37 +1,71 @@
-.openerp .oe_kanban_view .oe_column {
- width: 100%;
-}
-
-.openerp .oe_vertical_text {
- writing-mode:tb-rl;
- -webkit-transform:rotate(90deg);
- -moz-transform:rotate(90deg);
- -o-transform: rotate(90deg);
- -ms-transform: rotate(90deg);
- transform: rotate(90deg);
- display:block;
- width:30px;
- height:20px;
- align:center;
- font-size:24px;
- white-space: nowrap;
-}
-
.openerp .oe_kanban_view .ui-sortable-placeholder {
border: 1px dotted black;
visibility: visible !important;
height: 60px !important;
}
+.openerp .oe_kanban_group_header {
+ position: relative;
+}
+.openerp .oe_kanban_group_folded {
+ padding: 0 5px 0 5px;
+}
+.openerp .oe_kanban_group_folded .oe_kanban_group_title,
+.openerp .oe_kanban_group_folded .oe_kanban_aggregates {
+ display: none;
+}
+.openerp .oe_kanban_group_folded .oe_kanban_group_title_vertical {
+ display: block;
+}
-.openerp .oe_kanban_view .oe_column_heading {
+.openerp .oe_kanban_group_title {
color: #000000;
font-size: 130%;
font-weight: bold;
}
-.openerp .oe_kanban_view .fold-columns-icon {
+.openerp .oe_kanban_group_title_undefined {
+ color: #666666;
+}
+.openerp .oe_kanban_group_title_vertical {
+ writing-mode: tb-rl;
+ -webkit-transform: rotate(90deg);
+ -moz-transform: rotate(90deg);
+ -o-transform: rotate(90deg);
+ -ms-transform: rotate(90deg);
+ transform: rotate(90deg);
+ width: 30px;
+ height: 20px;
+ align: center;
+ font-size: 24px;
+ white-space: nowrap;
+ display: none;
+ position: absolute;
+ top: 10px;
+}
+
+.openerp .oe_kanban_fold_icon {
+ cursor: pointer;
float: left;
padding: 2px 2px 0 0;
+ width: 16px;
+ height: 16px;
+ background: url(/web_kanban/static/src/img/minus-icon.png) no-repeat;
+}
+.openerp .oe_kanban_group_folded .oe_kanban_fold_icon {
+ background: url(/web_kanban/static/src/img/plus-icon.png) no-repeat;
}
+
+.openerp ul.oe_kanban_aggregates {
+ padding: 0;
+ margin: 0 0 0 22px;
+}
+.openerp ul.oe_kanban_aggregates li {
+ list-style: circle;
+ font-style: italic;
+}
+.openerp ul.oe_kanban_aggregates span {
+ text-decoration: underline;
+}
+
.openerp .oe_kanban_action_button {
height: 22px;
margin: 0;
@@ -248,3 +282,8 @@
.openerp .oe_kanban_color_alert .oe_kanban_color_border {
border-color: #c00 !important;
}
+
+/* Green color */
+.openerp .oe_kanban_color_green .oe_kanban_color_border {
+ border-color: #0c0 !important;
+}
diff --git a/addons/web_kanban/static/src/js/kanban.js b/addons/web_kanban/static/src/js/kanban.js
index 13d3c9203fc..9ba02c48e9a 100644
--- a/addons/web_kanban/static/src/js/kanban.js
+++ b/addons/web_kanban/static/src/js/kanban.js
@@ -1,38 +1,59 @@
openerp.web_kanban = function (openerp) {
+var _t = openerp.web._t;
var QWeb = openerp.web.qweb;
QWeb.add_template('/web_kanban/static/src/xml/web_kanban.xml');
openerp.web.views.add('kanban', 'openerp.web_kanban.KanbanView');
+
openerp.web_kanban.KanbanView = openerp.web.View.extend({
+ template: "KanbanView",
+ default_nr_columns: 3,
init: function (parent, dataset, view_id, options) {
this._super(parent);
this.set_default_options(options);
this.dataset = dataset;
- this.model = dataset.model;
this.view_id = view_id;
this.fields_view = {};
- this.group_by = [];
- this.source_index = {};
- this.all_display_data = false;
+ this.fields_keys = [];
+ this.group_by = null;
+ this.state = {
+ groups : {},
+ records : {}
+ };
this.groups = [];
+ this.form_dialog = new openerp.web.FormDialog(this, {}, this.options.action_views_ids.form, dataset).start();
+ this.form_dialog.on_form_dialog_saved.add_last(this.do_reload);
+ this.aggregates = {};
this.qweb = new QWeb2.Engine();
this.qweb.debug = (window.location.search.indexOf('?debug') !== -1);
- this.aggregates = {};
- this.NO_OF_COLUMNS = 3;
- this.form_dialog = new openerp.web.FormDialog(this, {}, this.options.action_views_ids.form, dataset).start();
- this.form_dialog.on_form_dialog_saved.add_last(this.on_record_saved);
+ this.qweb.default_dict = {
+ '_' : _,
+ '_t' : _t
+ }
+ this.has_been_loaded = $.Deferred();
+ this.search_domain = this.search_context = this.search_group_by = null;
+ this.currently_dragging = {};
},
start: function() {
this._super();
- return this.rpc("/web/view/load", {"model": this.model, "view_id": this.view_id, "view_type": "kanban"}, this.on_loaded);
+ this.$element.find('button.oe_kanban_button_new').click(this.do_add_record);
+ this.$groups = this.$element.find('.oe_kanban_groups tr');
+ var context = new openerp.web.CompoundContext(this.dataset.get_context());
+ return this.rpc('/web/view/load', {
+ 'model': this.dataset.model,
+ 'view_id': this.view_id,
+ 'view_type': 'kanban',
+ context: context
+ }, this.on_loaded);
},
on_loaded: function(data) {
- var self = this;
this.fields_view = data;
+ this.fields_keys = _.keys(this.fields_view.fields);
this.add_qweb_template();
+ this.has_been_loaded.resolve();
},
add_qweb_template: function() {
- var group_operator = ["avg", "max", "min", "sum", "count"]
+ var group_operator = ['avg', 'max', 'min', 'sum', 'count']
for (var i=0, ii=this.fields_view.arch.children.length; i < ii; i++) {
var child = this.fields_view.arch.children[i];
if (child.tag === "field") {
@@ -50,50 +71,6 @@ openerp.web_kanban.KanbanView = openerp.web.View.extend({
}
}
},
- get_qweb_context: function(record) {
- return {
- record: this.do_transform_record(record),
- kanban_color: _.bind(this.kanban_color, this),
- kanban_gravatar: _.bind(this.kanban_gravatar, this),
- kanban_image: _.bind(this.kanban_image, this),
- kanban_text_ellipsis: _.bind(this.kanban_text_ellipsis, this),
- '_' : _
- }
- },
- kanban_color: function(variable) {
- var number_of_color_schemes = 10,
- index = 0;
- switch (typeof(variable)) {
- case 'string':
- for (var i=0, ii=variable.length; i<ii; i++) {
- index += variable.charCodeAt(i);
- }
- break;
- case 'number':
- index = Math.round(variable);
- break;
- default:
- return '';
- }
- var color = (index % number_of_color_schemes);
- return 'oe_kanban_color_' + color;
- },
- kanban_gravatar: function(email, size) {
- size = size || 22;
- var email_md5 = $.md5(email);
- return 'http://www.gravatar.com/avatar/' + email_md5 + '.png?s=' + size;
- },
- kanban_image: function(model, field, id) {
- id = id || '';
- return '/web/binary/image?session_id=' + this.session.session_id + '&model=' + model + '&field=' + field + '&id=' + id;
- },
- kanban_text_ellipsis: function(s, size) {
- size = size || 160;
- if (!s) {
- return '';
- }
- return s.substr(0, size) + '...';
- },
transform_qweb_template: function(node) {
var qweb_prefix = QWeb.prefix;
switch (node.tag) {
@@ -145,358 +122,391 @@ openerp.web_kanban.KanbanView = openerp.web.View.extend({
}
}
},
- on_show_data: function() {
- var self = this;
- if (!this.group_by.length) {
- this.do_record_group();
- }
- this.$element.html(QWeb.render("KanbanView", {"data": self.all_display_data}));
- this.on_reload_kanban();
- this.$element.find(".oe_vertical_text").hide();
- var drag_handel = false;
- if (this.$element.find(".oe_kanban_draghandle").length > 0) {
- drag_handel = ".oe_kanban_draghandle";
- }
- if (!this.group_by.length) {
- drag_handel = true;
- }
- this.$element.find(".oe_column").sortable({
- connectWith: ".oe_column",
- handle : drag_handel,
- start: function(event, ui) {
- self.source_index['index'] = ui.item.index();
- self.source_index['column'] = ui.item.parent().attr('id');
- },
- stop: self.on_receive_record,
- scroll: false
- });
- this.$element.find('button.oe_kanban_button_new').click(this.do_add_record);
- this.$element.find(".fold-columns-icon").click(function(event) {
- self.do_fold_unfold_columns(event, this.id);
- });
- },
- do_fold_unfold_columns: function(event, element_id) {
- var column_id = "column_" + element_id;
- var column_element = this.$element.find("#" + column_id + " .oe_fold_column");
- if (column_element.is(":hidden")) {
- this.$element.find("#" + column_id).find("img.fold-columns-icon").attr('src', '/web_kanban/static/src/img/minus-icon.png');
- column_element.show();
- this.$element.find("#" + column_id + ".oe_table_column").css("width",Math.round(99 / this.all_display_data.length) + "%");
- this.$element.find("#" + column_id + ".oe_vertical_text").hide();
- }
- else{
- this.$element.find("#" + column_id).find("img.fold-columns-icon").attr('src', '/web_kanban/static/src/img/plus-icon.png');
- column_element.hide();
- this.$element.find("#" + column_id + ".oe_table_column").css("width","0.5%");
- this.$element.find("#" + column_id + ".oe_vertical_text").show();
- }
-
- },
- do_record_group: function() {
- if (this.NO_OF_COLUMNS && this.all_display_data.length > 0) {
- var records = this.all_display_data[0].records;
- var record_per_group = Math.round((records).length / this.NO_OF_COLUMNS);
- this.all_display_data = [];
- for (var i=0, ii=this.NO_OF_COLUMNS; i < ii; i++) {
- this.all_display_data.push({'records': records.slice(0,record_per_group), 'value':i, 'header' : false, 'ids':[]});
- records.splice(0,record_per_group);
- }
- }
- },
- on_button_click: function (button_attrs, record_id) {
- this.on_execute_button_click(this.dataset, button_attrs, record_id);
- },
do_add_record: function() {
this.dataset.index = null;
this.do_switch_view('form');
},
- do_edit_record: function(record_id) {
+ do_search: function(domain, context, group_by) {
var self = this;
- this.form_dialog.select_id(record_id).then(function() {
- self.form_dialog.open();
+ this.search_domain = domain;
+ this.search_context = context;
+ this.search_group_by = group_by;
+ $.when(this.has_been_loaded).then(function() {
+ self.group_by = group_by.length ? group_by[0] : self.fields_view.arch.attrs.default_group_by;
+ self.datagroup = new openerp.web.DataGroup(self, self.dataset.model, domain, context, self.group_by ? [self.group_by] : []);
+ self.datagroup.list(self.fields_keys, self.do_process_groups, self.do_process_dataset);
});
},
- on_record_saved: function(r) {
- var id = this.form_dialog.form.datarecord.id;
- this.on_reload_record(id);
- },
- do_change_color: function(record_id, $e) {
+ do_process_groups: function(groups) {
+ this.do_clear_groups();
+ this.dataset.ids = [];
var self = this,
- id = record_id,
- colors = '#FFFFFF,#CCCCCC,#FFC7C7,#FFF1C7,#E3FFC7,#C7FFD5,#C7FFFF,#C7D5FF,#E3C7FF,#FFC7F1'.split(','),
- $cpicker = $(QWeb.render('KanbanColorPicker', { colors : colors, columns: 2 }));
- $e.after($cpicker);
- $cpicker.mouseenter(function() {
- clearTimeout($cpicker.data('timeoutId'));
- }).mouseleave(function(evt) {
- var timeoutId = setTimeout(function() { $cpicker.remove() }, 500);
- $cpicker.data('timeoutId', timeoutId);
- });
- $cpicker.find('a').click(function(evt) {
- var data = {};
- data[$e.data('name')] = $(this).data('color');
- self.dataset.write(id, data, {}, function() {
- self.on_reload_record(id);
+ remaining = groups.length - 1,
+ groups_array = [];
+ _.each(groups, function (group, index) {
+ var group_name = group.value,
+ group_value = group.value,
+ group_aggregates = {};
+ if (group.value instanceof Array) {
+ group_name = group.value[1];
+ group_value = group.value[0];
+ }
+ _.each(self.aggregates, function(value, key) {
+ group_aggregates[value] = group.aggregates[key];
+ });
+ var dataset = new openerp.web.DataSetSearch(self, self.dataset.model, group.context, group.domain);
+ dataset.read_slice(self.fields_keys, {'domain': group.domain, 'context': group.context}, function(records) {
+ self.dataset.ids.push.apply(self.dataset.ids, dataset.ids);
+ groups_array[index] = new openerp.web_kanban.KanbanGroup(self, records, group_value, group_name, group_aggregates);
+ if (!remaining--) {
+ self.dataset.index = self.dataset.ids.length ? 0 : null;
+ self.do_add_groups(groups_array);
+ }
});
- $cpicker.remove();
- return false;
});
},
- /**
- Reload one record in view.
- record_id : reload record id.
- */
- on_reload_record: function (record_id){
+ do_process_dataset: function(dataset) {
var self = this;
- this.dataset.read_ids([record_id], _.keys(self.fields_view.fields), function (records) {
- if (records.length > 0) {
- for (var i=0, ii=self.all_display_data.length; i < ii; i++) {
- for(j=0, jj=self.all_display_data[i].records.length; j < jj; j++) {
- if (self.all_display_data[i].records[j].id == record_id) {
- _.extend(self.all_display_data[i].records[j], records[0]);
- self.$element.find("#main_" + record_id).children().remove();
- self.$element.find("#main_" + record_id).append(
- self.qweb.render('kanban-box', self.get_qweb_context(self.all_display_data[i].records[j]))
- );
- break;
- }
+ this.do_clear_groups();
+ this.dataset.read_slice(this.fields_keys, {}, function(records) {
+ var groups = [];
+ while (records.length) {
+ for (var i = 0; i < self.default_nr_columns; i++) {
+ if (!groups[i]) {
+ groups[i] = [];
}
+ groups[i].push(records.shift());
}
- self.$element.find("#main_" + record_id + " .oe_kanban_action").click(self.on_action_clicked);
- self.$element.find("#main_" + record_id + " .oe_kanban_box_show_onclick_trigger").click(function() {
- $(this).parent("#main_" + record_id + " .oe_kanban_box").find(".oe_kanban_box_show_onclick").toggle();
- });
}
+ for (var i = 0; i < groups.length; i++) {
+ groups[i] = new openerp.web_kanban.KanbanGroup(self, _.compact(groups[i]));
+ }
+ self.do_add_groups(groups);
});
-
},
- do_delete: function (id) {
- var self = this;
- return $.when(this.dataset.unlink([id])).then(function () {
- self.drop_records(id);
- });
+ do_reload: function() {
+ this.do_search(this.search_domain, this.search_context, this.search_group_by);
},
- drop_records: function (id) {
- var self = this;
- _.each(self.all_display_data, function(data, index) {
- _.each(data.records, function(record, index_row) {
- if (parseInt(record.id) == id) {
- self.all_display_data[index]['records'].splice(index_row, 1);
- self.all_display_data[index]['ids'].splice(index_row, 1);
- return false;
- }
- });
+ do_clear_groups: function() {
+ _.each(this.groups, function(group) {
+ group.stop();
});
- self.$element.find("#main_" + id).remove();
+ this.groups = [];
+ this.$element.find('.oe_kanban_groups_headers, .oe_kanban_groups_records').empty();
},
- on_execute_button_click: function (dataset, button_attrs, record_id) {
+ do_add_groups: function(groups) {
var self = this;
- this.do_execute_action(
- button_attrs, dataset,
- record_id, function () {
- self.on_reload_record(record_id);
- }
- );
+ _.each(groups, function(group) {
+ self.groups[group.undefined_title ? 'unshift' : 'push'](group);
+ });
+ _.each(this.groups, function(group) {
+ group.appendTo(self.$element.find('.oe_kanban_groups_headers'));
+ });
+ this.on_groups_started();
},
- on_receive_record: function (event, ui) {
+ on_groups_started: function() {
var self = this;
- var from = ui.item.index();
- var search_action = false;
- var to = ui.item.prev().index() || 0;
- if (!ui.item.attr("id")) {
- return false;
+ this.compute_groups_width();
+ if (this.group_by) {
+ this.$element.find('.oe_kanban_column').sortable({
+ connectWith: '.oe_kanban_column',
+ handle : '.oe_kanban_draghandle',
+ start: function(event, ui) {
+ self.currently_dragging.index = ui.item.index();
+ self.currently_dragging.group = ui.item.parents('.oe_kanban_column:first').data('widget');
+ },
+ stop: function(event, ui) {
+ var record = ui.item.data('widget'),
+ old_index = self.currently_dragging.index,
+ new_index = ui.item.index(),
+ old_group = self.currently_dragging.group,
+ new_group = ui.item.parents('.oe_kanban_column:first').data('widget');
+ if (!(old_group.title === new_group.title && old_group.value === new_group.value && old_index == new_index)) {
+ self.on_record_moved(record, old_group, old_index, new_group, new_index);
+ }
+ },
+ scroll: false
+ });
+ } else {
+ this.$element.find('.oe_kanban_draghandle').removeClass('oe_kanban_draghandle');
}
- if (self.fields_view.fields.sequence != undefined && ((self.source_index.index >= 0 && self.source_index.index != from) ||
- (self.source_index.column && self.source_index.column != ui.item.parent().attr('id')))) {
- var child_record = ui.item.parent().children();
- var data, sequence = 1, index = to;
- child_record.splice(0, to);
- var flag = false;
- if (to >= 0 && child_record) {
- var record_id = parseInt($(child_record).attr("id").split("_")[1]);
- if (record_id) {
- _.each(self.all_display_data, function(data, index) {
- _.each(data.records, function(record, index_row) {
- if(record_id == record.id && record.sequence) {
- sequence = record.sequence;
- flag = true;
- return false;
- }
- });
- if(flag) {return false;}
- });
- }
- }
- _.each(child_record, function (child) {
- var child_id = parseInt($(child).attr("id").split("_")[1]);
- if (child_id) {
- flag = false;
- _.each(self.all_display_data, function(data, index) {
- _.each(data.records, function(record, index_row) {
- if(parseInt(record.id) == child_id) {
- self.all_display_data[index]['records'][index_row]['sequence'] = sequence;
- flag = true;
- return false;
- }
- });
- if (flag) {return false;}
- });
- self.dataset.write(child_id, {sequence: sequence});
- sequence++;
- search_action = true;
- }
+ },
+ on_record_moved : function(record, old_group, old_index, new_group, new_index) {
+ if (old_group === new_group) {
+ new_group.records.splice(old_index, 1);
+ new_group.records.splice(new_index, 0, record);
+ new_group.do_save_sequences();
+ } else {
+ old_group.records.splice(old_index, 1);
+ new_group.records.splice(new_index, 0, record);
+ record.group = new_group;
+ var data = {};
+ data[this.group_by] = new_group.value;
+ this.dataset.write(record.id, data, {}, function() {
+ record.do_reload();
+ new_group.do_save_sequences();
});
}
- if (self.group_by.length > 0 && self.source_index.column && self.source_index.column != ui.item.parent().attr('id')) {
- var value = ui.item.closest("td").attr("id");
- if (value) {
- var data_val = {};
- var wirte_id = parseInt(ui.item.attr("id").split("_")[1]);
- value = value.split("_")[1];
- if (value == 'false') {
- value = false;
- }
- var update_record = false;
- _.each(self.all_display_data, function(data, index) {
- _.each(data.records, function(record, index_row) {
- if(parseInt(record.id) == wirte_id) {
- self.all_display_data[index]['records'][index_row][self.group_by[0]] = value;
- update_record = self.all_display_data[index]['records'].splice(index_row,1)
- return false;
- }
- });
- if (update_record) {return false;}
- });
- _.each(self.all_display_data, function(data, index) {
- if (data.value == value || (data.value == 'false' && value == false)) {
- self.all_display_data[index]['records'].push(update_record[0]);
- }
- });
- data_val[self.group_by[0]] = value;
- self.dataset.write(wirte_id, data_val);
- search_action = true;
+ },
+ do_show: function () {
+ this.$element.show();
+ },
+ do_hide: function () {
+ this.$element.hide();
+ },
+ compute_groups_width: function() {
+ var unfolded = 0;
+ _.each(this.groups, function(group) {
+ unfolded += group.state.folded ? 0 : 1;
+ group.$element.css('width', '');
+ });
+ _.each(this.groups, function(group) {
+ if (!group.state.folded) {
+ group.$element.css('width', Math.round(100/unfolded) + '%');
}
+ });
+ }
+});
+
+openerp.web_kanban.KanbanGroup = openerp.web.Widget.extend({
+ template: 'KanbanView.group_header',
+ init: function (parent, records, value, title, aggregates) {
+ var self = this;
+ this._super(parent);
+ this.view = parent;
+ this.value = value;
+ this.title = title;
+ if (title === false) {
+ this.title = _t('Undefined');
+ this.undefined_title = true;
}
- if (search_action) {
- self.on_reload_kanban();
+ this.aggregates = aggregates || {};
+ var key = this.view.group_by + '-' + value;
+ if (!this.view.state.groups[key]) {
+ this.view.state.groups[key] = {
+ folded: false
+ }
}
- this.source_index = {};
+ this.state = this.view.state.groups[key];
+ this.$records = null;
+ this.records = _.map(records, function(record) {
+ return new openerp.web_kanban.KanbanRecord(self, record);
+ });
},
- on_reload_kanban: function() {
- var self = this;
- _.each(self.all_display_data, function(data, index) {
- if (data.records.length > 0){
- _.each(data.records, function(record) {
- self.$element.find("#main_" + record.id).children().remove();
- self.$element.find("#main_" + record.id).append(
- self.qweb.render('kanban-box', self.get_qweb_context(record))
- );
- });
- }
+ start: function() {
+ var self = this,
+ def = this._super();
+ this.$records = $(QWeb.render('KanbanView.group_records_container', { widget : this}));
+ this.$records.appendTo(this.view.$element.find('.oe_kanban_groups_records'));
+ _.each(this.records, function(record) {
+ record.appendTo(self.$records);
});
- this.$element.find('.oe_kanban_action').click(this.on_action_clicked);
- this.$element.find('.oe_kanban_box_show_onclick_trigger').click(function() {
- $(this).parent('.oe_kanban_box').find('.oe_kanban_box_show_onclick').toggle();
+ this.$element.find(".oe_kanban_fold_icon").click(function() {
+ self.do_toggle_fold();
+ self.view.compute_groups_width();
+ return false;
});
+ if (this.state.folded) {
+ this.do_toggle_fold();
+ }
+ this.$element.data('widget', this);
+ this.$records.data('widget', this);
+ return def;
},
- on_action_clicked: function(evt) {
- evt.preventDefault();
- var $action = $(evt.currentTarget),
- record_id = parseInt($action.closest(".oe_kanban_record").attr("id").split('_')[1]),
- type = $action.data('type');
- if (type == 'delete') {
- this.do_delete(record_id);
- } else if (type == 'edit') {
- this.do_edit_record(record_id);
- } else if (type == 'color') {
- this.do_change_color(record_id, $action);
- } else {
- var button_attrs = $action.data();
- this.on_button_click(button_attrs, record_id);
+ stop: function() {
+ this._super();
+ if (this.$records) {
+ this.$records.remove();
+ }
+ },
+ remove_record: function(id, remove_from_dataset) {
+ for (var i = 0, ii = this.records.length; i < ii; i++) {
+ if (this.records[i]['id'] === id) {
+ this.records.splice(i, 1);
+ }
+ }
+ },
+ do_toggle_fold: function(compute_width) {
+ this.$element.toggleClass('oe_kanban_group_folded');
+ this.$records.find('.oe_kanban_record').toggle();
+ this.state.folded = this.$element.is('.oe_kanban_group_folded');
+ },
+ do_save_sequences: function() {
+ var self = this;
+ if (_.indexOf(this.view.fields_keys, 'sequence') > -1) {
+ _.each(this.records, function(record, index) {
+ self.view.dataset.write(record.id, { sequence : index });
+ });
+ }
+ }
+});
+
+openerp.web_kanban.KanbanRecord = openerp.web.Widget.extend({
+ template: 'KanbanView.record',
+ init: function (parent, record) {
+ this._super(parent);
+ this.group = parent;
+ this.view = parent.view;
+ this.id = null;
+ this.set_record(record);
+ if (!this.view.state.records[this.id]) {
+ this.view.state.records[this.id] = {
+ folded: false
+ };
}
+ this.state = this.view.state.records[this.id];
+ },
+ set_record: function(record) {
+ this.id = record.id;
+ this.record = this.transform_record(record);
+ },
+ start: function() {
+ this._super();
+ this.$element.data('widget', this);
+ this.bind_events();
},
- do_transform_record: function(record) {
+ transform_record: function(record) {
var self = this,
new_record = {};
_.each(record, function(value, name) {
- var r = _.clone(self.fields_view.fields[name]);
+ var r = _.clone(self.view.fields_view.fields[name]);
r.raw_value = value;
r.value = openerp.web.format_value(value, r);
new_record[name] = r;
});
return new_record;
},
- do_search: function (domain, context, group_by) {
- var self = this;
- self.group_by = group_by;
- var self = this,
- group_by = self.group_by;
- if (!group_by.length && this.fields_view.arch.attrs.default_group_by) {
- group_by = [this.fields_view.arch.attrs.default_group_by];
- self.group_by = group_by;
+ render: function() {
+ var ctx = {
+ record: this.record,
+ widget: this
}
- self.datagroup = new openerp.web.DataGroup(self, self.model, domain, context, group_by);
- self.datagroup.list(
- _.keys(self.fields_view.fields),
- function (groups) {
- self.dataset.ids = [];
- self.groups = groups;
- if (groups.length) {
- self.do_render_group(groups);
- } else {
- self.all_display_data = [];
- self.on_show_data();
- }
- },
- function (dataset) {
- self.groups = [];
- self.dataset.read_slice(_.keys(self.fields_view.fields), {}, function(records) {
- if (records.length) {
- self.all_display_data = [{'records': records, 'value':false, 'header' : false, 'ids': self.dataset.ids}];
- } else {
- self.all_display_data = [];
- }
- self.$element.find(".oe_kanban_view").remove();
- self.on_show_data();
- });
+ for (var p in this) {
+ if (_.startsWith(p, 'kanban_')) {
+ ctx[p] = _.bind(this[p], this);
}
- );
+ }
+ return this._super({
+ 'content': this.view.qweb.render('kanban-box', ctx)
+ });
},
- do_render_group : function (datagroups) {
- this.all_display_data = [];
+ bind_events: function() {
var self = this,
- remaining = datagroups.length - 1;
- _.each(datagroups, function (group, index) {
- var group_name = group.value;
- var group_value = group.value;
- if (!group.value) {
- group_name = "Undefined";
- group_value = 'false';
- } else if (group.value instanceof Array) {
- group_name = group.value[1];
- group_value = group.value[0];
+ $show_on_click = self.$element.find('.oe_kanban_box_show_onclick');
+ $show_on_click.toggle(this.state.folded);
+ this.$element.find('.oe_kanban_box_show_onclick_trigger').click(function() {
+ $show_on_click.toggle();
+ self.state.folded = !self.state.folded;
+ });
+ this.$element.find('.oe_kanban_action').click(function() {
+ var $action = $(this),
+ type = $action.data('type') || 'button',
+ method = 'do_action_' + type;
+ if (typeof self[method] === 'function') {
+ self[method]($action);
+ } else {
+ self.do_warn("Kanban: no action for type : " + type);
}
- var group_aggregates = {};
- _.each(self.aggregates, function(value, key) {
- group_aggregates[value] = group.aggregates[key];
+ return false;
+ });
+ },
+ do_action_delete: function($action) {
+ var self = this;
+ if (confirm(_t("Are you sure you want to delete this record ?"))) {
+ return $.when(this.view.dataset.unlink([this.id])).then(function() {
+ self.group.remove_record(self.id)
+ self.stop();
});
- var dataset = new openerp.web.DataSetSearch(self, self.dataset.model, group.context, group.domain);
- self.$element.find(".oe_kanban_view").remove();
- dataset.read_slice(_.keys(self.fields_view.fields), {'domain': group.domain, 'context': group.context}, function(records) {
- self.dataset.ids.push.apply(self.dataset.ids, dataset.ids);
- self.all_display_data[index] = {"value" : group_value, "records" : records, 'header' : group_name, 'ids' : dataset.ids, 'aggregates' : group_aggregates};
- if (!remaining--) {
- self.dataset.index = self.dataset.ids.length ? 0 : null;
- self.on_show_data();
- }
+ }
+ },
+ do_action_edit: function($action) {
+ var self = this;
+ if ($action.attr('target') === 'dialog') {
+ this.view.form_dialog.select_id(this.id).then(function() {
+ self.view.form_dialog.open();
});
+ } else {
+ if (self.view.dataset.select_id(this.id)) {
+ this.view.do_switch_view('form');
+ } else {
+ this.do_warn("Kanban: could not find id#" + id);
+ }
+ }
+ },
+ do_action_color: function($action) {
+ var self = this,
+ colors = '#FFFFFF,#CCCCCC,#FFC7C7,#FFF1C7,#E3FFC7,#C7FFD5,#C7FFFF,#C7D5FF,#E3C7FF,#FFC7F1'.split(','),
+ $cpicker = $(QWeb.render('KanbanColorPicker', { colors : colors, columns: 2 }));
+ $action.after($cpicker);
+ $cpicker.mouseenter(function() {
+ clearTimeout($cpicker.data('timeoutId'));
+ }).mouseleave(function(evt) {
+ var timeoutId = setTimeout(function() { $cpicker.remove() }, 500);
+ $cpicker.data('timeoutId', timeoutId);
+ });
+ $cpicker.find('a').click(function() {
+ var data = {};
+ data[$action.data('name')] = $(this).data('color');
+ self.view.dataset.write(self.id, data, {}, function() {
+ self.record[$action.data('name')] = $(this).data('color');
+ self.do_reload();
+ });
+ $cpicker.remove();
+ return false;
});
},
- do_show: function () {
- this.$element.show();
+ do_action_object: function ($action) {
+ var button_attrs = $action.data();
+ this.view.do_execute_action(button_attrs, this.view.dataset, this.id, this.do_reload);
},
- do_hide: function () {
- this.$element.hide();
+ do_reload: function() {
+ var self = this;
+ this.view.dataset.read_ids([this.id], this.view.fields_keys, function(records) {
+ if (records.length) {
+ self.set_record(records[0]);
+ self.do_render();
+ } else {
+ self.stop();
+ }
+ });
+ },
+ do_render: function() {
+ this.$element.html(this.render());
+ this.bind_events();
+ },
+ kanban_color: function(variable) {
+ var number_of_color_schemes = 10,
+ index = 0;
+ switch (typeof(variable)) {
+ case 'string':
+ for (var i=0, ii=variable.length; i<ii; i++) {
+ index += variable.charCodeAt(i);
+ }
+ break;
+ case 'number':
+ index = Math.round(variable);
+ break;
+ default:
+ return '';
+ }
+ var color = (index % number_of_color_schemes);
+ return 'oe_kanban_color_' + color;
+ },
+ kanban_gravatar: function(email, size) {
+ size = size || 22;
+ var email_md5 = $.md5(email);
+ return 'http://www.gravatar.com/avatar/' + email_md5 + '.png?s=' + size;
+ },
+ kanban_image: function(model, field, id) {
+ id = id || '';
+ return '/web/binary/image?session_id=' + this.session.session_id + '&model=' + model + '&field=' + field + '&id=' + id;
+ },
+ kanban_text_ellipsis: function(s, size) {
+ size = size || 160;
+ if (!s) {
+ return '';
+ }
+ return s.substr(0, size) + '...';
}
});
};
diff --git a/addons/web_kanban/static/src/xml/web_kanban.xml b/addons/web_kanban/static/src/xml/web_kanban.xml
index 8281352cc15..c1346a0b90d 100644
--- a/addons/web_kanban/static/src/xml/web_kanban.xml
+++ b/addons/web_kanban/static/src/xml/web_kanban.xml
@@ -1,33 +1,43 @@
<template>
<t t-name="KanbanView">
- <table style="width:100%;" class="oe_kanban_view">
- <tr>
- <td>
- <div class="oe_form_header">
- <button type="button" class="oe_kanban_button_new">New</button>
- </div>
- </td>
- </tr>
- <tr>
- <td t-foreach="data" t-as="columns" class="oe_table_column" t-att-id="'column_' + columns.value">
- <img t-att-id="columns.value" class="fold-columns-icon" src="/web_kanban/static/src/img/minus-icon.png"/>
- <div class="oe_fold_column" t-att-id="'column_' + columns.value">
- <div class="oe_column_heading" t-if="columns.value and columns.header">
- <t t-esc="columns.header"/>
- </div>
- <div t-foreach="columns.aggregates or {}" t-as="aggregate">
- <i><u><t t-esc="aggregate"/>:</u> <t t-esc="aggregate_value"/></i>
+ <div class="oe_kanban_header">
+ <button type="button" class="oe_kanban_button_new">New</button>
+ </div>
+ <div class="oe_kanban_view">
+ <table style="width:100%;" class="oe_kanban_groups">
+ <tr class="oe_kanban_groups_headers">
+ </tr>
+ <tr class="oe_kanban_groups_records">
+ </tr>
+ </table>
+ </div>
+</t>
+<t t-name="KanbanView.group_header">
+ <td class="oe_kanban_group_header">
+ <t t-if="widget.view.group_by">
+ <div class="oe_kanban_fold_icon"></div>
+ <div class="oe_fold_column">
+ <div t-attf-class="oe_kanban_group_title #{widget.undefined_title ? 'oe_kanban_group_title_undefined' : ''}">
+ <t t-esc="widget.title"/>
</div>
+ <ul class="oe_kanban_aggregates">
+ <li t-foreach="widget.aggregates" t-as="aggregate">
+ <span><t t-esc="aggregate"/>:</span> <t t-esc="aggregate_value"/>
+ </li>
+ </ul>
</div>
- </td>
- </tr>
- <tr>
- <td t-foreach="data" t-as="columns" class="oe_column oe_table_column" t-att-id="'column_' + columns.value" t-attf-style="width: #{Math.round(99 / data.length)}%">
- <p t-if="columns.header" class="oe_vertical_text" t-att-id="'column_' + columns.value"><t t-esc="columns.header"/></p>
- <div t-foreach="columns.records" t-as="record" class="oe_fold_column oe_kanban_record" t-att-id="'main_' + record.id"/>
- </td>
- </tr>
- </table>
+ <p t-if="widget.title" class="oe_kanban_group_title_vertical"><t t-esc="widget.title"/></p>
+ </t>
+ </td>
+</t>
+<t t-name="KanbanView.group_records_container">
+ <td class="oe_kanban_column">
+ </td>
+</t>
+<t t-name="KanbanView.record">
+ <div class="oe_fold_column oe_kanban_record">
+ <t t-raw="content"/>
+ </div>
</t>
<t t-name="KanbanColorPicker">
<table cellspacing="0" cellpadding="0" border="0" class="oe_kanban_color_picker">
diff --git a/addons/web_mobile/po/ar.po b/addons/web_mobile/po/ar.po
new file mode 100644
index 00000000000..28e21aa44bf
--- /dev/null
+++ b/addons/web_mobile/po/ar.po
@@ -0,0 +1,66 @@
+# Arabic translation for openerp-web
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the openerp-web package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openerp-web\n"
+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2011-10-07 10:39+0200\n"
+"PO-Revision-Date: 2011-11-03 15:13+0000\n"
+"Last-Translator: kifcaliph <kifcaliph@hotmail.com>\n"
+"Language-Team: Arabic <ar@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2011-11-04 05:32+0000\n"
+"X-Generator: Launchpad (build 14231)\n"
+
+#: addons/web_mobile/static/src/xml/web_mobile.xml:0
+msgid "OpenERP"
+msgstr "OpenERP"
+
+#: addons/web_mobile/static/src/xml/web_mobile.xml:0
+msgid "Database:"
+msgstr "قاعدة البيانات:"
+
+#: addons/web_mobile/static/src/xml/web_mobile.xml:0
+msgid "Login:"
+msgstr "الدخول:"
+
+#: addons/web_mobile/static/src/xml/web_mobile.xml:0
+msgid "Password:"
+msgstr "كلمة المرور:"
+
+#: addons/web_mobile/static/src/xml/web_mobile.xml:0
+msgid "Login"
+msgstr "تسجيل الدخول"
+
+#: addons/web_mobile/static/src/xml/web_mobile.xml:0
+msgid "Bad username or password"
+msgstr "اسم مستخدم او كلمة مرور خاطئة"
+
+#: addons/web_mobile/static/src/xml/web_mobile.xml:0
+msgid "Favourite"
+msgstr "مفضّلة"
+
+#: addons/web_mobile/static/src/xml/web_mobile.xml:0
+msgid "Preference"
+msgstr "التفضيلات"
+
+#: addons/web_mobile/static/src/xml/web_mobile.xml:0
+msgid "Applications"
+msgstr "تطبيقات"
+
+#: addons/web_mobile/static/src/xml/web_mobile.xml:0
+msgid "Options"
+msgstr "خيارات"
+
+#: addons/web_mobile/static/src/xml/web_mobile.xml:0
+msgid "Logout"
+msgstr "تسجيل الخروج"
+
+#: addons/web_mobile/static/src/xml/web_mobile.xml:0
+msgid ":"
+msgstr ":"
diff --git a/addons/web_mobile/po/pl.po b/addons/web_mobile/po/pl.po
new file mode 100644
index 00000000000..d5e04f22e00
--- /dev/null
+++ b/addons/web_mobile/po/pl.po
@@ -0,0 +1,66 @@
+# Polish translation for openerp-web
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the openerp-web package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openerp-web\n"
+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2011-10-07 10:39+0200\n"
+"PO-Revision-Date: 2011-11-04 16:26+0000\n"
+"Last-Translator: Grzegorz Grzelak (OpenGLOBE.pl) <grzegorz@openglobe.pl>\n"
+"Language-Team: Polish <pl@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2011-11-05 06:04+0000\n"
+"X-Generator: Launchpad (build 14231)\n"
+
+#: addons/web_mobile/static/src/xml/web_mobile.xml:0
+msgid "OpenERP"
+msgstr ""
+
+#: addons/web_mobile/static/src/xml/web_mobile.xml:0
+msgid "Database:"
+msgstr "Baza danych:"
+
+#: addons/web_mobile/static/src/xml/web_mobile.xml:0
+msgid "Login:"
+msgstr "Login:"
+
+#: addons/web_mobile/static/src/xml/web_mobile.xml:0
+msgid "Password:"
+msgstr "Hasło:"
+
+#: addons/web_mobile/static/src/xml/web_mobile.xml:0
+msgid "Login"
+msgstr "Login"
+
+#: addons/web_mobile/static/src/xml/web_mobile.xml:0
+msgid "Bad username or password"
+msgstr "Niepoprawna nazwa użytkownika lub hasło"
+
+#: addons/web_mobile/static/src/xml/web_mobile.xml:0
+msgid "Favourite"
+msgstr "Ulubione"
+
+#: addons/web_mobile/static/src/xml/web_mobile.xml:0
+msgid "Preference"
+msgstr "Preferencje"
+
+#: addons/web_mobile/static/src/xml/web_mobile.xml:0
+msgid "Applications"
+msgstr "Aplikacje"
+
+#: addons/web_mobile/static/src/xml/web_mobile.xml:0
+msgid "Options"
+msgstr "Opcje"
+
+#: addons/web_mobile/static/src/xml/web_mobile.xml:0
+msgid "Logout"
+msgstr "Wyloguj"
+
+#: addons/web_mobile/static/src/xml/web_mobile.xml:0
+msgid ":"
+msgstr ""