[MERGE] Merge from openerp-web trunk.
bzr revid: bth@tinyerp.com-20120529053402-4f8navbgt9cfodmo
This commit is contained in:
commit
e383dfc338
|
@ -36,19 +36,6 @@
|
|||
"static/lib/underscore/underscore.string.js",
|
||||
"static/lib/backbone/backbone.js",
|
||||
|
||||
"static/lib/visualsearch/lib/js/visualsearch.js",
|
||||
"static/lib/visualsearch/lib/js/utils/backbone_extensions.js",
|
||||
"static/lib/visualsearch/lib/js/utils/hotkeys.js",
|
||||
"static/lib/visualsearch/lib/js/utils/inflector.js",
|
||||
"static/lib/visualsearch/lib/js/utils/jquery_extensions.js",
|
||||
"static/lib/visualsearch/lib/js/utils/search_parser.js",
|
||||
"static/lib/visualsearch/lib/js/models/search_facets.js",
|
||||
"static/lib/visualsearch/lib/js/models/search_query.js",
|
||||
"static/lib/visualsearch/lib/js/templates/templates.js",
|
||||
"static/lib/visualsearch/lib/js/views/search_facet.js",
|
||||
"static/lib/visualsearch/lib/js/views/search_input.js",
|
||||
"static/lib/visualsearch/lib/js/views/search_box.js",
|
||||
|
||||
"static/lib/labjs/LAB.src.js",
|
||||
"static/lib/py.js/lib/py.js",
|
||||
"static/src/js/boot.js",
|
||||
|
@ -74,9 +61,6 @@
|
|||
"static/lib/jquery.ui.timepicker/css/jquery-ui-timepicker-addon.css",
|
||||
"static/lib/jquery.ui.notify/css/ui.notify.css",
|
||||
"static/lib/jquery.tipsy/tipsy.css",
|
||||
"static/lib/visualsearch/lib/css/reset.css",
|
||||
"static/lib/visualsearch/lib/css/workspace.css",
|
||||
"static/lib/visualsearch/lib/css/icons.css",
|
||||
# "static/src/css/base_old.css",
|
||||
"static/src/css/base.css",
|
||||
"static/src/css/data_export.css",
|
||||
|
|
|
@ -1287,25 +1287,6 @@ class SearchView(View):
|
|||
del filter['domain']
|
||||
return filters
|
||||
|
||||
@openerpweb.jsonrequest
|
||||
def save_filter(self, req, model, name, context_to_save, domain):
|
||||
Model = req.session.model("ir.filters")
|
||||
ctx = common.nonliterals.CompoundContext(context_to_save)
|
||||
ctx.session = req.session
|
||||
ctx = ctx.evaluate()
|
||||
domain = common.nonliterals.CompoundDomain(domain)
|
||||
domain.session = req.session
|
||||
domain = domain.evaluate()
|
||||
uid = req.session._uid
|
||||
context = req.session.eval_context(req.context)
|
||||
to_return = Model.create_or_replace({"context": ctx,
|
||||
"domain": domain,
|
||||
"model_id": model,
|
||||
"name": name,
|
||||
"user_id": uid
|
||||
}, context)
|
||||
return to_return
|
||||
|
||||
@openerpweb.jsonrequest
|
||||
def add_to_dashboard(self, req, menu_id, action_id, context_to_save, domain, view_mode, name=''):
|
||||
ctx = common.nonliterals.CompoundContext(context_to_save)
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-08 05:14+0000\n"
|
||||
"X-Generator: Launchpad (build 15204)\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-15 05:05+0000\n"
|
||||
"X-Generator: Launchpad (build 15238)\n"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/chrome.js:172
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-08 05:15+0000\n"
|
||||
"X-Generator: Launchpad (build 15204)\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-15 05:05+0000\n"
|
||||
"X-Generator: Launchpad (build 15238)\n"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/chrome.js:172
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-08 05:15+0000\n"
|
||||
"X-Generator: Launchpad (build 15204)\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-15 05:05+0000\n"
|
||||
"X-Generator: Launchpad (build 15238)\n"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/chrome.js:172
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-08 05:15+0000\n"
|
||||
"X-Generator: Launchpad (build 15204)\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-15 05:05+0000\n"
|
||||
"X-Generator: Launchpad (build 15238)\n"
|
||||
"X-Poedit-Language: Czech\n"
|
||||
|
||||
#. openerp-web
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-08 05:15+0000\n"
|
||||
"X-Generator: Launchpad (build 15204)\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-15 05:05+0000\n"
|
||||
"X-Generator: Launchpad (build 15238)\n"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/chrome.js:172
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-08 05:15+0000\n"
|
||||
"X-Generator: Launchpad (build 15204)\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-15 05:05+0000\n"
|
||||
"X-Generator: Launchpad (build 15238)\n"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/chrome.js:172
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-08 05:15+0000\n"
|
||||
"X-Generator: Launchpad (build 15204)\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-15 05:06+0000\n"
|
||||
"X-Generator: Launchpad (build 15238)\n"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/chrome.js:172
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-08 05:15+0000\n"
|
||||
"X-Generator: Launchpad (build 15204)\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-15 05:06+0000\n"
|
||||
"X-Generator: Launchpad (build 15238)\n"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/chrome.js:172
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-08 05:15+0000\n"
|
||||
"X-Generator: Launchpad (build 15204)\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-15 05:06+0000\n"
|
||||
"X-Generator: Launchpad (build 15238)\n"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/chrome.js:172
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-08 05:15+0000\n"
|
||||
"X-Generator: Launchpad (build 15204)\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-15 05:06+0000\n"
|
||||
"X-Generator: Launchpad (build 15238)\n"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/chrome.js:172
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-08 05:15+0000\n"
|
||||
"X-Generator: Launchpad (build 15204)\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-15 05:06+0000\n"
|
||||
"X-Generator: Launchpad (build 15238)\n"
|
||||
"Language: es\n"
|
||||
|
||||
#. openerp-web
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-08 05:15+0000\n"
|
||||
"X-Generator: Launchpad (build 15204)\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-15 05:06+0000\n"
|
||||
"X-Generator: Launchpad (build 15238)\n"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/chrome.js:172
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-08 05:15+0000\n"
|
||||
"X-Generator: Launchpad (build 15204)\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-15 05:05+0000\n"
|
||||
"X-Generator: Launchpad (build 15238)\n"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/chrome.js:172
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-08 05:14+0000\n"
|
||||
"X-Generator: Launchpad (build 15204)\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-15 05:05+0000\n"
|
||||
"X-Generator: Launchpad (build 15238)\n"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/chrome.js:172
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-08 05:15+0000\n"
|
||||
"X-Generator: Launchpad (build 15204)\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-15 05:05+0000\n"
|
||||
"X-Generator: Launchpad (build 15238)\n"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/chrome.js:172
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-08 05:15+0000\n"
|
||||
"X-Generator: Launchpad (build 15204)\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-15 05:05+0000\n"
|
||||
"X-Generator: Launchpad (build 15238)\n"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/chrome.js:172
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-08 05:15+0000\n"
|
||||
"X-Generator: Launchpad (build 15204)\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-15 05:05+0000\n"
|
||||
"X-Generator: Launchpad (build 15238)\n"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/chrome.js:172
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-08 05:15+0000\n"
|
||||
"X-Generator: Launchpad (build 15204)\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-15 05:05+0000\n"
|
||||
"X-Generator: Launchpad (build 15238)\n"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/chrome.js:172
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-08 05:15+0000\n"
|
||||
"X-Generator: Launchpad (build 15204)\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-15 05:06+0000\n"
|
||||
"X-Generator: Launchpad (build 15238)\n"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/chrome.js:172
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-08 05:15+0000\n"
|
||||
"X-Generator: Launchpad (build 15204)\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-15 05:05+0000\n"
|
||||
"X-Generator: Launchpad (build 15238)\n"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/chrome.js:172
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-08 05:15+0000\n"
|
||||
"X-Generator: Launchpad (build 15204)\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-15 05:06+0000\n"
|
||||
"X-Generator: Launchpad (build 15238)\n"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/chrome.js:172
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-08 05:15+0000\n"
|
||||
"X-Generator: Launchpad (build 15204)\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-15 05:06+0000\n"
|
||||
"X-Generator: Launchpad (build 15238)\n"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/chrome.js:172
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-08 05:15+0000\n"
|
||||
"X-Generator: Launchpad (build 15204)\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-15 05:05+0000\n"
|
||||
"X-Generator: Launchpad (build 15238)\n"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/chrome.js:172
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-08 05:15+0000\n"
|
||||
"X-Generator: Launchpad (build 15204)\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-15 05:06+0000\n"
|
||||
"X-Generator: Launchpad (build 15238)\n"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/chrome.js:172
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-08 05:15+0000\n"
|
||||
"X-Generator: Launchpad (build 15204)\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-15 05:06+0000\n"
|
||||
"X-Generator: Launchpad (build 15238)\n"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/chrome.js:172
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-08 05:15+0000\n"
|
||||
"X-Generator: Launchpad (build 15204)\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-15 05:06+0000\n"
|
||||
"X-Generator: Launchpad (build 15238)\n"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/chrome.js:172
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-08 05:15+0000\n"
|
||||
"X-Generator: Launchpad (build 15204)\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-15 05:05+0000\n"
|
||||
"X-Generator: Launchpad (build 15238)\n"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/chrome.js:172
|
||||
|
|
|
@ -8,14 +8,14 @@ msgstr ""
|
|||
"Project-Id-Version: openerp-web\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-02-14 15:27+0100\n"
|
||||
"PO-Revision-Date: 2011-10-07 12:50+0000\n"
|
||||
"Last-Translator: Niels Huylebroeck <Unknown>\n"
|
||||
"PO-Revision-Date: 2012-05-15 14:32+0000\n"
|
||||
"Last-Translator: Els Van Vossel (Agaplan) <Unknown>\n"
|
||||
"Language-Team: Dutch (Belgium) <nl_BE@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: 2012-05-08 05:15+0000\n"
|
||||
"X-Generator: Launchpad (build 15204)\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-16 05:10+0000\n"
|
||||
"X-Generator: Launchpad (build 15247)\n"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/chrome.js:172
|
||||
|
@ -27,60 +27,60 @@ msgstr ""
|
|||
#: addons/web/static/src/js/view_form.js:424
|
||||
#: addons/web/static/src/js/view_form.js:1239
|
||||
msgid "Ok"
|
||||
msgstr "Ok"
|
||||
msgstr "OK"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/chrome.js:180
|
||||
msgid "Send OpenERP Enterprise Report"
|
||||
msgstr ""
|
||||
msgstr "OpenERP-Entrepriserapport versturen"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/chrome.js:194
|
||||
msgid "Dont send"
|
||||
msgstr ""
|
||||
msgstr "Niet versturen"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/chrome.js:256
|
||||
#, python-format
|
||||
msgid "Loading (%d)"
|
||||
msgstr ""
|
||||
msgstr "Laden (%d)"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/chrome.js:288
|
||||
msgid "Invalid database name"
|
||||
msgstr ""
|
||||
msgstr "Ongeldige databasenaam"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/chrome.js:483
|
||||
msgid "Backed"
|
||||
msgstr ""
|
||||
msgstr "Back-up klaar"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/chrome.js:484
|
||||
msgid "Database backed up successfully"
|
||||
msgstr ""
|
||||
msgstr "Databaseback-up geslaagd"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/chrome.js:527
|
||||
msgid "Restored"
|
||||
msgstr ""
|
||||
msgstr "Teruggezet"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/chrome.js:527
|
||||
msgid "Database restored successfully"
|
||||
msgstr ""
|
||||
msgstr "Database met succes teruggezet"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/chrome.js:708
|
||||
#: addons/web/static/src/xml/base.xml:359
|
||||
msgid "About"
|
||||
msgstr ""
|
||||
msgstr "Info"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/chrome.js:787
|
||||
#: addons/web/static/src/xml/base.xml:356
|
||||
msgid "Preferences"
|
||||
msgstr ""
|
||||
msgstr "Voorkeuren"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/chrome.js:790
|
||||
|
@ -102,7 +102,7 @@ msgstr "Annuleren"
|
|||
#. openerp-web
|
||||
#: addons/web/static/src/js/chrome.js:791
|
||||
msgid "Change password"
|
||||
msgstr ""
|
||||
msgstr "Wachtwoord wijzigen"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/chrome.js:792
|
||||
|
@ -119,24 +119,24 @@ msgstr "Opslaan"
|
|||
#: addons/web/static/src/xml/base.xml:226
|
||||
#: addons/web/static/src/xml/base.xml:1729
|
||||
msgid "Change Password"
|
||||
msgstr ""
|
||||
msgstr "Wachtwoord wijzigen"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/chrome.js:1096
|
||||
#: addons/web/static/src/js/chrome.js:1100
|
||||
msgid "OpenERP - Unsupported/Community Version"
|
||||
msgstr ""
|
||||
msgstr "OpenERP - Niet-ondersteunde/Communityversie"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/chrome.js:1131
|
||||
#: addons/web/static/src/js/chrome.js:1135
|
||||
msgid "Client Error"
|
||||
msgstr ""
|
||||
msgstr "Clientfout"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/data_export.js:6
|
||||
msgid "Export Data"
|
||||
msgstr ""
|
||||
msgstr "Gegevens exporteren"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/data_export.js:19
|
||||
|
@ -154,37 +154,37 @@ msgstr "Sluiten"
|
|||
#. openerp-web
|
||||
#: addons/web/static/src/js/data_export.js:20
|
||||
msgid "Export To File"
|
||||
msgstr ""
|
||||
msgstr "Naar bestand exporteren"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/data_export.js:125
|
||||
msgid "Please enter save field list name"
|
||||
msgstr ""
|
||||
msgstr "Geef eerst de naam van de lijst"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/data_export.js:360
|
||||
msgid "Please select fields to save export list..."
|
||||
msgstr ""
|
||||
msgstr "Kies velden voor de lijst"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/data_export.js:373
|
||||
msgid "Please select fields to export..."
|
||||
msgstr ""
|
||||
msgstr "Kies te exporteren velden"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/data_import.js:34
|
||||
msgid "Import Data"
|
||||
msgstr ""
|
||||
msgstr "Gegevens importeren"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/data_import.js:70
|
||||
msgid "Import File"
|
||||
msgstr ""
|
||||
msgstr "Bestand importeren"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/data_import.js:105
|
||||
msgid "External ID"
|
||||
msgstr ""
|
||||
msgstr "Externe id"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/formats.js:300
|
||||
|
@ -192,14 +192,14 @@ msgstr ""
|
|||
#: addons/web/static/src/js/formats.js:322
|
||||
#: addons/web/static/src/js/view_page.js:251
|
||||
msgid "Download"
|
||||
msgstr ""
|
||||
msgstr "Downloaden"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/formats.js:305
|
||||
#: addons/web/static/src/js/formats.js:327
|
||||
#, python-format
|
||||
msgid "Download \"%s\""
|
||||
msgstr ""
|
||||
msgstr "Download \"%s\""
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/search.js:191
|
||||
|
@ -216,70 +216,70 @@ msgstr ""
|
|||
#: addons/web/static/src/js/search.js:291
|
||||
#: addons/web/static/src/js/search.js:296
|
||||
msgid "OK"
|
||||
msgstr ""
|
||||
msgstr "OK"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/search.js:286
|
||||
#: addons/web/static/src/xml/base.xml:1292
|
||||
#: addons/web/static/src/js/search.js:291
|
||||
msgid "Add to Dashboard"
|
||||
msgstr ""
|
||||
msgstr "Aan dashboard toevoegen"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/search.js:415
|
||||
#: addons/web/static/src/js/search.js:420
|
||||
msgid "Invalid Search"
|
||||
msgstr ""
|
||||
msgstr "Ongeldige zoekopdracht"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/search.js:415
|
||||
#: addons/web/static/src/js/search.js:420
|
||||
msgid "triggered from search view"
|
||||
msgstr ""
|
||||
msgstr "geactiveerd door zoekweergave"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/search.js:503
|
||||
#: addons/web/static/src/js/search.js:508
|
||||
#, python-format
|
||||
msgid "Incorrect value for field %(fieldname)s: [%(value)s] is %(message)s"
|
||||
msgstr ""
|
||||
msgstr "Onjuiste waarde voor veld %(fieldname)s: [%(value)s] is %(message)s"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/search.js:839
|
||||
#: addons/web/static/src/js/search.js:844
|
||||
msgid "not a valid integer"
|
||||
msgstr ""
|
||||
msgstr "geen geldig geheel getal"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/search.js:853
|
||||
#: addons/web/static/src/js/search.js:858
|
||||
msgid "not a valid number"
|
||||
msgstr ""
|
||||
msgstr "geen geldig getal"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/search.js:931
|
||||
#: addons/web/static/src/xml/base.xml:968
|
||||
#: addons/web/static/src/js/search.js:936
|
||||
msgid "Yes"
|
||||
msgstr ""
|
||||
msgstr "Ja"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/search.js:932
|
||||
#: addons/web/static/src/js/search.js:937
|
||||
msgid "No"
|
||||
msgstr ""
|
||||
msgstr "Nee"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/search.js:1290
|
||||
#: addons/web/static/src/js/search.js:1295
|
||||
msgid "contains"
|
||||
msgstr ""
|
||||
msgstr "bevat"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/search.js:1291
|
||||
#: addons/web/static/src/js/search.js:1296
|
||||
msgid "doesn't contain"
|
||||
msgstr ""
|
||||
msgstr "bevat niet"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/search.js:1292
|
||||
|
@ -293,7 +293,7 @@ msgstr ""
|
|||
#: addons/web/static/src/js/search.js:1349
|
||||
#: addons/web/static/src/js/search.js:1370
|
||||
msgid "is equal to"
|
||||
msgstr ""
|
||||
msgstr "is gelijk aan"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/search.js:1293
|
||||
|
@ -307,7 +307,7 @@ msgstr ""
|
|||
#: addons/web/static/src/js/search.js:1350
|
||||
#: addons/web/static/src/js/search.js:1371
|
||||
msgid "is not equal to"
|
||||
msgstr ""
|
||||
msgstr "is niet gelijk aan"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/search.js:1294
|
||||
|
@ -321,7 +321,7 @@ msgstr ""
|
|||
#: addons/web/static/src/js/search.js:1351
|
||||
#: addons/web/static/src/js/search.js:1372
|
||||
msgid "greater than"
|
||||
msgstr ""
|
||||
msgstr "is groter dan"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/search.js:1295
|
||||
|
@ -335,7 +335,7 @@ msgstr ""
|
|||
#: addons/web/static/src/js/search.js:1352
|
||||
#: addons/web/static/src/js/search.js:1373
|
||||
msgid "less than"
|
||||
msgstr ""
|
||||
msgstr "is kleiner dan"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/search.js:1296
|
||||
|
@ -349,7 +349,7 @@ msgstr ""
|
|||
#: addons/web/static/src/js/search.js:1353
|
||||
#: addons/web/static/src/js/search.js:1374
|
||||
msgid "greater or equal than"
|
||||
msgstr ""
|
||||
msgstr "is groter of gelijk aan"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/search.js:1297
|
||||
|
@ -363,7 +363,7 @@ msgstr ""
|
|||
#: addons/web/static/src/js/search.js:1354
|
||||
#: addons/web/static/src/js/search.js:1375
|
||||
msgid "less or equal than"
|
||||
msgstr ""
|
||||
msgstr "is kleiner dan of gelijk aan"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/search.js:1360
|
||||
|
@ -371,31 +371,31 @@ msgstr ""
|
|||
#: addons/web/static/src/js/search.js:1365
|
||||
#: addons/web/static/src/js/search.js:1388
|
||||
msgid "is"
|
||||
msgstr ""
|
||||
msgstr "is gelijk aan"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/search.js:1384
|
||||
#: addons/web/static/src/js/search.js:1389
|
||||
msgid "is not"
|
||||
msgstr ""
|
||||
msgstr "is niet gelijk aan"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/search.js:1396
|
||||
#: addons/web/static/src/js/search.js:1401
|
||||
msgid "is true"
|
||||
msgstr ""
|
||||
msgstr "is waar"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/search.js:1397
|
||||
#: addons/web/static/src/js/search.js:1402
|
||||
msgid "is false"
|
||||
msgstr ""
|
||||
msgstr "is onwaar"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/view_editor.js:20
|
||||
#, python-format
|
||||
msgid "Manage Views (%s)"
|
||||
msgstr ""
|
||||
msgstr "Weergaven beheren (%s)"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/view_editor.js:46
|
||||
|
@ -411,7 +411,7 @@ msgstr "Creër"
|
|||
#: addons/web/static/src/xml/base.xml:483
|
||||
#: addons/web/static/src/xml/base.xml:755
|
||||
msgid "Edit"
|
||||
msgstr ""
|
||||
msgstr "Bewerken"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/view_editor.js:48
|
||||
|
@ -423,18 +423,18 @@ msgstr "Verwijderen"
|
|||
#: addons/web/static/src/js/view_editor.js:71
|
||||
#, python-format
|
||||
msgid "Create a view (%s)"
|
||||
msgstr ""
|
||||
msgstr "Een weergave maken (%s)"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/view_editor.js:168
|
||||
msgid "Do you really want to remove this view?"
|
||||
msgstr ""
|
||||
msgstr "Wilt u deze weergave echt verwijderen?"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/view_editor.js:364
|
||||
#, python-format
|
||||
msgid "View Editor %d - %s"
|
||||
msgstr ""
|
||||
msgstr "Bekijk editor %d - %s"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/view_editor.js:367
|
||||
|
@ -449,7 +449,7 @@ msgstr ""
|
|||
#. openerp-web
|
||||
#: addons/web/static/src/js/view_editor.js:381
|
||||
msgid "Preview"
|
||||
msgstr ""
|
||||
msgstr "Voorbeeld"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/view_editor.js:501
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-08 05:15+0000\n"
|
||||
"X-Generator: Launchpad (build 15204)\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-15 05:06+0000\n"
|
||||
"X-Generator: Launchpad (build 15238)\n"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/chrome.js:172
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-08 05:15+0000\n"
|
||||
"X-Generator: Launchpad (build 15204)\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-15 05:06+0000\n"
|
||||
"X-Generator: Launchpad (build 15238)\n"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/chrome.js:172
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-08 05:15+0000\n"
|
||||
"X-Generator: Launchpad (build 15204)\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-15 05:06+0000\n"
|
||||
"X-Generator: Launchpad (build 15238)\n"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/chrome.js:172
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-08 05:15+0000\n"
|
||||
"X-Generator: Launchpad (build 15204)\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-15 05:06+0000\n"
|
||||
"X-Generator: Launchpad (build 15238)\n"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/chrome.js:172
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-08 05:15+0000\n"
|
||||
"X-Generator: Launchpad (build 15204)\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-15 05:06+0000\n"
|
||||
"X-Generator: Launchpad (build 15238)\n"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/chrome.js:172
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-08 05:15+0000\n"
|
||||
"X-Generator: Launchpad (build 15204)\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-15 05:06+0000\n"
|
||||
"X-Generator: Launchpad (build 15238)\n"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/chrome.js:172
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-08 05:15+0000\n"
|
||||
"X-Generator: Launchpad (build 15204)\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-15 05:06+0000\n"
|
||||
"X-Generator: Launchpad (build 15238)\n"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/chrome.js:172
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-08 05:14+0000\n"
|
||||
"X-Generator: Launchpad (build 15204)\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-15 05:05+0000\n"
|
||||
"X-Generator: Launchpad (build 15238)\n"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/chrome.js:172
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-08 05:15+0000\n"
|
||||
"X-Generator: Launchpad (build 15204)\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-15 05:06+0000\n"
|
||||
"X-Generator: Launchpad (build 15238)\n"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/chrome.js:172
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-08 05:15+0000\n"
|
||||
"X-Generator: Launchpad (build 15204)\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-15 05:06+0000\n"
|
||||
"X-Generator: Launchpad (build 15238)\n"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/chrome.js:172
|
||||
|
@ -235,7 +235,7 @@ msgstr "Felaktig sökning"
|
|||
#: addons/web/static/src/js/search.js:415
|
||||
#: addons/web/static/src/js/search.js:420
|
||||
msgid "triggered from search view"
|
||||
msgstr ""
|
||||
msgstr "aktiverad från sökvyn"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/search.js:503
|
||||
|
@ -590,7 +590,7 @@ msgstr "Skapa: "
|
|||
#: addons/web/static/src/xml/base.xml:1646
|
||||
#: addons/web/static/src/js/view_form.js:2680
|
||||
msgid "Add"
|
||||
msgstr "Tillägg"
|
||||
msgstr "Lägg till"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/view_form.js:2721
|
||||
|
@ -653,7 +653,7 @@ msgstr "Träd"
|
|||
#: addons/web/static/src/js/views.js:565
|
||||
#: addons/web/static/src/xml/base.xml:480
|
||||
msgid "Fields View Get"
|
||||
msgstr ""
|
||||
msgstr "Fält för visningsvy"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/views.js:573
|
||||
|
@ -676,7 +676,7 @@ msgstr "Hantera vyer"
|
|||
#. openerp-web
|
||||
#: addons/web/static/src/js/views.js:611
|
||||
msgid "Could not find current view declaration"
|
||||
msgstr ""
|
||||
msgstr "Aktuell visningsvydeklaration saknas"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/views.js:805
|
||||
|
@ -686,7 +686,7 @@ msgstr "Översätt"
|
|||
#. openerp-web
|
||||
#: addons/web/static/src/js/views.js:807
|
||||
msgid "Technical translation"
|
||||
msgstr ""
|
||||
msgstr "Teknisk översättning"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/views.js:811
|
||||
|
@ -1350,6 +1350,10 @@ msgid ""
|
|||
" You can export all data or only the fields that can be "
|
||||
"reimported after modification."
|
||||
msgstr ""
|
||||
"Den här guiden kommer att exportera alla data som matchar de aktuella "
|
||||
"sökkriterierna till en CSV-fil.\n"
|
||||
" Du kan exportera alla data eller endast de fält som kan "
|
||||
"återimporteras efter modifiering."
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/xml/base.xml:1618
|
||||
|
@ -1432,6 +1436,9 @@ 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 ""
|
||||
"Välj en CSV-fil som ska importeras. Om du behöver ett prov av filen för att "
|
||||
"importera,\n"
|
||||
" kan du först exportera en, ange då \"Importkompatibel\"-alternativet."
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/xml/base.xml:1747
|
||||
|
@ -1489,6 +1496,7 @@ msgid ""
|
|||
"For use if CSV files have titles on multiple lines, skips more than a single "
|
||||
"line during import"
|
||||
msgstr ""
|
||||
"Använd då CSV-filer flera titelrader som skall hoppas över vid import"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/xml/base.xml:1803
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-08 05:15+0000\n"
|
||||
"X-Generator: Launchpad (build 15204)\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-15 05:06+0000\n"
|
||||
"X-Generator: Launchpad (build 15238)\n"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/chrome.js:172
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-08 05:15+0000\n"
|
||||
"X-Generator: Launchpad (build 15204)\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-15 05:06+0000\n"
|
||||
"X-Generator: Launchpad (build 15238)\n"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/chrome.js:172
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-08 05:15+0000\n"
|
||||
"X-Generator: Launchpad (build 15204)\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-15 05:06+0000\n"
|
||||
"X-Generator: Launchpad (build 15238)\n"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/chrome.js:172
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-08 05:15+0000\n"
|
||||
"X-Generator: Launchpad (build 15204)\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-15 05:06+0000\n"
|
||||
"X-Generator: Launchpad (build 15238)\n"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web/static/src/js/chrome.js:172
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
// TODO: t-set + t-value + children node == scoped variable ?
|
||||
var QWeb2 = {
|
||||
expressions_cache: {},
|
||||
RESERVED_WORDS: 'true,false,NaN,null,undefined,debugger,console,in,instanceof,new,function,return,this,typeof,eval,Math,RegExp,Array,Object,Date'.split(','),
|
||||
RESERVED_WORDS: 'true,false,NaN,null,undefined,debugger,console,in,instanceof,new,function,return,this,typeof,eval,void,Math,RegExp,Array,Object,Date'.split(','),
|
||||
ACTIONS_PRECEDENCE: 'foreach,if,call,set,esc,escf,raw,rawf,js,debug,log'.split(','),
|
||||
WORD_REPLACEMENT: {
|
||||
'and': '&&',
|
||||
|
|
|
@ -1,22 +0,0 @@
|
|||
Copyright (c) 2011 Samuel Clay, @samuelclay, DocumentCloud
|
||||
|
||||
Permission is hereby granted, free of charge, to any person
|
||||
obtaining a copy of this software and associated documentation
|
||||
files (the "Software"), to deal in the Software without
|
||||
restriction, including without limitation the rights to use,
|
||||
copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following
|
||||
conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
OTHER DEALINGS IN THE SOFTWARE.
|
|
@ -1,16 +0,0 @@
|
|||
__ ___ _ _____ _ _
|
||||
\ \ / (_) | |/ ____| | | (_)
|
||||
\ \ / / _ ___ _ _ __ _| | (___ ___ __ _ _ __ ___| |__ _ ___
|
||||
\ \/ / | / __| | | |/ _` | |\___ \ / _ \/ _` | '__/ __| '_ \ | / __|
|
||||
\ / | \__ \ |_| | (_| | |____) | __/ (_| | | | (__| | | |_| \__ \
|
||||
\/ |_|___/\__,_|\__,_|_|_____/ \___|\__,_|_| \___|_| |_(_) |___/
|
||||
_/ |
|
||||
|__/
|
||||
|
||||
VisualSearch.js enhances ordinary search boxes with the ability to autocomplete
|
||||
faceted search queries. Specify the facets for completion, along with the
|
||||
completable values for any facet. You can retrieve the search query as a
|
||||
structured object, so you don't have to parse the query string yourself.
|
||||
|
||||
For documentation, pre-packed downloads, demos, and tests, see:
|
||||
http://documentcloud.github.com/visualsearch
|
|
@ -1,37 +0,0 @@
|
|||
require 'rubygems'
|
||||
require 'jammit'
|
||||
require 'fileutils'
|
||||
|
||||
desc "Use Jammit to compile the multiple versions of Visual Search"
|
||||
task :build do
|
||||
$VS_MIN = false
|
||||
Jammit.package!({
|
||||
:config_path => "assets.yml",
|
||||
:output_folder => "build"
|
||||
})
|
||||
|
||||
$VS_MIN = true
|
||||
Jammit.package!({
|
||||
:config_path => "assets.yml",
|
||||
:output_folder => "build-min"
|
||||
})
|
||||
|
||||
# Move the JSTs back to lib to accomodate the demo page.
|
||||
FileUtils.mv("build/visualsearch_templates.js", "lib/js/templates/templates.js")
|
||||
|
||||
# Fix image url paths.
|
||||
['build', 'build-min'].each do |build|
|
||||
File.open("#{build}/visualsearch.css", 'r+') do |file|
|
||||
css = file.read
|
||||
css.gsub!(/url\((.*?)images\/embed\/icons/, 'url(../images/embed/icons')
|
||||
file.rewind
|
||||
file.write(css)
|
||||
file.truncate(css.length)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
desc "Build the docco documentation"
|
||||
task :docs do
|
||||
sh "docco lib/js/*.js lib/js/**/*.js"
|
||||
end
|
|
@ -1,28 +0,0 @@
|
|||
embed_assets: datauri
|
||||
javascript_compressor: closure
|
||||
template_function: _.template
|
||||
gzip_assets: <% if $VS_MIN %>on<% else %>off<% end %>
|
||||
compress_assets: <% if $VS_MIN %>on<% else %>off<% end %>
|
||||
|
||||
javascripts:
|
||||
dependencies:
|
||||
- vendor/jquery-*.js
|
||||
- vendor/jquery.ui.core.js
|
||||
- vendor/jquery.ui.widget.js
|
||||
- vendor/jquery.ui.position.js
|
||||
- vendor/jquery.ui.*.js
|
||||
- vendor/underscore-*.js
|
||||
- vendor/backbone-*.js
|
||||
visualsearch:
|
||||
- lib/js/visualsearch.js
|
||||
- lib/js/views/*.js
|
||||
- lib/js/utils/*.js
|
||||
- lib/js/models/*.js
|
||||
- lib/js/templates/*.jst
|
||||
<% unless $VS_MIN %>visualsearch_templates:
|
||||
- lib/js/templates/*.jst
|
||||
<% end %>
|
||||
|
||||
stylesheets:
|
||||
visualsearch:
|
||||
- lib/css/*.css
|
|
@ -1,310 +0,0 @@
|
|||
.VS-search .VS-icon {
|
||||
background-repeat: no-repeat;
|
||||
background-position: center center;
|
||||
vertical-align: middle;
|
||||
width: 16px; height: 16px;
|
||||
}
|
||||
.VS-search .VS-icon-cancel {
|
||||
width: 11px; height: 11px;
|
||||
background-position: center 0;
|
||||
background-image: url("data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAAWCAYAAAAW5GZjAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAb9JREFUeNqUUr1qAkEQ3j0khQp6kihaeGgEEa18gTQR0iRY+BaBSMDGwidIEUKqFL6BopgqBAJ5AMFGjUU0d4WHEvwJarvZ77gRIzGYgb1hZr+Z75vZ40IIzqTNZrPj8Xicn0wmmcViEXS73aaqqq+BQODG6/W+A8MBNk3zfDAY3C6Xy0O2ZS6X6zMSiVwHg8FHLjtq7Xb7RQKj7BeTzVCgJ5PJU2U0GhUk7REuMpkMi8fjFggeMeecrVYrFRId0CgTAgDDMFg4HLbA8IjJgHNgGEr0er0fQIphUmZAwdSUADUB4RFDsz3oSMF6CLzZkQqgGebz+Z75dDqNdTqdp13bgDmdTj2VSp0oWHg0Gr2UNH2Z/9o+yMv7K4/HY/C/XhDUfr//jl7QQVT9fp/V63VWqVRYt9tliUSCZbPZg1wux9Lp9PqFeK1Wu9A0DdXz7YM87i0FrVZLs4Fi1wmFQh/NZjOmVKvVgq7rR/QflMtlixGedjwcDlUpMQ9tbzalkAAB2/R297mNW+sT2wUbUnA//V/nYrH4QOBNABUQuFQq3TNMuc82sDVrz41G42yvPeODAwZQ0QzwiJEnzLcAAwBJ6WXlwoBgZAAAAABJRU5ErkJggg==");
|
||||
cursor: pointer;
|
||||
}
|
||||
.VS-search .VS-icon-cancel:hover {
|
||||
background-position: center -11px;
|
||||
}
|
||||
.VS-search .VS-icon-search {
|
||||
width: 12px; height: 12px;
|
||||
background-image: url("data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAUZJREFUeNpUUM2qgmAQzS8NiUgLzTIXLZQW1QuI9AY9QPSW9gQ9QiriwpJQEBVrVWT2d7p2L9xZzDdzZs7M+YYqy/J8Ptu2vd/v4zgeDAaqqk4mE47jar9GnU6nzWbjOA5FUa/Xq0Jns9l8Pud5vkpp58cwAOzhcBhFkeu6GNztdg3D+Db5vo9nOp2iiWGYTqdDCMFe4LquI0aVpGmKR9M0lmUbjQY8YiBJklTb4YkoilBzOBzq9TogeMQIJEmqmlAlo9EIyXa7tSyrKAp4xEBkWUb5q2k8Hh+PR8/zwjCEgufz+aESstvtoKnVan2GgY31kBkEAfT1ej1FUZDiNIIgrFYr9H1ug3teLpfH43G/3/FBUJGu1+s8z8FZLpc0mmiabrfbf5fEumazuVgsTNO8Xq+3242qRNT+G0CMz7IMzH6//xZgAA60tj6rqzxpAAAAAElFTkSuQmCC");
|
||||
}
|
||||
|
||||
/*------------------------------ RESET + DEFAULT STYLES ---------------------------------*/
|
||||
|
||||
/*
|
||||
Eric Meyer's final reset.css
|
||||
Source: http://meyerweb.com/eric/thoughts/2007/05/01/reset-reloaded/
|
||||
*/
|
||||
.VS-search div, .VS-search span, .VS-search a, .VS-search img,
|
||||
.VS-search ul, .VS-search li, .VS-search form, .VS-search label,
|
||||
.VS-interface ul, .VS-interface li, .VS-interface {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
border: 0;
|
||||
outline: 0;
|
||||
font-weight: inherit;
|
||||
font-style: inherit;
|
||||
font-size: 100%;
|
||||
font-family: inherit;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
.VS-search :focus {
|
||||
outline: 0;
|
||||
}
|
||||
.VS-search {
|
||||
line-height: 1;
|
||||
color: black;
|
||||
}
|
||||
.VS-search ol, .VS-search ul {
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
/* ===================== */
|
||||
/* = General and Reset = */
|
||||
/* ===================== */
|
||||
|
||||
.VS-search {
|
||||
font-family: Arial, sans-serif;
|
||||
color: #373737;
|
||||
font-size: 12px;
|
||||
}
|
||||
.VS-search input {
|
||||
display: block;
|
||||
border: none;
|
||||
-moz-box-shadow: none;
|
||||
-webkit-box-shadow: none;
|
||||
box-shadow: none;
|
||||
outline: none;
|
||||
margin: 0; padding: 4px;
|
||||
background: transparent;
|
||||
font-size: 16px;
|
||||
line-height: 20px;
|
||||
width: 100%;
|
||||
}
|
||||
.VS-interface, .VS-search .dialog, .VS-search input {
|
||||
font-family: "Lucida Grande", "Lucida Sans Unicode", Helvetica, Arial, sans-serif !important;
|
||||
line-height: 1.1em;
|
||||
}
|
||||
|
||||
/* ========== */
|
||||
/* = Layout = */
|
||||
/* ========== */
|
||||
|
||||
.VS-search .VS-search-box {
|
||||
cursor: text;
|
||||
position: relative;
|
||||
background: transparent;
|
||||
border: 2px solid #ccc;
|
||||
border-radius: 16px; -webkit-border-radius: 16px; -moz-border-radius: 16px;
|
||||
background-color: #fafafa;
|
||||
-webkit-box-shadow: inset 0px 0px 3px #ccc;
|
||||
-moz-box-shadow: inset 0px 0px 3px #ccc;
|
||||
box-shadow: inset 0px 0px 3px #ccc;
|
||||
min-height: 28px;
|
||||
height: auto;
|
||||
}
|
||||
.VS-search .VS-search-box.VS-focus {
|
||||
border-color: #acf;
|
||||
-webkit-box-shadow: inset 0px 0px 3px #acf;
|
||||
-moz-box-shadow: inset 0px 0px 3px #acf;
|
||||
box-shadow: inset 0px 0px 3px #acf;
|
||||
}
|
||||
.VS-search .VS-search-inner {
|
||||
position: relative;
|
||||
margin: 0 20px 0 22px;
|
||||
overflow: hidden;
|
||||
}
|
||||
.VS-search input {
|
||||
width: 100px;
|
||||
}
|
||||
.VS-search input,
|
||||
.VS-search .VS-input-width-tester {
|
||||
padding: 6px 0;
|
||||
float: left;
|
||||
color: #808080;
|
||||
font: 13px/17px Helvetica, Arial;
|
||||
}
|
||||
.VS-search.VS-focus input {
|
||||
color: #606060;
|
||||
}
|
||||
.VS-search .VS-icon-search {
|
||||
position: absolute;
|
||||
left: 9px; top: 8px;
|
||||
}
|
||||
.VS-search .VS-icon-cancel {
|
||||
position: absolute;
|
||||
right: 9px; top: 8px;
|
||||
}
|
||||
|
||||
/* ================ */
|
||||
/* = Search Facet = */
|
||||
/* ================ */
|
||||
|
||||
.VS-search .search_facet {
|
||||
float: left;
|
||||
margin: 0;
|
||||
padding: 0 0 0 14px;
|
||||
position: relative;
|
||||
border: 1px solid transparent;
|
||||
height: 20px;
|
||||
margin: 3px -3px 3px 0;
|
||||
}
|
||||
.VS-search .search_facet.is_selected {
|
||||
margin-left: -3px;
|
||||
-webkit-border-radius: 16px;
|
||||
-moz-border-radius: 16px;
|
||||
border-radius: 16px;
|
||||
background-color: #d2e6fd;
|
||||
background-image: -moz-linear-gradient(top, #d2e6fd, #b0d1f9); /* FF3.6 */
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#d2e6fd), to(#b0d1f9)); /* Saf4+, Chrome */
|
||||
background-image: linear-gradient(top, #d2e6fd, #b0d1f9);
|
||||
border: 1px solid #6eadf5;
|
||||
}
|
||||
.VS-search .search_facet .category {
|
||||
float: left;
|
||||
text-transform: uppercase;
|
||||
font-weight: bold;
|
||||
font-size: 10px;
|
||||
color: #808080;
|
||||
padding: 8px 0 5px;
|
||||
line-height: 13px;
|
||||
cursor: pointer;
|
||||
padding: 4px 0 0;
|
||||
}
|
||||
.VS-search .search_facet.is_selected .category {
|
||||
margin-left: 3px;
|
||||
}
|
||||
.VS-search .search_facet .search_facet_input_container {
|
||||
float: left;
|
||||
}
|
||||
.VS-search .search_facet input {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
color: #000;
|
||||
font-size: 13px;
|
||||
line-height: 16px;
|
||||
padding: 5px 0 5px 4px;
|
||||
height: 16px;
|
||||
width: auto;
|
||||
z-index: 100;
|
||||
position: relative;
|
||||
padding-top: 1px;
|
||||
padding-bottom: 2px;
|
||||
padding-right: 3px;
|
||||
|
||||
}
|
||||
.VS-search .search_facet.is_editing input,
|
||||
.VS-search .search_facet.is_selected input {
|
||||
color: #000;
|
||||
}
|
||||
.VS-search .search_facet .search_facet_remove {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 4px;
|
||||
}
|
||||
.VS-search .search_facet.is_selected .search_facet_remove {
|
||||
opacity: 0.4;
|
||||
left: 3px;
|
||||
filter: alpha(opacity=40);
|
||||
background-position: center -11px;
|
||||
}
|
||||
.VS-search .search_facet .search_facet_remove:hover {
|
||||
opacity: 1;
|
||||
}
|
||||
.VS-search .search_facet.is_editing .category,
|
||||
.VS-search .search_facet.is_selected .category {
|
||||
color: #000;
|
||||
}
|
||||
.VS-search .search_facet.search_facet_maybe_delete .category,
|
||||
.VS-search .search_facet.search_facet_maybe_delete input {
|
||||
color: darkred;
|
||||
}
|
||||
|
||||
/* ================ */
|
||||
/* = Search Input = */
|
||||
/* ================ */
|
||||
|
||||
.VS-search .search_input {
|
||||
height: 28px;
|
||||
float: left;
|
||||
margin-left: -1px;
|
||||
}
|
||||
.VS-search .search_input input {
|
||||
padding: 6px 3px 6px 2px;
|
||||
line-height: 10px;
|
||||
height: 22px;
|
||||
margin-top: -4px;
|
||||
width: 10px;
|
||||
z-index: 100;
|
||||
min-width: 4px;
|
||||
position: relative;
|
||||
}
|
||||
.VS-search .search_input.is_editing input {
|
||||
color: #202020;
|
||||
}
|
||||
|
||||
/* ================ */
|
||||
/* = Autocomplete = */
|
||||
/* ================ */
|
||||
|
||||
.VS-interface.ui-autocomplete {
|
||||
position: absolute;
|
||||
border: 1px solid #C0C0C0;
|
||||
border-top: 1px solid #D9D9D9;
|
||||
background-color: #F6F6F6;
|
||||
cursor: pointer;
|
||||
z-index: 10000;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
width: auto;
|
||||
min-width: 80px;
|
||||
max-width: 220px;
|
||||
max-height: 240px;
|
||||
overflow-y: auto;
|
||||
overflow-x: hidden;
|
||||
font-size: 13px;
|
||||
top: 5px;
|
||||
opacity: 0.97;
|
||||
box-shadow: 3px 4px 5px -2px rgba(0, 0, 0, 0.5); -webkit-box-shadow: 3px 4px 5px -2px rgba(0, 0, 0, 0.5); -moz-box-shadow: 3px 4px 5px -2px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
.VS-interface.ui-autocomplete .ui-autocomplete-category {
|
||||
text-transform: capitalize;
|
||||
font-size: 11px;
|
||||
padding: 4px 4px 4px;
|
||||
border-top: 1px solid #A2A2A2;
|
||||
border-bottom: 1px solid #A2A2A2;
|
||||
background-color: #B7B7B7;
|
||||
text-shadow: 0 -1px 0 #999;
|
||||
font-weight: bold;
|
||||
color: white;
|
||||
cursor: default;
|
||||
}
|
||||
.VS-interface.ui-autocomplete .ui-menu-item {
|
||||
float: none;
|
||||
}
|
||||
.VS-interface.ui-autocomplete .ui-menu-item a {
|
||||
color: #000;
|
||||
outline: none;
|
||||
display: block;
|
||||
padding: 3px 4px 5px;
|
||||
border-radius: none;
|
||||
line-height: 1;
|
||||
background-color: #F8F8F8;
|
||||
background-image: -moz-linear-gradient(top, #F8F8F8, #F3F3F3); /* FF3.6 */
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#F8F8F8), to(#F3F3F3)); /* Saf4+, Chrome */
|
||||
background-image: linear-gradient(top, #F8F8F8, #F3F3F3);
|
||||
border-top: 1px solid #FAFAFA;
|
||||
border-bottom: 1px solid #f0f0f0;
|
||||
}
|
||||
.VS-interface.ui-autocomplete .ui-menu-item a:active {
|
||||
outline: none;
|
||||
}
|
||||
.VS-interface.ui-autocomplete .ui-menu-item .ui-state-hover {
|
||||
background-color: #6483F7;
|
||||
background-image: -moz-linear-gradient(top, #648bF5, #2465f3); /* FF3.6 */
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#648bF5), to(#2465f3)); /* Saf4+, Chrome */
|
||||
background-image: linear-gradient(top, #648bF5, #2465f3);
|
||||
border-top: 1px solid #5b83ec;
|
||||
border-bottom: 1px solid #1459e9;
|
||||
border-left: none;
|
||||
border-right: none;
|
||||
color: white;
|
||||
margin: 0;
|
||||
}
|
||||
.VS-interface.ui-autocomplete .ui-corner-all {
|
||||
border-radius: 0;
|
||||
}
|
||||
.VS-interface.ui-autocomplete li {
|
||||
list-style: none;
|
||||
width: auto;
|
||||
}
|
|
@ -1,310 +0,0 @@
|
|||
.VS-search .VS-icon {
|
||||
background-repeat: no-repeat;
|
||||
background-position: center center;
|
||||
vertical-align: middle;
|
||||
width: 16px; height: 16px;
|
||||
}
|
||||
.VS-search .VS-icon-cancel {
|
||||
width: 11px; height: 11px;
|
||||
background-position: center 0;
|
||||
background-image: url(../images/embed/icons/cancel_search.png?1311104738);
|
||||
cursor: pointer;
|
||||
}
|
||||
.VS-search .VS-icon-cancel:hover {
|
||||
background-position: center -11px;
|
||||
}
|
||||
.VS-search .VS-icon-search {
|
||||
width: 12px; height: 12px;
|
||||
background-image: url(../images/embed/icons/search_glyph.png?1311104738);
|
||||
}
|
||||
|
||||
/*------------------------------ RESET + DEFAULT STYLES ---------------------------------*/
|
||||
|
||||
/*
|
||||
Eric Meyer's final reset.css
|
||||
Source: http://meyerweb.com/eric/thoughts/2007/05/01/reset-reloaded/
|
||||
*/
|
||||
.VS-search div, .VS-search span, .VS-search a, .VS-search img,
|
||||
.VS-search ul, .VS-search li, .VS-search form, .VS-search label,
|
||||
.VS-interface ul, .VS-interface li, .VS-interface {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
border: 0;
|
||||
outline: 0;
|
||||
font-weight: inherit;
|
||||
font-style: inherit;
|
||||
font-size: 100%;
|
||||
font-family: inherit;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
.VS-search :focus {
|
||||
outline: 0;
|
||||
}
|
||||
.VS-search {
|
||||
line-height: 1;
|
||||
color: black;
|
||||
}
|
||||
.VS-search ol, .VS-search ul {
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
/* ===================== */
|
||||
/* = General and Reset = */
|
||||
/* ===================== */
|
||||
|
||||
.VS-search {
|
||||
font-family: Arial, sans-serif;
|
||||
color: #373737;
|
||||
font-size: 12px;
|
||||
}
|
||||
.VS-search input {
|
||||
display: block;
|
||||
border: none;
|
||||
-moz-box-shadow: none;
|
||||
-webkit-box-shadow: none;
|
||||
box-shadow: none;
|
||||
outline: none;
|
||||
margin: 0; padding: 4px;
|
||||
background: transparent;
|
||||
font-size: 16px;
|
||||
line-height: 20px;
|
||||
width: 100%;
|
||||
}
|
||||
.VS-interface, .VS-search .dialog, .VS-search input {
|
||||
font-family: "Lucida Grande", "Lucida Sans Unicode", Helvetica, Arial, sans-serif !important;
|
||||
line-height: 1.1em;
|
||||
}
|
||||
|
||||
/* ========== */
|
||||
/* = Layout = */
|
||||
/* ========== */
|
||||
|
||||
.VS-search .VS-search-box {
|
||||
cursor: text;
|
||||
position: relative;
|
||||
background: transparent;
|
||||
border: 2px solid #ccc;
|
||||
border-radius: 16px; -webkit-border-radius: 16px; -moz-border-radius: 16px;
|
||||
background-color: #fafafa;
|
||||
-webkit-box-shadow: inset 0px 0px 3px #ccc;
|
||||
-moz-box-shadow: inset 0px 0px 3px #ccc;
|
||||
box-shadow: inset 0px 0px 3px #ccc;
|
||||
min-height: 28px;
|
||||
height: auto;
|
||||
}
|
||||
.VS-search .VS-search-box.VS-focus {
|
||||
border-color: #acf;
|
||||
-webkit-box-shadow: inset 0px 0px 3px #acf;
|
||||
-moz-box-shadow: inset 0px 0px 3px #acf;
|
||||
box-shadow: inset 0px 0px 3px #acf;
|
||||
}
|
||||
.VS-search .VS-search-inner {
|
||||
position: relative;
|
||||
margin: 0 20px 0 22px;
|
||||
overflow: hidden;
|
||||
}
|
||||
.VS-search input {
|
||||
width: 100px;
|
||||
}
|
||||
.VS-search input,
|
||||
.VS-search .VS-input-width-tester {
|
||||
padding: 6px 0;
|
||||
float: left;
|
||||
color: #808080;
|
||||
font: 13px/17px Helvetica, Arial;
|
||||
}
|
||||
.VS-search.VS-focus input {
|
||||
color: #606060;
|
||||
}
|
||||
.VS-search .VS-icon-search {
|
||||
position: absolute;
|
||||
left: 9px; top: 8px;
|
||||
}
|
||||
.VS-search .VS-icon-cancel {
|
||||
position: absolute;
|
||||
right: 9px; top: 8px;
|
||||
}
|
||||
|
||||
/* ================ */
|
||||
/* = Search Facet = */
|
||||
/* ================ */
|
||||
|
||||
.VS-search .search_facet {
|
||||
float: left;
|
||||
margin: 0;
|
||||
padding: 0 0 0 14px;
|
||||
position: relative;
|
||||
border: 1px solid transparent;
|
||||
height: 20px;
|
||||
margin: 3px -3px 3px 0;
|
||||
}
|
||||
.VS-search .search_facet.is_selected {
|
||||
margin-left: -3px;
|
||||
-webkit-border-radius: 16px;
|
||||
-moz-border-radius: 16px;
|
||||
border-radius: 16px;
|
||||
background-color: #d2e6fd;
|
||||
background-image: -moz-linear-gradient(top, #d2e6fd, #b0d1f9); /* FF3.6 */
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#d2e6fd), to(#b0d1f9)); /* Saf4+, Chrome */
|
||||
background-image: linear-gradient(top, #d2e6fd, #b0d1f9);
|
||||
border: 1px solid #6eadf5;
|
||||
}
|
||||
.VS-search .search_facet .category {
|
||||
float: left;
|
||||
text-transform: uppercase;
|
||||
font-weight: bold;
|
||||
font-size: 10px;
|
||||
color: #808080;
|
||||
padding: 8px 0 5px;
|
||||
line-height: 13px;
|
||||
cursor: pointer;
|
||||
padding: 4px 0 0;
|
||||
}
|
||||
.VS-search .search_facet.is_selected .category {
|
||||
margin-left: 3px;
|
||||
}
|
||||
.VS-search .search_facet .search_facet_input_container {
|
||||
float: left;
|
||||
}
|
||||
.VS-search .search_facet input {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
color: #000;
|
||||
font-size: 13px;
|
||||
line-height: 16px;
|
||||
padding: 5px 0 5px 4px;
|
||||
height: 16px;
|
||||
width: auto;
|
||||
z-index: 100;
|
||||
position: relative;
|
||||
padding-top: 1px;
|
||||
padding-bottom: 2px;
|
||||
padding-right: 3px;
|
||||
|
||||
}
|
||||
.VS-search .search_facet.is_editing input,
|
||||
.VS-search .search_facet.is_selected input {
|
||||
color: #000;
|
||||
}
|
||||
.VS-search .search_facet .search_facet_remove {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 4px;
|
||||
}
|
||||
.VS-search .search_facet.is_selected .search_facet_remove {
|
||||
opacity: 0.4;
|
||||
left: 3px;
|
||||
filter: alpha(opacity=40);
|
||||
background-position: center -11px;
|
||||
}
|
||||
.VS-search .search_facet .search_facet_remove:hover {
|
||||
opacity: 1;
|
||||
}
|
||||
.VS-search .search_facet.is_editing .category,
|
||||
.VS-search .search_facet.is_selected .category {
|
||||
color: #000;
|
||||
}
|
||||
.VS-search .search_facet.search_facet_maybe_delete .category,
|
||||
.VS-search .search_facet.search_facet_maybe_delete input {
|
||||
color: darkred;
|
||||
}
|
||||
|
||||
/* ================ */
|
||||
/* = Search Input = */
|
||||
/* ================ */
|
||||
|
||||
.VS-search .search_input {
|
||||
height: 28px;
|
||||
float: left;
|
||||
margin-left: -1px;
|
||||
}
|
||||
.VS-search .search_input input {
|
||||
padding: 6px 3px 6px 2px;
|
||||
line-height: 10px;
|
||||
height: 22px;
|
||||
margin-top: -4px;
|
||||
width: 10px;
|
||||
z-index: 100;
|
||||
min-width: 4px;
|
||||
position: relative;
|
||||
}
|
||||
.VS-search .search_input.is_editing input {
|
||||
color: #202020;
|
||||
}
|
||||
|
||||
/* ================ */
|
||||
/* = Autocomplete = */
|
||||
/* ================ */
|
||||
|
||||
.VS-interface.ui-autocomplete {
|
||||
position: absolute;
|
||||
border: 1px solid #C0C0C0;
|
||||
border-top: 1px solid #D9D9D9;
|
||||
background-color: #F6F6F6;
|
||||
cursor: pointer;
|
||||
z-index: 10000;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
width: auto;
|
||||
min-width: 80px;
|
||||
max-width: 220px;
|
||||
max-height: 240px;
|
||||
overflow-y: auto;
|
||||
overflow-x: hidden;
|
||||
font-size: 13px;
|
||||
top: 5px;
|
||||
opacity: 0.97;
|
||||
box-shadow: 3px 4px 5px -2px rgba(0, 0, 0, 0.5); -webkit-box-shadow: 3px 4px 5px -2px rgba(0, 0, 0, 0.5); -moz-box-shadow: 3px 4px 5px -2px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
.VS-interface.ui-autocomplete .ui-autocomplete-category {
|
||||
text-transform: capitalize;
|
||||
font-size: 11px;
|
||||
padding: 4px 4px 4px;
|
||||
border-top: 1px solid #A2A2A2;
|
||||
border-bottom: 1px solid #A2A2A2;
|
||||
background-color: #B7B7B7;
|
||||
text-shadow: 0 -1px 0 #999;
|
||||
font-weight: bold;
|
||||
color: white;
|
||||
cursor: default;
|
||||
}
|
||||
.VS-interface.ui-autocomplete .ui-menu-item {
|
||||
float: none;
|
||||
}
|
||||
.VS-interface.ui-autocomplete .ui-menu-item a {
|
||||
color: #000;
|
||||
outline: none;
|
||||
display: block;
|
||||
padding: 3px 4px 5px;
|
||||
border-radius: none;
|
||||
line-height: 1;
|
||||
background-color: #F8F8F8;
|
||||
background-image: -moz-linear-gradient(top, #F8F8F8, #F3F3F3); /* FF3.6 */
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#F8F8F8), to(#F3F3F3)); /* Saf4+, Chrome */
|
||||
background-image: linear-gradient(top, #F8F8F8, #F3F3F3);
|
||||
border-top: 1px solid #FAFAFA;
|
||||
border-bottom: 1px solid #f0f0f0;
|
||||
}
|
||||
.VS-interface.ui-autocomplete .ui-menu-item a:active {
|
||||
outline: none;
|
||||
}
|
||||
.VS-interface.ui-autocomplete .ui-menu-item .ui-state-hover {
|
||||
background-color: #6483F7;
|
||||
background-image: -moz-linear-gradient(top, #648bF5, #2465f3); /* FF3.6 */
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#648bF5), to(#2465f3)); /* Saf4+, Chrome */
|
||||
background-image: linear-gradient(top, #648bF5, #2465f3);
|
||||
border-top: 1px solid #5b83ec;
|
||||
border-bottom: 1px solid #1459e9;
|
||||
border-left: none;
|
||||
border-right: none;
|
||||
color: white;
|
||||
margin: 0;
|
||||
}
|
||||
.VS-interface.ui-autocomplete .ui-corner-all {
|
||||
border-radius: 0;
|
||||
}
|
||||
.VS-interface.ui-autocomplete li {
|
||||
list-style: none;
|
||||
width: auto;
|
||||
}
|
File diff suppressed because it is too large
Load Diff
|
@ -1,453 +0,0 @@
|
|||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html;charset=UTF-8" />
|
||||
<meta http-equiv="X-UA-Compatible" content="chrome=1">
|
||||
<title>DocumentCloud's VisualSearch.js</title>
|
||||
<style>
|
||||
body {
|
||||
font-size: 16px;
|
||||
line-height: 24px;
|
||||
background: #FEF3CA;
|
||||
color: #022;
|
||||
height: 100%;
|
||||
font-family: "Palatino Linotype", "Book Antiqua", Palatino, FreeSerif, serif;
|
||||
}
|
||||
div.container {
|
||||
width: 720px;
|
||||
margin: 50px 0 50px 50px;
|
||||
}
|
||||
p, li {
|
||||
margin: 16px 0 16px 0;
|
||||
width: 550px;
|
||||
}
|
||||
p.break {
|
||||
margin-top: 35px;
|
||||
}
|
||||
ol {
|
||||
padding-left: 24px;
|
||||
}
|
||||
ol li {
|
||||
font-weight: bold;
|
||||
margin-left: 0;
|
||||
}
|
||||
a, a:visited {
|
||||
padding: 0 2px;
|
||||
text-decoration: none;
|
||||
background: #f0c095;
|
||||
color: #252519;
|
||||
}
|
||||
a:active, a:hover {
|
||||
color: #FFF;
|
||||
background: #C25D00;
|
||||
}
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
margin-top: 40px;
|
||||
}
|
||||
b.header {
|
||||
font-size: 18px;
|
||||
}
|
||||
span.alias {
|
||||
font-size: 14px;
|
||||
font-style: italic;
|
||||
margin-left: 20px;
|
||||
}
|
||||
table {
|
||||
margin: 16px 0; padding: 0;
|
||||
}
|
||||
tr, td, th {
|
||||
margin: 0; padding: 0;
|
||||
text-align: left;
|
||||
}
|
||||
th {
|
||||
padding: 24px 0 0;
|
||||
}
|
||||
tr:first-child th {
|
||||
padding-top: 0;
|
||||
}
|
||||
td {
|
||||
padding: 6px 15px 6px 0;
|
||||
}
|
||||
td.definition {
|
||||
line-height: 18px;
|
||||
font-size: 14px;
|
||||
}
|
||||
table.downloads td {
|
||||
padding-left: 18px;
|
||||
}
|
||||
.demo-hint {
|
||||
font-size: 13px;
|
||||
margin: 0 0 12px 12px;
|
||||
font-weight: normal;
|
||||
}
|
||||
#VS code, #VS pre, #VS tt {
|
||||
font-family: Monaco, Consolas, "Lucida Console", monospace;
|
||||
font-size: 12px;
|
||||
line-height: 18px;
|
||||
color: #444;
|
||||
background: none;
|
||||
}
|
||||
#VS code {
|
||||
margin-left: 8px;
|
||||
padding: 0 0 0 12px;
|
||||
font-weight: normal;
|
||||
}
|
||||
#VS pre {
|
||||
font-size: 12px;
|
||||
padding: 2px 0 2px 0;
|
||||
border-left: 6px solid #829C37;
|
||||
margin: 12px 0;
|
||||
}
|
||||
#search_query {
|
||||
margin: 18px 0;
|
||||
opacity: 0;
|
||||
}
|
||||
#search_query .raquo {
|
||||
font-size: 18px;
|
||||
line-height: 12px;
|
||||
font-weight: bold;
|
||||
margin-right: 4px;
|
||||
}
|
||||
#search_query2 {
|
||||
margin: 18px 0;
|
||||
opacity: 0;
|
||||
}
|
||||
#search_query2 .raquo {
|
||||
font-size: 18px;
|
||||
line-height: 12px;
|
||||
font-weight: bold;
|
||||
margin-right: 4px;
|
||||
}
|
||||
</style>
|
||||
|
||||
<link rel="stylesheet" href="lib/css/reset.css" type="text/css" media="screen" charset="utf-8">
|
||||
<link rel="stylesheet" href="lib/css/icons.css" type="text/css" media="screen" charset="utf-8">
|
||||
<link rel="stylesheet" href="lib/css/workspace.css" type="text/css" media="screen" charset="utf-8">
|
||||
|
||||
<script src="vendor/jquery-1.6.1.js" type="text/javascript" charset="utf-8"></script>
|
||||
<!-- <script src="vendor/backported/jquery-1.4.4.js" type="text/javascript" charset="utf-8"></script> -->
|
||||
<script src="vendor/jquery.ui.core.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="vendor/jquery.ui.widget.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="vendor/jquery.ui.position.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="vendor/jquery.ui.autocomplete.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="vendor/underscore-1.1.5.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="vendor/backbone-0.5.0.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="lib/js/visualsearch.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="lib/js/views/search_box.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="lib/js/views/search_facet.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="lib/js/views/search_input.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="lib/js/models/search_facets.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="lib/js/models/search_query.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="lib/js/utils/backbone_extensions.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="lib/js/utils/hotkeys.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="lib/js/utils/jquery_extensions.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="lib/js/utils/search_parser.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="lib/js/utils/inflector.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="lib/js/templates/templates.js" type="text/javascript" charset="utf-8"></script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="container" id="VS">
|
||||
|
||||
<h1><a href="index.html">VisualSearch.js</a></h1>
|
||||
|
||||
<p>
|
||||
<a href="http://github.com/documentcloud/visualsearch">VisualSearch.js</a>
|
||||
enhances ordinary search boxes with the ability to autocomplete
|
||||
faceted search queries. Specify the facets for completion, along with the
|
||||
completable values for any facet. You can retrieve the search query as a
|
||||
structured object, so you don't have to parse the query string yourself.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<a href="docs/visualsearch.html">The complete annotated source code</a>
|
||||
is also available.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The project is
|
||||
<a href="http://github.com/documentcloud/visualsearch/">hosted on GitHub</a>.
|
||||
You can report bugs and discuss features on the
|
||||
<a href="http://github.com/documentcloud/visualsearch/issues">issues page</a>,
|
||||
on Freenode in the <tt>#documentcloud</tt> channel,
|
||||
or send tweets to <a href="http://twitter.com/documentcloud">@documentcloud</a>.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<i>VisualSearch.js is an open-source component of <a href="http://documentcloud.org/">DocumentCloud</a>.</i>
|
||||
</p>
|
||||
<h2 id="demo">Demo <span class="demo-hint"><i>Try searching for: <b>account</b>, <b>filter</b>, <b>access</b>, <b>title</b>, <b>city</b>, <b>state</b>, or <b>country</b>.</i></span></h2>
|
||||
|
||||
<div id="search_box_container"></div>
|
||||
<div id="search_query"> </div>
|
||||
|
||||
<script type="text/javascript" charset="utf-8">
|
||||
$(document).ready(function() {
|
||||
window.visualSearch = VS.init({
|
||||
container : $('#search_box_container'),
|
||||
query : 'country: "South Africa" account: 5-samuel title: "Pentagon Papers"',
|
||||
// query : '',
|
||||
unquotable : [
|
||||
'text',
|
||||
'account',
|
||||
'filter',
|
||||
'access'
|
||||
],
|
||||
callbacks : {
|
||||
search : function(query, searchCollection) {
|
||||
var $query = $('#search_query');
|
||||
$query.stop().animate({opacity : 1}, {duration: 300, queue: false});
|
||||
$query.html('<span class="raquo">»</span> You searched for: <b>' + searchCollection.serialize() + '</b>');
|
||||
clearTimeout(window.queryHideDelay);
|
||||
window.queryHideDelay = setTimeout(function() {
|
||||
$query.animate({
|
||||
opacity : 0
|
||||
}, {
|
||||
duration: 1000,
|
||||
queue: false
|
||||
});
|
||||
}, 2000);
|
||||
},
|
||||
valueMatches : function(category, searchTerm, callback) {
|
||||
switch (category) {
|
||||
case 'account':
|
||||
callback([
|
||||
{ value: '1-amanda', label: 'Amanda' },
|
||||
{ value: '2-aron', label: 'Aron' },
|
||||
{ value: '3-eric', label: 'Eric' },
|
||||
{ value: '4-jeremy', label: 'Jeremy' },
|
||||
{ value: '5-samuel', label: 'Samuel' },
|
||||
{ value: '6-scott', label: 'Scott' }
|
||||
]);
|
||||
break;
|
||||
case 'filter':
|
||||
callback(['published', 'unpublished', 'draft']);
|
||||
break;
|
||||
case 'access':
|
||||
callback(['public', 'private', 'protected']);
|
||||
break;
|
||||
case 'title':
|
||||
callback([
|
||||
'Pentagon Papers',
|
||||
'CoffeeScript Manual',
|
||||
'Laboratory for Object Oriented Thinking',
|
||||
'A Repository Grows in Brooklyn'
|
||||
]);
|
||||
break;
|
||||
case 'city':
|
||||
callback([
|
||||
'Cleveland',
|
||||
'New York City',
|
||||
'Brooklyn',
|
||||
'Manhattan',
|
||||
'Queens',
|
||||
'The Bronx',
|
||||
'Staten Island',
|
||||
'San Francisco',
|
||||
'Los Angeles',
|
||||
'Seattle',
|
||||
'London',
|
||||
'Portland',
|
||||
'Chicago',
|
||||
'Boston'
|
||||
])
|
||||
break;
|
||||
case 'state':
|
||||
callback([
|
||||
"Alabama", "Alaska", "Arizona", "Arkansas", "California",
|
||||
"Colorado", "Connecticut", "Delaware", "District of Columbia", "Florida",
|
||||
"Georgia", "Guam", "Hawaii", "Idaho", "Illinois",
|
||||
"Indiana", "Iowa", "Kansas", "Kentucky", "Louisiana",
|
||||
"Maine", "Maryland", "Massachusetts", "Michigan", "Minnesota",
|
||||
"Mississippi", "Missouri", "Montana", "Nebraska", "Nevada",
|
||||
"New Hampshire", "New Jersey", "New Mexico", "New York", "North Carolina",
|
||||
"North Dakota", "Ohio", "Oklahoma", "Oregon", "Pennsylvania",
|
||||
"Puerto Rico", "Rhode Island", "South Carolina", "South Dakota", "Tennessee",
|
||||
"Texas", "Utah", "Vermont", "Virginia", "Virgin Islands",
|
||||
"Washington", "West Virginia", "Wisconsin", "Wyoming"
|
||||
]);
|
||||
break
|
||||
case 'country':
|
||||
callback([
|
||||
"China", "India", "United States", "Indonesia", "Brazil",
|
||||
"Pakistan", "Bangladesh", "Nigeria", "Russia", "Japan",
|
||||
"Mexico", "Philippines", "Vietnam", "Ethiopia", "Egypt",
|
||||
"Germany", "Turkey", "Iran", "Thailand", "D. R. of Congo",
|
||||
"France", "United Kingdom", "Italy", "Myanmar", "South Africa",
|
||||
"South Korea", "Colombia", "Ukraine", "Spain", "Tanzania",
|
||||
"Sudan", "Kenya", "Argentina", "Poland", "Algeria",
|
||||
"Canada", "Uganda", "Morocco", "Iraq", "Nepal",
|
||||
"Peru", "Afghanistan", "Venezuela", "Malaysia", "Uzbekistan",
|
||||
"Saudi Arabia", "Ghana", "Yemen", "North Korea", "Mozambique",
|
||||
"Taiwan", "Syria", "Ivory Coast", "Australia", "Romania",
|
||||
"Sri Lanka", "Madagascar", "Cameroon", "Angola", "Chile",
|
||||
"Netherlands", "Burkina Faso", "Niger", "Kazakhstan", "Malawi",
|
||||
"Cambodia", "Guatemala", "Ecuador", "Mali", "Zambia",
|
||||
"Senegal", "Zimbabwe", "Chad", "Cuba", "Greece",
|
||||
"Portugal", "Belgium", "Czech Republic", "Tunisia", "Guinea",
|
||||
"Rwanda", "Dominican Republic", "Haiti", "Bolivia", "Hungary",
|
||||
"Belarus", "Somalia", "Sweden", "Benin", "Azerbaijan",
|
||||
"Burundi", "Austria", "Honduras", "Switzerland", "Bulgaria",
|
||||
"Serbia", "Israel", "Tajikistan", "Hong Kong", "Papua New Guinea",
|
||||
"Togo", "Libya", "Jordan", "Paraguay", "Laos",
|
||||
"El Salvador", "Sierra Leone", "Nicaragua", "Kyrgyzstan", "Denmark",
|
||||
"Slovakia", "Finland", "Eritrea", "Turkmenistan"
|
||||
], {preserveOrder: true});
|
||||
break;
|
||||
}
|
||||
},
|
||||
facetMatches : function(callback) {
|
||||
callback([
|
||||
'account', 'filter', 'access', 'title',
|
||||
{ label: 'city', category: 'location' },
|
||||
{ label: 'address', category: 'location' },
|
||||
{ label: 'country', category: 'location' },
|
||||
{ label: 'state', category: 'location' },
|
||||
]);
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
|
||||
<div id="search_box_container2"></div>
|
||||
<div id="search_query2"> </div>
|
||||
|
||||
<script type="text/javascript" charset="utf-8">
|
||||
$(document).ready(function() {
|
||||
var visualSearch = VS.init({
|
||||
container : $('#search_box_container2'),
|
||||
query : '',
|
||||
// query : '',
|
||||
unquotable : [
|
||||
'text',
|
||||
'account',
|
||||
'filter',
|
||||
'access'
|
||||
],
|
||||
callbacks : {
|
||||
search : function(query, searchCollection) {
|
||||
console.log(["query", searchCollection.facets(), query]);
|
||||
var $query = $('#search_query2');
|
||||
$query.stop().animate({opacity : 1}, {duration: 300, queue: false});
|
||||
$query.html('<span class="raquo">»</span> You searched for: <b>' + searchCollection.serialize() + '</b>');
|
||||
clearTimeout(window.queryHideDelay2);
|
||||
window.queryHideDelay2 = setTimeout(function() {
|
||||
$query.animate({
|
||||
opacity : 0
|
||||
}, {
|
||||
duration: 1000,
|
||||
queue: false
|
||||
});
|
||||
}, 2000);
|
||||
},
|
||||
valueMatches : function(category, searchTerm, callback) {
|
||||
switch (category) {
|
||||
case 'account':
|
||||
callback([
|
||||
{ value: '1-amanda', label: 'Amanda' },
|
||||
{ value: '2-aron', label: 'Aron' },
|
||||
{ value: '3-eric', label: 'Eric' },
|
||||
{ value: '4-jeremy', label: 'Jeremy' },
|
||||
{ value: '5-samuel', label: 'Samuel' },
|
||||
{ value: '6-scott', label: 'Scott' }
|
||||
]);
|
||||
break;
|
||||
case 'filter':
|
||||
callback(['published', 'unpublished', 'draft']);
|
||||
break;
|
||||
case 'access':
|
||||
callback(['public', 'private', 'protected']);
|
||||
break;
|
||||
case 'title':
|
||||
callback([
|
||||
'Pentagon Papers',
|
||||
'CoffeeScript Manual',
|
||||
'Laboratory for Object Oriented Thinking',
|
||||
'A Repository Grows in Brooklyn'
|
||||
]);
|
||||
break;
|
||||
case 'city':
|
||||
callback([
|
||||
'Cleveland',
|
||||
'New York City',
|
||||
'Brooklyn',
|
||||
'Manhattan',
|
||||
'Queens',
|
||||
'The Bronx',
|
||||
'Staten Island',
|
||||
'San Francisco',
|
||||
'Los Angeles',
|
||||
'Seattle',
|
||||
'London',
|
||||
'Portland',
|
||||
'Chicago',
|
||||
'Boston'
|
||||
])
|
||||
break;
|
||||
case 'state':
|
||||
callback([
|
||||
"Alabama", "Alaska", "Arizona", "Arkansas", "California",
|
||||
"Colorado", "Connecticut", "Delaware", "District of Columbia", "Florida",
|
||||
"Georgia", "Guam", "Hawaii", "Idaho", "Illinois",
|
||||
"Indiana", "Iowa", "Kansas", "Kentucky", "Louisiana",
|
||||
"Maine", "Maryland", "Massachusetts", "Michigan", "Minnesota",
|
||||
"Mississippi", "Missouri", "Montana", "Nebraska", "Nevada",
|
||||
"New Hampshire", "New Jersey", "New Mexico", "New York", "North Carolina",
|
||||
"North Dakota", "Ohio", "Oklahoma", "Oregon", "Pennsylvania",
|
||||
"Puerto Rico", "Rhode Island", "South Carolina", "South Dakota", "Tennessee",
|
||||
"Texas", "Utah", "Vermont", "Virginia", "Virgin Islands",
|
||||
"Washington", "West Virginia", "Wisconsin", "Wyoming"
|
||||
]);
|
||||
break
|
||||
case 'country':
|
||||
callback([
|
||||
"China", "India", "United States", "Indonesia", "Brazil",
|
||||
"Pakistan", "Bangladesh", "Nigeria", "Russia", "Japan",
|
||||
"Mexico", "Philippines", "Vietnam", "Ethiopia", "Egypt",
|
||||
"Germany", "Turkey", "Iran", "Thailand", "D. R. of Congo",
|
||||
"France", "United Kingdom", "Italy", "Myanmar", "South Africa",
|
||||
"South Korea", "Colombia", "Ukraine", "Spain", "Tanzania",
|
||||
"Sudan", "Kenya", "Argentina", "Poland", "Algeria",
|
||||
"Canada", "Uganda", "Morocco", "Iraq", "Nepal",
|
||||
"Peru", "Afghanistan", "Venezuela", "Malaysia", "Uzbekistan",
|
||||
"Saudi Arabia", "Ghana", "Yemen", "North Korea", "Mozambique",
|
||||
"Taiwan", "Syria", "Ivory Coast", "Australia", "Romania",
|
||||
"Sri Lanka", "Madagascar", "Cameroon", "Angola", "Chile",
|
||||
"Netherlands", "Burkina Faso", "Niger", "Kazakhstan", "Malawi",
|
||||
"Cambodia", "Guatemala", "Ecuador", "Mali", "Zambia",
|
||||
"Senegal", "Zimbabwe", "Chad", "Cuba", "Greece",
|
||||
"Portugal", "Belgium", "Czech Republic", "Tunisia", "Guinea",
|
||||
"Rwanda", "Dominican Republic", "Haiti", "Bolivia", "Hungary",
|
||||
"Belarus", "Somalia", "Sweden", "Benin", "Azerbaijan",
|
||||
"Burundi", "Austria", "Honduras", "Switzerland", "Bulgaria",
|
||||
"Serbia", "Israel", "Tajikistan", "Hong Kong", "Papua New Guinea",
|
||||
"Togo", "Libya", "Jordan", "Paraguay", "Laos",
|
||||
"El Salvador", "Sierra Leone", "Nicaragua", "Kyrgyzstan", "Denmark",
|
||||
"Slovakia", "Finland", "Eritrea", "Turkmenistan"
|
||||
]);
|
||||
break;
|
||||
}
|
||||
},
|
||||
facetMatches : function(callback) {
|
||||
callback([
|
||||
'account', 'filter', 'access', 'title',
|
||||
{ label: 'city', category: 'location' },
|
||||
{ label: 'address', category: 'location' },
|
||||
{ label: 'country', category: 'location' },
|
||||
{ label: 'state', category: 'location' },
|
||||
], {
|
||||
preserveOrder: true
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
|
@ -1,537 +0,0 @@
|
|||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html;charset=UTF-8" />
|
||||
<meta http-equiv="X-UA-Compatible" content="chrome=1">
|
||||
<title>DocumentCloud's VisualSearch.js</title>
|
||||
<style>
|
||||
body {
|
||||
font-size: 16px;
|
||||
line-height: 24px;
|
||||
background: #FEF3CA;
|
||||
height: 100%;
|
||||
color: #022;
|
||||
font-family: Arial;
|
||||
font-family: "Palatino Linotype", "Book Antiqua", Palatino, FreeSerif, serif;
|
||||
}
|
||||
div.container {
|
||||
width: 720px;
|
||||
margin: 50px 0 50px 50px;
|
||||
}
|
||||
p, li {
|
||||
margin: 16px 0 16px 0;
|
||||
width: 550px;
|
||||
}
|
||||
p.break {
|
||||
margin-top: 35px;
|
||||
}
|
||||
ol {
|
||||
padding-left: 24px;
|
||||
}
|
||||
ol li {
|
||||
font-weight: bold;
|
||||
margin-left: 0;
|
||||
}
|
||||
a, a:visited {
|
||||
padding: 0 2px;
|
||||
text-decoration: none;
|
||||
background: #f0c095;
|
||||
color: #252519;
|
||||
}
|
||||
a:active, a:hover {
|
||||
color: #000;
|
||||
background: #e0a070;
|
||||
}
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
margin-top: 40px;
|
||||
}
|
||||
b.header {
|
||||
font-size: 18px;
|
||||
}
|
||||
span.alias {
|
||||
font-size: 14px;
|
||||
font-style: italic;
|
||||
margin-left: 20px;
|
||||
}
|
||||
table {
|
||||
margin: 16px 0; padding: 0;
|
||||
}
|
||||
tr, td, th {
|
||||
margin: 0; padding: 0;
|
||||
text-align: left;
|
||||
}
|
||||
th {
|
||||
padding: 24px 0 0;
|
||||
}
|
||||
tr:first-child th {
|
||||
padding-top: 0;
|
||||
}
|
||||
td {
|
||||
padding: 6px 15px 6px 0;
|
||||
}
|
||||
td.definition {
|
||||
line-height: 18px;
|
||||
font-size: 14px;
|
||||
}
|
||||
table.downloads td {
|
||||
padding-left: 18px;
|
||||
}
|
||||
.demo-hint {
|
||||
font-size: 13px;
|
||||
margin: 0 0 12px 12px;
|
||||
font-weight: normal;
|
||||
}
|
||||
#VS code, #VS pre, #VS tt {
|
||||
font-family: Monaco, Consolas, "Lucida Console", monospace;
|
||||
font-size: 12px;
|
||||
line-height: 18px;
|
||||
color: #444;
|
||||
background: none;
|
||||
}
|
||||
#VS code {
|
||||
margin-left: 8px;
|
||||
padding: 0 0 0 12px;
|
||||
font-weight: normal;
|
||||
}
|
||||
#VS pre {
|
||||
font-size: 12px;
|
||||
padding: 2px 0 2px 0;
|
||||
border-left: 6px solid #829C37;
|
||||
margin: 12px 0;
|
||||
}
|
||||
#search_query {
|
||||
margin: 18px 0 -24px;
|
||||
opacity: 0;
|
||||
}
|
||||
#search_query .raquo {
|
||||
font-size: 18px;
|
||||
line-height: 12px;
|
||||
font-weight: bold;
|
||||
margin-right: 4px;
|
||||
}
|
||||
.attribution {
|
||||
margin: -12px 0 24px;
|
||||
font-size: 14px;
|
||||
}
|
||||
</style>
|
||||
|
||||
<link rel="stylesheet" href="build-min/visualsearch-datauri.css" type="text/css" media="screen" charset="utf-8">
|
||||
<link rel="stylesheet" href="docs/assets/github.css" type="text/css" media="screen" charset="utf-8">
|
||||
|
||||
<script src="build-min/dependencies.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="build-min/visualsearch.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="docs/assets/highlight.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="docs/assets/javascript.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="docs/assets/xml.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script>
|
||||
hljs.initHighlightingOnLoad();
|
||||
</script>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="container" id="VS">
|
||||
|
||||
<h1>VisualSearch.js</h1>
|
||||
|
||||
<p class="attribution">
|
||||
<i>
|
||||
Created by <a href="http://github.com/samuelclay">Samuel Clay</a>,
|
||||
<a href="http://twitter.com/samuelclay">@samuelclay</a>.
|
||||
</i>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<a href="http://github.com/documentcloud/visualsearch">VisualSearch.js</a>
|
||||
enhances ordinary search boxes with the ability to autocomplete
|
||||
faceted search queries. Specify the facets for completion, along with the
|
||||
completable values for any facet. You can retrieve the search query as a
|
||||
structured object, so you don't have to parse the query string yourself.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<a href="https://www.documentcloud.org/public/#search/group%3A%20dcloud%20chair%3A%20%22Christopher%20Dodd%22%20TARP">Here's an example of a search on DocumentCloud.org that uses facets.</a>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The project is
|
||||
<a href="http://github.com/documentcloud/visualsearch/">hosted on GitHub</a>.
|
||||
You can report bugs and discuss features on the
|
||||
<a href="http://github.com/documentcloud/visualsearch/issues">issues page</a>,
|
||||
on Freenode in the <tt>#documentcloud</tt> channel,
|
||||
or send tweets to <a href="http://twitter.com/documentcloud">@documentcloud</a>.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<i>VisualSearch.js is an open-source component of <a href="http://documentcloud.org/">DocumentCloud</a>.
|
||||
<br />
|
||||
<a href="docs/visualsearch.html">The complete annotated source code</a>
|
||||
is also available.</i>
|
||||
</p>
|
||||
|
||||
<h2>Table of Contents</h2>
|
||||
|
||||
<a href="#demo">Demo</a> | <a href="#downloads">Downloads</a> | <a href="#usage">Usage</a> | <a href="#changelog">Change Log</a>
|
||||
|
||||
|
||||
<h2 id="demo">Demo <span class="demo-hint"><i>Try searching for: <b>account</b>, <b>filter</b>, <b>access</b>, <b>title</b>, <b>city</b>, <b>state</b>, or <b>country</b>.</i></span></h2>
|
||||
|
||||
|
||||
|
||||
<div id="search_box_container"></div>
|
||||
<div id="search_query"> </div>
|
||||
|
||||
<script type="text/javascript" charset="utf-8">
|
||||
$(document).ready(function() {
|
||||
var visualSearch = VS.init({
|
||||
container : $('#search_box_container'),
|
||||
query : 'country: "United States" state: "New York" account: 5-samuel title: "Pentagon Papers"',
|
||||
unquotable : [
|
||||
'text',
|
||||
'account',
|
||||
'filter',
|
||||
'access'
|
||||
],
|
||||
callbacks : {
|
||||
search : function(query, searchCollection) {
|
||||
var $query = $('#search_query');
|
||||
var count = searchCollection.size();
|
||||
$query.stop().animate({opacity : 1}, {duration: 300, queue: false});
|
||||
$query.html('<span class="raquo">»</span> You searched for: ' +
|
||||
'<b>' + (query || '<i>nothing</i>') + '</b>. ' +
|
||||
'(' + count + ' facet' + (count==1 ? '' : 's') + ')');
|
||||
clearTimeout(window.queryHideDelay);
|
||||
window.queryHideDelay = setTimeout(function() {
|
||||
$query.animate({
|
||||
opacity : 0
|
||||
}, {
|
||||
duration: 1000,
|
||||
queue: false
|
||||
});
|
||||
}, 2000);
|
||||
},
|
||||
facetMatches : function(callback) {
|
||||
callback([
|
||||
'account', 'filter', 'access', 'title',
|
||||
{ label: 'city', category: 'location' },
|
||||
{ label: 'country', category: 'location' },
|
||||
{ label: 'state', category: 'location' },
|
||||
]);
|
||||
},
|
||||
valueMatches : function(facet, searchTerm, callback) {
|
||||
switch (facet) {
|
||||
case 'account':
|
||||
callback([
|
||||
{ value: '1-amanda', label: 'Amanda' },
|
||||
{ value: '2-aron', label: 'Aron' },
|
||||
{ value: '3-eric', label: 'Eric' },
|
||||
{ value: '4-jeremy', label: 'Jeremy' },
|
||||
{ value: '5-samuel', label: 'Samuel' },
|
||||
{ value: '6-scott', label: 'Scott' }
|
||||
]);
|
||||
break;
|
||||
case 'filter':
|
||||
callback(['published', 'unpublished', 'draft']);
|
||||
break;
|
||||
case 'access':
|
||||
callback(['public', 'private', 'protected']);
|
||||
break;
|
||||
case 'title':
|
||||
callback([
|
||||
'Pentagon Papers',
|
||||
'CoffeeScript Manual',
|
||||
'Laboratory for Object Oriented Thinking',
|
||||
'A Repository Grows in Brooklyn'
|
||||
]);
|
||||
break;
|
||||
case 'city':
|
||||
callback([
|
||||
'Cleveland',
|
||||
'New York City',
|
||||
'Brooklyn',
|
||||
'Manhattan',
|
||||
'Queens',
|
||||
'The Bronx',
|
||||
'Staten Island',
|
||||
'San Francisco',
|
||||
'Los Angeles',
|
||||
'Seattle',
|
||||
'London',
|
||||
'Portland',
|
||||
'Chicago',
|
||||
'Boston'
|
||||
]);
|
||||
break;
|
||||
case 'state':
|
||||
callback([
|
||||
"Alabama", "Alaska", "Arizona", "Arkansas", "California",
|
||||
"Colorado", "Connecticut", "Delaware", "District of Columbia", "Florida",
|
||||
"Georgia", "Guam", "Hawaii", "Idaho", "Illinois",
|
||||
"Indiana", "Iowa", "Kansas", "Kentucky", "Louisiana",
|
||||
"Maine", "Maryland", "Massachusetts", "Michigan", "Minnesota",
|
||||
"Mississippi", "Missouri", "Montana", "Nebraska", "Nevada",
|
||||
"New Hampshire", "New Jersey", "New Mexico", "New York", "North Carolina",
|
||||
"North Dakota", "Ohio", "Oklahoma", "Oregon", "Pennsylvania",
|
||||
"Puerto Rico", "Rhode Island", "South Carolina", "South Dakota", "Tennessee",
|
||||
"Texas", "Utah", "Vermont", "Virginia", "Virgin Islands",
|
||||
"Washington", "West Virginia", "Wisconsin", "Wyoming"
|
||||
]);
|
||||
break;
|
||||
case 'country':
|
||||
callback([
|
||||
"China", "India", "United States", "Indonesia", "Brazil",
|
||||
"Pakistan", "Bangladesh", "Nigeria", "Russia", "Japan",
|
||||
"Mexico", "Philippines", "Vietnam", "Ethiopia", "Egypt",
|
||||
"Germany", "Turkey", "Iran", "Thailand", "D. R. of Congo",
|
||||
"France", "United Kingdom", "Italy", "Myanmar", "South Africa",
|
||||
"South Korea", "Colombia", "Ukraine", "Spain", "Tanzania",
|
||||
"Sudan", "Kenya", "Argentina", "Poland", "Algeria",
|
||||
"Canada", "Uganda", "Morocco", "Iraq", "Nepal",
|
||||
"Peru", "Afghanistan", "Venezuela", "Malaysia", "Uzbekistan",
|
||||
"Saudi Arabia", "Ghana", "Yemen", "North Korea", "Mozambique",
|
||||
"Taiwan", "Syria", "Ivory Coast", "Australia", "Romania",
|
||||
"Sri Lanka", "Madagascar", "Cameroon", "Angola", "Chile",
|
||||
"Netherlands", "Burkina Faso", "Niger", "Kazakhstan", "Malawi",
|
||||
"Cambodia", "Guatemala", "Ecuador", "Mali", "Zambia",
|
||||
"Senegal", "Zimbabwe", "Chad", "Cuba", "Greece",
|
||||
"Portugal", "Belgium", "Czech Republic", "Tunisia", "Guinea",
|
||||
"Rwanda", "Dominican Republic", "Haiti", "Bolivia", "Hungary",
|
||||
"Belarus", "Somalia", "Sweden", "Benin", "Azerbaijan",
|
||||
"Burundi", "Austria", "Honduras", "Switzerland", "Bulgaria",
|
||||
"Serbia", "Israel", "Tajikistan", "Hong Kong", "Papua New Guinea",
|
||||
"Togo", "Libya", "Jordan", "Paraguay", "Laos",
|
||||
"El Salvador", "Sierra Leone", "Nicaragua", "Kyrgyzstan", "Denmark",
|
||||
"Slovakia", "Finland", "Eritrea", "Turkmenistan"
|
||||
], {preserveOrder: true});
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
<h2 id="downloads">Downloads <i style="padding-left: 12px; font-size:12px;">(Right-click, and use "Save As")</i></h2>
|
||||
|
||||
<table class="downloads">
|
||||
|
||||
<tr>
|
||||
<th colspan="2">0. Everything (<tt>visualsearch.zip</tt>)</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="https://github.com/documentcloud/visualsearch/zipball/master">Download everything</a></td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<th colspan="2">1. VisualSearch JavaScript (<tt>visualsearch.js</tt>)</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="build-min/visualsearch.js">Production Version (0.2.2)</a></td>
|
||||
<td><i>8kb, Minified and Gzipped</i></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="build/visualsearch.js">Development Version (0.2.2)</a></td>
|
||||
<td><i>45kb, Uncompressed with Comments</i></td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<th colspan="2">2. VisualSearch Stylesheets (<tt>visualsearch.css</tt>)</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2"><i>You should include both the datauri and image urls versions. <a href="#css">See how to include both</a></i></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="build-min/visualsearch-datauri.css">Production Version - datauri</a></td>
|
||||
<td><i>4kb, Minified and Gzipped</i></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="build-min/visualsearch.css">Production Version - image urls</a></td>
|
||||
<td><i>4kb, Minified and Gzipped</i></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="build/visualsearch.css">Development Version</a></td>
|
||||
<td><i>8kb, Uncompressed with Comments</i></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th colspan="2">3. VisualSearch Images</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><img src="lib/images/embed/icons/search_glyph.png"> <a href="lib/images/embed/icons/search_glyph.png">Search Glyph</a></td>
|
||||
<td><i>4kb, embedded in visualsearch-datauri.css</i></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><img src="lib/images/embed/icons/cancel_search.png"> <a href="lib/images/embed/icons/cancel_search.png">Cancel Button</a></td>
|
||||
<td><i>4kb, embedded in visualsearch-datauri.css</i></td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<th colspan="2">4. VisualSearch Dependencies (<tt>jQuery 1.4+, jQuery UI, Underscore.js, Backbone.js</tt>)</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2"><i>You should only include the dependencies you don't already have.</i></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="build-min/dependencies.js">Production Version - All</a></td>
|
||||
<td><i>49kb, Minified and Gzipped</i></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="build/dependencies.js">Development Version - All</a></td>
|
||||
<td><i>340kb, Uncompressed with Comments</i></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="vendor/jquery-1.6.1.js">jQuery 1.6.1</a></td>
|
||||
<td><i>238kb, Uncompressed with Comments</i></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>jQuery UI 1.8.13: <br /><a href="vendor/jquery.ui.core.js">Core</a> <a href="vendor/jquery.ui.position.js">Position</a> <a href="vendor/jquery.ui.widget.js">Widget</a> <a href="vendor/jquery.ui.autocomplete.js">Autocomplete</a></td>
|
||||
<td><i>48kb, Uncompressed with Comments</i></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="vendor/underscore-1.1.5.js">Underscore 1.1.5</a></td>
|
||||
<td><i>29kb, Uncompressed with Comments</i></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="vendor/backbone-0.5.0.js">Backbone 0.5.0</a></td>
|
||||
<td><i>41kb, Uncompressed with Comments</i></td>
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
|
||||
<h2 id="usage">Usage</h2>
|
||||
|
||||
<p>To use VisualSearch.js on your site, follow these instructions on installation, configuration, and customization.</p>
|
||||
|
||||
<ol>
|
||||
<li class="xml" id="css">Insert the JavaScript and CSS into your page:<br />
|
||||
<pre><code><script src="visualsearch.js" type="text/javascript"></script>
|
||||
<!--[if (!IE)|(gte IE 8)]><!-->
|
||||
<link href="visualsearch-datauri.css" media="screen" rel="stylesheet" type="text/css" />
|
||||
<!--<![endif]-->
|
||||
<!--[if lte IE 7]><!-->
|
||||
<link href="visualsearch.css" media="screen" rel="stylesheet" type="text/css" />
|
||||
<!--<![endif]--></code></pre>
|
||||
</li>
|
||||
<li>Initialize the Visual Search box:<br />
|
||||
<pre class="javascript"><code><div class="visual_search"></div>
|
||||
|
||||
<script type="text/javascript" charset="utf-8">
|
||||
$(document).ready(function() {
|
||||
var visualSearch = VS.init({
|
||||
container : $('.visual_search'),
|
||||
query : '',
|
||||
callbacks : {
|
||||
search : function(query, searchCollection) {},
|
||||
facetMatches : function(callback) {},
|
||||
valueMatches : function(facet, searchTerm, callback) {}
|
||||
}
|
||||
});
|
||||
});
|
||||
</script></code></pre>
|
||||
</li>
|
||||
<li class="javascript">Customize the autocompleted facets and values:
|
||||
<pre><code>callbacks : {
|
||||
...
|
||||
// These are the facets that will be autocompleted in an empty input.
|
||||
facetMatches : function(callback) {
|
||||
callback([
|
||||
'account', 'filter', 'access', 'title',
|
||||
{ label: 'city', category: 'location' },
|
||||
{ label: 'address', category: 'location' },
|
||||
{ label: 'country', category: 'location' },
|
||||
{ label: 'state', category: 'location' },
|
||||
]);
|
||||
}
|
||||
...
|
||||
// These are the values that match specific categories, autocompleted
|
||||
// in a category's input field. searchTerm can be used to filter the
|
||||
// list on the server-side, prior to providing a list to the widget.
|
||||
valueMatches : function(facet, searchTerm, callback) {
|
||||
switch (facet) {
|
||||
case 'account':
|
||||
callback([
|
||||
{ value: '1-amanda', label: 'Amanda' },
|
||||
{ value: '2-aron', label: 'Aron' },
|
||||
{ value: '3-eric', label: 'Eric' },
|
||||
{ value: '4-jeremy', label: 'Jeremy' },
|
||||
{ value: '5-samuel', label: 'Samuel' },
|
||||
{ value: '6-scott', label: 'Scott' }
|
||||
]);
|
||||
break;
|
||||
case 'filter':
|
||||
callback(['published', 'unpublished', 'draft']);
|
||||
break;
|
||||
case 'access':
|
||||
callback(['public', 'private', 'protected']);
|
||||
break;
|
||||
case 'title':
|
||||
callback([
|
||||
'Pentagon Papers',
|
||||
'CoffeeScript Manual',
|
||||
'Laboratory for Object Oriented Thinking',
|
||||
'A Repository Grows in Brooklyn'
|
||||
]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
...
|
||||
}</code></pre>
|
||||
</li>
|
||||
<li class="javascript">Inspect the Visual Search box
|
||||
<pre><code>// Returns the unstructured search query
|
||||
visualSearch.searchBox.value()
|
||||
// "country: "South Africa" account: 5-samuel title: "Pentagon Papers""
|
||||
|
||||
// Returns an array of Facet model instances
|
||||
visualSearch.searchQuery.facets()
|
||||
// [FacetModel<country:"South Africa">,
|
||||
// FacetModel<account:5-samuel>,
|
||||
// FacetModel<title:"Pentagon Papers">]
|
||||
|
||||
// Set the search query with raw text
|
||||
visualSearch.searchBox.value("Country: US State: \"New York\" Key: Value")
|
||||
|
||||
</code></pre>
|
||||
</li>
|
||||
</ol>
|
||||
|
||||
|
||||
<h2 id="changelog">Change Log</h2>
|
||||
|
||||
<p>
|
||||
<b class="header">0.2.2</b> <i>March 10th, 2012</i><br />
|
||||
If you do not want to automatically filter the value matches, you can pass an
|
||||
options hash with <tt>preserveMatches: true</tt> as the second argument to the callback.
|
||||
<a href="https://github.com/documentcloud/visualsearch/pull/44">See pull request #44</a> for details.
|
||||
</p>
|
||||
<p>
|
||||
<b class="header">0.2.1</b> <i>November 14th, 2011</i><br />
|
||||
The autocompleted facets and values that are provided by your callbacks <tt>facetMatches</tt>
|
||||
and <tt>valueMatches</tt> can now preserve the order of items you give them. Simply pass an
|
||||
options hash with <tt>preserveOrder: true</tt> as the second argument to the callback. See
|
||||
<a href="demo.html">the demo page</a> for an example.
|
||||
</p>
|
||||
<p>
|
||||
<b class="header">0.2.0</b> <i>August 10th, 2011</i><br />
|
||||
Multiple instances of VisualSearch on a single page. <tt>VS.init</tt> now returns
|
||||
a reference to the instance. The <tt>search</tt> callback now contains both the
|
||||
serialized search query and a reference to the search query collection (as a
|
||||
<a href="http://documentcloud.github.com/backbone/#Collection">Backbone.Collection</a>),
|
||||
which can be used to manipulate each facet directly. See
|
||||
<a href="docs/search_query.html">the source code for search_query.js</a> for available
|
||||
methods on the collection.
|
||||
</p>
|
||||
<p>
|
||||
<b class="header">0.1.0</b> <i>June 23rd, 2011</i><br />
|
||||
Initial release of VisualSearch.js.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<a href="http://documentcloud.org/" title="A DocumentCloud Project" style="background:none;">
|
||||
<img src="http://jashkenas.s3.amazonaws.com/images/a_documentcloud_project.png" alt="A DocumentCloud Project" />
|
||||
</a>
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -880,60 +880,6 @@ label.error {
|
|||
text-align: left;
|
||||
padding: 4px 5px;
|
||||
}
|
||||
/* Shortcuts*/
|
||||
.oe-shortcut-toggle {
|
||||
height: 20px;
|
||||
margin-top: 3px;
|
||||
padding: 0;
|
||||
width: 24px;
|
||||
cursor: pointer;
|
||||
display: block;
|
||||
background: url(/web/static/src/img/add-shortcut.png) no-repeat center center;
|
||||
float: left;
|
||||
}
|
||||
.oe-shortcut-remove{
|
||||
background: url(/web/static/src/img/remove-shortcut.png) no-repeat center center;
|
||||
}
|
||||
.oe-shortcuts {
|
||||
position: absolute;
|
||||
margin: 0;
|
||||
padding: 6px 15px;
|
||||
top: 37px;
|
||||
left: 197px;
|
||||
right: 0;
|
||||
height: 17px;
|
||||
line-height: 1.2;
|
||||
}
|
||||
.oe-shortcuts ul {
|
||||
display: block;
|
||||
overflow: hidden;
|
||||
list-style: none;
|
||||
white-space: nowrap;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
}
|
||||
.oe-shortcuts li {
|
||||
cursor: pointer;
|
||||
display: -moz-inline-stack;
|
||||
display: inline-block;
|
||||
display: inline; /*IE7 */
|
||||
color: #fff;
|
||||
text-align: center;
|
||||
border-left: 1px solid #909090;
|
||||
padding: 0 4px;
|
||||
font-size: 80%;
|
||||
font-weight: normal;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
.oe-shortcuts li:hover {
|
||||
background-color: #666;
|
||||
}
|
||||
.oe-shortcuts li:first-child {
|
||||
border-left: none;
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
ul.oe-arrow-list {
|
||||
padding-left: 1.1em;
|
||||
margin: 0;
|
||||
|
|
Binary file not shown.
|
@ -0,0 +1,198 @@
|
|||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
|
||||
<svg xmlns="http://www.w3.org/2000/svg">
|
||||
<metadata>
|
||||
This is a custom SVG webfont generated by Font Squirrel.
|
||||
Copyright : Creative Commons CC BYSA 2012
|
||||
Designer : Daniel Bruce
|
||||
Foundry : Daniel Bruce
|
||||
Foundry URL : wwwdanielbrucese
|
||||
</metadata>
|
||||
<defs>
|
||||
<font id="EntypoRegular" horiz-adv-x="1228" >
|
||||
<font-face units-per-em="2048" ascent="1536" descent="-512" />
|
||||
<missing-glyph horiz-adv-x="1024" />
|
||||
<glyph unicode=" " horiz-adv-x="1024" />
|
||||
<glyph unicode="	" horiz-adv-x="1024" />
|
||||
<glyph unicode=" " horiz-adv-x="1024" />
|
||||
<glyph unicode="!" horiz-adv-x="972" d="M103 246q1 10 2 28.5t14.5 35t36.5 34.5q39 31 67.5 44t52 4t33.5 -17t37 -37q43 -43 198.5 114.5t114.5 198.5q-49 49 -55 74q-8 43 49 117q18 23 36 37t35 15t28.5 1t29 -12.5t23.5 -17.5t24.5 -24.5t20.5 -21.5q47 -47 -6 -186t-196.5 -282.5t-283 -196t-186.5 -4.5 l-20 18q-20 20 -24.5 25.5t-18 24t-12.5 28.5z" />
|
||||
<glyph unicode=""" horiz-adv-x="798" d="M102 113v798q0 41 31 72t72 31h389q43 0 72.5 -31t29.5 -72v-798q0 -43 -29.5 -73t-72.5 -30h-389q-41 0 -72 30t-31 73zM184 205h430v676h-430v-676zM328 102.5q0 -20.5 21.5 -36t49.5 -15.5q31 0 51.5 14.5t20.5 37t-20.5 37t-51.5 14.5q-29 0 -50 -15.5t-21 -36z" />
|
||||
<glyph unicode="#" horiz-adv-x="780" d="M109 971q-18 31 14 49q33 16 47 -16l102 -197q82 23 158 -16t102 -119l136 -385q27 -82 -19.5 -162t-140.5 -113q-96 -29 -179 8t-106 119l-110 396q-20 68 6 136t88 107zM244 614.5q8 -28.5 34.5 -43t55.5 -4.5q27 10 41 37t4 53q-8 29 -34 43.5t-54 4.5q-27 -8 -41 -35 t-6 -55.5z" />
|
||||
<glyph unicode="$" d="M102 639q0 10 11 18l120 82q8 8 27 13q14 6 29 6h182v194q0 20 21 21h45q20 0 20 -21v-880q0 -20 -20 -21h-45q-20 0 -21 21v450h-182q-8 0 -29 4q-20 8 -27 13l-120 84q-11 4 -11 16zM588 860h350q12 0 29 -6q18 -4 26 -12l121 -82q12 -10 12 -19q0 -10 -12 -16 l-121 -84q-6 -4 -26 -12q-20 -4 -29 -4h-309z" />
|
||||
<glyph unicode="%" horiz-adv-x="1128" d="M104 264v375q0 12 1 14t18 -2q23 -12 202 -106t193 -101q20 -10 47 -10q25 0 45 10q14 6 193.5 100.5t202.5 106.5q20 10 20 -12v-375q0 -16 -17.5 -32.5t-33.5 -16.5h-821q-16 0 -33 16.5t-17 32.5zM106.5 797.5q4.5 11.5 24.5 11.5h866q20 0 24.5 -11.5t-4.5 -24.5 t-22 -19q-373 -201 -385 -207q-20 -10 -45 -10q-27 0 -47 10q-12 6 -385 207q-12 6 -21.5 19t-5 24.5z" />
|
||||
<glyph unicode="&" horiz-adv-x="1005" d="M102 113l52 243l297 295l258 260q55 10 129 -63q72 -72 63 -129l-258 -258l-297 -297zM166 258q33 -18 47 -35q23 -23 37 -47l82 19l24 22q-2 45 -51 96q-23 23 -47.5 36t-36.5 16l-14 2l-23 -25z" />
|
||||
<glyph unicode="'" horiz-adv-x="1165" d="M104 252q-2 98 84 197q37 35 236 234.5t272 270.5q82 82 181 56q45 -12 79.5 -47t47.5 -82q27 -98 -54 -179l-485 -485q-43 -45 -90 -47q-49 -6 -82 27q-31 25 -28 76t46 96l342 340q27 27 49 0q27 -25 0 -52l-340 -340q-45 -45 -20 -69q8 -8 25 -8q20 2 47 26l485 486 q51 53 35 110q-14 61 -78 78q-57 16 -108 -35l-508 -508q-66 -76 -64 -144.5t53 -119.5q49 -51 119 -53t146 63l505 508q25 25 51.5 0.5t0.5 -51.5l-508 -508q-84 -84 -189 -84q-102 0 -176 74q-72 72 -74 170z" />
|
||||
<glyph unicode="(" horiz-adv-x="1126" d="M102 528l369 332v-198q317 0 483 -312q51 -100 70 -186q-88 156 -214 201t-339 45v-224z" />
|
||||
<glyph unicode=")" d="M102 530l371 330v-137l-217 -193l217 -200v-144zM358 530l371 330v-198q106 0 186 -51.5t118 -124t61.5 -146.5t27.5 -125l4 -51q-88 158 -172 202t-225 44v-224z" />
|
||||
<glyph unicode="*" horiz-adv-x="1126" d="M102 164q4 20 13.5 54t51.5 119t98.5 150.5t159.5 120t230 54.5v198l369 -330l-369 -344v224q-213 0 -339 -45t-214 -201z" />
|
||||
<glyph unicode="+" horiz-adv-x="1167" d="M102 51v109q0 47 209 125q96 35 132 69.5t36 98.5q0 23 -23.5 49t-31.5 76q-2 12 -23.5 24t-25.5 62q0 16 5 26t9 15l6 2q-10 51 -14 90q-4 55 42 115.5t160.5 60.5t162 -60.5t42.5 -115.5l-14 -90q18 -8 19 -43q-2 -29 -9.5 -44.5t-14.5 -17.5t-14 -7t-10 -17 q-8 -49 -31.5 -76t-23.5 -49q0 -63 36 -98.5t130 -69.5q209 -78 209 -125v-109h-481h-482z" />
|
||||
<glyph unicode="," d="M102 76v180q0 45 88 80q76 31 105 61.5t29 85.5q0 20 -18.5 45t-26.5 68q-2 10 -18.5 21.5t-20.5 54.5q0 14 4 23.5t8 13.5l4 2q-8 45 -10 80q-4 49 32.5 102t129 53t130 -53t33.5 -102l-10 -80q14 -8 14 -39q-2 -27 -7 -40.5t-11 -14.5t-11 -6t-7 -15 q-8 -43 -26.5 -67.5t-18.5 -45.5q0 -55 28.5 -85.5t104.5 -61.5q188 -76 188 -125v-135h-713zM688 616q0 10 3 17.5t5 9.5l4 2q-6 33 -8 60q-2 37 25.5 76.5t97.5 39.5q68 0 96.5 -40t26.5 -76l-8 -60q10 -6 10 -29q-2 -33 -14.5 -41t-14.5 -16q-6 -33 -19 -51.5t-13 -32.5 q0 -41 21.5 -65.5t78.5 -47.5q113 -45 135 -79q4 -8 7 -59.5t5 -100.5v-47h-229v147q0 53 -30.5 80t-157.5 88q43 31 43 84q0 14 -14.5 32.5t-20.5 51.5q-2 8 -14.5 16t-14.5 41z" />
|
||||
<glyph unicode="-" d="M102 51v205q18 8 48 17.5t34 11.5q96 35 132 69.5t36 98.5q0 23 -23.5 49t-31.5 76q-2 12 -23.5 24t-25.5 62q0 16 5 26t9 15l6 2q-10 51 -14 90q-4 55 43 115.5t164 60.5q115 0 162 -60.5t43 -115.5l-15 -90q20 -8 21 -43q-4 -49 -25.5 -61.5t-23.5 -24.5 q-8 -49 -32 -76t-24 -49q0 -63 36 -98.5t132 -69.5q186 -70 187 -125v-109h-820zM717 461v102h153v154h103v-154h153v-102h-153v-154h-103v154h-153z" />
|
||||
<glyph unicode="." d="M102 205v614q0 41 30 72t73 31h819q41 0 71.5 -31t30.5 -72v-614q0 -43 -30.5 -73t-71.5 -30h-819q-43 0 -73 30t-30 73zM205 205h819v614h-819v-614zM307 311v92h256v-92h-256zM307 465v92h256v-92h-256zM307 618v93h256v-93h-256zM666 311q0 72 4 72q88 25 88 68 q0 16 -29 57t-29 90q0 113 93 113q51 0 71.5 -28t20.5 -85q0 -49 -28 -90t-28 -57q0 -18 21.5 -36t42.5 -26l22 -6l7 -72h-256z" />
|
||||
<glyph unicode="/" d="M102 164v563q0 23 14.5 37t37.5 14h295q-33 -25 -62 -50.5t-39 -39.5l-12 -12h-131v-461h665v55l103 86v-192q0 -20 -15.5 -35.5t-35.5 -15.5h-768q-23 0 -37.5 15.5t-14.5 35.5zM373 342q0 8 1 23.5t9 57.5t22.5 81t45 86t72.5 81t110.5 57.5t152.5 23.5v159l340 -256 l-340 -266v182q-170 0 -248.5 -43t-164.5 -186z" />
|
||||
<glyph unicode="0" horiz-adv-x="716" d="M102 666q0 106 75 181t181.5 75t181 -75t74.5 -181q0 -211 -223 -519l-33 -45q-10 12 -27.5 36t-61.5 91.5t-77.5 133t-61.5 150.5t-28 153zM219 662q0 -57 41 -97.5t98.5 -40.5t97.5 40t40 97.5t-40 98.5t-98 41q-59 0 -99 -40t-40 -99z" />
|
||||
<glyph unicode="1" d="M102 137v600q0 18 17 29l239 152q18 10 35 0l221 -140l224 140q18 10 34 0l240 -152q14 -10 14 -29v-600q0 -20 -16 -31q-8 -4 -16.5 -4t-16.5 4l-223 140l-221 -140q-18 -10 -35 0l-221 140l-223 -140q-16 -10 -33 0q-19 11 -19 31zM170 199l172 108v518l-172 -108v-518 zM410 307l172 -108v518l-172 108v-518zM649 199l172 108v518l-172 -108v-518zM889 307l172 -108v518l-172 108v-518z" />
|
||||
<glyph unicode="2" horiz-adv-x="1191" d="M104 506q-2 203 139.5 348t344.5 150q205 2 350 -139.5t149 -346.5q2 -203 -140 -349t-345 -149q-205 -4 -350.5 138.5t-147.5 347.5zM207 506q4 -160 117.5 -272.5t275.5 -110.5t273.5 117.5t109.5 275.5q-2 162 -116.5 273.5t-276.5 109.5t-273.5 -116.5t-109.5 -276.5 zM362 281q4 27 12.5 68.5t42.5 131.5t77 133q45 45 128 78t144 45l61 11q-4 -27 -11 -69t-41 -132t-79 -133q-45 -45 -128 -78t-144 -45zM524 514q0 -31 20.5 -51.5t50.5 -20.5t50 21q53 53 90 192q-137 -37 -190 -90q-21 -20 -21 -51z" />
|
||||
<glyph unicode="3" horiz-adv-x="1085" d="M102 516q453 254 711 379q23 10 50.5 25.5t38.5 20.5t26.5 9t24 1t16.5 -11t11 -17.5t-1 -23.5t-9 -25.5t-20.5 -40t-25.5 -49.5q-55 -115 -149.5 -293t-160.5 -298l-67 -121l-58 389zM565 553l29 -238l283 525z" />
|
||||
<glyph unicode="4" horiz-adv-x="1085" d="M102 512q0 182 129 311t311.5 129t311.5 -129t129 -311t-129 -311t-311.5 -129t-311.5 129t-129 311zM184 475q14 -127 104.5 -217t217.5 -102v196h72v-196q127 12 217 102t104 217h-199v72h199q-14 127 -104 218t-217 103v-198h-72v198q-127 -12 -217 -103t-105 -218 h199v-72h-199z" />
|
||||
<glyph unicode="5" horiz-adv-x="1024" d="M102 512q0 63 45.5 108.5t108.5 45.5q53 0 92 -33l268 162q-2 8 -2 24q0 63 45.5 108.5t108.5 45.5t108.5 -45t45.5 -108.5t-45.5 -108.5t-108.5 -45q-49 0 -94 30l-268 -159q4 -16 4 -24.5t-4 -25.5l268 -161q43 33 94 32q63 0 108.5 -45t45.5 -108.5t-45.5 -108.5 t-108.5 -45t-108.5 45t-45.5 109q0 16 2 24l-268 160q-41 -31 -92 -31q-63 0 -108.5 45.5t-45.5 108.5z" />
|
||||
<glyph unicode="6" horiz-adv-x="1089" d="M104 651q0 94 72 160q66 57 156 57t153 -57l60 -53l57 53q66 57 156 57t155 -57q72 -66 72 -160t-72 -159l-368 -338l-369 338q-72 65 -72 159z" />
|
||||
<glyph unicode="7" horiz-adv-x="1105" d="M102 618h328l123 345l121 -345h330l-269 -202l94 -355l-276 213l-279 -213l95 355z" />
|
||||
<glyph unicode="8" horiz-adv-x="1126" d="M102 227v316q0 45 43 45h162v-410h-160q-45 0 -45 49zM358 178v410h17q57 0 128.5 75.5t90.5 133.5q6 23 8 66.5t12.5 63t38.5 19.5q74 0 74 -141l-10 -160q129 4 188 4q119 0 119 -149v-246q0 -61 -72.5 -119.5t-152.5 -58.5h-215q-51 0 -109 51t-117 51z" />
|
||||
<glyph unicode="9" d="M102 307v307q0 41 31 72t72 31h194v-318h359h10v-92q0 -43 -29.5 -72.5t-72.5 -29.5h-256l-154 -154v154h-51q-41 0 -72 29.5t-31 72.5zM461 461v409q0 41 30.5 72t71.5 31h461q43 0 72.5 -31t29.5 -72v-307q0 -43 -29.5 -72.5t-72.5 -29.5h-51v-154l-154 154h-358z" />
|
||||
<glyph unicode=":" horiz-adv-x="1024" d="M102 410v358q0 41 30 71.5t73 30.5h614q41 0 72 -30.5t31 -71.5v-358q0 -43 -31 -73t-72 -30h-205v-153l-204 153h-205q-43 0 -73 30t-30 73z" />
|
||||
<glyph unicode=";" horiz-adv-x="983" d="M102 174v72q115 0 185 110q55 88 26 150q-16 37 -63 37q-61 0 -104.5 45t-43.5 108.5t43 108.5t105 45q150 0 188 -150q39 -143 -41 -309q-82 -172 -227 -209q-33 -8 -68 -8zM532 174v72q115 0 185 110q55 88 26 150q-16 37 -63 37q-61 0 -104.5 45t-43.5 108.5t43 108.5 t105 45q150 0 188 -150q39 -143 -41 -309q-82 -172 -227 -209q-33 -8 -68 -8z" />
|
||||
<glyph unicode="<" horiz-adv-x="1208" d="M102 393v180q0 23 17.5 42.5t38.5 19.5h891q20 0 38.5 -19.5t18.5 -42.5v-180q0 -20 -18.5 -40.5t-38.5 -20.5h-101l45 -256h-778l45 256h-102q-20 0 -38 20.5t-18 40.5zM146.5 716q3.5 9 11.5 11q23 10 104.5 38t99.5 28h48v153h389v-153h45q18 0 100 -28t105 -38 q8 -2 11 -11t-3 -17.5t-19 -8.5h-870q-12 0 -18.5 8.5t-3 17.5zM317 178h574l-72 334h-430z" />
|
||||
<glyph unicode="=" horiz-adv-x="1026" d="M105.5 672.5q9.5 109.5 113.5 197.5q18 14 24.5 29.5t6.5 25t6 19.5t25 17q27 10 48 -10.5t54 -20.5q135 2 204.5 -67.5t164.5 -274.5q16 -35 40.5 -53.5t46 -22.5t45 -23.5t36.5 -56.5q23 -63 -77 -164.5t-259 -161.5q-168 -57 -303.5 -44.5t-157.5 75.5 q-20 57 12.5 115.5t18.5 114.5q-58 196 -48.5 305.5zM193 164q4 -12 51 -23.5t137 -5.5t180 39t163 87t101.5 93t24.5 54q-6 20 -48 31.5t-128 1t-190.5 -49.5t-177.5 -88t-96 -85t-17 -54zM274 231q82 72 224 121q8 4 39 15v-2q14 -41 -18 -84t-89 -64q-99 -39 -156 14z " />
|
||||
<glyph unicode=">" horiz-adv-x="1024" d="M102 295q0 78 58 135l153 152q72 72 147 81t130 -47q16 -14 16 -34.5t-16 -36.5q-14 -16 -36 -16.5t-36 16.5q-49 49 -133 -35l-154 -152q-27 -27 -26 -63q0 -35 26 -66q27 -27 66 -26.5t65 26.5l41 43q37 33 72 -2q16 -14 16.5 -35.5t-16.5 -35.5l-41 -41 q-57 -55 -137 -55.5t-137 55.5q-58 57 -58 137zM436 401q-35 37 0 72q14 14 35 14t37 -14q49 -49 123 25l164 161q27 27 26 64q0 35 -26 65q-68 61 -121 9l-51 -52q-37 -33 -72 3q-14 14 -14 34.5t14 36.5l51 51q55 53 130 50.5t134 -60.5q55 -55 56 -137q0 -80 -56 -135 l-164 -162q-76 -76 -153 -76q-64 0 -113 51z" />
|
||||
<glyph unicode="?" horiz-adv-x="1126" d="M102 815l95 33q92 68 155.5 88t99 4t64.5 -51t63.5 -73t81 -63.5t132.5 -20.5t204 52q14 6 22.5 -1t0.5 -19q-98 -141 -169 -218t-114 -92.5t-73.5 -2t-61.5 38t-65.5 40t-95 -4t-140.5 -87.5l92 -362h-104z" />
|
||||
<glyph unicode="@" horiz-adv-x="1064" d="M102 377q82 47 82 135q0 78 -82 125q12 43 35 86q76 -18 139 45q55 55 35 139q43 23 84 35q51 -82 137 -82q84 0 136 82q41 -12 84 -35q-20 -84 34 -139q63 -63 140 -45q20 -39 37 -86q-84 -47 -84 -125t84 -125q-16 -47 -37 -86q-76 18 -140 -45q-55 -59 -34 -139 q-43 -23 -84 -35q-51 82 -136 82q-86 0 -137 -82q-41 12 -84 35q20 80 -35 139q-55 55 -139 35q-23 43 -35 86zM344 512q0 -78 55.5 -132t133 -54t132 54t54.5 132t-54.5 132t-132 54t-133 -54t-55.5 -132z" />
|
||||
<glyph unicode="A" horiz-adv-x="1128" d="M109 183q-5 16 -5 29q0 19 11 30l417 417q-2 18 -2 37q0 30 7 61q10 48 26 64l137 137q13 15 40 16q23 0 56 -11q71 -25 132 -86q63 -63 88 -135q11 -33 11 -55q0 -26 -15 -38l-140 -139q-16 -16 -63 -27q-29 -6 -61 -6q-19 0 -37 2l-418 -418q-11 -11 -28 -10 q-13 0 -29 5q-39 13 -76 50q-39 37 -51 77zM458 487q0 -17 11 -28q13 -13 30 -14q24 0 54 28q20 20 23.5 44t-11 38t-38 10t-44.5 -24q-25 -25 -25 -54zM737 921.5q-2 -1.5 -2 -7.5q0 -7 3 -21q5 -25 25.5 -62.5t51.5 -68.5q29 -29 68 -49.5t63 -25.5q14 -3 21 -3q6 0 8 2 q2 1 1 5q0 7 -3 22q-6 25 -27.5 62.5t-50.5 66.5q-31 31 -69 51t-61 27q-14 4 -21 3q-5 0 -7 -1.5z" />
|
||||
<glyph unicode="B" horiz-adv-x="1126" d="M102 852q0 16 10.5 26.5t26.5 10.5h176q51 94 248 94q199 0 250 -94h176q14 0 24.5 -11.5t10.5 -25.5q0 -78 -21.5 -140.5t-64.5 -109.5t-76 -73.5t-90 -63.5q-80 -53 -113.5 -89t-33.5 -87v-68q74 -8 121 -31.5t47 -56.5q0 -39 -67 -65.5t-163 -26.5q-94 0 -160.5 26.5 t-66.5 65.5q0 33 47 56.5t121 31.5v68q0 51 -34 86t-116 90q-57 39 -89 63.5t-76 72.5t-65.5 110.5t-21.5 140.5zM176 817q8 -94 55.5 -153.5t128.5 -116.5q-49 106 -55 270h-129zM369 841.5q0 -12.5 18.5 -29.5t65.5 -32.5t110 -15.5q66 0 113 15.5t64.5 32.5t17.5 29.5 t-17.5 30t-64.5 33t-113 15.5q-63 0 -110 -15.5t-65.5 -33t-18.5 -30zM766 547q82 55 129 115.5t55 154.5h-129q-2 -157 -55 -270z" />
|
||||
<glyph unicode="C" horiz-adv-x="1189" d="M104 368q4 22 21 33l477 338q25 16 55 17l162 2q31 -4 47 -27l29 -41q132 98 132 216q0 37 -13 77q-10 29 18 39q8 3 14 3q18 0 25 -21q16 -48 16 -94q0 -57 -25 -110q-46 -95 -132 -161l18 -27q16 -23 8 -55l-51 -160q-12 -31 -35 -47l-477 -338q-18 -13 -33 -13 q-17 0 -30 17l-217 314q-9 12 -10 27q0 6 1 11zM723 605q-2 -8 -2 -16q0 -24 14 -44q20 -29 53 -35q8 -1 15 -1q24 0 47 15q34 24 34 65q0 8 -1 17l-31 -18q-4 -2 -14 -2q-20 0 -27 16q-14 27 14 43q2 0 25 12q-24 19 -49 19l-45 -17q-27 -20 -33 -54z" />
|
||||
<glyph unicode="D" d="M102 205v461q0 41 31 71.5t72 30.5h123q33 0 41 29l32 96q8 29 39 29h348q35 0 41 -29l33 -96q6 -29 39 -29h123q43 0 72.5 -30.5t29.5 -71.5v-461q0 -43 -29.5 -73t-72.5 -30h-819q-41 0 -72 30t-31 73zM358 460.5q0 -106.5 75 -181t181.5 -74.5t181 74.5t74.5 181 t-74.5 181.5t-181 75t-181.5 -75t-75 -181.5zM461 460.5q0 63.5 45 108.5t108.5 45t108.5 -45t45 -108.5t-45 -108.5t-108.5 -45t-108.5 45t-45 108.5zM952 628.5q0 -14.5 11.5 -24.5t26 -10t24.5 10t10 25q0 37 -35 37q-14 0 -25.5 -11.5t-11.5 -26z" />
|
||||
<glyph unicode="E" horiz-adv-x="1046" d="M102 322q100 -58 216 -59q30 0 62 4q151 19 259.5 128t127.5 259q4 31 4 62q0 115 -58 216q55 -31 98 -74q131 -133 131 -317.5t-131 -317.5q-131 -131 -316.5 -131t-316.5 131q-43 44 -76 99z" />
|
||||
<glyph unicode="F" horiz-adv-x="1210" d="M104 475q10 121 107.5 241t220.5 156q100 28 196 29q188 0 353 -110q74 -49 104 -114q24 -50 24 -87q0 -11 -2 -21q-9 -43 -36 -49q-16 -4 -55 10q-30 11 -63 12q-9 0 -19 -1q-43 -4 -84 -47q-24 -36 -24 -62q0 -8 2 -14q9 -29 35 -67t26 -52q0 -18 -22.5 -45 t-65.5 -57.5t-123 -52t-178 -21.5q-190 0 -298 102q-98 93 -98 225q-1 12 0 25zM578 389q0 -31 22.5 -53.5t55 -22.5t55 22.5t22.5 53.5q0 33 -22.5 55.5t-55 22.5t-55 -22.5t-22.5 -55.5z" />
|
||||
<glyph unicode="G" horiz-adv-x="1169" d="M104 180q45 102 132.5 197.5t181.5 157t181 108.5t142 68l58 20q-16 0 -43 -1t-106 -14.5t-152.5 -39t-166.5 -86t-163 -144.5q-4 30 -4 59q0 203 180 308q135 79 347 79q80 0 171 -11q174 -20 203 -52q2 -2 2 -4q0 -3 -4 -6q-78 -41 -133.5 -111.5t-81 -135t-67.5 -134 t-95 -106.5q-73 -52 -175 -52q-96 0 -216 46q-68 -76 -115 -179q-7 -15 -23 -14q-11 0 -26 6q-29 13 -29 31q0 5 2 10z" />
|
||||
<glyph unicode="H" horiz-adv-x="800" d="M111 115q-7 19 -7 38q0 39 27 79q41 60 119 90q45 17 87 16q39 0 75 -14v669h82q0 -37 31.5 -80t69.5 -79.5t70.5 -89t32.5 -105.5t-43 -129q-20 -33 -26 -14q-2 6 0 14q10 18 7 58t-13.5 80t-45 74t-83.5 42v-547q2 -51 -39 -98t-107 -72q-46 -17 -89 -17q-29 0 -57 8 q-68 20 -91 77z" />
|
||||
<glyph unicode="I" horiz-adv-x="1087" d="M104 774q-1 6 -1 13q0 30 26 49q8 8 57.5 46t55.5 44q18 16 55 16h494q35 0 57 -16q8 -8 57 -46t56 -44q24 -20 23 -49q0 -6 -1 -13l-98 -663q-10 -29 -41 -29h-600q-31 0 -41 29q-95 636 -99 663zM184 768h721l-114 117h-494zM334 674q49 -283 211 -283q160 0 209 283 h-95q-39 -190 -114 -191q-78 0 -117 191h-94z" />
|
||||
<glyph unicode="J" d="M102 338l82 174l-82 174h103l114 -102h183l-127 409h102l230 -409h266h16q10 0 37 -4.5t47.5 -11.5t36.5 -21.5t16 -34.5q0 -33 -38.5 -50.5t-75.5 -19.5l-39 -2h-266l-230 -409h-102l127 409h-183l-114 -102h-103z" />
|
||||
<glyph unicode="K" horiz-adv-x="1150" d="M104 512q0 191 134 328q135 139 329 143h6q191 0 329 -134q140 -136 145 -331v-6q0 -191 -135 -329q-136 -140 -330 -142h-12q-187 0 -323 133q-143 140 -143 338zM211 324l106 63q-29 57 -28.5 125t28.5 125l-106 63q-45 -86 -45 -185q0 -107 45 -191zM350 512 q0 -94 65.5 -159.5t159.5 -65.5q92 0 159 65.5t67 159.5t-66.5 159.5t-159.5 65.5q-94 0 -159.5 -65.5t-65.5 -159.5zM385 147q94 -45 187 -45h8q94 0 184 48l-64 104q-61 -29 -125 -29q-66 0 -126 29zM385 874l64 -104q61 29 126 29q63 0 125 -29l64 104q-90 47 -195 48 q-100 -5 -184 -48zM831 387l107 -63q47 88 47 194q-2 98 -47 182l-107 -63q31 -61 31 -125t-31 -125z" />
|
||||
<glyph unicode="L" horiz-adv-x="1146" d="M102 352q0 96 54.5 175t142.5 114q12 143 118.5 242.5t254.5 99.5q154 0 263 -109.5t109 -263.5q0 -145 -99 -251.5t-243 -118.5q-35 -88 -113.5 -143.5t-176.5 -55.5q-127 0 -218.5 91t-91.5 220zM102 868q0 43 31 75t76 32q43 0 73.5 -32t30.5 -75q0 -45 -30.5 -75.5 t-73.5 -30.5q-45 0 -76 30.5t-31 75.5zM150 868.5q0 -24.5 17 -42t42 -17.5q23 0 40 17.5t17 42t-17.5 41t-39.5 16.5q-25 0 -42 -16.5t-17 -41zM205 352q0 -86 61.5 -146.5t145.5 -60.5q119 0 180 103q-106 23 -184 99.5t-101 182.5q-102 -61 -102 -178zM416 559 q14 -76 70.5 -131t134.5 -72q-2 82 -61.5 141.5t-143.5 61.5zM416 662q125 0 215 -89.5t92 -216.5q90 16 149.5 89t59.5 165q0 106 -77 183t-183 77q-94 0 -166 -59t-90 -149z" />
|
||||
<glyph unicode="M" d="M102 512q0 14 20.5 45t64.5 73t101.5 80t144.5 63.5t181.5 25.5t181.5 -25.5t144 -63.5t101 -80t64.5 -73t20.5 -45t-20.5 -45t-64.5 -73t-101 -80t-144 -63.5t-181.5 -25.5t-181.5 25.5t-144.5 63.5t-101.5 80t-64.5 73t-20.5 45zM385 512q0 -92 66.5 -156.5 t162.5 -64.5q94 0 161 64.5t67 156.5q0 90 -66.5 155.5t-161 65.5t-162 -65.5t-67.5 -155.5zM500 512q0 45 33.5 78t80.5 33q14 0 10.5 -24t-12 -48.5t1.5 -38.5q6 -8 36 -3t51.5 11t25.5 -8q0 -45 -32.5 -78t-80 -33t-81 33t-33.5 78z" />
|
||||
<glyph unicode="N" horiz-adv-x="1146" d="M102 512q0 195 138.5 333t333 138t332.5 -138t138 -333t-138 -333t-332.5 -138t-333 138t-138.5 333zM205 512q0 -152 107.5 -260.5t260.5 -108.5q152 0 260.5 108.5t108.5 260.5t-108.5 260.5t-260.5 108.5q-154 0 -261 -108.5t-107 -260.5zM537 498v280h71v-252 l154 -153l-51 -49z" />
|
||||
<glyph unicode="O" horiz-adv-x="860" d="M102 492v141q0 20 21 20h31q20 0 20 -20v-141q0 -68 60.5 -126.5t195.5 -58.5t195.5 59.5t60.5 125.5v141q0 20 21 20h30q20 0 21 -20v-141q0 -94 -71 -168t-206 -86v-136h133q20 0 21 -20v-62q0 -20 -21 -20h-368q-20 0 -21 20v62q0 20 21 20h133v136q-135 12 -206 86 t-71 168zM276 492v161h308v-161q0 -31 -37 -56.5t-117 -25.5q-82 0 -118 25.5t-36 56.5zM276 725v217q0 31 36 56.5t118 25.5q80 0 117 -25.5t37 -56.5v-217h-308z" />
|
||||
<glyph unicode="P" horiz-adv-x="1126" d="M102 154v614q0 41 30 71.5t73 30.5h45v-102h164v102h297v-102h163v102h48q41 0 71.5 -30.5t30.5 -71.5v-614q0 -43 -30.5 -73t-71.5 -30h-717q-43 0 -73 30t-30 73zM205 154h717v409h-717v-409zM297 799v174h72v-174h-72zM758 799v174h71v-174h-71z" />
|
||||
<glyph unicode="Q" horiz-adv-x="618" d="M104 536q0 16 86 122q90 112 184 215q90 99 98 100q5 -4 -76 -191q-79 -182 -79 -192q2 -5 97.5 -44.5t99.5 -56.5q0 -17 -88 -124q-90 -111 -183 -214q-90 -99 -97 -100q-5 2 35 94.5t81 187.5q39 91 39 100q-2 7 -97 47q-100 42 -100 56z" />
|
||||
<glyph unicode="R" horiz-adv-x="778" d="M102 115v118q0 37 31 79t69 73t68.5 66.5t30.5 60.5q0 27 -30.5 61.5t-68.5 65.5t-69 72t-31 77v121q0 35 88.5 75t199 40t198.5 -40t88 -75v-121q0 -37 -31 -77.5t-68.5 -71.5t-68.5 -65.5t-31 -61.5q0 -25 31 -60.5t68.5 -66.5t68.5 -73t31 -79v-118q0 -35 -88 -75 t-198.5 -40t-199 40t-88.5 75zM164 840l2 -52q0 -35 92 -122q6 -6 22.5 -21.5t23.5 -22.5l20 -20q12 -12 17 -21.5t11 -20.5t9.5 -23.5t3.5 -24.5q0 -14 -5.5 -29.5t-9.5 -24.5t-18.5 -25.5t-20.5 -23t-26.5 -25.5t-26.5 -26q-92 -88 -92 -125v-67q8 4 68.5 23.5t95.5 45 t35 60.5q0 18 12 25.5t25.5 0t13.5 -25.5q0 -35 34.5 -60.5t95 -45t68.5 -23.5v67q0 35 -94 125q-4 4 -29.5 29t-31.5 32t-20.5 25.5t-18.5 34t-4 33.5t4 33.5t18.5 34t20.5 25.5t31.5 32t29.5 29q94 90 94 122l2 52q-106 -53 -227 -54q-123 1 -225 54zM164 889q-1 -3 -2 -5 q0 -5 6 -7q90 -55 221 -56q135 0 225 51q5 3 6 9q0 10 -22 24q-96 55 -205 56q-125 0 -211 -56z" />
|
||||
<glyph unicode="S" horiz-adv-x="983" d="M102 240q0 47 34 80.5t81 33.5q49 0 83 -33.5t34 -80.5q0 -49 -34 -83t-83 -34q-47 0 -81 34t-34 83zM102 537v120q221 0 378 -156.5t157 -377.5h-121q0 172 -122 293t-292 121zM102 780v121q322 0 550.5 -228.5t228.5 -549.5h-123q0 272 -192 464.5t-464 192.5z" />
|
||||
<glyph unicode="T" horiz-adv-x="1208" d="M102 711q209 211 503 211t501 -211l-72 -72q-178 180 -430 180t-430 -180zM246 567q150 150 359.5 150t357.5 -150l-72 -73q-119 121 -286 120.5t-288 -120.5zM389 422q90 90 215 90t215 -90l-71 -72q-59 59 -143.5 59.5t-143.5 -59.5zM504 205q0 43 29.5 72.5t70.5 29.5 q43 0 73 -29.5t30 -72.5t-30 -73t-73 -30q-41 0 -70.5 30t-29.5 73z" />
|
||||
<glyph unicode="U" horiz-adv-x="921" d="M102 178v400q0 23 15.5 42t36.5 19h102v72q0 236 205 235q100 0 152.5 -61.5t52.5 -173.5v-72h92q20 0 40.5 -20.5t20.5 -40.5v-400q0 -20 -14 -39.5t-35 -25.5l-61 -21q-53 -16 -101 -16h-297q-47 0 -100 16l-61 21q-20 6 -34 25.5t-14 39.5zM358 639h205v92 q0 113 -102.5 113t-102.5 -113v-92z" />
|
||||
<glyph unicode="V" horiz-adv-x="921" d="M102 154v399q0 23 15.5 42t36.5 19h409v144q0 53 -27.5 82.5t-74.5 29.5q-102 0 -103 -112v-41h-102v20q0 113 52 174.5t152.5 61.5t153 -61.5t52.5 -174.5v-123h92q20 0 40.5 -20.5t20.5 -40.5v-399q0 -20 -14 -41t-35 -27l-61 -18q-43 -16 -101 -17h-297q-57 0 -100 17 l-61 18q-20 6 -34 25.5t-14 42.5z" />
|
||||
<glyph unicode="W" horiz-adv-x="890" d="M104 476q4 30 29 48q23 16 52.5 12t45.5 -26l121 -160l303 488q14 25 44 31q9 2 18 3q20 0 37 -12q25 -14 31 -44q2 -9 3 -17q0 -20 -12 -37l-356 -576q-23 -33 -58 -32h-4q-35 0 -57 28l-182 242q-15 18 -15 42q-1 5 0 10z" />
|
||||
<glyph unicode="X" horiz-adv-x="686" d="M102 306.5q0 25.5 19 43.5l141 162l-141 162q-18 16 -18.5 41.5t18 44t44 18.5t42.5 -18l137 -156l135 156q18 18 44 18t42 -18q18 -18 18.5 -44t-18.5 -42l-141 -162l141 -162q18 -18 18.5 -43.5t-18.5 -42.5q-16 -18 -41.5 -18t-44.5 18l-135 154l-137 -154 q-16 -18 -42 -18t-44 18q-19 17 -19 42.5z" />
|
||||
<glyph unicode="Y" horiz-adv-x="1064" d="M102 512q0 178 126 304t304.5 126t304.5 -126t126 -304t-126 -304t-304.5 -126t-304.5 126t-126 304zM272 461h519v104h-519v-104z" />
|
||||
<glyph unicode="Z" horiz-adv-x="1064" d="M102 512q0 178 126 304t304.5 126t304.5 -126t126 -304t-126 -304t-304.5 -126t-304.5 126t-126 304zM274 459h207v-205h105v205h207v104h-207v207h-105v-207h-207v-104z" />
|
||||
<glyph unicode="[" horiz-adv-x="1064" d="M102 512q0 178 126 304t304.5 126t304.5 -126t126 -304t-126 -304t-304.5 -126t-304.5 126t-126 304zM287 354l88 -88l157 158l156 -158l88 88l-155 158l155 156l-88 90l-156 -158l-157 158l-88 -90l155 -156z" />
|
||||
<glyph unicode="\" horiz-adv-x="798" d="M102 512q0 51 31 51h533q31 0 30.5 -51t-30.5 -51h-533q-31 0 -31 51z" />
|
||||
<glyph unicode="]" horiz-adv-x="798" d="M102 512q0 51 31 51h215v215q0 31 51.5 31t51.5 -31v-215h215q31 0 30.5 -51t-30.5 -51h-215v-215q0 -31 -51.5 -31t-51.5 31v215h-215q-31 0 -31 51z" />
|
||||
<glyph unicode="^" horiz-adv-x="1146" d="M102 512q0 195 138.5 333t333 138t332.5 -138t138 -333t-138 -333t-332.5 -138t-333 138t-138.5 333zM215 512q0 -131 80 -227l504 503q-98 82 -226 82q-150 0 -254 -104t-104 -254zM319 258zM346 233q100 -80 227 -79q147 0 253 104t106 254q0 129 -82 227zM825 766z " />
|
||||
<glyph unicode="_" horiz-adv-x="675" d="M102 487q92 80 193.5 129.5t155.5 49.5q78 0 34 -166l-71 -275q-16 -66 6 -65q43 0 123 61l30 -41q-88 -88 -180 -134t-143 -46q-102 0 -55 180l61 260q16 59 0 60q-14 0 -56 -18.5t-71 -39.5zM326 897q0 45 36.5 86t98.5 41q49 0 76.5 -28.5t27.5 -71.5q0 -51 -40 -90 t-97 -39q-49 0 -76.5 27.5t-25.5 74.5z" />
|
||||
<glyph unicode="`" horiz-adv-x="1150" d="M104 506q-2 195 134.5 335t330.5 142q195 4 335 -133t142.5 -331.5t-134 -334t-330.5 -143.5q-195 -2 -334.5 134t-143.5 331zM410 508l16 -29q47 35 78 35q8 0 0 -35l-39 -153q-29 -109 35 -109q31 0 86 27.5t108 81.5l-18 24q-49 -37 -74 -37q-12 0 -4 39l43 162 q27 98 -20 98q-31 0 -92.5 -28.5t-118.5 -75.5zM532 750q-2 -29 15.5 -44.5t50.5 -15.5q39 0 62.5 22.5t23.5 53.5q0 59 -61 59q-43 0 -67 -23t-24 -52z" />
|
||||
<glyph unicode="a" horiz-adv-x="798" d="M102 692q6 168 115 236q70 45 170 45q133 0 221 -63.5t88 -186.5q0 -68 -43 -129q-20 -25 -92 -80l-45 -33q-41 -29 -51 -61q-6 -18 -6 -45q0 -14 -17 -15h-131q-16 0 -16 15q4 100 27 127q18 20 51 46.5t57 43.5l25 16q25 20 32 35q29 37 29 70q0 47 -27 82 q-25 37 -94 36q-68 0 -96 -45q-29 -47 -29 -94h-168zM310 233q30 27 69 27h6q47 -2 77 -32q28 -28 28 -70q0 -3 -1 -6q-2 -47 -32 -75q-29 -26 -72 -26h-6q-45 2 -75 31q-28 27 -28 70q0 50 34 81z" />
|
||||
<glyph unicode="b" horiz-adv-x="1150" d="M104 512q0 191 134 328q135 139 329 143h6q191 0 329 -134q140 -136 145 -331v-6q0 -191 -135 -329q-136 -140 -330 -142h-12q-187 0 -323 133q-143 140 -143 338zM389 616h113v7q0 29 18 55q16 25 53 24q41 0 55.5 -20t14.5 -47q0 -18 -16 -41q-8 -14 -19 -19l-6 -4 l-16.5 -11t-20.5 -15t-21.5 -18.5t-17.5 -18.5q-14 -16 -18 -78v-10h108v4q0 10 5 31q6 16 30 34l29 21q47 39 55 49q27 35 27 82q0 80 -55.5 119t-137.5 39q-61 0 -106 -29q-68 -43 -74 -147v-7zM497 290q0 -25 18 -43q19 -19 50 -22h2q29 0 48.5 18.5t21.5 47.5 q0 68 -70 71h-2q-29 0 -48.5 -19t-19.5 -53z" />
|
||||
<glyph unicode="c" horiz-adv-x="1189" d="M109 94q-5 9 -5.5 18t5.5 17l454 801q12 18 33 18q23 0 31 -18l454 -801q5 -8 5 -17t-5 -18q-10 -16 -30 -16h-912q-20 0 -30 16zM532 180h125v103h-125v-103zM532 360h125v308h-125v-308z" />
|
||||
<glyph unicode="d" horiz-adv-x="1167" d="M102 512q0 174 122 297t296 123q170 0 292 -120t126 -290h127l-188 -209l-189 209h146q-4 127 -95.5 216t-218.5 89q-131 0 -222 -92t-91 -223t91 -223t222 -92q102 0 187 61l71 -78q-115 -88 -258 -88q-174 0 -296 123t-122 297z" />
|
||||
<glyph unicode="e" horiz-adv-x="1167" d="M102 522h125q4 170 126 290t292 120q174 0 297 -123t123 -297t-123 -297t-297 -123q-143 0 -258 88l72 78q84 -61 186 -61q131 0 222 92t91 223t-91 223t-222 92q-127 0 -218 -89t-95 -216h145l-188 -209z" />
|
||||
<glyph unicode="f" d="M102 205v143h109q55 0 107.5 33t82 67.5t84.5 106.5q63 84 103.5 129t120 90t168.5 45h34v123l215 -184l-215 -185v103h-34q-55 0 -108.5 -33t-83.5 -67.5t-85 -106.5q-49 -63 -76.5 -96t-79 -79t-108.5 -67.5t-125 -21.5h-109zM102 666v143h109q139 0 258 -109 q-57 -72 -63 -82q-8 -12 -25 -32q-80 80 -170 80h-109zM608 313q47 59 74 95q0 2 6 9t8 11q90 -90 181 -90h34v102l215 -184l-215 -184v123h-34q-146 -1 -269 118z" />
|
||||
<glyph unicode="g" horiz-adv-x="1075" d="M102 635l215 184v-112h553q43 0 73 -30t30 -73v-297q0 -43 -30 -72.5t-73 -29.5h-706v143h665v215h-512v-112z" />
|
||||
<glyph unicode="h" d="M102 614l195 205l195 -205h-123v-266h227l131 -143h-399q-43 0 -73 29.5t-30 72.5v307h-123zM502 819h399q41 0 72 -29.5t31 -72.5v-307h122l-194 -205l-195 205h123v266h-227z" />
|
||||
<glyph unicode="i" horiz-adv-x="921" d="M102 307.5q0 20.5 14.5 35.5t37.5 15h614q20 0 35.5 -15t15.5 -35.5t-15.5 -36t-35.5 -15.5h-614q-23 0 -37.5 15.5t-14.5 36zM102 512q0 20 14.5 35.5t37.5 15.5h614q20 0 35.5 -15.5t15.5 -35.5t-15.5 -35.5t-35.5 -15.5h-614q-23 0 -37.5 15.5t-14.5 35.5zM102 716.5 q0 20.5 14.5 36t37.5 15.5h614q20 0 35.5 -15.5t15.5 -36t-15.5 -35.5t-35.5 -15h-614q-23 0 -37.5 15t-14.5 35.5z" />
|
||||
<glyph unicode="j" d="M102 307.5q0 20.5 15.5 35.5t36.5 15h307q23 0 37 -15t14 -35.5t-14.5 -36t-36.5 -15.5h-307q-20 0 -36 15.5t-16 36zM102 512q0 20 15.5 35.5t36.5 15.5h307q23 0 37 -15.5t14 -35.5t-14.5 -35.5t-36.5 -15.5h-307q-20 0 -36 15.5t-16 35.5zM102 716.5q0 20.5 15.5 36 t36.5 15.5h307q23 0 37 -15.5t14 -36t-14.5 -35.5t-36.5 -15h-307q-20 0 -36 15t-16 35.5zM621 512q0 51 30 51h168v174q0 31 51.5 31t51.5 -31v-174h174q31 0 30.5 -51t-30.5 -51h-174v-174q0 -31 -51.5 -31t-51.5 31v174h-168q-30 0 -30 51z" />
|
||||
<glyph unicode="k" horiz-adv-x="819" d="M102 287v92q0 82 82 82h92q82 0 82 -82v-92q0 -82 -82 -82h-92q-82 0 -82 82zM102 645v92q0 82 82 82h92q82 0 82 -82v-92q0 -82 -82 -82h-92q-82 0 -82 82zM461 287v92q0 82 82 82h92q82 0 82 -82v-92q0 -82 -82 -82h-92q-82 0 -82 82zM461 645v92q0 82 82 82h92 q82 0 82 -82v-92q0 -82 -82 -82h-92q-82 0 -82 82z" />
|
||||
<glyph unicode="l" horiz-adv-x="921" d="M102 154v716q0 41 30 72t73 31h512q41 0 71.5 -31t30.5 -72v-716q0 -43 -30.5 -73t-71.5 -30h-512q-43 0 -73 30t-30 73zM205 154h512v716h-512v-716zM317 268v88h287v-88h-287zM317 670v90h287v-90h-287zM319 467v92h287v-92h-287z" />
|
||||
<glyph unicode="m" horiz-adv-x="921" d="M102 154v716q0 41 31 72t72 31h512q43 0 72.5 -31t29.5 -72v-716q0 -43 -29.5 -73t-72.5 -30h-512q-41 0 -72 30t-31 73zM205 154h512v716h-512v-716z" />
|
||||
<glyph unicode="n" horiz-adv-x="921" d="M102 307v615q0 20 15.5 35.5t36.5 15.5h409q23 0 37 -15.5t14 -35.5v-154h154q23 0 37 -15.5t14 -35.5v-615q0 -20 -14 -35.5t-37 -15.5h-410q-20 0 -35.5 15.5t-15.5 35.5v154h-153q-20 0 -36 15.5t-16 35.5zM205 358h102v359q0 20 14.5 35.5t36.5 15.5h154v102h-307 v-512zM410 154h307v512h-307v-512z" />
|
||||
<glyph unicode="o" horiz-adv-x="1024" d="M0 256v512q0 41 30.5 71.5t71.5 30.5h820q43 0 72.5 -30.5t29.5 -71.5v-512q0 -43 -29.5 -72.5t-72.5 -29.5h-820q-41 0 -71.5 29.5t-30.5 72.5zM102 256h820v512h-820v-512z" />
|
||||
<glyph unicode="p" d="M106 690q-3 8 -2 15q0 9 4 17q7 15 21 19l696 254q10 4 18 4q22 0 31 -28l107 -289h-102l-127 154l-222 -154h-182q-55 0 -93 -39t-38 -94v-164zM309 66v483q0 16 11.5 28.5t27.5 12.5h739q16 0 27.5 -12.5t11.5 -28.5v-483q0 -16 -11 -28.5t-28 -12.5h-739 q-16 0 -27.5 12.5t-11.5 28.5zM418 129h614v164l-74 166l-172 -62l-133 -137l-141 176l-94 -219v-88z" />
|
||||
<glyph unicode="q" horiz-adv-x="1208" d="M102 195v61h103v102h-103v103h103v102h-103v103h103v102h-103v61q0 16 12.5 28.5t28.5 12.5h922q18 0 29.5 -12t11.5 -29v-61h-102v-102h102v-103h-102v-102h102v-103h-102v-102h102v-61q0 -16 -11.5 -28.5t-29.5 -12.5h-922q-16 0 -28.5 12.5t-12.5 28.5zM492 358 l256 154l-256 154v-308z" />
|
||||
<glyph unicode="r" horiz-adv-x="921" d="M102 154v716q0 41 31 72t72 31h512q43 0 72.5 -31t29.5 -72v-716q0 -43 -29.5 -73t-72.5 -30h-512q-41 0 -72 30t-31 73zM289 289q10 -33 53 -45q20 -6 40 -6q24 0 48 8q88 27 88 100v266q53 -8 69 -51q9 -24 8 -44q0 -17 -5 -32q-4 -10 2 -10q4 0 12 10q26 35 26 73 q0 11 -2 22q-9 49 -34 80.5t-50.5 67.5t-25.5 54h-61v-376q-19 8 -41 7q-24 0 -49 -10q-45 -16 -68 -49q-15 -21 -15 -42q1 -11 5 -23z" />
|
||||
<glyph unicode="s" horiz-adv-x="1232" d="M104 614q-2 27 6.5 39.5t41.5 12.5h929q33 0 41 -12.5t6 -39.5l-43 -460q-2 -27 -12 -39.5t-43 -12.5h-827q-33 0 -43 12.5t-13 39.5zM190 737l15 133q4 23 20.5 37.5t36.5 14.5h168q51 0 88 -37l29 -29q37 -37 88 -37h350q20 0 38.5 -12t23.5 -29l10 -41h-867z" />
|
||||
<glyph unicode="t" horiz-adv-x="1210" d="M103 651q0 7 1 12q2 7 7.5 15t8.5 12t12 13l13 14l31 31v-82h858v82l29 -31q4 -4 14 -13.5t13.5 -13.5t8.5 -12t6 -15.5t1 -19.5t-2 -29q-6 -29 -23.5 -130t-36 -211.5t-20.5 -118.5q-10 -51 -61 -52h-715q-53 0 -62 52q-6 25 -39.5 228.5t-40.5 231.5q-3 28 -3 37z M248 717v51q0 23 13 36t26 15h12h612q6 0 14.5 -1t23 -14t14.5 -36v-51h-715zM350 870q0 23 13.5 36.5t25.5 15.5h12h408q6 0 14 -1t22.5 -14.5t14.5 -36.5h-510zM401 440q0 -51 52 -51h305q23 0 36 12.5t13 24.5l2 14v103h-72v-82h-264v82h-72v-103z" />
|
||||
<glyph unicode="u" horiz-adv-x="903" d="M104 801q-6 47 93.5 89t255 42t254 -42t92.5 -89l-74 -608q-2 -12 -35 -36t-98.5 -44.5t-139 -20.5t-140 20.5t-99.5 44t-35 36.5zM178 790.5q0 -12.5 33 -30t100.5 -32.5t141 -15t140 15t99.5 32.5t33 30t-33 30t-99.5 32.5t-140 15t-141 -15t-100.5 -32.5t-33 -30z" />
|
||||
<glyph unicode="v" horiz-adv-x="1230" d="M104 283q-2 9 -2 18q0 36 35 55l164 111h100l-174 -135h181q10 0 12 -6l43 -115h305l43 115q4 6 12 6h181l-175 135h103l162 -111q35 -20 34 -55q0 -9 -2 -18l-28 -158q-4 -20 -22.5 -33.5t-41.5 -13.5h-835q-51 0 -66 47zM340 688l276 260l277 -260h-154v-252h-245v252 h-154z" />
|
||||
<glyph unicode="w" horiz-adv-x="1024" d="M0 283q-2 9 -2 18q0 36 35 55l164 109h100l-174 -133h180q8 0 12 -6l43 -115h306l43 115q2 6 12 6h180l-174 133h100l164 -109q35 -20 35 -55q0 -9 -2 -18l-29 -158q-4 -20 -23.5 -34.5t-39.5 -14.5h-836q-20 0 -39.5 14t-25.5 35zM236 694h153v252h246v-252h153 l-276 -260z" />
|
||||
<glyph unicode="x" horiz-adv-x="1128" d="M104 369q-2 13 -2 26q0 38 19 70l160 385q23 45 75 45h107l-21 -207h-139l262 -217l260 217h-137l-20 207h104q53 0 76 -45l162 -385q17 -33 16 -69q0 -13 -2 -27l-35 -191q-4 -20 -22.5 -35.5t-38.5 -15.5h-727q-20 0 -39 15.5t-23 35.5zM190 326l13 -74 q2 -20 19.5 -35.5t39.5 -15.5h604q23 0 40.5 15t19.5 36l14 74q2 20 -10 35.5t-35 15.5h-662q-20 0 -33.5 -14t-9.5 -37z" />
|
||||
<glyph unicode="y" d="M102 360q0 76 54.5 129.5t130.5 53.5q4 0 11 -1t11 -1q-4 25 -4 39q0 111 80 188.5t193 77.5q92 0 163.5 -53.5t98.5 -137.5q25 4 41 4q102 0 173.5 -69.5t71.5 -170t-71.5 -170t-173.5 -69.5h-594q-76 0 -130.5 53t-54.5 127z" />
|
||||
<glyph unicode="z" d="M102 360.5q0 75.5 54.5 128t132.5 52.5h22q-4 25 -4 37q0 111 80 188.5t193 77.5q90 0 162.5 -53.5t99.5 -135.5q12 2 41 2q102 0 172.5 -69.5t70.5 -169.5q0 -98 -71.5 -169t-171.5 -71h-197v195h109l-181 235l-178 -235h107v-195h-254q-78 0 -132.5 53.5t-54.5 129z " />
|
||||
<glyph unicode="{" horiz-adv-x="716" d="M102 248v528q0 29 16.5 39t41.5 -6l438 -270q16 -12 16 -27l-16 -27l-438 -270q-25 -16 -41.5 -6t-16.5 39z" />
|
||||
<glyph unicode="|" horiz-adv-x="747" d="M102 219v584q0 68 92.5 67.5t92.5 -67.5v-584q0 -66 -92.5 -66t-92.5 66zM461 219v584q0 68 92 67.5t92 -67.5v-584q0 -66 -92 -66t-92 66z" />
|
||||
<glyph unicode="}" horiz-adv-x="921" d="M102 512q0 150 104.5 254t254.5 104q147 0 252.5 -104t105.5 -254t-105.5 -254t-252.5 -104q-150 0 -254.5 104t-104.5 254z" />
|
||||
<glyph unicode="~" horiz-adv-x="819" d="M102 270v482q0 68 78 67h461q76 0 76 -67v-482q0 -66 -76 -65h-461q-78 -1 -78 65z" />
|
||||
<glyph unicode="©" horiz-adv-x="1191" d="M104 506q-2 203 139.5 348t344.5 150q205 2 350 -139.5t149 -346.5q2 -203 -140 -349t-345 -149q-205 -4 -350.5 138.5t-147.5 347.5zM207 506q4 -160 117.5 -272.5t275.5 -110.5t273.5 117.5t109.5 275.5q-2 162 -116.5 273.5t-276.5 109.5t-273.5 -116.5t-109.5 -276.5 zM328 512q0 68 39 106q37 39 98 39q88 0 125 -67l-64 -33q-10 23 -24 29q-16 10 -27 10q-63 0 -63 -84q0 -35 16 -61q16 -23 47 -23q41 0 57 41l60 -29q-16 -31 -53 -55q-35 -20 -72 -20q-59 0 -102 38q-37 39 -37 109zM600 512q0 68 39 106q37 39 98 39q88 0 125 -67 l-63 -33q-10 23 -25 29q-16 10 -26 10q-63 0 -64 -84q0 -39 16.5 -61.5t47.5 -22.5q39 0 57 41l59 -29q-20 -35 -53 -55q-37 -20 -72 -20q-59 0 -102 38q-37 39 -37 109z" />
|
||||
<glyph unicode="ª" horiz-adv-x="798" d="M102 692q6 168 115 236q70 45 170 45q133 0 221 -63.5t88 -186.5q0 -68 -43 -129q-20 -25 -92 -80l-45 -33q-41 -29 -51 -61q-6 -18 -6 -45q0 -14 -17 -15h-131q-16 0 -16 15q4 100 27 127q18 20 51 46.5t57 43.5l25 16q25 20 32 35q29 37 29 70q0 47 -27 82 q-25 37 -94 36q-68 0 -96 -45q-29 -47 -29 -94h-168zM310 233q30 27 69 27h6q47 -2 77 -32q28 -28 28 -70q0 -3 -1 -6q-2 -47 -32 -75q-29 -26 -72 -26h-6q-45 2 -75 31q-28 27 -28 70q0 50 34 81z" />
|
||||
<glyph unicode="­" d="M102 51v205q18 8 48 17.5t34 11.5q96 35 132 69.5t36 98.5q0 23 -23.5 49t-31.5 76q-2 12 -23.5 24t-25.5 62q0 16 5 26t9 15l6 2q-10 51 -14 90q-4 55 43 115.5t164 60.5q115 0 162 -60.5t43 -115.5l-15 -90q20 -8 21 -43q-4 -49 -25.5 -61.5t-23.5 -24.5 q-8 -49 -32 -76t-24 -49q0 -63 36 -98.5t132 -69.5q186 -70 187 -125v-109h-820zM717 461v102h153v154h103v-154h153v-102h-153v-154h-103v154h-153z" />
|
||||
<glyph unicode="®" horiz-adv-x="1126" d="M102 256v205h308v-256h-267q-41 0 -41 51zM102 563v205q0 51 41 51h267v-256h-308zM512 205v256h512v-205q0 -20 -15.5 -35.5t-35.5 -15.5h-461zM512 563v256h461q20 0 35.5 -15.5t15.5 -35.5v-205h-512z" />
|
||||
<glyph unicode="²" horiz-adv-x="1191" d="M104 506q-2 203 139.5 348t344.5 150q205 2 350 -139.5t149 -346.5q2 -203 -140 -349t-345 -149q-205 -4 -350.5 138.5t-147.5 347.5zM207 506q4 -160 117.5 -272.5t275.5 -110.5t273.5 117.5t109.5 275.5q-2 162 -116.5 273.5t-276.5 109.5t-273.5 -116.5t-109.5 -276.5 zM362 281q4 27 12.5 68.5t42.5 131.5t77 133q45 45 128 78t144 45l61 11q-4 -27 -11 -69t-41 -132t-79 -133q-45 -45 -128 -78t-144 -45zM524 514q0 -31 20.5 -51.5t50.5 -20.5t50 21q53 53 90 192q-137 -37 -190 -90q-21 -20 -21 -51z" />
|
||||
<glyph unicode="³" horiz-adv-x="1085" d="M102 516q453 254 711 379q23 10 50.5 25.5t38.5 20.5t26.5 9t24 1t16.5 -11t11 -17.5t-1 -23.5t-9 -25.5t-20.5 -40t-25.5 -49.5q-55 -115 -149.5 -293t-160.5 -298l-67 -121l-58 389zM565 553l29 -238l283 525z" />
|
||||
<glyph unicode="¹" d="M102 137v600q0 18 17 29l239 152q18 10 35 0l221 -140l224 140q18 10 34 0l240 -152q14 -10 14 -29v-600q0 -20 -16 -31q-8 -4 -16.5 -4t-16.5 4l-223 140l-221 -140q-18 -10 -35 0l-221 140l-223 -140q-16 -10 -33 0q-19 11 -19 31zM170 199l172 108v518l-172 -108v-518 zM410 307l172 -108v518l-172 108v-518zM649 199l172 108v518l-172 -108v-518zM889 307l172 -108v518l-172 108v-518z" />
|
||||
<glyph unicode="º" horiz-adv-x="1024" d="M0 256v512q0 41 30.5 71.5t71.5 30.5h820q43 0 72.5 -30.5t29.5 -71.5v-512q0 -43 -29.5 -72.5t-72.5 -29.5h-820q-41 0 -71.5 29.5t-30.5 72.5zM102 256h820v512h-820v-512z" />
|
||||
<glyph unicode="À" horiz-adv-x="1128" d="M237 1612q-2 195 134.5 335t330.5 142q195 4 335 -133t142.5 -331.5t-134 -334t-330.5 -143.5q-195 -2 -334.5 134t-143.5 331zM543 1614l16 -29q47 35 78 35q8 0 0 -35l-39 -153q-29 -109 35 -109q31 0 86 27.5t108 81.5l-18 24q-49 -37 -74 -37q-12 0 -4 39l43 162 q27 98 -20 98q-31 0 -92.5 -28.5t-118.5 -75.5zM665 1856q-2 -29 15.5 -44.5t50.5 -15.5q39 0 62.5 22.5t23.5 53.5q0 59 -61 59q-43 0 -67 -23t-24 -52zM109 183q-5 16 -5 29q0 19 11 30l417 417q-2 18 -2 37q0 30 7 61q10 48 26 64l137 137q13 15 40 16q23 0 56 -11 q71 -25 132 -86q63 -63 88 -135q11 -33 11 -55q0 -26 -15 -38l-140 -139q-16 -16 -63 -27q-29 -6 -61 -6q-19 0 -37 2l-418 -418q-11 -11 -28 -10q-13 0 -29 5q-39 13 -76 50q-39 37 -51 77zM458 487q0 -17 11 -28q13 -13 30 -14q24 0 54 28q20 20 23.5 44t-11 38t-38 10 t-44.5 -24q-25 -25 -25 -54zM737 921.5q-2 -1.5 -2 -7.5q0 -7 3 -21q5 -25 25.5 -62.5t51.5 -68.5q29 -29 68 -49.5t63 -25.5q14 -3 21 -3q6 0 8 2q2 1 1 5q0 7 -3 22q-6 25 -27.5 62.5t-50.5 66.5q-31 31 -69 51t-61 27q-14 4 -21 3q-5 0 -7 -1.5z" />
|
||||
<glyph unicode="Â" horiz-adv-x="1128" d="M174 1618q0 195 138.5 333t333 138t332.5 -138t138 -333t-138 -333t-332.5 -138t-333 138t-138.5 333zM287 1618q0 -131 80 -227l504 503q-98 82 -226 82q-150 0 -254 -104t-104 -254zM391 1364zM418 1339q100 -80 227 -79q147 0 253 104t106 254q0 129 -82 227z M897 1872zM109 183q-5 16 -5 29q0 19 11 30l417 417q-2 18 -2 37q0 30 7 61q10 48 26 64l137 137q13 15 40 16q23 0 56 -11q71 -25 132 -86q63 -63 88 -135q11 -33 11 -55q0 -26 -15 -38l-140 -139q-16 -16 -63 -27q-29 -6 -61 -6q-19 0 -37 2l-418 -418q-11 -11 -28 -10 q-13 0 -29 5q-39 13 -76 50q-39 37 -51 77zM458 487q0 -17 11 -28q13 -13 30 -14q24 0 54 28q20 20 23.5 44t-11 38t-38 10t-44.5 -24q-25 -25 -25 -54zM737 921.5q-2 -1.5 -2 -7.5q0 -7 3 -21q5 -25 25.5 -62.5t51.5 -68.5q29 -29 68 -49.5t63 -25.5q14 -3 21 -3q6 0 8 2 q2 1 1 5q0 7 -3 22q-6 25 -27.5 62.5t-50.5 66.5q-31 31 -69 51t-61 27q-14 4 -21 3q-5 0 -7 -1.5z" />
|
||||
<glyph unicode="Ã" horiz-adv-x="1128" d="M362 1212v482q0 68 78 67h461q76 0 76 -67v-482q0 -66 -76 -65h-461q-78 -1 -78 65zM109 183q-5 16 -5 29q0 19 11 30l417 417q-2 18 -2 37q0 30 7 61q10 48 26 64l137 137q13 15 40 16q23 0 56 -11q71 -25 132 -86q63 -63 88 -135q11 -33 11 -55q0 -26 -15 -38 l-140 -139q-16 -16 -63 -27q-29 -6 -61 -6q-19 0 -37 2l-418 -418q-11 -11 -28 -10q-13 0 -29 5q-39 13 -76 50q-39 37 -51 77zM458 487q0 -17 11 -28q13 -13 30 -14q24 0 54 28q20 20 23.5 44t-11 38t-38 10t-44.5 -24q-25 -25 -25 -54zM737 921.5q-2 -1.5 -2 -7.5 q0 -7 3 -21q5 -25 25.5 -62.5t51.5 -68.5q29 -29 68 -49.5t63 -25.5q14 -3 21 -3q6 0 8 2q2 1 1 5q0 7 -3 22q-6 25 -27.5 62.5t-50.5 66.5q-31 31 -69 51t-61 27q-14 4 -21 3q-5 0 -7 -1.5z" />
|
||||
<glyph unicode="Ä" horiz-adv-x="1105" d="M102 266v492q0 29 15.5 38t38.5 -5l368 -254q14 -10 15 -25l-15 -25l-368 -254q-23 -14 -38.5 -5t-15.5 38zM553 266v492q0 27 16.5 37t36.5 -4l383 -254q14 -10 15 -25l-15 -25l-383 -254q-20 -14 -36.5 -4t-16.5 37z" />
|
||||
<glyph unicode="Å" horiz-adv-x="1105" d="M102 512l15 25l383 254q20 14 36.5 3.5t16.5 -36.5v-492q0 -27 -16.5 -37t-36.5 4l-383 254q-15 11 -15 25zM567 512l15 25l368 254q23 14 38.5 4.5t15.5 -37.5v-492q0 -29 -15.5 -38t-38.5 5l-368 254q-15 11 -15 25z" />
|
||||
<glyph unicode="Ç" horiz-adv-x="819" d="M102 274v478q0 59 76 59q78 0 78 -59v-478q0 -59 -78 -59q-76 0 -76 59zM281 512l12 23l373 235q23 14 37 5t14 -36v-452q0 -27 -14.5 -36t-36.5 5l-373 233q-12 11 -12 23z" />
|
||||
<glyph unicode="È" horiz-adv-x="1046" d="M202 1612q-2 195 134.5 335t330.5 142q195 4 335 -133t142.5 -331.5t-134 -334t-330.5 -143.5q-195 -2 -334.5 134t-143.5 331zM508 1614l16 -29q47 35 78 35q8 0 0 -35l-39 -153q-29 -109 35 -109q31 0 86 27.5t108 81.5l-18 24q-49 -37 -74 -37q-12 0 -4 39l43 162 q27 98 -20 98q-31 0 -92.5 -28.5t-118.5 -75.5zM630 1856q-2 -29 15.5 -44.5t50.5 -15.5q39 0 62.5 22.5t23.5 53.5q0 59 -61 59q-43 0 -67 -23t-24 -52zM102 322q100 -58 216 -59q30 0 62 4q151 19 259.5 128t127.5 259q4 31 4 62q0 115 -58 216q55 -31 98 -74 q131 -133 131 -317.5t-131 -317.5q-131 -131 -316.5 -131t-316.5 131q-43 44 -76 99z" />
|
||||
<glyph unicode="É" horiz-adv-x="819" d="M102 285v454q0 27 14.5 35t35.5 -6l372 -233q12 -10 13 -23l-13 -23l-372 -233q-20 -14 -35 -6t-15 35zM563 274v476q0 59 76 59q78 0 78 -59v-476q0 -59 -78 -59q-76 0 -76 59z" />
|
||||
<glyph unicode="Ê" horiz-adv-x="1046" d="M139 1618q0 195 138.5 333t333 138t332.5 -138t138 -333t-138 -333t-332.5 -138t-333 138t-138.5 333zM252 1618q0 -131 80 -227l504 503q-98 82 -226 82q-150 0 -254 -104t-104 -254zM356 1364zM383 1339q100 -80 227 -79q147 0 253 104t106 254q0 129 -82 227z M862 1872zM102 322q100 -58 216 -59q30 0 62 4q151 19 259.5 128t127.5 259q4 31 4 62q0 115 -58 216q55 -31 98 -74q131 -133 131 -317.5t-131 -317.5q-131 -131 -316.5 -131t-316.5 131q-43 44 -76 99z" />
|
||||
<glyph unicode="Ì" horiz-adv-x="1087" d="M34 1612q-2 195 134.5 335t330.5 142q195 4 335 -133t142.5 -331.5t-134 -334t-330.5 -143.5q-195 -2 -334.5 134t-143.5 331zM340 1614l16 -29q47 35 78 35q8 0 0 -35l-39 -153q-29 -109 35 -109q31 0 86 27.5t108 81.5l-18 24q-49 -37 -74 -37q-12 0 -4 39l43 162 q27 98 -20 98q-31 0 -92.5 -28.5t-118.5 -75.5zM462 1856q-2 -29 15.5 -44.5t50.5 -15.5q39 0 62.5 22.5t23.5 53.5q0 59 -61 59q-43 0 -67 -23t-24 -52zM104 774q-1 6 -1 13q0 30 26 49q8 8 57.5 46t55.5 44q18 16 55 16h494q35 0 57 -16q8 -8 57 -46t56 -44q24 -20 23 -49 q0 -6 -1 -13l-98 -663q-10 -29 -41 -29h-600q-31 0 -41 29q-95 636 -99 663zM184 768h721l-114 117h-494zM334 674q49 -283 211 -283q160 0 209 283h-95q-39 -190 -114 -191q-78 0 -117 191h-94z" />
|
||||
<glyph unicode="Î" horiz-adv-x="1087" d="M-29 1618q0 195 138.5 333t333 138t332.5 -138t138 -333t-138 -333t-332.5 -138t-333 138t-138.5 333zM84 1618q0 -131 80 -227l504 503q-98 82 -226 82q-150 0 -254 -104t-104 -254zM188 1364zM215 1339q100 -80 227 -79q147 0 253 104t106 254q0 129 -82 227zM694 1872 zM104 774q-1 6 -1 13q0 30 26 49q8 8 57.5 46t55.5 44q18 16 55 16h494q35 0 57 -16q8 -8 57 -46t56 -44q24 -20 23 -49q0 -6 -1 -13l-98 -663q-10 -29 -41 -29h-600q-31 0 -41 29q-95 636 -99 663zM184 768h721l-114 117h-494zM334 674q49 -283 211 -283q160 0 209 283h-95 q-39 -190 -114 -191q-78 0 -117 191h-94z" />
|
||||
<glyph unicode="Ñ" horiz-adv-x="1024" d="M102 102l23 287l80 -82l143 148l103 -103l-146 -147l80 -80zM573 672l146 147l-80 80l283 23l-21 -287l-80 82l-145 -148z" />
|
||||
<glyph unicode="Ò" horiz-adv-x="860" d="M-66 1612q-2 195 134.5 335t330.5 142q195 4 335 -133t142.5 -331.5t-134 -334t-330.5 -143.5q-195 -2 -334.5 134t-143.5 331zM240 1614l16 -29q47 35 78 35q8 0 0 -35l-39 -153q-29 -109 35 -109q31 0 86 27.5t108 81.5l-18 24q-49 -37 -74 -37q-12 0 -4 39l43 162 q27 98 -20 98q-31 0 -92.5 -28.5t-118.5 -75.5zM362 1856q-2 -29 15.5 -44.5t50.5 -15.5q39 0 62.5 22.5t23.5 53.5q0 59 -61 59q-43 0 -67 -23t-24 -52zM102 492v141q0 20 21 20h31q20 0 20 -20v-141q0 -68 60.5 -126.5t195.5 -58.5t195.5 59.5t60.5 125.5v141q0 20 21 20 h30q20 0 21 -20v-141q0 -94 -71 -168t-206 -86v-136h133q20 0 21 -20v-62q0 -20 -21 -20h-368q-20 0 -21 20v62q0 20 21 20h133v136q-135 12 -206 86t-71 168zM276 492v161h308v-161q0 -31 -37 -56.5t-117 -25.5q-82 0 -118 25.5t-36 56.5zM276 725v217q0 31 36 56.5 t118 25.5q80 0 117 -25.5t37 -56.5v-217h-308z" />
|
||||
<glyph unicode="Ô" horiz-adv-x="860" d="M-129 1618q0 195 138.5 333t333 138t332.5 -138t138 -333t-138 -333t-332.5 -138t-333 138t-138.5 333zM-16 1618q0 -131 80 -227l504 503q-98 82 -226 82q-150 0 -254 -104t-104 -254zM88 1364zM115 1339q100 -80 227 -79q147 0 253 104t106 254q0 129 -82 227z M594 1872zM102 492v141q0 20 21 20h31q20 0 20 -20v-141q0 -68 60.5 -126.5t195.5 -58.5t195.5 59.5t60.5 125.5v141q0 20 21 20h30q20 0 21 -20v-141q0 -94 -71 -168t-206 -86v-136h133q20 0 21 -20v-62q0 -20 -21 -20h-368q-20 0 -21 20v62q0 20 21 20h133v136 q-135 12 -206 86t-71 168zM276 492v161h308v-161q0 -31 -37 -56.5t-117 -25.5q-82 0 -118 25.5t-36 56.5zM276 725v217q0 31 36 56.5t118 25.5q80 0 117 -25.5t37 -56.5v-217h-308z" />
|
||||
<glyph unicode="Õ" horiz-adv-x="860" d="M59 1212v482q0 68 78 67h461q76 0 76 -67v-482q0 -66 -76 -65h-461q-78 -1 -78 65zM102 492v141q0 20 21 20h31q20 0 20 -20v-141q0 -68 60.5 -126.5t195.5 -58.5t195.5 59.5t60.5 125.5v141q0 20 21 20h30q20 0 21 -20v-141q0 -94 -71 -168t-206 -86v-136h133 q20 0 21 -20v-62q0 -20 -21 -20h-368q-20 0 -21 20v62q0 20 21 20h133v136q-135 12 -206 86t-71 168zM276 492v161h308v-161q0 -31 -37 -56.5t-117 -25.5q-82 0 -118 25.5t-36 56.5zM276 725v217q0 31 36 56.5t118 25.5q80 0 117 -25.5t37 -56.5v-217h-308z" />
|
||||
<glyph unicode="Ö" horiz-adv-x="1044" d="M102 197l150 151l-82 82l291 23l-23 -293l-82 82l-149 -150zM586 571l22 293l82 -84l150 152l102 -107l-147 -149l82 -82z" />
|
||||
<glyph unicode="Ù" horiz-adv-x="921" d="M-48 1612q-2 195 134.5 335t330.5 142q195 4 335 -133t142.5 -331.5t-134 -334t-330.5 -143.5q-195 -2 -334.5 134t-143.5 331zM258 1614l16 -29q47 35 78 35q8 0 0 -35l-39 -153q-29 -109 35 -109q31 0 86 27.5t108 81.5l-18 24q-49 -37 -74 -37q-12 0 -4 39l43 162 q27 98 -20 98q-31 0 -92.5 -28.5t-118.5 -75.5zM380 1856q-2 -29 15.5 -44.5t50.5 -15.5q39 0 62.5 22.5t23.5 53.5q0 59 -61 59q-43 0 -67 -23t-24 -52zM102 178v400q0 23 15.5 42t36.5 19h102v72q0 236 205 235q100 0 152.5 -61.5t52.5 -173.5v-72h92q20 0 40.5 -20.5 t20.5 -40.5v-400q0 -20 -14 -39.5t-35 -25.5l-61 -21q-53 -16 -101 -16h-297q-47 0 -100 16l-61 21q-20 6 -34 25.5t-14 39.5zM358 639h205v92q0 113 -102.5 113t-102.5 -113v-92z" />
|
||||
<glyph unicode="Û" horiz-adv-x="921" d="M-111 1618q0 195 138.5 333t333 138t332.5 -138t138 -333t-138 -333t-332.5 -138t-333 138t-138.5 333zM2 1618q0 -131 80 -227l504 503q-98 82 -226 82q-150 0 -254 -104t-104 -254zM106 1364zM133 1339q100 -80 227 -79q147 0 253 104t106 254q0 129 -82 227zM612 1872 zM102 178v400q0 23 15.5 42t36.5 19h102v72q0 236 205 235q100 0 152.5 -61.5t52.5 -173.5v-72h92q20 0 40.5 -20.5t20.5 -40.5v-400q0 -20 -14 -39.5t-35 -25.5l-61 -21q-53 -16 -101 -16h-297q-47 0 -100 16l-61 21q-20 6 -34 25.5t-14 39.5zM358 639h205v92 q0 113 -102.5 113t-102.5 -113v-92z" />
|
||||
<glyph unicode="Ü" horiz-adv-x="1124" d="M103 266.5q-3 12.5 26 30.5l821 463q29 16 50.5 4t21.5 -45v-383q0 -33 -23.5 -57.5t-58.5 -24.5h-799q-35 0 -38 12.5z" />
|
||||
<glyph unicode="à" horiz-adv-x="1110" d="M102 110.5q0 20.5 17 36.5l801 801q35 35 71 0q16 -14 16.5 -35.5t-16.5 -35.5l-801 -801q-14 -14 -34 -15q-23 0 -37 15q-17 14 -17 34.5zM211 340q-41 135 28.5 289.5t135.5 220.5q37 33 108.5 12.5t161.5 -86.5l-53 -53q-39 27 -78 44t-58.5 19t-29.5 -2 q-4 -10 -2 -30.5t19.5 -58.5t43.5 -79zM373 156l284 284q45 -33 90.5 -55.5t69 -25.5t33.5 1q4 10 1 34t-25.5 69t-55.5 90l51 51q76 -94 103.5 -176t-6.5 -119q-25 -25 -76 -57.5t-135 -71.5t-166 -46t-168 22z" />
|
||||
<glyph unicode="á" horiz-adv-x="1136" d="M104.5 303.5q-10.5 104.5 29.5 197.5t80 158.5t69 94.5q43 45 151.5 -4.5t221 -162t161.5 -222t6 -152.5q-29 -29 -94 -69t-159.5 -78.5t-199 -28.5t-180 86t-86 180.5zM332 688q-8 -8 2 -48t50 -104.5t97 -121.5q59 -59 123 -98.5t104 -50.5t48 -1q8 8 -2.5 48 t-50 104.5t-97 122t-122 97.5t-104.5 50t-48 2zM555 824.5q-6 21.5 4 39.5l55 99q10 18 31 23t39 -5t24.5 -30.5t-3.5 -39.5l-56 -98q-16 -27 -45 -27q-14 0 -24 9q-19 8 -25 29.5zM713 717.5q0 21.5 14 36.5l98 98q14 16 35 16t37 -16t16 -36.5t-16 -35.5l-96 -98 q-14 -14 -37 -14t-37 14t-14 35.5zM834.5 573.5q5.5 20.5 23.5 30.5l100 55q43 25 70 -20q23 -45 -20 -70l-99 -55q-12 -6 -24 -6q-33 0 -45 27q-11 18 -5.5 38.5z" />
|
||||
<glyph unicode="â" horiz-adv-x="952" d="M102 512l390 389v-196h358v-386h-358v-196z" />
|
||||
<glyph unicode="ã" horiz-adv-x="983" d="M102 498l390 387l389 -387h-197v-361h-385v361h-197z" />
|
||||
<glyph unicode="ä" horiz-adv-x="983" d="M102 526h197v359h385v-359h197l-389 -389z" />
|
||||
<glyph unicode="å" horiz-adv-x="952" d="M102 317v388h359v196l389 -389l-389 -389v194h-359z" />
|
||||
<glyph unicode="ç" horiz-adv-x="952" d="M102 512l390 338v-197h358v-282h-358v-197z" />
|
||||
<glyph unicode="è" horiz-adv-x="880" d="M102 498l338 387l338 -387h-196v-361h-285v361h-195z" />
|
||||
<glyph unicode="é" horiz-adv-x="880" d="M102 526h195v359h285v-359h196l-338 -389z" />
|
||||
<glyph unicode="ê" horiz-adv-x="952" d="M102 369v284h359l2 197l387 -338l-389 -338l2 195h-361z" />
|
||||
<glyph unicode="ë" horiz-adv-x="1146" d="M102 512q0 195 138.5 333t333 138t332.5 -138t138 -333t-138 -333t-332.5 -138t-333 138t-138.5 333zM205 512q0 -152 107.5 -260.5t260.5 -108.5q152 0 260.5 108.5t108.5 260.5t-108.5 260.5t-260.5 108.5q-154 0 -261 -108.5t-107 -260.5zM365 512l196 207v-115h209 v-184h-209v-115z" />
|
||||
<glyph unicode="ì" horiz-adv-x="1146" d="M102 512q0 195 138.5 333t333 138t332.5 -138t138 -333t-138 -333t-332.5 -138t-333 138t-138.5 333zM205 512q0 -152 107.5 -260.5t260.5 -108.5q152 0 260.5 108.5t108.5 260.5t-108.5 260.5t-260.5 108.5q-154 0 -261 -108.5t-107 -260.5zM365 524l208 195l207 -195 h-114v-209h-185v209h-116z" />
|
||||
<glyph unicode="í" horiz-adv-x="1146" d="M102 512q0 195 138.5 333t333 138t332.5 -138t138 -333t-138 -333t-332.5 -138t-333 138t-138.5 333zM205 512q0 -152 108.5 -260.5t260 -108.5t260 108.5t108.5 260.5q0 154 -108.5 261.5t-260 107.5t-260 -107.5t-108.5 -261.5zM367 500h114v211h185v-211h114 l-207 -195z" />
|
||||
<glyph unicode="î" horiz-adv-x="1146" d="M102 512q0 195 138.5 333t333 138t332.5 -138t138 -333t-138 -333t-332.5 -138t-333 138t-138.5 333zM205 512q0 -152 107.5 -260.5t260.5 -108.5q152 0 260.5 108.5t108.5 260.5t-108.5 260.5t-260.5 108.5q-154 0 -261 -108.5t-107 -260.5zM375 420v184h211v115 l194 -207l-194 -207v115h-211z" />
|
||||
<glyph unicode="ï" horiz-adv-x="1128" d="M104.5 468q-6.5 11 10.5 28l411 411q14 16 37 16.5t39 -16.5l412 -411q16 -16 10 -27.5t-29 -11.5h-86v-316q0 -14 -1 -21t-8 -13.5t-21 -6.5h-209v316h-209v-316h-201q-18 0 -28.5 6.5t-11.5 13.5t-1 21v316h-86q-22 0 -28.5 11z" />
|
||||
<glyph unicode="ñ" horiz-adv-x="573" d="M102 51v871q0 51 41 51h277q23 0 37 -15.5t14 -35.5v-871l-184 185z" />
|
||||
<glyph unicode="ò" horiz-adv-x="1024" d="M102 205v307h103v-307h307v-103h-307q-43 0 -73 30t-30 73zM307 410v409q0 43 30 73t71 30h411q41 0 72 -31t31 -72v-409q0 -43 -31 -73t-72 -30h-409q-43 0 -73 30t-30 73zM410 410h409v409h-409v-409z" />
|
||||
<glyph unicode="ó" horiz-adv-x="1126" d="M102 266v656q0 25 23 43q25 14 49 4l389 -156l391 156q25 10 50 -4q20 -16 20 -43v-656q0 -33 -31 -47l-409 -164q-8 -2 -11 -4h-10h-8l-10 4l-410 164q-33 14 -33 47zM184 287l328 -131v573l-328 131v-573zM246 408v69l207 -82v-69zM246 621v69l207 -82v-69zM614 156 l328 131v573l-328 -131v-573zM676 326v69l207 82v-69zM676 539v69l207 82v-69z" />
|
||||
<glyph unicode="ô" horiz-adv-x="1013" d="M102 600q0 131 93.5 223t224.5 92t228 -97t97 -228q0 -90 -45 -164l193 -195q35 -35 6 -61l-47 -49q-33 -33 -70 0l-194 194q-76 -43 -160 -43q-131 0 -228.5 98.5t-97.5 229.5zM201 600q0 -90 68.5 -159.5t158.5 -69.5q92 0 156.5 64.5t64.5 154.5t-69.5 159.5 t-159.5 69.5t-154.5 -64.5t-64.5 -154.5z" />
|
||||
<glyph unicode="õ" horiz-adv-x="1024" d="M141 1058v482q0 68 78 67h461q76 0 76 -67v-482q0 -66 -76 -65h-461q-78 -1 -78 65zM0 256v512q0 41 30.5 71.5t71.5 30.5h820q43 0 72.5 -30.5t29.5 -71.5v-512q0 -43 -29.5 -72.5t-72.5 -29.5h-820q-41 0 -71.5 29.5t-30.5 72.5zM102 256h820v512h-820v-512z" />
|
||||
<glyph unicode="ö" horiz-adv-x="1146" d="M102 512q0 47 33 80t80 33t80 -34t33 -79t-33 -79t-80 -34t-80 33t-33 80zM461 512q0 47 32.5 80t79.5 33q45 0 79 -34t34 -79t-34 -79t-79 -34q-47 0 -79.5 33t-32.5 80zM819 512q0 47 33 80t80 33t79.5 -34t32.5 -79t-32.5 -79t-79.5 -34t-80 33t-33 80z" />
|
||||
<glyph unicode="ù" horiz-adv-x="903" d="M-43 1520q-2 195 134.5 335t330.5 142q195 4 335 -133t142.5 -331.5t-134 -334t-330.5 -143.5q-195 -2 -334.5 134t-143.5 331zM263 1522l16 -29q47 35 78 35q8 0 0 -35l-39 -153q-29 -109 35 -109q31 0 86 27.5t108 81.5l-18 24q-49 -37 -74 -37q-12 0 -4 39l43 162 q27 98 -20 98q-31 0 -92.5 -28.5t-118.5 -75.5zM385 1764q-2 -29 15.5 -44.5t50.5 -15.5q39 0 62.5 22.5t23.5 53.5q0 59 -61 59q-43 0 -67 -23t-24 -52zM104 801q-6 47 93.5 89t255 42t254 -42t92.5 -89l-74 -608q-2 -12 -35 -36t-98.5 -44.5t-139 -20.5t-140 20.5 t-99.5 44t-35 36.5zM178 790.5q0 -12.5 33 -30t100.5 -32.5t141 -15t140 15t99.5 32.5t33 30t-33 30t-99.5 32.5t-140 15t-141 -15t-100.5 -32.5t-33 -30z" />
|
||||
<glyph unicode="û" horiz-adv-x="903" d="M-107 1526q0 195 138.5 333t333 138t332.5 -138t138 -333t-138 -333t-332.5 -138t-333 138t-138.5 333zM6 1526q0 -131 80 -227l504 503q-98 82 -226 82q-150 0 -254 -104t-104 -254zM110 1272zM137 1247q100 -80 227 -79q147 0 253 104t106 254q0 129 -82 227zM616 1780 zM104 801q-6 47 93.5 89t255 42t254 -42t92.5 -89l-74 -608q-2 -12 -35 -36t-98.5 -44.5t-139 -20.5t-140 20.5t-99.5 44t-35 36.5zM178 790.5q0 -12.5 33 -30t100.5 -32.5t141 -15t140 15t99.5 32.5t33 30t-33 30t-99.5 32.5t-140 15t-141 -15t-100.5 -32.5t-33 -30z" />
|
||||
<glyph unicode="Œ" horiz-adv-x="1906" d="M962 322q100 -58 216 -59q30 0 62 4q151 19 259.5 128t127.5 259q4 31 4 62q0 115 -58 216q55 -31 98 -74q131 -133 131 -317.5t-131 -317.5q-131 -131 -316.5 -131t-316.5 131q-43 44 -76 99zM102 492v141q0 20 21 20h31q20 0 20 -20v-141q0 -68 60.5 -126.5 t195.5 -58.5t195.5 59.5t60.5 125.5v141q0 20 21 20h30q20 0 21 -20v-141q0 -94 -71 -168t-206 -86v-136h133q20 0 21 -20v-62q0 -20 -21 -20h-368q-20 0 -21 20v62q0 20 21 20h133v136q-135 12 -206 86t-71 168zM276 492v161h308v-161q0 -31 -37 -56.5t-117 -25.5 q-82 0 -118 25.5t-36 56.5zM276 725v217q0 31 36 56.5t118 25.5q80 0 117 -25.5t37 -56.5v-217h-308z" />
|
||||
<glyph unicode="œ" horiz-adv-x="2191" d="M1126 522h125q4 170 126 290t292 120q174 0 297 -123t123 -297t-123 -297t-297 -123q-143 0 -258 88l72 78q84 -61 186 -61q131 0 222 92t91 223t-91 223t-222 92q-127 0 -218 -89t-95 -216h145l-188 -209zM0 256v512q0 41 30.5 71.5t71.5 30.5h820q43 0 72.5 -30.5 t29.5 -71.5v-512q0 -43 -29.5 -72.5t-72.5 -29.5h-820q-41 0 -71.5 29.5t-30.5 72.5zM102 256h820v512h-820v-512z" />
|
||||
<glyph unicode="ˆ" horiz-adv-x="1146" d="M102 512q0 195 138.5 333t333 138t332.5 -138t138 -333t-138 -333t-332.5 -138t-333 138t-138.5 333zM215 512q0 -131 80 -227l504 503q-98 82 -226 82q-150 0 -254 -104t-104 -254zM319 258zM346 233q100 -80 227 -79q147 0 253 104t106 254q0 129 -82 227zM825 766z " />
|
||||
<glyph unicode="˜" horiz-adv-x="1024" d="M-371 188v482q0 68 78 67h461q76 0 76 -67v-482q0 -66 -76 -65h-461q-78 -1 -78 65z" />
|
||||
<glyph unicode=" " horiz-adv-x="1044" />
|
||||
<glyph unicode=" " horiz-adv-x="2088" />
|
||||
<glyph unicode=" " horiz-adv-x="1044" />
|
||||
<glyph unicode=" " horiz-adv-x="2088" />
|
||||
<glyph unicode=" " horiz-adv-x="696" />
|
||||
<glyph unicode=" " horiz-adv-x="522" />
|
||||
<glyph unicode=" " horiz-adv-x="348" />
|
||||
<glyph unicode=" " horiz-adv-x="348" />
|
||||
<glyph unicode=" " horiz-adv-x="260" />
|
||||
<glyph unicode=" " horiz-adv-x="417" />
|
||||
<glyph unicode=" " horiz-adv-x="114" />
|
||||
<glyph unicode="‐" d="M102 51v205q18 8 48 17.5t34 11.5q96 35 132 69.5t36 98.5q0 23 -23.5 49t-31.5 76q-2 12 -23.5 24t-25.5 62q0 16 5 26t9 15l6 2q-10 51 -14 90q-4 55 43 115.5t164 60.5q115 0 162 -60.5t43 -115.5l-15 -90q20 -8 21 -43q-4 -49 -25.5 -61.5t-23.5 -24.5 q-8 -49 -32 -76t-24 -49q0 -63 36 -98.5t132 -69.5q186 -70 187 -125v-109h-820zM717 461v102h153v154h103v-154h153v-102h-153v-154h-103v154h-153z" />
|
||||
<glyph unicode="‑" d="M102 51v205q18 8 48 17.5t34 11.5q96 35 132 69.5t36 98.5q0 23 -23.5 49t-31.5 76q-2 12 -23.5 24t-25.5 62q0 16 5 26t9 15l6 2q-10 51 -14 90q-4 55 43 115.5t164 60.5q115 0 162 -60.5t43 -115.5l-15 -90q20 -8 21 -43q-4 -49 -25.5 -61.5t-23.5 -24.5 q-8 -49 -32 -76t-24 -49q0 -63 36 -98.5t132 -69.5q186 -70 187 -125v-109h-820zM717 461v102h153v154h103v-154h153v-102h-153v-154h-103v154h-153z" />
|
||||
<glyph unicode="‒" d="M102 51v205q18 8 48 17.5t34 11.5q96 35 132 69.5t36 98.5q0 23 -23.5 49t-31.5 76q-2 12 -23.5 24t-25.5 62q0 16 5 26t9 15l6 2q-10 51 -14 90q-4 55 43 115.5t164 60.5q115 0 162 -60.5t43 -115.5l-15 -90q20 -8 21 -43q-4 -49 -25.5 -61.5t-23.5 -24.5 q-8 -49 -32 -76t-24 -49q0 -63 36 -98.5t132 -69.5q186 -70 187 -125v-109h-820zM717 461v102h153v154h103v-154h153v-102h-153v-154h-103v154h-153z" />
|
||||
<glyph unicode="–" horiz-adv-x="1024" d="M102 51v922h820v-922h-820z" />
|
||||
<glyph unicode="—" horiz-adv-x="2048" d="M102 51v922h1844v-922h-1844z" />
|
||||
<glyph unicode="‘" horiz-adv-x="1150" d="M104 506q-2 195 134.5 335t330.5 142q195 4 335 -133t142.5 -331.5t-134 -334t-330.5 -143.5q-195 -2 -334.5 134t-143.5 331zM410 508l16 -29q47 35 78 35q8 0 0 -35l-39 -153q-29 -109 35 -109q31 0 86 27.5t108 81.5l-18 24q-49 -37 -74 -37q-12 0 -4 39l43 162 q27 98 -20 98q-31 0 -92.5 -28.5t-118.5 -75.5zM532 750q-2 -29 15.5 -44.5t50.5 -15.5q39 0 62.5 22.5t23.5 53.5q0 59 -61 59q-43 0 -67 -23t-24 -52z" />
|
||||
<glyph unicode="’" horiz-adv-x="1165" d="M104 252q-2 98 84 197q37 35 236 234.5t272 270.5q82 82 181 56q45 -12 79.5 -47t47.5 -82q27 -98 -54 -179l-485 -485q-43 -45 -90 -47q-49 -6 -82 27q-31 25 -28 76t46 96l342 340q27 27 49 0q27 -25 0 -52l-340 -340q-45 -45 -20 -69q8 -8 25 -8q20 2 47 26l485 486 q51 53 35 110q-14 61 -78 78q-57 16 -108 -35l-508 -508q-66 -76 -64 -144.5t53 -119.5q49 -51 119 -53t146 63l505 508q25 25 51.5 0.5t0.5 -51.5l-508 -508q-84 -84 -189 -84q-102 0 -176 74q-72 72 -74 170z" />
|
||||
<glyph unicode="“" horiz-adv-x="798" d="M102 113v798q0 41 31 72t72 31h389q43 0 72.5 -31t29.5 -72v-798q0 -43 -29.5 -73t-72.5 -30h-389q-41 0 -72 30t-31 73zM184 205h430v676h-430v-676zM328 102.5q0 -20.5 21.5 -36t49.5 -15.5q31 0 51.5 14.5t20.5 37t-20.5 37t-51.5 14.5q-29 0 -50 -15.5t-21 -36z" />
|
||||
<glyph unicode="”" horiz-adv-x="798" d="M102 113v798q0 41 31 72t72 31h389q43 0 72.5 -31t29.5 -72v-798q0 -43 -29.5 -73t-72.5 -30h-389q-41 0 -72 30t-31 73zM184 205h430v676h-430v-676zM328 102.5q0 -20.5 21.5 -36t49.5 -15.5q31 0 51.5 14.5t20.5 37t-20.5 37t-51.5 14.5q-29 0 -50 -15.5t-21 -36z" />
|
||||
<glyph unicode="…" horiz-adv-x="3686" d="M2560 205v614q0 41 30 72t73 31h819q41 0 71.5 -31t30.5 -72v-614q0 -43 -30.5 -73t-71.5 -30h-819q-43 0 -73 30t-30 73zM2663 205h819v614h-819v-614zM2765 311v92h256v-92h-256zM2765 465v92h256v-92h-256zM2765 618v93h256v-93h-256zM3124 311q0 72 4 72q88 25 88 68 q0 16 -29 57t-29 90q0 113 93 113q51 0 71.5 -28t20.5 -85q0 -49 -28 -90t-28 -57q0 -18 21.5 -36t42.5 -26l22 -6l7 -72h-256zM1331 205v614q0 41 30 72t73 31h819q41 0 71.5 -31t30.5 -72v-614q0 -43 -30.5 -73t-71.5 -30h-819q-43 0 -73 30t-30 73zM1434 205h819v614 h-819v-614zM1536 311v92h256v-92h-256zM1536 465v92h256v-92h-256zM1536 618v93h256v-93h-256zM1895 311q0 72 4 72q88 25 88 68q0 16 -29 57t-29 90q0 113 93 113q51 0 71.5 -28t20.5 -85q0 -49 -28 -90t-28 -57q0 -18 21.5 -36t42.5 -26l22 -6l7 -72h-256zM102 205v614 q0 41 30 72t73 31h819q41 0 71.5 -31t30.5 -72v-614q0 -43 -30.5 -73t-71.5 -30h-819q-43 0 -73 30t-30 73zM205 205h819v614h-819v-614zM307 311v92h256v-92h-256zM307 465v92h256v-92h-256zM307 618v93h256v-93h-256zM666 311q0 72 4 72q88 25 88 68q0 16 -29 57t-29 90 q0 113 93 113q51 0 71.5 -28t20.5 -85q0 -49 -28 -90t-28 -57q0 -18 21.5 -36t42.5 -26l22 -6l7 -72h-256z" />
|
||||
<glyph unicode=" " horiz-adv-x="417" />
|
||||
<glyph unicode="‹" horiz-adv-x="1208" d="M102 393v180q0 23 17.5 42.5t38.5 19.5h891q20 0 38.5 -19.5t18.5 -42.5v-180q0 -20 -18.5 -40.5t-38.5 -20.5h-101l45 -256h-778l45 256h-102q-20 0 -38 20.5t-18 40.5zM146.5 716q3.5 9 11.5 11q23 10 104.5 38t99.5 28h48v153h389v-153h45q18 0 100 -28t105 -38 q8 -2 11 -11t-3 -17.5t-19 -8.5h-870q-12 0 -18.5 8.5t-3 17.5zM317 178h574l-72 334h-430z" />
|
||||
<glyph unicode="›" horiz-adv-x="1024" d="M102 295q0 78 58 135l153 152q72 72 147 81t130 -47q16 -14 16 -34.5t-16 -36.5q-14 -16 -36 -16.5t-36 16.5q-49 49 -133 -35l-154 -152q-27 -27 -26 -63q0 -35 26 -66q27 -27 66 -26.5t65 26.5l41 43q37 33 72 -2q16 -14 16.5 -35.5t-16.5 -35.5l-41 -41 q-57 -55 -137 -55.5t-137 55.5q-58 57 -58 137zM436 401q-35 37 0 72q14 14 35 14t37 -14q49 -49 123 25l164 161q27 27 26 64q0 35 -26 65q-68 61 -121 9l-51 -52q-37 -33 -72 3q-14 14 -14 34.5t14 36.5l51 51q55 53 130 50.5t134 -60.5q55 -55 56 -137q0 -80 -56 -135 l-164 -162q-76 -76 -153 -76q-64 0 -113 51z" />
|
||||
<glyph unicode=" " horiz-adv-x="522" />
|
||||
<glyph unicode="™" horiz-adv-x="948" d="M102 500l193 331l123 -69q68 -39 94 -105l213 367l57 -35l-108 -188l63 -39q78 -45 100.5 -121t-18.5 -145q-55 -92 -157 -97q49 -90 -5 -182q-41 -72 -117.5 -90t-154.5 25l-66 38l-108 -190l-59 33l213 366q-68 -10 -138 29zM193 520l65 -39q53 -29 102.5 -15.5t78 63 t14 99.5t-65.5 81l-65 36zM350 244l66 -39q53 -31 102 -17.5t78 62.5t15.5 100t-64.5 80l-66 39q0 -2 -2 -6zM512 520l66 -37q53 -29 102 -15.5t77.5 63t15.5 99.5t-64 79l-66 39l-129 -222q0 -4 -2 -6z" />
|
||||
<glyph unicode="" horiz-adv-x="895" d="M0 895h895v-895h-895v895z" />
|
||||
<glyph unicode="fi" horiz-adv-x="2150" d="M1331 307.5q0 20.5 14.5 35.5t37.5 15h614q20 0 35.5 -15t15.5 -35.5t-15.5 -36t-35.5 -15.5h-614q-23 0 -37.5 15.5t-14.5 36zM1331 512q0 20 14.5 35.5t37.5 15.5h614q20 0 35.5 -15.5t15.5 -35.5t-15.5 -35.5t-35.5 -15.5h-614q-23 0 -37.5 15.5t-14.5 35.5z M1331 716.5q0 20.5 14.5 36t37.5 15.5h614q20 0 35.5 -15.5t15.5 -36t-15.5 -35.5t-35.5 -15h-614q-23 0 -37.5 15t-14.5 35.5zM102 205v143h109q55 0 107.5 33t82 67.5t84.5 106.5q63 84 103.5 129t120 90t168.5 45h34v123l215 -184l-215 -185v103h-34q-55 0 -108.5 -33 t-83.5 -67.5t-85 -106.5q-49 -63 -76.5 -96t-79 -79t-108.5 -67.5t-125 -21.5h-109zM102 666v143h109q139 0 258 -109q-57 -72 -63 -82q-8 -12 -25 -32q-80 80 -170 80h-109zM608 313q47 59 74 95q0 2 6 9t8 11q90 -90 181 -90h34v102l215 -184l-215 -184v123h-34 q-146 -1 -269 118z" />
|
||||
<glyph unicode="fl" horiz-adv-x="2150" d="M1331 154v716q0 41 30 72t73 31h512q41 0 71.5 -31t30.5 -72v-716q0 -43 -30.5 -73t-71.5 -30h-512q-43 0 -73 30t-30 73zM1434 154h512v716h-512v-716zM1546 268v88h287v-88h-287zM1546 670v90h287v-90h-287zM1548 467v92h287v-92h-287zM102 205v143h109q55 0 107.5 33 t82 67.5t84.5 106.5q63 84 103.5 129t120 90t168.5 45h34v123l215 -184l-215 -185v103h-34q-55 0 -108.5 -33t-83.5 -67.5t-85 -106.5q-49 -63 -76.5 -96t-79 -79t-108.5 -67.5t-125 -21.5h-109zM102 666v143h109q139 0 258 -109q-57 -72 -63 -82q-8 -12 -25 -32 q-80 80 -170 80h-109zM608 313q47 59 74 95q0 2 6 9t8 11q90 -90 181 -90h34v102l215 -184l-215 -184v123h-34q-146 -1 -269 118z" />
|
||||
<glyph unicode="ffi" horiz-adv-x="3379" d="M2560 307.5q0 20.5 14.5 35.5t37.5 15h614q20 0 35.5 -15t15.5 -35.5t-15.5 -36t-35.5 -15.5h-614q-23 0 -37.5 15.5t-14.5 36zM2560 512q0 20 14.5 35.5t37.5 15.5h614q20 0 35.5 -15.5t15.5 -35.5t-15.5 -35.5t-35.5 -15.5h-614q-23 0 -37.5 15.5t-14.5 35.5z M2560 716.5q0 20.5 14.5 36t37.5 15.5h614q20 0 35.5 -15.5t15.5 -36t-15.5 -35.5t-35.5 -15h-614q-23 0 -37.5 15t-14.5 35.5zM1331 205v143h109q55 0 107.5 33t82 67.5t84.5 106.5q63 84 103.5 129t120 90t168.5 45h34v123l215 -184l-215 -185v103h-34q-55 0 -108.5 -33 t-83.5 -67.5t-85 -106.5q-49 -63 -76.5 -96t-79 -79t-108.5 -67.5t-125 -21.5h-109zM1331 666v143h109q139 0 258 -109q-57 -72 -63 -82q-8 -12 -25 -32q-80 80 -170 80h-109zM1837 313q47 59 74 95q0 2 6 9t8 11q90 -90 181 -90h34v102l215 -184l-215 -184v123h-34 q-146 -1 -269 118zM102 205v143h109q55 0 107.5 33t82 67.5t84.5 106.5q63 84 103.5 129t120 90t168.5 45h34v123l215 -184l-215 -185v103h-34q-55 0 -108.5 -33t-83.5 -67.5t-85 -106.5q-49 -63 -76.5 -96t-79 -79t-108.5 -67.5t-125 -21.5h-109zM102 666v143h109 q139 0 258 -109q-57 -72 -63 -82q-8 -12 -25 -32q-80 80 -170 80h-109zM608 313q47 59 74 95q0 2 6 9t8 11q90 -90 181 -90h34v102l215 -184l-215 -184v123h-34q-146 -1 -269 118z" />
|
||||
<glyph unicode="ffl" horiz-adv-x="3379" d="M2560 154v716q0 41 30 72t73 31h512q41 0 71.5 -31t30.5 -72v-716q0 -43 -30.5 -73t-71.5 -30h-512q-43 0 -73 30t-30 73zM2663 154h512v716h-512v-716zM2775 268v88h287v-88h-287zM2775 670v90h287v-90h-287zM2777 467v92h287v-92h-287zM1331 205v143h109q55 0 107.5 33 t82 67.5t84.5 106.5q63 84 103.5 129t120 90t168.5 45h34v123l215 -184l-215 -185v103h-34q-55 0 -108.5 -33t-83.5 -67.5t-85 -106.5q-49 -63 -76.5 -96t-79 -79t-108.5 -67.5t-125 -21.5h-109zM1331 666v143h109q139 0 258 -109q-57 -72 -63 -82q-8 -12 -25 -32 q-80 80 -170 80h-109zM1837 313q47 59 74 95q0 2 6 9t8 11q90 -90 181 -90h34v102l215 -184l-215 -184v123h-34q-146 -1 -269 118zM102 205v143h109q55 0 107.5 33t82 67.5t84.5 106.5q63 84 103.5 129t120 90t168.5 45h34v123l215 -184l-215 -185v103h-34q-55 0 -108.5 -33 t-83.5 -67.5t-85 -106.5q-49 -63 -76.5 -96t-79 -79t-108.5 -67.5t-125 -21.5h-109zM102 666v143h109q139 0 258 -109q-57 -72 -63 -82q-8 -12 -25 -32q-80 80 -170 80h-109zM608 313q47 59 74 95q0 2 6 9t8 11q90 -90 181 -90h34v102l215 -184l-215 -184v123h-34 q-146 -1 -269 118z" />
|
||||
</font>
|
||||
</defs></svg>
|
After Width: | Height: | Size: 62 KiB |
Binary file not shown.
Binary file not shown.
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.3 KiB |
|
@ -43,11 +43,15 @@ instance.web.Notification = instance.web.Widget.extend({
|
|||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* The very minimal function everything should call to create a dialog
|
||||
* in OpenERP Web Client.
|
||||
*/
|
||||
instance.web.dialog = function(element) {
|
||||
var result = element.dialog.apply(element, _.rest(_.toArray(arguments)));
|
||||
result.dialog("widget").addClass("openerp");
|
||||
return result;
|
||||
}
|
||||
};
|
||||
|
||||
instance.web.Dialog = instance.web.Widget.extend({
|
||||
dialog_title: "",
|
||||
|
@ -162,7 +166,7 @@ instance.web.CrashManager = instance.web.CallbackEnabled.extend({
|
|||
}
|
||||
},
|
||||
on_managed_error: function(error) {
|
||||
instance.web.dialog($('<div>' + QWeb.render('CrashManager.warning', {error: error}) + '</div>'), {
|
||||
instance.web.dialog($('<div>' + QWeb.render('CrashManager.warning', {error: error}) + '</div>'), {
|
||||
title: "OpenERP " + _.str.capitalize(error.type),
|
||||
buttons: [
|
||||
{text: _t("Ok"), click: function() { $(this).dialog("close"); }}
|
||||
|
@ -181,7 +185,7 @@ instance.web.CrashManager = instance.web.CallbackEnabled.extend({
|
|||
// Call the send method from server to send mail with details
|
||||
new instance.web.DataSet(self, 'publisher_warranty.contract').call_and_eval('send', [error.data,explanation,remark,issuename]).then(function(result){
|
||||
if (result === false) {
|
||||
alert('There was a communication error.')
|
||||
alert('There was a communication error.');
|
||||
} else {
|
||||
$this.dialog('close');
|
||||
}
|
||||
|
@ -269,12 +273,12 @@ instance.web.DatabaseManager = instance.web.Widget.extend({
|
|||
start: function() {
|
||||
var self = this;
|
||||
var fetch_db = this.rpc("/web/database/get_list", {}).pipe(
|
||||
function(result) {
|
||||
self.db_list = result.db_list;
|
||||
function(result) {
|
||||
self.db_list = result.db_list;
|
||||
},
|
||||
function (_, ev) {
|
||||
function (_, ev) {
|
||||
ev.preventDefault();
|
||||
self.db_list = null;
|
||||
self.db_list = null;
|
||||
});
|
||||
var fetch_langs = this.rpc("/web/session/get_lang_list", {}).then(function(result) {
|
||||
self.lang_list = result.lang_list;
|
||||
|
@ -284,11 +288,15 @@ instance.web.DatabaseManager = instance.web.Widget.extend({
|
|||
do_render: function() {
|
||||
var self = this;
|
||||
self.$element.html(QWeb.render("DatabaseManager", { widget : self }));
|
||||
self.$element.find(".oe_database_manager_menu").tabs();
|
||||
self.$element.find(".oe_database_manager_menu").tabs({
|
||||
show: function(event, ui) {
|
||||
$('*[autofocus]:first', ui.panel).focus();
|
||||
}
|
||||
});
|
||||
self.$element.find("form[name=create_db_form]").validate({ submitHandler: self.do_create });
|
||||
self.$element.find("form[name=drop_db_form]").validate({ submitHandler: self.do_drop });
|
||||
self.$element.find("form[name=backup_db_form]").validate({ submitHandler: self.do_backup });
|
||||
self.$element.find("form[name=restore_db_form]").validate({ submitHandler: self.do_restore });
|
||||
self.$element.find("form[name=drop_db_form]").validate({ submitHandler: self.do_drop });
|
||||
self.$element.find("form[name=backup_db_form]").validate({ submitHandler: self.do_backup });
|
||||
self.$element.find("form[name=restore_db_form]").validate({ submitHandler: self.do_restore });
|
||||
self.$element.find("form[name=change_pwd_form]").validate({
|
||||
messages: {
|
||||
old_pwd: "Please enter your previous password",
|
||||
|
@ -300,7 +308,7 @@ instance.web.DatabaseManager = instance.web.Widget.extend({
|
|||
},
|
||||
submitHandler: self.do_change_password
|
||||
});
|
||||
self.$element.find("#back_to_login").click(self.do_exit);
|
||||
self.$element.find("#back_to_login").click(self.do_exit);
|
||||
},
|
||||
destroy: function () {
|
||||
this.$element.find('#db-create, #db-drop, #db-backup, #db-restore, #db-change-password, #back-to-login').unbind('click').end().empty();
|
||||
|
@ -409,12 +417,12 @@ instance.web.DatabaseManager = instance.web.Widget.extend({
|
|||
self.display_error({
|
||||
title: 'Access Denied',
|
||||
error: 'Incorrect super-administrator password'
|
||||
})
|
||||
});
|
||||
} else {
|
||||
self.display_error({
|
||||
title: 'Restore Database',
|
||||
error: 'Could not restore the database'
|
||||
})
|
||||
});
|
||||
}
|
||||
},
|
||||
complete: function() {
|
||||
|
@ -442,6 +450,8 @@ instance.web.DatabaseManager = instance.web.Widget.extend({
|
|||
instance.web.Login = instance.web.Widget.extend({
|
||||
template: "Login",
|
||||
remember_credentials: true,
|
||||
_db_list: null,
|
||||
|
||||
init: function(parent) {
|
||||
this._super(parent);
|
||||
this.has_local_storage = typeof(localStorage) != 'undefined';
|
||||
|
@ -451,7 +461,7 @@ instance.web.Login = instance.web.Widget.extend({
|
|||
if (this.has_local_storage && this.remember_credentials) {
|
||||
this.selected_db = localStorage.getItem('last_db_login_success');
|
||||
this.selected_login = localStorage.getItem('last_login_login_success');
|
||||
if (jQuery.deparam(jQuery.param.querystring()).debug != undefined) {
|
||||
if (jQuery.deparam(jQuery.param.querystring()).debug !== undefined) {
|
||||
this.selected_password = localStorage.getItem('last_password_login_success');
|
||||
}
|
||||
}
|
||||
|
@ -470,23 +480,33 @@ instance.web.Login = instance.web.Widget.extend({
|
|||
self.databasemanager.destroy();
|
||||
self.$element.find('.oe_login_bottom').show();
|
||||
self.$element.find('.oe_login_pane').show();
|
||||
self.load_db_list();
|
||||
})
|
||||
self.load_db_list(true).then(self.proxy('_db_list_loaded'));
|
||||
});
|
||||
});
|
||||
self.load_db_list();
|
||||
return self.load_db_list().then(self.proxy('_db_list_loaded'));
|
||||
},
|
||||
load_db_list: function () {
|
||||
var self = this;
|
||||
self.rpc("/web/database/get_list", {}, function(result) {
|
||||
self.set_db_list(result.db_list);
|
||||
}, function(error, event) {
|
||||
if (error.data.fault_code === 'AccessDenied') {
|
||||
event.preventDefault();
|
||||
}
|
||||
});
|
||||
load_db_list: function (force) {
|
||||
var d = $.when(), self = this;
|
||||
if (_.isNull(this._db_list) || force) {
|
||||
d = self.rpc("/web/database/get_list", {}, function(result) {
|
||||
self._db_list = _.clone(result.db_list);
|
||||
}, function(error, event) {
|
||||
if (error.data.fault_code === 'AccessDenied') {
|
||||
event.preventDefault();
|
||||
}
|
||||
});
|
||||
}
|
||||
return d;
|
||||
},
|
||||
set_db_list: function (list) {
|
||||
this.$element.find("[name=db]").replaceWith(instance.web.qweb.render('Login.dblist', { db_list: list, selected_db: this.selected_db}))
|
||||
_db_list_loaded: function () {
|
||||
var list = this._db_list,
|
||||
dbdiv = this.$element.find('div.oe_login_dbpane');
|
||||
this.$element.find("[name=db]").replaceWith(instance.web.qweb.render('Login.dblist', { db_list: list, selected_db: this.selected_db}));
|
||||
if(list && list.length === 1) {
|
||||
dbdiv.hide();
|
||||
} else {
|
||||
dbdiv.show();
|
||||
}
|
||||
},
|
||||
on_submit: function(ev) {
|
||||
if(ev) {
|
||||
|
@ -513,19 +533,12 @@ instance.web.Login = instance.web.Widget.extend({
|
|||
do_login: function (db, login, password) {
|
||||
var self = this;
|
||||
this.$element.removeClass('oe_login_invalid');
|
||||
this.session.on_session_invalid.add({
|
||||
callback: function () {
|
||||
self.$element.addClass("oe_login_invalid");
|
||||
},
|
||||
unique: true
|
||||
});
|
||||
this.session.session_authenticate(db, login, password).then(function() {
|
||||
self.$element.removeClass("oe_login_invalid");
|
||||
return this.session.session_authenticate(db, login, password).pipe(function() {
|
||||
if (self.has_local_storage) {
|
||||
if(self.remember_credentials) {
|
||||
localStorage.setItem('last_db_login_success', db);
|
||||
localStorage.setItem('last_login_login_success', login);
|
||||
if (jQuery.deparam(jQuery.param.querystring()).debug != undefined) {
|
||||
if (jQuery.deparam(jQuery.param.querystring()).debug !== undefined) {
|
||||
localStorage.setItem('last_password_login_success', password);
|
||||
}
|
||||
} else {
|
||||
|
@ -534,6 +547,10 @@ instance.web.Login = instance.web.Widget.extend({
|
|||
localStorage.setItem('last_password_login_success', '');
|
||||
}
|
||||
}
|
||||
self.$(".oe_login_pane").fadeOut("slow");
|
||||
self.trigger("login");
|
||||
},function () {
|
||||
self.$element.addClass("oe_login_invalid");
|
||||
});
|
||||
}
|
||||
});
|
||||
|
@ -544,34 +561,33 @@ instance.web.Menu = instance.web.Widget.extend({
|
|||
this._super.apply(this, arguments);
|
||||
this.has_been_loaded = $.Deferred();
|
||||
this.maximum_visible_links = 'auto'; // # of menu to show. 0 = do not crop, 'auto' = algo
|
||||
this.data = {data:{children:[]}};
|
||||
},
|
||||
start: function() {
|
||||
this._super.apply(this, arguments);
|
||||
this.$secondary_menus = this.getParent().$element.find('.oe_secondary_menus_container');
|
||||
this.$secondary_menus.on('click', 'a[data-menu]', this.on_menu_click);
|
||||
$('html').bind('click', this.do_hide_more);
|
||||
return this.do_reload();
|
||||
},
|
||||
do_reload: function() {
|
||||
var self = this;
|
||||
return this.rpc("/web/menu/load", {}, this.on_loaded).then(function () {
|
||||
if (self.current_menu) {
|
||||
self.open_menu(self.current_menu);
|
||||
}
|
||||
});
|
||||
return this.rpc("/web/menu/load", {}).then(this.on_loaded);
|
||||
},
|
||||
on_loaded: function(data) {
|
||||
var self = this;
|
||||
this.data = data;
|
||||
this.renderElement();
|
||||
this.limit_entries();
|
||||
this.$element.on('click', 'a[data-menu]', this.on_menu_click);
|
||||
this.$secondary_menus.html(QWeb.render("Menu.secondary", { widget : this }));
|
||||
this.$element.on('click', 'a.oe_menu_more_link', function() {
|
||||
self.$element.find('.oe_menu_more').toggle();
|
||||
return false;
|
||||
});
|
||||
this.$secondary_menus.html(QWeb.render("Menu.secondary", { widget : this }));
|
||||
this.$element.on('click', 'a[data-menu]', this.on_menu_click);
|
||||
this.$secondary_menus.on('click', 'a[data-menu]', this.on_menu_click);
|
||||
// Hide second level submenus
|
||||
this.$secondary_menus.find('.oe_menu_toggler').siblings('.oe_secondary_submenu').hide();
|
||||
if (self.current_menu) {
|
||||
self.open_menu(self.current_menu);
|
||||
}
|
||||
this.has_been_loaded.resolve();
|
||||
},
|
||||
limit_entries: function() {
|
||||
|
@ -585,6 +601,7 @@ instance.web.Menu = instance.web.Widget.extend({
|
|||
$index.after($more);
|
||||
$more.find('.oe_menu_more').append($index.next().nextAll());
|
||||
}
|
||||
this.do_hide_more();
|
||||
},
|
||||
auto_limit_entries: function() {
|
||||
// TODO: auto detect overflow and bind window on resize
|
||||
|
@ -603,6 +620,7 @@ instance.web.Menu = instance.web.Widget.extend({
|
|||
open_menu: function (id) {
|
||||
var $clicked_menu, $sub_menu, $main_menu;
|
||||
$clicked_menu = this.$element.add(this.$secondary_menus).find('a[data-menu=' + id + ']');
|
||||
this.trigger('open_menu', id, $clicked_menu);
|
||||
|
||||
if (this.$secondary_menus.has($clicked_menu).length) {
|
||||
$sub_menu = $clicked_menu.parents('.oe_secondary_menu');
|
||||
|
@ -620,6 +638,9 @@ instance.web.Menu = instance.web.Widget.extend({
|
|||
this.$secondary_menus.find('.oe_secondary_menu').hide();
|
||||
$sub_menu.show();
|
||||
|
||||
// Hide/Show the leftbar menu depending of the presence of sub-items
|
||||
this.$secondary_menus.parent('.oe_leftbar').toggle(!!$sub_menu.children().length);
|
||||
|
||||
// Activate current menu item and show parents
|
||||
this.$secondary_menus.find('.oe_active').removeClass('oe_active');
|
||||
if ($main_menu !== $clicked_menu) {
|
||||
|
@ -631,56 +652,61 @@ instance.web.Menu = instance.web.Widget.extend({
|
|||
}
|
||||
}
|
||||
},
|
||||
/**
|
||||
* Call open_menu with the first menu_item matching an action_id
|
||||
*
|
||||
* @param {Number} id the action_id to match
|
||||
*/
|
||||
open_action: function (id) {
|
||||
var menu_id, $menu = this.$element.add(this.$secondary_menus).find('a[data-action-id=' + id + ']');
|
||||
if (menu_id = $menu.data('menu')) {
|
||||
var $menu = this.$element.add(this.$secondary_menus).find('a[data-action-id=' + id + ']');
|
||||
var menu_id = $menu.data('menu');
|
||||
if (menu_id) {
|
||||
this.open_menu(menu_id);
|
||||
}
|
||||
},
|
||||
on_menu_click: function(ev, id) {
|
||||
// TODO If first level menu doesnt have action trigger first leaf
|
||||
this.do_hide_more();
|
||||
id = id || 0;
|
||||
var $clicked_menu, manual = false;
|
||||
|
||||
/**
|
||||
* Process a click on a menu item
|
||||
*
|
||||
* @param {Number} id the menu_id
|
||||
*/
|
||||
menu_click: function(id) {
|
||||
if (id) {
|
||||
// We can manually activate a menu with it's id (for hash url mapping)
|
||||
manual = true;
|
||||
$clicked_menu = this.$element.find('a[data-menu=' + id + ']');
|
||||
if (!$clicked_menu.length) {
|
||||
$clicked_menu = this.$secondary_menus.find('a[data-menu=' + id + ']');
|
||||
this.do_hide_more();
|
||||
// find back the menuitem in dom to get the action
|
||||
var $item = this.$element.find('a[data-menu=' + id + ']');
|
||||
if (!$item.length) {
|
||||
$item = this.$secondary_menus.find('a[data-menu=' + id + ']');
|
||||
}
|
||||
var action_id = $item.data('action-id');
|
||||
// If first level menu doesnt have action trigger first leaf
|
||||
if (!action_id) {
|
||||
if(this.$element.has($item).length) {
|
||||
$sub_menu = this.$secondary_menus.find('.oe_secondary_menu[data-menu-parent=' + id + ']');
|
||||
$items = $sub_menu.find('a[data-action-id]').filter('[data-action-id!=""]');
|
||||
if($items.length) {
|
||||
action_id = $items.data('action-id');
|
||||
id = $items.data('menu');
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$clicked_menu = $(ev.currentTarget);
|
||||
id = $clicked_menu.data('menu');
|
||||
}
|
||||
|
||||
this.trigger('menuClicked', id, $clicked_menu);
|
||||
|
||||
if (id) {
|
||||
this.open_menu(id);
|
||||
this.current_menu = id;
|
||||
this.session.active_id = id;
|
||||
var action_id = $clicked_menu.data('action-id');
|
||||
if (action_id) {
|
||||
this.on_action(action_id);
|
||||
this.trigger('menu_click', action_id, id, $item);
|
||||
}
|
||||
}
|
||||
if (ev) {
|
||||
ev.stopPropagation();
|
||||
}
|
||||
},
|
||||
/**
|
||||
* Jquery event handler for menu click
|
||||
*
|
||||
* @param {Event} ev the jquery event
|
||||
*/
|
||||
on_menu_click: function(ev) {
|
||||
this.menu_click($(ev.currentTarget).data('menu'));
|
||||
ev.stopPropagation();
|
||||
return false;
|
||||
},
|
||||
do_show_secondary: function($sub_menu, $main_menu) {
|
||||
var self = this;
|
||||
this.$secondary_menus.show();
|
||||
if (!arguments.length) {
|
||||
return;
|
||||
}
|
||||
$sub_menu.show();
|
||||
},
|
||||
on_action: function(action) {
|
||||
}
|
||||
});
|
||||
|
||||
instance.web.UserMenu = instance.web.Widget.extend({
|
||||
|
@ -701,7 +727,9 @@ instance.web.UserMenu = instance.web.Widget.extend({
|
|||
});
|
||||
this.$element.on('click', '.oe_dropdown_options li a[data-menu]', function() {
|
||||
var f = self['on_menu_' + $(this).data('menu')];
|
||||
f && f($(this));
|
||||
if (f) {
|
||||
f($(this));
|
||||
}
|
||||
self.$element.find('.oe_dropdown_options').hide();
|
||||
return false;
|
||||
});
|
||||
|
@ -712,7 +740,7 @@ instance.web.UserMenu = instance.web.Widget.extend({
|
|||
title: _t("Change Password"),
|
||||
width : 'auto'
|
||||
}).open();
|
||||
this.dialog.$element.html(QWeb.render("Change_Pwd", self));
|
||||
this.dialog.$element.html(QWeb.render("UserMenu.password", self));
|
||||
this.dialog.$element.find("form[name=change_password_form]").validate({
|
||||
submitHandler: function (form) {
|
||||
self.rpc("/web/session/change_password",{
|
||||
|
@ -746,64 +774,20 @@ instance.web.UserMenu = instance.web.Widget.extend({
|
|||
return;
|
||||
var func = new instance.web.Model("res.users").get_func("read");
|
||||
return func(self.session.uid, ["name", "company_id"]).pipe(function(res) {
|
||||
// TODO: Show company if multicompany is in use
|
||||
var topbar_name = _.str.sprintf("%s (%s)", res.name, instance.connection.db, res.company_id[1]);
|
||||
var topbar_name = res.name;
|
||||
if(instance.connection.debug)
|
||||
topbar_name = _.str.sprintf("%s (%s)", topbar_name, instance.connection.db);
|
||||
if(res.company_id[0] > 1)
|
||||
topbar_name = _.str.sprintf("%s (%s)", topbar_name, res.company_id[1]);
|
||||
self.$element.find('.oe_topbar_name').text(topbar_name);
|
||||
var avatar_src = _.str.sprintf('%s/web/binary/image?session_id=%s&model=res.users&field=avatar&id=%s', self.session.prefix, self.session.session_id, self.session.uid);
|
||||
$avatar.attr('src', avatar_src);
|
||||
return self.shortcut_load();
|
||||
});
|
||||
};
|
||||
this.update_promise = this.update_promise.pipe(fct, fct);
|
||||
},
|
||||
on_action: function() {
|
||||
},
|
||||
shortcut_load :function(){
|
||||
var self = this,
|
||||
sc = self.session.shortcuts,
|
||||
shortcuts_ds = new instance.web.DataSet(this, 'ir.ui.view_sc');
|
||||
self.$element.find('.oe_dropdown_options a[data-menu=shortcut]').each(function() {
|
||||
$(this).parent().remove();
|
||||
});
|
||||
// TODO: better way to communicate between sections.
|
||||
// sc.bindings, because jquery does not bind/trigger on arrays...
|
||||
if (!sc.binding) {
|
||||
sc.binding = {};
|
||||
$(sc.binding).bind({
|
||||
'add': function (e, attrs) {
|
||||
shortcuts_ds.create(attrs, function (out) {
|
||||
var shortcut = QWeb.render('UserMenu.shortcut', {
|
||||
shortcuts : [{
|
||||
name : attrs.name,
|
||||
id : out.result,
|
||||
res_id : attrs.res_id
|
||||
}]
|
||||
});
|
||||
$(shortcut).appendTo(self.$element.find('.oe_dropdown_options'));
|
||||
attrs.id = out.result;
|
||||
sc.push(attrs);
|
||||
});
|
||||
},
|
||||
'remove-current': function () {
|
||||
var menu_id = self.session.active_id;
|
||||
var $shortcut = self.$element.find('.oe_dropdown_options li a[data-id=' + menu_id + ']');
|
||||
var shortcut_id = $shortcut.data('shortcut-id');
|
||||
$shortcut.remove();
|
||||
shortcuts_ds.unlink([shortcut_id]);
|
||||
var sc_new = _.reject(sc, function(shortcut){ return shortcut_id === shortcut.id});
|
||||
sc.splice(0, sc.length);
|
||||
sc.push.apply(sc, sc_new);
|
||||
}
|
||||
});
|
||||
}
|
||||
return this.rpc('/web/session/sc_list', {}, function(shortcuts) {
|
||||
sc.splice(0, sc.length);
|
||||
sc.push.apply(sc, shortcuts);
|
||||
|
||||
$(QWeb.render('UserMenu.shortcut', {'shortcuts': shortcuts}))
|
||||
.appendTo(self.$element.find('.oe_dropdown_options'));
|
||||
});
|
||||
},
|
||||
on_menu_logout: function() {
|
||||
},
|
||||
on_menu_settings: function() {
|
||||
|
@ -830,8 +814,8 @@ instance.web.UserMenu = instance.web.Widget.extend({
|
|||
title: _t("Preferences"),
|
||||
width: '700px',
|
||||
buttons: [
|
||||
{text: _t("Cancel"), click: function(){ $(this).dialog('destroy'); }},
|
||||
{text: _t("Change password"), click: function(){ self.change_password(); }},
|
||||
{text: _t("Cancel"), click: function(){ $(this).dialog('destroy'); }},
|
||||
{text: _t("Save"), click: function(){
|
||||
var inner_viewmanager = action_manager.inner_viewmanager;
|
||||
inner_viewmanager.views[inner_viewmanager.active_view].controller.do_save()
|
||||
|
@ -850,7 +834,7 @@ instance.web.UserMenu = instance.web.Widget.extend({
|
|||
on_menu_about: function() {
|
||||
var self = this;
|
||||
self.rpc("/web/webclient/version_info", {}).then(function(res) {
|
||||
var $help = $(QWeb.render("About-Page", {version_info: res}));
|
||||
var $help = $(QWeb.render("UserMenu.about", {version_info: res}));
|
||||
$help.find('a.oe_activate_debug_mode').click(function (e) {
|
||||
e.preventDefault();
|
||||
window.location = $.param.querystring(
|
||||
|
@ -860,16 +844,6 @@ instance.web.UserMenu = instance.web.Widget.extend({
|
|||
modal: true, width: 960, title: _t("About")});
|
||||
});
|
||||
},
|
||||
on_menu_shortcut: function($link) {
|
||||
var self = this,
|
||||
id = $link.data('id');
|
||||
self.session.active_id = id;
|
||||
self.rpc('/web/menu/action', {'menu_id': id}, function(ir_menu_data) {
|
||||
if (ir_menu_data.action.length){
|
||||
self.on_action(ir_menu_data.action[0][2]);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
instance.web.WebClient = instance.web.Widget.extend({
|
||||
|
@ -883,75 +857,68 @@ instance.web.WebClient = instance.web.Widget.extend({
|
|||
start: function() {
|
||||
var self = this;
|
||||
this.$element.addClass("openerp openerp-web-client-container");
|
||||
if (jQuery.param != undefined && jQuery.deparam(jQuery.param.querystring()).kitten != undefined) {
|
||||
this.$element.addClass("kitten-mode-activated");
|
||||
this.$element.delegate('img.oe-record-edit-link-img', 'hover', function(e) {
|
||||
if (jQuery.param !== undefined && jQuery.deparam(jQuery.param.querystring()).kitten !== undefined) {
|
||||
$("body").addClass("kitten-mode-activated");
|
||||
self.$element.delegate('img.oe-record-edit-link-img', 'hover', function(e) {
|
||||
self.$element.toggleClass('clark-gable');
|
||||
});
|
||||
}
|
||||
this.session.session_bind().then(function() {
|
||||
self.destroy_content();
|
||||
self.show_common();
|
||||
if (!self.session.session_is_valid()) {
|
||||
self.show_login();
|
||||
}
|
||||
});
|
||||
this.session.on_session_valid.add(function() {
|
||||
self.show_application();
|
||||
|
||||
self.user_menu.do_update();
|
||||
self.menu.do_reload();
|
||||
if(self.action_manager)
|
||||
self.action_manager.destroy();
|
||||
self.action_manager = new instance.web.ActionManager(self);
|
||||
self.action_manager.appendTo(self.$element.find('.oe_application'));
|
||||
self.bind_hashchange();
|
||||
var version_label = _t("OpenERP - Unsupported/Community Version");
|
||||
if (!self.session.openerp_entreprise) {
|
||||
self.$element.find('.oe_footer_powered').append(_.str.sprintf('<span> - <a href="http://www.openerp.com/support-or-publisher-warranty-contract" target="_blank">%s</a></span>', version_label));
|
||||
document.title = version_label;
|
||||
} else {
|
||||
self.show_application();
|
||||
}
|
||||
});
|
||||
this.$element.on('mouseenter', '.oe_systray > div:not([data-tipsy=true])', function() {
|
||||
$(this).attr('data-tipsy', 'true').tipsy().trigger('mouseenter');
|
||||
});
|
||||
},
|
||||
show_common: function() {
|
||||
var self = this;
|
||||
this.crashmanager = new instance.web.CrashManager();
|
||||
instance.connection.on_rpc_error.add(this.crashmanager.on_rpc_error);
|
||||
window.onerror = function (message, file, line) {
|
||||
self.crashmanager.on_traceback({
|
||||
type: _t("Client Error"),
|
||||
message: message,
|
||||
data: {debug: file + ':' + line}
|
||||
});
|
||||
};
|
||||
self.notification = new instance.web.Notification(this);
|
||||
self.notification.appendTo(self.$element);
|
||||
self.loading = new instance.web.Loading(self);
|
||||
self.loading.appendTo(self.$element);
|
||||
self.login = new instance.web.Login(self);
|
||||
self.login.on("login",self,self.show_application);
|
||||
self.$table = $(QWeb.render("WebClient", {}));
|
||||
self.action_manager = new instance.web.ActionManager(self);
|
||||
self.action_manager.appendTo(self.$table.find('.oe_application'));
|
||||
},
|
||||
show_login: function() {
|
||||
var self = this;
|
||||
this.destroy_content();
|
||||
this.show_common();
|
||||
self.login = new instance.web.Login(self);
|
||||
self.login.appendTo(self.$element);
|
||||
},
|
||||
show_application: function() {
|
||||
var self = this;
|
||||
this.destroy_content();
|
||||
this.show_common();
|
||||
self.$table = $(QWeb.render("WebClient", {}));
|
||||
self.$element.append(self.$table);
|
||||
self.login.$element.hide();
|
||||
self.menu = new instance.web.Menu(self);
|
||||
self.menu.replace(this.$element.find('.oe_menu_placeholder'));
|
||||
self.menu.on_action.add(this.proxy('on_menu_action'));
|
||||
self.menu.on('menu_click', this, this.on_menu_action);
|
||||
self.user_menu = new instance.web.UserMenu(self);
|
||||
self.user_menu.replace(this.$element.find('.oe_user_menu_placeholder'));
|
||||
self.user_menu.on_menu_logout.add(this.proxy('on_logout'));
|
||||
self.user_menu.on_action.add(this.proxy('on_menu_action'));
|
||||
},
|
||||
show_common: function() {
|
||||
var self = this;
|
||||
if (!this.crashmanager) {
|
||||
this.crashmanager = new instance.web.CrashManager();
|
||||
instance.connection.on_rpc_error.add(this.crashmanager.on_rpc_error);
|
||||
window.onerror = function (message, file, line) {
|
||||
self.crashmanager.on_traceback({
|
||||
type: _t("Client Error"),
|
||||
message: message,
|
||||
data: {debug: file + ':' + line}
|
||||
});
|
||||
}
|
||||
self.user_menu.do_update();
|
||||
self.bind_hashchange();
|
||||
var version_label = _t("OpenERP - Unsupported/Community Version");
|
||||
if (!self.session.openerp_entreprise) {
|
||||
self.$element.find('.oe_footer_powered').append(_.str.sprintf('<span> - <a href="http://www.openerp.com/support-or-publisher-warranty-contract" target="_blank">%s</a></span>', version_label));
|
||||
document.title = version_label;
|
||||
}
|
||||
this.notification = new instance.web.Notification(this);
|
||||
this.notification.appendTo(this.$element);
|
||||
this.loading = new instance.web.Loading(this);
|
||||
this.loading.appendTo(this.$element);
|
||||
},
|
||||
destroy_content: function() {
|
||||
_.each(_.clone(this.getChildren()), function(el) {
|
||||
|
@ -994,15 +961,25 @@ instance.web.WebClient = instance.web.Widget.extend({
|
|||
} else {
|
||||
self.menu.has_been_loaded.then(function() {
|
||||
var first_menu_id = self.menu.$element.find("a:first").data("menu");
|
||||
if(first_menu_id)
|
||||
self.menu.on_menu_click(null,first_menu_id);
|
||||
if(first_menu_id) {
|
||||
self.menu.menu_click(first_menu_id);
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
on_hashchange: function(event) {
|
||||
var self = this;
|
||||
var state = event.getState(true);
|
||||
if (!_.isEqual(this._current_state, state)) {
|
||||
this.action_manager.do_load_state(state, !!this._current_state);
|
||||
if(state.action_id === undefined && state.menu_id) {
|
||||
self.menu.has_been_loaded.then(function() {
|
||||
self.menu.do_reload().then(function() {
|
||||
self.menu.menu_click(state.menu_id)
|
||||
});
|
||||
});
|
||||
} else {
|
||||
this.action_manager.do_load_state(state, !!this._current_state);
|
||||
}
|
||||
}
|
||||
this._current_state = state;
|
||||
},
|
||||
|
@ -1016,10 +993,10 @@ instance.web.WebClient = instance.web.Widget.extend({
|
|||
},
|
||||
do_action: function(action) {
|
||||
var self = this;
|
||||
// TODO replace by client action menuclick
|
||||
// TODO replace by client action menuclick
|
||||
if(action.menu_id) {
|
||||
this.do_reload().then(function () {
|
||||
self.menu.on_menu_click(null, action.menu_id);
|
||||
self.menu.menu_click(action.menu_id);
|
||||
});
|
||||
}
|
||||
},
|
||||
|
@ -1035,7 +1012,7 @@ instance.web.EmbeddedClient = instance.web.Widget.extend({
|
|||
template: 'EmptyComponent',
|
||||
init: function(parent, action_id, options) {
|
||||
this._super(parent);
|
||||
// TODO take the xmlid of a action instead of its id
|
||||
// TODO take the xmlid of a action instead of its id
|
||||
this.action_id = action_id;
|
||||
this.options = options || {};
|
||||
this.am = new instance.web.ActionManager(this);
|
||||
|
@ -1076,7 +1053,7 @@ instance.web.embed = function (origin, dbname, login, key, action, options) {
|
|||
});
|
||||
});
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
|
|
|
@ -331,6 +331,9 @@ instance.web.EventDispatcherMixin = _.extend({}, instance.web.ParentedMixin, {
|
|||
},
|
||||
on: function(events, dest, func) {
|
||||
var self = this;
|
||||
if (!(func instanceof Function)) {
|
||||
throw new Error("Event handler must be a function.");
|
||||
}
|
||||
events = events.split(/\s+/);
|
||||
_.each(events, function(eventName) {
|
||||
self.__edispatcherEvents.on(eventName, func, dest);
|
||||
|
@ -709,6 +712,12 @@ instance.web.Widget = instance.web.Class.extend(instance.web.WidgetMixin, {
|
|||
this.$element = elem;
|
||||
}
|
||||
},
|
||||
/**
|
||||
* Shortcut for $element.find() like backbone
|
||||
*/
|
||||
"$": function() {
|
||||
return this.$element.find.apply(this.$element,arguments);
|
||||
},
|
||||
/**
|
||||
* Informs the action manager to do an action. This supposes that
|
||||
* the action manager can be found amongst the ancestors of the current widget.
|
||||
|
@ -1341,6 +1350,9 @@ instance.web.JsonRPC = instance.web.CallbackEnabled.extend({
|
|||
},
|
||||
on_rpc_error: function(error) {
|
||||
},
|
||||
get_url: function (file) {
|
||||
return this.prefix + file;
|
||||
},
|
||||
});
|
||||
|
||||
}
|
||||
|
|
|
@ -69,7 +69,6 @@ instance.web.Session = instance.web.JsonRPC.extend( /** @lends instance.web.Sess
|
|||
self.module_loaded[mod] = true;
|
||||
});
|
||||
this.context = {};
|
||||
this.shortcuts = [];
|
||||
this.active_id = null;
|
||||
return this.session_init();
|
||||
},
|
||||
|
@ -122,6 +121,10 @@ instance.web.Session = instance.web.JsonRPC.extend( /** @lends instance.web.Sess
|
|||
var base_location = document.location.protocol + '//' + document.location.host;
|
||||
var params = { db: db, login: login, password: password, base_location: base_location };
|
||||
return this.rpc("/web/session/authenticate", params).pipe(function(result) {
|
||||
if (!result.uid) {
|
||||
return $.Deferred().reject();
|
||||
}
|
||||
|
||||
_.extend(self, {
|
||||
session_id: result.session_id,
|
||||
db: result.db,
|
||||
|
@ -285,9 +288,6 @@ instance.web.Session = instance.web.JsonRPC.extend( /** @lends instance.web.Sess
|
|||
}
|
||||
}
|
||||
},
|
||||
get_url: function (file) {
|
||||
return this.prefix + file;
|
||||
},
|
||||
/**
|
||||
* Cooperative file download implementation, for ajaxy APIs.
|
||||
*
|
||||
|
@ -580,6 +580,33 @@ $.async_when = function() {
|
|||
return old_async_when.apply(this, arguments);
|
||||
};
|
||||
|
||||
/**
|
||||
* Registry for all the client actions key: tag value: widget
|
||||
*/
|
||||
instance.web.client_actions = new instance.web.Registry();
|
||||
|
||||
/**
|
||||
* Client action to reload the whole interface.
|
||||
* If params has an entry 'menu_id', it opens the given menu entry.
|
||||
*/
|
||||
instance.web.client_actions.add("reload", "instance.web.Reload");
|
||||
|
||||
instance.web.Reload = instance.web.Widget.extend({
|
||||
init: function(parent, params) {
|
||||
this._super(parent);
|
||||
this.menu_id = (params && params.menu_id) || false;
|
||||
},
|
||||
start: function() {
|
||||
if (this.menu_id) {
|
||||
// open the given menu id
|
||||
var url_without_fragment = window.location.toString().split("#", 1)[0];
|
||||
window.location = url_without_fragment + "#menu_id=" + this.menu_id;
|
||||
} else {
|
||||
window.location.reload();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
};
|
||||
|
||||
// vim:et fdc=0 fdl=0 foldnestmax=3 fdm=syntax:
|
||||
|
|
|
@ -1079,44 +1079,44 @@ instance.web.ProxyDataSet = instance.web.DataSetSearch.extend({
|
|||
this.create_function = null;
|
||||
this.write_function = null;
|
||||
this.read_function = null;
|
||||
this.default_get_function = null;
|
||||
this.unlink_function = null;
|
||||
},
|
||||
read_ids: function () {
|
||||
read_ids: function (ids, fields, options) {
|
||||
if (this.read_function) {
|
||||
return this.read_function.apply(null, arguments);
|
||||
return this.read_function(ids, fields, options, this._super);
|
||||
} else {
|
||||
return this._super.apply(this, arguments);
|
||||
}
|
||||
},
|
||||
default_get: function(fields, options) {
|
||||
return this._super(fields, options).then(this.on_default_get);
|
||||
if (this.default_get_function) {
|
||||
return this.default_get_function(fields, options, this._super);
|
||||
} else {
|
||||
return this._super.apply(this, arguments);
|
||||
}
|
||||
},
|
||||
on_default_get: function(result) {},
|
||||
create: function(data, callback, error_callback) {
|
||||
this.on_create(data);
|
||||
if (this.create_function) {
|
||||
return this.create_function(data, callback, error_callback);
|
||||
return this.create_function(data, this._super).then(callback, error_callback);
|
||||
} else {
|
||||
console.warn("trying to create a record using default proxy dataset behavior");
|
||||
return $.async_when({"result": undefined}).then(callback);
|
||||
return this._super.apply(this, arguments);
|
||||
}
|
||||
},
|
||||
on_create: function(data) {},
|
||||
write: function (id, data, options, callback) {
|
||||
this.on_write(id, data);
|
||||
write: function (id, data, options, callback, error_callback) {
|
||||
if (this.write_function) {
|
||||
return this.write_function(id, data, options, callback);
|
||||
return this.write_function(id, data, options, this._super).then(callback, error_callback);
|
||||
} else {
|
||||
console.warn("trying to write a record using default proxy dataset behavior");
|
||||
return $.async_when({"result": true}).then(callback);
|
||||
return this._super.apply(this, arguments);
|
||||
}
|
||||
},
|
||||
on_write: function(id, data) {},
|
||||
unlink: function(ids, callback, error_callback) {
|
||||
this.on_unlink(ids);
|
||||
console.warn("trying to unlink a record using default proxy dataset behavior");
|
||||
return $.async_when({"result": true}).then(callback);
|
||||
if (this.unlink_function) {
|
||||
return this.unlink_function(ids, this._super).then(callback, error_callback);
|
||||
} else {
|
||||
return this._super.apply(this, arguments);
|
||||
}
|
||||
},
|
||||
on_unlink: function(ids) {}
|
||||
});
|
||||
|
||||
instance.web.CompoundContext = instance.web.Class.extend({
|
||||
|
|
|
@ -111,7 +111,7 @@ instance.web.format_value = function (value, descriptor, value_if_empty) {
|
|||
return value_if_empty === undefined ? '' : value_if_empty;
|
||||
}
|
||||
var l10n = _t.database.parameters;
|
||||
switch (descriptor.type || (descriptor.field && descriptor.field.type)) {
|
||||
switch (descriptor.widget || descriptor.type || (descriptor.field && descriptor.field.type)) {
|
||||
case 'id':
|
||||
return value.toString();
|
||||
case 'integer':
|
||||
|
@ -171,7 +171,7 @@ instance.web.parse_value = function (value, descriptor, value_if_empty) {
|
|||
case "":
|
||||
return value_if_empty === undefined ? false : value_if_empty;
|
||||
}
|
||||
switch (descriptor.type || (descriptor.field && descriptor.field.type)) {
|
||||
switch (descriptor.widget || descriptor.type || (descriptor.field && descriptor.field.type)) {
|
||||
case 'integer':
|
||||
var tmp;
|
||||
do {
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -98,7 +98,7 @@ instance.web.ViewEditor = instance.web.OldWidget.extend({
|
|||
var view_widget = [{'name': 'view_name', 'string':'View Name', 'type': 'char', 'required': true, 'value' : this.model + '.custom_' + Math.round(Math.random() * 1000)},
|
||||
{'name': 'view_type', 'string': 'View Type', 'type': 'selection', 'required': true, 'value': 'Form', 'selection': [['',''],['tree', 'Tree'],['form', 'Form'],['graph', 'Graph'],['calendar', 'Calender']]},
|
||||
{'name': 'proirity', 'string': 'Priority', 'type': 'float', 'required': true, 'value':'16'}];
|
||||
this.create_view_dialog.$element.append('<table id="create_view" style="width:400px" class="oe_forms"></table>');
|
||||
this.create_view_dialog.$element.append('<table id="create_view" style="width:400px" class="oe_form"></table>');
|
||||
this.create_view_widget = [];
|
||||
_.each(view_widget, function(widget) {
|
||||
var type_widget = new (self.property.get_any([widget.type])) (self.create_view_dialog, widget);
|
||||
|
@ -877,7 +877,7 @@ instance.web.ViewEditor = instance.web.OldWidget.extend({
|
|||
'fonts' : {'name':'fonts', 'string': 'fonts', 'type': 'char'},
|
||||
};
|
||||
var arch_val = self.get_object_by_id(this.one_object.clicked_tr_id,this.one_object['main_object'], []);
|
||||
this.edit_node_dialog.$element.append('<table id="rec_table" style="width:400px" class="oe_forms"></table>');
|
||||
this.edit_node_dialog.$element.append('<table id="rec_table" style="width:400px" class="oe_form"></table>');
|
||||
this.edit_widget = [];
|
||||
self.ready = $.when(self.on_groups(properties)).then(function () {
|
||||
_PROPERTIES_ATTRIBUTES['groups']['selection'] = self.groups;
|
||||
|
@ -963,7 +963,7 @@ instance.web.ViewEditor = instance.web.OldWidget.extend({
|
|||
{text: _t("Cancel"), click: function() { self.add_node_dialog.close(); }}
|
||||
]
|
||||
}).open();
|
||||
this.add_node_dialog.$element.append('<table id="rec_table" style="width:420px" class="oe_forms"><tbody><tr></tbody></table>');
|
||||
this.add_node_dialog.$element.append('<table id="rec_table" style="width:420px" class="oe_form"><tbody><tr></tbody></table>');
|
||||
var table_selector = self.add_node_dialog.$element.find('table[id=rec_table] tbody');
|
||||
_.each(render_list, function(node) {
|
||||
type_widget = new (self.property.get_any([node.type])) (self.add_node_dialog, node);
|
||||
|
|
|
@ -106,7 +106,6 @@ instance.web.FormView = instance.web.View.extend(_.extend({}, instance.web.form.
|
|||
this.rendering_engine.render_to($dest);
|
||||
}
|
||||
|
||||
this.$sidebar = this.options.$sidebar || this.$element.find('.oe_form_sidebar');
|
||||
|
||||
this.$buttons = $(QWeb.render("FormView.buttons", {'widget':self}));
|
||||
if (this.options.$buttons) {
|
||||
|
@ -116,8 +115,6 @@ instance.web.FormView = instance.web.View.extend(_.extend({}, instance.web.form.
|
|||
}
|
||||
this.$buttons.on('click','.oe_form_button_create',this.on_button_create);
|
||||
this.$buttons.on('click','.oe_form_button_edit',this.on_button_edit);
|
||||
this.$buttons.on('click','.oe_form_button_duplicate',this.on_button_duplicate);
|
||||
this.$buttons.on('click','.oe_form_button_delete',this.on_button_delete);
|
||||
this.$buttons.on('click','.oe_form_button_save',this.on_button_save);
|
||||
this.$buttons.on('click','.oe_form_button_cancel',this.on_button_cancel);
|
||||
|
||||
|
@ -132,19 +129,18 @@ instance.web.FormView = instance.web.View.extend(_.extend({}, instance.web.form.
|
|||
self.on_pager_action(action);
|
||||
});
|
||||
|
||||
this.$sidebar = this.options.$sidebar || this.$element.find('.oe_form_sidebar');
|
||||
if (!this.sidebar && this.options.$sidebar) {
|
||||
this.sidebar = new instance.web.Sidebar(this);
|
||||
this.sidebar.appendTo(this.$sidebar);
|
||||
if(this.fields_view.toolbar) {
|
||||
this.sidebar.add_toolbar(this.fields_view.toolbar);
|
||||
}
|
||||
this.sidebar.add_items('other', [{
|
||||
label: _t('Set Default'),
|
||||
form: this,
|
||||
callback: function (item) {
|
||||
item.form.open_defaults_dialog();
|
||||
}
|
||||
}]);
|
||||
this.sidebar.add_items('other', [
|
||||
{ label: _t('Delete'), callback: self.on_button_delete },
|
||||
{ label: _t('Duplicate'), callback: self.on_button_duplicate },
|
||||
{ label: _t('Set Default'), callback: function (item) { self.open_defaults_dialog(); } },
|
||||
]);
|
||||
}
|
||||
this.on("change:mode", this, this.switch_mode);
|
||||
this.set({mode: this.options.initial_mode});
|
||||
|
@ -527,12 +523,14 @@ instance.web.FormView = instance.web.View.extend(_.extend({}, instance.web.form.
|
|||
if(this.get("mode") == "view") {
|
||||
self.$buttons.find('.oe_form_buttons_edit').hide();
|
||||
self.$buttons.find('.oe_form_buttons_view').show();
|
||||
self.$sidebar.show();
|
||||
_.each(this.fields,function(field){
|
||||
field.set({"force_readonly": true});
|
||||
});
|
||||
} else {
|
||||
self.$buttons.find('.oe_form_buttons_edit').show();
|
||||
self.$buttons.find('.oe_form_buttons_view').hide();
|
||||
self.$sidebar.hide();
|
||||
_.each(this.fields,function(field){
|
||||
field.set({"force_readonly": false});
|
||||
});
|
||||
|
@ -796,41 +794,36 @@ instance.web.FormView = instance.web.View.extend(_.extend({}, instance.web.form.
|
|||
var self = this;
|
||||
var fields = _.chain(this.fields)
|
||||
.map(function (field, name) {
|
||||
var value_ = field.get_value();
|
||||
var value = field.get_value();
|
||||
// ignore fields which are empty, invisible, readonly, o2m
|
||||
// or m2m
|
||||
if (!value_
|
||||
if (!value
|
||||
|| field.get('invisible')
|
||||
|| field.get("readonly")
|
||||
|| field.field.type === 'one2many'
|
||||
|| field.field.type === 'many2many') {
|
||||
return false;
|
||||
}
|
||||
var displayed;
|
||||
switch(field.field.type) {
|
||||
var displayed = value;
|
||||
switch (field.field.type) {
|
||||
case 'selection':
|
||||
displayed = _(field.values).find(function (option) {
|
||||
return option[0] === value_;
|
||||
return option[0] === value;
|
||||
})[1];
|
||||
break;
|
||||
case 'many2one':
|
||||
displayed = value_;
|
||||
break;
|
||||
default:
|
||||
displayed = value_;
|
||||
}
|
||||
|
||||
return {
|
||||
name: name,
|
||||
string: field.node_atts.string,
|
||||
value: value_,
|
||||
string: field.node.attrs.string || field.field.string,
|
||||
value: value,
|
||||
displayed: displayed,
|
||||
// convert undefined to false
|
||||
change_default: !!field.field.change_default
|
||||
}
|
||||
})
|
||||
.compact()
|
||||
.sortBy(function (field) { return field.node_atts.string; })
|
||||
.sortBy(function (field) { return field.string; })
|
||||
.value();
|
||||
var conditions = _.chain(fields)
|
||||
.filter(function (field) { return field.change_default; })
|
||||
|
@ -944,7 +937,7 @@ instance.web.form.FormRenderingEngine = instance.web.form.FormRenderingEngineInt
|
|||
}
|
||||
var obj = self.fields_registry.get_any([$elem.attr('widget'), self.fvg.fields[name].type]);
|
||||
if (!obj) {
|
||||
throw new Error("Widget type '"+ key + "' is not implemented");
|
||||
throw new Error("Widget type '"+ $elem.attr('widget') + "' is not implemented");
|
||||
}
|
||||
var w = new (obj)(self.view, instance.web.xml_to_json($elem[0]));
|
||||
var $label = self.labels[$elem.attr("name")];
|
||||
|
@ -986,9 +979,6 @@ instance.web.form.FormRenderingEngine = instance.web.form.FormRenderingEngineInt
|
|||
},
|
||||
process: function($tag, layout) {
|
||||
var self = this;
|
||||
if ($tag.attr('layout') === 'auto') {
|
||||
$tag.addClass('oe_form_autolayout');
|
||||
}
|
||||
layout = $tag.attr('layout') || layout || 'auto';
|
||||
$tag.removeAttr('layout');
|
||||
var tagname = $tag[0].nodeName.toLowerCase();
|
||||
|
@ -1158,6 +1148,9 @@ instance.web.form.FormRenderingEngine = instance.web.form.FormRenderingEngineInt
|
|||
if (width.substr(-1) === '%') {
|
||||
total -= iwidth;
|
||||
width = iwidth + '%';
|
||||
} else {
|
||||
// Absolute width
|
||||
$td.css('min-width', width + 'px');
|
||||
}
|
||||
$td.attr('width', width);
|
||||
$child.removeAttr('width');
|
||||
|
@ -1715,6 +1708,7 @@ instance.web.form.AbstractField = instance.web.form.FormWidget.extend(_.extend({
|
|||
});
|
||||
},
|
||||
renderElement: function() {
|
||||
var self = this;
|
||||
this._super();
|
||||
if (this.field.translate) {
|
||||
this.$element.addClass('oe_form_field_translatable');
|
||||
|
@ -1722,8 +1716,14 @@ instance.web.form.AbstractField = instance.web.form.FormWidget.extend(_.extend({
|
|||
this.field_manager.open_translate_dialog(this);
|
||||
}, this));
|
||||
}
|
||||
this.$label = this.view.$element.find('label[for=' + this.id_for_label + ']');
|
||||
if (instance.connection.debug) {
|
||||
this.do_attach_tooltip(this, this.view.$element.find('label[for=' + this.id_for_label + ']')[0] || this.$element);
|
||||
this.do_attach_tooltip(this, this.$label[0] || this.$element);
|
||||
this.$label.off('dblclick').on('dblclick', function() {
|
||||
console.log("Field '%s' of type '%s' in View: %o", self.name, (self.node.attrs.widget || self.field.type), self.view);
|
||||
window.w = self;
|
||||
console.log("window.w =", window.w);
|
||||
});
|
||||
}
|
||||
if (!this.disable_utility_classes) {
|
||||
this.off("change:required", this, this._set_required);
|
||||
|
@ -2302,16 +2302,6 @@ instance.web.form.FieldSelection = instance.web.form.AbstractField.extend(_.exte
|
|||
});
|
||||
})();
|
||||
|
||||
instance.web.form.dialog = function(content, options) {
|
||||
options = _.extend({
|
||||
width: '90%',
|
||||
height: 'auto',
|
||||
min_width: '800px'
|
||||
}, options || {});
|
||||
var dialog = new instance.web.Dialog(null, options, content).open();
|
||||
return dialog.$element;
|
||||
};
|
||||
|
||||
/**
|
||||
* A mixin containing some useful methods to handle completion inputs.
|
||||
*/
|
||||
|
@ -2742,27 +2732,24 @@ instance.web.form.FieldOne2Many = instance.web.form.AbstractField.extend({
|
|||
if (self.get("effective_readonly")) {
|
||||
view.options.addable = null;
|
||||
view.options.deletable = null;
|
||||
view.options.isClarkGable = false;
|
||||
}
|
||||
} else if (view.view_type === "form") {
|
||||
if (self.get("effective_readonly")) {
|
||||
view.view_type = 'form';
|
||||
}
|
||||
view.options.not_interactible_on_create = true;
|
||||
} else if (view.view_type === "kanban") {
|
||||
if (self.get("effective_readonly")) {
|
||||
view.options.action_buttons = false;
|
||||
view.options.quick_creatable = false;
|
||||
}
|
||||
}
|
||||
views.push(view);
|
||||
});
|
||||
this.views = views;
|
||||
|
||||
this.viewmanager = new instance.web.ViewManager(this, this.dataset, views, {
|
||||
$sidebar: false,
|
||||
});
|
||||
this.viewmanager.template = 'One2Many.viewmanager';
|
||||
this.viewmanager.registry = instance.web.views.extend({
|
||||
list: 'instance.web.form.One2ManyListView',
|
||||
form: 'instance.web.form.One2ManyFormView',
|
||||
kanban: 'instance.web.form.One2ManyKanbanView',
|
||||
});
|
||||
this.viewmanager = new instance.web.form.One2ManyViewManager(this, this.dataset, views, {});
|
||||
this.viewmanager.o2m = self;
|
||||
var once = $.Deferred().then(function() {
|
||||
self.init_form_last_update.resolve();
|
||||
});
|
||||
|
@ -2946,6 +2933,51 @@ instance.web.form.FieldOne2Many = instance.web.form.AbstractField.extend({
|
|||
},
|
||||
});
|
||||
|
||||
instance.web.form.One2ManyViewManager = instance.web.ViewManager.extend({
|
||||
template: 'One2Many.viewmanager',
|
||||
init: function(parent, dataset, views, flags) {
|
||||
this._super(parent, dataset, views, _.extend({}, flags, {$sidebar: false}));
|
||||
this.registry = this.registry.extend({
|
||||
list: 'instance.web.form.One2ManyListView',
|
||||
form: 'instance.web.form.One2ManyFormView',
|
||||
kanban: 'instance.web.form.One2ManyKanbanView',
|
||||
});
|
||||
},
|
||||
switch_view: function(mode, unused) {
|
||||
if (mode !== 'form') {
|
||||
return this._super(mode, unused);
|
||||
}
|
||||
var self = this;
|
||||
var id = self.o2m.dataset.index !== null ? self.o2m.dataset.ids[self.o2m.dataset.index] : null;
|
||||
var pop = new instance.web.form.FormOpenPopup(self.o2m.view);
|
||||
pop.show_element(self.o2m.field.relation, id, self.o2m.build_context(), {
|
||||
title: _t("Open: ") + self.name,
|
||||
create_function: function(data) {
|
||||
return self.o2m.dataset.create(data).then(function(r) {
|
||||
self.o2m.dataset.set_ids(self.o2m.dataset.ids.concat([r.result]));
|
||||
self.o2m.dataset.on_change();
|
||||
});
|
||||
},
|
||||
write_function: function(id, data, options) {
|
||||
return self.o2m.dataset.write(id, data, {}).then(function() {
|
||||
self.o2m.reload_current_view();
|
||||
});
|
||||
},
|
||||
alternative_form_view: self.o2m.field.views ? self.o2m.field.views["form"] : undefined,
|
||||
parent_view: self.o2m.view,
|
||||
child_name: self.o2m.name,
|
||||
read_function: function() {
|
||||
return self.o2m.dataset.read_ids.apply(self.o2m.dataset, arguments);
|
||||
},
|
||||
form_view_options: {'not_interactible_on_create':true},
|
||||
readonly: self.o2m.get("effective_readonly")
|
||||
});
|
||||
pop.on_select_elements.add_last(function() {
|
||||
self.o2m.reload_current_view();
|
||||
});
|
||||
},
|
||||
});
|
||||
|
||||
instance.web.form.One2ManyDataSet = instance.web.BufferedDataSet.extend({
|
||||
get_context: function() {
|
||||
this.context = this.o2m.build_context([this.o2m.name]);
|
||||
|
@ -2961,7 +2993,6 @@ instance.web.form.One2ManyListView = instance.web.ListView.extend({
|
|||
} else {
|
||||
var self = this;
|
||||
var pop = new instance.web.form.SelectCreatePopup(this);
|
||||
pop.on_default_get.add(self.dataset.on_default_get);
|
||||
pop.select_element(
|
||||
self.o2m.field.relation,
|
||||
{
|
||||
|
@ -2994,7 +3025,11 @@ instance.web.form.One2ManyListView = instance.web.ListView.extend({
|
|||
var pop = new instance.web.form.FormOpenPopup(self.o2m.view);
|
||||
pop.show_element(self.o2m.field.relation, id, self.o2m.build_context(), {
|
||||
title: _t("Open: ") + self.name,
|
||||
auto_write: false,
|
||||
write_function: function(id, data) {
|
||||
return self.o2m.dataset.write(id, data, {}, function(r) {
|
||||
self.o2m.reload_current_view();
|
||||
});
|
||||
},
|
||||
alternative_form_view: self.o2m.field.views ? self.o2m.field.views["form"] : undefined,
|
||||
parent_view: self.o2m.view,
|
||||
child_name: self.o2m.name,
|
||||
|
@ -3004,11 +3039,6 @@ instance.web.form.One2ManyListView = instance.web.ListView.extend({
|
|||
form_view_options: {'not_interactible_on_create':true},
|
||||
readonly: self.o2m.get("effective_readonly")
|
||||
});
|
||||
pop.on_write.add(function(id, data) {
|
||||
self.o2m.dataset.write(id, data, {}, function(r) {
|
||||
self.o2m.reload_current_view();
|
||||
});
|
||||
});
|
||||
},
|
||||
do_button_action: function (name, id, callback) {
|
||||
var self = this;
|
||||
|
@ -3039,28 +3069,6 @@ var lazy_build_o2m_kanban_view = function() {
|
|||
if (! instance.web_kanban || instance.web.form.One2ManyKanbanView)
|
||||
return;
|
||||
instance.web.form.One2ManyKanbanView = instance.web_kanban.KanbanView.extend({
|
||||
open_record: function(id) {
|
||||
var self = this;
|
||||
var pop = new instance.web.form.FormOpenPopup(self.o2m.view);
|
||||
pop.show_element(self.o2m.field.relation, id, self.o2m.build_context(), {
|
||||
title: _t("Open: ") + self.name,
|
||||
auto_write: false,
|
||||
alternative_form_view: self.o2m.field.views ? self.o2m.field.views["form"] : undefined,
|
||||
parent_view: self.o2m.view,
|
||||
child_name: self.o2m.name,
|
||||
read_function: function() {
|
||||
return self.o2m.dataset.read_ids.apply(self.o2m.dataset, arguments);
|
||||
},
|
||||
form_view_options: {'not_interactible_on_create':true},
|
||||
readonly: self.o2m.get("effective_readonly"),
|
||||
});
|
||||
pop.on_write.add(function(id, data) {
|
||||
self.o2m.dataset.write(id, data, {}, function(r) {
|
||||
self.o2m.reload_current_view();
|
||||
});
|
||||
});
|
||||
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -3150,7 +3158,7 @@ instance.web.form.FieldMany2ManyTags = instance.web.form.AbstractField.extend(_.
|
|||
});
|
||||
}).bind('hideDropdown', function() {
|
||||
self._drop_shown = false;
|
||||
}).bind('hideDropdown', function() {
|
||||
}).bind('showDropdown', function() {
|
||||
self._drop_shown = true;
|
||||
});
|
||||
self.tags = self.$text.textext()[0].tags();
|
||||
|
@ -3266,7 +3274,6 @@ instance.web.form.FieldMany2Many = instance.web.form.AbstractField.extend({
|
|||
'addable': self.get("effective_readonly") ? null : _t("Add"),
|
||||
'deletable': self.get("effective_readonly") ? false : true,
|
||||
'selectable': self.multi_selection,
|
||||
'isClarkGable': self.get("effective_readonly") ? false : true
|
||||
});
|
||||
var embedded = (this.field.views || {}).tree;
|
||||
if (embedded) {
|
||||
|
@ -3340,61 +3347,369 @@ instance.web.form.Many2ManyListView = instance.web.ListView.extend(/** @lends in
|
|||
}
|
||||
});
|
||||
|
||||
instance.web.form.FieldMany2ManyKanban = instance.web.form.AbstractField.extend(_.extend({}, instance.web.form.CompletionFieldMixin, {
|
||||
disable_utility_classes: true,
|
||||
init: function(field_manager, node) {
|
||||
this._super(field_manager, node);
|
||||
instance.web.form.CompletionFieldMixin.init.call(this);
|
||||
m2m_kanban_lazy_init();
|
||||
this.is_loaded = $.Deferred();
|
||||
this.initial_is_loaded = this.is_loaded;
|
||||
this.is_setted = $.Deferred();
|
||||
},
|
||||
start: function() {
|
||||
this._super.apply(this, arguments);
|
||||
|
||||
var self = this;
|
||||
|
||||
this.dataset = new instance.web.form.Many2ManyDataSet(this, this.field.relation);
|
||||
this.dataset.m2m = this;
|
||||
this.dataset.on_unlink.add_last(function(ids) {
|
||||
self.dataset_changed();
|
||||
});
|
||||
|
||||
this.is_setted.then(function() {
|
||||
self.load_view();
|
||||
});
|
||||
this.is_loaded.then(function() {
|
||||
self.on("change:effective_readonly", self, function() {
|
||||
self.is_loaded = self.is_loaded.pipe(function() {
|
||||
self.kanban_view.destroy();
|
||||
return $.when(self.load_view()).then(function() {
|
||||
self.reload_content();
|
||||
});
|
||||
});
|
||||
});
|
||||
})
|
||||
},
|
||||
set_value: function(value_) {
|
||||
value_ = value_ || [];
|
||||
if (value_.length >= 1 && value_[0] instanceof Array) {
|
||||
value_ = value_[0][2];
|
||||
}
|
||||
this._super(value_);
|
||||
this.dataset.set_ids(value_);
|
||||
var self = this;
|
||||
self.reload_content();
|
||||
this.is_setted.resolve();
|
||||
},
|
||||
load_view: function() {
|
||||
var self = this;
|
||||
this.kanban_view = new instance.web.form.Many2ManyKanbanView(this, this.dataset, false, {
|
||||
'create_text': _t("Add"),
|
||||
'creatable': self.get("effective_readonly") ? false : true,
|
||||
'quick_creatable': self.get("effective_readonly") ? false : true,
|
||||
});
|
||||
var embedded = (this.field.views || {}).kanban;
|
||||
if (embedded) {
|
||||
this.kanban_view.set_embedded_view(embedded);
|
||||
}
|
||||
this.kanban_view.m2m = this;
|
||||
var loaded = $.Deferred();
|
||||
this.kanban_view.on_loaded.add_last(function() {
|
||||
self.initial_is_loaded.resolve();
|
||||
loaded.resolve();
|
||||
});
|
||||
this.kanban_view.do_switch_view.add_last(_.bind(this.open_popup, this));
|
||||
$.async_when().then(function () {
|
||||
self.kanban_view.appendTo(self.$element);
|
||||
});
|
||||
return loaded;
|
||||
},
|
||||
reload_content: function() {
|
||||
var self = this;
|
||||
this.is_loaded = this.is_loaded.pipe(function() {
|
||||
return self.kanban_view.do_search(self.build_domain(), self.dataset.get_context(), []);
|
||||
});
|
||||
},
|
||||
dataset_changed: function() {
|
||||
this.set({'value': [commands.replace_with(this.dataset.ids)]});
|
||||
},
|
||||
open_popup: function(type, unused) {
|
||||
if (type !== "form")
|
||||
return;
|
||||
var self = this;
|
||||
if (this.dataset.index === null) {
|
||||
var pop = new instance.web.form.SelectCreatePopup(this);
|
||||
pop.select_element(
|
||||
this.field.relation,
|
||||
{
|
||||
title: _t("Add: ") + this.name
|
||||
},
|
||||
new instance.web.CompoundDomain(this.build_domain(), ["!", ["id", "in", this.dataset.ids]]),
|
||||
this.build_context()
|
||||
);
|
||||
pop.on_select_elements.add(function(element_ids) {
|
||||
_.each(element_ids, function(one_id) {
|
||||
if(! _.detect(self.dataset.ids, function(x) {return x == one_id;})) {
|
||||
self.dataset.set_ids([].concat(self.dataset.ids, [one_id]));
|
||||
self.dataset_changed();
|
||||
self.reload_content();
|
||||
}
|
||||
});
|
||||
});
|
||||
} else {
|
||||
var id = self.dataset.ids[self.dataset.index];
|
||||
var pop = new instance.web.form.FormOpenPopup(self.view);
|
||||
pop.show_element(self.field.relation, id, self.build_context(), {
|
||||
title: _t("Open: ") + self.name,
|
||||
write_function: function(id, data, options) {
|
||||
return self.dataset.write(id, data, {}).then(function() {
|
||||
self.reload_content();
|
||||
});
|
||||
},
|
||||
alternative_form_view: self.field.views ? self.field.views["form"] : undefined,
|
||||
parent_view: self.view,
|
||||
child_name: self.name,
|
||||
readonly: self.get("effective_readonly")
|
||||
});
|
||||
}
|
||||
},
|
||||
add_id: function(id) {
|
||||
this.quick_create.add_id(id);
|
||||
},
|
||||
}));
|
||||
|
||||
function m2m_kanban_lazy_init() {
|
||||
if (instance.web.form.Many2ManyKanbanView)
|
||||
return;
|
||||
instance.web.form.Many2ManyKanbanView = instance.web_kanban.KanbanView.extend({
|
||||
quick_create_class: 'instance.web.form.Many2ManyQuickCreate',
|
||||
_is_quick_create_enabled: function() {
|
||||
return this._super() && ! this.group_by;
|
||||
},
|
||||
});
|
||||
instance.web.form.Many2ManyQuickCreate = instance.web.Widget.extend({
|
||||
template: 'Many2ManyKanban.quick_create',
|
||||
|
||||
/**
|
||||
* close_btn: If true, the widget will display a "Close" button able to trigger
|
||||
* a "close" event.
|
||||
*/
|
||||
init: function(parent, dataset, context, buttons) {
|
||||
this._super(parent);
|
||||
this.m2m = this.getParent().view.m2m;
|
||||
this.m2m.quick_create = this;
|
||||
this._dataset = dataset;
|
||||
this._buttons = buttons || false;
|
||||
this._context = context || {};
|
||||
},
|
||||
start: function () {
|
||||
var self = this;
|
||||
self.$text = this.$element.find('input').css("width", "200px");
|
||||
self.$text.textext({
|
||||
plugins : 'arrow autocomplete',
|
||||
autocomplete: {
|
||||
render: function(suggestion) {
|
||||
return $('<span class="text-label"/>').
|
||||
data('index', suggestion['index']).html(suggestion['label']);
|
||||
}
|
||||
},
|
||||
ext: {
|
||||
autocomplete: {
|
||||
selectFromDropdown: function() {
|
||||
$(this).trigger('hideDropdown');
|
||||
var index = Number(this.selectedSuggestionElement().children().children().data('index'));
|
||||
var data = self.search_result[index];
|
||||
if (data.id) {
|
||||
self.add_id(data.id);
|
||||
} else {
|
||||
data.action();
|
||||
}
|
||||
},
|
||||
},
|
||||
itemManager: {
|
||||
itemToString: function(item) {
|
||||
return item.name;
|
||||
},
|
||||
},
|
||||
},
|
||||
}).bind('getSuggestions', function(e, data) {
|
||||
var _this = this;
|
||||
var str = !!data ? data.query || '' : '';
|
||||
self.m2m.get_search_result(str).then(function(result) {
|
||||
self.search_result = result;
|
||||
$(_this).trigger('setSuggestions', {result : _.map(result, function(el, i) {
|
||||
return _.extend(el, {index:i});
|
||||
})});
|
||||
});
|
||||
});
|
||||
self.$text.focusout(function() {
|
||||
self.$text.val("");
|
||||
});
|
||||
},
|
||||
focus: function() {
|
||||
this.$text.focus();
|
||||
},
|
||||
add_id: function(id) {
|
||||
var self = this;
|
||||
self.$text.val("");
|
||||
self.trigger('added', id);
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* @class
|
||||
* @extends instance.web.OldWidget
|
||||
* Class with everything which is common between FormOpenPopup and SelectCreatePopup.
|
||||
*/
|
||||
instance.web.form.SelectCreatePopup = instance.web.OldWidget.extend(/** @lends instance.web.form.SelectCreatePopup# */{
|
||||
template: "SelectCreatePopup",
|
||||
instance.web.form.AbstractFormPopup = instance.web.OldWidget.extend({
|
||||
template: "AbstractFormPopup.render",
|
||||
/**
|
||||
* options:
|
||||
* -readonly: only applicable when not in creation mode, default to false
|
||||
* - alternative_form_view
|
||||
* - write_function
|
||||
* - read_function
|
||||
* - create_function
|
||||
* - parent_view
|
||||
* - child_name
|
||||
* - form_view_options
|
||||
*/
|
||||
init_popup: function(model, row_id, domain, context, options) {
|
||||
this.row_id = row_id;
|
||||
this.model = model;
|
||||
this.domain = domain || [];
|
||||
this.context = context || {};
|
||||
this.options = options;
|
||||
_.defaults(this.options, {
|
||||
});
|
||||
},
|
||||
init_dataset: function() {
|
||||
var self = this;
|
||||
this.created_elements = [];
|
||||
this.dataset = new instance.web.ProxyDataSet(this, this.model, this.context);
|
||||
this.dataset.read_function = this.options.read_function;
|
||||
this.dataset.create_function = function(data, sup) {
|
||||
var fct = self.options.create_function || sup;
|
||||
return fct.call(this, data).then(function(r) {
|
||||
self.created_elements.push(r.result);
|
||||
});
|
||||
};
|
||||
this.dataset.write_function = function(id, data, options, sup) {
|
||||
var fct = self.options.write_function || sup;
|
||||
return fct.call(this, id, data, options).then(self.on_write_completed);
|
||||
};
|
||||
this.dataset.parent_view = this.options.parent_view;
|
||||
this.dataset.child_name = this.options.child_name;
|
||||
},
|
||||
display_popup: function() {
|
||||
var self = this;
|
||||
this.renderElement();
|
||||
new instance.web.Dialog(this, {
|
||||
width: '90%',
|
||||
min_width: '800px',
|
||||
close: function() {
|
||||
self.check_exit();
|
||||
},
|
||||
title: this.options.title || "",
|
||||
}, this.$element).open();
|
||||
this.start();
|
||||
},
|
||||
on_write_completed: function() {},
|
||||
setup_form_view: function() {
|
||||
var self = this;
|
||||
if (this.row_id) {
|
||||
this.dataset.ids = [this.row_id];
|
||||
this.dataset.index = 0;
|
||||
} else {
|
||||
this.dataset.index = null;
|
||||
}
|
||||
var options = _.clone(self.options.form_view_options) || {};
|
||||
if (this.row_id !== null) {
|
||||
options.initial_mode = this.options.readonly ? "view" : "edit";
|
||||
}
|
||||
this.view_form = new instance.web.FormView(this, this.dataset, false, options);
|
||||
if (this.options.alternative_form_view) {
|
||||
this.view_form.set_embedded_view(this.options.alternative_form_view);
|
||||
}
|
||||
this.view_form.appendTo(this.$element.find(".oe-form-view-popup-form-placeholder"));
|
||||
this.view_form.on_loaded.add_last(function() {
|
||||
var $buttons = self.view_form.$element.find(".oe_form_buttons");
|
||||
var multi_select = self.row_id === null && ! self.options.disable_multiple_selection;
|
||||
$buttons.html(QWeb.render("AbstractFormPopup.buttons", {multi_select: multi_select}));
|
||||
var $snbutton = $buttons.find(".oe_abstractformpopup-form-save-new");
|
||||
$snbutton.click(function() {
|
||||
$.when(self.view_form.do_save()).then(function() {
|
||||
self.view_form.reload_mutex.exec(function() {
|
||||
self.view_form.on_button_new();
|
||||
});
|
||||
});
|
||||
});
|
||||
var $sbutton = $buttons.find(".oe_abstractformpopup-form-save");
|
||||
$sbutton.click(function() {
|
||||
$.when(self.view_form.do_save()).then(function() {
|
||||
self.view_form.reload_mutex.exec(function() {
|
||||
self.check_exit();
|
||||
});
|
||||
});
|
||||
});
|
||||
var $cbutton = $buttons.find(".oe_abstractformpopup-form-close");
|
||||
$cbutton.click(function() {
|
||||
self.check_exit();
|
||||
});
|
||||
if (self.row_id !== null && self.options.readonly) {
|
||||
$snbutton.hide();
|
||||
$sbutton.hide();
|
||||
$cbutton.text(_t("Close"));
|
||||
}
|
||||
self.view_form.do_show();
|
||||
});
|
||||
},
|
||||
on_select_elements: function(element_ids) {
|
||||
},
|
||||
check_exit: function() {
|
||||
if (this.created_elements.length > 0) {
|
||||
this.on_select_elements(this.created_elements);
|
||||
}
|
||||
this.destroy();
|
||||
},
|
||||
destroy: function () {
|
||||
this.$element.dialog('close');
|
||||
this._super();
|
||||
},
|
||||
});
|
||||
|
||||
/**
|
||||
* Class to display a popup containing a form view.
|
||||
*/
|
||||
instance.web.form.FormOpenPopup = instance.web.form.AbstractFormPopup.extend({
|
||||
show_element: function(model, row_id, context, options) {
|
||||
this.init_popup(model, row_id, [], context, options);
|
||||
_.defaults(this.options, {
|
||||
});
|
||||
this.display_popup();
|
||||
},
|
||||
start: function() {
|
||||
this._super();
|
||||
this.init_dataset();
|
||||
this.setup_form_view();
|
||||
},
|
||||
});
|
||||
|
||||
/**
|
||||
* Class to display a popup to display a list to search a row. It also allows
|
||||
* to switch to a form view to create a new row.
|
||||
*/
|
||||
instance.web.form.SelectCreatePopup = instance.web.form.AbstractFormPopup.extend({
|
||||
/**
|
||||
* options:
|
||||
* - initial_ids
|
||||
* - initial_view: form or search (default search)
|
||||
* - disable_multiple_selection
|
||||
* - alternative_form_view
|
||||
* - create_function (defaults to a naive saving behavior)
|
||||
* - parent_view
|
||||
* - child_name
|
||||
* - form_view_options
|
||||
* - list_view_options
|
||||
* - read_function
|
||||
*/
|
||||
select_element: function(model, options, domain, context) {
|
||||
this.init_popup(model, null, domain, context, options);
|
||||
var self = this;
|
||||
this.model = model;
|
||||
this.domain = domain || [];
|
||||
this.context = context || {};
|
||||
this.options = _.defaults(options || {}, {"initial_view": "search", "create_function": function() {
|
||||
return self.create_row.apply(self, arguments);
|
||||
}, read_function: null});
|
||||
this.initial_ids = this.options.initial_ids;
|
||||
this.created_elements = [];
|
||||
this.renderElement();
|
||||
instance.web.form.dialog(this.$element, {
|
||||
close: function() {
|
||||
self.check_exit();
|
||||
},
|
||||
title: options.title || ""
|
||||
_.defaults(this.options, {
|
||||
initial_view: "search",
|
||||
});
|
||||
this.start();
|
||||
this.initial_ids = this.options.initial_ids;
|
||||
this.display_popup();
|
||||
},
|
||||
start: function() {
|
||||
this._super();
|
||||
var self = this;
|
||||
this.dataset = new instance.web.ProxyDataSet(this, this.model,
|
||||
this.context);
|
||||
this.dataset.create_function = function() {
|
||||
return self.options.create_function.apply(null, arguments).then(function(r) {
|
||||
self.created_elements.push(r.result);
|
||||
});
|
||||
};
|
||||
this.dataset.write_function = function() {
|
||||
return self.write_row.apply(self, arguments);
|
||||
};
|
||||
this.dataset.read_function = this.options.read_function;
|
||||
this.dataset.parent_view = this.options.parent_view;
|
||||
this.dataset.child_name = this.options.child_name;
|
||||
this.dataset.on_default_get.add(this.on_default_get);
|
||||
this.init_dataset();
|
||||
if (this.options.initial_view == "search") {
|
||||
self.rpc('/web/session/eval_domain_and_context', {
|
||||
domains: [],
|
||||
|
@ -3413,10 +3728,6 @@ instance.web.form.SelectCreatePopup = instance.web.OldWidget.extend(/** @lends i
|
|||
this.new_object();
|
||||
}
|
||||
},
|
||||
stop: function () {
|
||||
this.$element.dialog('close');
|
||||
this._super();
|
||||
},
|
||||
setup_search_view: function(search_defaults) {
|
||||
var self = this;
|
||||
if (this.searchview) {
|
||||
|
@ -3474,22 +3785,6 @@ instance.web.form.SelectCreatePopup = instance.web.OldWidget.extend(/** @lends i
|
|||
self.view_list.do_search(results.domain, results.context, results.group_by);
|
||||
});
|
||||
},
|
||||
create_row: function() {
|
||||
var self = this;
|
||||
var wdataset = new instance.web.DataSetSearch(this, this.model, this.context, this.domain);
|
||||
wdataset.parent_view = this.options.parent_view;
|
||||
wdataset.child_name = this.options.child_name;
|
||||
return wdataset.create.apply(wdataset, arguments);
|
||||
},
|
||||
write_row: function() {
|
||||
var self = this;
|
||||
var wdataset = new instance.web.DataSetSearch(this, this.model, this.context, this.domain);
|
||||
wdataset.parent_view = this.options.parent_view;
|
||||
wdataset.child_name = this.options.child_name;
|
||||
return wdataset.write.apply(wdataset, arguments);
|
||||
},
|
||||
on_select_elements: function(element_ids) {
|
||||
},
|
||||
on_click_element: function(ids) {
|
||||
this.selected_ids = ids || [];
|
||||
if(this.selected_ids.length > 0) {
|
||||
|
@ -3499,52 +3794,14 @@ instance.web.form.SelectCreatePopup = instance.web.OldWidget.extend(/** @lends i
|
|||
}
|
||||
},
|
||||
new_object: function() {
|
||||
var self = this;
|
||||
if (this.searchview) {
|
||||
this.searchview.hide();
|
||||
}
|
||||
if (this.view_list) {
|
||||
this.view_list.$element.hide();
|
||||
}
|
||||
this.dataset.index = null;
|
||||
this.view_form = new instance.web.FormView(this, this.dataset, false, self.options.form_view_options);
|
||||
if (this.options.alternative_form_view) {
|
||||
this.view_form.set_embedded_view(this.options.alternative_form_view);
|
||||
}
|
||||
this.view_form.appendTo(this.$element.find(".oe-select-create-popup-view-form"));
|
||||
this.view_form.on_loaded.add_last(function() {
|
||||
var $buttons = self.view_form.$element.find(".oe_form_buttons");
|
||||
$buttons.html(QWeb.render("SelectCreatePopup.form.buttons", {widget:self}));
|
||||
var $nbutton = $buttons.find(".oe_selectcreatepopup-form-save-new");
|
||||
$nbutton.click(function() {
|
||||
$.when(self.view_form.do_save()).then(function() {
|
||||
self.view_form.reload_mutex.exec(function() {
|
||||
self.view_form.on_button_new();
|
||||
});
|
||||
});
|
||||
});
|
||||
var $nbutton = $buttons.find(".oe_selectcreatepopup-form-save");
|
||||
$nbutton.click(function() {
|
||||
$.when(self.view_form.do_save()).then(function() {
|
||||
self.view_form.reload_mutex.exec(function() {
|
||||
self.check_exit();
|
||||
});
|
||||
});
|
||||
});
|
||||
var $cbutton = $buttons.find(".oe_selectcreatepopup-form-close");
|
||||
$cbutton.click(function() {
|
||||
self.check_exit();
|
||||
});
|
||||
});
|
||||
this.view_form.do_show();
|
||||
this.setup_form_view();
|
||||
},
|
||||
check_exit: function() {
|
||||
if (this.created_elements.length > 0) {
|
||||
this.on_select_elements(this.created_elements);
|
||||
}
|
||||
this.destroy();
|
||||
},
|
||||
on_default_get: function(res) {}
|
||||
});
|
||||
|
||||
instance.web.form.SelectCreateListView = instance.web.ListView.extend({
|
||||
|
@ -3561,101 +3818,6 @@ instance.web.form.SelectCreateListView = instance.web.ListView.extend({
|
|||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* @class
|
||||
* @extends instance.web.OldWidget
|
||||
*/
|
||||
instance.web.form.FormOpenPopup = instance.web.OldWidget.extend(/** @lends instance.web.form.FormOpenPopup# */{
|
||||
template: "FormOpenPopup",
|
||||
/**
|
||||
* options:
|
||||
* - alternative_form_view
|
||||
* - auto_write (default true)
|
||||
* - read_function
|
||||
* - parent_view
|
||||
* - child_name
|
||||
* - form_view_options
|
||||
* - readonly
|
||||
*/
|
||||
show_element: function(model, row_id, context, options) {
|
||||
this.model = model;
|
||||
this.row_id = row_id;
|
||||
this.context = context || {};
|
||||
this.options = _.defaults(options || {}, {"auto_write": true});
|
||||
this.renderElement();
|
||||
instance.web.dialog(this.$element, {
|
||||
title: options.title || '',
|
||||
modal: true,
|
||||
width: 960,
|
||||
height: 600
|
||||
});
|
||||
this.start();
|
||||
},
|
||||
start: function() {
|
||||
this._super();
|
||||
this.dataset = new instance.web.form.FormOpenDataset(this, this.model, this.context);
|
||||
this.dataset.fop = this;
|
||||
this.dataset.ids = [this.row_id];
|
||||
this.dataset.index = 0;
|
||||
this.dataset.parent_view = this.options.parent_view;
|
||||
this.dataset.child_name = this.options.child_name;
|
||||
this.setup_form_view();
|
||||
},
|
||||
on_write: function(id, data) {
|
||||
if (!this.options.auto_write)
|
||||
return;
|
||||
var self = this;
|
||||
var wdataset = new instance.web.DataSetSearch(this, this.model, this.context, this.domain);
|
||||
wdataset.parent_view = this.options.parent_view;
|
||||
wdataset.child_name = this.options.child_name;
|
||||
wdataset.write(id, data, {}, function(r) {
|
||||
self.on_write_completed();
|
||||
});
|
||||
},
|
||||
on_write_completed: function() {},
|
||||
setup_form_view: function() {
|
||||
var self = this;
|
||||
var FormClass = instance.web.views.get_object('form');
|
||||
var options = _.clone(self.options.form_view_options) || {};
|
||||
options.initial_mode = this.options.readonly ? "view" : "edit";
|
||||
this.view_form = new FormClass(this, this.dataset, false, options);
|
||||
if (this.options.alternative_form_view) {
|
||||
this.view_form.set_embedded_view(this.options.alternative_form_view);
|
||||
}
|
||||
this.view_form.appendTo(this.$element.find(".oe-form-open-popup-form-view"));
|
||||
this.view_form.on_loaded.add_last(function() {
|
||||
var $buttons = self.view_form.$element.find(".oe_form_buttons");
|
||||
$buttons.html(QWeb.render("FormOpenPopup.form.buttons"));
|
||||
var $nbutton = $buttons.find(".oe_formopenpopup-form-save");
|
||||
$nbutton.click(function() {
|
||||
self.view_form.do_save().then(function() {
|
||||
self.destroy();
|
||||
});
|
||||
});
|
||||
var $cbutton = $buttons.find(".oe_formopenpopup-form-close");
|
||||
$cbutton.click(function() {
|
||||
self.destroy();
|
||||
});
|
||||
if (self.options.readonly) {
|
||||
$nbutton.hide();
|
||||
$cbutton.text(_t("Close"));
|
||||
}
|
||||
self.view_form.do_show();
|
||||
});
|
||||
this.dataset.on_write.add(this.on_write);
|
||||
}
|
||||
});
|
||||
|
||||
instance.web.form.FormOpenDataset = instance.web.ProxyDataSet.extend({
|
||||
read_ids: function() {
|
||||
if (this.fop.options.read_function) {
|
||||
return this.fop.options.read_function.apply(null, arguments);
|
||||
} else {
|
||||
return this._super.apply(this, arguments);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
instance.web.form.FieldReference = instance.web.form.AbstractField.extend(_.extend({}, instance.web.form.ReinitializeFieldMixin, {
|
||||
template: 'FieldReference',
|
||||
init: function(field_manager, node) {
|
||||
|
@ -3999,7 +4161,8 @@ instance.web.form.widgets = new instance.web.Registry({
|
|||
'selection' : 'instance.web.form.FieldSelection',
|
||||
'many2one' : 'instance.web.form.FieldMany2One',
|
||||
'many2many' : 'instance.web.form.FieldMany2Many',
|
||||
'many2manytags' : 'instance.web.form.FieldMany2ManyTags',
|
||||
'many2many_tags' : 'instance.web.form.FieldMany2ManyTags',
|
||||
'many2many_kanban' : 'instance.web.form.FieldMany2ManyKanban',
|
||||
'one2many' : 'instance.web.form.FieldOne2Many',
|
||||
'one2many_list' : 'instance.web.form.FieldOne2Many',
|
||||
'reference' : 'instance.web.form.FieldReference',
|
||||
|
|
|
@ -10,7 +10,7 @@ instance.web.ListView = instance.web.View.extend( /** @lends instance.web.ListVi
|
|||
// records can be selected one by one
|
||||
'selectable': true,
|
||||
// list rows can be deleted
|
||||
'deletable': true,
|
||||
'deletable': false,
|
||||
// whether the column headers should be displayed
|
||||
'header': true,
|
||||
// display addition button, with that label
|
||||
|
@ -20,8 +20,7 @@ instance.web.ListView = instance.web.View.extend( /** @lends instance.web.ListVi
|
|||
'sortable': true,
|
||||
// whether the view rows can be reordered (via vertical drag & drop)
|
||||
'reorderable': true,
|
||||
// display an edit icon linking to form view
|
||||
'isClarkGable': true
|
||||
'action_buttons': true,
|
||||
},
|
||||
/**
|
||||
* Core class for list-type displays.
|
||||
|
@ -70,8 +69,7 @@ instance.web.ListView = instance.web.View.extend( /** @lends instance.web.ListVi
|
|||
this.groups.datagroup = new instance.web.DataGroup(
|
||||
this, this.model,
|
||||
dataset.get_domain(),
|
||||
dataset.get_context(),
|
||||
{});
|
||||
dataset.get_context());
|
||||
this.groups.datagroup.sort = this.dataset._sort;
|
||||
}
|
||||
|
||||
|
@ -256,16 +254,17 @@ instance.web.ListView = instance.web.View.extend( /** @lends instance.web.ListVi
|
|||
e.stopPropagation();
|
||||
var $this = $(this);
|
||||
self.dataset.sort($this.data('id'));
|
||||
if ($this.find('span').length) {
|
||||
$this.find('span').toggleClass( 'ui-icon-triangle-1-s ui-icon-triangle-1-n');
|
||||
if($this.hasClass("sortdown") || $this.hasClass("sortup")) {
|
||||
$this.toggleClass("sortdown").toggleClass("sortup");
|
||||
} else {
|
||||
$this.append('<span class="ui-icon ui-icon-triangle-1-n">') .siblings('.oe-sortable').find('span').remove();
|
||||
$this.toggleClass("sortdown");
|
||||
}
|
||||
$this.siblings('.oe-sortable').removeClass("sortup sortdown");
|
||||
|
||||
self.reload_content();
|
||||
});
|
||||
|
||||
// Add and delete
|
||||
// Add button and Import link
|
||||
if (!this.$buttons) {
|
||||
this.$buttons = $(QWeb.render("ListView.buttons", {'widget':self}));
|
||||
if (this.options.$buttons) {
|
||||
|
@ -275,11 +274,11 @@ instance.web.ListView = instance.web.View.extend( /** @lends instance.web.ListVi
|
|||
}
|
||||
this.$buttons.find('.oe_list_add')
|
||||
.click(this.proxy('do_add_record'))
|
||||
.prop('disabled', grouped && this.options.editable)
|
||||
.end()
|
||||
.find('.oe_list_delete')
|
||||
.click(this.proxy('do_delete_selected'))
|
||||
.prop('disabled', true);
|
||||
.prop('disabled', grouped && this.options.editable);
|
||||
this.$buttons.on('click', '.oe_list_button_import', function() {
|
||||
self.on_sidebar_import();
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
||||
// Pager
|
||||
|
@ -339,6 +338,9 @@ instance.web.ListView = instance.web.View.extend( /** @lends instance.web.ListVi
|
|||
if (!this.sidebar && this.options.$sidebar) {
|
||||
this.sidebar = new instance.web.Sidebar(this);
|
||||
this.sidebar.appendTo(this.options.$sidebar);
|
||||
this.sidebar.add_items('other', [
|
||||
{ label: _t('Delete'), callback: this.do_delete_selected },
|
||||
]);
|
||||
this.sidebar.add_toolbar(this.fields_view.toolbar);
|
||||
}
|
||||
},
|
||||
|
@ -356,11 +358,18 @@ instance.web.ListView = instance.web.View.extend( /** @lends instance.web.ListVi
|
|||
this.dataset._length = dataset._length;
|
||||
}
|
||||
|
||||
var page = this.page + 1,
|
||||
total = Math.floor(dataset.size() / this.limit()) + 1;
|
||||
var total = dataset.size();
|
||||
var spager = '-';
|
||||
if (total) {
|
||||
var range_start = this.page * this.limit() + 1;
|
||||
var range_stop = range_start - 1 + this.limit();
|
||||
if (range_stop > total) {
|
||||
range_stop = total;
|
||||
}
|
||||
spager = _.str.sprintf('%d-%d of %d', range_start, range_stop, total);
|
||||
}
|
||||
|
||||
this.$pager.find('.oe-pager-state').text(isNaN(total)
|
||||
? '-' : _.str.sprintf('%d / %d', page, total));
|
||||
this.$pager.find('.oe-pager-state').text(spager);
|
||||
},
|
||||
/**
|
||||
* Sets up the listview's columns: merges view and fields data, move
|
||||
|
@ -598,7 +607,6 @@ instance.web.ListView = instance.web.View.extend( /** @lends instance.web.ListVi
|
|||
* @param {Array} records selected record values
|
||||
*/
|
||||
do_select: function (ids, records) {
|
||||
this.$buttons.find('.oe_list_delete').attr('disabled', !ids.length);
|
||||
if (!ids.length) {
|
||||
this.dataset.index = 0;
|
||||
if (this.sidebar) {
|
||||
|
@ -669,7 +677,12 @@ instance.web.ListView = instance.web.View.extend( /** @lends instance.web.ListVi
|
|||
* Handles deletion of all selected lines
|
||||
*/
|
||||
do_delete_selected: function () {
|
||||
this.do_delete(this.groups.get_selection().ids);
|
||||
var ids = this.groups.get_selection().ids;
|
||||
if (ids.length) {
|
||||
this.do_delete(this.groups.get_selection().ids);
|
||||
} else {
|
||||
this.do_warn(_t("Warning"), _t("You must select at least one record."));
|
||||
}
|
||||
},
|
||||
/**
|
||||
* Computes the aggregates for the current list view, either on the
|
||||
|
@ -807,15 +820,18 @@ instance.web.ListView = instance.web.View.extend( /** @lends instance.web.ListVi
|
|||
}
|
||||
},
|
||||
no_result: function () {
|
||||
this.$element.find('.oe_view_nocontent').remove();
|
||||
if (this.groups.group_by
|
||||
|| !this.options.action
|
||||
|| !this.options.action.help) {
|
||||
return;
|
||||
}
|
||||
this.$element.children('table').replaceWith(
|
||||
$('<div class="oe_listview_nocontent">')
|
||||
.append($('<img>', { src: '/web/static/src/img/list_empty_arrow.png' }))
|
||||
.append($('<div>').html(this.options.action.help)));
|
||||
this.$element.find('table:first').hide();
|
||||
this.$element.prepend(
|
||||
$('<div class="oe_view_nocontent">')
|
||||
.append($('<img>', { src: '/web/static/src/img/view_empty_arrow.png' }))
|
||||
.append($('<div>').html(this.options.action.help))
|
||||
);
|
||||
}
|
||||
});
|
||||
instance.web.ListView.List = instance.web.Class.extend( /** @lends instance.web.ListView.List# */{
|
||||
|
@ -931,11 +947,7 @@ instance.web.ListView.List = instance.web.Class.extend( /** @lends instance.web.
|
|||
if (!self.dataset.select_id(row_id)) {
|
||||
throw "Could not find id in dataset"
|
||||
}
|
||||
var view;
|
||||
if ($(e.target).is('.oe-record-edit-link-img')) {
|
||||
view = 'form';
|
||||
}
|
||||
self.row_clicked(e, view);
|
||||
self.row_clicked(e);
|
||||
}
|
||||
});
|
||||
},
|
||||
|
@ -1010,9 +1022,6 @@ instance.web.ListView.List = instance.web.Class.extend( /** @lends instance.web.
|
|||
if (this.options.selectable) {
|
||||
cells.push('<th class="oe-record-selector"></td>');
|
||||
}
|
||||
if (this.options.isClarkGable) {
|
||||
cells.push('<th class="oe-record-edit-link"></td>');
|
||||
}
|
||||
_(this.columns).each(function(column) {
|
||||
if (column.invisible === '1') {
|
||||
return;
|
||||
|
@ -1321,9 +1330,6 @@ instance.web.ListView.Groups = instance.web.Class.extend( /** @lends instance.we
|
|||
if (self.options.selectable) {
|
||||
$row.append('<td>');
|
||||
}
|
||||
if (self.options.isClarkGable) {
|
||||
$row.append('<td>');
|
||||
}
|
||||
_(self.columns).chain()
|
||||
.filter(function (column) {return !column.invisible;})
|
||||
.each(function (column) {
|
||||
|
|
|
@ -70,6 +70,8 @@ openerp.web.list_editable = function (instance) {
|
|||
*/
|
||||
do_add_record: function () {
|
||||
if (this.options.editable) {
|
||||
this.$element.find('table:first').show();
|
||||
this.$element.find('.oe_view_nocontent').remove();
|
||||
this.groups.new_record();
|
||||
} else {
|
||||
this._super();
|
||||
|
@ -202,7 +204,7 @@ openerp.web.list_editable = function (instance) {
|
|||
var $new_row = $('<tr>', {
|
||||
id: _.uniqueId('oe-editable-row-'),
|
||||
'data-id': record_id,
|
||||
'class': row ? $(row).attr('class') : '' + ' oe_forms',
|
||||
'class': (row ? $(row).attr('class') : '') + ' oe_form',
|
||||
click: function (e) {e.stopPropagation();}
|
||||
})
|
||||
.delegate('button.oe-edit-row-save', 'click', function () {
|
||||
|
@ -398,8 +400,6 @@ openerp.web.list_editable = function (instance) {
|
|||
|
||||
if (this.view.editable_list.options.selectable)
|
||||
$("<td>").appendTo($element);
|
||||
if (this.view.editable_list.options.isClarkGable)
|
||||
$("<td>").appendTo($element);
|
||||
|
||||
$xml.children().each(function(i, el) {
|
||||
var modifiers = JSON.parse($(el).attr("modifiers") || "{}");
|
||||
|
|
|
@ -237,7 +237,7 @@ instance.web.ViewManager = instance.web.Widget.extend({
|
|||
var self = this;
|
||||
this.$element.find('.oe_view_manager_switch a').click(function() {
|
||||
self.on_mode_switch($(this).data('view-type'));
|
||||
});
|
||||
}).tipsy();
|
||||
var views_ids = {};
|
||||
_.each(this.views_src, function(view) {
|
||||
self.views[view.view_type] = $.extend({}, view, {
|
||||
|
@ -295,7 +295,7 @@ instance.web.ViewManager = instance.web.Widget.extend({
|
|||
if (view.embedded_view) {
|
||||
controller.set_embedded_view(view.embedded_view);
|
||||
}
|
||||
controller.do_switch_view.add_last(this.on_mode_switch);
|
||||
controller.do_switch_view.add_last(_.bind(this.switch_view, this));
|
||||
controller.do_prev_view.add_last(this.on_prev_view);
|
||||
var container = this.$element.find(".oe_view_manager_view_" + view_type);
|
||||
view_promise = controller.appendTo(container);
|
||||
|
@ -342,6 +342,14 @@ instance.web.ViewManager = instance.web.Widget.extend({
|
|||
});
|
||||
return view_promise;
|
||||
},
|
||||
/**
|
||||
* Method used internally when a view asks to switch view. This method is meant
|
||||
* to be extended by child classes to change the default behavior, which simply
|
||||
* consist to switch to the asked view.
|
||||
*/
|
||||
switch_view: function(view_type, no_store) {
|
||||
return this.on_mode_switch(view_type, no_store);
|
||||
},
|
||||
/**
|
||||
* Returns to the view preceding the caller view in this manager's
|
||||
* navigation history (the navigation history is appended to via
|
||||
|
@ -607,6 +615,17 @@ instance.web.ViewManagerAction = instance.web.ViewManager.extend({
|
|||
case 'edit':
|
||||
this.do_edit_resource($option.data('model'), $option.data('id'), { name : $option.text() });
|
||||
break;
|
||||
case 'manage_filters':
|
||||
this.do_action({
|
||||
res_model: 'ir.filters',
|
||||
views: [[false, 'list'], [false, 'form']],
|
||||
type: 'ir.actions.act_window',
|
||||
context: {
|
||||
search_default_my_filters: true,
|
||||
search_default_model_id: this.dataset.model
|
||||
}
|
||||
});
|
||||
break;
|
||||
default:
|
||||
if (val) {
|
||||
console.log("No debug handler for ", val);
|
||||
|
@ -636,8 +655,6 @@ instance.web.ViewManagerAction = instance.web.ViewManager.extend({
|
|||
var self = this;
|
||||
|
||||
return $.when(this._super(view_type, no_store)).then(function () {
|
||||
self.shortcut_check(self.views[view_type]);
|
||||
|
||||
var controller = self.views[self.active_view].controller,
|
||||
fvg = controller.fields_view,
|
||||
view_id = (fvg && fvg.view_id) || '--';
|
||||
|
@ -649,15 +666,6 @@ instance.web.ViewManagerAction = instance.web.ViewManager.extend({
|
|||
self.$element.find('.oe_view_title_text').text(fvg.arch.attrs.string || fvg.name);
|
||||
}
|
||||
|
||||
var $title = self.$element.find('.oe_view_title_text'),
|
||||
$search_prefix = $title.find('span.oe_searchable_view');
|
||||
if (controller.searchable !== false && self.flags.search_view !== false) {
|
||||
if (!$search_prefix.length) {
|
||||
$title.prepend('<span class="oe_searchable_view">' + _t("Search: ") + '</span>');
|
||||
}
|
||||
} else {
|
||||
$search_prefix.remove();
|
||||
}
|
||||
});
|
||||
},
|
||||
do_push_state: function(state) {
|
||||
|
@ -681,44 +689,6 @@ instance.web.ViewManagerAction = instance.web.ViewManager.extend({
|
|||
self.views[self.active_view].controller.do_load_state(state, warm);
|
||||
});
|
||||
},
|
||||
shortcut_check : function(view) {
|
||||
var self = this;
|
||||
var grandparent = this.getParent() && this.getParent().getParent();
|
||||
// display shortcuts if on the first view for the action
|
||||
var $shortcut_toggle = this.$element.find('.oe-shortcut-toggle');
|
||||
if (!this.action.name ||
|
||||
!(view.view_type === this.views_src[0].view_type
|
||||
&& view.view_id === this.views_src[0].view_id)) {
|
||||
$shortcut_toggle.hide();
|
||||
return;
|
||||
}
|
||||
$shortcut_toggle.removeClass('oe-shortcut-remove').show();
|
||||
if (_(this.session.shortcuts).detect(function (shortcut) {
|
||||
return shortcut.res_id === self.session.active_id; })) {
|
||||
$shortcut_toggle.addClass("oe-shortcut-remove");
|
||||
}
|
||||
this.shortcut_add_remove();
|
||||
},
|
||||
shortcut_add_remove: function() {
|
||||
var self = this;
|
||||
var $shortcut_toggle = this.$element.find('.oe-shortcut-toggle');
|
||||
$shortcut_toggle
|
||||
.unbind("click")
|
||||
.click(function() {
|
||||
if ($shortcut_toggle.hasClass("oe-shortcut-remove")) {
|
||||
$(self.session.shortcuts.binding).trigger('remove-current');
|
||||
$shortcut_toggle.removeClass("oe-shortcut-remove");
|
||||
} else {
|
||||
$(self.session.shortcuts.binding).trigger('add', {
|
||||
'user_id': self.session.uid,
|
||||
'res_id': self.session.active_id,
|
||||
'resource': 'ir.ui.menu',
|
||||
'name': self.action.name
|
||||
});
|
||||
$shortcut_toggle.addClass("oe-shortcut-remove");
|
||||
}
|
||||
});
|
||||
},
|
||||
display_title: function () {
|
||||
return this.action.name;
|
||||
}
|
||||
|
@ -730,7 +700,7 @@ instance.web.Sidebar = instance.web.Widget.extend({
|
|||
var view = this.getParent();
|
||||
this.sections = [
|
||||
{ 'name' : 'print', 'label' : _t('Print'), },
|
||||
{ 'name' : 'files', 'label' : _t('Attachement'), },
|
||||
{ 'name' : 'files', 'label' : _t('Attachment'), },
|
||||
{ 'name' : 'other', 'label' : _t('More'), }
|
||||
];
|
||||
this.items = {
|
||||
|
@ -777,25 +747,6 @@ instance.web.Sidebar = instance.web.Widget.extend({
|
|||
self.$element.html(QWeb.render('Sidebar', {widget: self}));
|
||||
this.$element.find('ul').hide();
|
||||
},
|
||||
add_section: function() {
|
||||
var self = this;
|
||||
},
|
||||
add_toolbar: function(toolbar) {
|
||||
var self = this;
|
||||
_.each(['print','action','relate'], function(type) {
|
||||
var items = toolbar[type];
|
||||
if (items) {
|
||||
for (var i = 0; i < items.length; i++) {
|
||||
items[i] = {
|
||||
label: items[i]['name'],
|
||||
action: items[i],
|
||||
classname: 'oe_sidebar_' + type
|
||||
}
|
||||
}
|
||||
self.add_items(type=='print' ? 'print' : 'other', items);
|
||||
}
|
||||
});
|
||||
},
|
||||
/**
|
||||
* For each item added to the section:
|
||||
*
|
||||
|
@ -828,6 +779,22 @@ instance.web.Sidebar = instance.web.Widget.extend({
|
|||
this.redraw();
|
||||
}
|
||||
},
|
||||
add_toolbar: function(toolbar) {
|
||||
var self = this;
|
||||
_.each(['print','action','relate'], function(type) {
|
||||
var items = toolbar[type];
|
||||
if (items) {
|
||||
for (var i = 0; i < items.length; i++) {
|
||||
items[i] = {
|
||||
label: items[i]['name'],
|
||||
action: items[i],
|
||||
classname: 'oe_sidebar_' + type
|
||||
}
|
||||
}
|
||||
self.add_items(type=='print' ? 'print' : 'other', items);
|
||||
}
|
||||
});
|
||||
},
|
||||
on_item_action_clicked: function(item) {
|
||||
var self = this;
|
||||
self.getParent().sidebar_context().then(function (context) {
|
||||
|
@ -1313,11 +1280,6 @@ instance.web.str_to_xml = function(s) {
|
|||
return xDoc;
|
||||
}
|
||||
|
||||
/**
|
||||
* Registry for all the client actions key: tag value: widget
|
||||
*/
|
||||
instance.web.client_actions = new instance.web.Registry();
|
||||
|
||||
/**
|
||||
* Registry for all the main views
|
||||
*/
|
||||
|
|
|
@ -125,7 +125,7 @@
|
|||
<li><a href="#db_change_password">Password</a></li>
|
||||
<li><a id="back_to_login" href="#">Back to Login</a></li>
|
||||
</ul>
|
||||
<form id="db_create" name="create_db_form" class="oe_forms" method="POST">
|
||||
<form id="db_create" name="create_db_form" method="POST">
|
||||
<table align="center" class="db_option_table">
|
||||
<tr>
|
||||
<th colspan="2" class="option_string"> CREATE DATABASE </th>
|
||||
|
@ -136,7 +136,7 @@
|
|||
</tr>
|
||||
<tr>
|
||||
<td><label for="db_name">New database name:</label></td>
|
||||
<td><input type="text" name="db_name" class="required" matches="^[a-zA-Z][a-zA-Z0-9_]+$"/></td>
|
||||
<td><input type="text" name="db_name" class="required" matches="^[a-zA-Z][a-zA-Z0-9_]+$" autofocus="true"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><label for="demo_data">Load Demonstration data:</label></td>
|
||||
|
@ -165,7 +165,7 @@
|
|||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
<form id="db_drop" name="drop_db_form" class="oe_forms" method="POST">
|
||||
<form id="db_drop" name="drop_db_form" method="POST">
|
||||
<table align="center" class="db_option_table">
|
||||
<tr>
|
||||
<th colspan="2" class="option_string"> DROP DATABASE </th>
|
||||
|
@ -190,7 +190,7 @@
|
|||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
<form id="db_backup" name="backup_db_form" class="oe_forms" method="POST" target="backup-target" action="/web/database/backup">
|
||||
<form id="db_backup" name="backup_db_form" method="POST" target="backup-target" action="/web/database/backup">
|
||||
<input type="hidden" name="token"/>
|
||||
<table align="center" class="db_option_table">
|
||||
<tr>
|
||||
|
@ -216,7 +216,7 @@
|
|||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
<form id="db_restore" name="restore_db_form" class="oe_forms" method="POST">
|
||||
<form id="db_restore" name="restore_db_form" method="POST">
|
||||
<table align="center" class="db_option_table">
|
||||
<tr>
|
||||
<th colspan="2" class="option_string"> RESTORE DATABASE </th>
|
||||
|
@ -238,7 +238,7 @@
|
|||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
<form id="db_change_password" name="change_pwd_form" class="oe_forms" method="POST">
|
||||
<form id="db_change_password" name="change_pwd_form" method="POST">
|
||||
<table align="center" class="db_option_table">
|
||||
<tr>
|
||||
<th colspan="2" class="option_string"> CHANGE MASTER PASSWORD </th>
|
||||
|
@ -264,32 +264,6 @@
|
|||
</div>
|
||||
</t>
|
||||
|
||||
<t t-name="WebClient">
|
||||
<table class="oe_webclient">
|
||||
<tr>
|
||||
<td colspan="2" class="oe_topbar">
|
||||
<div class="oe_menu_placeholder"/>
|
||||
<div class="oe_user_menu_placeholder"/>
|
||||
<div class="oe_systray"/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="oe_leftbar" valign="top">
|
||||
<t t-js="d">
|
||||
d.url = '/' + (window.location.search || '');
|
||||
</t>
|
||||
<a t-att-href="url" class="oe_logo"><img t-att-src='_s + "/web/static/src/img/logo.png"'/></a>
|
||||
<div class="oe_secondary_menus_container"/>
|
||||
<div class="oe_footer">
|
||||
Powered by <a href="http://www.openerp.com"><span>Open</span>ERP</a>
|
||||
</div>
|
||||
</td>
|
||||
<td class="oe_application">
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</t>
|
||||
|
||||
<t t-name="Menu">
|
||||
<ul class="oe_menu" t-if="widget.data">
|
||||
<li t-foreach="widget.data.data.children" t-as="menu">
|
||||
|
@ -333,7 +307,7 @@
|
|||
t-att-data-action-model="menu.action ? menu.action.split(',')[0] : ''"
|
||||
t-att-data-action-id="menu.action ? menu.action.split(',')[1] : ''">
|
||||
<t t-esc="menu.name"/>
|
||||
<t t-if="menu.needaction_enabled">
|
||||
<t t-if="menu.needaction_enabled and menu.needaction_counter">
|
||||
<div class="oe_menu_counter">
|
||||
<t t-esc="menu.needaction_counter"/>
|
||||
</div>
|
||||
|
@ -349,26 +323,16 @@
|
|||
<span class="oe_topbar_name"/>
|
||||
</a>
|
||||
<ul class="oe_dropdown_options">
|
||||
<!--<li><a href="#" data-menu="profile">Profile</a></li>-->
|
||||
<li><a href="#" data-menu="settings">Settings</a></li>
|
||||
<li><a href="#" data-menu="logout">Log out</a></li>
|
||||
<li><hr/></li>
|
||||
<li><a href="#" data-menu="about">About OpenERP</a></li>
|
||||
<li><hr/></li>
|
||||
<li><a href="#" data-menu="settings">Preferences</a></li>
|
||||
<li><a href="#" data-menu="logout">Log out</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</t>
|
||||
<t t-name="UserMenu.shortcut">
|
||||
<li t-foreach="shortcuts" t-as="shortcut">
|
||||
<a href="#" data-menu="shortcut" t-att-data-id="shortcut.res_id" t-att-data-shortcut-id="shortcut.id">
|
||||
<t t-esc="shortcut.name"/>
|
||||
</a>
|
||||
</li>
|
||||
</t>
|
||||
<t t-name="About-Page">
|
||||
<t t-name="UserMenu.about">
|
||||
<div>
|
||||
<a class="oe_activate_debug_mode" href="?debug" style="float:right; font-size: 80%;">Activate the developper mode</a>
|
||||
<a class="oe_activate_debug_mode" href="?debug" style="float:right; font-size: 80%;">Activate the developer mode</a>
|
||||
<h1 style="margin:0;">OpenERP</h1>
|
||||
<h3 style="margin:15px 0;padding:0;">Version <t t-esc="version_info.version"/></h3>
|
||||
<p>
|
||||
|
@ -383,8 +347,8 @@
|
|||
</p>
|
||||
</div>
|
||||
</t>
|
||||
<t t-name="Change_Pwd">
|
||||
<form name="change_password_form" class="oe_forms" method="POST">
|
||||
<t t-name="UserMenu.password">
|
||||
<form name="change_password_form" method="POST">
|
||||
<table align="center">
|
||||
<tr>
|
||||
<td><label for="old_pwd">Old Password:</label></td>
|
||||
|
@ -408,27 +372,59 @@
|
|||
</form>
|
||||
</t>
|
||||
|
||||
<t t-name="WebClient">
|
||||
<table class="oe_webclient">
|
||||
<tr>
|
||||
<td colspan="2" class="oe_topbar">
|
||||
<div class="oe_menu_placeholder"/>
|
||||
<div class="oe_user_menu_placeholder"/>
|
||||
<div class="oe_systray"/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="oe_leftbar" valign="top">
|
||||
<t t-js="d">
|
||||
d.url = '/' + (window.location.search || '');
|
||||
</t>
|
||||
<a t-att-href="url" class="oe_logo"><img t-att-src='_s + "/web/static/src/img/logo.png"'/></a>
|
||||
<div class="oe_secondary_menus_container"/>
|
||||
<div class="oe_footer">
|
||||
Powered by <a href="http://www.openerp.com"><span>Open</span>ERP</a>
|
||||
</div>
|
||||
</td>
|
||||
<td class="oe_application">
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</t>
|
||||
|
||||
<t t-name="ViewManager">
|
||||
<div class="oe_view_manager">
|
||||
<table class="oe_view_manager_header2">
|
||||
<table class="oe_view_manager_header">
|
||||
<col width="33%"/>
|
||||
<col width="33%"/>
|
||||
<col width="34%"/>
|
||||
<tr>
|
||||
<tr class="oe_header_row">
|
||||
<td colspan="2">
|
||||
<h2 class="oe_view_title" t-if="widget.flags.display_title !== false">
|
||||
<span class="oe_view_title_text"><t t-esc="widget.display_title()"/></span>
|
||||
</h2>
|
||||
<h2 class="oe_view_title" t-if="widget.flags.display_title !== false">
|
||||
<span class="oe_view_title_text"><t t-esc="widget.display_title()"/></span>
|
||||
</h2>
|
||||
</td>
|
||||
<td>
|
||||
<div class="oe_view_manager_view_search" t-opentag="true"/>
|
||||
</td>
|
||||
<td> <div class="oe_view_manager_view_search" t-opentag="true"/> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> <div class="oe_view_manager_buttons"/> </td>
|
||||
<td> <div class="oe_view_manager_sidebar"/> </td>
|
||||
<tr class="oe_header_row">
|
||||
<td>
|
||||
<div class="oe_view_manager_buttons"/>
|
||||
</td>
|
||||
<td>
|
||||
<div class="oe_view_manager_sidebar"/>
|
||||
</td>
|
||||
<td>
|
||||
<ul class="oe_view_manager_switch oe_button_group oe_right">
|
||||
<t t-if="widget.views_src.length != 1" t-foreach="widget.views_src" t-as="view">
|
||||
<li><a t-attf-class="oe_vm_switch_#{view.view_type} oe_i" t-att-data-view-type="view.view_type" t-att-title="view.label || view.view_type">
|
||||
<t t-if="widget.views_src.length > 2" t-foreach="widget.views_src" t-as="view">
|
||||
<li t-if="view.view_type != 'form'" class="oe_e"><a t-attf-class="oe_vm_switch_#{view.view_type}" t-att-data-view-type="view.view_type" t-att-title="view.label || view.view_type">
|
||||
</a></li>
|
||||
</t>
|
||||
</ul>
|
||||
|
@ -436,6 +432,8 @@
|
|||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
<div class="oe_view_manager_body">
|
||||
<t t-foreach="widget.views_src" t-as="view">
|
||||
<div t-attf-class="oe_view_manager_view_#{view.view_type}"/>
|
||||
|
@ -443,12 +441,9 @@
|
|||
</div>
|
||||
</div>
|
||||
</t>
|
||||
|
||||
<t t-name="ViewManagerAction" t-extend="ViewManager">
|
||||
<t t-jquery="h2.oe_view_title" t-operation="prepend">
|
||||
<a t-if="widget.flags.display_title !== false" class="oe-shortcut-toggle" title="Add / Remove Shortcut..."
|
||||
href="javascript: void(0)"> </a>
|
||||
</t>
|
||||
<t t-jquery="h2.oe_view_title" t-operation="after">
|
||||
<t t-jquery="h2.oe_view_title" t-operation="before">
|
||||
<select t-if="widget.session.debug" class="oe_debug_view"/>
|
||||
</t>
|
||||
</t>
|
||||
|
@ -458,6 +453,7 @@
|
|||
<option t-if="view_manager.active_view === 'form'" value="toggle_layout_outline">Toggle Form Layout Outline</option>
|
||||
<option value="fields">View Fields</option>
|
||||
<option value="fvg">Fields View Get</option>
|
||||
<option value="manage_filters">Manage Filters</option>
|
||||
<t t-if="view_manager.session.uid === 1">
|
||||
<option value="manage_views">Manage Views</option>
|
||||
<option value="edit" data-model="ir.ui.view" t-att-data-id="view.fields_view.view_id">Edit <t t-esc="_.str.capitalize(view.fields_view.type)"/>View</option>
|
||||
|
@ -608,9 +604,9 @@
|
|||
</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) + (options.isClarkGable ? 1 : 0)"/>
|
||||
<t t-set="columns_count" t-value="visible_columns.length + (options.selectable ? 1 : 0) + (options.deletable ? 1 : 0)"/>
|
||||
<thead>
|
||||
<tr t-if="options.action_buttons !== false or options.pager !== false">
|
||||
<tr t-if="(!!options.action_buttons and !options.$buttons) or (!!options.pager and !options.$pager)">
|
||||
<th t-att-colspan="columns_count">
|
||||
<div class="oe_list_buttons"/>
|
||||
<div class="oe_list_sidebar"/>
|
||||
|
@ -626,7 +622,6 @@
|
|||
<th t-if="options.selectable" width="1" >
|
||||
<input type="checkbox" class="all-record-selector"/>
|
||||
</th>
|
||||
<th t-if="options.isClarkGable" width="1"></th>
|
||||
<t t-foreach="columns" t-as="column">
|
||||
<th t-if="!column.meta and column.invisible !== '1'" t-att-data-id="column.id"
|
||||
t-att-class="((options.sortable and column.tag !== 'button') ? 'oe-sortable' : null)">
|
||||
|
@ -639,7 +634,6 @@
|
|||
<tfoot>
|
||||
<tr>
|
||||
<td t-if="options.selectable"/>
|
||||
<td t-if="options.isClarkGable"/>
|
||||
<td t-foreach="aggregate_columns" t-as="column" class="oe-list-footer oe-number"
|
||||
t-att-data-field="column.id" t-att-title="column.label">
|
||||
</td>
|
||||
|
@ -649,12 +643,10 @@
|
|||
</table>
|
||||
<div t-name="ListView.buttons" class="oe_list_buttons">
|
||||
<t t-if="!widget.no_leaf and widget.options.action_buttons !== false">
|
||||
<button type="button" class="oe_button oe_list_add" t-if="widget.options.addable">
|
||||
<button type="button" class="oe_button oe_list_add oe_form_button_hi" t-if="widget.options.addable">
|
||||
<t t-esc="widget.options.addable"/>
|
||||
</button>
|
||||
<button type="button" class="oe_button oe_list_delete" t-if="widget.options.selectable and widget.options.deletable">
|
||||
Delete
|
||||
</button>
|
||||
<span class="oe_fade">or</span> <a href="#" class="oe_bold oe_list_button_import">Import</a>
|
||||
</t>
|
||||
</div>
|
||||
<t t-name="ListView.pager">
|
||||
|
@ -684,9 +676,6 @@
|
|||
<input t-if="options.radio" type="radio" name="radiogroup" t-att-checked="checked"/>
|
||||
<input t-if="!options.radio" type="checkbox" name="radiogroup" t-att-checked="checked"/>
|
||||
</th>
|
||||
<th t-if="options.isClarkGable" class="oe-record-edit-link" width="1">
|
||||
<img src="/web/static/src/img/pencil.gif" width="12" height="12" class="oe-record-edit-link-img"/>
|
||||
</th>
|
||||
<t t-foreach="columns" t-as="column">
|
||||
<t t-set="align" t-value="column.type === 'integer' or column.type == 'float'"/>
|
||||
<td t-if="!column.meta and column.invisible !== '1'" t-att-title="column.help"
|
||||
|
@ -714,12 +703,9 @@
|
|||
<span class="oe_form_buttons_view">
|
||||
<button type="button" class="oe_button oe_form_button_edit">Edit</button>
|
||||
<button type="button" class="oe_button oe_form_button_create">Create</button>
|
||||
<button type="button" class="oe_button oe_form_button_duplicate">Duplicate</button>
|
||||
<button type="button" class="oe_button oe_form_button_delete">Delete</button>
|
||||
</span>
|
||||
<span class="oe_form_buttons_edit">
|
||||
<button type="button" class="oe_button oe_form_button_save">Save</button> or
|
||||
<a href="#" class="oe_form_button_cancel">Discard</a>
|
||||
<button type="button" class="oe_button oe_form_button_save">Save</button> <span class="oe_fade">or</span> <a href="#" class="oe_bold oe_form_button_cancel">Discard</a>
|
||||
</span>
|
||||
</t>
|
||||
</div>
|
||||
|
@ -730,7 +716,7 @@
|
|||
</t>
|
||||
</div>
|
||||
</t>
|
||||
<form t-name="FormView.set_default" class="oe_forms oe_frame">
|
||||
<form t-name="FormView.set_default">
|
||||
<t t-set="args" t-value="widget.dialog_options.args"/>
|
||||
<table style="width: 100%">
|
||||
<tr>
|
||||
|
@ -839,7 +825,6 @@
|
|||
t-att-title="help"
|
||||
t-attf-class="#{classnames} oe_form_label#{help ? '_help' : ''} oe_align_#{align}">
|
||||
<t t-esc="string"/>
|
||||
<span t-if="help">?</span>
|
||||
</label>
|
||||
</t>
|
||||
|
||||
|
@ -991,11 +976,12 @@
|
|||
</div>
|
||||
</t>
|
||||
<t t-name="web.datetimepicker">
|
||||
<t t-set="placeholder" t-value="widget.getParent().node and widget.getParent().node.attrs.placeholder"/>
|
||||
<div class="oe_datepicker_root oe_form_field_datetime">
|
||||
<input type="text" class="oe_datepicker_container" disabled="disabled" style="display: none;"/>
|
||||
<input type="text"
|
||||
t-att-name="widget.name"
|
||||
t-att-placeholder="widget.getParent().node.attrs.placeholder"
|
||||
t-att-placeholder="placeholder"
|
||||
t-attf-class="oe_datepicker_master field_#{widget.type_of_date} oe_form_field_#{widget.type_of_date}"
|
||||
/><img class="oe_input_icon oe_datepicker_trigger" t-att-src='_s + "/web/static/src/img/ui/field_calendar.png"'
|
||||
title="Select date" width="16" height="16" border="0"/>
|
||||
|
@ -1034,8 +1020,8 @@
|
|||
<img t-att-src='_s + "/web/static/src/img/down-arrow.png"' /></span>
|
||||
</td>
|
||||
<td width="16">
|
||||
<button class="oe_button oe_field_button oe-m2o-cm-button">
|
||||
<img t-att-src='_s + "/web/static/src/img/icons/gtk-go-forward.png"'/>
|
||||
<button class="oe_button oe_field_button oe-m2o-cm-button" title="Open Resource">
|
||||
<img t-att-src='_s + "/web/static/src/img/icons/terp-folder-yellow.png"'/>
|
||||
</button>
|
||||
</td>
|
||||
</tr>
|
||||
|
@ -1064,7 +1050,7 @@
|
|||
</t>
|
||||
</t>
|
||||
<t t-name="FieldReference">
|
||||
<table class="oe_form_field_reference oe_frame oe_forms" border="0" cellpadding="0" cellspacing="0">
|
||||
<table class="oe_form_field_reference oe_form" border="0" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td t-attf-class="oe_form_frame_cell oe_form_selection oe_form_view_reference_selection">
|
||||
</td>
|
||||
|
@ -1311,7 +1297,31 @@
|
|||
</t>
|
||||
|
||||
<div t-name="SearchView" class="oe_searchview">
|
||||
<div class="oe_searchview_facets"/>
|
||||
<div class="oe_searchview_clear"/>
|
||||
<div class="oe_searchview_unfold_drawer"/>
|
||||
<div class="oe_searchview_drawer"/>
|
||||
</div>
|
||||
|
||||
<div t-name="SearchView.InputView"
|
||||
class="oe_searchview_input"
|
||||
contenteditable="true"/>
|
||||
<!-- tabindex: makes div focusable -->
|
||||
<div t-name="SearchView.FacetView"
|
||||
class="oe_searchview_facet"
|
||||
tabindex="0"
|
||||
><span class="oe_facet_remove">✖</span
|
||||
><span class="oe_facet_category oe_i" t-if="widget.model.has('icon')">
|
||||
<t t-esc="widget.model.get('icon')"/>
|
||||
</span
|
||||
><span class="oe_facet_category" t-if="!widget.model.has('icon')">
|
||||
<t t-esc="widget.model.get('category')"/>
|
||||
</span ><span class="oe_facet_values"
|
||||
/></div>
|
||||
<span t-name="SearchView.FacetView.Value" class="oe_facet_value">
|
||||
<t t-esc="widget.model.get('label')"/>
|
||||
</span>
|
||||
|
||||
<t t-name="SearchView.managed-filters">
|
||||
<option class="oe-filters-title" value="">Filters</option>
|
||||
<optgroup label="-- Filters --">
|
||||
|
@ -1338,7 +1348,7 @@
|
|||
</div>
|
||||
</t>
|
||||
<t t-name="SearchView.add_to_dashboard">
|
||||
<div class="oe_forms">
|
||||
<div class="oe_form">
|
||||
<p><b>Select Dashboard to add this filter to:</b></p>
|
||||
<select style="width: 100%; margin-right: 1em;">
|
||||
<option t-foreach="dashboards" t-as="menu" t-att-value="menu.id" t-att-selected="(menu.id == selected_menu_id) || undefined"><t t-esc="menu.name"/></option>
|
||||
|
@ -1368,8 +1378,9 @@
|
|||
<t t-esc="attrs.string"/>
|
||||
</button>
|
||||
<ul t-name="SearchView.filters">
|
||||
<li t-foreach="widget.filters" t-as="filter">
|
||||
<t t-esc="filter.attrs.string or filter.attrs.name or 'Ω'"/>
|
||||
<li t-foreach="widget.filters" t-as="filter"
|
||||
t-att-title="filter.attrs.string ? filter.attrs.help : undefined">
|
||||
<t t-esc="filter.attrs.string or filter.attrs.help or filter.attrs.name or 'Ω'"/>
|
||||
</li>
|
||||
</ul>
|
||||
<t t-name="SearchView.filters.facet">
|
||||
|
@ -1464,8 +1475,22 @@
|
|||
</t>
|
||||
</t>
|
||||
</t>
|
||||
<div t-name="SearchView.Filters" class="oe_searchview_filters">
|
||||
|
||||
</div>
|
||||
<div t-name="SearchView.CustomFilters" class="oe_searchview_custom">
|
||||
<ul class="oe_searchview_custom_list"/>
|
||||
<h4 class="oe_searchview_custom_title">
|
||||
<label for="oe_searchview_custom_input">Save search</label></h4>
|
||||
<form>
|
||||
<input id="oe_searchview_custom_input"/>
|
||||
<button>Save</button><br/>
|
||||
<label for="oe_searchview_custom_public">Share with all users:</label>
|
||||
<input id="oe_searchview_custom_public" type="checkbox"/>
|
||||
</form>
|
||||
</div>
|
||||
<div t-name="SearchView.advanced" class="oe_searchview_advanced">
|
||||
<h4>Advanced Search...</h4>
|
||||
<h4>Advanced Search</h4>
|
||||
<form>
|
||||
<ul>
|
||||
|
||||
|
@ -1487,32 +1512,29 @@
|
|||
</select>
|
||||
<select class="searchview_extended_prop_op"/>
|
||||
<span class="searchview_extended_prop_value"/>
|
||||
<a class="searchview_extended_delete_prop"
|
||||
href="javascript:void(0)"><span> </span></a>
|
||||
<button type="button" class="searchview_extended_delete_prop">Delete</button>
|
||||
</li>
|
||||
</t>
|
||||
<t t-name="SearchView.extended_search.proposition.char">
|
||||
<input t-att-id="widget.element_id" class="field_char"/>
|
||||
<input class="field_char"/>
|
||||
</t>
|
||||
<t t-name="SearchView.extended_search.proposition.empty">
|
||||
<span t-att-id="widget.element_id"></span>
|
||||
<span/>
|
||||
</t>
|
||||
<t t-name="SearchView.extended_search.proposition.integer">
|
||||
<input type="number" t-att-id="widget.element_id" class="field_integer" step="1"/>
|
||||
<input type="number" class="field_integer" step="1"/>
|
||||
</t>
|
||||
<t t-name="SearchView.extended_search.proposition.float">
|
||||
<input type="number" t-att-id="widget.element_id" class="field_float" step="0.01"/>
|
||||
</t>
|
||||
<t t-name="SearchView.extended_search.proposition.boolean">
|
||||
<input type="number" class="field_float" step="0.01"/>
|
||||
</t>
|
||||
<t t-name="SearchView.extended_search.proposition.selection">
|
||||
<select t-att-id="widget.element_id">
|
||||
<select>
|
||||
<t t-foreach="widget.field.selection" t-as="element">
|
||||
<option t-att-value="element[0]"><t t-esc="element[1]"/></option>
|
||||
</t>
|
||||
</select>
|
||||
</t>
|
||||
<t t-name="SelectCreatePopup">
|
||||
<t t-name="AbstractFormPopup.render">
|
||||
<div>
|
||||
<table style="width:100%">
|
||||
<tr style="width:100%">
|
||||
|
@ -1526,31 +1548,22 @@
|
|||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<div class="oe-select-create-popup-view-form" style="width:100%"></div>
|
||||
<div class="oe-form-view-popup-form-placeholder oe-select-create-popup-view-form" style="width:100%"></div>
|
||||
</div>
|
||||
</t>
|
||||
<t t-name="SelectCreatePopup.search.buttons">
|
||||
<button type="button" class="oe_button oe_selectcreatepopup-search-select" disabled="disabled">Select</button>
|
||||
<button type="button" class="oe_button oe_selectcreatepopup-search-close">Cancel</button>
|
||||
</t>
|
||||
<t t-name="SelectCreatePopup.form.buttons">
|
||||
<t t-if="widget.options.disable_multiple_selection">
|
||||
<button type="button" class="oe_button oe_selectcreatepopup-form-save">Save</button>
|
||||
<t t-name="AbstractFormPopup.buttons">
|
||||
<t t-if="! multi_select">
|
||||
<button type="button" class="oe_button oe_abstractformpopup-form-save">Save</button>
|
||||
</t>
|
||||
<t t-if="! widget.options.disable_multiple_selection">
|
||||
<button type="button" class="oe_button oe_selectcreatepopup-form-save-new">Save & New</button>
|
||||
<button type="button" class="oe_button oe_selectcreatepopup-form-save">Save & Close</button>
|
||||
<t t-if="multi_select">
|
||||
<button type="button" class="oe_button oe_abstractformpopup-form-save-new">Save & New</button>
|
||||
<button type="button" class="oe_button oe_abstractformpopup-form-save">Save & Close</button>
|
||||
</t>
|
||||
<button type="button" class="oe_button oe_selectcreatepopup-form-close">Cancel</button>
|
||||
</t>
|
||||
<t t-name="FormOpenPopup">
|
||||
<div>
|
||||
<div class="oe-form-open-popup-form-view" style="width:100%"></div>
|
||||
</div>
|
||||
</t>
|
||||
<t t-name="FormOpenPopup.form.buttons">
|
||||
<button type="button" class="oe_button oe_formopenpopup-form-save">Save</button>
|
||||
<button type="button" class="oe_button oe_formopenpopup-form-close">Cancel</button>
|
||||
<button type="button" class="oe_button oe_abstractformpopup-form-close">Cancel</button>
|
||||
</t>
|
||||
<t t-extend="ListView.row">
|
||||
<!-- adds back padding to row being rendered after edition, if necessary
|
||||
|
@ -1803,5 +1816,8 @@
|
|||
<pre><t t-esc="error.preview"/></pre>
|
||||
</t>
|
||||
</t>
|
||||
<div t-name="Many2ManyKanban.quick_create" class="oe_kanban_quick_create">
|
||||
<input t-att-placeholder="_t('Type name to search')"/>
|
||||
</div>
|
||||
|
||||
</templates>
|
||||
|
|
|
@ -66,7 +66,7 @@ $(document).ready(function () {
|
|||
ok(!fail2);
|
||||
});
|
||||
|
||||
asyncTest('Resolve all correctly ordered, sync', 1, function () {
|
||||
asyncTest('Resolve all correctly ordered, async', 1, function () {
|
||||
var dm = new openerp.web.DropMisordered();
|
||||
|
||||
var d1 = $.Deferred(), d2 = $.Deferred(),
|
||||
|
@ -80,7 +80,7 @@ $(document).ready(function () {
|
|||
ok(true);
|
||||
});
|
||||
});
|
||||
asyncTest("Don't resolve mis-ordered, sync", 4, function () {
|
||||
asyncTest("Don't resolve mis-ordered, async", 4, function () {
|
||||
var dm = new openerp.web.DropMisordered(),
|
||||
done1 = false, done2 = false,
|
||||
fail1 = false, fail2 = false;
|
||||
|
@ -104,7 +104,7 @@ $(document).ready(function () {
|
|||
ok(!fail2);
|
||||
}, 400);
|
||||
});
|
||||
asyncTest('Fail mis-ordered flag, sync', 4, function () {
|
||||
asyncTest('Fail mis-ordered flag, async', 4, function () {
|
||||
var dm = new openerp.web.DropMisordered(true),
|
||||
done1 = false, done2 = false,
|
||||
fail1 = false, fail2 = false;
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -10,9 +10,10 @@
|
|||
|
||||
<script src="/web/static/lib/underscore/underscore.js" type="text/javascript"></script>
|
||||
<script src="/web/static/lib/underscore/underscore.string.js" type="text/javascript"></script>
|
||||
<script src="/web/static/lib/backbone/backbone.js" type="text/javascript"></script>
|
||||
|
||||
<!-- jquery -->
|
||||
<script src="/web/static/lib/jquery/jquery-1.6.4.js"></script>
|
||||
<script src="/web/static/lib/jquery/jquery-1.7.2b1.js"></script>
|
||||
<script src="/web/static/lib/jquery.ui/js/jquery-ui-1.8.17.custom.min.js"></script>
|
||||
<script src="/web/static/lib/jquery.ba-bbq/jquery.ba-bbq.js"></script>
|
||||
|
||||
|
@ -53,4 +54,5 @@
|
|||
<script type="text/javascript" src="/web/static/test/formats.js"></script>
|
||||
<script type="text/javascript" src="/web/static/test/rpc.js"></script>
|
||||
<script type="text/javascript" src="/web/static/test/evals.js"></script>
|
||||
<script type="text/javascript" src="/web/static/test/search.js"></script>
|
||||
</html>
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-08 05:15+0000\n"
|
||||
"X-Generator: Launchpad (build 15204)\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-15 05:06+0000\n"
|
||||
"X-Generator: Launchpad (build 15238)\n"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web_calendar/static/src/js/calendar.js:11
|
||||
|
|
|
@ -0,0 +1,41 @@
|
|||
# Bulgarian translation for openerp-web
|
||||
# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012
|
||||
# This file is distributed under the same license as the openerp-web package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openerp-web\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-02-06 17:33+0100\n"
|
||||
"PO-Revision-Date: 2012-05-16 09:33+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Bulgarian <bg@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: 2012-05-17 04:49+0000\n"
|
||||
"X-Generator: Launchpad (build 15259)\n"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web_calendar/static/src/js/calendar.js:11
|
||||
msgid "Calendar"
|
||||
msgstr "Календар"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web_calendar/static/src/js/calendar.js:466
|
||||
#: addons/web_calendar/static/src/js/calendar.js:467
|
||||
msgid "Responsible"
|
||||
msgstr "Отговорник"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web_calendar/static/src/js/calendar.js:504
|
||||
#: addons/web_calendar/static/src/js/calendar.js:505
|
||||
msgid "Navigator"
|
||||
msgstr "Навигатор"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web_calendar/static/src/xml/web_calendar.xml:5
|
||||
#: addons/web_calendar/static/src/xml/web_calendar.xml:6
|
||||
msgid " "
|
||||
msgstr ""
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-08 05:15+0000\n"
|
||||
"X-Generator: Launchpad (build 15204)\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-15 05:06+0000\n"
|
||||
"X-Generator: Launchpad (build 15238)\n"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web_calendar/static/src/js/calendar.js:11
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-08 05:15+0000\n"
|
||||
"X-Generator: Launchpad (build 15204)\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-15 05:06+0000\n"
|
||||
"X-Generator: Launchpad (build 15238)\n"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web_calendar/static/src/js/calendar.js:11
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-08 05:15+0000\n"
|
||||
"X-Generator: Launchpad (build 15204)\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-15 05:06+0000\n"
|
||||
"X-Generator: Launchpad (build 15238)\n"
|
||||
"X-Poedit-Language: Czech\n"
|
||||
|
||||
#. openerp-web
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-08 05:15+0000\n"
|
||||
"X-Generator: Launchpad (build 15204)\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-15 05:06+0000\n"
|
||||
"X-Generator: Launchpad (build 15238)\n"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web_calendar/static/src/js/calendar.js:11
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-08 05:15+0000\n"
|
||||
"X-Generator: Launchpad (build 15204)\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-15 05:06+0000\n"
|
||||
"X-Generator: Launchpad (build 15238)\n"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web_calendar/static/src/js/calendar.js:11
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-08 05:15+0000\n"
|
||||
"X-Generator: Launchpad (build 15204)\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-15 05:06+0000\n"
|
||||
"X-Generator: Launchpad (build 15238)\n"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web_calendar/static/src/js/calendar.js:11
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-08 05:15+0000\n"
|
||||
"X-Generator: Launchpad (build 15204)\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-15 05:06+0000\n"
|
||||
"X-Generator: Launchpad (build 15238)\n"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web_calendar/static/src/js/calendar.js:11
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-08 05:15+0000\n"
|
||||
"X-Generator: Launchpad (build 15204)\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-15 05:06+0000\n"
|
||||
"X-Generator: Launchpad (build 15238)\n"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web_calendar/static/src/js/calendar.js:11
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-08 05:15+0000\n"
|
||||
"X-Generator: Launchpad (build 15204)\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-15 05:06+0000\n"
|
||||
"X-Generator: Launchpad (build 15238)\n"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web_calendar/static/src/js/calendar.js:11
|
||||
|
|
|
@ -15,8 +15,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-08 05:15+0000\n"
|
||||
"X-Generator: Launchpad (build 15204)\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-15 05:06+0000\n"
|
||||
"X-Generator: Launchpad (build 15238)\n"
|
||||
"Language: es\n"
|
||||
|
||||
#. openerp-web
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-08 05:15+0000\n"
|
||||
"X-Generator: Launchpad (build 15204)\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-15 05:06+0000\n"
|
||||
"X-Generator: Launchpad (build 15238)\n"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web_calendar/static/src/js/calendar.js:11
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-08 05:15+0000\n"
|
||||
"X-Generator: Launchpad (build 15204)\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-15 05:06+0000\n"
|
||||
"X-Generator: Launchpad (build 15238)\n"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web_calendar/static/src/js/calendar.js:11
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-08 05:15+0000\n"
|
||||
"X-Generator: Launchpad (build 15204)\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-15 05:06+0000\n"
|
||||
"X-Generator: Launchpad (build 15238)\n"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web_calendar/static/src/js/calendar.js:11
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-08 05:15+0000\n"
|
||||
"X-Generator: Launchpad (build 15204)\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-15 05:06+0000\n"
|
||||
"X-Generator: Launchpad (build 15238)\n"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web_calendar/static/src/js/calendar.js:11
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-08 05:15+0000\n"
|
||||
"X-Generator: Launchpad (build 15204)\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-15 05:06+0000\n"
|
||||
"X-Generator: Launchpad (build 15238)\n"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web_calendar/static/src/js/calendar.js:11
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-08 05:15+0000\n"
|
||||
"X-Generator: Launchpad (build 15204)\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-15 05:06+0000\n"
|
||||
"X-Generator: Launchpad (build 15238)\n"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web_calendar/static/src/js/calendar.js:11
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-08 05:15+0000\n"
|
||||
"X-Generator: Launchpad (build 15204)\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-15 05:06+0000\n"
|
||||
"X-Generator: Launchpad (build 15238)\n"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web_calendar/static/src/js/calendar.js:11
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-08 05:15+0000\n"
|
||||
"X-Generator: Launchpad (build 15204)\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-15 05:06+0000\n"
|
||||
"X-Generator: Launchpad (build 15238)\n"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web_calendar/static/src/js/calendar.js:11
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-08 05:15+0000\n"
|
||||
"X-Generator: Launchpad (build 15204)\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-15 05:06+0000\n"
|
||||
"X-Generator: Launchpad (build 15238)\n"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web_calendar/static/src/js/calendar.js:11
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-08 05:15+0000\n"
|
||||
"X-Generator: Launchpad (build 15204)\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-15 05:06+0000\n"
|
||||
"X-Generator: Launchpad (build 15238)\n"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web_calendar/static/src/js/calendar.js:11
|
||||
|
|
|
@ -14,8 +14,8 @@ msgstr ""
|
|||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-08 05:15+0000\n"
|
||||
"X-Generator: Launchpad (build 15204)\n"
|
||||
"X-Launchpad-Export-Date: 2012-05-15 05:06+0000\n"
|
||||
"X-Generator: Launchpad (build 15238)\n"
|
||||
|
||||
#. openerp-web
|
||||
#: addons/web_calendar/static/src/js/calendar.js:11
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue