Merge lp:~openerp-dev/openobject-addons/trunk-website-al into lp:openobject-addons
- trunk-website-al
- Merge into trunk
Proposed by
Christophe Matthieu (OpenERP)
Status: | Merged |
---|---|
Merged at revision: | 9080 |
Proposed branch: | lp:~openerp-dev/openobject-addons/trunk-website-al |
Merge into: | lp:openobject-addons |
Diff against target: |
102849 lines (+52650/-40609) 806 files modified
account/account_unit_test.xml (+1/-1) account/account_view.xml (+1/-0) account/product_view.xml (+18/-10) account/res_config_view.xml (+2/-2) account_anglo_saxon/product_view.xml (+4/-4) auth_oauth/__openerp__.py (+4/-8) auth_oauth/auth_oauth_data.xml (+3/-3) auth_oauth/controllers/main.py (+58/-19) auth_oauth/res_users.py (+2/-2) auth_oauth/res_users.xml (+1/-1) auth_oauth/static/lib/zocial/README.md (+0/-31) auth_oauth/static/lib/zocial/css/zocial-regular-webfont.svg (+0/-129) auth_oauth/static/lib/zocial/css/zocial.css (+0/-420) auth_oauth/static/lib/zocial/sample.html (+0/-265) auth_oauth/static/src/css/auth_oauth.css (+0/-34) auth_oauth/static/src/js/auth_oauth.js (+0/-80) auth_oauth/static/src/xml/auth_oauth.xml (+0/-8) auth_oauth/views/auth_oauth_login.xml (+19/-0) auth_oauth_signup/__init__.py (+1/-0) auth_oauth_signup/__openerp__.py (+1/-1) auth_oauth_signup/controllers/__init__.py (+3/-0) auth_oauth_signup/controllers/main.py (+20/-0) auth_oauth_signup/static/src/js/auth_oauth_signup.js (+0/-14) auth_openid/controllers/main.py (+1/-2) auth_openid/static/src/js/auth_openid.js (+2/-0) auth_signup/__openerp__.py (+2/-1) auth_signup/auth_signup_data.xml (+1/-1) auth_signup/controllers/main.py (+67/-54) auth_signup/res_config.xml (+1/-1) auth_signup/res_users.py (+10/-11) auth_signup/static/src/js/auth_signup.js (+15/-182) auth_signup/static/src/xml/auth_signup.xml (+0/-39) auth_signup/views/auth_signup_login.xml (+91/-0) base_geolocalize/__init__.py (+22/-0) base_geolocalize/__openerp__.py (+44/-0) base_geolocalize/models/__init__.py (+1/-0) base_geolocalize/models/res_partner.py (+88/-0) base_geolocalize/views/res_partner_view.xml (+30/-0) base_import/__openerp__.py (+0/-2) base_import/static/lib/select2/LICENSE (+0/-12) base_import/static/lib/select2/README.md (+0/-68) base_import/static/lib/select2/release.sh (+0/-77) base_import/static/lib/select2/select2.css (+0/-524) base_import/static/lib/select2/select2.js (+0/-2407) base_setup/res_config.py (+0/-2) base_setup/res_config_view.xml (+1/-10) crm/crm_lead_menu.xml (+2/-2) crm/wizard/crm_lead_to_opportunity.py (+0/-1) crm_partner_assign/__openerp__.py (+6/-3) crm_partner_assign/crm_partner_assign.py (+11/-56) crm_partner_assign/portal_data.xml (+3/-18) crm_partner_assign/res_partner_demo.xml (+100/-4) crm_partner_assign/res_partner_view.xml (+6/-5) crm_partner_assign/security/ir.model.access.csv (+1/-1) crm_partner_assign/wizard/crm_forward_to_partner.py (+1/-1) decimal_precision/decimal_precision.py (+27/-2) decimal_precision/security/ir.model.access.csv (+1/-0) decimal_precision/tests/__init__.py (+6/-0) decimal_precision/tests/test_qweb_float.py (+66/-0) delivery/__openerp__.py (+1/-1) delivery/delivery.py (+5/-6) delivery/delivery_demo.xml (+3/-1) delivery/sale.py (+33/-16) document_page/__init__.py (+0/-25) document_page/__openerp__.py (+0/-48) document_page/i18n/ar.po (+0/-255) document_page/i18n/bg.po (+0/-254) document_page/i18n/bs.po (+0/-254) document_page/i18n/ca.po (+0/-255) document_page/i18n/cs.po (+0/-255) document_page/i18n/da.po (+0/-255) document_page/i18n/de.po (+0/-255) document_page/i18n/document_page.pot (+0/-253) document_page/i18n/el.po (+0/-257) document_page/i18n/es.po (+0/-257) document_page/i18n/es_AR.po (+0/-494) document_page/i18n/es_CR.po (+0/-520) document_page/i18n/es_MX.po (+0/-535) document_page/i18n/es_VE.po (+0/-535) document_page/i18n/et.po (+0/-254) document_page/i18n/fi.po (+0/-255) document_page/i18n/fr.po (+0/-258) document_page/i18n/gl.po (+0/-256) document_page/i18n/hr.po (+0/-256) document_page/i18n/hu.po (+0/-257) document_page/i18n/id.po (+0/-254) document_page/i18n/it.po (+0/-258) document_page/i18n/ja.po (+0/-255) document_page/i18n/ko.po (+0/-255) document_page/i18n/lt.po (+0/-255) document_page/i18n/lv.po (+0/-255) document_page/i18n/mk.po (+0/-258) document_page/i18n/mn.po (+0/-255) document_page/i18n/nb.po (+0/-255) document_page/i18n/nl.po (+0/-257) document_page/i18n/nl_BE.po (+0/-440) document_page/i18n/pl.po (+0/-256) document_page/i18n/pt.po (+0/-254) document_page/i18n/pt_BR.po (+0/-256) document_page/i18n/ro.po (+0/-257) document_page/i18n/ru.po (+0/-256) document_page/i18n/sk.po (+0/-255) document_page/i18n/sl.po (+0/-254) document_page/i18n/sq.po (+0/-255) document_page/i18n/sr.po (+0/-255) document_page/i18n/sr@latin.po (+0/-255) document_page/i18n/sv.po (+0/-254) document_page/i18n/tlh.po (+0/-254) document_page/i18n/tr.po (+0/-255) document_page/i18n/uk.po (+0/-254) document_page/i18n/vi.po (+0/-255) document_page/i18n/zh_CN.po (+0/-254) document_page/i18n/zh_TW.po (+0/-254) document_page/security/document_page_security.xml (+0/-8) document_page/static/src/css/document_page.css (+0/-12) document_page/wizard/document_page_create_menu.py (+0/-86) document_page/wizard/document_page_create_menu_view.xml (+0/-33) edi/controllers/main.py (+2/-2) edi/static/src/js/edi.js (+3/-12) email_template/email_template.py (+1/-1) email_template/tests/test_mail.py (+1/-1) email_template/wizard/mail_compose_message.py (+14/-0) event/__init__.py (+0/-2) event/__openerp__.py (+8/-3) event/event.py (+59/-105) event/event_demo.xml (+170/-17) event/event_view.xml (+42/-61) event/report/report_event_registration.py (+3/-6) event/test/process/event_draft2done.yml (+4/-4) event_moodle/__init__.py (+0/-25) event_moodle/__openerp__.py (+0/-77) event_moodle/event_moodle.py (+0/-286) event_moodle/event_view.xml (+0/-38) event_moodle/i18n/cs.po (+0/-185) event_moodle/i18n/de.po (+0/-198) event_moodle/i18n/es.po (+0/-194) event_moodle/i18n/event_moodle.pot (+0/-175) event_moodle/i18n/fr.po (+0/-194) event_moodle/i18n/hr.po (+0/-185) event_moodle/i18n/hu.po (+0/-197) event_moodle/i18n/mk.po (+0/-194) event_moodle/i18n/mn.po (+0/-185) event_moodle/i18n/nl.po (+0/-185) event_moodle/i18n/pt.po (+0/-187) event_moodle/i18n/pt_BR.po (+0/-195) event_moodle/i18n/ro.po (+0/-195) event_moodle/i18n/ru.po (+0/-185) event_moodle/i18n/sl.po (+0/-185) event_moodle/i18n/tr.po (+0/-193) event_moodle/i18n/zh_CN.po (+0/-188) event_moodle/security/ir.model.access.csv (+0/-3) event_moodle/wizard_moodle.xml (+0/-50) event_sale/__openerp__.py (+4/-1) event_sale/event_demo.xml (+111/-9) event_sale/event_sale.py (+144/-11) event_sale/event_sale_data.xml (+25/-0) event_sale/event_sale_view.xml (+50/-5) google_account/google_account.py (+8/-8) google_calendar/res_config.py (+2/-2) google_drive/google_drive.py (+2/-2) google_spreadsheet/google_spreadsheet.py (+2/-2) hr/hr.py (+5/-7) hr/hr_demo.xml (+60/-1) hr_holidays/tests/test_holidays_flow.py (+3/-3) hr_recruitment/hr_recruitment.py (+7/-0) hr_recruitment/hr_recruitment_view.xml (+8/-1) hr_recruitment/static/description/index.html (+115/-0) hr_timesheet/hr_timesheet_data.xml (+4/-0) hw_escpos/controllers/main.py (+9/-5) im/static/src/css/im.css (+4/-0) im_livechat/__openerp__.py (+1/-1) im_livechat/im_livechat.py (+4/-4) im_livechat/im_livechat_view.xml (+1/-1) im_livechat/loader.js (+1/-1) im_livechat/security/ir.model.access.csv (+2/-2) knowledge/res_config.py (+0/-2) knowledge/res_config_view.xml (+0/-4) l10n_be_hr_payroll/l10n_be_hr_payroll_demo.xml (+16/-0) l10n_uk/demo/demo.xml (+7/-2) l10n_ve/__openerp__.py (+1/-1) lunch/lunch_demo.xml (+11/-0) mail/__init__.py (+1/-0) mail/controllers/main.py (+8/-6) mail/ir_attachment.py (+197/-0) mail/mail_message.py (+7/-2) mail/mail_thread.py (+6/-8) mail/static/src/js/mail.js (+0/-52) mail/static/src/xml/mail.xml (+3/-3) mail/tests/test_mail_group.py (+3/-2) mail/tests/test_mail_message.py (+7/-6) mail/update.py (+6/-8) mass_mailing/controllers/main.py (+3/-3) membership/__openerp__.py (+4/-1) membership/membership_demo.xml (+40/-10) membership/membership_demo.yml (+15/-0) mrp/report/price.py (+0/-1) multi_company/multi_company_demo.xml (+31/-81) pad/py_etherpad/__init__.py (+2/-2) payment/__init__.py (+22/-0) payment/__openerp__.py (+17/-0) payment/models/__init__.py (+4/-0) payment/models/payment_acquirer.py (+507/-0) payment/models/res_config.py (+22/-0) payment/security/ir.model.access.csv (+7/-0) payment/tests/__init__.py (+3/-0) payment/tests/common.py (+49/-0) payment/views/payment_acquirer.xml (+179/-0) payment/views/res_config_view.xml (+28/-0) payment_adyen/__init__.py (+23/-0) payment_adyen/__openerp__.py (+17/-0) payment_adyen/controllers/__init__.py (+3/-0) payment_adyen/controllers/main.py (+32/-0) payment_adyen/data/adyen.xml (+18/-0) payment_adyen/models/__init__.py (+3/-0) payment_adyen/models/adyen.py (+180/-0) payment_adyen/tests/__init__.py (+7/-0) payment_adyen/tests/test_adyen.py (+101/-0) payment_adyen/views/adyen.xml (+32/-0) payment_adyen/views/payment_acquirer.xml (+36/-0) payment_ogone/__init__.py (+23/-0) payment_ogone/__openerp__.py (+17/-0) payment_ogone/controllers/__init__.py (+3/-0) payment_ogone/controllers/main.py (+29/-0) payment_ogone/data/__init__.py (+3/-0) payment_ogone/data/ogone.py (+497/-0) payment_ogone/data/ogone.xml (+20/-0) payment_ogone/models/__init__.py (+3/-0) payment_ogone/models/ogone.py (+405/-0) payment_ogone/tests/__init__.py (+7/-0) payment_ogone/tests/test_ogone.py (+225/-0) payment_ogone/views/ogone.xml (+53/-0) payment_ogone/views/payment_acquirer.xml (+42/-0) payment_paypal/__init__.py (+23/-0) payment_paypal/__openerp__.py (+18/-0) payment_paypal/controllers/__init__.py (+3/-0) payment_paypal/controllers/main.py (+77/-0) payment_paypal/data/paypal.xml (+20/-0) payment_paypal/models/__init__.py (+4/-0) payment_paypal/models/paypal.py (+403/-0) payment_paypal/models/res_company.py (+43/-0) payment_paypal/tests/__init__.py (+7/-0) payment_paypal/tests/test_paypal.py (+242/-0) payment_paypal/views/payment_acquirer.xml (+47/-0) payment_paypal/views/paypal.xml (+43/-0) payment_paypal/views/res_config_view.xml (+18/-0) payment_transfer/__init__.py (+23/-0) payment_transfer/__openerp__.py (+17/-0) payment_transfer/controllers/__init__.py (+3/-0) payment_transfer/controllers/main.py (+22/-0) payment_transfer/data/transfer.xml (+18/-0) payment_transfer/models/__init__.py (+3/-0) payment_transfer/models/payment_acquirer.py (+81/-0) payment_transfer/views/transfer.xml (+23/-0) point_of_sale/controllers/main.py (+1/-2) point_of_sale/point_of_sale.py (+0/-77) point_of_sale/point_of_sale_demo.xml (+163/-159) point_of_sale/point_of_sale_view.xml (+1/-51) point_of_sale/security/ir.model.access.csv (+2/-2) point_of_sale/static/src/js/db.js (+1/-1) point_of_sale/static/src/js/models.js (+5/-8) point_of_sale/static/src/js/widgets.js (+1/-1) portal/__init__.py (+0/-1) portal/__openerp__.py (+1/-3) portal/acquirer.py (+0/-108) portal/acquirer_view.xml (+0/-65) portal/portal_data.xml (+4/-102) portal/portal_demo.xml (+6/-45) portal/portal_view.xml (+4/-8) portal/security/ir.model.access.csv (+5/-8) portal/security/portal_security.xml (+0/-16) portal/tests/test_portal.py (+3/-2) portal_anonymous/__openerp__.py (+0/-19) portal_anonymous/i18n/ar.po (+0/-25) portal_anonymous/i18n/cs.po (+0/-25) portal_anonymous/i18n/da.po (+0/-25) portal_anonymous/i18n/de.po (+0/-25) portal_anonymous/i18n/en_AU.po (+0/-25) portal_anonymous/i18n/en_GB.po (+0/-25) portal_anonymous/i18n/es.po (+0/-25) portal_anonymous/i18n/fi.po (+0/-25) portal_anonymous/i18n/fr.po (+0/-25) portal_anonymous/i18n/hr.po (+0/-25) portal_anonymous/i18n/hu.po (+0/-25) portal_anonymous/i18n/lt.po (+0/-25) portal_anonymous/i18n/mk.po (+0/-25) portal_anonymous/i18n/mn.po (+0/-25) portal_anonymous/i18n/nl.po (+0/-25) portal_anonymous/i18n/pl.po (+0/-25) portal_anonymous/i18n/portal_anonymous.pot (+0/-24) portal_anonymous/i18n/pt.po (+0/-25) portal_anonymous/i18n/pt_BR.po (+0/-25) portal_anonymous/i18n/ro.po (+0/-25) portal_anonymous/i18n/ru.po (+0/-25) portal_anonymous/i18n/sl.po (+0/-25) portal_anonymous/i18n/sv.po (+0/-25) portal_anonymous/i18n/th.po (+0/-25) portal_anonymous/i18n/tr.po (+0/-25) portal_anonymous/i18n/zh_CN.po (+0/-25) portal_anonymous/portal_anonymous_data.xml (+0/-20) portal_anonymous/security/ir.model.access.csv (+0/-3) portal_anonymous/static/src/js/portal_anonymous.js (+0/-100) portal_anonymous/static/src/xml/portal_anonymous.xml (+0/-14) portal_claim/security/ir.model.access.csv (+2/-2) portal_claim/security/portal_security.xml (+1/-1) portal_crm/__init__.py (+0/-22) portal_crm/__openerp__.py (+0/-46) portal_crm/contact.py (+0/-128) portal_crm/contact_view.xml (+0/-103) portal_crm/i18n/bs.po (+0/-546) portal_crm/i18n/cs.po (+0/-548) portal_crm/i18n/de.po (+0/-564) portal_crm/i18n/es.po (+0/-566) portal_crm/i18n/fi.po (+0/-548) portal_crm/i18n/fr.po (+0/-561) portal_crm/i18n/he.po (+0/-546) portal_crm/i18n/hr.po (+0/-546) portal_crm/i18n/hu.po (+0/-568) portal_crm/i18n/lt.po (+0/-563) portal_crm/i18n/mk.po (+0/-563) portal_crm/i18n/nl.po (+0/-567) portal_crm/i18n/pl.po (+0/-555) portal_crm/i18n/portal_crm.pot (+0/-529) portal_crm/i18n/pt.po (+0/-547) portal_crm/i18n/pt_BR.po (+0/-567) portal_crm/i18n/ro.po (+0/-568) portal_crm/i18n/sl.po (+0/-546) portal_crm/i18n/sv.po (+0/-548) portal_crm/i18n/th.po (+0/-546) portal_crm/i18n/tr.po (+0/-563) portal_crm/i18n/zh_CN.po (+0/-546) portal_crm/security/ir.model.access.csv (+0/-3) portal_crm/static/src/css/portal_crm.css (+0/-40) portal_crm/test/contact_form.yml (+0/-38) portal_event/__init__.py (+0/-20) portal_event/__openerp__.py (+0/-46) portal_event/i18n/cs.po (+0/-59) portal_event/i18n/de.po (+0/-59) portal_event/i18n/es.po (+0/-59) portal_event/i18n/fr.po (+0/-59) portal_event/i18n/hr.po (+0/-59) portal_event/i18n/hu.po (+0/-59) portal_event/i18n/mk.po (+0/-59) portal_event/i18n/nl.po (+0/-59) portal_event/i18n/portal_event.pot (+0/-58) portal_event/i18n/pt.po (+0/-59) portal_event/i18n/pt_BR.po (+0/-59) portal_event/i18n/ro.po (+0/-59) portal_event/i18n/sl.po (+0/-59) portal_event/i18n/sv.po (+0/-59) portal_event/i18n/tr.po (+0/-59) portal_event/i18n/zh_CN.po (+0/-59) portal_event/portal_event_view.xml (+0/-23) portal_event/security/ir.model.access.csv (+0/-5) portal_event/security/portal_security.xml (+0/-24) portal_gamification/security/ir.model.access.csv (+6/-6) portal_gamification/security/portal_security.xml (+1/-1) portal_hr_employees/__init__.py (+0/-22) portal_hr_employees/__openerp__.py (+0/-43) portal_hr_employees/hr_employee.py (+0/-69) portal_hr_employees/hr_employee_view.xml (+0/-96) portal_hr_employees/i18n/cs.po (+0/-95) portal_hr_employees/i18n/de.po (+0/-95) portal_hr_employees/i18n/es.po (+0/-95) portal_hr_employees/i18n/fr.po (+0/-95) portal_hr_employees/i18n/hr.po (+0/-95) portal_hr_employees/i18n/hu.po (+0/-95) portal_hr_employees/i18n/lt.po (+0/-95) portal_hr_employees/i18n/mk.po (+0/-95) portal_hr_employees/i18n/nl.po (+0/-95) portal_hr_employees/i18n/pl.po (+0/-95) portal_hr_employees/i18n/portal_hr_employees.pot (+0/-94) portal_hr_employees/i18n/pt.po (+0/-95) portal_hr_employees/i18n/pt_BR.po (+0/-96) portal_hr_employees/i18n/ro.po (+0/-95) portal_hr_employees/i18n/sl.po (+0/-95) portal_hr_employees/i18n/th.po (+0/-95) portal_hr_employees/i18n/tr.po (+0/-95) portal_hr_employees/i18n/zh_CN.po (+0/-95) portal_hr_employees/security/ir.model.access.csv (+0/-3) portal_hr_employees/static/src/css/portal_hr_employees.css (+0/-19) portal_project/security/ir.model.access.csv (+12/-12) portal_project/security/portal_security.xml (+8/-8) portal_project/tests/test_access_rights.py (+39/-38) portal_project_issue/security/ir.model.access.csv (+3/-3) portal_project_issue/security/portal_security.xml (+4/-4) portal_project_issue/tests/test_access_rights.py (+10/-9) portal_project_long_term/security/ir.model.access.csv (+2/-2) portal_project_long_term/security/portal_security.xml (+4/-4) portal_sale/__openerp__.py (+1/-1) portal_sale/portal_sale.py (+8/-6) portal_sale/res_config_view.xml (+1/-1) portal_sale/security/ir.model.access.csv (+19/-19) portal_sale/security/portal_security.xml (+4/-4) portal_stock/security/ir.model.access.csv (+4/-4) portal_stock/security/portal_security.xml (+2/-2) procurement/procurement_view.xml (+39/-3) product/__openerp__.py (+4/-1) product/pricelist.py (+118/-155) product/product.py (+225/-131) product/product_data.xml (+8/-1) product/product_demo.xml (+285/-89) product/product_image_demo.xml (+9/-9) product/product_view.xml (+298/-101) product/security/ir.model.access.csv (+2/-0) product/security/product_security.xml (+15/-7) product/test/product_pricelist.yml (+8/-8) product_email_template/views/product_view.xml (+4/-2) product_visible_discount/product_visible_discount.py (+0/-6) project/static/description/index.html (+0/-1) project/tests/test_project_flow.py (+2/-2) project_issue/project_issue.py (+0/-2) purchase/purchase.py (+0/-1) purchase/purchase_view.xml (+19/-7) purchase_requisition/purchase_requisition.py (+0/-1) purchase_requisition/wizard/purchase_requisition_partner.py (+0/-2) report_intrastat/report_intrastat_view.xml (+2/-1) resource/resource.py (+8/-6) resource/tests/test_resource.py (+8/-3) sale/res_config.py (+39/-9) sale/res_config_view.xml (+9/-2) sale/sale.py (+7/-3) sale/test/sale_order_demo.yml (+4/-4) sale_crm/__openerp__.py (+0/-1) sale_crm/report/sale_crm_account_invoice_report_view.xml (+0/-22) sale_crm/sale_crm_demo.xml (+1/-1) sale_stock/res_config.py (+0/-3) sale_stock/res_config_view.xml (+0/-6) share/__openerp__.py (+2/-1) share/share_data.xml (+9/-0) share/wizard/share_wizard.py (+0/-1) stock/product_view.xml (+32/-27) stock/stock_demo.xml (+3/-3) stock/stock_view.xml (+7/-1) stock/test/shipment.yml (+2/-0) stock/wizard/stock_fill_inventory.py (+3/-1) website/__init__.py (+3/-0) website/__openerp__.py (+30/-0) website/controllers/__init__.py (+3/-0) website/controllers/main.py (+370/-0) website/data/website_data.xml (+204/-0) website/data/website_demo.xml (+16/-0) website/models/__init__.py (+9/-0) website/models/ir_http.py (+171/-0) website/models/ir_qweb.py (+518/-0) website/models/ir_ui_view.py (+146/-0) website/models/res_config.py (+34/-0) website/models/test_models.py (+39/-0) website/models/website.py (+672/-0) website/security/ir.model.access.csv (+9/-0) website/security/ir_ui_view.xml (+25/-0) website/static/description/index.html (+272/-0) website/static/lib/MutationObservers/AUTHORS (+9/-0) website/static/lib/MutationObservers/LICENSE (+27/-0) website/static/lib/MutationObservers/MutationObserver.js (+542/-0) website/static/lib/MutationObservers/PATENTS (+23/-0) website/static/lib/MutationObservers/README.md (+4/-0) website/static/lib/MutationObservers/last-ref.txt (+8/-0) website/static/lib/MutationObservers/package.json (+23/-0) website/static/lib/MutationObservers/test/attributes.js (+276/-0) website/static/lib/MutationObservers/test/callback.js (+72/-0) website/static/lib/MutationObservers/test/characterData.js (+106/-0) website/static/lib/MutationObservers/test/childList.js (+377/-0) website/static/lib/MutationObservers/test/index.html (+81/-0) website/static/lib/MutationObservers/test/mixed.js (+36/-0) website/static/lib/MutationObservers/test/sidetable.js (+35/-0) website/static/lib/MutationObservers/test/transient.js (+283/-0) website/static/lib/ace/ace.js (+11/-0) website/static/lib/ace/mode-xml.js (+1/-0) website/static/lib/ace/theme-monokai.js (+1/-0) website/static/lib/bootstrap-tour/bootstrap-tour.css (+43/-0) website/static/lib/bootstrap-tour/bootstrap-tour.js (+559/-0) website/static/lib/bootstrap/css/bootstrap-theme.min.css (+268/-0) website/static/lib/bootstrap/css/bootstrap.css (+3788/-0) website/static/lib/bootstrap/fonts/glyphicons-halflings-regular.svg (+228/-0) website/static/lib/bootstrap/js/bootstrap.js (+2006/-0) website/static/lib/jquery.mjs.nestedSortable/jquery.mjs.nestedSortable.js (+429/-0) website/static/lib/nearest/README.md (+22/-0) website/static/lib/nearest/bower.json (+12/-0) website/static/lib/nearest/jquery.nearest.js (+223/-0) website/static/lib/nearest/jquery.nearest.min.js (+11/-0) website/static/lib/nearest/nearest.jquery.json (+24/-0) website/static/lib/select2-bootstrap-css/README.md (+16/-0) website/static/lib/select2-bootstrap-css/select2-bootstrap.css (+420/-0) website/static/lib/vkbeautify/vkbeautify.0.99.00.beta.js (+358/-0) website/static/src/css/Makefile (+4/-0) website/static/src/css/bootswatch/amelia.min.css (+1/-0) website/static/src/css/bootswatch/cerulean.min.css (+1/-0) website/static/src/css/bootswatch/cosmo.min.css (+1/-0) website/static/src/css/bootswatch/cyborg.min.css (+1/-0) website/static/src/css/bootswatch/flatly.min.css (+1/-0) website/static/src/css/bootswatch/journal.min.css (+1/-0) website/static/src/css/bootswatch/readable.min.css (+1/-0) website/static/src/css/bootswatch/simplex.min.css (+1/-0) website/static/src/css/bootswatch/slate.min.css (+1/-0) website/static/src/css/bootswatch/spacelab.min.css (+1/-0) website/static/src/css/bootswatch/united.min.css (+1/-0) website/static/src/css/bootswatch/yeti.min.css (+1/-0) website/static/src/css/common.sass (+25/-0) website/static/src/css/editor.css (+466/-0) website/static/src/css/editor.sass (+409/-0) website/static/src/css/fonts/glyphicons-halflings-regular.svg (+228/-0) website/static/src/css/snippets.css (+588/-0) website/static/src/css/snippets.sass (+467/-0) website/static/src/css/website.backend.css (+6/-0) website/static/src/css/website.css (+512/-0) website/static/src/css/website.sass (+412/-0) website/static/src/js/website.ace.js (+302/-0) website/static/src/js/website.backend.js (+32/-0) website/static/src/js/website.editor.js (+1692/-0) website/static/src/js/website.editor.newpage.js (+29/-0) website/static/src/js/website.js (+294/-0) website/static/src/js/website.menu.js (+199/-0) website/static/src/js/website.mobile.js (+28/-0) website/static/src/js/website.seo.js (+527/-0) website/static/src/js/website.snippets.animation.js (+122/-0) website/static/src/js/website.snippets.editor.js (+1443/-0) website/static/src/js/website.tests.js (+40/-0) website/static/src/js/website.tour.banner.js (+118/-0) website/static/src/js/website.tour.js (+439/-0) website/static/src/js/website.translator.js (+209/-0) website/static/src/xml/website.ace.xml (+19/-0) website/static/src/xml/website.backend.xml (+25/-0) website/static/src/xml/website.editor.xml (+251/-0) website/static/src/xml/website.menu.xml (+65/-0) website/static/src/xml/website.seo.xml (+141/-0) website/static/src/xml/website.snippets.xml (+97/-0) website/static/src/xml/website.tour.xml (+27/-0) website/static/src/xml/website.translator.xml (+53/-0) website/static/src/xml/website.xml (+127/-0) website/tests/__init__.py (+4/-0) website/tests/cases.py (+35/-0) website/tests/test_converter.py (+240/-0) website/tests/test_requests.py (+128/-0) website/tests/test_ui.py (+153/-0) website/tests/test_views.py (+220/-0) website/tests/ui_suite/dummy_test.js (+4/-0) website/tests/ui_suite/homepage_test.js (+17/-0) website/tests/ui_suite/simple_dom_test.js (+14/-0) website/tests/ui_suite/ui_test_runner.js (+93/-0) website/views/res_config.xml (+99/-0) website/views/snippets.xml (+967/-0) website/views/themes.xml (+279/-0) website/views/website_templates.xml (+742/-0) website/views/website_views.xml (+77/-0) website_blog/__init__.py (+24/-0) website_blog/__openerp__.py (+52/-0) website_blog/controllers/__init__.py (+1/-0) website_blog/controllers/main.py (+261/-0) website_blog/data/website_blog_data.xml (+50/-36) website_blog/data/website_blog_demo.xml (+331/-125) website_blog/doc/changelog.rst (+9/-0) website_blog/doc/index.rst (+10/-0) website_blog/models/__init__.py (+1/-0) website_blog/models/website_blog.py (+154/-68) website_blog/security/ir.model.access.csv (+6/-3) website_blog/security/website_blog.xml (+13/-0) website_blog/static/description/index.html (+245/-0) website_blog/static/src/css/Makefile (+2/-0) website_blog/static/src/css/website_blog.css (+23/-0) website_blog/static/src/css/website_blog.sass (+22/-0) website_blog/static/src/js/website.tour.blog.js (+119/-0) website_blog/static/src/js/website_blog.editor.js (+31/-0) website_blog/static/src/xml/website_blog.xml (+7/-0) website_blog/tests/__init__.py (+24/-0) website_blog/tests/test_ui.py (+5/-0) website_blog/tests/test_website_blog.yml (+7/-28) website_blog/tests/ui_suite/post_test.js (+17/-0) website_blog/views/website_blog_templates.xml (+403/-0) website_blog/views/website_blog_views.xml (+91/-94) website_blog/wizard/__init__.py (+0/-1) website_blog/wizard/document_page_show_diff.py (+4/-4) website_blog/wizard/document_page_show_diff_view.xml (+4/-4) website_crm/__init__.py (+1/-0) website_crm/__openerp__.py (+19/-0) website_crm/controllers/__init__.py (+3/-0) website_crm/controllers/main.py (+56/-0) website_crm/data/website_crm_data.xml (+23/-0) website_crm/static/description/index.html (+91/-0) website_crm/views/website_crm.xml (+91/-0) website_crm_partner_assign/__init__.py (+2/-0) website_crm_partner_assign/__openerp__.py (+17/-0) website_crm_partner_assign/controllers/__init__.py (+1/-0) website_crm_partner_assign/controllers/main.py (+110/-0) website_crm_partner_assign/models/__init__.py (+2/-0) website_crm_partner_assign/models/res_partner.py (+9/-0) website_crm_partner_assign/models/website.py (+11/-0) website_crm_partner_assign/views/website_crm_partner_assign.xml (+124/-0) website_customer/__init__.py (+22/-0) website_customer/__openerp__.py (+44/-0) website_customer/controllers/__init__.py (+1/-0) website_customer/controllers/main.py (+108/-0) website_customer/views/website_customer.xml (+176/-0) website_customer/website_customer_demo.xml (+123/-0) website_event/__init__.py (+23/-0) website_event/__openerp__.py (+25/-0) website_event/controllers/__init__.py (+3/-0) website_event/controllers/main.py (+215/-0) website_event/data/event_data.xml (+22/-0) website_event/data/event_demo.xml (+507/-0) website_event/doc/changelog.rst (+9/-0) website_event/doc/index.rst (+10/-0) website_event/models/__init__.py (+1/-0) website_event/models/event.py (+122/-0) website_event/security/ir.model.access.csv (+3/-0) website_event/security/website_event.xml (+15/-0) website_event/static/description/index.html (+254/-0) website_event/static/src/js/website.tour.event.js (+117/-0) website_event/static/src/js/website_event.editor.js (+29/-0) website_event/static/src/xml/website_event.xml (+7/-0) website_event/tests/__init__.py (+30/-0) website_event/tests/test_controllers.py (+29/-0) website_event/tests/test_ui.py (+5/-0) website_event/tests/ui_suite/event_test.js (+17/-0) website_event/views/website_event.xml (+347/-0) website_event/views/website_event_sale_backend.xml (+22/-0) website_event_sale/__init__.py (+23/-0) website_event_sale/__openerp__.py (+23/-0) website_event_sale/controllers/__init__.py (+1/-0) website_event_sale/controllers/main.py (+100/-0) website_event_sale/models/__init__.py (+3/-0) website_event_sale/models/product.py (+9/-0) website_event_sale/models/sale_order.py (+22/-0) website_event_sale/models/website.py (+10/-0) website_event_sale/security/ir.model.access.csv (+5/-0) website_event_sale/security/website_event_sale.xml (+25/-0) website_event_sale/views/website_event_sale.xml (+74/-0) website_event_track/__init__.py (+23/-0) website_event_track/__openerp__.py (+34/-0) website_event_track/controllers/__init__.py (+2/-0) website_event_track/controllers/event.py (+127/-0) website_event_track/data/event_data.xml (+36/-0) website_event_track/data/event_demo.xml (+194/-0) website_event_track/models/__init__.py (+1/-0) website_event_track/models/event.py (+178/-0) website_event_track/security/event.xml (+17/-0) website_event_track/security/ir.model.access.csv (+16/-0) website_event_track/static/description/index.html (+103/-0) website_event_track/static/src/css/website_event_track.css (+54/-0) website_event_track/views/event_backend.xml (+364/-0) website_event_track/views/website_event.xml (+432/-0) website_google_map/__init__.py (+2/-0) website_google_map/__openerp__.py (+18/-0) website_google_map/controllers/__init__.py (+3/-0) website_google_map/controllers/main.py (+48/-0) website_google_map/models/__init__.py (+1/-0) website_google_map/models/res_partner.py (+28/-0) website_google_map/static/src/js/google_map.js (+84/-0) website_google_map/static/src/js/markerclusterer.js (+1294/-0) website_google_map/static/src/js/markerclusterer_compiled.js (+21/-0) website_google_map/views/google_map.xml (+42/-0) website_hr/__init__.py (+2/-0) website_hr/__openerp__.py (+24/-0) website_hr/controllers/__init__.py (+1/-0) website_hr/controllers/main.py (+17/-0) website_hr/data/website_hr_data.xml (+16/-0) website_hr/data/website_hr_demo.xml (+36/-0) website_hr/models/__init__.py (+1/-0) website_hr/models/hr.py (+17/-0) website_hr/security/ir.model.access.csv (+2/-0) website_hr/security/website_hr.xml (+15/-0) website_hr/views/website_hr.xml (+27/-0) website_hr_recruitment/__init__.py (+2/-0) website_hr_recruitment/__openerp__.py (+27/-0) website_hr_recruitment/controllers/__init__.py (+3/-0) website_hr_recruitment/controllers/main.py (+91/-0) website_hr_recruitment/data/config_data.xml (+21/-0) website_hr_recruitment/data/hr_job_demo.xml (+919/-0) website_hr_recruitment/models/__init__.py (+1/-0) website_hr_recruitment/models/hr_job.py (+26/-0) website_hr_recruitment/security/ir.model.access.csv (+3/-0) website_hr_recruitment/security/website_hr_recruitment_security.xml (+23/-0) website_hr_recruitment/static/description/index.html (+183/-0) website_hr_recruitment/static/src/js/website_hr_recruitment.editor.js (+15/-0) website_hr_recruitment/static/src/xml/website_hr_recruitment.xml (+7/-0) website_hr_recruitment/views/hr_job_views.xml (+17/-0) website_hr_recruitment/views/templates.xml (+275/-0) website_livechat/__init__.py (+1/-0) website_livechat/__openerp__.py (+21/-0) website_livechat/models/__init__.py (+1/-0) website_livechat/models/website.py (+8/-0) website_livechat/views/website_livechat.xml (+30/-0) website_mail/__init__.py (+23/-0) website_mail/__openerp__.py (+48/-0) website_mail/controllers/__init__.py (+2/-0) website_mail/controllers/email_designer.py (+20/-0) website_mail/controllers/main.py (+58/-0) website_mail/doc/changelog.rst (+9/-0) website_mail/doc/index.rst (+10/-0) website_mail/models/__init__.py (+3/-0) website_mail/models/email_template.py (+90/-0) website_mail/models/mail_message.py (+65/-0) website_mail/models/mail_thread.py (+37/-0) website_mail/security/website_mail.xml (+15/-0) website_mail/static/src/css/website_mail.css (+4/-0) website_mail/static/src/js/website_email_designer.js (+17/-0) website_mail/static/src/js/website_mail.js (+30/-0) website_mail/tests/__init__.py (+28/-0) website_mail/tests/test_controllers.py (+40/-0) website_mail/views/email_template_view.xml (+16/-0) website_mail/views/snippets.xml (+459/-0) website_mail/views/website_email_designer.xml (+54/-0) website_mail/views/website_mail.xml (+31/-0) website_membership/__init__.py (+2/-0) website_membership/__openerp__.py (+21/-0) website_membership/controllers/__init__.py (+1/-0) website_membership/controllers/main.py (+115/-0) website_membership/demo/membership.xml (+19/-0) website_membership/models/__init__.py (+1/-0) website_membership/models/product.py (+32/-0) website_membership/security/ir.model.access.csv (+2/-0) website_membership/security/website_membership.xml (+25/-0) website_membership/views/website_membership.xml (+128/-0) website_partner/__init__.py (+22/-0) website_partner/__openerp__.py (+44/-0) website_partner/controllers/__init__.py (+1/-0) website_partner/controllers/main.py (+43/-0) website_partner/data/website_data.xml (+8/-0) website_partner/models/__init__.py (+3/-0) website_partner/models/res_company.py (+10/-0) website_partner/models/res_partner.py (+25/-0) website_partner/models/website.py (+10/-0) website_partner/views/res_partner_view.xml (+21/-0) website_partner/views/website_partner_view.xml (+71/-0) website_partner/website_partner_demo.xml (+248/-0) website_payment/__init__.py (+20/-0) website_payment/__openerp__.py (+19/-0) website_payment/doc/changelog.rst (+9/-0) website_payment/doc/index.rst (+10/-0) website_payment/static/lib/jquery.payment/jquery.payment.js (+497/-0) website_payment/static/src/css/Makefile (+2/-0) website_payment/static/src/css/website_payment.css (+53/-0) website_payment/static/src/css/website_payment.sass (+45/-0) website_payment/static/src/js/payment_acquirer.js (+58/-0) website_payment/views/website_payment_templates.xml (+31/-0) website_payment/views/website_settings_payment.xml (+22/-0) website_project/__init__.py (+2/-0) website_project/__openerp__.py (+19/-0) website_project/controllers/__init__.py (+1/-0) website_project/controllers/main.py (+50/-0) website_project/models/__init__.py (+1/-0) website_project/models/website_project.py (+9/-0) website_project/views/website_project.xml (+54/-0) website_quote/__init__.py (+2/-0) website_quote/__openerp__.py (+24/-0) website_quote/controllers/__init__.py (+3/-0) website_quote/controllers/main.py (+171/-0) website_quote/data/website_quotation_data.xml (+86/-0) website_quote/data/website_quotation_demo.xml (+531/-0) website_quote/models/__init__.py (+1/-0) website_quote/models/order.py (+243/-0) website_quote/security/ir.model.access.csv (+8/-0) website_quote/static/description/index.html (+63/-0) website_quote/static/lib/jSignature/jSignature.min.js (+77/-0) website_quote/static/src/css/website_quotation.css (+56/-0) website_quote/static/src/js/website_quotation.js (+92/-0) website_quote/views/website_quotation.xml (+520/-0) website_quote/views/website_quotation_backend.xml (+138/-0) website_sale/__init__.py (+2/-0) website_sale/__openerp__.py (+25/-0) website_sale/controllers/__init__.py (+1/-0) website_sale/controllers/main.py (+787/-0) website_sale/data/website_sale_data.xml (+36/-0) website_sale/data/website_sale_demo.xml (+551/-0) website_sale/models/__init__.py (+7/-0) website_sale/models/payment_transaction.py (+11/-0) website_sale/models/product.py (+151/-0) website_sale/models/product_characteristics.py (+87/-0) website_sale/models/res_config.py (+15/-0) website_sale/models/sale_order.py (+50/-0) website_sale/models/website.py (+222/-0) website_sale/models/website_styles.py (+30/-0) website_sale/security/ir.model.access.csv (+14/-0) website_sale/security/website_sale.xml (+27/-0) website_sale/static/description/index.html (+344/-0) website_sale/static/src/css/Makefile (+3/-0) website_sale/static/src/css/website_mail.css (+51/-0) website_sale/static/src/css/website_mail.sass (+50/-0) website_sale/static/src/css/website_sale.css (+399/-0) website_sale/static/src/css/website_sale.sass (+349/-0) website_sale/static/src/js/website.tour.shop.js (+239/-0) website_sale/static/src/js/website_sale.editor.js (+94/-0) website_sale/static/src/js/website_sale.js (+114/-0) website_sale/static/src/js/website_sale_payment.js (+12/-0) website_sale/static/src/js/website_sale_validate.js (+29/-0) website_sale/static/src/xml/website_sale.xml (+7/-0) website_sale/tests/__init__.py (+1/-0) website_sale/tests/test_ui.py (+8/-0) website_sale/tests/ui_suite/website_sale-sale_process-test-2.js (+17/-0) website_sale/tests/ui_suite/website_sale-sale_process-test.js (+17/-0) website_sale/views/website_sale.xml (+1061/-0) website_sale/views/website_sale_backend.xml (+98/-0) website_sale_crm/__openerp__.py (+15/-0) website_sale_crm/data/website_sale_crm.xml (+13/-0) website_sale_crm/models/__init__.py (+1/-0) website_sale_crm/models/website.py (+14/-0) website_sale_delivery/__init__.py (+2/-0) website_sale_delivery/__openerp__.py (+20/-0) website_sale_delivery/controllers/__init__.py (+1/-0) website_sale_delivery/controllers/main.py (+22/-0) website_sale_delivery/models/__init__.py (+2/-0) website_sale_delivery/models/sale_order.py (+74/-0) website_sale_delivery/models/website.py (+47/-0) website_sale_delivery/security/ir.model.access.csv (+2/-0) website_sale_delivery/static/src/js/website_sale_delivery.js (+10/-0) website_sale_delivery/views/website_sale_delivery.xml (+48/-0) website_sale_delivery/views/website_sale_delivery_view.xml (+20/-0) |
To merge this branch: | bzr merge lp:~openerp-dev/openobject-addons/trunk-website-al |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
OpenERP Core Team | Pending | ||
Review via email: mp+172007@code.launchpad.net |
Commit message
Description of the change
To post a comment you must log in.
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file 'account/account_unit_test.xml' |
2 | --- account/account_unit_test.xml 2012-11-29 22:26:45 +0000 |
3 | +++ account/account_unit_test.xml 2014-01-31 00:21:10 +0000 |
4 | @@ -8,7 +8,7 @@ |
5 | <field name="partner_id" ref="base.res_partner_1"/> |
6 | <field name="journal_id" ref="account.sales_journal"/> |
7 | <field name="state">draft</field> |
8 | - <field name="type">out_invoice</field> |
9 | + <field name="type">in_invoice</field> |
10 | <field name="account_id" ref="account.a_recv"/> |
11 | <field name="name">Test invoice 1</field> |
12 | </record> |
13 | |
14 | === modified file 'account/account_view.xml' |
15 | --- account/account_view.xml 2013-12-30 07:24:52 +0000 |
16 | +++ account/account_view.xml 2014-01-31 00:21:10 +0000 |
17 | @@ -1211,6 +1211,7 @@ |
18 | <record id="view_move_line_tree_reconcile" model="ir.ui.view"> |
19 | <field name="model">account.move.line</field> |
20 | <field eval="24" name="priority"/> |
21 | + <field name="type">tree</field> |
22 | <field name="arch" type="xml"> |
23 | <tree_account_reconciliation colors="red:state == 'draft';black:state == 'valid'" string="Journal Items to Reconcile" create="false" version="7.0"> |
24 | <field name="date"/> |
25 | |
26 | === modified file 'account/product_view.xml' |
27 | --- account/product_view.xml 2013-10-27 12:31:04 +0000 |
28 | +++ account/product_view.xml 2014-01-31 00:21:10 +0000 |
29 | @@ -11,12 +11,16 @@ |
30 | <page string="Accounting" groups="account.group_account_invoice"> |
31 | <group name="properties"> |
32 | <group> |
33 | - <field name="property_account_income" domain="[('type','=','other')]" groups="account.group_account_user"/> |
34 | - <field name="taxes_id" colspan="2" attrs="{'readonly':[('sale_ok','=',0)]}" widget="many2many_tags"/> |
35 | + <field name="property_account_income" domain="[('type','=','other')]" groups="account.group_account_user" |
36 | + attrs="{'readonly': [('is_only_child', '=', False)]}"/> |
37 | + <field name="taxes_id" colspan="2" widget="many2many_tags" |
38 | + attrs="{'readonly':[ '|', ('sale_ok','=',0), ('is_only_child', '=', False)]}"/> |
39 | </group> |
40 | <group> |
41 | - <field name="property_account_expense" domain="[('type','=','other')]" groups="account.group_account_user"/> |
42 | - <field name="supplier_taxes_id" colspan="2" widget="many2many_tags"/> |
43 | + <field name="property_account_expense" domain="[('type','=','other')]" groups="account.group_account_user" |
44 | + attrs="{'readonly': [('is_only_child', '=', False)]}"/> |
45 | + <field name="supplier_taxes_id" colspan="2" widget="many2many_tags" |
46 | + attrs="{'readonly': [('is_only_child', '=', False)]}"/> |
47 | </group> |
48 | </group> |
49 | </page> |
50 | @@ -31,12 +35,16 @@ |
51 | <field name="arch" type="xml"> |
52 | <notebook position="inside"> |
53 | <page string="Accounting"> |
54 | - <separator string="Sales Properties" colspan="2"/> |
55 | - <separator string="Purchase Properties" colspan="2"/> |
56 | - <field name="property_account_income" domain="[('type','<>','view'),('type','<>','consolidation')]"/> |
57 | - <field name="property_account_expense" domain="[('type','<>','view'),('type','<>','consolidation')]"/> |
58 | - <field name="taxes_id"/> |
59 | - <field name="supplier_taxes_id"/> |
60 | + <group name="properties"> |
61 | + <group> |
62 | + <field name="property_account_income" domain="[('type','<>','view'),('type','<>','consolidation')]"/> |
63 | + <field name="taxes_id" colspan="2" widget="many2many_tags"/> |
64 | + </group> |
65 | + <group> |
66 | + <field name="property_account_expense" domain="[('type','<>','view'),('type','<>','consolidation')]"/> |
67 | + <field name="supplier_taxes_id" colspan="2" widget="many2many_tags"/> |
68 | + </group> |
69 | + </group> |
70 | </page> |
71 | </notebook> |
72 | </field> |
73 | |
74 | === modified file 'account/res_config_view.xml' |
75 | --- account/res_config_view.xml 2014-01-24 11:08:02 +0000 |
76 | +++ account/res_config_view.xml 2014-01-31 00:21:10 +0000 |
77 | @@ -234,14 +234,14 @@ |
78 | <group name="bank_cash"> |
79 | <label for="id" string="Configuration"/> |
80 | <div> |
81 | - <div> |
82 | + <div name='company_footer'> |
83 | <label for="company_footer"/> |
84 | <button name="open_company_form" type="object" |
85 | string="Configure your company bank accounts" icon="gtk-go-forward" |
86 | class="oe_inline oe_link"/> |
87 | <field name="company_footer"/> |
88 | </div> |
89 | - <div> |
90 | + <div name='payment_acquirer'> |
91 | <label for="paypal_account"/> |
92 | <field name="paypal_account" placeholder="e.g. sales@openerp.com" class="oe_inline"/> |
93 | </div> |
94 | |
95 | === modified file 'account_anglo_saxon/product_view.xml' |
96 | --- account_anglo_saxon/product_view.xml 2012-11-29 22:26:45 +0000 |
97 | +++ account_anglo_saxon/product_view.xml 2014-01-31 00:21:10 +0000 |
98 | @@ -6,11 +6,11 @@ |
99 | <field name="model">product.product</field> |
100 | <field name="inherit_id" ref="account.product_normal_form_view"/> |
101 | <field name="arch" type="xml"> |
102 | - <xpath expr="//field[@name='property_account_expense']" position="after"> |
103 | + <field name="property_account_expense" position="after"> |
104 | <label string="" colspan="2"/> |
105 | <field name="property_account_creditor_price_difference" domain="[('type','<>','view'),('type','<>','consolidation')]" attrs="{'readonly':[('purchase_ok','=',0)]}" /> |
106 | <newline/> |
107 | - </xpath> |
108 | + </field> |
109 | </field> |
110 | </record> |
111 | |
112 | @@ -19,10 +19,10 @@ |
113 | <field name="model">product.template</field> |
114 | <field name="inherit_id" ref="account.product_template_form_view"/> |
115 | <field name="arch" type="xml"> |
116 | - <xpath expr="/form/notebook/page/field[@name='property_account_expense']" position="after"> |
117 | + <field name="property_account_expense" position="after"> |
118 | <field name="property_account_creditor_price_difference" domain="[('type','<>','view'),('type','<>','consolidation')]" attrs="{'readonly':[('purchase_ok','=',0)]}" /> |
119 | <newline/> |
120 | - </xpath> |
121 | + </field> |
122 | </field> |
123 | </record> |
124 | |
125 | |
126 | === modified file 'auth_oauth/__openerp__.py' |
127 | --- auth_oauth/__openerp__.py 2012-11-20 14:19:21 +0000 |
128 | +++ auth_oauth/__openerp__.py 2014-01-31 00:21:10 +0000 |
129 | @@ -33,17 +33,13 @@ |
130 | 'website': 'http://www.openerp.com', |
131 | 'depends': ['base', 'web', 'base_setup'], |
132 | 'data': [ |
133 | + 'res_users.xml', |
134 | 'auth_oauth_data.xml', |
135 | 'auth_oauth_data.yml', |
136 | 'auth_oauth_view.xml', |
137 | - 'security/ir.model.access.csv' |
138 | - ], |
139 | - 'js': ['static/src/js/auth_oauth.js'], |
140 | - 'css': [ |
141 | - 'static/lib/zocial/css/zocial.css', |
142 | - 'static/src/css/auth_oauth.css', |
143 | - ], |
144 | - 'qweb': ['static/src/xml/auth_oauth.xml'], |
145 | + 'security/ir.model.access.csv', |
146 | + 'views/auth_oauth_login.xml', |
147 | + ], |
148 | 'installable': True, |
149 | 'auto_install': False, |
150 | } |
151 | |
152 | === modified file 'auth_oauth/auth_oauth_data.xml' |
153 | --- auth_oauth/auth_oauth_data.xml 2012-11-28 00:14:49 +0000 |
154 | +++ auth_oauth/auth_oauth_data.xml 2014-01-31 00:21:10 +0000 |
155 | @@ -17,7 +17,7 @@ |
156 | <field name="scope"></field> |
157 | <field name="validation_endpoint">https://graph.facebook.com/me/permissions</field> |
158 | <field name="data_endpoint"></field> |
159 | - <field name="css_class">zocial facebook</field> |
160 | + <field name="css_class">fa fa-facebook-square</field> |
161 | <field name="body">Log in with facebook</field> |
162 | </record> |
163 | <record id="provider_google" model="auth.oauth.provider"> |
164 | @@ -26,7 +26,7 @@ |
165 | <field name="scope">https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile</field> |
166 | <field name="validation_endpoint">https://www.googleapis.com/oauth2/v1/tokeninfo</field> |
167 | <field name="data_endpoint">https://www.googleapis.com/oauth2/v1/userinfo</field> |
168 | - <field name="css_class">zocial google</field> |
169 | + <field name="css_class">fa fa-google-plus-square</field> |
170 | <field name="body">Log in with google</field> |
171 | </record> |
172 | <!-- |
173 | @@ -36,7 +36,7 @@ |
174 | <field name="scope"></field> |
175 | <field name="validation_endpoint">https://api.twitter.com/oauth/authorize</field> |
176 | <field name="data_endpoint"></field> |
177 | - <field name="css_class">zocial twitter</field> |
178 | + <field name="css_class">fa-twitter</field> |
179 | <field name="body">Sign in with twitter</field> |
180 | </record> |
181 | --> |
182 | |
183 | === modified file 'auth_oauth/controllers/main.py' |
184 | --- auth_oauth/controllers/main.py 2013-11-27 15:32:57 +0000 |
185 | +++ auth_oauth/controllers/main.py 2014-01-31 00:21:10 +0000 |
186 | @@ -8,9 +8,10 @@ |
187 | import openerp |
188 | from openerp import SUPERUSER_ID |
189 | from openerp import http |
190 | -from openerp.http import request |
191 | +from openerp.http import request, LazyResponse |
192 | from openerp.addons.web.controllers.main import db_monodb, set_cookie_and_redirect, login_and_redirect |
193 | from openerp.modules.registry import RegistryManager |
194 | +from openerp.tools.translate import _ |
195 | |
196 | _logger = logging.getLogger(__name__) |
197 | |
198 | @@ -34,22 +35,60 @@ |
199 | return func(self, *a, **kw) |
200 | return wrapper |
201 | |
202 | - |
203 | #---------------------------------------------------------- |
204 | # Controller |
205 | #---------------------------------------------------------- |
206 | -class OAuthController(http.Controller): |
207 | - |
208 | - @http.route('/auth_oauth/list_providers', type='json', auth='none') |
209 | - def list_providers(self, dbname): |
210 | +class OAuthLogin(openerp.addons.web.controllers.main.Home): |
211 | + def list_providers(self): |
212 | try: |
213 | - registry = RegistryManager.get(dbname) |
214 | - with registry.cursor() as cr: |
215 | - providers = registry.get('auth.oauth.provider') |
216 | - l = providers.read(cr, SUPERUSER_ID, providers.search(cr, SUPERUSER_ID, [('enabled', '=', True)])) |
217 | + provider_obj = request.registry.get('auth.oauth.provider') |
218 | + providers = provider_obj.search_read(request.cr, SUPERUSER_ID, [('enabled', '=', True)]) |
219 | except Exception: |
220 | - l = [] |
221 | - return l |
222 | + providers = [] |
223 | + for provider in providers: |
224 | + return_url = request.httprequest.url_root + 'auth_oauth/signin' |
225 | + state = self.get_state(provider) |
226 | + params = dict( |
227 | + debug=request.debug, |
228 | + response_type='token', |
229 | + client_id=provider['client_id'], |
230 | + redirect_uri=return_url, |
231 | + scope=provider['scope'], |
232 | + state=simplejson.dumps(state), |
233 | + ) |
234 | + provider['auth_link'] = provider['auth_endpoint'] + '?' + werkzeug.url_encode(params) |
235 | + |
236 | + return providers |
237 | + |
238 | + def get_state(self, provider): |
239 | + return dict( |
240 | + d=request.session.db, |
241 | + p=provider['id'] |
242 | + ) |
243 | + |
244 | + @http.route() |
245 | + def web_login(self, *args, **kw): |
246 | + providers = self.list_providers() |
247 | + |
248 | + response = super(OAuthLogin, self).web_login(*args, **kw) |
249 | + if isinstance(response, LazyResponse): |
250 | + error = request.params.get('oauth_error') |
251 | + if error == '1': |
252 | + error = _("Sign up is not allowed on this database.") |
253 | + elif error == '2': |
254 | + error = _("Access Denied") |
255 | + elif error == '3': |
256 | + error = _("You do not have access to this database or your invitation has expired. Please ask for an invitation and be sure to follow the link in your invitation email.") |
257 | + else: |
258 | + error = None |
259 | + |
260 | + response.params['values']['providers'] = providers |
261 | + if error: |
262 | + response.params['values']['error'] = error |
263 | + |
264 | + return response |
265 | + |
266 | +class OAuthController(http.Controller): |
267 | |
268 | @http.route('/auth_oauth/signin', type='http', auth='none') |
269 | @fragment_to_query_string |
270 | @@ -66,27 +105,27 @@ |
271 | cr.commit() |
272 | action = state.get('a') |
273 | menu = state.get('m') |
274 | - url = '/' |
275 | + url = '/web' |
276 | if action: |
277 | - url = '/#action=%s' % action |
278 | + url = '/web#action=%s' % action |
279 | elif menu: |
280 | - url = '/#menu_id=%s' % menu |
281 | + url = '/web#menu_id=%s' % menu |
282 | return login_and_redirect(*credentials, redirect_url=url) |
283 | except AttributeError: |
284 | # auth_signup is not installed |
285 | _logger.error("auth_signup not installed on database %s: oauth sign up cancelled." % (dbname,)) |
286 | - url = "/#action=login&oauth_error=1" |
287 | + url = "/web/login?oauth_error=1" |
288 | except openerp.exceptions.AccessDenied: |
289 | # oauth credentials not valid, user could be on a temporary session |
290 | _logger.info('OAuth2: access denied, redirect to main page in case a valid session exists, without setting cookies') |
291 | - url = "/#action=login&oauth_error=3" |
292 | + url = "/web/login?oauth_error=3" |
293 | redirect = werkzeug.utils.redirect(url, 303) |
294 | redirect.autocorrect_location_header = False |
295 | return redirect |
296 | except Exception, e: |
297 | # signup error |
298 | _logger.exception("OAuth2: %s" % str(e)) |
299 | - url = "/#action=login&oauth_error=2" |
300 | + url = "/web/login?oauth_error=2" |
301 | |
302 | return set_cookie_and_redirect(url) |
303 | |
304 | @@ -105,7 +144,7 @@ |
305 | try: |
306 | model, provider_id = IMD.get_object_reference(cr, SUPERUSER_ID, 'auth_oauth', 'provider_openerp') |
307 | except ValueError: |
308 | - return set_cookie_and_redirect('/?db=%s' % dbname) |
309 | + return set_cookie_and_redirect('/web?db=%s' % dbname) |
310 | assert model == 'auth.oauth.provider' |
311 | |
312 | state = { |
313 | |
314 | === modified file 'auth_oauth/res_users.py' |
315 | --- auth_oauth/res_users.py 2012-11-27 10:06:35 +0000 |
316 | +++ auth_oauth/res_users.py 2014-01-31 00:21:10 +0000 |
317 | @@ -1,6 +1,6 @@ |
318 | import logging |
319 | |
320 | -import urllib |
321 | +import werkzeug.urls |
322 | import urlparse |
323 | import urllib2 |
324 | import simplejson |
325 | @@ -25,7 +25,7 @@ |
326 | ] |
327 | |
328 | def _auth_oauth_rpc(self, cr, uid, endpoint, access_token, context=None): |
329 | - params = urllib.urlencode({'access_token': access_token}) |
330 | + params = werkzeug.url_encode({'access_token': access_token}) |
331 | if urlparse.urlparse(endpoint)[4]: |
332 | url = endpoint + '&' + params |
333 | else: |
334 | |
335 | === modified file 'auth_oauth/res_users.xml' |
336 | --- auth_oauth/res_users.xml 2012-08-14 11:55:55 +0000 |
337 | +++ auth_oauth/res_users.xml 2014-01-31 00:21:10 +0000 |
338 | @@ -10,7 +10,7 @@ |
339 | <xpath expr="//page[@string='Access Rights']" position="after"> |
340 | <page string="Oauth"> |
341 | <group> |
342 | - <field name="oauth_provider"/> |
343 | + <field name="oauth_provider_id"/> |
344 | <field name="oauth_uid"/> |
345 | <field name="oauth_access_token"/> |
346 | </group> |
347 | |
348 | === removed directory 'auth_oauth/static' |
349 | === removed directory 'auth_oauth/static/lib' |
350 | === removed directory 'auth_oauth/static/lib/zocial' |
351 | === removed file 'auth_oauth/static/lib/zocial/README.md' |
352 | --- auth_oauth/static/lib/zocial/README.md 2012-08-15 22:47:08 +0000 |
353 | +++ auth_oauth/static/lib/zocial/README.md 1970-01-01 00:00:00 +0000 |
354 | @@ -1,31 +0,0 @@ |
355 | -# Zocial CSS social buttons |
356 | - |
357 | -I basically rewrote this entire set so they are full vector buttons, meaning: |
358 | - |
359 | -- @font-face icons |
360 | -- custom font file for all social icons |
361 | -- icon font use private unicode spaces for accessibility |
362 | -- em sizing based on button font-size |
363 | -- support for about 83 different services |
364 | -- buttons and icons supported |
365 | -- no raster images (sweet) |
366 | -- works splendidly on any browser supporting @font-face |
367 | -- CSS3 degrades gracefully in IE8 and below etc. |
368 | -- also includes generic icon-less primary and secondary buttons |
369 | - |
370 | -## How to use these buttons |
371 | - |
372 | - <button class='zocial facebook'>Button label here</button> |
373 | - |
374 | -or |
375 | - |
376 | - <a class="zocial twitter'>Button label</a> |
377 | - |
378 | -- Can be any element e.g. `a`, `div`, `button` etc. |
379 | -- Add class of `.zocial` |
380 | -- Add class for name of service e.g. `.dropbox`, `.twitter`, `.github` |
381 | -- Done :-) |
382 | - |
383 | -Check out [zocial.smcllns.com](http://zocial.smcllns.com) for demo and code examples. |
384 | - |
385 | -Problems, questions or requests to [@smcllns](http://twitter.com/smcllns) |
386 | \ No newline at end of file |
387 | |
388 | === removed directory 'auth_oauth/static/lib/zocial/css' |
389 | === removed file 'auth_oauth/static/lib/zocial/css/zocial-regular-webfont.eot' |
390 | Binary files auth_oauth/static/lib/zocial/css/zocial-regular-webfont.eot 2013-10-27 12:31:04 +0000 and auth_oauth/static/lib/zocial/css/zocial-regular-webfont.eot 1970-01-01 00:00:00 +0000 differ |
391 | === removed file 'auth_oauth/static/lib/zocial/css/zocial-regular-webfont.svg' |
392 | --- auth_oauth/static/lib/zocial/css/zocial-regular-webfont.svg 2013-10-27 12:31:04 +0000 |
393 | +++ auth_oauth/static/lib/zocial/css/zocial-regular-webfont.svg 1970-01-01 00:00:00 +0000 |
394 | @@ -1,129 +0,0 @@ |
395 | -<?xml version="1.0" standalone="no"?> |
396 | -<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" > |
397 | -<svg xmlns="http://www.w3.org/2000/svg"> |
398 | -<metadata></metadata> |
399 | -<defs> |
400 | -<font id="ZocialRegular" horiz-adv-x="2048" > |
401 | -<font-face units-per-em="2048" ascent="1638" descent="-410" /> |
402 | -<missing-glyph horiz-adv-x="512" /> |
403 | -<glyph unicode=" " horiz-adv-x="512" /> |
404 | -<glyph unicode="	" horiz-adv-x="512" /> |
405 | -<glyph unicode=" " horiz-adv-x="512" /> |
406 | -<glyph unicode="£" horiz-adv-x="3291" /> |
407 | -<glyph unicode=" " horiz-adv-x="987" /> |
408 | -<glyph unicode=" " horiz-adv-x="1974" /> |
409 | -<glyph unicode=" " horiz-adv-x="987" /> |
410 | -<glyph unicode=" " horiz-adv-x="1974" /> |
411 | -<glyph unicode=" " horiz-adv-x="658" /> |
412 | -<glyph unicode=" " horiz-adv-x="493" /> |
413 | -<glyph unicode=" " horiz-adv-x="329" /> |
414 | -<glyph unicode=" " horiz-adv-x="329" /> |
415 | -<glyph unicode=" " horiz-adv-x="246" /> |
416 | -<glyph unicode=" " horiz-adv-x="394" /> |
417 | -<glyph unicode=" " horiz-adv-x="109" /> |
418 | -<glyph unicode=" " horiz-adv-x="394" /> |
419 | -<glyph unicode=" " horiz-adv-x="493" /> |
420 | -<glyph unicode="" horiz-adv-x="1024" d="M0 0z" /> |
421 | -<glyph unicode="" horiz-adv-x="2650" d="M0 823q0 125 37 236t102 196.5t154.5 156t192 119.5t216.5 83t227.5 49.5t225.5 15.5q59 0 88 -2q232 -12 463 -84q140 -45 272.5 -113.5t255.5 -165t214.5 -209t146.5 -255t55 -293.5q0 -27 -2 -39q-9 -128 -56.5 -243.5t-122 -205.5t-174.5 -164.5t-210.5 -126.5 t-233.5 -85q-222 -62 -469 -62h-16q-172 0 -346.5 25.5t-298.5 83.5q-11 4 -14 12q0 4 6 4q2 0 7 -1t7 -1q101 -24 182 -24q34 0 70 6t73.5 19.5t61 41t23.5 64.5q0 23 -13 49q-18 33 -119.5 68.5t-233.5 68.5t-155 41q-163 54 -284 135q1 1 7 18.5t11.5 30.5t14.5 25t18 12 h367q15 0 28.5 -28t24.5 -61t36 -61t60 -28q36 0 63 24t27 60q0 22 -172.5 407t-216.5 474q-13 30 -33 30q-15 0 -26 -18l-6 -12q-16 -31 -107 -234l-219 -487l-14 -31q-90 103 -142.5 226.5t-52.5 252.5zM446 483q0 10 111 265l10 6q13 0 67 -131t54 -142q0 -8 -10 -8h-221 q-11 0 -11 10zM1075 231q0 -92 96 -92q97 0 97 92v795q0 92 -97 92q-96 0 -96 -92v-795zM1454 231q0 -92 96 -92q97 0 97 92v371l188 -379q11 -25 34 -42t50 -17q31 0 56.5 16.5t37.5 42.5l187 379v-371q0 -92 96 -92q98 0 98 92v795q0 92 -96 92q-71 0 -96 -59l-283 -619 l-272 619q-27 59 -99 59q-94 0 -94 -92v-795z" /> |
422 | -<glyph unicode="" horiz-adv-x="2066" d="M0 -348v1026h1026v-1026h-1026zM1042 674v1026h1024v-1026h-1024z" /> |
423 | -<glyph unicode="" horiz-adv-x="1994" d="M0 -147l397 1824h897q81 0 159 -23.5t148.5 -72t117 -122.5t64 -174t-10.5 -228q-59 -278 -263 -438t-479 -160h-375l-129 -606h-526zM205 -371h526l129 604h377q179 0 332 70t261 206.5t148 321.5q57 277 -88 449q68 -153 25 -348q-59 -278 -262.5 -438t-478.5 -160 h-375l-129 -604h-443zM731 807h170l86 375h256q5 0 35 -6q-18 60 -65 95.5t-113 35.5h-256zM987 809q98 3 183 75t108 173q1 4 2 12t2 12h-233z" /> |
424 | -<glyph unicode="" horiz-adv-x="1959" d="M0 -137v1052q0 180 41 320t125.5 242.5t220.5 156.5t318 54h589h533q-11 -11 -108 -109.5t-205 -207t-223 -223.5t-193.5 -190t-85.5 -75q-13 0 -22 10t-9 22v320h-98q-79 0 -135 -5.5t-107 -20.5t-83 -41.5t-56 -68.5t-34.5 -102t-10.5 -141v-537zM137 -377 q11 11 108 109.5t205 207t223 223.5t193.5 190t85.5 75q13 0 22 -10t9 -23v-319h98q79 0 135 5.5t106.5 20.5t82.5 41.5t55.5 68.5t34 101.5t10.5 141.5v536l459 457v-1053q0 -180 -41 -320t-125 -242t-220 -156t-318 -54h-590h-533z" /> |
425 | -<glyph unicode="" horiz-adv-x="1886" d="M0 453v551q0 52 38 90.5t91 38.5q54 0 91.5 -38t37.5 -91v-551q0 -54 -37.5 -91.5t-91.5 -37.5t-91.5 37.5t-37.5 91.5zM354 248v856h1176v-856q0 -54 -38 -91.5t-91 -37.5h-918q-54 0 -91.5 37.5t-37.5 91.5zM354 1200h1176q0 157 -83 282t-216.5 191t-288.5 66 t-288.5 -66t-216.5 -191t-83 -282zM561 1847q0 17 14 17q7 0 15 -4l100 -183l-31 -16q-2 4 -29 52t-48 88t-21 46zM592 195q0 56 38.5 92.5t96.5 36.5q53 0 91 -38t38 -91v-414q0 -57 -39 -93t-96 -36q-54 0 -91.5 37.5t-37.5 91.5v414zM602 1464q0 32 24 56t58 24 q32 0 56 -24t24 -56q0 -34 -24 -58t-58 -24q-32 0 -56 24t-24 58zM1028 195q0 56 39.5 92.5t95.5 36.5q54 0 91.5 -38t37.5 -91v-414q0 -57 -39 -93t-96 -36q-54 0 -91.5 37.5t-37.5 91.5v414zM1120 1464q0 32 24 56t58 24q32 0 56 -24t24 -56q0 -34 -24 -58t-58 -24 q-32 0 -56 24t-24 58zM1194 1677q2 4 28.5 58t49.5 91.5t37 37.5t14 -19v-4l-98 -182zM1626 453v548q0 54 37.5 93t91.5 39t91.5 -39t37.5 -93v-548q0 -54 -38 -91.5t-91 -37.5q-54 0 -92 37.5t-37 91.5z" /> |
426 | -<glyph unicode="" horiz-adv-x="1687" d="M0 659q0 222 59 414q58 190 170 326q115 139 277 209q165 73 364 73q262 0 445 -125q185 -121 278 -321q95 -198 95 -401q0 -189 -97 -246q-95 -56 -270 -56h-866q0 -175 61 -303q59 -133 156 -196q103 -68 217 -68q81 0 145 21q65 20 127 67q65 46 115 97q52 52 135 141 q29 33 96 33q71 0 111 -43q43 -43 43 -119q0 -68 -47 -160q-44 -87 -144 -174q-92 -83 -237 -139t-330 -56q-427 0 -665 277t-238 749zM455 819h802q-15 257 -122 385q-106 127 -279 127q-167 0 -272 -129q-108 -129 -129 -383z" /> |
427 | -<glyph unicode="" horiz-adv-x="1169" d="M0 -150v1610q0 91 64 155t155 64h731q91 0 155 -64t64 -155v-1610q0 -91 -64 -155t-155 -64h-731q-91 0 -155 64t-64 155zM68 70h1030v1245h-1030v-1245zM408 1497q0 -20 13.5 -33.5t33.5 -13.5h260q20 0 33.5 13.5t13.5 33.5q0 19 -13.5 32t-33.5 13h-260 q-20 0 -33.5 -13t-13.5 -32zM496 -147q0 -38 28 -65.5t66 -27.5t65 27.5t27 65.5t-27 65t-65 27t-66 -27t-28 -65z" /> |
428 | -<glyph unicode="" horiz-adv-x="2265" d="M0 324v979q0 94 29 122.5t123 28.5h1962q93 0 121 -28.5t28 -122.5v-979q0 -94 -27.5 -122t-121.5 -28h-832v-76h227v-118h-755v118h227v76h-829q-94 0 -123 28.5t-29 121.5zM76 307h2111v1057h-2111v-1057z" /> |
429 | -<glyph unicode="" d="M0 1192q0 52 33 93.5t84 53.5l403 97q-129 -147 -129 -344q0 -381 518 -580q44 -17 86.5 -37t93 -52t87 -66t61.5 -80t25 -93q0 -59 -36.5 -103t-89 -63.5t-110.5 -19.5q-119 0 -248 46.5t-215 123.5l-162 -367q113 -61 295 -125q-22 -5 -64.5 -17.5t-78.5 -20t-66 -7.5 q-52 0 -93.5 33t-53.5 84l-336 1407q-4 24 -4 37zM858 1098q0 53 37.5 91.5t87.5 54.5t102 16q100 0 225.5 -36t180.5 -96l125 349q-188 100 -381 129q10 2 94 24.5t143 35.5t89 13q53 0 94 -32.5t53 -83.5l336 -1407q4 -24 4 -37q0 -53 -33 -94.5t-84 -53.5l-297 -69 q97 146 97 311q0 118 -42 217t-117 171t-164.5 122.5t-199.5 87.5q-42 14 -81 30t-91 44t-89 57.5t-63 71t-26 84.5z" /> |
430 | -<glyph unicode="" horiz-adv-x="2424" d="M0 -2q0 86 48.5 169t130.5 146.5t199 102.5t245 39h110q-86 82 -86 176q0 58 33 119q-20 -2 -59 -2q-213 0 -348.5 132.5t-135.5 327.5q0 122 78.5 230t205.5 171.5t267 63.5h635l-141 -102h-201q96 -37 150.5 -139.5t54.5 -227.5q0 -96 -49 -181.5t-131 -150.5 q-75 -59 -98 -93.5t-23 -86.5q0 -39 55 -98.5t111 -99.5q124 -88 172.5 -180t48.5 -232q0 -87 -42 -168t-118.5 -146t-197 -104t-265.5 -39q-177 0 -324 44.5t-236 131t-89 197.5zM229 66q0 -140 119.5 -240t298.5 -100q243 0 353 89.5t110 239.5q0 39 -8 66 q-6 22 -14.5 41.5t-25.5 39t-28 32.5t-39.5 34.5t-41.5 30.5t-52 35.5t-53 36.5q-81 24 -158 24q-120 1 -226.5 -43t-170.5 -120.5t-64 -165.5zM365 1210q22 -161 123.5 -277.5t224.5 -119.5q80 -3 141 46.5t88.5 138t13.5 194.5q-22 161 -122.5 274.5t-223.5 116.5 q-123 4 -194 -104.5t-51 -268.5zM1501 1161v103h410v409h102v-409h412v-103h-412v-411h-102v411h-410z" /> |
431 | -<glyph unicode="" horiz-adv-x="2265" d="M0 1378v43l4 4h510l4 -4v-41q0 -16 -20 -16l-54 -2q-67 -3 -67 -41q0 -25 14 -57q104 -250 455 -992l12 -2l227 453q-27 61 -45 100l-155 307q-15 26 -25 46.5t-13 27.5l-3 8q-4 9 -12 25q-44 87 -61 104q-19 16 -64 23q-29 3 -29 14v43l6 4h403l11 -2v-43q0 -16 -21 -16 l-30 -4q-27 -4 -39.5 -10t-11 -24.5t9 -36.5t28.5 -62l150 -307l166 331q34 64 10 88q-13 18 -76 23l-18 2q-9 0 -15 6q-6 3 -6 12v39l6 4q118 2 381 0l4 -4v-41q0 -16 -18 -16q-45 -1 -62 -8.5t-34 -32.5q-48 -73 -62 -98l-215 -402l-6 -14l262 -537l17 -6l413 985 q24 58 -6 84q-15 14 -30.5 20t-49.5 7l-39 2q-6 0 -12 6q-8 4 -8 12v41l6 4h469l4 -4v-41q0 -15 -18 -18q-94 -3 -136 -39q-41 -33 -69 -100q-168 -388 -296 -678.5t-172 -386.5l-44 -97q-21 -48 -46 -62t-49 3t-46 62q-84 169 -250 538q-207 -429 -269 -541 q-28 -49 -54.5 -64t-49 1.5t-41.5 60.5q-65 153 -265.5 583t-266.5 587q-34 85 -58 106t-106 27q-29 3 -29 14z" /> |
432 | -<glyph unicode="" horiz-adv-x="1923" d="M-0.5 1438q-2.5 18 3.5 34t15 29t27 26.5t35 23.5t44 22t48 21t54 22.5t55 23.5q111 46 199 33.5t110 -71.5q51 -136 209.5 -652.5t236.5 -742.5q528 173 668 215q2 0 24 4t28 4.5t24 0t26.5 -5.5t20.5 -15.5t20 -26.5q48 -96 68 -203t0 -151q-39 -30 -122 -65.5 t-154 -59.5t-184.5 -59.5t-149.5 -47.5q-21 -7 -78.5 -27t-108 -37t-118.5 -39t-124.5 -36t-110.5 -23.5t-91.5 -7t-52.5 18.5q-38 38 -66.5 107t-58.5 178t-39 135q-85 254 -230.5 690t-214.5 643q-10 21 -12.5 39z" /> |
433 | -<glyph unicode="" horiz-adv-x="1593" d="M6 -285v1588h189q0 116 11 156q24 90 127 99q13 1 27 1q24 0 44.5 -3t36 -10.5t27.5 -14t21 -21t15 -23.5t10 -29t6 -30.5t3 -35t1 -35v-37.5v-17h113v17q0 114 16 157q33 81 148 82q27 0 49.5 -4.5t38.5 -11t29 -19.5t21 -23.5t13.5 -31t8.5 -33t4.5 -38.5t1.5 -39.5 v-42.5v-13h110v13v42.5t1.5 39.5t4.5 38.5t8.5 33.5t13.5 30.5t21 23.5t29 19.5t38.5 11t49.5 4.5q24 0 44.5 -3t36 -10.5t27.5 -14t21 -21t15 -23.5t10 -29t6 -30.5t3 -35t1 -35v-37.5v-17h188v-1588h-1589zM139 78v-230h285v230h-285zM139 123h285v244h-285v-244zM139 412 h285v266h-285v-266zM139 721h285v229h-285v-229zM285 1137q0 -37 18.5 -52.5t56.5 -15.5t57 15.5t19 52.5v266q0 37 -18.5 52t-57.5 15q-38 0 -56.5 -15t-18.5 -52v-266zM467 78v-230h311v230h-311zM467 123h311v244h-311v-244zM467 412h311v266h-311v-266zM467 721h311v229 h-311v-229zM725 1137q0 -37 19 -52.5t57 -15.5q78 0 78 68v266q0 37 -19.5 52t-58.5 15t-57.5 -15t-18.5 -52v-266zM821 78v-230h312v230h-312zM821 123h312v244h-312v-244zM821 412h312v266h-312v-266zM821 721h312v229h-312v-229zM1165 1137q0 -68 78 -68q38 0 57 15.5 t19 52.5v266q0 37 -18.5 52t-57.5 15t-58.5 -15t-19.5 -52v-266zM1176 78v-230h286v230h-286zM1176 123h286v244h-286v-244zM1176 412h286v266h-286v-266zM1176 721h286v229h-286v-229z" /> |
434 | -<glyph unicode="" horiz-adv-x="2680" d="M0 225v371h459v-367q0 -59 41.5 -100t99.5 -41q60 0 101.5 41t41.5 100v867q0 158 81.5 291t219 209.5t297.5 76.5t297.5 -77t219 -211t81.5 -293v-189l-274 -82l-182 86v164q0 58 -41.5 99.5t-100.5 41.5q-60 0 -101.5 -41t-41.5 -100v-854q0 -161 -80.5 -297.5 t-218 -215.5t-299.5 -79q-122 0 -233.5 47.5t-191.5 127.5t-127.5 191.5t-47.5 233.5zM1483 219v375l182 -86l274 82v-377q0 -60 41.5 -101.5t100.5 -41.5t100 41.5t41 101.5v383h459v-371q0 -122 -47.5 -233.5t-127.5 -191.5t-190.5 -127.5t-232.5 -47.5 q-162 0 -300.5 79.5t-219 216.5t-80.5 298z" /> |
435 | -<glyph unicode="" horiz-adv-x="2576" d="M-10 401h243q11 -82 61.5 -131t131.5 -49q97 0 156 67t59 167q0 98 -57.5 161.5t-153.5 63.5q-41 0 -70 -10.5t-46 -25t-32 -29t-37 -25t-52 -10.5q-109 0 -164 4q18 106 57.5 328t58.5 337h676v-200h-497q-37 -187 -50 -275h7q34 43 102.5 65.5t134.5 22.5 q112 0 197 -55t131 -156q50 122 147.5 192t227.5 70q77 0 140 -18t122.5 -63t93 -77.5t98.5 -104.5q15 -17 23 -25q107 123 157 166q126 110 278 119q16 1 32 1q184 0 296.5 -123.5t112.5 -310.5q0 -124 -48.5 -225t-144 -162t-220.5 -61q-237 0 -463 268 q-22 -21 -69.5 -67.5t-69 -66.5t-64.5 -52.5t-76.5 -46.5t-83 -25.5t-104.5 -11.5q-129 0 -227.5 67.5t-151.5 188.5q-62 -128 -168.5 -195.5t-247.5 -67.5q-125 0 -223.5 39.5t-160.5 127.5t-62 214zM1044 463q0 -87 52 -140t139 -53q152 0 317 195q-93 95 -131 125 q-101 82 -194 82q-81 0 -132 -63t-51 -146zM1841 463q41 -44 69 -70.5t70.5 -59t87.5 -48t93 -15.5q87 0 137.5 56.5t50.5 144.5q0 87 -52 144t-138 57q-41 0 -78 -12t-71 -37t-56.5 -46t-58.5 -59t-54 -55z" /> |
436 | -<glyph unicode="" horiz-adv-x="1585" d="M0 938q0 102 33 204.5t103 198.5t167.5 169.5t237 118t301.5 44.5q163 0 304.5 -56.5t236 -150t148.5 -215.5t54 -252q0 -229 -79 -412.5t-224.5 -288.5t-331.5 -105q-92 0 -173 43t-113 104l-82 -324q-10 -38 -26.5 -78.5t-35.5 -77t-39 -69.5t-40 -61.5t-34 -48 t-26 -35.5l-12 -15q-6 -7 -16.5 -4.5t-12.5 11.5q0 2 -3.5 28.5t-6.5 56.5t-5.5 77t-2 91.5t5.5 97t16 97.5q23 95 152 641q-17 33 -27 79t-11 76l-1 29q0 131 66 218.5t161 87.5q76 0 118 -50.5t42 -126.5q0 -64 -48.5 -223t-56.5 -194q-21 -92 36 -160t151 -68 q108 0 194 86t132 228.5t46 312.5q0 199 -129.5 325t-359.5 126q-130 0 -240.5 -46.5t-184 -124.5t-114.5 -180t-41 -213q0 -136 78 -231q16 -20 19 -31t-2 -35q-3 -10 -12.5 -47t-12.5 -47q-4 -22 -20.5 -30t-36.5 1q-120 49 -181 169.5t-61 279.5z" /> |
437 | -<glyph unicode="" d="M0.5 624q-5.5 136 30.5 273q34 135 101.5 255t159 212.5t205.5 162.5t240 105t262 40.5t273 -30.5q135 -34 255 -101.5t212.5 -159t162.5 -205.5t105 -240t40.5 -262t-30.5 -273q-34 -135 -101.5 -255t-159 -212.5t-205.5 -162.5t-240 -105t-262 -40.5t-273 30.5 q-135 34 -255 101.5t-212.5 159t-162.5 205.5t-105 240t-40.5 262zM498 342l147 -37q14 -3 40.5 -10t39.5 -10l-47 -187l113 -28l45 184q8 -2 40.5 -10t49.5 -13l-45 -184l112 -27l45 187q98 -17 175.5 -16t135.5 42t87 125q65 185 -105 273q124 27 144 164q14 96 -47 157.5 t-179 100.5l47 186l-112 27l-45 -181q-17 5 -49.5 13t-40.5 10l45 180l-113 29l-45 -184q-28 4 -72 16l-155 39l-29 -121l80 -18q57 -15 53 -66l-53 -211q4 0 12 -4q-2 1 -6 2t-6 2l-74 -295q-10 -36 -51 -26l-68 16q-6 2 -14 4zM872 389l62 248q109 -26 122 -30 q190 -60 163 -173q-6 -25 -22.5 -42.5t-35.5 -26t-48 -11t-51.5 -2t-56 6.5t-51.5 10t-47.5 11.5t-34.5 8.5zM963 750l55 225q7 -2 24 -6q45 -10 73 -18.5t71 -28.5t60 -51.5t7 -73.5q-6 -26 -21.5 -43.5t-39 -24t-46 -9t-53.5 2t-49.5 8t-47 11t-33.5 8.5z" /> |
438 | -<glyph unicode="" horiz-adv-x="2312" d="M0 1223h158l219 -744l147 500l-71 244h157l219 -744l220 744h157h436v-74l-223 -385q119 -41 176 -137q62 -103 62 -234q0 -167 -88 -280t-230 -113q-104 0 -184 68q-79 70 -115 182l123 51q26 -68 72 -111q41 -38 104 -38q64 0 107 69q45 68 45 172q0 108 -47 170 q-55 70 -170 70h-62v74l211 364h-254l-14 -24l-311 -1047h-15l-225 758l-227 -758h-15zM1675 369l37 -103q31 -69 68 -119q88 -120 192 -137q93 -17 180 37q42 26 72 64q41 41 57 73q9 14 23 41l-23 121q-17 -32 -33.5 -57t-23.5 -34l-8 -9q-71 -76 -125 -101 q-40 -18 -69.5 -22.5t-69.5 0.5q-56 4 -123 49q-1 1 -16.5 14t-25.5 22t-24 24t-22 28q-27 37 -66 109zM1731 768q0 173 67 299q32 62 76 99t88 40q71 7 143 -53q37 -30 76 -102l90 178l25 -156l-90 -174q-16 33 -39 61.5t-38 41.5l-15 12q-36 25 -66 31.5t-66 -1.5 q-48 -9 -96 -60.5t-71 -121.5q-39 -113 -39 -217q-2 -82 10 -129q-24 45 -38 108t-16 104z" /> |
439 | -<glyph unicode="" horiz-adv-x="2394" d="M0 772q0 106 42.5 202t114 166t170.5 111t208 41q175 0 312.5 -98t192.5 -254l136 131l323 -311l895 913v-829l-547 -422l70 -74l-743 -723l-648 629q-143 2 -264 72t-191.5 188.5t-70.5 257.5zM76 772q0 -184 132.5 -313t321.5 -129q70 0 134 18l450 -399l1198 942 l2 618l-1184 -1220l-184 299q41 87 41 184q0 183 -134 312.5t-323 129.5t-321.5 -129.5t-132.5 -312.5zM174 768q0 144 101.5 245t244.5 101q145 0 245.5 -100.5t100.5 -245.5q0 -143 -101 -244.5t-245 -101.5q-142 0 -244 102t-102 244z" /> |
440 | -<glyph unicode="" horiz-adv-x="1454" d="M33 1268h1431l-135 -1454l-581 -166l-582 166zM166 1391v272h92v-90h82v90h90v-272h-90v90h-82v-90h-92zM299 971l49 -545l2 4h615l-21 -231l-196 -56l-199 58l-12 139h-181l25 -279l367 -104l366 104l51 547h-653l-16 183h686l16 180h-899zM471 1571v92h250v-92h-80 v-180h-90v180h-80zM760 1391v272h96l55 -94l58 94h96v-272h-88v139l-66 -103v3l-61 96v-135h-90zM1112 1391v272h90v-180h127v-92h-217z" /> |
441 | -<glyph unicode="" horiz-adv-x="1931" d="M-0.5 -39.5q2.5 52.5 14.5 94.5q48 171 87 270q201 511 613 844q63 51 130 97v28q-122 -51 -243.5 -134.5t-208 -166t-156 -158t-104.5 -122.5l-34 -47q-2 89 17 174t51.5 151t72.5 124.5t80.5 99.5t74 71.5t54.5 45.5l21 14q7 4 20.5 11.5t57.5 28t89 37t112.5 34 t132.5 25t143 4t150 -23.5q83 60 168 104.5t147 64.5t112.5 31.5t76.5 13.5l26 1q59 6 103 -6t68.5 -37.5t38.5 -59.5t16 -73t-1 -78.5t-11 -75.5t-16 -64t-14 -45l-6 -17l-10 10q44 116 42.5 191t-36 115.5t-75 59.5t-73.5 22l-34 3q-9 0 -24.5 -1t-65 -10.5t-100.5 -25.5 t-124 -51.5t-141 -83.5q111 -18 203.5 -61t155 -99.5t112.5 -125t78 -139.5t48 -140.5t27 -130.5t10 -108t2 -74l-1 -27h-1141q-4 -63 9.5 -114t38 -82.5t55 -54.5t61.5 -33.5t56.5 -17t42.5 -7.5h16q9 0 23.5 1t53.5 11.5t71 28.5t64 58t44 95h598q-26 -95 -71 -176.5 t-99 -138.5t-117 -103t-126.5 -74.5t-125 -49.5t-115 -30.5t-94 -15t-63.5 -6.5h-23q-160 0 -219 12q-77 -61 -161 -105.5t-150 -65t-120.5 -32t-83.5 -13.5l-30 -1q-76 0 -132.5 31.5t-85 80t-42 107t-11 111zM154.5 -55q-0.5 -48 5.5 -87t15 -58l9 -19q4 -4 11.5 -9.5 t34.5 -18.5t58.5 -21t84 -9.5t109.5 9.5t135.5 42.5t162.5 82.5q-16 4 -43.5 11.5t-103.5 36.5t-141 64.5t-136.5 97t-109.5 132.5q-45 -69 -68 -137.5t-23.5 -116.5zM733 813h543q3 74 -23.5 129t-65.5 80t-79 39.5t-68 16.5l-28 1q-6 0 -16 -0.5t-39.5 -6t-56.5 -14.5 t-59.5 -29t-55.5 -47t-38 -71t-14 -98z" /> |
442 | -<glyph unicode="" horiz-adv-x="1843" d="M86 1190q3 33 31 65l245 246q12 10 25 8t19 -16l198 -373q16 -33 -10 -63l-90 -90q-25 -25 -29 -64q0 -38 26 -92t63 -104t74 -94t63 -71l26 -26q10 -10 27.5 -27t68 -60.5t96.5 -76.5t100.5 -60t92.5 -26q39 0 66 27l106 106q11 11 29.5 14t32.5 -5l358 -211 q14 -8 16 -21t-8 -24l-246 -246q-32 -28 -65 -31q-73 -10 -160 9.5t-167.5 59t-161 89.5t-146 102.5t-117 96t-79.5 70.5l-29 28q-11 11 -29 29.5t-69 78t-97 119t-100.5 144.5t-91.5 162.5t-57.5 165.5t-10.5 161z" /> |
443 | -<glyph unicode="" d="M0 651q0 208 81 397.5t218.5 327t327 218.5t397.5 81t397.5 -81t327 -218.5t218.5 -327t81 -397.5t-81 -397.5t-218.5 -327t-327 -218.5t-397.5 -81t-397.5 81t-327 218.5t-218.5 327t-81 397.5zM264 651q0 -29 2 -48.5t8.5 -43.5t22.5 -40.5t41 -24.5q14 -5 35 -9 q85 -3 174 82q82 73 119 185q50 155 20 409q-4 24 -4 35q-6 12 0 18q3 6 27 -2q80 -20 159 -59q96 -44 209 -143q94 -82 178 -183q79 -94 164 -213q83 -116 180 -157q47 -22 80.5 -17t56 21.5t36 49t19 66.5t5.5 74q0 98 -24 197q-4 18 -17 57q-29 89 -84 172 q-106 161 -277.5 253.5t-363.5 92.5q-137 0 -256 -45q-164 -57 -288 -182.5t-181 -290.5q-3 -9 -9 -28.5t-9 -28.5q-26 -106 -23 -197z" /> |
444 | -<glyph unicode="" horiz-adv-x="2498" d="M0 1370q-3 10 5 19.5t18 11.5q22 4 62.5 13.5t57.5 12.5q1 34 2 100.5t2 100.5q3 25 27 25q11 0 20 -8t9 -21q-4 -122 -4 -186q23 5 71 15l72 15q38 7 113.5 20.5t113.5 20.5q830 142 1626 148q12 0 19.5 -10t5.5 -21q-1 -23 -4 -68t-4 -67q39 -3 262 -23q11 0 18.5 -9 t6.5 -19q-46 -282 -139.5 -845t-139.5 -845q76 -12 156 -24q16 -3 21.5 -17t-1 -26.5t-20.5 -12.5h-6q-26 4 -79.5 13.5t-80.5 13.5q-3 -28 -10 -64q-3 -18 -21 -22q-2 -2 -8 -2h-8q-615 154 -1229 239q-255 5 -305 5q-56 0 -338 -5q0 -1 1 -3t1 -3q1 -13 -8.5 -21.5 t-22.5 -8.5q-21 0 -24 22q-1 9 -4.5 31.5t-4.5 34.5h-26q-16 1 -21.5 14.5t2 27t23.5 13.5h2h14l-12 111q-15 109 -41.5 320.5t-44 342.5t-51 311.5t-74.5 329.5zM61 1354q43 -158 89 -412q-7 167 -7 428q-30 -4 -82 -16zM199 1167q3 -403 43 -868q6 -78 22 -223 q2 -24 9.5 -68.5t9.5 -54.5q136 -6 392.5 -26.5t373.5 -26.5q27 -1 137.5 -7t149 -8.5t134 -8t148.5 -9.5t133.5 -10.5t149 -13.5t137.5 -15q22 328 66 932t61 842q-953 -9 -1966 -220q-3 -108 0 -215zM387 834q0 -140 87 -228t222 -88q142 0 224 88h4q-27 -144 -133 -227 q-84 -69 -207 -78q-82 -7 -107 -4v-154q72 0 117 4q217 16 350 140q178 168 178 477q0 193 -96 314.5t-270 121.5q-159 0 -264 -108t-105 -258zM580 846q0 92 46 150.5t119 58.5h3q89 0 133.5 -73t42.5 -185q0 -32 -11 -54q-54 -86 -165 -86q-77 0 -122.5 53.5t-45.5 135.5z M762 -131l196 -21l764 -81q292 -63 428 -99q1 6 3.5 18.5t3.5 18.5q-177 28 -338 51q-508 71 -1057 113zM1155 834q0 -140 88 -228t221 -88q141 0 226 88h2q-27 -143 -131 -227q-87 -69 -209 -78q-82 -7 -107 -4v-154q72 0 117 4q217 16 350 140q178 163 178 477 q0 193 -95.5 314.5t-268.5 121.5q-161 0 -266 -108t-105 -258zM1348 846q0 92 46.5 150.5t118.5 58.5h3q89 0 133.5 -73t42.5 -185q0 -32 -11 -54q-54 -86 -165 -86q-77 0 -122.5 53.5t-45.5 135.5zM2079 -227q12 -2 41.5 -6.5t46.5 -6.5q40 245 132 802t140 855 q-22 2 -104 9.5t-127 9.5q-12 -173 -55 -750.5t-64 -892.5q0 -10 -8 -18q-2 0 -2 -2z" /> |
445 | -<glyph unicode="" horiz-adv-x="1708" d="M0 -369l854 2048l854 -2048h-756v277l348 174l-26 113l-322 -162v137l201 106l-29 117l-172 -92v178h-188v-321l-176 121l-33 -132l209 -143v-373h-764z" /> |
446 | -<glyph unicode="" horiz-adv-x="2299" d="M-2 106v762q0 11 7.5 19t19.5 8h360v264q0 11 7.5 20t19.5 9h200v-1053q0 -11 -7 -20t-17 -9h-590zM221 276h137q12 0 19.5 8.5t7.5 20.5v422h-137q-12 0 -19.5 -9t-7.5 -20v-422zM682 106v762q0 11 7.5 19t19.5 8h200v-760q0 -11 -7 -20t-17 -9h-203zM682 1018v141 q0 12 7.5 20.5t17.5 8.5h202v-141q0 -11 -7 -20t-17 -9h-203zM987 106v762q0 11 7.5 19t19.5 8h590v-1032q0 -11 -8 -19t-19 -8h-590l2 141q0 11 7.5 20t17.5 9h360v100h-387zM1212 276h138q10 0 17 8.5t7 20.5v422h-137q-10 0 -17.5 -9t-7.5 -20v-422zM1681 -23 q0 11 7.5 20t19.5 9h360v100h-387v762q0 11 7.5 19t19.5 8h588v-1032q0 -11 -7.5 -19t-17.5 -8h-590v141zM1905 276h137q12 0 19 8.5t7 20.5v422h-137q-11 0 -18.5 -9t-7.5 -20v-422z" /> |
447 | -<glyph unicode="" d="M0 674q0 151 105.5 256.5t254.5 105.5q129 0 234 -88l733 367q0 4 -1 11t-1 11q0 149 106 255t257 106q149 0 254.5 -106t105.5 -255q0 -151 -105.5 -256.5t-254.5 -105.5q-132 0 -234 86l-733 -367q0 -3 1 -9.5t1 -10.5q0 -3 -1 -10.5t-1 -10.5l733 -366q102 86 234 86 q149 0 254.5 -106t105.5 -255q0 -151 -105.5 -256.5t-254.5 -105.5q-151 0 -257 105.5t-106 256.5q0 3 1 10t1 11l-733 366q-102 -86 -234 -86q-149 0 -254.5 106t-105.5 255z" /> |
448 | -<glyph unicode="" d="M0 653q0 208 81 397.5t218.5 327t327 218.5t397.5 81t397.5 -81t327 -218.5t218.5 -327t81 -397.5q0 -207 -78.5 -394t-218.5 -327q-122 149 -297.5 233.5t-374.5 84.5q-220 0 -408 -101.5t-309 -275.5q-169 144 -265.5 347t-96.5 433zM336 948q0 -36 25 -61t61 -25 q12 0 18 2q294 119 611 119q316 0 610 -119q3 0 9 -1t9 -1q35 0 60.5 25.5t25.5 60.5q0 53 -47 76q-326 129 -667 129q-348 0 -674 -131q-41 -26 -41 -74zM430 643l12 -33q16 -26 47 -26q7 0 19 4q258 112 543 112q287 0 546 -114q8 -4 15 -4q31 0 47 26l10 35q0 26 -20 43 q-282 127 -598 127q-315 0 -600 -127q-21 -21 -21 -43zM528 348q11 -28 33 -34.5t31 1.5q221 105 459 105q228 0 448 -98q51 -26 72 24q10 26 0 47t-29 31q-215 108 -491 108q-264 0 -500 -112q-13 -7 -22.5 -25.5t-0.5 -46.5zM653 -301q75 99 186.5 156t239.5 57 q114 0 217 -47t179 -129q-212 -107 -451 -107q-192 0 -371 70z" /> |
449 | -<glyph unicode="" horiz-adv-x="2467" d="M-10 662q0 87 49.5 161t128 115t164.5 41q128 0 219 -74h2q281 168 686 168l4 4l148 553l501 -76q2 1 4 4l2 3q12 18 13 20q25 35 31 41q71 68 176 68t176 -69.5t71 -174.5t-71 -179.5t-176 -74.5q-119 0 -183 79t-67 197q-13 2 -42 6t-75.5 11.5t-75.5 11.5 q-212 30 -221 31q-11 -32 -59 -211q-51 -174 -66 -242l2 -2q149 -2 305 -43t269 -119q52 38 73.5 52t63 27.5t90.5 13.5q145 0 245.5 -101.5t100.5 -247.5q0 -97 -54 -179.5t-143 -125.5q-1 -93 -32.5 -177.5t-82 -149t-122 -122.5t-144 -98.5t-157.5 -76.5q-6 -2 -49 -21.5 t-66 -26.5q-68 -20 -189.5 -38.5t-191.5 -18.5q-247 0 -477 74q-26 18 -80.5 44t-68.5 34q-71 38 -129.5 76.5t-116.5 91t-97.5 108.5t-65 128t-26.5 151h-2q-72 38 -127 106l-18 25q-31 57 -40 95.5t-9 107.5zM80 637q0 -121 98 -209q17 116 100.5 226.5t194.5 197.5 q-64 43 -149 43q-97 0 -170.5 -80t-73.5 -178zM289 338q0 -87 41 -169.5t108 -146.5t152 -117t172 -86.5t170 -49.5q158 -29 297 -29q244 0 461.5 76t369.5 235h-2q69 91 97 153t28 146q0 86 -35.5 167.5t-94 144.5t-135 116.5t-157 89.5t-162.5 58q-169 47 -366 47 q-119 0 -244 -22t-251.5 -72t-225.5 -121.5t-161 -180.5t-62 -239zM649 487q0 80 49.5 129.5t128.5 49.5t134 -49.5t55 -129.5q0 -77 -56.5 -129.5t-132.5 -52.5q-77 0 -127.5 52.5t-50.5 129.5zM719 162h108q53 -93 162 -141t225 -48q118 0 222.5 48t171.5 141h104 q-30 -72 -86.5 -129t-125.5 -90.5t-142 -50.5t-144 -17q-69 0 -142 17.5t-143 51t-126.5 90.5t-83.5 128zM1411 487q0 82 50.5 130.5t131.5 48.5q75 0 127 -52t52 -127q0 -74 -52.5 -128t-126.5 -54q-79 0 -130.5 51.5t-51.5 130.5zM1954 1446q0 -68 47.5 -116t116.5 -48 q70 0 113.5 46.5t43.5 117.5q0 66 -45.5 112t-111.5 46q-65 0 -114.5 -47t-49.5 -111zM1991 870q107 -74 185.5 -183t111.5 -234q104 85 104 180q0 115 -70 197.5t-182 82.5q-81 0 -149 -43z" /> |
450 | -<glyph unicode="" horiz-adv-x="1570" d="M4 55q0 40 25 131q48 178 177.5 323.5t301.5 211.5q-76 61 -119 147.5t-43 182.5q0 116 59 213.5t158.5 153t214.5 55.5t214.5 -55.5t158.5 -153t59 -213.5q0 -96 -41.5 -181.5t-115.5 -146.5q217 -78 362.5 -260.5t145.5 -405.5q0 -85 -36 -144t-114 -73q-6 -19 -27 -53 q-8 -24 -30.5 -44.5t-57 -35t-69 -25t-81 -19t-77 -13t-73.5 -10t-56 -7.5q-4 0 -14.5 -2t-14.5 -2h-245q-103 0 -263.5 34.5t-183.5 90.5q-36 36 -51 86q-48 10 -86 43q-42 17 -60 66.5t-18 105.5z" /> |
451 | -<glyph unicode="" horiz-adv-x="1581" d="M8 631v211q0 90 52.5 204t132 215.5t171 187.5t171.5 130q160 90 383 90q71 0 143.5 -12.5t145.5 -41.5t129 -71t91 -107.5t35 -144.5q0 -26 -4 -50t-14.5 -49t-18.5 -43t-28 -43.5t-29 -38t-35 -39t-34.5 -34.5t-38.5 -36t-35 -33h108h236q4 -148 4 -221q0 -108 -5 -218 t-25.5 -250t-55.5 -200q-71 -124 -193.5 -221t-261.5 -144q-81 -30 -114 -30h-173q-7 0 -98 34q-124 55 -185 140.5t-61 216.5q0 7 1 21.5t1 21.5q-275 142 -368 440q-27 91 -27 115zM307 897q0 -82 19.5 -166t58 -162t107.5 -127t157 -49q25 0 81 31t101 31q29 0 105 -22 t76 -40q0 -26 -13.5 -34.5t-40.5 -8.5q-51 0 -88.5 -4.5t-82.5 -18.5t-70 -47.5t-25 -84.5q0 -81 43.5 -137t108.5 -79.5t145 -23.5q96 0 188.5 34t149.5 101q53 62 69.5 144t16.5 192q0 38 -2 113t-2 112q0 98 10 164h-395q-2 -16 -2 -47q0 -24 2 -71t2 -70q0 -73 -16 -115 q-10 -2 -35 -2q-60 0 -109 25.5t-80 66t-52 94t-29.5 107.5t-8.5 108q0 52 8.5 108t29 115.5t50 106.5t77.5 77t106 30q19 0 43 -7q-9 -52 -9 -69q0 -71 39.5 -118.5t108.5 -47.5q70 0 117 47.5t47 118.5q0 64 -36.5 114t-93.5 78t-118.5 42t-120.5 14q-181 0 -326 -78 t-228 -221t-83 -324z" /> |
452 | -<glyph unicode="" horiz-adv-x="1761" d="M2 739.5q-15 -169.5 38 -368t171 -377.5q38 -58 71.5 -100.5t78.5 -87t96.5 -68.5t105.5 -25q45 -1 87 12.5t72.5 30t82.5 30t113 13.5q61 1 112.5 -12.5t81 -30t71 -30t85.5 -13.5q54 1 106 27t99.5 75t80.5 91.5t74 103.5q64 98 133 248q-85 32 -149.5 93.5t-99 135 t-42 158t14 163t77 149t138.5 116.5q-77 99 -181.5 154t-211.5 55q-78 0 -149 -22t-131 -44t-112 -22q-54 0 -119 22t-136 44t-138 22q-118 0 -234.5 -69t-195.5 -189q-75 -115 -90 -284.5zM852 1268q-16 85 14 170t88 155q56 68 143 115t169 53q13 -89 -15.5 -175 t-83.5 -156q-56 -72 -142 -117.5t-173 -44.5z" /> |
453 | -<glyph unicode="" horiz-adv-x="2039" d="M0 276v756q0 175 87 324t236 236t324 87h453q134 -16 284 -116.5t213 -235.5q3 -6 10.5 -20t10 -19.5t8 -19t8 -25.5t7 -32t8.5 -45.5t8 -59.5q5 -44 7.5 -59t8.5 -43.5t15 -44t22 -27.5q22 -20 83.5 -24.5t121 -6.5t74.5 -14l28 -23l17 -35l6 -28l-4 -525 q-1 -174 -87.5 -322.5t-235 -235.5t-322.5 -87h-744q-175 0 -324 87t-236 235.5t-87 322.5zM530 287q0 -51 36.5 -87t88.5 -36h729q51 0 87 36t36 87t-36 87t-87 36h-729q-52 0 -88.5 -36t-36.5 -87zM530 1028q0 -51 36.5 -88t88.5 -37h359q51 0 87 37t36 88t-36 87t-87 36 h-359q-52 0 -88.5 -36t-36.5 -87z" /> |
454 | -<glyph unicode="" d="M0 655q0 201 78 392q74 182 225 333q296 299 719 299q429 0 731 -299q147 -147 219 -331q76 -183 76 -394q0 -210 -74 -393q-72 -181 -219 -325q-153 -150 -340 -228q-194 -78 -393 -78q-198 0 -389 78q-183 76 -332 225t-225 332t-76 389zM184 655q0 -160 66 -317 q65 -154 186 -272q123 -123 273 -183q147 -63 317 -63q168 0 320 63q150 63 278 185q240 234 240 587q0 173 -64 322q-62 155 -180 270q-245 248 -594 248q-350 0 -590 -246q-120 -120 -186 -274q-66 -157 -66 -320zM440 655q0 146 86 232q83 86 215 86q190 0 273 -148 l-137 -71q-22 48 -56 63q-32 19 -59 19q-137 0 -137 -181q0 -82 34 -131q37 -49 103 -49q89 0 127 86l127 -63q-44 -74 -113 -117q-70 -43 -158 -43q-137 0 -221 84t-84 233zM1032 655q0 146 86 232t215 86q191 0 271 -148l-136 -71q-21 47 -53 63q-36 19 -61 19 q-137 0 -137 -181q0 -86 34 -131q34 -49 103 -49q87 0 125 86l129 -63q-45 -75 -115 -117q-70 -43 -154 -43q-142 0 -223 84q-84 84 -84 233z" /> |
455 | -<glyph unicode="" d="M0 655q0 208 81 397.5t218.5 327t327 218.5t397.5 81t397.5 -81t327 -218.5t218.5 -327t81 -397.5t-81 -397.5t-218.5 -327t-327 -218.5t-397.5 -81t-397.5 81t-327 218.5t-218.5 327t-81 397.5zM170 655q0 -154 56 -299.5t159 -263.5q99 192 311.5 366.5t415.5 219.5 q-24 57 -59 129q-353 -113 -762 -113q-80 0 -119 2q0 -7 -1 -20.5t-1 -20.5zM197 866q45 -4 133 -4q341 0 649 92q-155 276 -342 461q-163 -83 -278.5 -227.5t-161.5 -321.5zM502 -18q111 -87 246.5 -134t275.5 -47q151 0 301 58q-41 353 -160 678q-188 -40 -379.5 -206 t-283.5 -349zM815 1481q182 -188 334 -465q280 118 420 297q-115 95 -255.5 145.5t-289.5 50.5q-103 0 -209 -28zM1223 870q17 -36 69 -165q153 14 330 14q126 0 252 -6q-7 135 -59.5 263t-141.5 232q-132 -198 -450 -338zM1343 561q104 -302 142 -622q162 105 263.5 268 t123.5 354q-150 10 -273 10q-113 0 -256 -10z" /> |
456 | -<glyph unicode="" horiz-adv-x="1714" d="M0 1047q0 80 31 118q20 30 53 43q40 19 96 19h193q31 0 53.5 22.5t22.5 53.5q-1 43 -3 90v120q0 50 25 91q30 44 102 63q27 8 83.5 11.5t133.5 -4t132 -29.5q34 -14 60 -49.5t32 -77.5q169 5 280 -9q196 -23 265 -49q38 -12 67.5 -46t40.5 -91q21 -111 37.5 -429 t3.5 -448q-33 -350 -88 -520q-28 -87 -57 -141.5t-56 -86.5t-74.5 -46t-87.5 -17.5t-120 -3.5q-114 0 -181 10t-113.5 40.5t-63.5 82.5t-17 138q0 74 14 123.5t40.5 76t65.5 39t89.5 13.5t111.5 0q8 0 11 -3t1 -10.5t-5 -16t-6 -22t-3 -26.5t2 -26l3 -19.5t1.5 -12.5t-3 -8 t-11.5 -2h-19h-21.5t-20 -0.5t-20.5 -2.5t-17.5 -5.5t-16 -8.5t-11.5 -12.5t-8.5 -18t-2.5 -23.5q0 -20 3.5 -35t8 -25.5t16.5 -17t21 -10t31 -5t36 -2t45 -0.5h11q116 0 149 27.5t33 130.5q0 66 -8 114.5t-20.5 77t-33 46.5t-41 25t-50.5 11q-176 18 -244 41 q-111 41 -109 236v8q0 5 -5 5t-5 -5q0 -138 -37 -246l-16 -49q-9 -19 -21.5 -30.5t-23.5 -17t-32.5 -5.5t-34 1.5t-42.5 7t-45 7.5q-86 10 -213.5 39.5t-191.5 57.5q-30 13 -45 30t-31 52q-35 73 -73.5 264.5t-47.5 271.5q-8 68 -8 105zM12 1290v4l375 369q0 2 2 2l-6 -12 q-23 -44 -23 -99q0 -45 2 -211q0 -8 -5.5 -14t-14.5 -6h-190q-67 0 -121 -23q-11 -6 -19 -10zM1176 696q44 6 94 6q92 -3 166 -36q0 173 -125 178q-35 1 -61 -11.5t-40.5 -36t-22.5 -47.5t-11 -53z" /> |
457 | -<glyph unicode="" horiz-adv-x="2156" d="M0 635q0 212 150 362t362 150t362 -150t150 -362t-150 -362t-362 -150t-362 150t-150 362zM1130 635q0 212 150 362t362 150t362 -150t150 -362t-150 -362t-362 -150t-362 150t-150 362z" /> |
458 | -<glyph unicode="" horiz-adv-x="1323" d="M0 -2q0 86 48.5 169t130.5 146.5t199 102.5t245 39h110q-86 82 -86 176q0 58 33 119q-20 -2 -59 -2q-213 0 -348.5 132.5t-135.5 327.5q0 122 78.5 230t205.5 171.5t267 63.5h635l-141 -102h-201q96 -37 150.5 -139.5t54.5 -227.5q0 -96 -49 -181.5t-131 -150.5 q-75 -59 -98 -93.5t-23 -86.5q0 -39 55 -98.5t111 -99.5q124 -88 172.5 -180t48.5 -232q0 -87 -42 -168t-118.5 -146t-197 -104t-265.5 -39q-177 0 -324 44.5t-236 131t-89 197.5zM229 66q0 -140 119.5 -240t298.5 -100q243 0 353 89.5t110 239.5q0 39 -8 66 q-6 22 -14.5 41.5t-25.5 39t-28 32.5t-39.5 34.5t-41.5 30.5t-52 35.5t-53 36.5q-81 24 -158 24q-120 1 -226.5 -43t-170.5 -120.5t-64 -165.5zM365 1210q22 -161 123.5 -277.5t224.5 -119.5q80 -3 141 46.5t88.5 138t13.5 194.5q-22 161 -122.5 274.5t-223.5 116.5 q-123 4 -194 -104.5t-51 -268.5z" /> |
459 | -<glyph unicode="" horiz-adv-x="1798" d="M0 397q0 -299 207 -526q205 -225 532 -225q325 0 531 225q207 223 207 526q0 160 -56 299q-81 -50 -174 -69q45 -105 45 -234q0 -157 -73 -291q-76 -133 -203 -206q-127 -74 -277 -74q-151 0 -278 74q-130 76 -201 206q-76 134 -76 291q0 241 164 414q164 170 391 170 q106 0 201 -39q8 83 55 176q-116 43 -256 43q-327 0 -544 -242q-195 -219 -195 -518zM573 -121q24 -4 52.5 -6t45.5 -2h17q151 95 254.5 222.5t148.5 254.5t64 259t8 245t-26.5 202t-32.5 140l-17 51q-44 140 -88 244t-66 138l-22 34q59 -31 100.5 -69.5t60.5 -75.5t28 -75 t6.5 -69.5t-7 -56.5t-10.5 -39l-6 -14q14 -192 6 -352t-34.5 -289t-64.5 -231.5t-83.5 -180t-92 -134.5t-90 -94.5t-77 -60t-53.5 -32.5zM1139.5 1115q-9.5 58 2.5 101t29 78t33 54l17 18q25 28 80.5 54t98.5 38l42 12q46 10 89 36.5t71 57.5t50 61t32 49l10 20 q52 -72 78 -159.5t26.5 -161t-6 -137t-16.5 -100.5l-11 -36q-16 -43 -40 -81t-46.5 -62.5t-42.5 -43t-32 -26.5l-13 -8q-49 -29 -102 -37.5t-122.5 15.5t-135.5 89q86 47 157 96t115 89.5t77.5 79t49.5 67t25.5 50t11.5 32.5l2 12q-36 -81 -99 -149.5t-127.5 -107.5 t-123.5 -66.5t-96 -37.5l-37 -10q-37 56 -46.5 114z" /> |
460 | -<glyph unicode="" horiz-adv-x="997" d="M-4 -303q208 12 266 55q62 44 62 219v1364q0 167 -62 217q-58 49 -266 58v57h1001v-57q-207 -9 -268 -58t-61 -217v-1364q0 -176 61 -219t268 -55v-57h-1001v57z" /> |
461 | -<glyph unicode="" horiz-adv-x="2527" d="M0 297q0 162 98 345.5t279 365.5q118 117 244.5 203.5t237.5 129.5t203.5 42t143.5 -52q91 -91 29 -295q-9 -29 6 -36t34 0l19 8q197 81 348 81.5t218 -85.5q63 -90 -2 -252q-12 -32 -2 -43.5t42 -20.5q58 -18 110 -47t98 -71t73 -101t27 -127q0 -79 -37.5 -163 t-106 -163.5t-171.5 -150.5t-227 -124.5t-280 -84.5t-323 -31q-158 0 -311.5 29.5t-288.5 87.5t-238 137.5t-163 187.5t-60 230zM256 199q13 -136 125.5 -240.5t293.5 -154t388 -29.5q154 15 290.5 68.5t231.5 130.5t146 175t41 199q-14 135 -127 239.5t-293.5 153.5 t-386.5 29q-207 -20 -375 -103.5t-258 -208t-76 -259.5zM559.5 200.5q1.5 69.5 34.5 135.5q42 87 126 147.5t182.5 79.5t201.5 -4q102 -26 169.5 -95t82 -156.5t-24.5 -184.5q-42 -96 -131.5 -161.5t-194.5 -82t-214 14.5q-74 23 -127.5 70.5t-79.5 107t-24.5 129z M698.5 110q12.5 -49 61.5 -71q50 -23 105.5 -5t86.5 68q30 47 16 96.5t-63 69.5q-50 21 -104.5 3t-83.5 -66q-31 -46 -18.5 -95zM988 271.5q6 -18.5 26 -25.5q19 -8 40 -0.5t31 26.5q11 19 5 38t-25 26q-19 6 -40.5 -1.5t-31.5 -25.5q-11 -19 -5 -37.5zM1645 1544 q-9 38 13 72t60 43q173 36 344 -17.5t293 -189.5q123 -136 159.5 -313.5t-17.5 -339.5v-2q-12 -37 -48.5 -55.5t-74.5 -6.5t-56 48t-6 73v2q39 115 13 242t-113 223q-88 97 -209.5 134.5t-243.5 10.5q-40 -8 -73.5 14t-40.5 62zM1726 1223q-7 34 11.5 63t52.5 37 q85 18 168 -8t143 -92q59 -67 77 -154t-9 -166q-10 -32 -41.5 -48t-63.5 -5q-33 10 -48.5 40.5t-4.5 63.5q27 91 -35 156q-60 69 -151 49q-33 -7 -62 12t-37 52z" /> |
462 | -<glyph unicode="" horiz-adv-x="2224" d="M0 -373v2048h526v-760h469q101 146 289.5 417.5t237.5 342.5h585l-671 -977q0 -25 197 -293t394 -523l197 -255h-702q-98 136 -293 409.5t-293 409.5h-410v-819h-526z" /> |
463 | -<glyph unicode="" horiz-adv-x="2129" d="M-10 1432q0 101 71.5 168t186.5 67t183.5 -66.5t70.5 -168.5t-69 -170t-189 -68h-2q-112 0 -182 68t-70 170zM16 -360v1368h455v-1368h-455zM723 -360h455v763q0 72 16 111q28 71 86.5 118.5t146.5 47.5q118 0 174 -82t56 -227v-731h454v784q0 154 -39 273t-110 193 t-165 112t-208 38q-86 0 -156 -21t-119 -58.5t-78.5 -71t-57.5 -76.5v-4h-2l2 4v195h-455q6 -131 0 -1368z" /> |
464 | -<glyph unicode="" horiz-adv-x="2760" d="M0 565q0 71 4 215q53 17 98 17h37q34 -48 81.5 -144t64.5 -125q4 17 16.5 74.5t20.5 86.5t22 75.5t32 82t40 64.5q75 -12 116 -8q49 -111 93.5 -333.5t79.5 -317.5q-2 0 -8 2t-7 2q-19 0 -52.5 -11.5t-45.5 -13.5q-81 206 -127 416q-24 -43 -27 -110t-4.5 -137 t-21.5 -115l-11 4q-16 0 -45 -4t-43 -4h-37q-60 107 -116 182q-6 -12 -6 -31q0 -18 5 -52t5 -52l-2 -25q-64 -31 -107 -31q-14 0 -20 2q-35 113 -35 291zM727 410q0 39 10 86t29 93.5t53.5 77.5t77.5 31q21 0 57.5 -10t46.5 -12q19 -87 19 -166q0 -58 -12 -113 q-25 9 -78.5 10.5t-75.5 6.5q-10 -42 -10 -76q0 -42 20.5 -75.5t61.5 -33.5q18 0 53 10.5t53 10.5q34 0 47 -29q-87 -33 -168 -33q-95 0 -139.5 62t-44.5 160zM846 467l16 2q5 0 15.5 -4t15.5 -4l14 6q4 28 4 45q0 37 -10 82q-45 -51 -55 -127zM1071 356q0 252 160 373 q67 -6 123 -47q-1 -36 -16.5 -139t-10.5 -160q-40 -4 -59 -4q-16 0 -88 10q-11 -26 -11 -47q0 -45 35.5 -77t79.5 -32q54 0 84 48q36 -12 43 -35q-46 -43 -129 -43q-47 0 -94 16t-82 52t-35 85zM1186 444q7 -12 28 -12h19q18 40 18 100q0 26 -12 80q-6 -17 -20.5 -51.5 t-23 -62.5t-9.5 -54zM1389 483q-3 54 47 54q13 0 36.5 -2.5t34.5 -2.5q6 30 6 64q0 60 -15 177t-15 177q0 89 20 148q18 -10 41 -9.5t45 -9t51 -43.5q-12 -54 -12 -137q0 -41 8 -166t2 -194h13q12 -1 17 7t4.5 18t1 18t7.5 8q16 0 37.5 -17.5t46 -44t31.5 -32.5 q-18 -14 -83.5 -18.5t-78.5 -8.5q-2 -25 -2 -74q0 -32 1 -67.5t2.5 -78.5t2.5 -67q-16 -2 -46.5 -4t-45.5 -4v21q1 49 -6 138t-8 124q-13 3 -66 6t-77 20zM1829 500q0 40 4 118q22 -3 41 -10.5t43.5 -21t36.5 -19.5l-2 -55q0 -121 18 -238q31 11 53 37t33.5 58t17.5 72 t7.5 74t1.5 69v22q6 -2 18 -2q43 -4 101 -51q0 -6 1 -19.5t1 -19.5q0 -31 -8.5 -61t-15.5 -45t-29.5 -51.5t-28.5 -47.5q-34 -27 -70 -86q-44 -14 -78 -14q-145 0 -145 291zM2238 279q12 11 50 20q21 189 48 277q66 217 220 217q69 0 156 -50q34 -72 34 -153 q0 -135 -95.5 -243t-229.5 -140q-4 -66 -4 -98q0 -149 37 -240q-17 4 -76 4q-31 0 -45 4q-18 45 -26 129.5t-21 158.5t-48 114zM2423 330q80 21 134 98t54 162q0 61 -31 115q-36 -33 -63 -77t-45 -100.5t-27 -94.5t-22 -103z" /> |
465 | -<glyph unicode="" horiz-adv-x="2037" d="M0 291q0 59 40 99t99 40q57 0 97 -40.5t40 -98.5q0 -57 -40 -98t-97 -41q-58 0 -98.5 41t-40.5 98zM0 1018q0 57 40.5 98t98.5 41q57 0 97 -41t40 -98t-40 -98t-97 -41q-58 0 -98.5 41t-40.5 98zM399 459q0 58 40.5 98.5t97.5 40.5q59 0 99 -40t40 -99q0 -57 -40.5 -97 t-98.5 -40q-57 0 -97.5 40t-40.5 97zM399 860q0 58 40.5 98.5t97.5 40.5q59 0 99 -40.5t40 -98.5q0 -57 -40.5 -97t-98.5 -40q-57 0 -97.5 40t-40.5 97zM518 -229q0 57 40.5 97t98.5 40q57 0 98.5 -40t41.5 -97q0 -58 -41.5 -99t-98.5 -41q-58 0 -98.5 40.5t-40.5 99.5z M518 1540q0 58 40 98.5t99 40.5q57 0 98.5 -40.5t41.5 -98.5q0 -57 -41.5 -97t-98.5 -40q-58 0 -98.5 40t-40.5 97zM676 182q0 57 40.5 98.5t98.5 41.5q57 0 97 -41.5t40 -98.5q0 -58 -40 -98.5t-97 -40.5q-59 0 -99 40.5t-40 98.5zM676 1139q0 57 40.5 98t98.5 41 q57 0 97 -41t40 -98q0 -58 -40 -99t-97 -41q-58 0 -98.5 40.5t-40.5 99.5zM1073 182q0 57 41 98.5t98 41.5t98.5 -41.5t41.5 -98.5q0 -58 -41.5 -98.5t-98.5 -40.5t-98 40.5t-41 98.5zM1073 1139q0 57 41 98t98 41t98.5 -41t41.5 -98q0 -58 -41.5 -99t-98.5 -41t-98 41 t-41 99zM1233 1540q0 58 40.5 98.5t98.5 40.5q57 0 97 -40.5t40 -98.5q0 -57 -40 -97t-97 -40q-58 0 -98.5 40t-40.5 97zM1249 -229q0 57 41 97t99 40q57 0 97 -40t40 -97q0 -58 -40 -99t-97 -41q-59 0 -99.5 40.5t-40.5 99.5zM1352 459q0 58 40 98.5t97 40.5q59 0 99 -40 t40 -99q0 -57 -40.5 -97t-98.5 -40q-57 0 -97 40t-40 97zM1352 860q0 58 40 98.5t97 40.5q59 0 99 -40.5t40 -98.5q0 -57 -40.5 -97t-98.5 -40q-57 0 -97 40t-40 97zM1761 291q0 58 40 98.5t97 40.5q59 0 99.5 -40.5t40.5 -98.5q0 -57 -41 -98t-99 -41q-57 0 -97 41t-40 98z M1761 1018q0 57 40 98t97 41q58 0 99 -41t41 -98t-41 -98t-99 -41q-57 0 -97 41t-40 98z" /> |
466 | -<glyph unicode="" horiz-adv-x="1744" d="M2.5 588q-7.5 98 4 232.5t50.5 250.5q5 14 14 37.5t44 90.5t76.5 127t112 132t149.5 121.5t190.5 78.5t233.5 19q176 0 323.5 -60t246.5 -158.5t167.5 -228.5t99.5 -267t31 -277q0 -163 -27.5 -305t-76.5 -247.5t-103.5 -181.5t-120.5 -136q-114 -102 -249.5 -140 t-319.5 -43q-57 -2 -122 9t-139.5 36t-148 71t-141 107.5t-125.5 152t-96 198.5q-6 18 -16 51t-30 132.5t-27.5 197.5zM460 386.5q7 -111.5 15 -162t14 -64.5q12 -98 39 -175.5t61 -123.5t72 -79t74 -46.5t65 -20.5t46 -7l18 1q90 2 156.5 32.5t110.5 83.5t74 139t46 183.5 t27 233.5q7 288 1 464t-17 253l-11 76q-14 61 -26.5 105.5t-33.5 97.5t-48.5 89.5t-65.5 68.5t-90 48t-117 16q-49 7 -93 -3.5t-77 -33.5t-62 -54.5t-49.5 -68t-37.5 -73.5t-27 -71t-17 -60.5t-10 -42.5l-3 -16q-13 -94 -20.5 -225t-9.5 -215l-1 -85q-10 -153 -3 -264.5z " /> |
467 | -<glyph unicode="" horiz-adv-x="2148" d="M0 424q19 285 344 354q15 108 43 231.5t80 262t111 198.5q98 101 245.5 155t298.5 54q175 0 335.5 -79.5t240.5 -225.5q39 -74 84.5 -268t62.5 -315q33 -13 70 -13q32 0 46.5 14t14.5 46q0 23 -12 69t-10 72v8q37 2 85 -51t79.5 -117.5t31.5 -101.5q0 -40 -19 -72 t-39.5 -50t-66.5 -35.5t-66.5 -22.5t-73.5 -17q-11 -3 -17 -4q12 -396 -158 -571l51 -51q9 -5 52 -24.5t72 -38t38 -36.5q-133 -104 -270 -104q-68 0 -154 35q-181 -76 -369 -76q-243 0 -479 125q-70 -15 -112 -39q-13 -8 -54.5 -37.5t-75.5 -48.5t-57 -19q-6 37 -6 76 q0 161 109 258q-123 203 -127 527l-15 2q-64 1 -161 -36.5t-132 -37.5q-8 0 -20 4zM475 233q0 -3 6 -27.5t8 -27.5q24 -83 72.5 -161.5t110.5 -120.5q88 -60 216.5 -96t239.5 -36q135 0 298 58t245 147q139 149 139 527q0 206 -46.5 412.5t-141.5 363.5q-37 60 -56 77 q-33 27 -85 27q-102 0 -219 -125q-157 97 -287 97q-77 0 -143 -35t-114 -96.5t-87.5 -140t-65 -171.5t-44 -184t-28 -185t-14 -166.5t-4.5 -136.5zM846 1067q0 44 31.5 76.5t74.5 32.5q44 0 76.5 -32.5t32.5 -76.5t-32 -75t-77 -31q-43 0 -74.5 31t-31.5 75zM961 1104 q0 -9 7 -17t17 -8q9 0 17 8t8 17q0 10 -8 18t-17 8q-10 0 -17 -7.5t-7 -18.5zM1153 981l4 4l-2 -6zM1163 991l107 107l104 -107q-46 -14 -102 -14q-60 0 -109 14zM1167 946q55 -10 103 -10q45 0 100 10l-100 -100zM1382 979v6l2 -4zM1438 1067q0 44 32 76.5t76 32.5 t76.5 -32.5t32.5 -76.5t-32 -75t-77 -31q-44 0 -76 31t-32 75zM1552 1104q0 -9 8 -17t17 -8q10 0 18.5 8t8.5 17q0 10 -8 18t-19 8q-9 0 -17 -8t-8 -18z" /> |
468 | -<glyph unicode="" horiz-adv-x="1779" d="M6 -334v1960q246 43 608 43q286 0 482.5 -49.5t339.5 -157.5q338 -257 338 -757q0 -274 -89 -477.5t-241 -331.5q-303 -258 -924 -258q-292 0 -514 28zM457 -2q39 -8 157 -8q209 -1 360 73t236.5 232.5t85.5 392.5q0 316 -167 475.5t-467 159.5q-135 0 -205 -18v-1307z " /> |
469 | -<glyph unicode="" d="M0 -94q0 112 80 192t192 80q114 0 193.5 -79.5t79.5 -192.5q0 -114 -79.5 -193.5t-193.5 -79.5q-113 0 -192.5 79.5t-79.5 193.5zM0 592v391q183 0 358.5 -48.5t323.5 -136t273 -212.5t212.5 -273t136 -323.5t48.5 -358.5h-394q0 192 -72.5 367.5t-207.5 310.5 q-137 137 -311.5 210t-366.5 73zM0 1286v393q278 0 543 -74t489.5 -206t414 -321.5t321.5 -414t206 -489.5t74 -543h-393q0 225 -59.5 439.5t-166.5 396t-260 334t-334.5 259.5t-396 166.5t-438.5 59.5z" /> |
470 | -<glyph unicode="" horiz-adv-x="2019" d="M0 1120q0 114 44 217.5t119 178.5t178.5 119t217.5 44q159 0 297 -86q80 15 164 15q196 0 374.5 -76.5t308 -205.5t206 -307.5t76.5 -373.5q0 -95 -23 -207q57 -120 57 -248q0 -114 -44 -217.5t-119 -178.5t-178.5 -119t-217.5 -44q-138 0 -264 66q-91 -16 -176 -16 q-195 0 -373.5 76.5t-307.5 205.5t-205.5 307.5t-76.5 374.5q0 93 19 193q-76 133 -76 282zM453 371q0 -85 61 -174q146 -213 504 -213q81 0 158 13.5t151.5 44.5t130 77.5t89.5 118.5t34 161q0 80 -28 143.5t-75 104.5t-108 71.5t-128.5 49.5t-134.5 34.5t-128 30 t-108 32.5t-75 46t-28 66q0 36 24 63.5t61 41.5t73 21t69 7q60 0 105 -13.5t70 -35.5t43.5 -48t32.5 -52t30 -48t42.5 -35.5t63.5 -13.5q56 0 98 39t42 94q0 54 -31 111q-32 59 -86.5 102.5t-121.5 67t-133.5 34.5t-135.5 11q-74 0 -145 -11t-143 -38t-125.5 -68 t-87.5 -106.5t-34 -147.5q0 -78 27.5 -138.5t73.5 -98.5t105.5 -66.5t126 -46t132.5 -33t125.5 -31.5t105.5 -36t73.5 -53t27.5 -78q0 -46 -26.5 -80.5t-68.5 -53t-85 -27.5t-86 -9q-67 0 -116 16.5t-76.5 42.5t-47 57.5t-34 63.5t-31 58t-44 42.5t-67.5 16.5 q-58 0 -99.5 -35t-41.5 -92z" /> |
471 | -<glyph unicode="" horiz-adv-x="2519" d="M0 -178q62 -6 123 -6q360 0 643 221q-168 3 -300.5 102.5t-182.5 255.5q41 -8 96 -8q69 0 137 19q-180 36 -298 177.5t-118 327.5v7q110 -61 236 -64q-106 70 -169 184t-63 246q0 138 72 260q193 -238 470 -380.5t595 -159.5q-14 68 -14 118q0 140 69 259t188.5 188 t260.5 69q110 0 207.5 -43t169.5 -120q178 37 327 127q-28 -90 -86.5 -164.5t-138.5 -122.5q150 17 295 82q-101 -154 -256 -269v-67q0 -147 -31 -296.5t-94.5 -293.5t-153.5 -275t-214 -242t-269.5 -192t-327.5 -126.5t-380 -45.5q-427 0 -793 232z" /> |
472 | -<glyph unicode="" horiz-adv-x="1759" d="M-31 211q0 92 13 332q8 108 78 177t178 75q205 10 616 10t616 -10q108 -6 178 -75t78 -177q11 -204 11 -332q0 -129 -11 -332q-8 -108 -78 -177t-178 -75q-205 -10 -616 -10t-616 10q-108 6 -178 75t-78 177q-13 241 -13 332zM106 500h125v-668h121v668h125v112h-371 v-112zM240 1735h122l78 -312h9l73 312h123l-94 -303q-6 -21 -16.5 -50t-18 -53t-12.5 -51v-324h-121q0 3 1 85.5t1 150t-2 74.5q-4 28 -11.5 52.5t-18.5 53.5t-17 51zM477 -78q0 -98 74 -98q65 0 125 72v-64h106v576h-106v-439q-43 -43 -64 -43q-28 0 -28 39v443h-107v-486z M639 1100v299q0 69 45 107t115 38q67 0 109 -41t42 -108v-297q0 -74 -41 -116t-114 -42q-72 0 -114 44t-42 116zM750 1085q0 -21 12 -34t33 -13q23 0 35 14t12 38v313q0 20 -13.5 31.5t-33.5 11.5q-18 0 -31.5 -11.5t-13.5 -29.5v-320zM887 -168h108v43q42 -51 103 -51 q96 0 96 127v319q0 146 -104 146q-51 0 -95 -56v252h-108v-780zM995 -59v360q23 23 45 23q23 0 34 -17t11 -41v-303q0 -49 -38 -49q-29 0 -52 27zM1042 1044v486h107v-440q0 -39 29 -39q25 0 63 43v436h107v-576h-107v64q-60 -72 -125 -72q-74 0 -74 98zM1276 -6 q0 -79 39 -128.5t117 -49.5q159 0 159 178v43h-110q0 -4 1 -27.5t0 -34t-5 -27.5t-15 -24.5t-28 -7.5t-27.5 7t-14.5 21.5t-5 25t-1 28.5v108h205v148q0 77 -38 122.5t-115 45.5q-73 0 -117.5 -47.5t-44.5 -120.5v-260zM1386 197v61q0 64 48 64q47 0 47 -64v-61h-95z" /> |
473 | -<glyph unicode="" horiz-adv-x="2347" d="M0 1122q112 134 225.5 238t195.5 158t148 88.5t99 43.5l34 9q59 11 107 -4.5t81 -50.5t60.5 -91t44 -116.5t32 -136t25.5 -141t23.5 -140.5t26.5 -125q66 -258 105 -364.5t85 -106.5q49 0 136 114t192 310q33 62 45.5 123.5t4.5 109.5t-35.5 83t-68 50t-98 4.5 t-122.5 -49.5q39 228 219 384q149 130 335 160q184 30 307 -54q147 -101 139 -325q-1 -50 -11 -105q-27 -152 -90 -308.5t-143.5 -289t-179 -260.5t-193.5 -228.5t-190 -188t-165.5 -143t-122.5 -89.5q-63 -41 -129 -47.5t-120 15t-103.5 61t-84 85.5t-58.5 94 q-33 70 -120 354t-168.5 541.5t-109.5 290.5q-3 3 -8.5 7.5t-27 9.5t-49 0.5t-75 -28t-102.5 -67.5z" /> |
474 | -<glyph unicode="" horiz-adv-x="2525" d="M0 -150l215 760q71 41 175 64t172 26l69 2q102 0 213 -20q8 -2 22.5 -5t55 -14.5t76 -25t76 -35t65.5 -45.5l-213 -758q-75 56 -164 92t-141 44l-52 8q-71 6 -133 6q-12 0 -33 -0.5t-80 -6t-111.5 -15t-113 -30t-98.5 -47.5zM258 827l215 760q72 41 176 64t172 25l68 3 q104 0 213 -20q8 -2 22.5 -5t55 -14.5t76 -25t76 -35t65.5 -45.5l-213 -760q-75 56 -164 92t-141 44l-52 8q-71 6 -131 6q-12 0 -33 -0.5t-80.5 -6t-112 -14.5t-113.5 -29t-99 -47zM1141 -223l213 760q76 -56 165 -92t140 -44l51 -8q70 -6 133 -6q12 0 33 0.5t80.5 6 t112 14.5t112.5 28.5t98 46.5l-213 -759q-72 -41 -176 -64t-172 -26l-67 -3q-99 0 -213 21q-8 2 -22.5 5t-55.5 14.5t-76.5 25t-76.5 35t-66 45.5zM1386 750l213 757q76 -56 165 -92t140 -43l52 -8q70 -6 133 -6q12 0 33 0.5t80 6t111.5 14.5t113 28.5t98.5 46.5l-213 -758 q-72 -42 -176.5 -65.5t-173.5 -26.5l-68 -2q-102 0 -211 23q-23 4 -60 13t-117 41.5t-120 70.5z" /> |
475 | -<glyph unicode="" horiz-adv-x="1841" d="M-102 246h448l354 585l-266 469h-448l266 -469zM639 430l709 1245h475l-707 -1245l455 -803h-475z" /> |
476 | -<glyph unicode="" horiz-adv-x="2824" d="M0 1421l12 -39q7 -12 15 -20.5t12 -11.5l4 -2l39 -21h227l588 -704q23 -25 23 -52v-393q0 -16 -6 -24.5t-12 -9.5l-5 -1q-25 0 -151.5 -2.5t-139.5 -3.5q-20 0 -20 -18v-113h1056v117q-1 6 -5.5 9.5t-8.5 3.5l-4 1h-295q-2 0 -5 1t-8 8.5t-5 21.5v414q-2 5 3 13.5 t11 14.5l6 6q24 24 541 510h272q19 1 37 15l35 39q12 14 12 37v28q-2 5 -6 8t-7 3l-3 1h-893l-14 -12q-2 -13 2.5 -26t10.5 -20l5 -7l47 -47l37 -15h235l-423 -399l-467 596h84q27 -2 45 8l139 43l6 3t9.5 10t4.5 18v29q0 6 -4.5 9.5t-9.5 4.5h-4q-1 0 -79 0.5t-186 0.5 t-237.5 0.5t-238 0.5t-183.5 -0.5t-78 -1.5q-16 -2 -20 -14v-17zM2437 1645l379 -15l-170 -1161l-125 6zM2464 82l8 225l225 -8l-8 -225z" /> |
477 | -<glyph unicode="" horiz-adv-x="1781" d="M2 28q-14 46 86 115q13 31 33.5 72.5t33 67t13.5 32.5q1 3 6 28.5t13.5 65t19 87.5t26 106.5t31.5 110.5q26 84 63 153.5t59.5 97t35.5 37.5q11 9 13 13t-7 10q-7 5 -20.5 18t-35.5 45.5t-39 72.5t-26.5 103t-1.5 132q2 17 8 16q10 -1 19 -59v-2q3 -28 15 -64t32.5 -77 t55 -76t75.5 -52q3 -1 17 4.5t50.5 16.5t90 23.5t152 26t218.5 22.5q3 75 15 155q-14 10 -22.5 27.5t-10.5 29.5l-2 13q-10 -18 -18.5 -23.5t-22.5 -3.5q-12 1 -15 55t3 101q3 40 38.5 65t65.5 27q4 2 11 5t26.5 7.5t36.5 3.5q29 30 92 39.5t111 3.5l49 -6q43 5 80.5 1 t69.5 -14t55 -20t36 -18l13 -8q62 3 92 -55q14 -22 24.5 -52.5t15 -68.5t-11.5 -64l-5 -1q-10 5 -23 36q-7 -24 -18.5 -43.5t-18.5 -27.5l-8 -7q1 -32 -2.5 -63t-12.5 -58t-14.5 -42.5t-16.5 -36.5l-10 -21q-7 -16 5 -43q12 -32 46 -176t31 -201q-3 -63 -30 -133.5 t-56 -99.5q8 -70 -43 -168q-13 -23 -35 -91t-30 -108q-20 -104 -2 -127q2 -3 20 -25.5t29.5 -41.5t9.5 -31q-3 -19 -33.5 -38.5t-52.5 -19.5q-25 0 -56 14.5t-40 39.5q-9 27 -10.5 68t4.5 67q5 19 11.5 47.5t16.5 85t16 109.5t5 114t-12 105q-11 -5 -30.5 -12t-85 -18.5 t-134.5 -10.5q-12 -62 -27 -116.5t-24 -78.5l-9 -24q-10 -17 -10 -232q0 -84 29 -211q18 -13 27 -29t8 -26v-10q-4 -26 -32 -42t-61 -16q-34 0 -64 23t-30 57q0 7 3 102t1 144q-1 22 -2 55.5t-2 50.5t-3.5 39.5t-6.5 40.5q-53 202 -55 293q-15 0 -27 10q-28 -33 -55 -61.5 t-40 -40.5l-13 -12q2 -11 8 -32.5t10 -38t4 -21.5q0 -16 29 -29q24 -10 51.5 -31t26.5 -41q-2 -25 -48.5 -28.5t-93.5 18.5q-12 5 -80 217q-6 27 -7 32t5 28q34 98 31 131q-2 30 -46.5 66t-80.5 36q-11 0 -24.5 -5.5t-29.5 -17t-28 -21.5t-30.5 -25.5t-26.5 -22.5 q-31 -23 -77.5 -66t-49.5 -45q-11 -6 -76 -125t-84 -166q-1 -2 -4.5 -16t-7.5 -25t-10.5 -27.5t-16 -29t-22 -24.5t-30 -18t-38.5 -5q-35 2 -43 28z" /> |
478 | -<glyph unicode="" horiz-adv-x="2045" d="M0 608q0 153 47 318.5t127 296.5q85 143 231.5 248t314 156.5t337.5 51.5q134 0 269 -46t249.5 -125.5t209.5 -184t157 -223.5q51 -87 76.5 -205.5t25.5 -232.5q0 -230 -85 -425.5t-232 -328t-347.5 -206t-427.5 -71.5q38 68 124.5 223t152.5 270.5t131 219.5l2 4 q7 11 24.5 38t25.5 40t19.5 35t18.5 42.5t12 43.5q13 54 13 98q0 162 -99 291l563 166q-583 0 -876 -2q-14 2 -45 2q-133 0 -243 -69.5t-167.5 -187t-42.5 -249.5q-4 18 -4 57q0 92 31 158l-418 412l406 -699q40 -147 162.5 -240.5t275.5 -93.5q27 0 67 7l-135 -566 q-120 0 -241.5 41t-226 111.5t-193 161t-154.5 192.5q-135 209 -135 471zM639 647q0 -157 111 -269t268 -112t268 112t111 269t-111 268t-268 111t-268 -111t-111 -268z" /> |
479 | -<glyph unicode="" horiz-adv-x="1701" d="M0 -317q0 55 63 55q17 0 28 0.5t38 5t46.5 12.5t44.5 25.5t40.5 42t27 64t11.5 89.5v1258q0 55 -7.5 97.5t-26.5 83.5t-58 65.5t-96 29.5q-18 2 -30 7t-18 9t-9 15t-3 15.5v19.5q-4 51 47 51q9 0 127.5 -3t280 -6t276.5 -3q236 0 403.5 11t248 21.5t106.5 10.5 q35 0 49.5 -20t14.5 -44q0 -6 -12.5 -52.5t-12.5 -84.5q0 -32 7 -96t7 -90q0 -37 -24 -56.5t-49 -19.5q-21 0 -31.5 12t-11.5 45v24q4 17 0.5 34.5t-7 34.5t-21 33.5t-42 31t-70 26.5t-105.5 21t-148 14t-197 5q-100 0 -163 -5.5t-100 -14t-53.5 -29t-20 -39t-3.5 -56.5 q0 -59 1 -275t1 -237q0 -39 13 -54t46 -15h477q78 0 134.5 44.5t62.5 135.5q3 34 11 50t17 19t29 3q29 0 46.5 -23.5t13.5 -69.5q-1 -17 -10 -95t-9 -132q0 -50 9.5 -136.5t9.5 -117.5q0 -34 -23 -51t-49 -6.5t-35 45.5q-6 25 -8.5 35t-12.5 35.5t-20 38.5t-29.5 32.5 t-43 29.5t-59.5 17.5t-79 7.5h-424q-36 0 -52.5 -22t-16.5 -78v-543q0 -40 8 -70.5t29.5 -60.5t67.5 -46.5t114 -16.5q20 0 87.5 -1t106 -0.5t106 2.5t115 9t102.5 18t98.5 30t76.5 44q48 38 69.5 94t41.5 166q6 31 42 36q43 7 70 -31q23 -31 21 -83q-2 -24 -34 -129 t-32 -153q0 -12 1.5 -43.5t1 -47.5t-4.5 -37t-16 -30.5t-31 -9.5q-16 0 -32.5 4.5t-34.5 10t-73 10t-140 4.5q-136 0 -660.5 -3.5t-583.5 -3.5q-38 0 -50.5 11.5t-12.5 38.5z" /> |
480 | -<glyph unicode="" horiz-adv-x="2129" d="M4 100v1180q0 3 6 39l695 -594l-693 -666q-8 28 -8 41zM96 1401q15 6 35 6h1870q19 0 37 -6l-697 -596l-92 -74l-182 -149l-182 149l-92 74zM98 -20l699 669l270 -219l270 219l699 -669q-17 -7 -35 -7h-1870q-15 0 -33 7zM1430 725l692 594q6 -18 6 -39v-1180 q0 -20 -6 -41z" /> |
481 | -<glyph unicode="" horiz-adv-x="2265" d="M0 424v309q0 22 14.5 36.5t36.5 14.5h543l-236 -411h-307q-22 0 -36.5 14.5t-14.5 36.5zM250 -76l135 -78zM271 13.5q-6 20.5 3 39.5l623 1082q10 19 30.5 24t39.5 -6l133 -76q20 -10 25.5 -31t-5.5 -40l-620 -1082q-10 -19 -31.5 -24t-40.5 6l-133 78q-18 9 -24 29.5z M901 373l236 411h137l192 -411h-565zM1060 1653q2 19 13 24q21 11 73 -63.5t146.5 -237.5t126.5 -215q57 -90 154.5 -268.5t184.5 -343.5t91 -172q22 -39 -4.5 -74t-62.5 -49q-3 -1 -13 -5.5t-13 -5.5t-11.5 -4t-12.5 -3t-12 -0.5t-14.5 1.5t-15.5 5t-19 8q-18 9 -71.5 110 t-119.5 247t-114 254.5t-84 193.5q-10 22 -28 62.5t-34.5 78t-37.5 85t-38.5 90t-34.5 86.5t-28 80t-17 66.5t-4 49.5zM1733 784h481q21 0 36 -15t15 -36v-309q0 -21 -15 -36t-36 -15h-272q-8 31 -17 47q-16 31 -49 94q-129 243 -143 270zM1759 136q6 22 27 32l76 39 q20 10 42 2.5t33 -27.5l64 -123q10 -22 4 -44.5t-25 -34.5l-55 -33q-20 -11 -43 -5.5t-35 25.5l-82 127q-12 20 -6 42zM1915 -176q-6 24 3 43t14 25.5t18 19.5l34 14q100 29 141 -61q35 -76 19 -234q-7 22 -44.5 39.5t-85.5 42t-72 58.5q-21 29 -27 53z" /> |
482 | -<glyph unicode="" horiz-adv-x="2220" d="M-2 4v182v111v424h287v-424h1648v424h289v-424v-111v-182h-2224z" /> |
483 | -<glyph unicode="" d="M0 610q0 217 81 413.5t218.5 339t327 226.5t397.5 84t397.5 -84t327 -226.5t218.5 -339t81 -413.5q0 -7 -1 -20.5t-1 -20.5q-7 209 -91 398t-220 325.5t-321.5 216.5t-389.5 80t-389.5 -80t-321.5 -216.5t-220 -325.5t-91 -398q0 7 -1 20.5t-1 20.5zM375 612 q0 183 87 338.5t236.5 245.5t325.5 90t325.5 -90t236.5 -245.5t87 -338.5q0 -7 -1 -20.5t-1 -20.5q-10 174 -98.5 319t-234 229.5t-314.5 84.5t-314.5 -84.5t-234 -229.5t-98.5 -319q0 7 -1 20.5t-1 20.5zM715 213q0 53 5.5 97t13.5 76.5t23.5 58t30 42t38 28.5t42.5 18 t49 9.5t51 4t56 0.5t56 -0.5t51 -4t49 -9.5t42.5 -18t38 -28.5t30 -42t23.5 -58t13.5 -76.5t5.5 -97q0 -159 -41.5 -294.5t-112.5 -214.5t-155 -79t-155 79t-112.5 214.5t-41.5 294.5zM811 786q0 91 62.5 156.5t150.5 65.5t150.5 -65.5t62.5 -156.5t-62.5 -156t-150.5 -65 t-150.5 65t-62.5 156z" /> |
484 | -<glyph unicode="" horiz-adv-x="2250" d="M2 89q11 15 33 3q243 -141 529 -219t585 -78q400 0 793 150q9 4 28.5 12t28.5 12q31 12 48.5 -12t-11.5 -45q-46 -34 -94 -62q-176 -105 -394 -162t-424 -57q-318 0 -603 111.5t-511 314.5q-19 17 -8 32zM618 674q0 142 70 241.5t191 151.5q113 48 272 68q54 7 180 16v35 v28v32.5t-1.5 28.5t-4.5 32.5t-8.5 26.5t-13.5 28q-21 29 -58.5 45t-77.5 16h-16q-67 -6 -116.5 -42.5t-63.5 -102.5q-7 -42 -41 -47l-236 29q-41 10 -32 51q18 95 67 166.5t118 113t144 62.5t160 26h51q99 0 198.5 -29.5t166.5 -90.5q19 -18 34.5 -37t26 -42t18.5 -41 t12.5 -46.5t7.5 -45t4 -50.5t1.5 -48.5t0 -53.5t-0.5 -52v-377q0 -53 15.5 -97.5t29 -64t47.5 -61.5q24 -40 -4 -62q-142 -124 -184 -159q-25 -19 -59 -5q-23 20 -40 36t-31 32.5t-22 27t-23 31.5t-24 33q-114 -123 -225 -155q-73 -21 -172 -21q-158 0 -259.5 97t-101.5 276 zM971 715q0 -79 39.5 -127.5t107.5 -48.5q6 0 18 2t15 2q85 22 133 110q23 39 34 85.5t12 74.5t1 94v51q-119 0 -180 -16q-180 -52 -180 -227zM1828.5 55.5q3.5 8.5 14.5 16.5q54 35 99 47q99 26 191.5 19.5t109.5 -29.5q8 -12 8 -37v-15q0 -72 -39 -169t-109 -156 q-15 -12 -26.5 -6.5t-5.5 22.5q101 236 67 281q-28 33 -196 20q-52 -6 -95 -12q-11 -1 -16.5 4.5t-2 14z" /> |
485 | -<glyph unicode="" horiz-adv-x="2371" d="M0 418v1261h432v-616q322 184 754 184q241 0 461 -64t378.5 -172t252.5 -257.5t94 -313.5q0 -132 -60 -255t-169.5 -222.5t-255.5 -174.5t-327 -116t-374 -41q-237 0 -453.5 62t-374.5 167.5t-254 251t-102 306.5h-2zM432 440q0 -147 101 -271t274.5 -195.5t378.5 -71.5 t378 71.5t274 195.5t101 271q0 146 -100.5 270t-274 196.5t-378.5 72.5t-378.5 -72.5t-274.5 -196.5t-101 -270zM686 440q0 -97 67 -179t182 -129.5t251 -47.5q135 0 249.5 47.5t181 129.5t66.5 179t-66.5 179t-181 130t-249.5 48q-136 0 -251 -48t-182 -130t-67 -179z" /> |
486 | -<glyph unicode="" horiz-adv-x="2267" d="M-4 514q0 140 68.5 259t186.5 188t257 69l2 -2q0 5 -1 14t-1 13q0 119 45.5 226.5t123 185t184 123.5t224.5 46q211 0 371 -135.5t197 -339.5h35q118 0 224.5 -46t184 -123.5t123 -185t45.5 -226.5q0 -158 -77 -292t-210 -212t-290 -78q-17 0 -25 2v-2h-1137h-18h-19h-10 v2q-201 11 -342 160t-141 354z" /> |
487 | -<glyph unicode="" horiz-adv-x="2074" d="M-25 586l439 334l-439 331l637 416l416 -356l426 356l619 -395l-406 -338l406 -348l-629 -379l-416 319l-416 -319zM412 72v116l192 -112l416 317l2 -2v-727zM422 924l602 -379l606 401l-602 346zM1022 -336l2 727l4 2l414 -317l205 123v-129z" /> |
488 | -<glyph unicode="" horiz-adv-x="2881" d="M0 371q0 45 4.5 79t19.5 72.5t40 66.5t69 54.5t105 43t148.5 26.5t197.5 10q175 0 303 -27q76 -16 119 -37v-329h-600q0 -33 1.5 -53.5t11 -53t27 -51t53 -33t85.5 -14.5q174 0 174 125h129h4h115v-182q-59 -29 -115 -39q-145 -31 -307 -31q-109 0 -195 9.5t-147 26 t-105 43t-70.5 55.5t-41.5 69.5t-20 79.5t-5 90zM406 440h364v30.5t-3 29.5t-9 32t-19.5 26t-33 24t-50.5 13.5t-71 6.5q-38 0 -67.5 -6.5t-47.5 -15.5t-31 -25t-19 -27.5t-9.5 -32t-3.5 -28.5v-27zM1006 68v182h159q-3 -104 -151 -178q-4 -4 -8 -4zM1006 68q4 0 8 4 q148 74 151 178h-159v80h165q6 53 1 102.5t-20.5 90.5t-52 76t-93.5 60v375h219v-416h4q34 50 76.5 70.5t103.5 20.5q87 0 141 -54q-82 -60 -82 -209q0 -96 38 -163t118 -86q-3 -63 -12 -110.5t-31 -96t-66.5 -75t-109.5 -26.5q-67 0 -111.5 24t-74.5 79h-2v-86h-211v162z M1006 330v329q57 -25 93.5 -60t52 -76t20.5 -90.5t-1 -102.5h-165zM1225 307q0 -158 17.5 -220t72.5 -62q57 0 75.5 62t18.5 220v9q0 49 -0.5 72.5t-3 60t-8.5 54t-16 36.5t-26.5 26.5t-39.5 7.5q-17 0 -30 -4.5t-22 -16t-16 -22t-11 -32.5t-6.5 -37.5t-3.5 -47t-1 -50 v-56.5zM1468 446q0 149 82 209q22 -23 37.5 -60t22.5 -64t10.5 -81.5t3.5 -71.5v-75v-106q-80 19 -118 86t-38 163zM1485 772q0 142 82 193q69 53 207 53q7 0 100 -6l219 -447v-209q0 -28 3.5 -79.5t4.5 -69.5h-205l-10 106h-4q-66 -118 -205 -118q-37 0 -53 2v106v75 t-3.5 71.5t-10.5 81.5t-22.5 64t-37.5 60q89 68 326 60v63q0 59 -17.5 88t-72.5 29q-28 0 -45.5 -9.5t-25 -29.5t-9.5 -37.5t-2 -46.5h-219zM1683 457q0 -127 84 -127q23 0 41.5 8t30 20t19.5 32.5t12 37.5t5.5 43.5t1.5 42.5t-0.5 42.5t-0.5 35.5q-9 -1 -31.5 -1.5 t-31 -1.5t-27 -2.5t-26 -4.5t-21.5 -8t-20 -11.5t-14.5 -16.5t-12 -22.5t-6.5 -29t-3 -37.5zM1821 1118h315l205 -475l223 475h293l-387 -735v-389h-289v389l-88 182v187q0 42 -4 73.5t-17.5 64.5t-37 55.5t-64 40.5t-96.5 26zM1874 1012q56 -8 96.5 -26t64 -40.5t37 -55.5 t17.5 -64.5t4 -73.5v-187z" /> |
489 | -<glyph unicode="" horiz-adv-x="1673" d="M573 580v391h316v196q0 212 138.5 362t334.5 150h313v-391h-313q-31 0 -55.5 -34t-24.5 -83v-200h393v-391h-393v-949h-393v949h-316z" /> |
490 | -<glyph unicode="" horiz-adv-x="1923" d="M0 -55q0 -129 127 -221.5t307 -92.5q181 0 308.5 92.5t127.5 221.5q0 131 -127.5 223t-308.5 92q-2 0 -6 -1t-6 -1q-96 92 0 207q145 8 245.5 112t100.5 248q0 57 -14 103q57 10 90 28v236q-107 -71 -238 -66q-94 64 -207 64q-154 0 -262 -107t-108 -258q0 -97 48.5 -179 t131.5 -130q-20 -25 -33 -53.5t-20.5 -67.5t4.5 -87t45 -97q-94 -42 -149.5 -112.5t-55.5 -153.5zM248 829q0 67 43.5 115.5t103.5 48.5q61 0 104.5 -48t43.5 -116t-43.5 -115.5t-104.5 -47.5q-60 0 -103.5 48t-43.5 115zM254 -55q0 55 52.5 93t127.5 38t128.5 -38t53.5 -93 q0 -54 -53.5 -92.5t-128.5 -38.5t-127.5 38.5t-52.5 92.5zM932 1513q0 69 48.5 117.5t117.5 48.5t118.5 -48.5t49.5 -117.5t-49.5 -118t-118.5 -49t-117.5 49t-48.5 118zM971 188v981h274v-981h-274zM1341 961h113v-582v-2q8 -61 39.5 -105.5t71 -65t77.5 -32t64 -12.5 l25 -2q42 -1 77 5.5t54.5 16.5t33 20t18.5 18l5 7l4 203q-60 -22 -104.5 -26.5t-64.5 5t-31.5 22t-12.5 23.5l-2 11q0 6 -2 8v488h186v208h-186v191h-252v-191h-113v-208z" /> |
491 | -<glyph unicode="" horiz-adv-x="1560" d="M-82 1354v37q13 25 36.5 44.5t43 30.5t62.5 22.5t61.5 15.5t73.5 14q48 9 73 13.5t68 10t67.5 5t57 -5.5t52.5 -17t38.5 -33t28.5 -51q22 -65 0 -103q-13 -22 -50.5 -33t-73.5 -20.5t-46 -26.5q-9 -14 -9 -131q0 -51 -8.5 -218t0.5 -220q8 -98 25 -108q19 -4 29.5 -3 t33.5 7.5t29 7.5q24 5 87.5 19t88 19t73.5 14.5t92.5 15.5t94.5 12q4 0 57 3t84 7.5t41 13.5q12 10 16.5 32t3 39t-6 46.5t-4.5 34.5q-18 157 0 332q0 4 2 16.5t3 19t2.5 19.5t1.5 21t0.5 19.5t0 19.5t-2 17t-4.5 15t-7 10q-8 8 -47 15t-44 10q-57 24 -93 71.5t-19 110.5 q9 26 71 58q42 21 89 34t123 25.5t102 17.5l71 -1q70 0 70 1q23 1 51.5 -35.5t45 -85t6.5 -77.5q-7 -22 -69.5 -48.5t-72.5 -37.5q-14 -18 -20 -59t-6.5 -75.5t1 -98t1.5 -83.5v-846q0 -10 -0.5 -32.5t-0.5 -39.5t0.5 -36.5t2.5 -32t6 -16.5q9 -8 46 -9t46 -4 q41 -13 69 -72.5t1 -105.5q-4 -7 -20 -14.5t-39.5 -16t-35.5 -14.5q-70 -33 -164.5 -56t-175.5 -17q-52 3 -109 62.5t-50 111.5q5 37 65 61q8 3 47.5 8t51.5 17t13.5 43.5t-4 84t-5.5 66.5v107q0 8 0.5 22t0.5 25v22.5t-1.5 19.5t-3.5 11q-16 23 -203 0q-238 -35 -363 -74 q-5 -1 -35 -9.5t-47.5 -14t-39.5 -17.5t-31 -26t-11.5 -47.5t-0.5 -63.5t6.5 -73.5t5.5 -55.5q1 -10 -0.5 -33.5t-1 -42t5.5 -26.5q8 -12 29.5 -16t45 -4t27.5 -1q35 -12 66.5 -53.5t25.5 -83.5q-4 -37 -47 -66.5t-108.5 -47t-123 -26.5t-114.5 -14t-98 5q-43 11 -83.5 58 t-37.5 87q7 51 113 86q5 2 24.5 6.5t24.5 9.5q16 20 0 158q-21 177 -25 492q-1 81 -6.5 241.5t-5.5 265.5q0 12 0.5 35.5t0.5 40.5t-0.5 36t-2.5 32t-6 18q-8 12 -46.5 18.5t-47.5 10.5q-39 17 -61.5 43.5t-43.5 77.5z" /> |
492 | -<glyph unicode="" d="M0 655q0 208 81 397.5t218.5 327t327 218.5t397.5 81t397.5 -81t327 -218.5t218.5 -327t81 -397.5t-81 -397.5t-218.5 -327t-327 -218.5t-397.5 -81t-397.5 81t-327 218.5t-218.5 327t-81 397.5zM205 655q0 -167 65 -318.5t174.5 -261t261 -174.5t318.5 -65t318.5 65 t261 174.5t174.5 261t65 318.5t-65 319t-174.5 261.5t-261 174.5t-318.5 65t-318.5 -65t-261 -174.5t-174.5 -261.5t-65 -319zM580 295q0 -63 44 -107.5t107 -44.5q67 0 116.5 49.5t49.5 116.5v17v534l410 76v-426q-30 10 -58 10q-67 0 -116.5 -49t-49.5 -117 q0 -63 43.5 -107t106.5 -44q64 0 114.5 46.5t51.5 110.5v9v16v782l-594 -102v-614q-30 10 -57 10q-69 0 -118.5 -49t-49.5 -117z" /> |
493 | -<glyph unicode="" horiz-adv-x="1564" d="M0 -375v2048h1565v-1673l-1170 6v-381h-395zM391 360h817v922h-817v-922z" /> |
494 | -<glyph unicode="" d="M0 535v91v7.5v6.5v8v7q0 239 11 332q27 222 150 364q48 55 111 103q307 231 752 225h10v-1591h254v426q8 -12 77 -124.5t108 -168.5q59 -83 129.5 -109t187.5 -26h74v242q-37 0 -50.5 0.5t-38 3t-35 8t-28 16.5t-31.5 28t-32 42q-21 28 -42.5 62.5t-46.5 77t-40 65.5 l350 487h-303l-279 -387v928q279 -45 488 -205q40 -31 73.5 -63t59.5 -68t46 -67.5t34.5 -74.5t25 -73.5t16.5 -80.5t10 -79.5t5.5 -86.5t1.5 -86v-91v-29q0 -239 -11 -332q-27 -221 -150 -363q-47 -55 -111 -103q-300 -226 -752 -226t-752 226q-40 31 -73.5 62.5t-59.5 68 t-46 68t-34.5 74.5t-25 73.5t-16.5 80.5t-10 79.5t-5.5 86t-1.5 85.5zM166 213q76 -78 172 -107.5t221 -29.5q77 0 147 20t127 58.5t91 102t34 144.5q0 91 -27.5 154t-71 93t-96.5 47t-106.5 23t-97 13t-71 26t-27.5 54q0 53 42.5 74.5t100.5 21.5q117 0 178 -61l160 160 q-122 122 -348 122q-103 0 -187.5 -35t-138 -110.5t-53.5 -179.5q0 -77 22.5 -133t59.5 -86.5t82 -49t93.5 -26.5t90.5 -13t76.5 -13t48.5 -23q21 -24 21 -62q0 -94 -148 -94q-157 0 -231 74z" /> |
495 | -<glyph unicode="" horiz-adv-x="2727" d="M-2 655q0 221 108.5 407.5t295 295t407.5 108.5q254 0 450 -130t300 -369q30 -75 264 -615q26 -58 45 -94.5t48 -75.5t61 -61t79 -37.5t107 -17.5q149 -4 243.5 73.5t94.5 196.5q0 37 -7.5 66t-27 52t-39 38.5t-57.5 32.5t-67 27t-83 28q-101 33 -172.5 63.5t-133 70.5 t-98 85.5t-57 105.5t-20.5 135q0 186 118 298t320 112q260 0 391 -236l-172 -88q-93 127 -229 127q-95 0 -157 -58.5t-62 -147.5q0 -25 5 -46t11.5 -38t21.5 -33t27 -27t36 -23.5t40.5 -20t48.5 -18.5t51 -17.5t58 -18.5t61 -19q111 -36 184 -74t126.5 -91t77.5 -124 t24 -169q0 -135 -71.5 -244t-195.5 -169.5t-276 -59.5q-105 0 -189 25t-148.5 76t-112.5 119t-91 163l-28 67l-260 590q-68 157 -214.5 253.5t-324.5 96.5q-160 0 -296 -79t-215 -215t-79 -296t79 -296t215 -214.5t296 -78.5q168 0 307.5 86.5t214.5 230.5l105 -242 q-112 -139 -276.5 -218t-350.5 -79q-221 0 -407.5 108.5t-295 295t-108.5 407.5z" /> |
496 | -<glyph unicode="" horiz-adv-x="2478" d="M14 -240v1837h379l19 -16h1689l19 16h356v-1843h-350v15h-1751v-9h-361zM375 31v-164h1751v151l-707 531l-162 -133l-176 143zM375 154l629 469l-629 516v-985zM545 1466l712 -610l711 610h-1423zM1497 612l629 -471v992z" /> |
497 | -<glyph unicode="" d="M0 1016l647 661v-252l617 -567l383 94l-400 -426l801 -897l-909 803l-385 -393l61 346l-522 647z" /> |
498 | -<glyph unicode="" horiz-adv-x="2217" d="M0 354q-2 129 50 239t137 182t188.5 129t207 88.5t189.5 51.5t140 26l53 7v-252q-117 -9 -214.5 -40.5t-159 -74.5t-108.5 -93t-71 -98t-38.5 -87.5t-17.5 -63.5l-4 -24q-17 -78 8 -147.5t78 -119t121 -91t139 -67.5t131 -44t98 -25l38 -8v-211q-199 20 -360 71 t-258.5 116t-170 139t-104.5 144t-50.5 127t-19.5 92zM1044 -369v1848l291 200v-1888zM1405 842q52 1 106.5 -11.5t95 -31.5t73.5 -38t50 -33l17 -13l-170 -70l641 -160v502l-219 -125q-52 55 -132.5 97.5t-158 63.5t-147.5 34.5t-113 16.5l-43 3v-235z" /> |
499 | -<glyph unicode="" d="M0 -96v1503q0 114 79 193t193 79h1504q114 0 193 -79t79 -193v-1503q0 -114 -79 -193.5t-193 -79.5h-1504q-114 0 -193 79.5t-79 193.5zM78 -39q0 -104 74 -178t178 -74h1388q104 0 178 74t74 178v1389q0 104 -74 178t-178 74h-1388q-104 0 -178 -74t-74 -178v-1389z M489 27v61h101q36 0 62.5 15.5t39 38t19 45t7.5 37.5l1 16v12v59v772q0 45 -12.5 78.5t-30.5 48.5t-36.5 23t-31.5 9l-12 1h-102v66h714q68 0 125 -16.5t93 -42.5t64 -58t42.5 -63.5t23.5 -57.5t11 -43l2 -16v-127q0 -63 -18.5 -113.5t-48.5 -81.5t-66 -54t-72 -33t-66 -16 t-48 -7h-19h-293v-344q0 -40 14.5 -69.5t35 -43t41.5 -21.5t35 -9l15 -1h97v-65h-687zM936 692h223q8 0 20.5 1t44.5 12t56 29.5t44 59t19 95.5l-2 125q0 8 -1 21t-12 46.5t-29.5 60.5t-60 51t-97.5 28h-205v-529z" /> |
500 | -<glyph unicode="" horiz-adv-x="1820" d="M0 750q0 150 46 291t130 254.5t195.5 199t250.5 132t287 46.5q186 0 354.5 -73t291 -196.5t194.5 -294.5t72 -359q0 -244 -117 -452t-315 -333q2 -5 7 -13.5t24 -32.5t43 -45t66.5 -43.5t92.5 -35.5v-155q-82 -18 -151 -13t-120 20.5t-94.5 48.5t-74.5 71t-58 88 q-102 -27 -215 -27q-185 0 -353.5 73t-290 197t-193.5 294.5t-72 357.5zM453 629q0 -156 62 -288.5t169 -210t234 -77.5q50 0 106 17q-4 6 -11 17t-30 38t-48 48.5t-62.5 39.5t-75.5 20v162v19q141 8 257 -43.5t199 -139.5q61 78 95 181t34 217v237q0 156 -62 288.5 t-169 210t-233 77.5q-127 0 -234 -77.5t-169 -210t-62 -288.5v-237z" /> |
501 | -<glyph unicode="" horiz-adv-x="2459" d="M0 655q0 143 39.5 278t110.5 247t170.5 205.5t217 158t253 100t276.5 35.5q178 0 332 -51v-618q-129 71 -271 71q-82 0 -173.5 -27t-157.5 -73q-93 -67 -165.5 -168.5t-72.5 -196.5q0 -184 117.5 -288.5t304.5 -104.5q159 0 309.5 85t222.5 222q9 16 26 54t17 49 q3 137 3 293t-1.5 346.5t-1.5 294.5q40 -20 78 -44.5t92 -62.5t74 -51q127 -87 284 -137.5t308 -50.5q41 0 54.5 -15.5t13.5 -60.5q0 -55 -33.5 -112t-85 -102.5t-108 -80.5t-107.5 -53q8 -63 8 -142q0 -214 -87 -405.5t-232 -326.5t-340.5 -213.5t-407.5 -78.5 q-141 0 -276.5 35.5t-253 100t-217 158t-170.5 205.5t-110.5 247t-39.5 278z" /> |
502 | -<glyph unicode="" horiz-adv-x="2361" d="M0 289q0 30 7 88.5t20 64.5q13 -6 21.5 -66t8.5 -87q0 -28 -8.5 -87.5t-21.5 -64.5q-13 6 -20 63.5t-7 88.5zM131 289q0 51 10.5 150t12.5 126q0 5 4 9t8 4q8 0 12 -13q3 -29 10 -86t11 -104t4 -86q0 -49 -11.5 -144.5t-13.5 -121.5q-4 -15 -12 -15q-5 0 -8.5 4.5 t-3.5 10.5q-2 25 -12.5 120.5t-10.5 145.5zM297 289q0 50 9.5 150.5t10.5 111.5q0 7 4.5 12.5t10.5 5.5q16 0 16 -18q2 -24 9 -81t10.5 -100t3.5 -81q0 -40 -3.5 -86.5t-10.5 -106.5t-9 -86q0 -16 -16 -16q-6 0 -10.5 5t-4.5 11q-1 13 -10.5 119.5t-9.5 159.5zM485 289 q0 103 9 302.5t10 223.5q0 8 5.5 14.5t12.5 6.5q9 0 15 -6.5t6 -14.5q1 -33 10.5 -228t9.5 -298q0 -53 -9.5 -158t-10.5 -119q0 -8 -6 -14t-15 -6q-7 0 -12.5 6t-5.5 14q-2 31 -7 87t-8.5 103t-3.5 87zM678 289q0 114 6.5 327t7.5 263q2 9 9 16.5t16 7.5t15.5 -7.5 t8.5 -16.5q1 -71 9 -275.5t8 -314.5q0 -51 -8 -146t-9 -127q-2 -9 -8.5 -16.5t-15.5 -7.5t-16 7.5t-9 16.5q-1 21 -7.5 120.5t-6.5 152.5zM872 289q0 108 6 315.5t7 237.5q2 12 10 21t18 9t18.5 -9t10.5 -21q1 -61 4.5 -174.5t5.5 -205.5t2 -173q0 -39 -2 -84t-5.5 -100.5 t-4.5 -84.5v3q-1 -13 -9.5 -22t-19.5 -9t-19 8t-9 20q-1 11 -7 114t-6 155zM1067 287q0 107 2 227t5.5 266.5t4.5 225.5q2 15 11 25.5t22 10.5q12 0 22 -10.5t11 -25.5q1 -79 4.5 -225.5t5.5 -266.5t2 -227q0 -37 -2 -80.5t-5.5 -97.5t-4.5 -82q-2 -14 -11.5 -24.5 t-21.5 -10.5q-13 0 -22 10.5t-11 24.5q-1 28 -4.5 82t-5.5 97.5t-2 80.5zM1230 722q0 169 3 318q-1 20 26 36t66 24t71 12t50 4q198 0 345.5 -148t164.5 -366q59 27 112 27q120 0 204.5 -94t84.5 -226t-84.5 -225.5t-204.5 -93.5h-804q-12 0 -21.5 12.5t-9.5 26.5 q0 112 -1.5 318t-1.5 375z" /> |
503 | -<glyph unicode="" horiz-adv-x="1261" d="M0 840v290q124 42 207 113q83 69 137 176q55 106 72 260h293v-518h485v-321h-485v-525q0 -177 18 -229q18 -50 70 -80q68 -41 155 -41q158 0 310 101v-322q-132 -64 -238 -88q-112 -25 -229 -25q-140 0 -250 35q-114 40 -183 103q-75 63 -106 139q-29 71 -29 215v717 h-227z" /> |
504 | -<glyph unicode="" horiz-adv-x="1875" d="M0.5 862q-5.5 39 3.5 70q8 73 32 128t53 82t57 43.5t46 19.5l19 3q50 4 98 -19t80.5 -60t54 -78.5t25.5 -75.5q3 -23 4.5 -46t1 -66t-11.5 -80t-30 -75.5t-57 -66.5t-91 -39t-100 0t-78 38t-55.5 64t-35 78t-16 80zM130.5 64q12.5 62 36 108.5t60 87.5t67 66t56.5 45 t29 24t53.5 46t109.5 106t101 135q30 49 78 89t111 60.5t128.5 15t136 -53.5t128.5 -138q6 -9 17.5 -24t51 -62t82.5 -93t111 -109.5t139 -118.5q54 -42 81 -102.5t27 -116.5t-7.5 -106t-18.5 -81l-12 -30l-8 -16t-26.5 -36.5t-48.5 -48.5t-74 -44t-102.5 -30.5t-135.5 -0.5 t-171 38q-73 24 -161.5 26.5t-140.5 -6.5l-52 -9q-8 -2 -21 -4.5t-56 -9.5t-81.5 -10.5t-96 -6t-99.5 3.5q-46 -1 -86 14t-68.5 39t-52 53.5t-38 59.5t-24.5 54.5t-14 39.5l-4 16q-17 68 -4.5 130zM426 147q-15 -98 20 -180q7 -13 20 -30t52.5 -44.5t89.5 -37.5h260v628 l-116 2v-170h-140q-39 0 -72.5 -17.5t-53.5 -42t-34.5 -49t-19.5 -42.5zM475 1364q0 131 64.5 223t156.5 92t157 -92t65 -223t-65 -223t-157 -92t-156.5 92t-64.5 223zM549 47q-12 43 8 96q4 11 12 22.5t26.5 27t41.5 22.5h113v-256h-105q-33 0 -57 22t-32 44zM932 -31 q0 -36 31 -64t61 -38l31 -10h299v444h-129v-334h-123q-18 3 -30 12.5t-14 18.5l-3 8v297l-123 -2v-332zM1039 1236q-7 54 1 110q6 61 49 131.5t107 116t119 32.5q89 -21 152.5 -117.5t48.5 -195.5q-8 -51 -31.5 -103t-59.5 -96.5t-88.5 -69.5t-111.5 -18q-59 8 -100 38.5 t-60 74t-26 97.5zM1405 752q0 307 221 307q56 0 101.5 -20.5t72 -50.5t45 -66.5t25 -65.5t6.5 -51q0 -4 0.5 -25t0.5 -35.5t-2 -41t-5.5 -46t-11 -45.5t-18 -45t-27 -39t-38 -32.5t-51 -21t-65.5 -9.5q-51 -1 -91 8t-66 24t-45 40t-29 48t-15.5 56t-6.5 56t-1 55z" /> |
505 | -<glyph unicode="" horiz-adv-x="2070" d="M0 -43v1389q0 134 88 233.5t221 99.5h1428q144 0 239 -76.5t95 -218.5v-120q-190 35 -228 41q-10 1 -33.5 3t-42.5 4.5t-34 6.5q-22 6 -61 20.5t-69.5 21.5t-66.5 7q-125 0 -270 -96q-66 -6 -194.5 -14.5t-231.5 -19t-195 -28.5q-137 -26 -168 -40q-46 -21 -59 -68 q-10 -39 -10 -174v-258l-7 -37l1078 -27l163 56q-86 -154 -143 -271l-217 -96l-831 -14q-7 -6 -21.5 -8t-21.5 -9q8 -51 14 -80q8 -35 32.5 -59t60.5 -36.5t66.5 -17.5t69.5 -8q422 -26 686 -26q78 0 246.5 41t259.5 41q133 0 228 -60v-110q0 -156 -80 -237t-236 -81h-1481 q-125 0 -199.5 98t-74.5 228zM1413 1075q0 29 20.5 50.5t49.5 21.5t50 -21.5t21 -50.5q0 -28 -21 -48.5t-50 -20.5t-49.5 20.5t-20.5 48.5z" /> |
506 | -<glyph unicode="" d="M0 653q0 208 81 397.5t218.5 327t327 218.5t397.5 81t397.5 -81t327 -218.5t218.5 -327t81 -397.5t-81 -397.5t-218.5 -327t-327 -218.5t-397.5 -81t-397.5 81t-327 218.5t-218.5 327t-81 397.5zM80 653q0 -277 146 -505.5t386 -344.5l-450 1235q-82 -184 -82 -385z M233 1171q8 0 21 -0.5t23 -0.5t18 1q98 1 252 13q24 2 35.5 -16.5t3 -38.5t-32.5 -23l-109 -10l344 -1022l207 618l-147 404q-49 6 -98 10q-24 2 -32.5 22t3 39t35.5 17q69 -5 131 -8.5t89 -3.5l28 -1q99 1 251 13q24 2 35.5 -16.5t3.5 -38.5t-32 -23l-107 -10l340 -1016 l94 315q6 18 19 60t18 59t14 49.5t13 51.5t7 42.5t3 42.5q0 134 -80 263q-5 8 -26 43.5t-27 47.5t-18.5 39t-16.5 48t-4 43q0 67 46 117.5t114 50.5q2 0 6 -1t6 -1q-127 118 -291.5 182.5t-347.5 64.5q-244 0 -452.5 -114.5t-338.5 -311.5zM758 -254q124 -37 266 -37 q165 0 313 53q-1 2 -3 6.5t-3 6.5l-291 796zM1499 -164q214 125 341.5 342.5t127.5 474.5q0 246 -115 453q7 -51 7 -96q0 -128 -72 -338z" /> |
507 | -<glyph unicode="" horiz-adv-x="2052" d="M0 655q0 -178 58.5 -342t164.5 -297q-28 82 -14.5 178t59.5 199.5t106.5 202.5t128 188t123.5 156.5t93 107.5l37 39q-302 187 -480 267q-131 -141 -203.5 -320.5t-72.5 -378.5zM285 -51q34 102 93 207.5t126 192.5t140.5 169.5t140 144t120 108.5t85.5 71l32 24 q13 -10 36.5 -27.5t91.5 -75t132 -117t145.5 -147.5t145 -172.5t118 -185t76.5 -192.5q-142 -149 -334.5 -233.5t-406.5 -84.5q-216 0 -407.5 84t-333.5 234zM360 1434q136 117 306.5 181t359.5 64q188 0 358 -64t306 -181q-78 41 -166.5 41t-177 -29.5t-160 -65 t-116.5 -64.5l-44 -30h-2q-9 6 -24 16.5t-62.5 39t-95 51.5t-114 46t-126 32.5t-125 1.5t-117.5 -39zM1294 1087q304 187 482 267q131 -141 203.5 -320.5t72.5 -378.5q0 -179 -58.5 -342.5t-166.5 -296.5q28 82 15 178t-59 199.5t-106.5 202.5t-128 188t-124 156.5 t-93.5 107.5z" /> |
508 | -<glyph unicode="" horiz-adv-x="1533" d="M7.5 473q-2.5 -108 12.5 -168q10 -37 39.5 -52t59.5 -5l418 129q45 15 63 54.5t0 78.5t-65 53l-418 168q-28 6 -56 -15.5t-34 -62.5q-17 -72 -19.5 -180zM186 1450q-20 35 2.5 70t77.5 55q169 65 350 94q59 3 83.5 -18t27.5 -60q36 -467 51 -794q3 -49 -24 -76t-66 -19 t-65 50q-304 472 -437 698zM309 -169.5q-3 30.5 19 52.5l284 340q34 39 74 43t65.5 -29t20.5 -90v-452q-5 -28 -35 -44t-69 -5q-73 12 -173.5 52t-150.5 77q-32 25 -35 55.5zM920 629q4 32 28 59l266 367q19 20 54.5 14.5t60.5 -37.5q51 -53 108 -144t76 -151q11 -38 -4 -64 t-45 -32l-428 -109q-35 -9 -63.5 3.5t-42.5 37t-10 56.5zM939.5 264q1.5 -32 23.5 -61l233 -389q16 -22 55 -19.5t68 31.5q56 49 114 128t85 142q14 40 3 70t-40 39l-420 143q-36 14 -63.5 3t-43.5 -33t-14.5 -54z" /> |
509 | -<glyph unicode="" horiz-adv-x="1478" d="M0 94v27v168q1 13 5.5 24.5t8.5 16.5l4 6q133 157 399.5 471.5t399.5 472.5q-116 -23 -210.5 -29.5t-149 0t-95.5 21.5t-56.5 27.5t-24.5 25.5q-2 0 -2 2q-3 4 -5 6q-12 29 -6 80q9 96 101 225q4 5 12 14.5t12 14.5q20 20 56 2q36 -20 40 -20q114 -46 304 -54 q262 -12 544 47q19 4 28.5 -3.5t8.5 -16.5v-10q-3 -28 -9 -86.5t-9 -87.5q-1 -6 -8 -15t-14.5 -16.5t-18 -17t-12.5 -11.5q-70 -82 -330 -385q-145 -169 -389 -448q-62 -73 -123 -144q-23 -26 -27 -37.5t-4 -48.5q139 5 309 -100q92 -60 176 -104.5t122 -58.5l38 -15 q250 -67 395 47q12 -47 8.5 -100.5t-14 -106.5t-37.5 -100.5t-61.5 -82.5t-85.5 -52.5t-109 -10.5q-80 9 -160.5 45t-179.5 93q-46 27 -147.5 104.5t-161.5 108.5q-98 50 -193.5 63.5t-240.5 13.5h-63q-18 0 -25 35z" /> |
510 | -<glyph unicode="" horiz-adv-x="2525" d="M-129 1122q190 36 288.5 69.5t137.5 76.5q6 7 16 20.5t35 61.5t41 104q24 -30 36.5 -62t13.5 -57t-1 -45.5t-6 -31.5l-4 -11q-12 -27 -21 -43.5t-15.5 -27.5t-20 -22.5t-21 -17.5t-32.5 -22.5t-42 -28.5q-72 -55 -69 -128t63 -111q53 -32 103.5 12.5t107.5 159.5 q22 45 34.5 106.5t19.5 105.5t36 97.5t84 95.5q31 24 67.5 33.5t70.5 8.5t71.5 -3.5t78 2t82.5 20.5t92 56.5t100 104.5q5 7 14.5 17.5t41 38t65.5 48t85.5 37.5t103.5 16.5t117 -25t128 -77.5q-72 31 -137.5 39.5t-112.5 -3t-87 -32.5t-65.5 -48.5t-44 -52t-25.5 -41.5 l-8 -16q-24 -57 -45 -99t-38 -71t-37 -48.5t-35.5 -31t-39.5 -20t-42.5 -13t-52 -12.5t-60.5 -16q-75 -23 -97 -90q-20 -60 13 -105q41 -54 124 -29q34 10 71 33q62 40 103 82t60.5 75.5t39 66.5t54 65t89.5 60q69 34 138 51t116 18.5t112 3.5t109 9q61 10 103 18.5 t110.5 27.5t117 42t97.5 61t76 84q11 18 27.5 48t44 101t28.5 117q34 -119 23 -213.5t-54 -164t-90 -116t-84 -68.5l-37 -23q-124 -64 -218.5 -98.5t-139 -40.5t-98 -20t-105.5 -42q-210 -113 -106 -318q43 -84 125.5 -91t158.5 61l11 11t25 30t32 48.5t26 64.5t13 79 q27 -63 32.5 -124.5t-5.5 -104.5t-26 -77t-29 -51l-13 -16q-55 -59 -94.5 -89.5t-90 -46.5t-108 -10t-143.5 30q-109 30 -182.5 38t-112 -0.5t-76.5 -31.5q-57 -33 -87.5 -87.5t-4.5 -99.5q20 -34 43 -47.5t62 -6t96 41.5q79 47 134 61t140 17q79 2 156 -18t129 -60 q75 -49 151 -117q-83 49 -162.5 62.5t-135 -1.5t-98.5 -37.5t-64 -43.5l-21 -21q-70 -80 -118.5 -122.5t-93.5 -56t-80 -8t-91 27.5q-25 10 -61 26t-61 26.5t-44 14.5v226q0 120 -49.5 219.5t-138.5 161.5q-121 81 -275 81q-156 0 -274 -79q-42 58 -105 67v154q0 63 -44 107 t-107 44h-37zM131 -33v332q0 134 39 203q38 67 109 106t165 39q142 0 227 -89t85 -224v-277h-414v-137q0 -47 27 -72.5t75 -25.5q94 0 103 100h209q0 -128 -84 -215q-88 -88 -228 -88q-94 0 -165 39t-109 106q-39 69 -39 203zM342 215h205v115q0 56 -27.5 85t-75.5 29 t-75 -29t-27 -85v-115zM879 -193q22 74 22 146q0 23 -6 41q50 -8 70 -10q125 -11 174 -95q2 -2 4 -6.5t8.5 -19t9 -28.5t4.5 -35.5t-4 -39.5q-39 32 -83 48.5t-78 17t-62 -3t-44 -9.5z" /> |
511 | -<glyph unicode="" horiz-adv-x="1742" d="M4 -115q6 63 25 135q23 93 148 719t145 715q13 55 22 85.5t25 59.5t34 42t51 24t72.5 13.5t102.5 2.5h493q121 0 276 -2t238 -2q73 0 97 -72q25 -73 -12 -158q-41 -93 -129 -122q-31 -10 -66 -10h-821l-103 -477l721 -7q77 0 104 -71q26 -69 -9 -146q-38 -85 -121 -108 q-24 -6 -50 -6h-737l-98 -508h884q130 0 157 -92q21 -73 -28 -161q-44 -78 -109 -100q-19 -6 -36 -6h-1133q-62 0 -98 35t-43.5 94.5t-1.5 122.5z" /> |
512 | -<glyph unicode="" horiz-adv-x="1777" d="M0 221q0 91 64.5 156t156.5 65q91 0 156 -65t65 -156q0 -94 -69 -160q133 -151 334 -151q141 0 237 84q96 87 96 217q0 81 -51 158q-48 78 -123 131q-65 44 -235 116q-154 61 -250 121q-87 57 -150 131q-62 73 -94 152q-28 79 -28 162q0 209 165 352q168 145 404 145 q159 0 317 -67q135 -59 232 -164q76 -66 76 -164q0 -92 -65.5 -156.5t-156.5 -64.5q-92 0 -156.5 64.5t-64.5 156.5q0 39 21 90q-65 33 -181 33q-141 0 -229 -64t-88 -163q0 -87 78 -156q81 -68 262 -145q183 -79 289 -150q103 -68 168 -151q68 -83 98 -175q1 -2 2 -6t2 -6 q-72 -60 -113 -143.5t-41 -179.5q0 -109 58 -213q-25 -31 -49 -56q-177 -168 -422 -168q-243 0 -426 131q-181 130 -285 398l6 2q-10 30 -10 59zM1255 68q0 -106 74 -181t180 -75t180 75t74 181q0 105 -74.5 179.5t-179.5 74.5t-179.5 -74.5t-74.5 -179.5z" /> |
513 | -<glyph unicode="" horiz-adv-x="1359" d="M0 1649h205l16 -248h21l10 6q79 133 208 202.5t296 69.5q176 0 313.5 -91.5t214 -255.5t76.5 -374q0 -154 -36.5 -282t-98.5 -216t-145.5 -149t-176.5 -89.5t-192 -28.5q-142 0 -258 58.5t-177 162.5l-4 6h-22l-6 -14v-775h-232v1559q0 181 -12 459zM244 803 q0 -63 12 -113q38 -143 151 -231t259 -88q207 0 331.5 157t124.5 418q0 244 -124.5 397.5t-321.5 153.5q-147 0 -262 -93t-152 -241q-18 -67 -18 -108v-252z" /> |
514 | -<glyph unicode="" horiz-adv-x="1773" d="M0 -401v1015v1016l1026 -1016zM0 -401l1026 1015l274 -272l-413 -240l-887 -512v9zM0 1630v8l887 -512l413 -239l-274 -273zM1026 614l274 273l474 -273l-474 -272z" /> |
515 | -<glyph unicode="" horiz-adv-x="2650" d="M27 643v105q0 51 81.5 94.5t222 68.5t306.5 25t306.5 -25t222 -68.5t81.5 -94.5v-105q-2 -77 -180.5 -131.5t-429.5 -54.5t-429.5 54.5t-180.5 131.5zM614 1141v55q3 38 131 66t306 28q177 0 304 -28t130 -66h2v-55h-2q-3 -40 -129.5 -68.5t-304.5 -28.5t-305 28.5 t-132 68.5zM1047 129v121v10q5 75 112.5 137.5t288 98.5t393.5 36t393.5 -36t287.5 -98.5t112 -137.5v-8v-115v-8q-4 -75 -111 -137.5t-288 -98.5t-394 -36t-393.5 36t-288 98.5t-112.5 137.5zM1513 827v2v78v6q5 59 155 100.5t360 41.5t359.5 -41.5t154.5 -100.5v-4v-80v-2 q0 -60 -150 -102.5t-364 -42.5t-364.5 42.5t-150.5 102.5z" /> |
516 | -<glyph unicode="" horiz-adv-x="2312" d="M0 1319q0 40 27 67t67 27h481q33 0 59.5 -20t33.5 -52l49 -200h1380l14 43q9 30 34 47.5t55 17.5q18 0 26 -4q30 -7 49 -32.5t19 -55.5q0 -11 -4 -27l-242 -804q-7 -30 -32 -49t-56 -19h-1145q-32 0 -58 20.5t-34 51.5l-221 897h-408q-40 0 -67 27t-27 65zM762 954 l127 -508h1001l4 19l148 489h-1280zM848 -37q0 78 56 133.5t134 55.5t133.5 -55.5t55.5 -133.5t-55.5 -133t-133.5 -55t-134 55t-56 133zM981 795h340v-189h-299zM1483 606l2 189h332l-50 -189h-284zM1559 -37q0 78 56 133.5t134 55.5t133 -55.5t55 -133.5t-55 -133 t-133 -55t-134 55t-56 133z" /> |
517 | -<glyph unicode="" horiz-adv-x="1918" d="M10 -184v682l238 264h174v-131h-115l-164 -182v-502h1629v502l-164 182h-115v131h174l236 -264v-682h-1893zM422 469v162v131v383l309 309h762v-692v-131v-162h-1071zM545 594h825v737h-516v-309h-309v-428z" /> |
518 | -<glyph unicode="" horiz-adv-x="1425" d="M-20 176q0 129 57 201q49 64 151 92q-32 83 -32 121q0 69 71 143q75 72 142 72q31 0 82 -19q-103 297 -142 426q-49 165 -49 236q0 99 49 154q51 57 137 57q149 0 355 -604l35 -101q11 28 24 68q101 295 192.5 446.5t176.5 151.5q82 0 129 -55q49 -55 49 -144 q0 -59 -49 -231q-45 -153 -135 -410q115 -27 168 -110q55 -86 55 -273q0 -363 -217 -596q-221 -231 -561 -231q-135 0 -260 49q-123 44 -220 135q-102 95 -155 203q-53 109 -53 219zM113 186q0 -50 28 -120q26 -66 80 -138q82 -108 199 -166q117 -57 264 -57q263 0 444 199 q179 197 179 497q0 89 -13 146q-10 44 -39 69q-55 45 -217 82q-161 37 -344 37q-45 0 -57 -12q-14 -7 -14 -41q0 -83 94 -119q101 -43 338 -43h57q33 0 47 -22q17 -17 23 -64q-34 -34 -113 -63q-64 -24 -108 -54q-83 -61 -132 -141q-47 -78 -47 -151q0 -41 21 -105 q22 -68 22 -88v-12l-8 -31q-49 3 -79.5 23.5t-51.5 60.5q-36 65 -39 168q-6 -2 -24 -2h-23q2 -10 2 -25q0 -60 -47 -104q-46 -43 -111 -43q-96 0 -194 92q-98 95 -98 184q0 18 6 33q3 16 32 45q51 -62 70 -88q86 -121 156 -121q19 0 35 13q12 12 12 20q0 13 -25 59 q-17 30 -76 109q-60 77 -92 102q-32 29 -45 29q-38 0 -75 -45q-37 -46 -37 -113zM297 578q0 -28 33 -93q31 -59 92 -139q64 -82 115 -127q49 -41 73 -41q14 0 29 15q14 17 14 32q0 26 -37 119q-48 113 -94 188q-49 76 -80 101q-34 31 -63 31q-22 0 -51 -31q-31 -31 -31 -55z M389 1462q0 -71 49 -219q45 -144 135 -389q19 12 58 12q2 0 14 -1t21 -1q7 0 53 -4l-141 410q-56 158 -91 213q-26 43 -53 43q-17 0 -31 -17t-14 -47zM729 418q26 -64 39 -103q41 48 82 78q-10 2 -31 5t-31 5q-35 7 -59 15zM944 836l137 -25q102 284 142 408q51 165 51 196 q0 33 -14 51q-9 15 -31 15q-29 0 -64 -56q-36 -55 -88 -206z" /> |
519 | -<glyph unicode="" d="M0 -205v1639q0 85 60 144.5t145 59.5h1638q85 0 145 -59.5t60 -144.5v-1639q0 -85 -60 -145t-145 -60h-1638q-85 0 -145 60t-60 145zM410 614q0 -167 82 -308.5t223.5 -223.5t308.5 -82t308.5 82t223.5 223.5t82 308.5q0 125 -48.5 239t-130.5 196.5t-196 131t-239 48.5 t-239 -48.5t-196 -131t-130.5 -196.5t-48.5 -239zM614 614q0 169 120.5 289.5t289.5 120.5t289.5 -120.5t120.5 -289.5t-120.5 -289t-289.5 -120t-289.5 120t-120.5 289z" /> |
520 | -<glyph unicode="" horiz-adv-x="1425" /> |
521 | -<glyph horiz-adv-x="1359" /> |
522 | -</font> |
523 | -</defs></svg> |
524 | \ No newline at end of file |
525 | |
526 | === removed file 'auth_oauth/static/lib/zocial/css/zocial-regular-webfont.ttf' |
527 | Binary files auth_oauth/static/lib/zocial/css/zocial-regular-webfont.ttf 2013-10-27 12:31:04 +0000 and auth_oauth/static/lib/zocial/css/zocial-regular-webfont.ttf 1970-01-01 00:00:00 +0000 differ |
528 | === removed file 'auth_oauth/static/lib/zocial/css/zocial-regular-webfont.woff' |
529 | Binary files auth_oauth/static/lib/zocial/css/zocial-regular-webfont.woff 2013-10-27 12:31:04 +0000 and auth_oauth/static/lib/zocial/css/zocial-regular-webfont.woff 1970-01-01 00:00:00 +0000 differ |
530 | === removed file 'auth_oauth/static/lib/zocial/css/zocial.css' |
531 | --- auth_oauth/static/lib/zocial/css/zocial.css 2012-08-15 22:47:08 +0000 |
532 | +++ auth_oauth/static/lib/zocial/css/zocial.css 1970-01-01 00:00:00 +0000 |
533 | @@ -1,420 +0,0 @@ |
534 | -@charset "UTF-8"; |
535 | - |
536 | -/*! |
537 | -Code written by Sam Collins (@smcllns) of www.eventasaur.us |
538 | -You are free to use this work commercially |
539 | -You are free to extend this work without permissions from the author (just do so tastefully eh?) |
540 | -Enjoy |
541 | -*/ |
542 | - |
543 | -/* Reference icons from font-files */ |
544 | - |
545 | -@font-face { |
546 | - font-family: 'zocial'; |
547 | - font-style: normal; |
548 | - font-weight: normal; |
549 | - src: url('zocial-regular-webfont.eot'); |
550 | - src: url('zocial-regular-webfont.eot?#iefix') format('embedded-opentype'), |
551 | - url('zocial-regular-webfont.woff') format('woff'), |
552 | - url('zocial-regular-webfont.ttf') format('truetype'), |
553 | - url('zocial-regular-webfont.svg#ZocialRegular') format('svg'); |
554 | - unicode-range: U+0-U+10FFFF; |
555 | -} |
556 | - |
557 | -/* Button structure */ |
558 | - |
559 | -.zocial, |
560 | -a.zocial { |
561 | - border: 1px solid #777; |
562 | - border-color: rgba(0,0,0,0.2); |
563 | - border-bottom-color: #333; |
564 | - border-bottom-color: rgba(0,0,0,0.4); |
565 | - color: #fff; |
566 | - -moz-box-shadow: inset 0 0.08em 0 rgba(255,255,255,0.4), inset 0 0 0.1em rgba(255,255,255,0.9); |
567 | - -webkit-box-shadow: inset 0 0.08em 0 rgba(255,255,255,0.4), inset 0 0 0.1em rgba(255,255,255,0.9); |
568 | - box-shadow: inset 0 0.08em 0 rgba(255,255,255,0.4), inset 0 0 0.1em rgba(255,255,255,0.9); |
569 | - cursor: pointer; |
570 | - display: inline-block; |
571 | - font: bold 100%/2.1 "Lucida Grande", Tahoma, sans-serif; |
572 | - padding: 0 .95em 0 0; |
573 | - text-align: center; |
574 | - text-decoration: none; |
575 | - text-shadow: 0 1px 0 rgba(0,0,0,0.5); |
576 | - white-space: nowrap; |
577 | - |
578 | - -moz-user-select: none; |
579 | - -webkit-user-select: none; |
580 | - user-select: none; |
581 | - |
582 | - position: relative; |
583 | - |
584 | - -moz-border-radius: .3em; |
585 | - -webkit-border-radius: .3em; |
586 | - border-radius: .3em; |
587 | -} |
588 | - |
589 | -.zocial:before { |
590 | - content: ""; |
591 | - border-right: 0.075em solid rgba(0,0,0,0.1); |
592 | - float: left; |
593 | - font: 120%/1.65 zocial; |
594 | - font-style: normal; |
595 | - font-weight: normal; |
596 | - margin: 0 0.5em 0 0; |
597 | - padding: 0 0.5em; |
598 | - text-align: center; |
599 | - text-decoration: none; |
600 | - text-transform: none; |
601 | - |
602 | - -moz-box-shadow: 0.075em 0 0 rgba(255,255,255,0.25); |
603 | - -webkit-box-shadow: 0.075em 0 0 rgba(255,255,255,0.25); |
604 | - box-shadow: 0.075em 0 0 rgba(255,255,255,0.25); |
605 | - |
606 | - -webkit-font-smoothing: antialiased; |
607 | -} |
608 | - |
609 | -.zocial:active { |
610 | - outline: none; /* outline is visible on :focus */ |
611 | -} |
612 | - |
613 | -/* Buttons can be displayed as standalone icons by adding a class of "icon" */ |
614 | - |
615 | -.zocial.icon { |
616 | - overflow: hidden; |
617 | - max-width: 2.4em; |
618 | - padding-left: 0; |
619 | - padding-right: 0; |
620 | - max-height: 2.15em; |
621 | - white-space: nowrap; |
622 | -} |
623 | -.zocial.icon:before { |
624 | - padding: 0; |
625 | - width: 2em; |
626 | - height: 2em; |
627 | - |
628 | - box-shadow: none; |
629 | - border: none; |
630 | -} |
631 | - |
632 | -/* Gradients */ |
633 | - |
634 | -.zocial { |
635 | - background-image: -moz-linear-gradient(rgba(255,255,255,.1), rgba(255,255,255,.05) 49%, rgba(0,0,0,.05) 51%, rgba(0,0,0,.1)); |
636 | - background-image: -ms-linear-gradient(rgba(255,255,255,.1), rgba(255,255,255,.05) 49%, rgba(0,0,0,.05) 51%, rgba(0,0,0,.1)); |
637 | - background-image: -o-linear-gradient(rgba(255,255,255,.1), rgba(255,255,255,.05) 49%, rgba(0,0,0,.05) 51%, rgba(0,0,0,.1)); |
638 | - background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(255,255,255,.1)), color-stop(49%, rgba(255,255,255,.05)), color-stop(51%, rgba(0,0,0,.05)), to(rgba(0,0,0,.1))); |
639 | - background-image: -webkit-linear-gradient(rgba(255,255,255,.1), rgba(255,255,255,.05) 49%, rgba(0,0,0,.05) 51%, rgba(0,0,0,.1)); |
640 | - background-image: linear-gradient(rgba(255,255,255,.1), rgba(255,255,255,.05) 49%, rgba(0,0,0,.05) 51%, rgba(0,0,0,.1)); |
641 | -} |
642 | - |
643 | -.zocial:hover, .zocial:focus { |
644 | - background-image: -moz-linear-gradient(rgba(255,255,255,.15) 49%, rgba(0,0,0,.1) 51%, rgba(0,0,0,.15)); |
645 | - background-image: -ms-linear-gradient(rgba(255,255,255,.15) 49%, rgba(0,0,0,.1) 51%, rgba(0,0,0,.15)); |
646 | - background-image: -o-linear-gradient(rgba(255,255,255,.15) 49%, rgba(0,0,0,.1) 51%, rgba(0,0,0,.15)); |
647 | - background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(255,255,255,.15)), color-stop(49%, rgba(255,255,255,.15)), color-stop(51%, rgba(0,0,0,.1)), to(rgba(0,0,0,.15))); |
648 | - background-image: -webkit-linear-gradient(rgba(255,255,255,.15) 49%, rgba(0,0,0,.1) 51%, rgba(0,0,0,.15)); |
649 | - background-image: linear-gradient(rgba(255,255,255,.15) 49%, rgba(0,0,0,.1) 51%, rgba(0,0,0,.15)); |
650 | -} |
651 | - |
652 | -.zocial:active { |
653 | - background-image: -moz-linear-gradient(bottom, rgba(255,255,255,.1), rgba(255,255,255,0) 30%, transparent 50%, rgba(0,0,0,.1)); |
654 | - background-image: -ms-linear-gradient(bottom, rgba(255,255,255,.1), rgba(255,255,255,0) 30%, transparent 50%, rgba(0,0,0,.1)); |
655 | - background-image: -o-linear-gradient(bottom, rgba(255,255,255,.1), rgba(255,255,255,0) 30%, transparent 50%, rgba(0,0,0,.1)); |
656 | - background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(255,255,255,.1)), color-stop(30%, rgba(255,255,255,0)), color-stop(50%, transparent), to(rgba(0,0,0,.1))); |
657 | - background-image: -webkit-linear-gradient(bottom, rgba(255,255,255,.1), rgba(255,255,255,0) 30%, transparent 50%, rgba(0,0,0,.1)); |
658 | - background-image: linear-gradient(bottom, rgba(255,255,255,.1), rgba(255,255,255,0) 30%, transparent 50%, rgba(0,0,0,.1)); |
659 | -} |
660 | - |
661 | -/* Adjustments for light background buttons */ |
662 | - |
663 | -.zocial.bitcoin, |
664 | -.zocial.cloudapp, |
665 | -.zocial.dropbox, |
666 | -.zocial.email, |
667 | -.zocial.eventful, |
668 | -.zocial.github, |
669 | -.zocial.gmail, |
670 | -.zocial.instapaper, |
671 | -.zocial.itunes, |
672 | -.zocial.ninetyninedesigns, |
673 | -.zocial.openid, |
674 | -.zocial.plancast, |
675 | -.zocial.posterous, |
676 | -.zocial.reddit, |
677 | -.zocial.secondary, |
678 | -.zocial.viadeo, |
679 | -.zocial.weibo, |
680 | -.zocial.wikipedia { |
681 | - border: 1px solid #aaa; |
682 | - border-color: rgba(0,0,0,0.3); |
683 | - border-bottom-color: #777; |
684 | - border-bottom-color: rgba(0,0,0,0.5); |
685 | - -moz-box-shadow: inset 0 0.08em 0 rgba(255,255,255,0.7), inset 0 0 0.08em rgba(255,255,255,0.5); |
686 | - -webkit-box-shadow: inset 0 0.08em 0 rgba(255,255,255,0.7), inset 0 0 0.08em rgba(255,255,255,0.5); |
687 | - box-shadow: inset 0 0.08em 0 rgba(255,255,255,0.7), inset 0 0 0.08em rgba(255,255,255,0.5); |
688 | - text-shadow: 0 1px 0 rgba(255,255,255,0.8); |
689 | -} |
690 | - |
691 | -/* :hover adjustments for light background buttons */ |
692 | - |
693 | -.zocial.bitcoin:focus, |
694 | -.zocial.bitcoin:hover, |
695 | -.zocial.dropbox:focus, |
696 | -.zocial.dropbox:hover, |
697 | -.zocial.email:focus, |
698 | -.zocial.email:hover, |
699 | -.zocial.eventful:focus, |
700 | -.zocial.eventful:hover, |
701 | -.zocial.github:focus, |
702 | -.zocial.github:hover, |
703 | -.zocial.gmail:focus, |
704 | -.zocial.gmail:hover, |
705 | -.zocial.instapaper:focus, |
706 | -.zocial.instapaper:hover, |
707 | -.zocial.itunes:focus, |
708 | -.zocial.itunes:hover, |
709 | -.zocial.ninetyninedesigns:focus, |
710 | -.zocial.ninetyninedesigns:hover, |
711 | -.zocial.openid:focus, |
712 | -.zocial.openid:hover, |
713 | -.zocial.plancast:focus, |
714 | -.zocial.plancast:hover, |
715 | -.zocial.posterous:focus, |
716 | -.zocial.posterous:hover, |
717 | -.zocial.reddit:focus, |
718 | -.zocial.reddit:hover, |
719 | -.zocial.secondary:focus, |
720 | -.zocial.secondary:hover, |
721 | -.zocial.twitter:focus, |
722 | -.zocial.viadeo:focus, |
723 | -.zocial.viadeo:hover, |
724 | -.zocial.weibo:focus, |
725 | -.zocial.weibo:hover, |
726 | -.zocial.wikipedia:focus, |
727 | -.zocial.wikipedia:hover { |
728 | - background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(255,255,255,0.5)), color-stop(49%, rgba(255,255,255,0.2)), color-stop(51%, rgba(0,0,0,0.05)), to(rgba(0,0,0,0.15))); |
729 | - background-image: -moz-linear-gradient(top, rgba(255,255,255,0.5), rgba(255,255,255,0.2) 49%, rgba(0,0,0,0.05) 51%, rgba(0,0,0,0.15)); |
730 | - background-image: -webkit-linear-gradient(top, rgba(255,255,255,0.5), rgba(255,255,255,0.2) 49%, rgba(0,0,0,0.05) 51%, rgba(0,0,0,0.15)); |
731 | - background-image: -o-linear-gradient(top, rgba(255,255,255,0.5), rgba(255,255,255,0.2) 49%, rgba(0,0,0,0.05) 51%, rgba(0,0,0,0.15)); |
732 | - background-image: -ms-linear-gradient(top, rgba(255,255,255,0.5), rgba(255,255,255,0.2) 49%, rgba(0,0,0,0.05) 51%, rgba(0,0,0,0.15)); |
733 | - background-image: linear-gradient(top, rgba(255,255,255,0.5), rgba(255,255,255,0.2) 49%, rgba(0,0,0,0.05) 51%, rgba(0,0,0,0.15)); |
734 | -} |
735 | - |
736 | -/* :active adjustments for light background buttons */ |
737 | - |
738 | -.zocial.bitcoin:active, |
739 | -.zocial.dropbox:active, |
740 | -.zocial.email:active, |
741 | -.zocial.eventful:active, |
742 | -.zocial.github:active, |
743 | -.zocial.gmail:active, |
744 | -.zocial.instapaper:active, |
745 | -.zocial.itunes:active, |
746 | -.zocial.ninetyninedesigns:active, |
747 | -.zocial.openid:active, |
748 | -.zocial.plancast:active, |
749 | -.zocial.posterous:active, |
750 | -.zocial.reddit:active, |
751 | -.zocial.secondary:active, |
752 | -.zocial.viadeo:active, |
753 | -.zocial.weibo:active, |
754 | -.zocial.wikipedia:active { |
755 | - background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(255,255,255,0)), color-stop(30%, rgba(255,255,255,0)), color-stop(50%, rgba(0,0,0,0)), to(rgba(0,0,0,0.1))); |
756 | - background-image: -moz-linear-gradient(bottom, rgba(255,255,255,0), rgba(255,255,255,0) 30%, rgba(0,0,0,0) 50%, rgba(0,0,0,0.1)); |
757 | - background-image: -webkit-linear-gradient(bottom, rgba(255,255,255,0), rgba(255,255,255,0) 30%, rgba(0,0,0,0) 50%, rgba(0,0,0,0.1)); |
758 | - background-image: -o-linear-gradient(bottom, rgba(255,255,255,0), rgba(255,255,255,0) 30%, rgba(0,0,0,0) 50%, rgba(0,0,0,0.1)); |
759 | - background-image: -ms-linear-gradient(bottom, rgba(255,255,255,0), rgba(255,255,255,0) 30%, rgba(0,0,0,0) 50%, rgba(0,0,0,0.1)); |
760 | - background-image: linear-gradient(bottom, rgba(255,255,255,0), rgba(255,255,255,0) 30%, rgba(0,0,0,0) 50%, rgba(0,0,0,0.1)); |
761 | -} |
762 | - |
763 | -/* Button icon and color */ |
764 | -/* Icon characters are stored in unicode private area */ |
765 | -.zocial.amazon:before {content: "\E040";} |
766 | -.zocial.android:before {content: "\E005";} |
767 | -.zocial.angellist:before {content: "\E06C";} |
768 | -.zocial.aol:before {content: "\E001";} |
769 | -.zocial.appstore:before {content: "\E020";} |
770 | -.zocial.bitcoin:before {content: "\E011"; color: #f7931a;} |
771 | -.zocial.blogger:before {content: "\E021";} |
772 | -.zocial.call:before {content: "\E016";} |
773 | -.zocial.cal:before {content: "\E00D";} |
774 | -.zocial.cart:before {content: "\E06A";} |
775 | -.zocial.chrome:before {content: "\E03A";} |
776 | -.zocial.cloudapp:before {content: "\E042";} |
777 | -.zocial.creativecommons:before {content: "\E022";} |
778 | -.zocial.delicious:before {content: "\E002";} |
779 | -.zocial.digg:before {content: "\E01A";} |
780 | -.zocial.disqus:before {content: "\E030";} |
781 | -.zocial.dribbble:before {content: "\E023";} |
782 | -.zocial.dropbox:before {content: "\E043"; color: #1f75cc;} |
783 | -.zocial.email:before {content: "\E03C"; color: #312c2a;} |
784 | -.zocial.eventasaurus:before {content: "\E055"; color: #9de428;} |
785 | -.zocial.eventbrite:before {content: "\E05B";} |
786 | -.zocial.eventful:before {content: "\E006"; color: #0066CC;} |
787 | -.zocial.evernote:before {content: "\E024";} |
788 | -.zocial.facebook:before {content: "\E045";} |
789 | -.zocial.fivehundredpx:before {content: "\E00F"; color: #29b6ff;} |
790 | -.zocial.flattr:before {content: "\E004";} |
791 | -.zocial.flickr:before {content: "\E025";} |
792 | -.zocial.forrst:before {content: "\E019"; color: #50894f;} |
793 | -.zocial.foursquare:before {content: "\E013";} |
794 | -.zocial.github:before {content: "\E046";} |
795 | -.zocial.gmail:before {content: "\E04C"; color: #f00;} |
796 | -.zocial.google:before {content: "\E026";} |
797 | -.zocial.googleplay:before {content: "\E05E";} |
798 | -.zocial.googleplus:before {content: "\E00A";} |
799 | -.zocial.gowalla:before {content: "\E01F";} |
800 | -.zocial.grooveshark:before {content: "\E017";} |
801 | -.zocial.guest:before {content: "\E01E";} |
802 | -.zocial.html5:before {content: "\E014";} |
803 | -.zocial.ie:before {content: "\E015";} |
804 | -.zocial.instagram:before {content: "\E06D";} |
805 | -.zocial.instapaper:before {content: "\E028";} |
806 | -.zocial.intensedebate:before {content: "\E05A";} |
807 | -.zocial.itunes:before {content: "\E048"; color: #1a6dd2;} |
808 | -.zocial.klout:before {content: "\E02A"; } |
809 | -.zocial.lanyrd:before {content: "\E00C";} |
810 | -.zocial.lastfm:before {content: "\E04B";} |
811 | -.zocial.linkedin:before {content: "\E02B";} |
812 | -.zocial.macstore:before {content: "\E03D";} |
813 | -.zocial.meetup:before {content: "\E02C";} |
814 | -.zocial.myspace:before {content: "\E03E";} |
815 | -.zocial.ninetyninedesigns:before {content: "\E018"; color: #f50;} |
816 | -.zocial.openid:before {content: "\E04E"; color: #ff921d;} |
817 | -.zocial.opentable:before {content: "\E05F";} |
818 | -.zocial.paypal:before {content: "\E003";} |
819 | -.zocial.pinboard:before {content: "\E04D";} |
820 | -.zocial.pinterest:before {content: "\E010";} |
821 | -.zocial.plancast:before {content: "\E02F";} |
822 | -.zocial.plurk:before {content: "\E049";} |
823 | -.zocial.podcast:before {content: "\E03F";} |
824 | -.zocial.posterous:before {content: "\E05D";} |
825 | -.zocial.print:before {content: "\E06B";} |
826 | -.zocial.quora:before {content: "\E050";} |
827 | -.zocial.reddit:before {content: "\E01D"; color: red;} |
828 | -.zocial.rss:before {content: "\E031";} |
829 | -.zocial.scribd:before {content: "\E05C"; color: #00d5ea;} |
830 | -.zocial.skype:before {content: "\E032";} |
831 | -.zocial.smashing:before {content: "\E009";} |
832 | -.zocial.songkick:before {content: "\E04A";} |
833 | -.zocial.soundcloud:before {content: "\E052";} |
834 | -.zocial.spotify:before {content: "\E01C";} |
835 | -.zocial.stumbleupon:before {content: "\E00E";} |
836 | -.zocial.tumblr:before {content: "\E053";} |
837 | -.zocial.twitter:before {content: "\E033";} |
838 | -.zocial.viadeo:before {content: "\E027"; color: #f59b20;} |
839 | -.zocial.vimeo:before {content: "\E035";} |
840 | -.zocial.weibo:before {content: "\E029"; color: #e6162d;} |
841 | -.zocial.wikipedia:before {content: "\E00B";} |
842 | -.zocial.windows:before {content: "\E036";} |
843 | -.zocial.xing:before {content: "\E037"} |
844 | -.zocial.wordpress:before {content: "\E056";} |
845 | -.zocial.yahoo:before {content: "\E038";} |
846 | -.zocial.yelp:before {content: "\E058";} |
847 | -.zocial.youtube:before {content: "\E034";} |
848 | - |
849 | -/* Button background and text color */ |
850 | - |
851 | -.zocial.amazon {background-color: #ffad1d; color: #030037; text-shadow: 0 1px 0 rgba(255,255,255,0.5);} |
852 | -.zocial.android {background-color: #a4c639;} |
853 | -.zocial.angellist {background-color: #000;} |
854 | -.zocial.aol {background-color: #f00;} |
855 | -.zocial.appstore {background-color: #000;} |
856 | -.zocial.bitcoin {background-color: #efefef; color: #4d4d4d;} |
857 | -.zocial.blogger {background-color: #ee5a22;} |
858 | -.zocial.call {background-color: #008000;} |
859 | -.zocial.cal {background-color: #d63538;} |
860 | -.zocial.cart {background-color: #333;} |
861 | -.zocial.chrome {background-color: #006cd4;} |
862 | -.zocial.cloudapp {background-color: #fff; color: #312c2a;} |
863 | -.zocial.creativecommons {background-color: #000;} |
864 | -.zocial.delicious {background-color: #3271cb;} |
865 | -.zocial.digg {background-color: #164673;} |
866 | -.zocial.disqus {background-color: #5d8aad;} |
867 | -.zocial.dribbble {background-color: #ea4c89;} |
868 | -.zocial.dropbox {background-color: #fff; color: #312c2a;} |
869 | -.zocial.email {background-color: #f0f0eb; color: #312c2a;} |
870 | -.zocial.eventasaurus {background-color: #192931; color: #fff;} |
871 | -.zocial.eventbrite {background-color: #ff5616;} |
872 | -.zocial.eventful {background-color: #fff; color: #47ab15;} |
873 | -.zocial.evernote {background-color: #6bb130; color: #fff;} |
874 | -.zocial.facebook {background-color: #4863ae;} |
875 | -.zocial.fivehundredpx {background-color: #333;} |
876 | -.zocial.flattr {background-color: #8aba42;} |
877 | -.zocial.flickr {background-color: #ff0084;} |
878 | -.zocial.forrst {background-color: #1e360d;} |
879 | -.zocial.foursquare {background-color: #44a8e0;} |
880 | -.zocial.github {background-color: #fbfbfb; color: #050505;} |
881 | -.zocial.gmail {background-color: #efefef; color: #222;} |
882 | -.zocial.google {background-color: #4e6cf7;} |
883 | -.zocial.googleplay {background-color: #000;} |
884 | -.zocial.googleplus {background-color: #dd4b39;} |
885 | -.zocial.gowalla {background-color: #ff720a;} |
886 | -.zocial.grooveshark {background-color: #111; color:#eee;} |
887 | -.zocial.guest {background-color: #1b4d6d;} |
888 | -.zocial.html5 {background-color: #ff3617;} |
889 | -.zocial.ie {background-color: #00a1d9;} |
890 | -.zocial.instapaper {background-color: #eee; color: #222;} |
891 | -.zocial.instagram {background-color: #3f729b;} |
892 | -.zocial.intensedebate {background-color: #0099e1;} |
893 | -.zocial.klout {background-color: #e34a25;} |
894 | -.zocial.itunes {background-color: #efefeb; color: #312c2a;} |
895 | -.zocial.lanyrd {background-color: #2e6ac2;} |
896 | -.zocial.lastfm {background-color: #dc1a23;} |
897 | -.zocial.linkedin {background-color: #0083a8;} |
898 | -.zocial.macstore {background-color: #007dcb} |
899 | -.zocial.meetup {background-color: #ff0026;} |
900 | -.zocial.myspace {background-color: #000;} |
901 | -.zocial.ninetyninedesigns {background-color: #fff; color: #072243;} |
902 | -.zocial.openid {background-color: #f5f5f5; color: #333;} |
903 | -.zocial.opentable {background-color: #990000;} |
904 | -.zocial.paypal {background-color: #fff; color: #32689a; text-shadow: 0 1px 0 rgba(255,255,255,0.5);} |
905 | -.zocial.pinboard {background-color: blue;} |
906 | -.zocial.pinterest {background-color: #c91618;} |
907 | -.zocial.plancast {background-color: #e7ebed; color: #333;} |
908 | -.zocial.plurk {background-color: #cf682f;} |
909 | -.zocial.podcast {background-color: #9365ce;} |
910 | -.zocial.posterous {background-color: #ffd959; color: #bc7134;} |
911 | -.zocial.print {background-color: #f0f0eb; color: #222; text-shadow: 0 1px 0 rgba(255,255,255,0.8);} |
912 | -.zocial.quora {background-color: #a82400;} |
913 | -.zocial.reddit {background-color: #fff; color: #222;} |
914 | -.zocial.rss {background-color: #ff7f25;} |
915 | -.zocial.scribd {background-color: #231c1a;} |
916 | -.zocial.skype {background-color: #00a2ed;} |
917 | -.zocial.smashing {background-color: #ff4f27;} |
918 | -.zocial.songkick {background-color: #ff0050;} |
919 | -.zocial.soundcloud {background-color: #ff4500;} |
920 | -.zocial.spotify {background-color: #60af00;} |
921 | -.zocial.stumbleupon {background-color: #eb4924;} |
922 | -.zocial.tumblr {background-color: #374a61;} |
923 | -.zocial.twitter {background-color: #46c0fb;} |
924 | -.zocial.viadeo {background-color: #fff; color: #000;} |
925 | -.zocial.vimeo {background-color: #00a2cd;} |
926 | -.zocial.weibo {background-color: #faf6f1; color: #000;} |
927 | -.zocial.wikipedia {background-color: #fff; color: #000;} |
928 | -.zocial.windows {background-color: #0052a4; color: #fff;} |
929 | -.zocial.wordpress {background-color: #464646;} |
930 | -.zocial.xing {background-color: #0A5D5E;} |
931 | -.zocial.yahoo {background-color: #a200c2;} |
932 | -.zocial.yelp {background-color: #e60010;} |
933 | -.zocial.youtube {background-color: #f00;} |
934 | - |
935 | -/* |
936 | -The Miscellaneous Buttons |
937 | -These button have no icons and can be general purpose buttons while ensuring consistent button style |
938 | -Credit to @guillermovs for suggesting |
939 | -*/ |
940 | - |
941 | -.zocial.primary, .zocial.secondary {margin: 0.1em 0; padding: 0 1em;} |
942 | -.zocial.primary:before, .zocial.secondary:before {display: none;} |
943 | -.zocial.primary {background-color: #333;} |
944 | -.zocial.secondary {background-color: #f0f0eb; color: #222; text-shadow: 0 1px 0 rgba(255,255,255,0.8);} |
945 | - |
946 | -/* Any browser-specific adjustments */ |
947 | - |
948 | -button:-moz-focus-inner { |
949 | - border: 0; |
950 | - padding: 0; |
951 | -} |
952 | - |
953 | - |
954 | |
955 | === removed file 'auth_oauth/static/lib/zocial/sample.html' |
956 | --- auth_oauth/static/lib/zocial/sample.html 2012-08-15 22:47:08 +0000 |
957 | +++ auth_oauth/static/lib/zocial/sample.html 1970-01-01 00:00:00 +0000 |
958 | @@ -1,265 +0,0 @@ |
959 | -<!DOCTYPE html> |
960 | -<html> |
961 | -<head> |
962 | - <meta charset="utf-8"> |
963 | - <title>Zocial CSS3 Buttons</title> |
964 | - <link rel="stylesheet" type="text/css" href="css/zocial.css" /> |
965 | - <link href='http://fonts.googleapis.com/css?family=Pompiere' rel='stylesheet' type='text/css'> |
966 | - |
967 | - <style> |
968 | - html { |
969 | - background: #f0f0eb; |
970 | - font-family: "Helvetica Neue", sans-serif; |
971 | - } |
972 | - h2, p { |
973 | - font-family: "Pompiere","Helvetica Neue", sans-serif; |
974 | - } |
975 | - body { |
976 | - background: #FFF; |
977 | - -webkit-box-shadow: 0 1px 1px rgba(0,0,0,0.5); |
978 | - -moz-box-shadow: 0 1px 1px rgba(0,0,0,0.5); |
979 | - box-shadow: 0 1px 1px rgba(0,0,0,0.5); |
980 | - -webkit-border-radius: 0 0 2px 2px; |
981 | - -moz-border-radius: 0 0 2px 2px; |
982 | - border-radius: 0 0 2px 2px; |
983 | - margin: 0 auto 2em; |
984 | - padding: 2em 1em; |
985 | - width: 600px; |
986 | - } |
987 | - body .zocial { |
988 | - margin: 8px 4px; |
989 | - font-size: 13px; |
990 | - } |
991 | - h2 { |
992 | - font-size: 17px; |
993 | - font-weight: normal; |
994 | - padding: 1em 0 0.75em; |
995 | - border-bottom: 1px solid #eee; |
996 | - } |
997 | - </style> |
998 | - |
999 | - <!--[if IE]><script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script><![endif]--> |
1000 | - |
1001 | -</head> |
1002 | - |
1003 | -<body> |
1004 | - <h2 id="popular-kids">The Popular Kids</h2> |
1005 | - <a href="#" class="zocial facebook">Sign in with Facebook</a> |
1006 | - <a href="#" class="zocial googleplus">Sign in with Google+</a> |
1007 | - <a href="#" class="zocial twitter">Sign in with Twitter</a> |
1008 | - <a href="#" class="zocial linkedin">Sign in with LinkedIn</a> |
1009 | - |
1010 | - <h2 id="cool-kids">The Cool Kids</h2> |
1011 | - <a href="#" class="zocial dropbox">Sync with Dropbox</a> |
1012 | - <a href="#" class="zocial evernote">Clip to Evernote</a> |
1013 | - <a href="#" class="zocial forrst">Follow me on Forrst</a> |
1014 | - <a href="#" class="zocial dribbble">Sign in with Dribbble</a> |
1015 | - <a href="#" class="zocial cloudapp">Sign in to CloudApp</a> |
1016 | - <a href="#" class="zocial github">Fork me on Github</a> |
1017 | - <a href="#" class="zocial spotify">Play on Spotify</a> |
1018 | - <a href="#" class="zocial instapaper">Read It Later</a> |
1019 | - <a href="#" class="zocial soundcloud">Follow me on Soundcloud</a> |
1020 | - <a href="#" class="zocial tumblr">Follow me on Tumblr</a> |
1021 | - <a href="#" class="zocial smashing">Read on Smashing Magazine</a> |
1022 | - <a href="#" class="zocial itunes">Available on iTunes</a> |
1023 | - <a href="#" class="zocial appstore">Available on the App Store</a> |
1024 | - <a href="#" class="zocial macstore">Available on the Mac App Store</a> |
1025 | - <a href="#" class="zocial android">Available on Android Market</a> |
1026 | - <a href="#" class="zocial pinterest">Follow me on Pinterest</a> |
1027 | - <a href="#" class="zocial quora">Follow me on Quora</a> |
1028 | - <a href="#" class="zocial lanyrd">Attend on Lanyrd</a> |
1029 | - |
1030 | - <h2 id="not-so-cool-kids">The Not-So-Cool But Have-To-Be-Invited Kids</h2> |
1031 | - <a href="#" class="zocial paypal">Pay with Paypal</a> |
1032 | - <a href="#" class="zocial amazon">Sign in with Amazon</a> |
1033 | - <a href="#" class="zocial skype">Call me on Skype</a> |
1034 | - <a href="#" class="zocial lastfm">Sign in with Last.fm</a> |
1035 | - <a href="#" class="zocial yelp">Write a review on Yelp</a> |
1036 | - <a href="#" class="zocial foursquare">Check in with foursquare</a> |
1037 | - <a href="#" class="zocial klout">Influence with Klout</a> |
1038 | - |
1039 | - <h2 id="older-kids">The Older (but Solid) Kids</h2> |
1040 | - <a href="#" class="zocial wikipedia">View on Wikipedia</a> |
1041 | - <a href="#" class="zocial disqus">Sign in with Disqus</a> |
1042 | - <a href="#" class="zocial intensedebate">Sign in with IntenseDebate</a> |
1043 | - <a href="#" class="zocial google">Sign in with Google</a> |
1044 | - <a href="#" class="zocial gmail">Sign in with Gmail</a> |
1045 | - <a href="#" class="zocial vimeo">Upload to Vimeo</a> |
1046 | - <a href="#" class="zocial scribd">Read more on Scribd</a> |
1047 | - <a href="#" class="zocial youtube">Subscribe on YouTube</a> |
1048 | - <a href="#" class="zocial wordpress">Sign in with WordPress</a> |
1049 | - <a href="#" class="zocial songkick">Sign in with Songkick</a> |
1050 | - <a href="#" class="zocial posterous">Sign in with Posterous</a> |
1051 | - <a href="#" class="zocial eventbrite">Sign in with Eventbrite</a> |
1052 | - <a href="#" class="zocial flattr">Tip with Flattr</a> |
1053 | - <a href="#" class="zocial plancast">Follow me on Plancast</a> |
1054 | - |
1055 | - |
1056 | - <h2 id="smelly-kids">The Kids That Kinda Smell but Some People Don't Mind</h2> |
1057 | - <a href="#" class="zocial yahoo">Submit resume for CEO</a> |
1058 | - <a href="#" class="zocial ie">Download Internet Explorer 5</a> |
1059 | - <a href="#" class="zocial meetup">Report bugs with Meetup.com</a> |
1060 | - <a href="#" class="zocial openid">Learn how-to-use OpenID</a> |
1061 | - <a href="#" class="zocial html5">Register now for HTML6</a> |
1062 | - <a href="#" class="zocial aol">Chat with your parents</a> |
1063 | - |
1064 | - <h2 id="quiet-kids">The Kids That Nobody Normally Notices</h2> |
1065 | - <a href="#" class="zocial guest">Sign in as guest</a> |
1066 | - <a href="#" class="zocial creativecommons">View Creative Commons Licence</a> |
1067 | - <a href="#" class="zocial rss">Subscribe to RSS</a> |
1068 | - <a href="#" class="zocial chrome">Add to Chrome</a> |
1069 | - |
1070 | - <h2>The He's-My-Son-So-Of-Course-He's-Here Kid</h2> |
1071 | - <a href="#" class="zocial eventasaurus">Sign up for Eventasaurus</a> |
1072 | - |
1073 | - <h2 id="kids-by-request">Kids By Request</h2> |
1074 | - <a href="#" class="zocial weibo">Join me on Weibo</a> |
1075 | - <a href="#" class="zocial plurk">Sign in with Plurk</a> |
1076 | - <a href="#" class="zocial grooveshark">Play on Grooveshark</a> |
1077 | - <a href="#" class="zocial blogger">Post on Blogger</a> |
1078 | - <a href="#" class="zocial viadeo">Sign in with Viadeo</a> |
1079 | - <a href="#" class="zocial podcast">Subscribe to this Podcast</a> |
1080 | - <a href="#" class="zocial fivehundredpx">View Portfolio on 500px</a> |
1081 | - <a href="#" class="zocial bitcoin">Bitcoin accepted here</a> |
1082 | - <a href="#" class="zocial ninetyninedesigns">View Portfolio on 99Designs</a> |
1083 | - <a href="#" class="zocial pinboard">Bookmark with Pinboard</a> |
1084 | - <a href="#" class="zocial stumbleupon">Stumble!</a> |
1085 | - <a href="#" class="zocial myspace">Find me on Myspace</a> |
1086 | - <a href="#" class="zocial windows">Sign in with Windows Live</a> |
1087 | - <a href="#" class="zocial eventful">Find Events with Eventful</a> |
1088 | - <a href="#" class="zocial xing">Sign in with Xing</a> |
1089 | - <a href="#" class="zocial flickr">Upload to Flickr</a> |
1090 | - <a href="#" class="zocial delicious">Sign in with Del.icio.us</a> |
1091 | - <a href="#" class="zocial googleplay">Download from Google Play</a> |
1092 | - <a href="#" class="zocial opentable">Reserve with OpenTable</a> |
1093 | - <a href="#" class="zocial digg">Digg this</a> |
1094 | - <a href="#" class="zocial reddit">Share on Reddit</a> |
1095 | - <a href="#" class="zocial angellist">Fund us on AngelList</a> |
1096 | - <a href="#" class="zocial instagram">Sign-in with Instagram</a> |
1097 | - |
1098 | - <h2 id="multipurpose-kids">The Multi-Purpose Kids (Credit: <a href="http://pictos.drewwilson.com">Pictos Icons</a>)</h2> |
1099 | - |
1100 | - <a href="#" class="zocial call">Call a phone</a> |
1101 | - <a href="#" class="zocial email">Send a message</a> |
1102 | - <a href="#" class="zocial cal">Add to calendar</a> |
1103 | - <a href="#" class="zocial cart">Add to cart</a> |
1104 | - <a href="#" class="zocial print">Print this page</a> |
1105 | - <a href="#" class="zocial primary" title="A primary button for general purposes to keep consistency with Zocial">Primary action</a> |
1106 | - <a href="#" class="zocial secondary" title="A secondary button for general purposes to keep consistency with Zocial">Secondary action</a> |
1107 | - |
1108 | - |
1109 | - <h2 id="icons">Icon versions of the above</h2> |
1110 | - <a href="#" class="zocial icon facebook">Sign in with Facebook</a> |
1111 | - <a href="#" class="zocial icon googleplus">Sign in with Google+</a> |
1112 | - <a href="#" class="zocial icon twitter">Sign in with Twitter</a> |
1113 | - <a href="#" class="zocial icon google">Sign in with Google</a> |
1114 | - <a href="#" class="zocial icon linkedin">Sign in with LinkedIn</a> |
1115 | - <a href="#" class="zocial icon paypal">Pay with Paypal</a> |
1116 | - <a href="#" class="zocial icon amazon">Sign in with Amazon</a> |
1117 | - <a href="#" class="zocial icon dropbox">Sync with Dropbox</a> |
1118 | - <a href="#" class="zocial icon evernote">Clip to Evernote</a> |
1119 | - <a href="#" class="zocial icon skype">Call me on Skype</a> |
1120 | - <a href="#" class="zocial icon guest">Sign in as guest</a> |
1121 | - <a href="#" class="zocial icon spotify">Play on Spotify</a> |
1122 | - <a href="#" class="zocial icon lastfm">Sign in with Last.fm</a> |
1123 | - <a href="#" class="zocial icon songkick">Sign in with Songkick</a> |
1124 | - <a href="#" class="zocial icon forrst">Follow me on Forrst</a> |
1125 | - <a href="#" class="zocial icon dribbble">Sign in with Dribbble</a> |
1126 | - <a href="#" class="zocial icon cloudapp">Sign in to CloudApp</a> |
1127 | - <a href="#" class="zocial icon github">Fork me on Github</a> |
1128 | - <a href="#" class="zocial pinterest icon">Follow me on Pinterest</a> |
1129 | - <a href="#" class="zocial quora icon">Follow me on Quora</a> |
1130 | - <a href="#" class="zocial pinboard icon">Bookmark with Pinboard</a> |
1131 | - <a href="#" class="zocial lanyrd icon">Attend on Lanyrd</a> |
1132 | - <a href="#" class="zocial icon itunes">Download on iTunes</a> |
1133 | - <a href="#" class="zocial icon android">Download on Android</a> |
1134 | - <a href="#" class="zocial icon disqus">Sign in with Disqus</a> |
1135 | - <a href="#" class="zocial icon yahoo">Sign in with Yahoo</a> |
1136 | - <a href="#" class="zocial icon vimeo">Upload to Vimeo</a> |
1137 | - <a href="#" class="zocial icon chrome">Add to Chrome</a> |
1138 | - <a href="#" class="zocial icon ie">Get a new browser</a> |
1139 | - <a href="#" class="zocial icon html5">Made from HTML5</a> |
1140 | - <a href="#" class="zocial icon instapaper">Read It Later</a> |
1141 | - <a href="#" class="zocial icon scribd">Read more on Scribd</a> |
1142 | - <a href="#" class="zocial icon wikipedia">View on Wikipedia</a> |
1143 | - <a href="#" class="zocial icon flattr">Tip with Flattr</a> |
1144 | - <a href="#" class="zocial icon tumblr">Follow me on Tumblr</a> |
1145 | - <a href="#" class="zocial icon posterous">Subscribe to my Posterous</a> |
1146 | - <a href="#" class="zocial icon gowalla">Check in with Gowalla</a> |
1147 | - <a href="#" class="zocial icon foursquare">Check in with foursquare</a> |
1148 | - <a href="#" class="zocial icon yelp">Write a review on Yelp</a> |
1149 | - <a href="#" class="zocial icon soundcloud">Follow me on Soundcloud</a> |
1150 | - <a href="#" class="zocial icon smashing">Read on Smashing Magazine</a> |
1151 | - <a href="#" class="zocial icon wordpress">Sign in with WordPress</a> |
1152 | - <a href="#" class="zocial icon intensedebate">Sign in with IntenseDebate</a> |
1153 | - <a href="#" class="zocial icon openid">Sign in with OpenID</a> |
1154 | - <a href="#" class="zocial icon gmail">Sign in with Gmail</a> |
1155 | - <a href="#" class="zocial icon eventbrite">Sign in with Eventbrite</a> |
1156 | - <a href="#" class="zocial icon eventasaurus">Sign in with Eventasaurus</a> |
1157 | - <a href="#" class="zocial icon meetup">Sign in with Meetup.com</a> |
1158 | - <a href="#" class="zocial icon aol">Sign in with AIM</a> |
1159 | - <a href="#" class="zocial icon plancast">Follow me on Plancast</a> |
1160 | - <a href="#" class="zocial icon youtube">Subscribe on YouTube</a> |
1161 | - <a href="#" class="zocial icon appstore">Available on the Mac App Store</a> |
1162 | - <a href="#" class="zocial icon creativecommons">View Creative Commons Licence</a> |
1163 | - <a href="#" class="zocial icon rss">Subscribe to RSS</a> |
1164 | - <a href="#" class="zocial weibo icon">Follow me on Weibo</a> |
1165 | - <a href="#" class="zocial plurk icon">Follow me on Plurk</a> |
1166 | - <a href="#" class="zocial grooveshark icon">Follow me on Grooveshark</a> |
1167 | - <a href="#" class="zocial blogger icon">Post on Blogger</a> |
1168 | - <a href="#" class="zocial viadeo icon">Sign in with Viadeo</a> |
1169 | - <a href="#" class="zocial podcast icon">Subscribe to this Podcast</a> |
1170 | - <a href="#" class="zocial fivehundredpx icon">View Portfolio on 500px</a> |
1171 | - <a href="#" class="zocial bitcoin icon">Bitcoin accepted here</a> |
1172 | - <a href="#" class="zocial ninetyninedesigns icon">View Portfolio on 99Designs</a> |
1173 | - <a href="#" class="zocial stumbleupon icon">Stumble!</a> |
1174 | - <a href="#" class="zocial itunes icon">Download on iTunes</a> |
1175 | - <a href="#" class="zocial myspace icon">Find me on Myspace</a> |
1176 | - <a href="#" class="zocial windows icon">Sign in with Windows Live</a> |
1177 | - <a href="#" class="zocial eventful icon">Find Events with Eventful</a> |
1178 | - <a href="#" class="zocial klout icon">Influence with Klout</a> |
1179 | - <a href="#" class="zocial xing icon">Sign in with Xing</a> |
1180 | - <a href="#" class="zocial flickr icon">Upload to Flickr</a> |
1181 | - <a href="#" class="zocial delicious icon">Sign in with Del.icio.us</a> |
1182 | - <a href="#" class="zocial googleplay icon">Download from Google Play</a> |
1183 | - <a href="#" class="zocial opentable icon">Reserve with OpenTable</a> |
1184 | - <a href="#" class="zocial digg icon">Digg this</a> |
1185 | - <a href="#" class="zocial reddit icon">Share on Reddit</a> |
1186 | - <a href="#" class="zocial angellist icon">Fund us on AngelList</a> |
1187 | - <a href="#" class="zocial instagram icon">Sign-in with Instagram</a> |
1188 | - <a href="#" class="zocial call icon">Call a phone</a> |
1189 | - <a href="#" class="zocial email icon">Send a message</a> |
1190 | - <a href="#" class="zocial cal icon">Add to calendar</a> |
1191 | - <a href="#" class="zocial print icon">Print this page</a> |
1192 | - <a href="#" class="zocial cart icon">Add to cart</a> |
1193 | - |
1194 | - |
1195 | - |
1196 | - <p>Thanks to <a href="http://twitter.com/guillermovs" target="_blank">@guillermovs</a>, <a href="http://twitter.com/kamens" target="_blank">@kamens</a>, <a href="http://twitter.com/vizualover" target="_blank">@vizualover</a>, and <a href="http://twitter.com/leaverou" target="_blank">@leaverou</a> for code refinements and suggestions.</p> |
1197 | - |
1198 | - <p>Massive thanks to <a href="http://twitter.com/drewwilson" target="_blank">@drewwilson</a> for making the multi-purpose buttons possible with his incredible <a href="http://pictos.drewwilson.com">Pictos icons</a>.</p> |
1199 | - |
1200 | - <p>See code samples at <a href="http://zocial.smcllns.com">zocial.smcllns.com</a> — ask questions to <a href="http://twitter.com/smcllns">@smcllns</a></p> |
1201 | - |
1202 | - <a href="https://twitter.com/share" class="twitter-share-button" data-url="http://zocial.smcllns.com" data-via="smcllns">Tweet</a> |
1203 | - <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="http://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script> |
1204 | - |
1205 | - <script type="text/javascript"> |
1206 | - |
1207 | - var _gaq = _gaq || []; |
1208 | - _gaq.push(['_setAccount', 'UA-25061452-1']); |
1209 | - _gaq.push(['_setDomainName', 'smcllns.com']); |
1210 | - _gaq.push(['_setAllowHash', 'false']); |
1211 | - _gaq.push(['_trackPageview']); |
1212 | - _gaq.push(['_trackPageLoadTime']); |
1213 | - |
1214 | - (function() { |
1215 | - var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; |
1216 | - ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; |
1217 | - var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); |
1218 | - })(); |
1219 | - |
1220 | - </script> |
1221 | - |
1222 | -</body> |
1223 | -</html> |
1224 | |
1225 | === removed directory 'auth_oauth/static/src' |
1226 | === removed directory 'auth_oauth/static/src/css' |
1227 | === removed file 'auth_oauth/static/src/css/auth_oauth.css' |
1228 | --- auth_oauth/static/src/css/auth_oauth.css 2012-11-28 00:14:49 +0000 |
1229 | +++ auth_oauth/static/src/css/auth_oauth.css 1970-01-01 00:00:00 +0000 |
1230 | @@ -1,34 +0,0 @@ |
1231 | -.openerp .oe_application .zocial { |
1232 | - font: white; |
1233 | -} |
1234 | - |
1235 | -.openerp .zocial.openerp:before { |
1236 | - content: "\E02E"; |
1237 | - font-style: italic; |
1238 | - text-shadow: 0 1px 1px black; |
1239 | -} |
1240 | - |
1241 | -.openerp a.zocial.openerp { |
1242 | - border: 1px solid #222222; |
1243 | - color: white; |
1244 | - margin: 0; |
1245 | - background-color: #b92020; |
1246 | - background-image: -webkit-gradient(linear, left top, left bottom, from(#b92020), to(#600606)); |
1247 | - background-image: -webkit-linear-gradient(top, #b92020, #600606); |
1248 | - background-image: -moz-linear-gradient(top, #b92020, #600606); |
1249 | - background-image: -ms-linear-gradient(top, #b92020, #600606); |
1250 | - background-image: -o-linear-gradient(top, #b92020, #600606); |
1251 | - background-image: linear-gradient(to bottom, #b92020, #600606); |
1252 | - -moz-border-radius: 4px; |
1253 | - -webkit-border-radius: 4px; |
1254 | - border-radius: 4px; |
1255 | - -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(155, 155, 155, 0.4) inset; |
1256 | - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(155, 155, 155, 0.4) inset; |
1257 | - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 1px rgba(155, 155, 155, 0.4) inset; |
1258 | - text-shadow: none; |
1259 | - font-weight: normal; |
1260 | -} |
1261 | - |
1262 | -.openerp .oe_login .oe_oauth_provider_login_button { |
1263 | - margin-top: 4px; |
1264 | -} |
1265 | |
1266 | === removed directory 'auth_oauth/static/src/js' |
1267 | === removed file 'auth_oauth/static/src/js/auth_oauth.js' |
1268 | --- auth_oauth/static/src/js/auth_oauth.js 2013-10-27 12:31:04 +0000 |
1269 | +++ auth_oauth/static/src/js/auth_oauth.js 1970-01-01 00:00:00 +0000 |
1270 | @@ -1,80 +0,0 @@ |
1271 | -openerp.auth_oauth = function(instance) { |
1272 | - var _t = instance.web._t, |
1273 | - _lt = instance.web._lt; |
1274 | - var QWeb = instance.web.qweb; |
1275 | - |
1276 | - instance.web.Login.include({ |
1277 | - start: function(parent, params) { |
1278 | - var self = this; |
1279 | - var d = this._super.apply(this, arguments); |
1280 | - this.$el.hide(); |
1281 | - this.$el.on('click', 'a.zocial', this.on_oauth_sign_in); |
1282 | - this.oauth_providers = []; |
1283 | - if(this.params.oauth_error === 1) { |
1284 | - this.do_warn(_t("Sign up error"),_t("Sign up is not allowed on this database."), true); |
1285 | - } else if(this.params.oauth_error === 2) { |
1286 | - this.do_warn(_t("Authentication error"),_t("Access Denied"), true); |
1287 | - } else if(this.params.oauth_error === 3) { |
1288 | - this.do_warn(_t("Authentication error"),_t("You do not have access to this database or your invitation has expired. Please ask for an invitation and be sure to follow the link in your invitation email."), true); |
1289 | - } |
1290 | - return d.done(this.do_oauth_load).fail(function() { |
1291 | - self.do_oauth_load([]); |
1292 | - }); |
1293 | - }, |
1294 | - on_db_loaded: function(result) { |
1295 | - this._super.apply(this, arguments); |
1296 | - this.$("form [name=db]").change(this.do_oauth_load); |
1297 | - }, |
1298 | - do_oauth_load: function() { |
1299 | - var db = this.$("form [name=db]").val(); |
1300 | - if (db) { |
1301 | - this.rpc("/auth_oauth/list_providers", { dbname: db }).done(this.on_oauth_loaded); |
1302 | - } else { |
1303 | - this.$el.show(); |
1304 | - } |
1305 | - }, |
1306 | - on_oauth_loaded: function(result) { |
1307 | - this.oauth_providers = result; |
1308 | - var params = $.deparam($.param.querystring()); |
1309 | - if (this.oauth_providers.length === 1 && params.type === 'signup') { |
1310 | - this.do_oauth_sign_in(this.oauth_providers[0]); |
1311 | - } else { |
1312 | - this.$el.show(); |
1313 | - this.$('.oe_oauth_provider_login_button').remove(); |
1314 | - var buttons = QWeb.render("auth_oauth.Login.button",{"widget":this}); |
1315 | - this.$(".oe_login_pane form ul").after(buttons); |
1316 | - } |
1317 | - }, |
1318 | - on_oauth_sign_in: function(ev) { |
1319 | - ev.preventDefault(); |
1320 | - var index = $(ev.target).data('index'); |
1321 | - var provider = this.oauth_providers[index]; |
1322 | - return this.do_oauth_sign_in(provider); |
1323 | - }, |
1324 | - do_oauth_sign_in: function(provider) { |
1325 | - var return_url = _.str.sprintf('%s//%s/auth_oauth/signin', location.protocol, location.host); |
1326 | - if (instance.session.debug) { |
1327 | - return_url += '?debug'; |
1328 | - } |
1329 | - var state = this._oauth_state(provider); |
1330 | - var params = { |
1331 | - response_type: 'token', |
1332 | - client_id: provider.client_id, |
1333 | - redirect_uri: return_url, |
1334 | - scope: provider.scope, |
1335 | - state: JSON.stringify(state), |
1336 | - }; |
1337 | - var url = provider.auth_endpoint + '?' + $.param(params); |
1338 | - instance.web.redirect(url); |
1339 | - }, |
1340 | - _oauth_state: function(provider) { |
1341 | - // return the state object sent back with the redirected uri |
1342 | - var dbname = this.$("form [name=db]").val(); |
1343 | - return { |
1344 | - d: dbname, |
1345 | - p: provider.id, |
1346 | - }; |
1347 | - }, |
1348 | - }); |
1349 | - |
1350 | -}; |
1351 | |
1352 | === removed directory 'auth_oauth/static/src/xml' |
1353 | === removed file 'auth_oauth/static/src/xml/auth_oauth.xml' |
1354 | --- auth_oauth/static/src/xml/auth_oauth.xml 2012-09-27 12:34:29 +0000 |
1355 | +++ auth_oauth/static/src/xml/auth_oauth.xml 1970-01-01 00:00:00 +0000 |
1356 | @@ -1,8 +0,0 @@ |
1357 | -<?xml version="1.0" encoding="UTF-8"?> |
1358 | -<templates id="template" xml:space="preserve"> |
1359 | -<t t-name="auth_oauth.Login.button"> |
1360 | - <t t-foreach="widget.oauth_providers" t-as="p"> |
1361 | - <a href="#" t-attf-class="oe_oauth_provider_login_button #{p.css_class}" t-att-data-index="p_index"><t t-esc="p.body"/></a> |
1362 | - </t> |
1363 | -</t> |
1364 | -</templates> |
1365 | |
1366 | === added directory 'auth_oauth/views' |
1367 | === added file 'auth_oauth/views/auth_oauth_login.xml' |
1368 | --- auth_oauth/views/auth_oauth_login.xml 1970-01-01 00:00:00 +0000 |
1369 | +++ auth_oauth/views/auth_oauth_login.xml 2014-01-31 00:21:10 +0000 |
1370 | @@ -0,0 +1,19 @@ |
1371 | +<?xml version="1.0" encoding="utf-8"?> |
1372 | +<!-- vim:fdn=3: |
1373 | +--> |
1374 | +<openerp> |
1375 | + <data> |
1376 | + <template id="auth_oauth.login" inherit_id="web.login" name="OAuth Login buttons"> |
1377 | + <xpath expr="//button[@type='submit']" position="before"> |
1378 | + <div class="pull-right"> |
1379 | + <div t-foreach="providers" t-as="p"> |
1380 | + <a t-att-href="p['auth_link']" class="btn btn-link"> |
1381 | + <i t-att-class="p['css_class']"/> |
1382 | + <t t-esc="p['body']"/> |
1383 | + </a> |
1384 | + </div> |
1385 | + </div> |
1386 | + </xpath> |
1387 | + </template> |
1388 | + </data> |
1389 | +</openerp> |
1390 | |
1391 | === modified file 'auth_oauth_signup/__init__.py' |
1392 | --- auth_oauth_signup/__init__.py 2012-11-26 10:52:42 +0000 |
1393 | +++ auth_oauth_signup/__init__.py 2014-01-31 00:21:10 +0000 |
1394 | @@ -20,3 +20,4 @@ |
1395 | ############################################################################## |
1396 | |
1397 | import res_users |
1398 | +import controllers |
1399 | |
1400 | === modified file 'auth_oauth_signup/__openerp__.py' |
1401 | --- auth_oauth_signup/__openerp__.py 2012-11-26 10:52:42 +0000 |
1402 | +++ auth_oauth_signup/__openerp__.py 2014-01-31 00:21:10 +0000 |
1403 | @@ -31,7 +31,7 @@ |
1404 | 'website': 'http://www.openerp.com', |
1405 | 'depends': ['auth_oauth', 'auth_signup'], |
1406 | 'data': [], |
1407 | - 'js': ['static/src/js/auth_oauth_signup.js'], |
1408 | + 'js': [], |
1409 | 'css': [], |
1410 | 'qweb': [], |
1411 | 'installable': True, |
1412 | |
1413 | === added directory 'auth_oauth_signup/controllers' |
1414 | === added file 'auth_oauth_signup/controllers/__init__.py' |
1415 | --- auth_oauth_signup/controllers/__init__.py 1970-01-01 00:00:00 +0000 |
1416 | +++ auth_oauth_signup/controllers/__init__.py 2014-01-31 00:21:10 +0000 |
1417 | @@ -0,0 +1,3 @@ |
1418 | +import main |
1419 | + |
1420 | +# vim:expandtab:tabstop=4:softtabstop=4:shiftwidth=4: |
1421 | |
1422 | === added file 'auth_oauth_signup/controllers/main.py' |
1423 | --- auth_oauth_signup/controllers/main.py 1970-01-01 00:00:00 +0000 |
1424 | +++ auth_oauth_signup/controllers/main.py 2014-01-31 00:21:10 +0000 |
1425 | @@ -0,0 +1,20 @@ |
1426 | +import openerp |
1427 | +import werkzeug |
1428 | + |
1429 | +from openerp.http import request |
1430 | + |
1431 | +class OAuthSignupLogin(openerp.addons.web.controllers.main.Home): |
1432 | + def list_providers(self): |
1433 | + providers = super(OAuthSignupLogin, self).list_providers() |
1434 | + if len(providers) == 1 and request.params.get('mode') == 'signup': |
1435 | + werkzeug.exceptions.abort(werkzeug.utils.redirect(providers[0]['auth_link'], 303)) |
1436 | + return providers |
1437 | + |
1438 | + def get_state(self, provider): |
1439 | + state = super(OAuthSignupLogin, self).get_state(provider) |
1440 | + token = request.params.get('token') |
1441 | + if token: |
1442 | + state['t'] = token |
1443 | + return state |
1444 | + |
1445 | +# vim:expandtab:tabstop=4:softtabstop=4:shiftwidth=4: |
1446 | |
1447 | === removed directory 'auth_oauth_signup/static' |
1448 | === removed directory 'auth_oauth_signup/static/src' |
1449 | === removed directory 'auth_oauth_signup/static/src/js' |
1450 | === removed file 'auth_oauth_signup/static/src/js/auth_oauth_signup.js' |
1451 | --- auth_oauth_signup/static/src/js/auth_oauth_signup.js 2012-11-26 10:52:42 +0000 |
1452 | +++ auth_oauth_signup/static/src/js/auth_oauth_signup.js 1970-01-01 00:00:00 +0000 |
1453 | @@ -1,14 +0,0 @@ |
1454 | -openerp.auth_oauth_signup = function(instance) { |
1455 | - |
1456 | - // override Login._oauth_state to add the signup token in the state |
1457 | - instance.web.Login.include({ |
1458 | - _oauth_state: function(provider) { |
1459 | - var state = this._super.apply(this, arguments); |
1460 | - if (this.params.token) { |
1461 | - state.t = this.params.token; |
1462 | - } |
1463 | - return state; |
1464 | - }, |
1465 | - }); |
1466 | - |
1467 | -}; |
1468 | |
1469 | === modified file 'auth_openid/controllers/main.py' |
1470 | --- auth_openid/controllers/main.py 2013-11-27 15:32:57 +0000 |
1471 | +++ auth_openid/controllers/main.py 2014-01-31 00:21:10 +0000 |
1472 | @@ -23,7 +23,6 @@ |
1473 | import os |
1474 | import tempfile |
1475 | import getpass |
1476 | -import urllib |
1477 | |
1478 | import werkzeug.urls |
1479 | import werkzeug.exceptions |
1480 | @@ -79,7 +78,7 @@ |
1481 | # update fields |
1482 | for attr in ['claimed_id', 'identity']: |
1483 | value = message.getArg(consumer.OPENID2_NS, attr, '') |
1484 | - value = 'https://www.google.com/accounts/o8/user-xrds?uri=%s' % urllib.quote_plus(value) |
1485 | + value = 'https://www.google.com/accounts/o8/user-xrds?uri=%s' % werkzeug.url_quote_plus(value) |
1486 | message.setArg(consumer.OPENID2_NS, attr, value) |
1487 | |
1488 | # now, resign the message |
1489 | |
1490 | === modified file 'auth_openid/static/src/js/auth_openid.js' |
1491 | --- auth_openid/static/src/js/auth_openid.js 2013-10-27 12:31:04 +0000 |
1492 | +++ auth_openid/static/src/js/auth_openid.js 2014-01-31 00:21:10 +0000 |
1493 | @@ -3,6 +3,7 @@ |
1494 | |
1495 | var QWeb = instance.web.qweb; |
1496 | |
1497 | +/* TODO: make this a server side controller |
1498 | instance.web.Login = instance.web.Login.extend({ |
1499 | start: function() { |
1500 | var self = this; |
1501 | @@ -149,6 +150,7 @@ |
1502 | } |
1503 | |
1504 | }); |
1505 | +*/ |
1506 | |
1507 | |
1508 | }; |
1509 | |
1510 | === modified file 'auth_signup/__openerp__.py' |
1511 | --- auth_signup/__openerp__.py 2013-10-27 12:31:04 +0000 |
1512 | +++ auth_signup/__openerp__.py 2014-01-31 00:21:10 +0000 |
1513 | @@ -34,13 +34,14 @@ |
1514 | 'depends': [ |
1515 | 'base_setup', |
1516 | 'email_template', |
1517 | + 'web', |
1518 | ], |
1519 | 'data': [ |
1520 | 'auth_signup_data.xml', |
1521 | 'res_config.xml', |
1522 | 'res_users_view.xml', |
1523 | + 'views/auth_signup_login.xml', |
1524 | ], |
1525 | 'js': ['static/src/js/auth_signup.js'], |
1526 | - 'qweb': ['static/src/xml/auth_signup.xml'], |
1527 | 'bootstrap': True, |
1528 | } |
1529 | |
1530 | === modified file 'auth_signup/auth_signup_data.xml' |
1531 | --- auth_signup/auth_signup_data.xml 2013-12-04 13:00:23 +0000 |
1532 | +++ auth_signup/auth_signup_data.xml 2014-01-31 00:21:10 +0000 |
1533 | @@ -10,7 +10,7 @@ |
1534 | <field name="password"></field> |
1535 | <field name="active" eval="False"/> |
1536 | <!-- Avoid auto-including this user in any default group, just like a typical portal member --> |
1537 | - <field name="groups_id" eval="[(5,)]"/> |
1538 | + <field name="groups_id" eval="[(4,ref('base.group_portal'))]"/> |
1539 | <!-- allow signuped users to have a alias --> |
1540 | <field name="alias_name">_usertemplate</field> |
1541 | </record> |
1542 | |
1543 | === modified file 'auth_signup/controllers/main.py' |
1544 | --- auth_signup/controllers/main.py 2013-11-27 15:32:57 +0000 |
1545 | +++ auth_signup/controllers/main.py 2014-01-31 00:21:10 +0000 |
1546 | @@ -21,64 +21,77 @@ |
1547 | import logging |
1548 | |
1549 | import openerp |
1550 | +import openerp.addons.web.controllers.main as webmain |
1551 | +from openerp.addons.auth_signup.res_users import SignupError |
1552 | from openerp import http |
1553 | -from openerp.http import request |
1554 | -from openerp.modules.registry import RegistryManager |
1555 | -from ..res_users import SignupError |
1556 | +from openerp.http import request, LazyResponse |
1557 | +from openerp.tools.translate import _ |
1558 | +from openerp.tools import exception_to_unicode |
1559 | |
1560 | _logger = logging.getLogger(__name__) |
1561 | |
1562 | -class Controller(http.Controller): |
1563 | - |
1564 | - @http.route('/auth_signup/get_config', type='json', auth="none") |
1565 | - def get_config(self, dbname): |
1566 | - """ retrieve the module config (which features are enabled) for the login page """ |
1567 | - registry = RegistryManager.get(dbname) |
1568 | - with registry.cursor() as cr: |
1569 | - icp = registry.get('ir.config_parameter') |
1570 | - config = { |
1571 | - 'signup': icp.get_param(cr, openerp.SUPERUSER_ID, 'auth_signup.allow_uninvited') == 'True', |
1572 | - 'reset_password': icp.get_param(cr, openerp.SUPERUSER_ID, 'auth_signup.reset_password') == 'True', |
1573 | - } |
1574 | - return config |
1575 | - |
1576 | - @http.route('/auth_signup/retrieve', type='json', auth="none") |
1577 | - def retrieve(self, dbname, token): |
1578 | - """ retrieve the user info (name, login or email) corresponding to a signup token """ |
1579 | - registry = RegistryManager.get(dbname) |
1580 | - with registry.cursor() as cr: |
1581 | - res_partner = registry.get('res.partner') |
1582 | - user_info = res_partner.signup_retrieve_info(cr, openerp.SUPERUSER_ID, token) |
1583 | - return user_info |
1584 | - |
1585 | - @http.route('/auth_signup/signup', type='json', auth="none") |
1586 | - def signup(self, dbname, token, **values): |
1587 | - """ sign up a user (new or existing)""" |
1588 | - try: |
1589 | - self._signup_with_values(dbname, token, values) |
1590 | - except SignupError, e: |
1591 | - return {'error': openerp.tools.exception_to_unicode(e)} |
1592 | - return {} |
1593 | - |
1594 | - def _signup_with_values(self, dbname, token, values): |
1595 | - registry = RegistryManager.get(dbname) |
1596 | - with registry.cursor() as cr: |
1597 | - res_users = registry.get('res.users') |
1598 | - res_users.signup(cr, openerp.SUPERUSER_ID, values, token) |
1599 | - |
1600 | - @http.route('/auth_signup/reset_password', type='json', auth="none") |
1601 | - def reset_password(self, dbname, login): |
1602 | - """ retrieve user, and perform reset password """ |
1603 | - registry = RegistryManager.get(dbname) |
1604 | - with registry.cursor() as cr: |
1605 | +class Home(openerp.addons.web.controllers.main.Home): |
1606 | + |
1607 | + @http.route() |
1608 | + def web_login(self, *args, **kw): |
1609 | + mode = request.params.get('mode') |
1610 | + qcontext = request.params.copy() |
1611 | + response = webmain.render_bootstrap_template(request.session.db, 'auth_signup.signup', qcontext, lazy=True) |
1612 | + token = qcontext.get('token', None) |
1613 | + token_infos = None |
1614 | + if token: |
1615 | try: |
1616 | - res_users = registry.get('res.users') |
1617 | - res_users.reset_password(cr, openerp.SUPERUSER_ID, login) |
1618 | - cr.commit() |
1619 | - except Exception as e: |
1620 | - # signup error |
1621 | - _logger.exception('error when resetting password') |
1622 | - raise(e) |
1623 | - return True |
1624 | + # retrieve the user info (name, login or email) corresponding to a signup token |
1625 | + res_partner = request.registry.get('res.partner') |
1626 | + token_infos = res_partner.signup_retrieve_info(request.cr, openerp.SUPERUSER_ID, token) |
1627 | + for k, v in token_infos.items(): |
1628 | + qcontext.setdefault(k, v) |
1629 | + except: |
1630 | + qcontext['error'] = _("Invalid signup token") |
1631 | + response.params['template'] = 'web.login' |
1632 | + return response |
1633 | + |
1634 | + # retrieve the module config (which features are enabled) for the login page |
1635 | + icp = request.registry.get('ir.config_parameter') |
1636 | + config = { |
1637 | + 'signup': icp.get_param(request.cr, openerp.SUPERUSER_ID, 'auth_signup.allow_uninvited') == 'True', |
1638 | + 'reset': icp.get_param(request.cr, openerp.SUPERUSER_ID, 'auth_signup.reset_password') == 'True', |
1639 | + } |
1640 | + qcontext.update(config) |
1641 | + |
1642 | + if 'error' in qcontext or mode not in ('reset', 'signup') or (not token and not config[mode]): |
1643 | + response = super(Home, self).web_login(*args, **kw) |
1644 | + if isinstance(response, LazyResponse): |
1645 | + response.params['values'].update(config) |
1646 | + return response |
1647 | + |
1648 | + if request.httprequest.method == 'GET': |
1649 | + if token_infos: |
1650 | + qcontext.update(token_infos) |
1651 | + else: |
1652 | + res_users = request.registry.get('res.users') |
1653 | + login = request.params.get('login') |
1654 | + if mode == 'reset' and not token: |
1655 | + try: |
1656 | + res_users.reset_password(request.cr, openerp.SUPERUSER_ID, login) |
1657 | + qcontext['message'] = _("An email has been sent with credentials to reset your password") |
1658 | + response.params['template'] = 'web.login' |
1659 | + except Exception: |
1660 | + qcontext['error'] = _("Could not reset your password") |
1661 | + _logger.exception('error when resetting password') |
1662 | + else: |
1663 | + values = dict((key, qcontext.get(key)) for key in ('login', 'name', 'password')) |
1664 | + try: |
1665 | + self._signup_with_values(token, values) |
1666 | + request.cr.commit() |
1667 | + except SignupError, e: |
1668 | + qcontext['error'] = exception_to_unicode(e) |
1669 | + return super(Home, self).web_login(*args, **kw) |
1670 | + |
1671 | + return response |
1672 | + |
1673 | + def _signup_with_values(self, token, values): |
1674 | + request.registry['res.users'].signup(request.cr, openerp.SUPERUSER_ID, values, token) |
1675 | + |
1676 | |
1677 | # vim:expandtab:tabstop=4:softtabstop=4:shiftwidth=4: |
1678 | |
1679 | === modified file 'auth_signup/res_config.xml' |
1680 | --- auth_signup/res_config.xml 2012-12-12 12:40:49 +0000 |
1681 | +++ auth_signup/res_config.xml 2014-01-31 00:21:10 +0000 |
1682 | @@ -7,7 +7,7 @@ |
1683 | <field name="model">base.config.settings</field> |
1684 | <field name="inherit_id" ref="base_setup.view_general_configuration"/> |
1685 | <field name="arch" type="xml"> |
1686 | - <xpath expr="//field[@name='module_portal_anonymous']/.." position="after"> |
1687 | + <xpath expr="//field[@name='module_portal']/.." position="after"> |
1688 | <div> |
1689 | <field name="auth_signup_reset_password" class="oe_inline"/> |
1690 | <label for="auth_signup_reset_password"/> |
1691 | |
1692 | === modified file 'auth_signup/res_users.py' |
1693 | --- auth_signup/res_users.py 2013-12-04 13:00:23 +0000 |
1694 | +++ auth_signup/res_users.py 2014-01-31 00:21:10 +0000 |
1695 | @@ -66,19 +66,20 @@ |
1696 | self.signup_prepare(cr, uid, [partner.id], context=context) |
1697 | partner.refresh() |
1698 | |
1699 | - # the parameters to encode for the query and fragment part of url |
1700 | - query = {'db': cr.dbname} |
1701 | + # the parameters to encode for the query |
1702 | + query = dict(db=cr.dbname) |
1703 | signup_type = context.get('signup_force_type_in_url', partner.signup_type or '') |
1704 | - fragment = {'action': action, 'type': signup_type} |
1705 | + if signup_type: |
1706 | + query['mode'] = signup_type |
1707 | |
1708 | if partner.signup_token and signup_type: |
1709 | - fragment['token'] = partner.signup_token |
1710 | + query['token'] = partner.signup_token |
1711 | elif partner.user_ids: |
1712 | - fragment['db'] = cr.dbname |
1713 | - fragment['login'] = partner.user_ids[0].login |
1714 | + query['login'] = partner.user_ids[0].login |
1715 | else: |
1716 | continue # no signup token, no user, thus no signup url! |
1717 | |
1718 | + fragment = dict() |
1719 | if view_type: |
1720 | fragment['view_type'] = view_type |
1721 | if menu_id: |
1722 | @@ -88,7 +89,7 @@ |
1723 | if res_id: |
1724 | fragment['id'] = res_id |
1725 | |
1726 | - res[partner.id] = urljoin(base_url, "?%s#%s" % (urlencode(query), urlencode(fragment))) |
1727 | + res[partner.id] = urljoin(base_url, "/web/login?%s#%s" % (urlencode(query), urlencode(fragment))) |
1728 | |
1729 | return res |
1730 | |
1731 | @@ -262,6 +263,7 @@ |
1732 | template = False |
1733 | if context.get('create_user'): |
1734 | try: |
1735 | + # get_object() raises ValueError if record does not exist |
1736 | template = self.pool.get('ir.model.data').get_object(cr, uid, 'auth_signup', 'set_password_email') |
1737 | except ValueError: |
1738 | pass |
1739 | @@ -272,10 +274,7 @@ |
1740 | for user in self.browse(cr, uid, ids, context): |
1741 | if not user.email: |
1742 | raise osv.except_osv(_("Cannot send email: user has no email address."), user.name) |
1743 | - try: |
1744 | - self.pool.get('email.template').send_mail(cr, uid, template.id, user.id, force_send=True, raise_exception=True, context=context) |
1745 | - except Exception: |
1746 | - raise |
1747 | + self.pool.get('email.template').send_mail(cr, uid, template.id, user.id, force_send=True, raise_exception=True, context=context) |
1748 | |
1749 | def create(self, cr, uid, values, context=None): |
1750 | if context is None: |
1751 | |
1752 | === modified file 'auth_signup/static/src/js/auth_signup.js' |
1753 | --- auth_signup/static/src/js/auth_signup.js 2013-11-27 15:32:57 +0000 |
1754 | +++ auth_signup/static/src/js/auth_signup.js 2014-01-31 00:21:10 +0000 |
1755 | @@ -1,186 +1,19 @@ |
1756 | openerp.auth_signup = function(instance) { |
1757 | - instance.auth_signup = instance.auth_signup || {}; |
1758 | - var _t = instance.web._t; |
1759 | - |
1760 | - instance.web.Login.include({ |
1761 | - start: function() { |
1762 | - var self = this; |
1763 | - this.signup_enabled = false; |
1764 | - this.reset_password_enabled = false; |
1765 | - return this._super().always(function() { |
1766 | - |
1767 | - // Switches the login box to the select mode whith mode == [default|signup|reset] |
1768 | - self.on('change:login_mode', self, function() { |
1769 | - var mode = self.get('login_mode') || 'default'; |
1770 | - self.$('*[data-modes]').each(function() { |
1771 | - var modes = $(this).data('modes').split(/\s+/); |
1772 | - $(this).toggle(modes.indexOf(mode) > -1); |
1773 | - }); |
1774 | - self.$('a.oe_signup_signup:visible').toggle(self.signup_enabled); |
1775 | - self.$('a.oe_signup_reset_password:visible').toggle(self.reset_password_enabled); |
1776 | - }); |
1777 | - |
1778 | - // to switch between the signup and regular login form |
1779 | - self.$('a.oe_signup_signup').click(function(ev) { |
1780 | - self.set('login_mode', 'signup'); |
1781 | - return false; |
1782 | - }); |
1783 | - self.$('a.oe_signup_back').click(function(ev) { |
1784 | - self.set('login_mode', 'default'); |
1785 | - delete self.params.token; |
1786 | - return false; |
1787 | - }); |
1788 | - |
1789 | - var dbname = self.selected_db; |
1790 | - |
1791 | - // if there is an error message in params, show it then forget it |
1792 | - if (self.params.error_message) { |
1793 | - self.show_error(self.params.error_message); |
1794 | - delete self.params.error_message; |
1795 | - } |
1796 | - |
1797 | - if (dbname && self.params.login) { |
1798 | - self.$("form input[name=login]").val(self.params.login); |
1799 | - } |
1800 | - |
1801 | - // bind reset password link |
1802 | - self.$('a.oe_signup_reset_password').click(self.do_reset_password); |
1803 | - |
1804 | - if (dbname) { |
1805 | - self.rpc("/auth_signup/get_config", {dbname: dbname}).then(function(result) { |
1806 | - self.signup_enabled = result.signup; |
1807 | - self.reset_password_enabled = result.reset_password; |
1808 | - if (!self.signup_enabled || self.$("form input[name=login]").val()){ |
1809 | - self.set('login_mode', self.params.type || 'default'); |
1810 | - } else { |
1811 | - self.set('login_mode', 'signup'); |
1812 | - } |
1813 | - |
1814 | - // in case of a signup, retrieve the user information from the token |
1815 | - if (self.params.token) { |
1816 | - self.rpc("/auth_signup/retrieve", {dbname: dbname, token: self.params.token}) |
1817 | - .then(self.on_token_loaded, self.on_token_failed); |
1818 | - } |
1819 | - |
1820 | - }); |
1821 | - } else { |
1822 | - // TODO: support multiple database mode |
1823 | - self.set('login_mode', self.params.type || 'default'); |
1824 | - } |
1825 | - }); |
1826 | - }, |
1827 | - |
1828 | - on_token_loaded: function(result) { |
1829 | - // select the right the database |
1830 | - this.selected_db = result.db; |
1831 | - this.on_db_loaded([result.db]); |
1832 | - if (result.token) { |
1833 | - // switch to signup mode, set user name and login |
1834 | - this.set('login_mode', (this.params.type === 'reset' ? 'reset' : 'signup')); |
1835 | - this.$("form input[name=name]").val(result.name).attr("readonly", "readonly"); |
1836 | - if (result.login) { |
1837 | - this.$("form input[name=login]").val(result.login).attr("readonly", "readonly"); |
1838 | - } else { |
1839 | - this.$("form input[name=login]").val(result.email); |
1840 | - } |
1841 | - } else { |
1842 | - // remain in login mode, set login if present |
1843 | - delete this.params.token; |
1844 | - this.set('login_mode', 'default'); |
1845 | - this.$("form input[name=login]").val(result.login || ""); |
1846 | - } |
1847 | - }, |
1848 | - |
1849 | - on_token_failed: function(result, ev) { |
1850 | - if (ev) { |
1851 | - ev.preventDefault(); |
1852 | - } |
1853 | - this.show_error(_t("Invalid signup token")); |
1854 | - delete this.params.db; |
1855 | - delete this.params.token; |
1856 | - this.set('login_mode', 'default'); |
1857 | - }, |
1858 | - |
1859 | - get_params: function(){ |
1860 | - // signup user (or reset password) |
1861 | - var db = this.$("form [name=db]").val(); |
1862 | - var name = this.$("form input[name=name]").val(); |
1863 | - var login = this.$("form input[name=login]").val(); |
1864 | - var password = this.$("form input[name=password]").val(); |
1865 | - var confirm_password = this.$("form input[name=confirm_password]").val(); |
1866 | - if (!db) { |
1867 | - this.do_warn(_t("Login"), _t("No database selected !")); |
1868 | - return false; |
1869 | - } else if (!name) { |
1870 | - this.do_warn(_t("Login"), _t("Please enter a name.")); |
1871 | - return false; |
1872 | - } else if (!login) { |
1873 | - this.do_warn(_t("Login"), _t("Please enter a username.")); |
1874 | - return false; |
1875 | - } else if (!password || !confirm_password) { |
1876 | - this.do_warn(_t("Login"), _t("Please enter a password and confirm it.")); |
1877 | - return false; |
1878 | - } else if (password !== confirm_password) { |
1879 | - this.do_warn(_t("Login"), _t("Passwords do not match; please retype them.")); |
1880 | - return false; |
1881 | - } |
1882 | - var params = { |
1883 | - dbname : db, |
1884 | - token: this.params.token || "", |
1885 | - name: name, |
1886 | - login: login, |
1887 | - password: password, |
1888 | - }; |
1889 | - return params; |
1890 | - }, |
1891 | - |
1892 | - on_submit: function(ev) { |
1893 | - if (ev) { |
1894 | - ev.preventDefault(); |
1895 | - } |
1896 | - var login_mode = this.get('login_mode'); |
1897 | - if (login_mode === 'signup' || login_mode === 'reset') { |
1898 | - var params = this.get_params(); |
1899 | - if (_.isEmpty(params)){ |
1900 | - return false; |
1901 | - } |
1902 | - var self = this, |
1903 | - super_ = this._super; |
1904 | - this.rpc('/auth_signup/signup', params) |
1905 | - .done(function(result) { |
1906 | - if (result.error) { |
1907 | - self.show_error(result.error); |
1908 | - } else { |
1909 | - super_.apply(self, [ev]); |
1910 | - } |
1911 | - }); |
1912 | - } else { |
1913 | - // regular login |
1914 | - this._super(ev); |
1915 | - } |
1916 | - }, |
1917 | - |
1918 | - do_reset_password: function(ev) { |
1919 | - if (ev) { |
1920 | - ev.preventDefault(); |
1921 | - } |
1922 | - var self = this; |
1923 | - var db = this.$("form [name=db]").val(); |
1924 | - var login = this.$("form input[name=login]").val(); |
1925 | - if (!db) { |
1926 | - this.do_warn(_t("Login"), _t("No database selected !")); |
1927 | - return $.Deferred().reject(); |
1928 | - } else if (!login) { |
1929 | - this.do_warn(_t("Login"), _t("Please enter a username or email address.")); |
1930 | - return $.Deferred().reject(); |
1931 | - } |
1932 | - return self.rpc("/auth_signup/reset_password", { dbname: db, login: login }).done(function(result) { |
1933 | - self.show_error(_t("An email has been sent with credentials to reset your password")); |
1934 | - self.set('login_mode', 'default'); |
1935 | - }).fail(function(result, ev) { |
1936 | - ev.preventDefault(); |
1937 | - self.show_error(result.message); |
1938 | - }); |
1939 | + openerp.web.LoginForm.include({ |
1940 | + start: function () { |
1941 | + var self = this; |
1942 | + this.$el.on('submit', function () { |
1943 | + var password = self.get_password_field('password'); |
1944 | + var confirm_password = self.get_password_field('confirm_password'); |
1945 | + if (password && confirm_password && (password.value != confirm_password.value)) { |
1946 | + alert("Passwords do not match; please retype them."); |
1947 | + return false; |
1948 | + } |
1949 | + }); |
1950 | + }, |
1951 | + get_password_field: function (field) { |
1952 | + var selector = 'input[name="' + field + '"][type="password"]:visible'; |
1953 | + return this.$(selector)[0]; |
1954 | }, |
1955 | }); |
1956 | }; |
1957 | |
1958 | === removed directory 'auth_signup/static/src/xml' |
1959 | === removed file 'auth_signup/static/src/xml/auth_signup.xml' |
1960 | --- auth_signup/static/src/xml/auth_signup.xml 2013-10-27 12:31:04 +0000 |
1961 | +++ auth_signup/static/src/xml/auth_signup.xml 1970-01-01 00:00:00 +0000 |
1962 | @@ -1,39 +0,0 @@ |
1963 | -<?xml version="1.0" encoding="UTF-8"?> |
1964 | -<!-- vim:fdl=1: |
1965 | ---> |
1966 | -<templates id="template" xml:space="preserve"> |
1967 | - |
1968 | - <t t-extend="Login"> |
1969 | - <t t-jquery="form ul:first li:contains('Username')" t-operation="before"> |
1970 | - <li data-modes="signup reset">Name</li> |
1971 | - <li data-modes="signup reset"><input name="name" type="text"/></li> |
1972 | - </t> |
1973 | - <t t-jquery="form ul:first li:contains('Username')" t-operation="replace"> |
1974 | - <li data-modes="default">Username</li> |
1975 | - <li data-modes="signup reset">Username (Email)</li> |
1976 | - </t> |
1977 | - <t t-jquery="form ul:first li:has(input[name=login], input[name=password]), form ul:first li:contains('Password')"> |
1978 | - this.attr('data-modes', 'default signup reset'); |
1979 | - </t> |
1980 | - <t t-jquery="form ul:first li:has(input[name=password])" t-operation="after"> |
1981 | - <li data-modes="signup reset">Confirm Password</li> |
1982 | - <li data-modes="signup reset"><input name="confirm_password" type="password"/></li> |
1983 | - </t> |
1984 | - <t t-jquery="form ul:first li:has(button[name=submit])" t-operation="replace"> |
1985 | - <li> |
1986 | - <button name="submit"> |
1987 | - <span data-modes="default">Log in</span> |
1988 | - <span data-modes="signup">Sign Up</span> |
1989 | - <span data-modes="reset">Reset password</span> |
1990 | - </button> |
1991 | - <a class="oe_signup_signup" data-modes="default" href="#">Sign Up</a> |
1992 | - <a class="oe_signup_back" data-modes="signup reset" href="#">Back to Login</a> |
1993 | - <a class="oe_signup_reset_password" data-modes="default" href="#">Reset password</a> |
1994 | - </li> |
1995 | - </t> |
1996 | - <t t-jquery=".oe_login_manage_db"> |
1997 | - this.attr('data-modes', 'default'); |
1998 | - </t> |
1999 | - </t> |
2000 | - |
2001 | -</templates> |
2002 | |
2003 | === added directory 'auth_signup/views' |
2004 | === added file 'auth_signup/views/auth_signup_login.xml' |
2005 | --- auth_signup/views/auth_signup_login.xml 1970-01-01 00:00:00 +0000 |
2006 | +++ auth_signup/views/auth_signup_login.xml 2014-01-31 00:21:10 +0000 |
2007 | @@ -0,0 +1,91 @@ |
2008 | +<?xml version="1.0" encoding="utf-8"?> |
2009 | +<!-- vim:fdn=3: |
2010 | +--> |
2011 | +<openerp> |
2012 | + <data> |
2013 | + <template id="auth_signup.login" inherit_id="web.login" name="Sign up - Reset Password"> |
2014 | + <xpath expr="//button[@type='submit']" position="before"> |
2015 | + <a t-if="signup" t-attf-href="?mode=signup{{ '&debug' if debug else '' }}" class="btn btn-link pull-right">Sign up</a> |
2016 | + <a t-if="reset" t-attf-href="?mode=reset{{ '&debug' if debug else '' }}" class="btn btn-link pull-right">Reset Password</a> |
2017 | + </xpath> |
2018 | + </template> |
2019 | + |
2020 | + <template id="auth_signup.signup" name="Sign up"> |
2021 | + <t t-call="web.login_layout"> |
2022 | + <t t-set="head"> |
2023 | + <t t-foreach="css" t-as="css_file"> |
2024 | + <link rel="stylesheet" t-att-href="css_file"/> |
2025 | + </t> |
2026 | + <t t-foreach="js" t-as="js_file"> |
2027 | + <script type="text/javascript" t-att-src="js_file"></script> |
2028 | + </t> |
2029 | + </t> |
2030 | + <script type="text/javascript"> |
2031 | + $(function() { |
2032 | + var s = new openerp.init(<t t-raw="modules"/>); |
2033 | + var login_form = new openerp.web.LoginForm($('.oe_signup_form')); |
2034 | + }); |
2035 | + </script> |
2036 | + |
2037 | + <t t-set="reset_without_token" t-value="mode == 'reset' and not token"/> |
2038 | + |
2039 | + <form class="oe_signup_form" role="form" t-attf-action="/web/login{{ '?debug' if debug else '' }}" method="post"> |
2040 | + <t t-call="web.database_select"/> |
2041 | + |
2042 | + <div class="form-group field-name" t-if="not reset_without_token"> |
2043 | + <label for="name" class="control-label">Your Name</label> |
2044 | + <input type="text" name="name" t-att-value="name" id="name" class="form-control" placeholder="e.g. John Doe" |
2045 | + required="required" autofocus="autofocus" t-att-disabled="'disabled' if mode == 'reset' and token else None"/> |
2046 | + </div> |
2047 | + |
2048 | + <div class="form-group field-login"> |
2049 | + <label for="login" class="control-label">Your Email</label> |
2050 | + <input type="text" name="login" t-att-value="login" id="login" class="form-control" |
2051 | + t-att-autofocus="'autofocus' if reset_without_token else None" |
2052 | + required="required" t-att-disabled="'disabled' if mode == 'reset' and token else None"/> |
2053 | + <input type="hidden" name="login" t-att-value="login" t-if="mode == 'reset' and token"/> |
2054 | + </div> |
2055 | + |
2056 | + <div class="form-group field-password" t-if="not reset_without_token"> |
2057 | + <label for="password" class="control-label">Password</label> |
2058 | + <input type="password" name="password" id="password" class="form-control" |
2059 | + required="required" t-att-autofocus="'autofocus' if mode == 'reset' and token else None"/> |
2060 | + </div> |
2061 | + |
2062 | + <div class="form-group field-confirm_password" t-if="not reset_without_token"> |
2063 | + <label for="confirm_password" class="control-label">Confirm Password</label> |
2064 | + <input type="password" name="confirm_password" id="confirm_password" class="form-control" required="required"/> |
2065 | + </div> |
2066 | + |
2067 | + <p class="alert alert-danger" t-if="error"> |
2068 | + <t t-esc="error"/> |
2069 | + </p> |
2070 | + <p class="alert alert-success" t-if="message"> |
2071 | + <t t-esc="message"/> |
2072 | + </p> |
2073 | + |
2074 | + <input type="hidden" name="redirect" t-att-value="redirect"/> |
2075 | + <input type="hidden" name="mode" t-att-value="mode"/> |
2076 | + <input type="hidden" name="token" t-att-value="token"/> |
2077 | + <div class="clearfix oe_login_buttons"> |
2078 | + <a href="/web/login" class="btn btn-link pull-right">Back to Login</a> |
2079 | + <button type="submit" class="btn btn-primary pull-left"> |
2080 | + <t t-if="mode == 'signup'">Sign up</t> |
2081 | + <t t-if="mode == 'reset'">Reset password</t> |
2082 | + </button> |
2083 | + </div> |
2084 | + |
2085 | + </form> |
2086 | + <div class="oe_single_form_footer" t-if="not disable_footer"> |
2087 | + <t t-if="not disable_database_manager"> |
2088 | + <a class="oe_login_manage_db" t-attf-href="/web/database/manager{{ '?debug' if debug else '' }}">Manage Databases</a> |
2089 | + <span class="oe_footer_seperator"> | </span> |
2090 | + </t> |
2091 | + <a href="http://www.openerp.com" target="_blank">Powered by <span>OpenERP</span></a> |
2092 | + </div> |
2093 | + |
2094 | + </t> |
2095 | + </template> |
2096 | + |
2097 | + </data> |
2098 | +</openerp> |
2099 | |
2100 | === added directory 'base_geolocalize' |
2101 | === added file 'base_geolocalize/__init__.py' |
2102 | --- base_geolocalize/__init__.py 1970-01-01 00:00:00 +0000 |
2103 | +++ base_geolocalize/__init__.py 2014-01-31 00:21:10 +0000 |
2104 | @@ -0,0 +1,22 @@ |
2105 | +# -*- coding: utf-8 -*- |
2106 | +############################################################################## |
2107 | +# |
2108 | +# OpenERP, Open Source Management Solution |
2109 | +# Copyright (C) 2013_Today OpenERP SA (<http://www.openerp.com>). |
2110 | +# |
2111 | +# This program is free software: you can redistribute it and/or modify |
2112 | +# it under the terms of the GNU Affero General Public License as |
2113 | +# published by the Free Software Foundation, either version 3 of the |
2114 | +# License, or (at your option) any later version. |
2115 | +# |
2116 | +# This program is distributed in the hope that it will be useful, |
2117 | +# but WITHOUT ANY WARRANTY; without even the implied warranty of |
2118 | +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
2119 | +# GNU Affero General Public License for more details. |
2120 | +# |
2121 | +# You should have received a copy of the GNU Affero General Public License |
2122 | +# along with this program. If not, see <http://www.gnu.org/licenses/>. |
2123 | +# |
2124 | +############################################################################## |
2125 | + |
2126 | +import models |
2127 | |
2128 | === added file 'base_geolocalize/__openerp__.py' |
2129 | --- base_geolocalize/__openerp__.py 1970-01-01 00:00:00 +0000 |
2130 | +++ base_geolocalize/__openerp__.py 2014-01-31 00:21:10 +0000 |
2131 | @@ -0,0 +1,44 @@ |
2132 | +# -*- coding: utf-8 -*- |
2133 | +############################################################################## |
2134 | +# |
2135 | +# OpenERP, Open Source Management Solution |
2136 | +# Copyright (C) 2013_Today OpenERP SA (<http://www.openerp.com>). |
2137 | +# |
2138 | +# This program is free software: you can redistribute it and/or modify |
2139 | +# it under the terms of the GNU Affero General Public License as |
2140 | +# published by the Free Software Foundation, either version 3 of the |
2141 | +# License, or (at your option) any later version. |
2142 | +# |
2143 | +# This program is distributed in the hope that it will be useful, |
2144 | +# but WITHOUT ANY WARRANTY; without even the implied warranty of |
2145 | +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
2146 | +# GNU Affero General Public License for more details. |
2147 | +# |
2148 | +# You should have received a copy of the GNU Affero General Public License |
2149 | +# along with this program. If not, see <http://www.gnu.org/licenses/>. |
2150 | +# |
2151 | +############################################################################## |
2152 | + |
2153 | + |
2154 | +{ |
2155 | + 'name': 'Partners Geo-Localization', |
2156 | + 'version': '1.0', |
2157 | + 'category': 'Customer Relationship Management', |
2158 | + 'description': """ |
2159 | +Partners geolocalization |
2160 | +======================== |
2161 | + """, |
2162 | + 'author': 'OpenERP SA', |
2163 | + 'depends': ['crm'], |
2164 | + 'demo': [ |
2165 | + ], |
2166 | + 'data': [ |
2167 | + 'views/res_partner_view.xml', |
2168 | + ], |
2169 | + 'test': [], |
2170 | + 'installable': True, |
2171 | + 'auto_install': False, |
2172 | + 'images': [], |
2173 | +} |
2174 | + |
2175 | +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: |
2176 | |
2177 | === added directory 'base_geolocalize/models' |
2178 | === added file 'base_geolocalize/models/__init__.py' |
2179 | --- base_geolocalize/models/__init__.py 1970-01-01 00:00:00 +0000 |
2180 | +++ base_geolocalize/models/__init__.py 2014-01-31 00:21:10 +0000 |
2181 | @@ -0,0 +1,1 @@ |
2182 | +import res_partner |
2183 | |
2184 | === added file 'base_geolocalize/models/res_partner.py' |
2185 | --- base_geolocalize/models/res_partner.py 1970-01-01 00:00:00 +0000 |
2186 | +++ base_geolocalize/models/res_partner.py 2014-01-31 00:21:10 +0000 |
2187 | @@ -0,0 +1,88 @@ |
2188 | +# -*- coding: utf-8 -*- |
2189 | +############################################################################## |
2190 | +# |
2191 | +# OpenERP, Open Source Management Solution |
2192 | +# Copyright (C) 2013_Today OpenERP SA (<http://www.openerp.com>). |
2193 | +# |
2194 | +# This program is free software: you can redistribute it and/or modify |
2195 | +# it under the terms of the GNU Affero General Public License as |
2196 | +# published by the Free Software Foundation, either version 3 of the |
2197 | +# License, or (at your option) any later version. |
2198 | +# |
2199 | +# This program is distributed in the hope that it will be useful, |
2200 | +# but WITHOUT ANY WARRANTY; without even the implied warranty of |
2201 | +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
2202 | +# GNU Affero General Public License for more details. |
2203 | +# |
2204 | +# You should have received a copy of the GNU Affero General Public License |
2205 | +# along with this program. If not, see <http://www.gnu.org/licenses/>. |
2206 | +# |
2207 | +############################################################################## |
2208 | + |
2209 | +try: |
2210 | + import simplejson as json |
2211 | +except ImportError: |
2212 | + import json # noqa |
2213 | +import urllib |
2214 | + |
2215 | +from openerp.osv import osv, fields |
2216 | +from openerp import tools |
2217 | +from openerp.tools.translate import _ |
2218 | + |
2219 | + |
2220 | +def geo_find(addr): |
2221 | + url = 'https://maps.googleapis.com/maps/api/geocode/json?sensor=false&address=' |
2222 | + url += urllib.quote(addr.encode('utf8')) |
2223 | + |
2224 | + try: |
2225 | + result = json.load(urllib.urlopen(url)) |
2226 | + except Exception, e: |
2227 | + raise osv.except_osv(_('Network error'), |
2228 | + _('Cannot contact geolocation servers. Please make sure that your internet connection is up and running (%s).') % e) |
2229 | + if result['status'] != 'OK': |
2230 | + return None |
2231 | + |
2232 | + try: |
2233 | + geo = result['results'][0]['geometry']['location'] |
2234 | + return float(geo['lat']), float(geo['lng']) |
2235 | + except (KeyError, ValueError): |
2236 | + return None |
2237 | + |
2238 | + |
2239 | +def geo_query_address(street=None, zip=None, city=None, state=None, country=None): |
2240 | + if country and ',' in country and (country.endswith(' of') or country.endswith(' of the')): |
2241 | + # put country qualifier in front, otherwise GMap gives wrong results, |
2242 | + # e.g. 'Congo, Democratic Republic of the' => 'Democratic Republic of the Congo' |
2243 | + country = '{1} {0}'.format(*country.split(',', 1)) |
2244 | + return tools.ustr(', '.join(filter(None, [street, |
2245 | + ("%s %s" % (zip or '', city or '')).strip(), |
2246 | + state, |
2247 | + country]))) |
2248 | + |
2249 | + |
2250 | +class res_partner(osv.osv): |
2251 | + _inherit = "res.partner" |
2252 | + |
2253 | + _columns = { |
2254 | + 'partner_latitude': fields.float('Geo Latitude'), |
2255 | + 'partner_longitude': fields.float('Geo Longitude'), |
2256 | + 'date_localization': fields.date('Geo Localization Date'), |
2257 | + } |
2258 | + |
2259 | + def geo_localize(self, cr, uid, ids, context=None): |
2260 | + # Don't pass context to browse()! We need country names in english below |
2261 | + for partner in self.browse(cr, uid, ids): |
2262 | + if not partner: |
2263 | + continue |
2264 | + result = geo_find(geo_query_address(street=partner.street, |
2265 | + zip=partner.zip, |
2266 | + city=partner.city, |
2267 | + state=partner.state_id.name, |
2268 | + country=partner.country_id.name)) |
2269 | + if result: |
2270 | + self.write(cr, uid, [partner.id], { |
2271 | + 'partner_latitude': result[0], |
2272 | + 'partner_longitude': result[1], |
2273 | + 'date_localization': fields.date.context_today(self, cr, uid, context=context) |
2274 | + }, context=context) |
2275 | + return True |
2276 | |
2277 | === added directory 'base_geolocalize/views' |
2278 | === added file 'base_geolocalize/views/res_partner_view.xml' |
2279 | --- base_geolocalize/views/res_partner_view.xml 1970-01-01 00:00:00 +0000 |
2280 | +++ base_geolocalize/views/res_partner_view.xml 2014-01-31 00:21:10 +0000 |
2281 | @@ -0,0 +1,30 @@ |
2282 | +<?xml version="1.0"?> |
2283 | +<openerp> |
2284 | + <data> |
2285 | + |
2286 | + <record id="view_crm_partner_geo_form" model="ir.ui.view"> |
2287 | + <field name="name">res.partner.geo.inherit</field> |
2288 | + <field name="model">res.partner</field> |
2289 | + <field name="inherit_id" ref="base.view_partner_form"/> |
2290 | + <field name="arch" type="xml"> |
2291 | + <xpath expr="//notebook[last()]" position="inside"> |
2292 | + <page string="Geo Localization" name="geo_localization" groups="base.group_no_one"> |
2293 | + <group colspan="2" col="2"> |
2294 | + <separator string="Geo Localization" colspan="2"/> |
2295 | + <button |
2296 | + string="Geo Localize" |
2297 | + name="geo_localize" |
2298 | + colspan="2" |
2299 | + icon="gtk-apply" |
2300 | + type="object"/> |
2301 | + <field name="partner_latitude"/> |
2302 | + <field name="partner_longitude"/> |
2303 | + <field name="date_localization"/> |
2304 | + </group> |
2305 | + </page> |
2306 | + </xpath> |
2307 | + </field> |
2308 | + </record> |
2309 | + |
2310 | + </data> |
2311 | +</openerp> |
2312 | \ No newline at end of file |
2313 | |
2314 | === modified file 'base_import/__openerp__.py' |
2315 | --- base_import/__openerp__.py 2013-10-27 12:31:04 +0000 |
2316 | +++ base_import/__openerp__.py 2014-01-31 00:21:10 +0000 |
2317 | @@ -31,11 +31,9 @@ |
2318 | 'security/ir.model.access.csv', |
2319 | ], |
2320 | 'css': [ |
2321 | - 'static/lib/select2/select2.css', |
2322 | 'static/src/css/import.css', |
2323 | ], |
2324 | 'js': [ |
2325 | - 'static/lib/select2/select2.js', |
2326 | 'static/lib/javascript-state-machine/state-machine.js', |
2327 | 'static/src/js/import.js', |
2328 | ], |
2329 | |
2330 | === removed directory 'base_import/static/lib/select2' |
2331 | === removed file 'base_import/static/lib/select2/LICENSE' |
2332 | --- base_import/static/lib/select2/LICENSE 2012-09-06 10:35:16 +0000 |
2333 | +++ base_import/static/lib/select2/LICENSE 1970-01-01 00:00:00 +0000 |
2334 | @@ -1,12 +0,0 @@ |
2335 | -Copyright 2012 Igor Vaynberg |
2336 | - |
2337 | -Version: @@ver@@ Timestamp: @@timestamp@@ |
2338 | - |
2339 | -Licensed under the Apache License, Version 2.0 (the "License"); you may not use this work except in |
2340 | -compliance with the License. You may obtain a copy of the License in the LICENSE file, or at: |
2341 | - |
2342 | -http://www.apache.org/licenses/LICENSE-2.0 |
2343 | - |
2344 | -Unless required by applicable law or agreed to in writing, software distributed under the License is |
2345 | -distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
2346 | -See the License for the specific language governing permissions and limitations under the License. |
2347 | \ No newline at end of file |
2348 | |
2349 | === removed file 'base_import/static/lib/select2/README.md' |
2350 | --- base_import/static/lib/select2/README.md 2013-10-27 12:31:04 +0000 |
2351 | +++ base_import/static/lib/select2/README.md 1970-01-01 00:00:00 +0000 |
2352 | @@ -1,68 +0,0 @@ |
2353 | -Select2 |
2354 | -================= |
2355 | - |
2356 | -Select2 is a jQuery based replacement for select boxes. It supports searching, remote data sets, and infinite scrolling of results. Look and feel of Select2 is based on the excellent [Chosen](http://harvesthq.github.com/chosen/) library. |
2357 | - |
2358 | -To get started -- checkout http://ivaynberg.github.com/select2! |
2359 | - |
2360 | -What Does Select2 Support That Chosen Does Not? |
2361 | -------------------------------------------------- |
2362 | - |
2363 | -* Working with large datasets: Chosen requires the entire dataset to be loaded as `option` tags in the DOM, which limits |
2364 | -it to working with small-ish datasets. Select2 uses a function to find results on-the-fly, which allows it to partially |
2365 | -load results. |
2366 | -* Paging of results: Since Select2 works with large datasets and only loads a small amount of matching results at a time |
2367 | -it has to support paging. Select2 will call the search function when the user scrolls to the bottom of currently loaded |
2368 | -result set allowing for the 'infinite scrolling' of results. |
2369 | -* Custom markup for results: Chosen only supports rendering text results because that is the only markup supported by |
2370 | -`option` tags. Select2 provides an extension point which can be used to produce any kind of markup to represent results. |
2371 | -* Ability to add results on the fly: Select2 provides the ability to add results from the search term entered by the user, which allows it to be used for |
2372 | -tagging. |
2373 | - |
2374 | -Browser Compatibility |
2375 | --------------------- |
2376 | -* IE 8+ (7 mostly works except for [issue with z-index](https://github.com/ivaynberg/select2/issues/37)) |
2377 | -* Chrome 8+ |
2378 | -* Firefox 3.5+ |
2379 | -* Safari 3+ |
2380 | -* Opera 10.6+ |
2381 | - |
2382 | -Integrations |
2383 | ------------- |
2384 | - |
2385 | -* [Wicket-Select2](https://github.com/ivaynberg/wicket-select2) (Java / Apache Wicket) |
2386 | -* [select2-rails](https://github.com/argerim/select2-rails) (Ruby on Rails) |
2387 | -* [AngularUI](http://angular-ui.github.com/#directives-select2) ([AngularJS](angularjs.org)) |
2388 | -* [Django](https://github.com/applegrew/django-select2) |
2389 | - |
2390 | -Bug tracker |
2391 | ------------ |
2392 | - |
2393 | -Have a bug? Please create an issue here on GitHub! |
2394 | - |
2395 | -https://github.com/ivaynberg/select2/issues |
2396 | - |
2397 | - |
2398 | -Mailing list |
2399 | ------------- |
2400 | - |
2401 | -Have a question? Ask on our mailing list! |
2402 | - |
2403 | -select2@googlegroups.com |
2404 | - |
2405 | -https://groups.google.com/d/forum/select2 |
2406 | - |
2407 | - |
2408 | -Copyright and License |
2409 | ---------------------- |
2410 | - |
2411 | -Copyright 2012 Igor Vaynberg |
2412 | - |
2413 | -Licensed under the Apache License, Version 2.0 (the "License"); you may not use this work except in |
2414 | -compliance with the License. You may obtain a copy of the License in the LICENSE file, or at: |
2415 | - |
2416 | -http://www.apache.org/licenses/LICENSE-2.0 |
2417 | - |
2418 | -Unless required by applicable law or agreed to in writing, software distributed under the License is |
2419 | -distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
2420 | -See the License for the specific language governing permissions and limitations under the License. |
2421 | \ No newline at end of file |
2422 | |
2423 | === removed file 'base_import/static/lib/select2/release.sh' |
2424 | --- base_import/static/lib/select2/release.sh 2012-09-06 10:35:16 +0000 |
2425 | +++ base_import/static/lib/select2/release.sh 1970-01-01 00:00:00 +0000 |
2426 | @@ -1,77 +0,0 @@ |
2427 | -#!/bin/bash |
2428 | -set -e |
2429 | - |
2430 | -echo -n "Enter the version for this release: " |
2431 | - |
2432 | -read ver |
2433 | - |
2434 | -if [ ! $ver ]; then |
2435 | - echo "Invalid version." |
2436 | - exit |
2437 | -fi |
2438 | - |
2439 | -name="select2" |
2440 | -js="$name.js" |
2441 | -mini="$name.min.js" |
2442 | -css="$name.css" |
2443 | -release="$name-$ver" |
2444 | -releasedir="/tmp/$release" |
2445 | -tag="release-$ver" |
2446 | -branch="build-$ver" |
2447 | -curbranch=`git branch | grep "*" | sed "s/* //"` |
2448 | -timestamp=$(date) |
2449 | -tokens="s/@@ver@@/$ver/g;s/\@@timestamp@@/$timestamp/g" |
2450 | -remote="github" |
2451 | - |
2452 | -git branch "$branch" |
2453 | -git checkout "$branch" |
2454 | - |
2455 | -echo "Tokenizing..." |
2456 | - |
2457 | -find . -name "$js" | xargs sed -i -e "$tokens" |
2458 | -find . -name "$css" | xargs sed -i -e "$tokens" |
2459 | - |
2460 | -git add "$js" |
2461 | -git add "$css" |
2462 | - |
2463 | -echo "Minifying..." |
2464 | - |
2465 | -echo "/*" > "$mini" |
2466 | -cat LICENSE | sed "$tokens" >> "$mini" |
2467 | -echo "*/" >> "$mini" |
2468 | - |
2469 | -curl -s \ |
2470 | - -d compilation_level=SIMPLE_OPTIMIZATIONS \ |
2471 | - -d output_format=text \ |
2472 | - -d output_info=compiled_code \ |
2473 | - --data-urlencode "js_code@$js" \ |
2474 | - http://closure-compiler.appspot.com/compile \ |
2475 | - >> "$mini" |
2476 | - |
2477 | -git add "$mini" |
2478 | - |
2479 | -git commit -m "release $ver" |
2480 | - |
2481 | -echo "Tagging..." |
2482 | - |
2483 | -git tag -a "$tag" -m "tagged version $ver" |
2484 | -git push "$remote" --tags |
2485 | - |
2486 | -echo "Archiving..." |
2487 | - |
2488 | -rm -rf "$releasedir" |
2489 | -mkdir "$releasedir" |
2490 | - |
2491 | -cp $name.* "$releasedir" |
2492 | -cp spinner.gif "$releasedir" |
2493 | -cp README.* "$releasedir" |
2494 | - |
2495 | -zip -r "$releasedir.zip" "$releasedir" |
2496 | -rm -rf "$releasedir" |
2497 | - |
2498 | -echo "Cleaning Up..." |
2499 | - |
2500 | -git checkout "$curbranch" |
2501 | -git branch -D "$branch" |
2502 | - |
2503 | -echo "Done. Release archive created: $releasedir.zip" |
2504 | |
2505 | === removed file 'base_import/static/lib/select2/select2.css' |
2506 | --- base_import/static/lib/select2/select2.css 2013-10-27 12:31:04 +0000 |
2507 | +++ base_import/static/lib/select2/select2.css 1970-01-01 00:00:00 +0000 |
2508 | @@ -1,524 +0,0 @@ |
2509 | -/* |
2510 | -Version: @@ver@@ Timestamp: @@timestamp@@ |
2511 | -*/ |
2512 | -.select2-container { |
2513 | - position: relative; |
2514 | - display: inline-block; |
2515 | - /* inline-block for ie7 */ |
2516 | - zoom: 1; |
2517 | - *display: inline; |
2518 | - vertical-align: top; |
2519 | -} |
2520 | - |
2521 | -.select2-container, |
2522 | -.select2-drop, |
2523 | -.select2-search, |
2524 | -.select2-search input{ |
2525 | - /* |
2526 | - Force border-box so that % widths fit the parent |
2527 | - container without overlap because of margin/padding. |
2528 | - |
2529 | - More Info : http://www.quirksmode.org/css/box.html |
2530 | - */ |
2531 | - -moz-box-sizing: border-box; /* firefox */ |
2532 | - -ms-box-sizing: border-box; /* ie */ |
2533 | - -webkit-box-sizing: border-box; /* webkit */ |
2534 | - -khtml-box-sizing: border-box; /* konqueror */ |
2535 | - box-sizing: border-box; /* css3 */ |
2536 | -} |
2537 | - |
2538 | -.select2-container .select2-choice { |
2539 | - background-color: #fff; |
2540 | - background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #eeeeee), color-stop(0.5, white)); |
2541 | - background-image: -webkit-linear-gradient(center bottom, #eeeeee 0%, white 50%); |
2542 | - background-image: -moz-linear-gradient(center bottom, #eeeeee 0%, white 50%); |
2543 | - background-image: -o-linear-gradient(bottom, #eeeeee 0%, #ffffff 50%); |
2544 | - background-image: -ms-linear-gradient(top, #eeeeee 0%, #ffffff 50%); |
2545 | - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr = '#eeeeee', endColorstr = '#ffffff', GradientType = 0); |
2546 | - background-image: linear-gradient(top, #eeeeee 0%, #ffffff 50%); |
2547 | - -webkit-border-radius: 4px; |
2548 | - -moz-border-radius: 4px; |
2549 | - border-radius: 4px; |
2550 | - -moz-background-clip: padding; |
2551 | - -webkit-background-clip: padding-box; |
2552 | - background-clip: padding-box; |
2553 | - border: 1px solid #aaa; |
2554 | - display: block; |
2555 | - overflow: hidden; |
2556 | - white-space: nowrap; |
2557 | - position: relative; |
2558 | - height: 26px; |
2559 | - line-height: 26px; |
2560 | - padding: 0 0 0 8px; |
2561 | - color: #444; |
2562 | - text-decoration: none; |
2563 | -} |
2564 | - |
2565 | -.select2-container.select2-drop-above .select2-choice |
2566 | -{ |
2567 | - border-bottom-color: #aaa; |
2568 | - -webkit-border-radius:0px 0px 4px 4px; |
2569 | - -moz-border-radius:0px 0px 4px 4px; |
2570 | - border-radius:0px 0px 4px 4px; |
2571 | - background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #eeeeee), color-stop(0.9, white)); |
2572 | - background-image: -webkit-linear-gradient(center bottom, #eeeeee 0%, white 90%); |
2573 | - background-image: -moz-linear-gradient(center bottom, #eeeeee 0%, white 90%); |
2574 | - background-image: -o-linear-gradient(bottom, #eeeeee 0%, white 90%); |
2575 | - background-image: -ms-linear-gradient(top, #eeeeee 0%,#ffffff 90%); |
2576 | - filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#eeeeee', endColorstr='#ffffff',GradientType=0 ); |
2577 | - background-image: linear-gradient(top, #eeeeee 0%,#ffffff 90%); |
2578 | -} |
2579 | - |
2580 | -.select2-container .select2-choice span { |
2581 | - margin-right: 26px; |
2582 | - display: block; |
2583 | - overflow: hidden; |
2584 | - white-space: nowrap; |
2585 | - -o-text-overflow: ellipsis; |
2586 | - -ms-text-overflow: ellipsis; |
2587 | - text-overflow: ellipsis; |
2588 | -} |
2589 | - |
2590 | -.select2-container .select2-choice abbr { |
2591 | - display: block; |
2592 | - position: absolute; |
2593 | - right: 26px; |
2594 | - top: 8px; |
2595 | - width: 12px; |
2596 | - height: 12px; |
2597 | - font-size: 1px; |
2598 | - background: url('select2.png') right top no-repeat; |
2599 | - cursor: pointer; |
2600 | - text-decoration: none; |
2601 | - border:0; |
2602 | - outline: 0; |
2603 | -} |
2604 | -.select2-container .select2-choice abbr:hover { |
2605 | - background-position: right -11px; |
2606 | - cursor: pointer; |
2607 | -} |
2608 | - |
2609 | -.select2-drop { |
2610 | - background: #fff; |
2611 | - color: #000; |
2612 | - border: 1px solid #aaa; |
2613 | - border-top: 0; |
2614 | - position: absolute; |
2615 | - top: 100%; |
2616 | - -webkit-box-shadow: 0 4px 5px rgba(0, 0, 0, .15); |
2617 | - -moz-box-shadow: 0 4px 5px rgba(0, 0, 0, .15); |
2618 | - -o-box-shadow: 0 4px 5px rgba(0, 0, 0, .15); |
2619 | - box-shadow: 0 4px 5px rgba(0, 0, 0, .15); |
2620 | - z-index: 9999; |
2621 | - width:100%; |
2622 | - margin-top:-1px; |
2623 | - |
2624 | - -webkit-border-radius: 0 0 4px 4px; |
2625 | - -moz-border-radius: 0 0 4px 4px; |
2626 | - border-radius: 0 0 4px 4px; |
2627 | -} |
2628 | - |
2629 | -.select2-drop.select2-drop-above { |
2630 | - -webkit-border-radius: 4px 4px 0px 0px; |
2631 | - -moz-border-radius: 4px 4px 0px 0px; |
2632 | - border-radius: 4px 4px 0px 0px; |
2633 | - margin-top:1px; |
2634 | - border-top: 1px solid #aaa; |
2635 | - border-bottom: 0; |
2636 | - |
2637 | - -webkit-box-shadow: 0 -4px 5px rgba(0, 0, 0, .15); |
2638 | - -moz-box-shadow: 0 -4px 5px rgba(0, 0, 0, .15); |
2639 | - -o-box-shadow: 0 -4px 5px rgba(0, 0, 0, .15); |
2640 | - box-shadow: 0 -4px 5px rgba(0, 0, 0, .15); |
2641 | -} |
2642 | - |
2643 | -.select2-container .select2-choice div { |
2644 | - -webkit-border-radius: 0 4px 4px 0; |
2645 | - -moz-border-radius: 0 4px 4px 0; |
2646 | - border-radius: 0 4px 4px 0; |
2647 | - -moz-background-clip: padding; |
2648 | - -webkit-background-clip: padding-box; |
2649 | - background-clip: padding-box; |
2650 | - background: #ccc; |
2651 | - background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #ccc), color-stop(0.6, #eee)); |
2652 | - background-image: -webkit-linear-gradient(center bottom, #ccc 0%, #eee 60%); |
2653 | - background-image: -moz-linear-gradient(center bottom, #ccc 0%, #eee 60%); |
2654 | - background-image: -o-linear-gradient(bottom, #ccc 0%, #eee 60%); |
2655 | - background-image: -ms-linear-gradient(top, #cccccc 0%, #eeeeee 60%); |
2656 | - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr = '#cccccc', endColorstr = '#eeeeee', GradientType = 0); |
2657 | - background-image: linear-gradient(top, #cccccc 0%, #eeeeee 60%); |
2658 | - border-left: 1px solid #aaa; |
2659 | - position: absolute; |
2660 | - right: 0; |
2661 | - top: 0; |
2662 | - display: block; |
2663 | - height: 100%; |
2664 | - width: 18px; |
2665 | -} |
2666 | - |
2667 | -.select2-container .select2-choice div b { |
2668 | - background: url('select2.png') no-repeat 0 1px; |
2669 | - display: block; |
2670 | - width: 100%; |
2671 | - height: 100%; |
2672 | -} |
2673 | - |
2674 | -.select2-search { |
2675 | - display: inline-block; |
2676 | - white-space: nowrap; |
2677 | - z-index: 10000; |
2678 | - min-height: 26px; |
2679 | - width: 100%; |
2680 | - margin: 0; |
2681 | - padding-left: 4px; |
2682 | - padding-right: 4px; |
2683 | -} |
2684 | - |
2685 | -.select2-search-hidden { |
2686 | - display: block; |
2687 | - position: absolute; |
2688 | - left: -10000px; |
2689 | -} |
2690 | - |
2691 | -.select2-search input { |
2692 | - background: #fff url('select2.png') no-repeat 100% -22px; |
2693 | - background: url('select2.png') no-repeat 100% -22px, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, white), color-stop(0.99, #eeeeee)); |
2694 | - background: url('select2.png') no-repeat 100% -22px, -webkit-linear-gradient(center bottom, white 85%, #eeeeee 99%); |
2695 | - background: url('select2.png') no-repeat 100% -22px, -moz-linear-gradient(center bottom, white 85%, #eeeeee 99%); |
2696 | - background: url('select2.png') no-repeat 100% -22px, -o-linear-gradient(bottom, white 85%, #eeeeee 99%); |
2697 | - background: url('select2.png') no-repeat 100% -22px, -ms-linear-gradient(top, #ffffff 85%, #eeeeee 99%); |
2698 | - background: url('select2.png') no-repeat 100% -22px, linear-gradient(top, #ffffff 85%, #eeeeee 99%); |
2699 | - padding: 4px 20px 4px 5px; |
2700 | - outline: 0; |
2701 | - border: 1px solid #aaa; |
2702 | - font-family: sans-serif; |
2703 | - font-size: 1em; |
2704 | - width:100%; |
2705 | - margin:0; |
2706 | - height:auto !important; |
2707 | - min-height: 26px; |
2708 | - -webkit-box-shadow: none; |
2709 | - -moz-box-shadow: none; |
2710 | - box-shadow: none; |
2711 | - border-radius: 0; |
2712 | - -moz-border-radius: 0; |
2713 | - -webkit-border-radius: 0; |
2714 | -} |
2715 | - |
2716 | -.select2-drop.select2-drop-above .select2-search input |
2717 | -{ |
2718 | - margin-top:4px; |
2719 | -} |
2720 | - |
2721 | -.select2-search input.select2-active { |
2722 | - background: #fff url('spinner.gif') no-repeat 100%; |
2723 | - background: url('spinner.gif') no-repeat 100%, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, white), color-stop(0.99, #eeeeee)); |
2724 | - background: url('spinner.gif') no-repeat 100%, -webkit-linear-gradient(center bottom, white 85%, #eeeeee 99%); |
2725 | - background: url('spinner.gif') no-repeat 100%, -moz-linear-gradient(center bottom, white 85%, #eeeeee 99%); |
2726 | - background: url('spinner.gif') no-repeat 100%, -o-linear-gradient(bottom, white 85%, #eeeeee 99%); |
2727 | - background: url('spinner.gif') no-repeat 100%, -ms-linear-gradient(top, #ffffff 85%, #eeeeee 99%); |
2728 | - background: url('spinner.gif') no-repeat 100%, linear-gradient(top, #ffffff 85%, #eeeeee 99%); |
2729 | -} |
2730 | - |
2731 | - |
2732 | -.select2-container-active .select2-choice, |
2733 | -.select2-container-active .select2-choices { |
2734 | - -webkit-box-shadow: 0 0 5px rgba(0,0,0,.3); |
2735 | - -moz-box-shadow : 0 0 5px rgba(0,0,0,.3); |
2736 | - -o-box-shadow : 0 0 5px rgba(0,0,0,.3); |
2737 | - box-shadow : 0 0 5px rgba(0,0,0,.3); |
2738 | - border: 1px solid #5897fb; |
2739 | - outline: none; |
2740 | -} |
2741 | - |
2742 | -.select2-dropdown-open .select2-choice { |
2743 | - border: 1px solid #aaa; |
2744 | - border-bottom-color: transparent; |
2745 | - -webkit-box-shadow: 0 1px 0 #fff inset; |
2746 | - -moz-box-shadow : 0 1px 0 #fff inset; |
2747 | - -o-box-shadow : 0 1px 0 #fff inset; |
2748 | - box-shadow : 0 1px 0 #fff inset; |
2749 | - background-color: #eee; |
2750 | - background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, white), color-stop(0.5, #eeeeee)); |
2751 | - background-image: -webkit-linear-gradient(center bottom, white 0%, #eeeeee 50%); |
2752 | - background-image: -moz-linear-gradient(center bottom, white 0%, #eeeeee 50%); |
2753 | - background-image: -o-linear-gradient(bottom, white 0%, #eeeeee 50%); |
2754 | - background-image: -ms-linear-gradient(top, #ffffff 0%,#eeeeee 50%); |
2755 | - filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#eeeeee',GradientType=0 ); |
2756 | - background-image: linear-gradient(top, #ffffff 0%,#eeeeee 50%); |
2757 | - -webkit-border-bottom-left-radius : 0; |
2758 | - -webkit-border-bottom-right-radius: 0; |
2759 | - -moz-border-radius-bottomleft : 0; |
2760 | - -moz-border-radius-bottomright: 0; |
2761 | - border-bottom-left-radius : 0; |
2762 | - border-bottom-right-radius: 0; |
2763 | -} |
2764 | - |
2765 | -.select2-dropdown-open .select2-choice div { |
2766 | - background: transparent; |
2767 | - border-left: none; |
2768 | -} |
2769 | -.select2-dropdown-open .select2-choice div b { |
2770 | - background-position: -18px 1px; |
2771 | -} |
2772 | - |
2773 | -/* results */ |
2774 | -.select2-results { |
2775 | - margin: 4px 4px 4px 0; |
2776 | - padding: 0 0 0 4px; |
2777 | - position: relative; |
2778 | - overflow-x: hidden; |
2779 | - overflow-y: auto; |
2780 | - max-height: 200px; |
2781 | -} |
2782 | - |
2783 | -.select2-results ul.select2-result-sub { |
2784 | - margin: 0 0 0 0; |
2785 | -} |
2786 | - |
2787 | -.select2-results ul.select2-result-sub > li .select2-result-label { padding-left: 20px } |
2788 | -.select2-results ul.select2-result-sub ul.select2-result-sub > li .select2-result-label { padding-left: 40px } |
2789 | -.select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub > li .select2-result-label { padding-left: 60px } |
2790 | -.select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub > li .select2-result-label { padding-left: 80px } |
2791 | -.select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub > li .select2-result-label { padding-left: 100px } |
2792 | -.select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub > li .select2-result-label { padding-left: 110px } |
2793 | -.select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub > li .select2-result-label { padding-left: 120px } |
2794 | - |
2795 | -.select2-results li { |
2796 | - list-style: none; |
2797 | - display: list-item; |
2798 | -} |
2799 | - |
2800 | -.select2-results li.select2-result-with-children > .select2-result-label { |
2801 | - font-weight: bold; |
2802 | -} |
2803 | - |
2804 | -.select2-results .select2-result-label { |
2805 | - padding: 3px 7px 4px; |
2806 | - margin: 0; |
2807 | - cursor: pointer; |
2808 | -} |
2809 | - |
2810 | -.select2-results .select2-highlighted { |
2811 | - background: #3875d7; |
2812 | - color: #fff; |
2813 | -} |
2814 | -.select2-results li em { |
2815 | - background: #feffde; |
2816 | - font-style: normal; |
2817 | -} |
2818 | -.select2-results .select2-highlighted em { |
2819 | - background: transparent; |
2820 | -} |
2821 | -.select2-results .select2-no-results, |
2822 | -.select2-results .select2-searching, |
2823 | -.select2-results .select2-selection-limit { |
2824 | - background: #f4f4f4; |
2825 | - display: list-item; |
2826 | -} |
2827 | - |
2828 | -/* |
2829 | -disabled look for already selected choices in the results dropdown |
2830 | -.select2-results .select2-disabled.select2-highlighted { |
2831 | - color: #666; |
2832 | - background: #f4f4f4; |
2833 | - display: list-item; |
2834 | - cursor: default; |
2835 | -} |
2836 | -.select2-results .select2-disabled { |
2837 | - background: #f4f4f4; |
2838 | - display: list-item; |
2839 | - cursor: default; |
2840 | -} |
2841 | -*/ |
2842 | -.select2-results .select2-disabled { |
2843 | - display: none; |
2844 | -} |
2845 | - |
2846 | -.select2-more-results.select2-active { |
2847 | - background: #f4f4f4 url('spinner.gif') no-repeat 100%; |
2848 | -} |
2849 | - |
2850 | -.select2-more-results { |
2851 | - background: #f4f4f4; |
2852 | - display: list-item; |
2853 | -} |
2854 | - |
2855 | -/* disabled styles */ |
2856 | - |
2857 | -.select2-container.select2-container-disabled .select2-choice { |
2858 | - background-color: #f4f4f4; |
2859 | - background-image: none; |
2860 | - border: 1px solid #ddd; |
2861 | - cursor: default; |
2862 | -} |
2863 | - |
2864 | -.select2-container.select2-container-disabled .select2-choice div { |
2865 | - background-color: #f4f4f4; |
2866 | - background-image: none; |
2867 | - border-left: 0; |
2868 | -} |
2869 | - |
2870 | - |
2871 | -/* multiselect */ |
2872 | - |
2873 | -.select2-container-multi .select2-choices { |
2874 | - background-color: #fff; |
2875 | - background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(1%, #eeeeee), color-stop(15%, #ffffff)); |
2876 | - background-image: -webkit-linear-gradient(top, #eeeeee 1%, #ffffff 15%); |
2877 | - background-image: -moz-linear-gradient(top, #eeeeee 1%, #ffffff 15%); |
2878 | - background-image: -o-linear-gradient(top, #eeeeee 1%, #ffffff 15%); |
2879 | - background-image: -ms-linear-gradient(top, #eeeeee 1%, #ffffff 15%); |
2880 | - background-image: linear-gradient(top, #eeeeee 1%, #ffffff 15%); |
2881 | - border: 1px solid #aaa; |
2882 | - margin: 0; |
2883 | - padding: 0; |
2884 | - cursor: text; |
2885 | - overflow: hidden; |
2886 | - height: auto !important; |
2887 | - height: 1%; |
2888 | - position: relative; |
2889 | -} |
2890 | - |
2891 | -.select2-container-multi .select2-choices { |
2892 | - min-height: 26px; |
2893 | -} |
2894 | - |
2895 | -.select2-container-multi.select2-container-active .select2-choices { |
2896 | - -webkit-box-shadow: 0 0 5px rgba(0,0,0,.3); |
2897 | - -moz-box-shadow : 0 0 5px rgba(0,0,0,.3); |
2898 | - -o-box-shadow : 0 0 5px rgba(0,0,0,.3); |
2899 | - box-shadow : 0 0 5px rgba(0,0,0,.3); |
2900 | - border: 1px solid #5897fb; |
2901 | - outline: none; |
2902 | -} |
2903 | -.select2-container-multi .select2-choices li { |
2904 | - float: left; |
2905 | - list-style: none; |
2906 | -} |
2907 | -.select2-container-multi .select2-choices .select2-search-field { |
2908 | - white-space: nowrap; |
2909 | - margin: 0; |
2910 | - padding: 0; |
2911 | -} |
2912 | - |
2913 | -.select2-container-multi .select2-choices .select2-search-field input { |
2914 | - color: #666; |
2915 | - background: transparent !important; |
2916 | - font-family: sans-serif; |
2917 | - font-size: 100%; |
2918 | - height: 15px; |
2919 | - padding: 5px; |
2920 | - margin: 1px 0; |
2921 | - outline: 0; |
2922 | - border: 0; |
2923 | - -webkit-box-shadow: none; |
2924 | - -moz-box-shadow : none; |
2925 | - -o-box-shadow : none; |
2926 | - box-shadow : none; |
2927 | -} |
2928 | - |
2929 | -.select2-container-multi .select2-choices .select2-search-field input.select2-active { |
2930 | - background: #fff url('spinner.gif') no-repeat 100% !important; |
2931 | -} |
2932 | - |
2933 | -.select2-default { |
2934 | - color: #999 !important; |
2935 | -} |
2936 | - |
2937 | -.select2-container-multi .select2-choices .select2-search-choice { |
2938 | - -webkit-border-radius: 3px; |
2939 | - -moz-border-radius : 3px; |
2940 | - border-radius : 3px; |
2941 | - -moz-background-clip : padding; |
2942 | - -webkit-background-clip: padding-box; |
2943 | - background-clip : padding-box; |
2944 | - background-color: #e4e4e4; |
2945 | - filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f4f4f4', endColorstr='#eeeeee', GradientType=0 ); |
2946 | - background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), color-stop(100%, #eeeeee)); |
2947 | - background-image: -webkit-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%); |
2948 | - background-image: -moz-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%); |
2949 | - background-image: -o-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%); |
2950 | - background-image: -ms-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%); |
2951 | - background-image: linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%); |
2952 | - -webkit-box-shadow: 0 0 2px #ffffff inset, 0 1px 0 rgba(0,0,0,0.05); |
2953 | - -moz-box-shadow : 0 0 2px #ffffff inset, 0 1px 0 rgba(0,0,0,0.05); |
2954 | - box-shadow : 0 0 2px #ffffff inset, 0 1px 0 rgba(0,0,0,0.05); |
2955 | - color: #333; |
2956 | - border: 1px solid #aaaaaa; |
2957 | - line-height: 13px; |
2958 | - padding: 3px 5px 3px 18px; |
2959 | - margin: 3px 0 3px 5px; |
2960 | - position: relative; |
2961 | - cursor: default; |
2962 | -} |
2963 | -.select2-container-multi .select2-choices .select2-search-choice span { |
2964 | - cursor: default; |
2965 | -} |
2966 | -.select2-container-multi .select2-choices .select2-search-choice-focus { |
2967 | - background: #d4d4d4; |
2968 | -} |
2969 | - |
2970 | -.select2-search-choice-close { |
2971 | - display: block; |
2972 | - position: absolute; |
2973 | - right: 3px; |
2974 | - top: 4px; |
2975 | - width: 12px; |
2976 | - height: 13px; |
2977 | - font-size: 1px; |
2978 | - background: url('select2.png') right top no-repeat; |
2979 | - outline: none; |
2980 | -} |
2981 | - |
2982 | -.select2-container-multi .select2-search-choice-close { |
2983 | - left: 3px; |
2984 | -} |
2985 | - |
2986 | - |
2987 | -.select2-container-multi .select2-choices .select2-search-choice .select2-search-choice-close:hover { |
2988 | - background-position: right -11px; |
2989 | -} |
2990 | -.select2-container-multi .select2-choices .select2-search-choice-focus .select2-search-choice-close { |
2991 | - background-position: right -11px; |
2992 | -} |
2993 | - |
2994 | -/* disabled styles */ |
2995 | - |
2996 | -.select2-container-multi.select2-container-disabled .select2-choices{ |
2997 | - background-color: #f4f4f4; |
2998 | - background-image: none; |
2999 | - border: 1px solid #ddd; |
3000 | - cursor: default; |
3001 | -} |
3002 | - |
3003 | -.select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice { |
3004 | - background-image: none; |
3005 | - background-color: #f4f4f4; |
3006 | - border: 1px solid #ddd; |
3007 | - padding: 3px 5px 3px 5px; |
3008 | -} |
3009 | - |
3010 | -.select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice .select2-search-choice-close { |
3011 | - display: none; |
3012 | -} |
3013 | -/* end multiselect */ |
3014 | - |
3015 | -.select2-result-selectable .select2-match, |
3016 | -.select2-result-unselectable .select2-result-selectable .select2-match { text-decoration: underline; } |
3017 | -.select2-result-unselectable .select2-match { text-decoration: none; } |
3018 | - |
3019 | -.select2-offscreen { position: absolute; left: -10000px; } |
3020 | - |
3021 | -/* Retina-ize icons */ |
3022 | - |
3023 | -@media only screen and (-webkit-min-device-pixel-ratio: 1.5) { |
3024 | - .select2-search input, .select2-search-choice-close, .select2-container .select2-choice abbr, .select2-container .select2-choice div b { |
3025 | - background-image: url(select2x2.png) !important; |
3026 | - background-repeat: no-repeat !important; |
3027 | - background-size: 60px 40px !important; |
3028 | - } |
3029 | - .select2-search input { |
3030 | - background-position: 100% -21px !important; |
3031 | - } |
3032 | -} |
3033 | \ No newline at end of file |
3034 | |
3035 | === removed file 'base_import/static/lib/select2/select2.js' |
3036 | --- base_import/static/lib/select2/select2.js 2013-10-27 12:31:04 +0000 |
3037 | +++ base_import/static/lib/select2/select2.js 1970-01-01 00:00:00 +0000 |
3038 | @@ -1,2407 +0,0 @@ |
3039 | -/* |
3040 | - Copyright 2012 Igor Vaynberg |
3041 | - |
3042 | - Version: @@ver@@ Timestamp: @@timestamp@@ |
3043 | - |
3044 | - Licensed under the Apache License, Version 2.0 (the "License"); you may not use this work except in |
3045 | - compliance with the License. You may obtain a copy of the License in the LICENSE file, or at: |
3046 | - |
3047 | - http://www.apache.org/licenses/LICENSE-2.0 |
3048 | - |
3049 | - Unless required by applicable law or agreed to in writing, software distributed under the License is |
3050 | - distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
3051 | - See the License for the specific language governing permissions and limitations under the License. |
3052 | - */ |
3053 | - (function ($) { |
3054 | - if(typeof $.fn.each2 == "undefined"){ |
3055 | - $.fn.extend({ |
3056 | - /* |
3057 | - * 4-10 times faster .each replacement |
3058 | - * use it carefully, as it overrides jQuery context of element on each iteration |
3059 | - */ |
3060 | - each2 : function (c) { |
3061 | - var j = $([0]), i = -1, l = this.length; |
3062 | - while ( |
3063 | - ++i < l |
3064 | - && (j.context = j[0] = this[i]) |
3065 | - && c.call(j[0], i, j) !== false //"this"=DOM, i=index, j=jQuery object |
3066 | - ); |
3067 | - return this; |
3068 | - } |
3069 | - }); |
3070 | - } |
3071 | -})(jQuery); |
3072 | - |
3073 | -(function ($, undefined) { |
3074 | - "use strict"; |
3075 | - /*global document, window, jQuery, console */ |
3076 | - |
3077 | - if (window.Select2 !== undefined) { |
3078 | - return; |
3079 | - } |
3080 | - |
3081 | - var KEY, AbstractSelect2, SingleSelect2, MultiSelect2, nextUid, sizer; |
3082 | - |
3083 | - KEY = { |
3084 | - TAB: 9, |
3085 | - ENTER: 13, |
3086 | - ESC: 27, |
3087 | - SPACE: 32, |
3088 | - LEFT: 37, |
3089 | - UP: 38, |
3090 | - RIGHT: 39, |
3091 | - DOWN: 40, |
3092 | - SHIFT: 16, |
3093 | - CTRL: 17, |
3094 | - ALT: 18, |
3095 | - PAGE_UP: 33, |
3096 | - PAGE_DOWN: 34, |
3097 | - HOME: 36, |
3098 | - END: 35, |
3099 | - BACKSPACE: 8, |
3100 | - DELETE: 46, |
3101 | - isArrow: function (k) { |
3102 | - k = k.which ? k.which : k; |
3103 | - switch (k) { |
3104 | - case KEY.LEFT: |
3105 | - case KEY.RIGHT: |
3106 | - case KEY.UP: |
3107 | - case KEY.DOWN: |
3108 | - return true; |
3109 | - } |
3110 | - return false; |
3111 | - }, |
3112 | - isControl: function (e) { |
3113 | - var k = e.which; |
3114 | - switch (k) { |
3115 | - case KEY.SHIFT: |
3116 | - case KEY.CTRL: |
3117 | - case KEY.ALT: |
3118 | - return true; |
3119 | - } |
3120 | - |
3121 | - if (e.metaKey) return true; |
3122 | - |
3123 | - return false; |
3124 | - }, |
3125 | - isFunctionKey: function (k) { |
3126 | - k = k.which ? k.which : k; |
3127 | - return k >= 112 && k <= 123; |
3128 | - } |
3129 | - }; |
3130 | - |
3131 | - nextUid=(function() { var counter=1; return function() { return counter++; }; }()); |
3132 | - |
3133 | - function indexOf(value, array) { |
3134 | - var i = 0, l = array.length, v; |
3135 | - |
3136 | - if (typeof value === "undefined") { |
3137 | - return -1; |
3138 | - } |
3139 | - |
3140 | - if (value.constructor === String) { |
3141 | - for (; i < l; i = i + 1) if (value.localeCompare(array[i]) === 0) return i; |
3142 | - } else { |
3143 | - for (; i < l; i = i + 1) { |
3144 | - v = array[i]; |
3145 | - if (v.constructor === String) { |
3146 | - if (v.localeCompare(value) === 0) return i; |
3147 | - } else { |
3148 | - if (v === value) return i; |
3149 | - } |
3150 | - } |
3151 | - } |
3152 | - return -1; |
3153 | - } |
3154 | - |
3155 | - /** |
3156 | - * Compares equality of a and b taking into account that a and b may be strings, in which case localeCompare is used |
3157 | - * @param a |
3158 | - * @param b |
3159 | - */ |
3160 | - function equal(a, b) { |
3161 | - if (a === b) return true; |
3162 | - if (a === undefined || b === undefined) return false; |
3163 | - if (a === null || b === null) return false; |
3164 | - if (a.constructor === String) return a.localeCompare(b) === 0; |
3165 | - if (b.constructor === String) return b.localeCompare(a) === 0; |
3166 | - return false; |
3167 | - } |
3168 | - |
3169 | - /** |
3170 | - * Splits the string into an array of values, trimming each value. An empty array is returned for nulls or empty |
3171 | - * strings |
3172 | - * @param string |
3173 | - * @param separator |
3174 | - */ |
3175 | - function splitVal(string, separator) { |
3176 | - var val, i, l; |
3177 | - if (string === null || string.length < 1) return []; |
3178 | - val = string.split(separator); |
3179 | - for (i = 0, l = val.length; i < l; i = i + 1) val[i] = $.trim(val[i]); |
3180 | - return val; |
3181 | - } |
3182 | - |
3183 | - function getSideBorderPadding(element) { |
3184 | - return element.outerWidth() - element.width(); |
3185 | - } |
3186 | - |
3187 | - function installKeyUpChangeEvent(element) { |
3188 | - var key="keyup-change-value"; |
3189 | - element.bind("keydown", function () { |
3190 | - if ($.data(element, key) === undefined) { |
3191 | - $.data(element, key, element.val()); |
3192 | - } |
3193 | - }); |
3194 | - element.bind("keyup", function () { |
3195 | - var val= $.data(element, key); |
3196 | - if (val !== undefined && element.val() !== val) { |
3197 | - $.removeData(element, key); |
3198 | - element.trigger("keyup-change"); |
3199 | - } |
3200 | - }); |
3201 | - } |
3202 | - |
3203 | - $(document).delegate("*", "mousemove", function (e) { |
3204 | - $.data(document, "select2-lastpos", {x: e.pageX, y: e.pageY}); |
3205 | - }); |
3206 | - |
3207 | - /** |
3208 | - * filters mouse events so an event is fired only if the mouse moved. |
3209 | - * |
3210 | - * filters out mouse events that occur when mouse is stationary but |
3211 | - * the elements under the pointer are scrolled. |
3212 | - */ |
3213 | - function installFilteredMouseMove(element) { |
3214 | - element.bind("mousemove", function (e) { |
3215 | - var lastpos = $.data(document, "select2-lastpos"); |
3216 | - if (lastpos === undefined || lastpos.x !== e.pageX || lastpos.y !== e.pageY) { |
3217 | - $(e.target).trigger("mousemove-filtered", e); |
3218 | - } |
3219 | - }); |
3220 | - } |
3221 | - |
3222 | - /** |
3223 | - * Debounces a function. Returns a function that calls the original fn function only if no invocations have been made |
3224 | - * within the last quietMillis milliseconds. |
3225 | - * |
3226 | - * @param quietMillis number of milliseconds to wait before invoking fn |
3227 | - * @param fn function to be debounced |
3228 | - * @param ctx object to be used as this reference within fn |
3229 | - * @return debounced version of fn |
3230 | - */ |
3231 | - function debounce(quietMillis, fn, ctx) { |
3232 | - ctx = ctx || undefined; |
3233 | - var timeout; |
3234 | - return function () { |
3235 | - var args = arguments; |
3236 | - window.clearTimeout(timeout); |
3237 | - timeout = window.setTimeout(function() { |
3238 | - fn.apply(ctx, args); |
3239 | - }, quietMillis); |
3240 | - }; |
3241 | - } |
3242 | - |
3243 | - /** |
3244 | - * A simple implementation of a thunk |
3245 | - * @param formula function used to lazily initialize the thunk |
3246 | - * @return {Function} |
3247 | - */ |
3248 | - function thunk(formula) { |
3249 | - var evaluated = false, |
3250 | - value; |
3251 | - return function() { |
3252 | - if (evaluated === false) { value = formula(); evaluated = true; } |
3253 | - return value; |
3254 | - }; |
3255 | - }; |
3256 | - |
3257 | - function installDebouncedScroll(threshold, element) { |
3258 | - var notify = debounce(threshold, function (e) { element.trigger("scroll-debounced", e);}); |
3259 | - element.bind("scroll", function (e) { |
3260 | - if (indexOf(e.target, element.get()) >= 0) notify(e); |
3261 | - }); |
3262 | - } |
3263 | - |
3264 | - function killEvent(event) { |
3265 | - event.preventDefault(); |
3266 | - event.stopPropagation(); |
3267 | - } |
3268 | - |
3269 | - function measureTextWidth(e) { |
3270 | - if (!sizer){ |
3271 | - var style = e[0].currentStyle || window.getComputedStyle(e[0], null); |
3272 | - sizer = $("<div></div>").css({ |
3273 | - position: "absolute", |
3274 | - left: "-10000px", |
3275 | - top: "-10000px", |
3276 | - display: "none", |
3277 | - fontSize: style.fontSize, |
3278 | - fontFamily: style.fontFamily, |
3279 | - fontStyle: style.fontStyle, |
3280 | - fontWeight: style.fontWeight, |
3281 | - letterSpacing: style.letterSpacing, |
3282 | - textTransform: style.textTransform, |
3283 | - whiteSpace: "nowrap" |
3284 | - }); |
3285 | - $("body").append(sizer); |
3286 | - } |
3287 | - sizer.text(e.val()); |
3288 | - return sizer.width(); |
3289 | - } |
3290 | - |
3291 | - function markMatch(text, term, markup) { |
3292 | - var match=text.toUpperCase().indexOf(term.toUpperCase()), |
3293 | - tl=term.length; |
3294 | - |
3295 | - if (match<0) { |
3296 | - markup.push(text); |
3297 | - return; |
3298 | - } |
3299 | - |
3300 | - markup.push(text.substring(0, match)); |
3301 | - markup.push("<span class='select2-match'>"); |
3302 | - markup.push(text.substring(match, match + tl)); |
3303 | - markup.push("</span>"); |
3304 | - markup.push(text.substring(match + tl, text.length)); |
3305 | - } |
3306 | - |
3307 | - /** |
3308 | - * Produces an ajax-based query function |
3309 | - * |
3310 | - * @param options object containing configuration paramters |
3311 | - * @param options.transport function that will be used to execute the ajax request. must be compatible with parameters supported by $.ajax |
3312 | - * @param options.url url for the data |
3313 | - * @param options.data a function(searchTerm, pageNumber, context) that should return an object containing query string parameters for the above url. |
3314 | - * @param options.dataType request data type: ajax, jsonp, other datatatypes supported by jQuery's $.ajax function or the transport function if specified |
3315 | - * @param options.traditional a boolean flag that should be true if you wish to use the traditional style of param serialization for the ajax request |
3316 | - * @param options.quietMillis (optional) milliseconds to wait before making the ajaxRequest, helps debounce the ajax function if invoked too often |
3317 | - * @param options.results a function(remoteData, pageNumber) that converts data returned form the remote request to the format expected by Select2. |
3318 | - * The expected format is an object containing the following keys: |
3319 | - * results array of objects that will be used as choices |
3320 | - * more (optional) boolean indicating whether there are more results available |
3321 | - * Example: {results:[{id:1, text:'Red'},{id:2, text:'Blue'}], more:true} |
3322 | - */ |
3323 | - function ajax(options) { |
3324 | - var timeout, // current scheduled but not yet executed request |
3325 | - requestSequence = 0, // sequence used to drop out-of-order responses |
3326 | - handler = null, |
3327 | - quietMillis = options.quietMillis || 100; |
3328 | - |
3329 | - return function (query) { |
3330 | - window.clearTimeout(timeout); |
3331 | - timeout = window.setTimeout(function () { |
3332 | - requestSequence += 1; // increment the sequence |
3333 | - var requestNumber = requestSequence, // this request's sequence number |
3334 | - data = options.data, // ajax data function |
3335 | - transport = options.transport || $.ajax, |
3336 | - traditional = options.traditional || false, |
3337 | - type = options.type || 'GET'; // set type of request (GET or POST) |
3338 | - |
3339 | - data = data.call(this, query.term, query.page, query.context); |
3340 | - |
3341 | - if( null !== handler) { handler.abort(); } |
3342 | - |
3343 | - handler = transport.call(null, { |
3344 | - url: options.url, |
3345 | - dataType: options.dataType, |
3346 | - data: data, |
3347 | - type: type, |
3348 | - traditional: traditional, |
3349 | - success: function (data) { |
3350 | - if (requestNumber < requestSequence) { |
3351 | - return; |
3352 | - } |
3353 | - // TODO 3.0 - replace query.page with query so users have access to term, page, etc. |
3354 | - var results = options.results(data, query.page); |
3355 | - query.callback(results); |
3356 | - } |
3357 | - }); |
3358 | - }, quietMillis); |
3359 | - }; |
3360 | - } |
3361 | - |
3362 | - /** |
3363 | - * Produces a query function that works with a local array |
3364 | - * |
3365 | - * @param options object containing configuration parameters. The options parameter can either be an array or an |
3366 | - * object. |
3367 | - * |
3368 | - * If the array form is used it is assumed that it contains objects with 'id' and 'text' keys. |
3369 | - * |
3370 | - * If the object form is used ti is assumed that it contains 'data' and 'text' keys. The 'data' key should contain |
3371 | - * an array of objects that will be used as choices. These objects must contain at least an 'id' key. The 'text' |
3372 | - * key can either be a String in which case it is expected that each element in the 'data' array has a key with the |
3373 | - * value of 'text' which will be used to match choices. Alternatively, text can be a function(item) that can extract |
3374 | - * the text. |
3375 | - */ |
3376 | - function local(options) { |
3377 | - var data = options, // data elements |
3378 | - dataText, |
3379 | - text = function (item) { return ""+item.text; }; // function used to retrieve the text portion of a data item that is matched against the search |
3380 | - |
3381 | - if (!$.isArray(data)) { |
3382 | - text = data.text; |
3383 | - // if text is not a function we assume it to be a key name |
3384 | - if (!$.isFunction(text)) { |
3385 | - dataText = data.text; // we need to store this in a separate variable because in the next step data gets reset and data.text is no longer available |
3386 | - text = function (item) { return item[dataText]; }; |
3387 | - } |
3388 | - data = data.results; |
3389 | - } |
3390 | - |
3391 | - return function (query) { |
3392 | - var t = query.term, filtered = { results: [] }, process; |
3393 | - if (t === "") { |
3394 | - query.callback({results: data}); |
3395 | - return; |
3396 | - } |
3397 | - |
3398 | - process = function(datum, collection) { |
3399 | - var group, attr; |
3400 | - datum = datum[0]; |
3401 | - if (datum.children) { |
3402 | - group = {}; |
3403 | - for (attr in datum) { |
3404 | - if (datum.hasOwnProperty(attr)) group[attr]=datum[attr]; |
3405 | - } |
3406 | - group.children=[]; |
3407 | - $(datum.children).each2(function(i, childDatum) { process(childDatum, group.children); }); |
3408 | - if (group.children.length) { |
3409 | - collection.push(group); |
3410 | - } |
3411 | - } else { |
3412 | - if (query.matcher(t, text(datum))) { |
3413 | - collection.push(datum); |
3414 | - } |
3415 | - } |
3416 | - }; |
3417 | - |
3418 | - $(data).each2(function(i, datum) { process(datum, filtered.results); }); |
3419 | - query.callback(filtered); |
3420 | - }; |
3421 | - } |
3422 | - |
3423 | - // TODO javadoc |
3424 | - function tags(data) { |
3425 | - // TODO even for a function we should probably return a wrapper that does the same object/string check as |
3426 | - // the function for arrays. otherwise only functions that return objects are supported. |
3427 | - if ($.isFunction(data)) { |
3428 | - return data; |
3429 | - } |
3430 | - |
3431 | - // if not a function we assume it to be an array |
3432 | - |
3433 | - return function (query) { |
3434 | - var t = query.term, filtered = {results: []}; |
3435 | - $(data).each(function () { |
3436 | - var isObject = this.text !== undefined, |
3437 | - text = isObject ? this.text : this; |
3438 | - if (t === "" || query.matcher(t, text)) { |
3439 | - filtered.results.push(isObject ? this : {id: this, text: this}); |
3440 | - } |
3441 | - }); |
3442 | - query.callback(filtered); |
3443 | - }; |
3444 | - } |
3445 | - |
3446 | - /** |
3447 | - * Checks if the formatter function should be used. |
3448 | - * |
3449 | - * Throws an error if it is not a function. Returns true if it should be used, |
3450 | - * false if no formatting should be performed. |
3451 | - * |
3452 | - * @param formatter |
3453 | - */ |
3454 | - function checkFormatter(formatter, formatterName) { |
3455 | - if ($.isFunction(formatter)) return true; |
3456 | - if (!formatter) return false; |
3457 | - throw new Error("formatterName must be a function or a falsy value"); |
3458 | - } |
3459 | - |
3460 | - function evaluate(val) { |
3461 | - return $.isFunction(val) ? val() : val; |
3462 | - } |
3463 | - |
3464 | - function countResults(results) { |
3465 | - var count = 0; |
3466 | - $.each(results, function(i, item) { |
3467 | - if (item.children) { |
3468 | - count += countResults(item.children); |
3469 | - } else { |
3470 | - count++; |
3471 | - } |
3472 | - }); |
3473 | - return count; |
3474 | - } |
3475 | - |
3476 | - /** |
3477 | - * Default tokenizer. This function uses breaks the input on substring match of any string from the |
3478 | - * opts.tokenSeparators array and uses opts.createSearchChoice to create the choice object. Both of those |
3479 | - * two options have to be defined in order for the tokenizer to work. |
3480 | - * |
3481 | - * @param input text user has typed so far or pasted into the search field |
3482 | - * @param selection currently selected choices |
3483 | - * @param selectCallback function(choice) callback tho add the choice to selection |
3484 | - * @param opts select2's opts |
3485 | - * @return undefined/null to leave the current input unchanged, or a string to change the input to the returned value |
3486 | - */ |
3487 | - function defaultTokenizer(input, selection, selectCallback, opts) { |
3488 | - var original = input, // store the original so we can compare and know if we need to tell the search to update its text |
3489 | - dupe = false, // check for whether a token we extracted represents a duplicate selected choice |
3490 | - token, // token |
3491 | - index, // position at which the separator was found |
3492 | - i, l, // looping variables |
3493 | - separator; // the matched separator |
3494 | - |
3495 | - if (!opts.createSearchChoice || !opts.tokenSeparators || opts.tokenSeparators.length < 1) return undefined; |
3496 | - |
3497 | - while (true) { |
3498 | - index = -1; |
3499 | - |
3500 | - for (i = 0, l = opts.tokenSeparators.length; i < l; i++) { |
3501 | - separator = opts.tokenSeparators[i]; |
3502 | - index = input.indexOf(separator); |
3503 | - if (index >= 0) break; |
3504 | - } |
3505 | - |
3506 | - if (index < 0) break; // did not find any token separator in the input string, bail |
3507 | - |
3508 | - token = input.substring(0, index); |
3509 | - input = input.substring(index + separator.length); |
3510 | - |
3511 | - if (token.length > 0) { |
3512 | - token = opts.createSearchChoice(token, selection); |
3513 | - if (token !== undefined && token !== null && opts.id(token) !== undefined && opts.id(token) !== null) { |
3514 | - dupe = false; |
3515 | - for (i = 0, l = selection.length; i < l; i++) { |
3516 | - if (equal(opts.id(token), opts.id(selection[i]))) { |
3517 | - dupe = true; break; |
3518 | - } |
3519 | - } |
3520 | - |
3521 | - if (!dupe) selectCallback(token); |
3522 | - } |
3523 | - } |
3524 | - } |
3525 | - |
3526 | - if (original.localeCompare(input) != 0) return input; |
3527 | - } |
3528 | - |
3529 | - /** |
3530 | - * blurs any Select2 container that has focus when an element outside them was clicked or received focus |
3531 | - * |
3532 | - * also takes care of clicks on label tags that point to the source element |
3533 | - */ |
3534 | - $(document).ready(function () { |
3535 | - $(document).delegate("*", "mousedown touchend", function (e) { |
3536 | - var target = $(e.target).closest("div.select2-container").get(0), attr; |
3537 | - if (target) { |
3538 | - $(document).find("div.select2-container-active").each(function () { |
3539 | - if (this !== target) $(this).data("select2").blur(); |
3540 | - }); |
3541 | - } else { |
3542 | - target = $(e.target).closest("div.select2-drop").get(0); |
3543 | - $(document).find("div.select2-drop-active").each(function () { |
3544 | - if (this !== target) $(this).data("select2").blur(); |
3545 | - }); |
3546 | - } |
3547 | - |
3548 | - target=$(e.target); |
3549 | - attr = target.attr("for"); |
3550 | - if ("LABEL" === e.target.tagName && attr && attr.length > 0) { |
3551 | - target = $("#"+attr); |
3552 | - target = target.data("select2"); |
3553 | - if (target !== undefined) { target.focus(); e.preventDefault();} |
3554 | - } |
3555 | - }); |
3556 | - }); |
3557 | - |
3558 | - /** |
3559 | - * Creates a new class |
3560 | - * |
3561 | - * @param superClass |
3562 | - * @param methods |
3563 | - */ |
3564 | - function clazz(SuperClass, methods) { |
3565 | - var constructor = function () {}; |
3566 | - constructor.prototype = new SuperClass; |
3567 | - constructor.prototype.constructor = constructor; |
3568 | - constructor.prototype.parent = SuperClass.prototype; |
3569 | - constructor.prototype = $.extend(constructor.prototype, methods); |
3570 | - return constructor; |
3571 | - } |
3572 | - |
3573 | - AbstractSelect2 = clazz(Object, { |
3574 | - |
3575 | - // abstract |
3576 | - bind: function (func) { |
3577 | - var self = this; |
3578 | - return function () { |
3579 | - func.apply(self, arguments); |
3580 | - }; |
3581 | - }, |
3582 | - |
3583 | - // abstract |
3584 | - init: function (opts) { |
3585 | - var results, search, resultsSelector = ".select2-results"; |
3586 | - |
3587 | - // prepare options |
3588 | - this.opts = opts = this.prepareOpts(opts); |
3589 | - |
3590 | - this.id=opts.id; |
3591 | - |
3592 | - // destroy if called on an existing component |
3593 | - if (opts.element.data("select2") !== undefined && |
3594 | - opts.element.data("select2") !== null) { |
3595 | - this.destroy(); |
3596 | - } |
3597 | - |
3598 | - this.enabled=true; |
3599 | - this.container = this.createContainer(); |
3600 | - |
3601 | - this.containerId="s2id_"+(opts.element.attr("id") || "autogen"+nextUid()); |
3602 | - this.containerSelector="#"+this.containerId.replace(/([;&,\.\+\*\~':"\!\^#$%@\[\]\(\)=>\|])/g, '\\$1'); |
3603 | - this.container.attr("id", this.containerId); |
3604 | - |
3605 | - // cache the body so future lookups are cheap |
3606 | - this.body = thunk(function() { return opts.element.closest("body"); }); |
3607 | - |
3608 | - if (opts.element.attr("class") !== undefined) { |
3609 | - this.container.addClass(opts.element.attr("class").replace(/validate\[[\S ]+] ?/, '')); |
3610 | - } |
3611 | - |
3612 | - this.container.css(evaluate(opts.containerCss)); |
3613 | - this.container.addClass(evaluate(opts.containerCssClass)); |
3614 | - |
3615 | - // swap container for the element |
3616 | - this.opts.element |
3617 | - .data("select2", this) |
3618 | - .hide() |
3619 | - .before(this.container); |
3620 | - this.container.data("select2", this); |
3621 | - |
3622 | - this.dropdown = this.container.find(".select2-drop"); |
3623 | - this.dropdown.addClass(evaluate(opts.dropdownCssClass)); |
3624 | - this.dropdown.data("select2", this); |
3625 | - |
3626 | - this.results = results = this.container.find(resultsSelector); |
3627 | - this.search = search = this.container.find("input.select2-input"); |
3628 | - |
3629 | - search.attr("tabIndex", this.opts.element.attr("tabIndex")); |
3630 | - |
3631 | - this.resultsPage = 0; |
3632 | - this.context = null; |
3633 | - |
3634 | - // initialize the container |
3635 | - this.initContainer(); |
3636 | - this.initContainerWidth(); |
3637 | - |
3638 | - installFilteredMouseMove(this.results); |
3639 | - this.dropdown.delegate(resultsSelector, "mousemove-filtered", this.bind(this.highlightUnderEvent)); |
3640 | - |
3641 | - installDebouncedScroll(80, this.results); |
3642 | - this.dropdown.delegate(resultsSelector, "scroll-debounced", this.bind(this.loadMoreIfNeeded)); |
3643 | - |
3644 | - // if jquery.mousewheel plugin is installed we can prevent out-of-bounds scrolling of results via mousewheel |
3645 | - if ($.fn.mousewheel) { |
3646 | - results.mousewheel(function (e, delta, deltaX, deltaY) { |
3647 | - var top = results.scrollTop(), height; |
3648 | - if (deltaY > 0 && top - deltaY <= 0) { |
3649 | - results.scrollTop(0); |
3650 | - killEvent(e); |
3651 | - } else if (deltaY < 0 && results.get(0).scrollHeight - results.scrollTop() + deltaY <= results.height()) { |
3652 | - results.scrollTop(results.get(0).scrollHeight - results.height()); |
3653 | - killEvent(e); |
3654 | - } |
3655 | - }); |
3656 | - } |
3657 | - |
3658 | - installKeyUpChangeEvent(search); |
3659 | - search.bind("keyup-change", this.bind(this.updateResults)); |
3660 | - search.bind("focus", function () { search.addClass("select2-focused"); if (search.val() === " ") search.val(""); }); |
3661 | - search.bind("blur", function () { search.removeClass("select2-focused");}); |
3662 | - |
3663 | - this.dropdown.delegate(resultsSelector, "mouseup", this.bind(function (e) { |
3664 | - if ($(e.target).closest(".select2-result-selectable:not(.select2-disabled)").length > 0) { |
3665 | - this.highlightUnderEvent(e); |
3666 | - this.selectHighlighted(e); |
3667 | - } else { |
3668 | - this.focusSearch(); |
3669 | - } |
3670 | - killEvent(e); |
3671 | - })); |
3672 | - |
3673 | - // trap all mouse events from leaving the dropdown. sometimes there may be a modal that is listening |
3674 | - // for mouse events outside of itself so it can close itself. since the dropdown is now outside the select2's |
3675 | - // dom it will trigger the popup close, which is not what we want |
3676 | - this.dropdown.bind("click mouseup mousedown", function (e) { e.stopPropagation(); }); |
3677 | - |
3678 | - if ($.isFunction(this.opts.initSelection)) { |
3679 | - // initialize selection based on the current value of the source element |
3680 | - this.initSelection(); |
3681 | - |
3682 | - // if the user has provided a function that can set selection based on the value of the source element |
3683 | - // we monitor the change event on the element and trigger it, allowing for two way synchronization |
3684 | - this.monitorSource(); |
3685 | - } |
3686 | - |
3687 | - if (opts.element.is(":disabled") || opts.element.is("[readonly='readonly']")) this.disable(); |
3688 | - }, |
3689 | - |
3690 | - // abstract |
3691 | - destroy: function () { |
3692 | - var select2 = this.opts.element.data("select2"); |
3693 | - if (select2 !== undefined) { |
3694 | - select2.container.remove(); |
3695 | - select2.dropdown.remove(); |
3696 | - select2.opts.element |
3697 | - .removeData("select2") |
3698 | - .unbind(".select2") |
3699 | - .show(); |
3700 | - } |
3701 | - }, |
3702 | - |
3703 | - // abstract |
3704 | - prepareOpts: function (opts) { |
3705 | - var element, select, idKey, ajaxUrl; |
3706 | - |
3707 | - element = opts.element; |
3708 | - |
3709 | - if (element.get(0).tagName.toLowerCase() === "select") { |
3710 | - this.select = select = opts.element; |
3711 | - } |
3712 | - |
3713 | - if (select) { |
3714 | - // these options are not allowed when attached to a select because they are picked up off the element itself |
3715 | - $.each(["id", "multiple", "ajax", "query", "createSearchChoice", "initSelection", "data", "tags"], function () { |
3716 | - if (this in opts) { |
3717 | - throw new Error("Option '" + this + "' is not allowed for Select2 when attached to a <select> element."); |
3718 | - } |
3719 | - }); |
3720 | - } |
3721 | - |
3722 | - opts = $.extend({}, { |
3723 | - populateResults: function(container, results, query) { |
3724 | - var populate, data, result, children, id=this.opts.id, self=this; |
3725 | - |
3726 | - populate=function(results, container, depth) { |
3727 | - |
3728 | - var i, l, result, selectable, compound, node, label, innerContainer, formatted; |
3729 | - for (i = 0, l = results.length; i < l; i = i + 1) { |
3730 | - |
3731 | - result=results[i]; |
3732 | - selectable=id(result) !== undefined; |
3733 | - compound=("children" in result) && result.children.length > 0; |
3734 | - |
3735 | - node=$("<li></li>"); |
3736 | - node.addClass("select2-results-dept-"+depth); |
3737 | - node.addClass("select2-result"); |
3738 | - node.addClass(selectable ? "select2-result-selectable" : "select2-result-unselectable"); |
3739 | - if (compound) { node.addClass("select2-result-with-children"); } |
3740 | - node.addClass(self.opts.formatResultCssClass(result)); |
3741 | - |
3742 | - label=$("<div></div>"); |
3743 | - label.addClass("select2-result-label"); |
3744 | - |
3745 | - formatted=opts.formatResult(result, label, query); |
3746 | - if (formatted!==undefined) { |
3747 | - label.html(self.opts.escapeMarkup(formatted)); |
3748 | - } |
3749 | - |
3750 | - node.append(label); |
3751 | - |
3752 | - if (compound) { |
3753 | - |
3754 | - innerContainer=$("<ul></ul>"); |
3755 | - innerContainer.addClass("select2-result-sub"); |
3756 | - populate(result.children, innerContainer, depth+1); |
3757 | - node.append(innerContainer); |
3758 | - } |
3759 | - |
3760 | - node.data("select2-data", result); |
3761 | - container.append(node); |
3762 | - } |
3763 | - }; |
3764 | - |
3765 | - populate(results, container, 0); |
3766 | - } |
3767 | - }, $.fn.select2.defaults, opts); |
3768 | - |
3769 | - if (typeof(opts.id) !== "function") { |
3770 | - idKey = opts.id; |
3771 | - opts.id = function (e) { return e[idKey]; }; |
3772 | - } |
3773 | - |
3774 | - if (select) { |
3775 | - opts.query = this.bind(function (query) { |
3776 | - var data = { results: [], more: false }, |
3777 | - term = query.term, |
3778 | - children, firstChild, process; |
3779 | - |
3780 | - process=function(element, collection) { |
3781 | - var group; |
3782 | - if (element.is("option")) { |
3783 | - if (query.matcher(term, element.text(), element)) { |
3784 | - collection.push({id:element.attr("value"), text:element.text(), element: element.get(), css: element.attr("class")}); |
3785 | - } |
3786 | - } else if (element.is("optgroup")) { |
3787 | - group={text:element.attr("label"), children:[], element: element.get(), css: element.attr("class")}; |
3788 | - element.children().each2(function(i, elm) { process(elm, group.children); }); |
3789 | - if (group.children.length>0) { |
3790 | - collection.push(group); |
3791 | - } |
3792 | - } |
3793 | - }; |
3794 | - |
3795 | - children=element.children(); |
3796 | - |
3797 | - // ignore the placeholder option if there is one |
3798 | - if (this.getPlaceholder() !== undefined && children.length > 0) { |
3799 | - firstChild = children[0]; |
3800 | - if ($(firstChild).text() === "") { |
3801 | - children=children.not(firstChild); |
3802 | - } |
3803 | - } |
3804 | - |
3805 | - children.each2(function(i, elm) { process(elm, data.results); }); |
3806 | - |
3807 | - query.callback(data); |
3808 | - }); |
3809 | - // this is needed because inside val() we construct choices from options and there id is hardcoded |
3810 | - opts.id=function(e) { return e.id; }; |
3811 | - opts.formatResultCssClass = function(data) { return data.css; } |
3812 | - } else { |
3813 | - if (!("query" in opts)) { |
3814 | - if ("ajax" in opts) { |
3815 | - ajaxUrl = opts.element.data("ajax-url"); |
3816 | - if (ajaxUrl && ajaxUrl.length > 0) { |
3817 | - opts.ajax.url = ajaxUrl; |
3818 | - } |
3819 | - opts.query = ajax(opts.ajax); |
3820 | - } else if ("data" in opts) { |
3821 | - opts.query = local(opts.data); |
3822 | - } else if ("tags" in opts) { |
3823 | - opts.query = tags(opts.tags); |
3824 | - opts.createSearchChoice = function (term) { return {id: term, text: term}; }; |
3825 | - opts.initSelection = function (element, callback) { |
3826 | - var data = []; |
3827 | - $(splitVal(element.val(), opts.separator)).each(function () { |
3828 | - var id = this, text = this, tags=opts.tags; |
3829 | - if ($.isFunction(tags)) tags=tags(); |
3830 | - $(tags).each(function() { if (equal(this.id, id)) { text = this.text; return false; } }); |
3831 | - data.push({id: id, text: text}); |
3832 | - }); |
3833 | - |
3834 | - callback(data); |
3835 | - }; |
3836 | - } |
3837 | - } |
3838 | - } |
3839 | - if (typeof(opts.query) !== "function") { |
3840 | - throw "query function not defined for Select2 " + opts.element.attr("id"); |
3841 | - } |
3842 | - |
3843 | - return opts; |
3844 | - }, |
3845 | - |
3846 | - /** |
3847 | - * Monitor the original element for changes and update select2 accordingly |
3848 | - */ |
3849 | - // abstract |
3850 | - monitorSource: function () { |
3851 | - this.opts.element.bind("change.select2", this.bind(function (e) { |
3852 | - if (this.opts.element.data("select2-change-triggered") !== true) { |
3853 | - this.initSelection(); |
3854 | - } |
3855 | - })); |
3856 | - }, |
3857 | - |
3858 | - /** |
3859 | - * Triggers the change event on the source element |
3860 | - */ |
3861 | - // abstract |
3862 | - triggerChange: function (details) { |
3863 | - |
3864 | - details = details || {}; |
3865 | - details= $.extend({}, details, { type: "change", val: this.val() }); |
3866 | - // prevents recursive triggering |
3867 | - this.opts.element.data("select2-change-triggered", true); |
3868 | - this.opts.element.trigger(details); |
3869 | - this.opts.element.data("select2-change-triggered", false); |
3870 | - |
3871 | - // some validation frameworks ignore the change event and listen instead to keyup, click for selects |
3872 | - // so here we trigger the click event manually |
3873 | - this.opts.element.click(); |
3874 | - |
3875 | - // ValidationEngine ignorea the change event and listens instead to blur |
3876 | - // so here we trigger the blur event manually if so desired |
3877 | - if (this.opts.blurOnChange) |
3878 | - this.opts.element.blur(); |
3879 | - }, |
3880 | - |
3881 | - |
3882 | - // abstract |
3883 | - enable: function() { |
3884 | - if (this.enabled) return; |
3885 | - |
3886 | - this.enabled=true; |
3887 | - this.container.removeClass("select2-container-disabled"); |
3888 | - }, |
3889 | - |
3890 | - // abstract |
3891 | - disable: function() { |
3892 | - if (!this.enabled) return; |
3893 | - |
3894 | - this.close(); |
3895 | - |
3896 | - this.enabled=false; |
3897 | - this.container.addClass("select2-container-disabled"); |
3898 | - }, |
3899 | - |
3900 | - // abstract |
3901 | - opened: function () { |
3902 | - return this.container.hasClass("select2-dropdown-open"); |
3903 | - }, |
3904 | - |
3905 | - // abstract |
3906 | - positionDropdown: function() { |
3907 | - var offset = this.container.offset(), |
3908 | - height = this.container.outerHeight(), |
3909 | - width = this.container.outerWidth(), |
3910 | - dropHeight = this.dropdown.outerHeight(), |
3911 | - viewportBottom = $(window).scrollTop() + document.documentElement.clientHeight, |
3912 | - dropTop = offset.top + height, |
3913 | - dropLeft = offset.left, |
3914 | - enoughRoomBelow = dropTop + dropHeight <= viewportBottom, |
3915 | - enoughRoomAbove = (offset.top - dropHeight) >= this.body().scrollTop(), |
3916 | - aboveNow = this.dropdown.hasClass("select2-drop-above"), |
3917 | - bodyOffset, |
3918 | - above, |
3919 | - css; |
3920 | - |
3921 | - // console.log("below/ droptop:", dropTop, "dropHeight", dropHeight, "sum", (dropTop+dropHeight)+" viewport bottom", viewportBottom, "enough?", enoughRoomBelow); |
3922 | - // console.log("above/ offset.top", offset.top, "dropHeight", dropHeight, "top", (offset.top-dropHeight), "scrollTop", this.body().scrollTop(), "enough?", enoughRoomAbove); |
3923 | - |
3924 | - // fix positioning when body has an offset and is not position: static |
3925 | - |
3926 | - if (this.body().css('position') !== 'static') { |
3927 | - bodyOffset = this.body().offset(); |
3928 | - dropTop -= bodyOffset.top; |
3929 | - dropLeft -= bodyOffset.left; |
3930 | - } |
3931 | - |
3932 | - // always prefer the current above/below alignment, unless there is not enough room |
3933 | - |
3934 | - if (aboveNow) { |
3935 | - above = true; |
3936 | - if (!enoughRoomAbove && enoughRoomBelow) above = false; |
3937 | - } else { |
3938 | - above = false; |
3939 | - if (!enoughRoomBelow && enoughRoomAbove) above = true; |
3940 | - } |
3941 | - |
3942 | - if (above) { |
3943 | - dropTop = offset.top - dropHeight; |
3944 | - this.container.addClass("select2-drop-above"); |
3945 | - this.dropdown.addClass("select2-drop-above"); |
3946 | - } |
3947 | - else { |
3948 | - this.container.removeClass("select2-drop-above"); |
3949 | - this.dropdown.removeClass("select2-drop-above"); |
3950 | - } |
3951 | - |
3952 | - css = $.extend({ |
3953 | - top: dropTop, |
3954 | - left: dropLeft, |
3955 | - width: width |
3956 | - }, evaluate(this.opts.dropdownCss)); |
3957 | - |
3958 | - this.dropdown.css(css); |
3959 | - }, |
3960 | - |
3961 | - // abstract |
3962 | - shouldOpen: function() { |
3963 | - var event; |
3964 | - |
3965 | - if (this.opened()) return false; |
3966 | - |
3967 | - event = jQuery.Event("open"); |
3968 | - this.opts.element.trigger(event); |
3969 | - return !event.isDefaultPrevented(); |
3970 | - }, |
3971 | - |
3972 | - // abstract |
3973 | - clearDropdownAlignmentPreference: function() { |
3974 | - // clear the classes used to figure out the preference of where the dropdown should be opened |
3975 | - this.container.removeClass("select2-drop-above"); |
3976 | - this.dropdown.removeClass("select2-drop-above"); |
3977 | - }, |
3978 | - |
3979 | - /** |
3980 | - * Opens the dropdown |
3981 | - * |
3982 | - * @return {Boolean} whether or not dropdown was opened. This method will return false if, for example, |
3983 | - * the dropdown is already open, or if the 'open' event listener on the element called preventDefault(). |
3984 | - */ |
3985 | - // abstract |
3986 | - open: function () { |
3987 | - |
3988 | - if (!this.shouldOpen()) return false; |
3989 | - |
3990 | - window.setTimeout(this.bind(this.opening), 1); |
3991 | - |
3992 | - return true; |
3993 | - }, |
3994 | - |
3995 | - /** |
3996 | - * Performs the opening of the dropdown |
3997 | - */ |
3998 | - // abstract |
3999 | - opening: function() { |
4000 | - var cid = this.containerId, selector = this.containerSelector, |
4001 | - scroll = "scroll." + cid, resize = "resize." + cid; |
4002 | - |
4003 | - this.container.parents().each(function() { |
4004 | - $(this).bind(scroll, function() { |
4005 | - var s2 = $(selector); |
4006 | - if (s2.length == 0) { |
4007 | - $(this).unbind(scroll); |
4008 | - } |
4009 | - s2.select2("close"); |
4010 | - }); |
4011 | - }); |
4012 | - |
4013 | - $(window).bind(resize, function() { |
4014 | - var s2 = $(selector); |
4015 | - if (s2.length == 0) { |
4016 | - $(window).unbind(resize); |
4017 | - } |
4018 | - s2.select2("close"); |
4019 | - }); |
4020 | - |
4021 | - this.clearDropdownAlignmentPreference(); |
4022 | - |
4023 | - if (this.search.val() === " ") { this.search.val(""); } |
4024 | - |
4025 | - this.container.addClass("select2-dropdown-open").addClass("select2-container-active"); |
4026 | - |
4027 | - this.updateResults(true); |
4028 | - |
4029 | - if(this.dropdown[0] !== this.body().children().last()[0]) { |
4030 | - this.dropdown.detach().appendTo(this.body()); |
4031 | - } |
4032 | - |
4033 | - this.dropdown.show(); |
4034 | - |
4035 | - this.positionDropdown(); |
4036 | - this.dropdown.addClass("select2-drop-active"); |
4037 | - |
4038 | - this.ensureHighlightVisible(); |
4039 | - |
4040 | - this.focusSearch(); |
4041 | - }, |
4042 | - |
4043 | - // abstract |
4044 | - close: function () { |
4045 | - if (!this.opened()) return; |
4046 | - |
4047 | - var self = this; |
4048 | - |
4049 | - this.container.parents().each(function() { |
4050 | - $(this).unbind("scroll." + self.containerId); |
4051 | - }); |
4052 | - $(window).unbind("resize." + this.containerId); |
4053 | - |
4054 | - this.clearDropdownAlignmentPreference(); |
4055 | - |
4056 | - this.dropdown.hide(); |
4057 | - this.container.removeClass("select2-dropdown-open").removeClass("select2-container-active"); |
4058 | - this.results.empty(); |
4059 | - this.clearSearch(); |
4060 | - |
4061 | - this.opts.element.trigger(jQuery.Event("close")); |
4062 | - }, |
4063 | - |
4064 | - // abstract |
4065 | - clearSearch: function () { |
4066 | - |
4067 | - }, |
4068 | - |
4069 | - // abstract |
4070 | - ensureHighlightVisible: function () { |
4071 | - var results = this.results, children, index, child, hb, rb, y, more; |
4072 | - |
4073 | - index = this.highlight(); |
4074 | - |
4075 | - if (index < 0) return; |
4076 | - |
4077 | - if (index == 0) { |
4078 | - |
4079 | - // if the first element is highlighted scroll all the way to the top, |
4080 | - // that way any unselectable headers above it will also be scrolled |
4081 | - // into view |
4082 | - |
4083 | - results.scrollTop(0); |
4084 | - return; |
4085 | - } |
4086 | - |
4087 | - children = results.find(".select2-result-selectable"); |
4088 | - |
4089 | - child = $(children[index]); |
4090 | - |
4091 | - hb = child.offset().top + child.outerHeight(); |
4092 | - |
4093 | - // if this is the last child lets also make sure select2-more-results is visible |
4094 | - if (index === children.length - 1) { |
4095 | - more = results.find("li.select2-more-results"); |
4096 | - if (more.length > 0) { |
4097 | - hb = more.offset().top + more.outerHeight(); |
4098 | - } |
4099 | - } |
4100 | - |
4101 | - rb = results.offset().top + results.outerHeight(); |
4102 | - if (hb > rb) { |
4103 | - results.scrollTop(results.scrollTop() + (hb - rb)); |
4104 | - } |
4105 | - y = child.offset().top - results.offset().top; |
4106 | - |
4107 | - // make sure the top of the element is visible |
4108 | - if (y < 0) { |
4109 | - results.scrollTop(results.scrollTop() + y); // y is negative |
4110 | - } |
4111 | - }, |
4112 | - |
4113 | - // abstract |
4114 | - moveHighlight: function (delta) { |
4115 | - var choices = this.results.find(".select2-result-selectable"), |
4116 | - index = this.highlight(); |
4117 | - |
4118 | - while (index > -1 && index < choices.length) { |
4119 | - index += delta; |
4120 | - var choice = $(choices[index]); |
4121 | - if (choice.hasClass("select2-result-selectable") && !choice.hasClass("select2-disabled")) { |
4122 | - this.highlight(index); |
4123 | - break; |
4124 | - } |
4125 | - } |
4126 | - }, |
4127 | - |
4128 | - // abstract |
4129 | - highlight: function (index) { |
4130 | - var choices = this.results.find(".select2-result-selectable").not(".select2-disabled"); |
4131 | - |
4132 | - if (arguments.length === 0) { |
4133 | - return indexOf(choices.filter(".select2-highlighted")[0], choices.get()); |
4134 | - } |
4135 | - |
4136 | - if (index >= choices.length) index = choices.length - 1; |
4137 | - if (index < 0) index = 0; |
4138 | - |
4139 | - choices.removeClass("select2-highlighted"); |
4140 | - |
4141 | - $(choices[index]).addClass("select2-highlighted"); |
4142 | - this.ensureHighlightVisible(); |
4143 | - |
4144 | - }, |
4145 | - |
4146 | - // abstract |
4147 | - countSelectableResults: function() { |
4148 | - return this.results.find(".select2-result-selectable").not(".select2-disabled").length; |
4149 | - }, |
4150 | - |
4151 | - // abstract |
4152 | - highlightUnderEvent: function (event) { |
4153 | - var el = $(event.target).closest(".select2-result-selectable"); |
4154 | - if (el.length > 0 && !el.is(".select2-highlighted")) { |
4155 | - var choices = this.results.find('.select2-result-selectable'); |
4156 | - this.highlight(choices.index(el)); |
4157 | - } else if (el.length == 0) { |
4158 | - // if we are over an unselectable item remove al highlights |
4159 | - this.results.find(".select2-highlighted").removeClass("select2-highlighted"); |
4160 | - } |
4161 | - }, |
4162 | - |
4163 | - // abstract |
4164 | - loadMoreIfNeeded: function () { |
4165 | - var results = this.results, |
4166 | - more = results.find("li.select2-more-results"), |
4167 | - below, // pixels the element is below the scroll fold, below==0 is when the element is starting to be visible |
4168 | - offset = -1, // index of first element without data |
4169 | - page = this.resultsPage + 1, |
4170 | - self=this, |
4171 | - term=this.search.val(), |
4172 | - context=this.context; |
4173 | - |
4174 | - if (more.length === 0) return; |
4175 | - below = more.offset().top - results.offset().top - results.height(); |
4176 | - |
4177 | - if (below <= 0) { |
4178 | - more.addClass("select2-active"); |
4179 | - this.opts.query({ |
4180 | - term: term, |
4181 | - page: page, |
4182 | - context: context, |
4183 | - matcher: this.opts.matcher, |
4184 | - callback: this.bind(function (data) { |
4185 | - |
4186 | - // ignore a response if the select2 has been closed before it was received |
4187 | - if (!self.opened()) return; |
4188 | - |
4189 | - |
4190 | - self.opts.populateResults.call(this, results, data.results, {term: term, page: page, context:context}); |
4191 | - |
4192 | - if (data.more===true) { |
4193 | - more.detach().appendTo(results).text(self.opts.formatLoadMore(page+1)); |
4194 | - window.setTimeout(function() { self.loadMoreIfNeeded(); }, 10); |
4195 | - } else { |
4196 | - more.remove(); |
4197 | - } |
4198 | - self.positionDropdown(); |
4199 | - self.resultsPage = page; |
4200 | - })}); |
4201 | - } |
4202 | - }, |
4203 | - |
4204 | - /** |
4205 | - * Default tokenizer function which does nothing |
4206 | - */ |
4207 | - tokenize: function() { |
4208 | - |
4209 | - }, |
4210 | - |
4211 | - /** |
4212 | - * @param initial whether or not this is the call to this method right after the dropdown has been opened |
4213 | - */ |
4214 | - // abstract |
4215 | - updateResults: function (initial) { |
4216 | - var search = this.search, results = this.results, opts = this.opts, data, self=this, input; |
4217 | - |
4218 | - // if the search is currently hidden we do not alter the results |
4219 | - if (initial !== true && (this.showSearchInput === false || !this.opened())) { |
4220 | - return; |
4221 | - } |
4222 | - |
4223 | - search.addClass("select2-active"); |
4224 | - |
4225 | - function postRender() { |
4226 | - results.scrollTop(0); |
4227 | - search.removeClass("select2-active"); |
4228 | - self.positionDropdown(); |
4229 | - } |
4230 | - |
4231 | - function render(html) { |
4232 | - results.html(self.opts.escapeMarkup(html)); |
4233 | - postRender(); |
4234 | - } |
4235 | - |
4236 | - if (opts.maximumSelectionSize >=1) { |
4237 | - data = this.data(); |
4238 | - if ($.isArray(data) && data.length >= opts.maximumSelectionSize && checkFormatter(opts.formatSelectionTooBig, "formatSelectionTooBig")) { |
4239 | - render("<li class='select2-selection-limit'>" + opts.formatSelectionTooBig(opts.maximumSelectionSize) + "</li>"); |
4240 | - return; |
4241 | - } |
4242 | - } |
4243 | - |
4244 | - if (search.val().length < opts.minimumInputLength && checkFormatter(opts.formatInputTooShort, "formatInputTooShort")) { |
4245 | - render("<li class='select2-no-results'>" + opts.formatInputTooShort(search.val(), opts.minimumInputLength) + "</li>"); |
4246 | - return; |
4247 | - } |
4248 | - else { |
4249 | - render("<li class='select2-searching'>" + opts.formatSearching() + "</li>"); |
4250 | - } |
4251 | - |
4252 | - // give the tokenizer a chance to pre-process the input |
4253 | - input = this.tokenize(); |
4254 | - if (input != undefined && input != null) { |
4255 | - search.val(input); |
4256 | - } |
4257 | - |
4258 | - this.resultsPage = 1; |
4259 | - opts.query({ |
4260 | - term: search.val(), |
4261 | - page: this.resultsPage, |
4262 | - context: null, |
4263 | - matcher: opts.matcher, |
4264 | - callback: this.bind(function (data) { |
4265 | - var def; // default choice |
4266 | - |
4267 | - // ignore a response if the select2 has been closed before it was received |
4268 | - if (!this.opened()) return; |
4269 | - |
4270 | - // save context, if any |
4271 | - this.context = (data.context===undefined) ? null : data.context; |
4272 | - |
4273 | - // create a default choice and prepend it to the list |
4274 | - if (this.opts.createSearchChoice && search.val() !== "") { |
4275 | - def = this.opts.createSearchChoice.call(null, search.val(), data.results); |
4276 | - if (def !== undefined && def !== null && self.id(def) !== undefined && self.id(def) !== null) { |
4277 | - if ($(data.results).filter( |
4278 | - function () { |
4279 | - return equal(self.id(this), self.id(def)); |
4280 | - }).length === 0) { |
4281 | - data.results.unshift(def); |
4282 | - } |
4283 | - } |
4284 | - } |
4285 | - |
4286 | - if (data.results.length === 0 && checkFormatter(opts.formatNoMatches, "formatNoMatches")) { |
4287 | - render("<li class='select2-no-results'>" + opts.formatNoMatches(search.val()) + "</li>"); |
4288 | - return; |
4289 | - } |
4290 | - |
4291 | - results.empty(); |
4292 | - self.opts.populateResults.call(this, results, data.results, {term: search.val(), page: this.resultsPage, context:null}); |
4293 | - |
4294 | - if (data.more === true && checkFormatter(opts.formatLoadMore, "formatLoadMore")) { |
4295 | - results.append("<li class='select2-more-results'>" + self.opts.escapeMarkup(opts.formatLoadMore(this.resultsPage)) + "</li>"); |
4296 | - window.setTimeout(function() { self.loadMoreIfNeeded(); }, 10); |
4297 | - } |
4298 | - |
4299 | - this.postprocessResults(data, initial); |
4300 | - |
4301 | - postRender(); |
4302 | - })}); |
4303 | - }, |
4304 | - |
4305 | - // abstract |
4306 | - cancel: function () { |
4307 | - this.close(); |
4308 | - }, |
4309 | - |
4310 | - // abstract |
4311 | - blur: function () { |
4312 | - this.close(); |
4313 | - this.container.removeClass("select2-container-active"); |
4314 | - this.dropdown.removeClass("select2-drop-active"); |
4315 | - // synonymous to .is(':focus'), which is available in jquery >= 1.6 |
4316 | - if (this.search[0] === document.activeElement) { this.search.blur(); } |
4317 | - this.clearSearch(); |
4318 | - this.selection.find(".select2-search-choice-focus").removeClass("select2-search-choice-focus"); |
4319 | - }, |
4320 | - |
4321 | - // abstract |
4322 | - focusSearch: function () { |
4323 | - // need to do it here as well as in timeout so it works in IE |
4324 | - this.search.show(); |
4325 | - this.search.focus(); |
4326 | - |
4327 | - /* we do this in a timeout so that current event processing can complete before this code is executed. |
4328 | - this makes sure the search field is focussed even if the current event would blur it */ |
4329 | - window.setTimeout(this.bind(function () { |
4330 | - // reset the value so IE places the cursor at the end of the input box |
4331 | - this.search.show(); |
4332 | - this.search.focus(); |
4333 | - this.search.val(this.search.val()); |
4334 | - }), 10); |
4335 | - }, |
4336 | - |
4337 | - // abstract |
4338 | - selectHighlighted: function () { |
4339 | - var index=this.highlight(), |
4340 | - highlighted=this.results.find(".select2-highlighted").not(".select2-disabled"), |
4341 | - data = highlighted.closest('.select2-result-selectable').data("select2-data"); |
4342 | - if (data) { |
4343 | - highlighted.addClass("select2-disabled"); |
4344 | - this.highlight(index); |
4345 | - this.onSelect(data); |
4346 | - } |
4347 | - }, |
4348 | - |
4349 | - // abstract |
4350 | - getPlaceholder: function () { |
4351 | - return this.opts.element.attr("placeholder") || |
4352 | - this.opts.element.attr("data-placeholder") || // jquery 1.4 compat |
4353 | - this.opts.element.data("placeholder") || |
4354 | - this.opts.placeholder; |
4355 | - }, |
4356 | - |
4357 | - /** |
4358 | - * Get the desired width for the container element. This is |
4359 | - * derived first from option `width` passed to select2, then |
4360 | - * the inline 'style' on the original element, and finally |
4361 | - * falls back to the jQuery calculated element width. |
4362 | - */ |
4363 | - // abstract |
4364 | - initContainerWidth: function () { |
4365 | - function resolveContainerWidth() { |
4366 | - var style, attrs, matches, i, l; |
4367 | - |
4368 | - if (this.opts.width === "off") { |
4369 | - return null; |
4370 | - } else if (this.opts.width === "element"){ |
4371 | - return this.opts.element.outerWidth() === 0 ? 'auto' : this.opts.element.outerWidth() + 'px'; |
4372 | - } else if (this.opts.width === "copy" || this.opts.width === "resolve") { |
4373 | - // check if there is inline style on the element that contains width |
4374 | - style = this.opts.element.attr('style'); |
4375 | - if (style !== undefined) { |
4376 | - attrs = style.split(';'); |
4377 | - for (i = 0, l = attrs.length; i < l; i = i + 1) { |
4378 | - matches = attrs[i].replace(/\s/g, '') |
4379 | - .match(/width:(([-+]?([0-9]*\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/); |
4380 | - if (matches !== null && matches.length >= 1) |
4381 | - return matches[1]; |
4382 | - } |
4383 | - } |
4384 | - |
4385 | - if (this.opts.width === "resolve") { |
4386 | - // next check if css('width') can resolve a width that is percent based, this is sometimes possible |
4387 | - // when attached to input type=hidden or elements hidden via css |
4388 | - style = this.opts.element.css('width'); |
4389 | - if (style.indexOf("%") > 0) return style; |
4390 | - |
4391 | - // finally, fallback on the calculated width of the element |
4392 | - return (this.opts.element.outerWidth() === 0 ? 'auto' : this.opts.element.outerWidth() + 'px'); |
4393 | - } |
4394 | - |
4395 | - return null; |
4396 | - } else if ($.isFunction(this.opts.width)) { |
4397 | - return this.opts.width(); |
4398 | - } else { |
4399 | - return this.opts.width; |
4400 | - } |
4401 | - }; |
4402 | - |
4403 | - var width = resolveContainerWidth.call(this); |
4404 | - if (width !== null) { |
4405 | - this.container.attr("style", "width: "+width); |
4406 | - } |
4407 | - } |
4408 | - }); |
4409 | - |
4410 | - SingleSelect2 = clazz(AbstractSelect2, { |
4411 | - |
4412 | - // single |
4413 | - |
4414 | - createContainer: function () { |
4415 | - var container = $("<div></div>", { |
4416 | - "class": "select2-container" |
4417 | - }).html([ |
4418 | - " <a href='#' onclick='return false;' class='select2-choice'>", |
4419 | - " <span></span><abbr class='select2-search-choice-close' style='display:none;'></abbr>", |
4420 | - " <div><b></b></div>" , |
4421 | - "</a>", |
4422 | - " <div class='select2-drop select2-offscreen'>" , |
4423 | - " <div class='select2-search'>" , |
4424 | - " <input type='text' autocomplete='off' class='select2-input'/>" , |
4425 | - " </div>" , |
4426 | - " <ul class='select2-results'>" , |
4427 | - " </ul>" , |
4428 | - "</div>"].join("")); |
4429 | - return container; |
4430 | - }, |
4431 | - |
4432 | - // single |
4433 | - opening: function () { |
4434 | - this.search.show(); |
4435 | - this.parent.opening.apply(this, arguments); |
4436 | - this.dropdown.removeClass("select2-offscreen"); |
4437 | - }, |
4438 | - |
4439 | - // single |
4440 | - close: function () { |
4441 | - if (!this.opened()) return; |
4442 | - this.parent.close.apply(this, arguments); |
4443 | - this.dropdown.removeAttr("style").addClass("select2-offscreen").insertAfter(this.selection).show(); |
4444 | - }, |
4445 | - |
4446 | - // single |
4447 | - focus: function () { |
4448 | - this.close(); |
4449 | - this.selection.focus(); |
4450 | - }, |
4451 | - |
4452 | - // single |
4453 | - isFocused: function () { |
4454 | - return this.selection[0] === document.activeElement; |
4455 | - }, |
4456 | - |
4457 | - // single |
4458 | - cancel: function () { |
4459 | - this.parent.cancel.apply(this, arguments); |
4460 | - this.selection.focus(); |
4461 | - }, |
4462 | - |
4463 | - // single |
4464 | - initContainer: function () { |
4465 | - |
4466 | - var selection, |
4467 | - container = this.container, |
4468 | - dropdown = this.dropdown, |
4469 | - clickingInside = false; |
4470 | - |
4471 | - this.selection = selection = container.find(".select2-choice"); |
4472 | - |
4473 | - this.search.bind("keydown", this.bind(function (e) { |
4474 | - if (!this.enabled) return; |
4475 | - |
4476 | - if (e.which === KEY.PAGE_UP || e.which === KEY.PAGE_DOWN) { |
4477 | - // prevent the page from scrolling |
4478 | - killEvent(e); |
4479 | - return; |
4480 | - } |
4481 | - |
4482 | - if (this.opened()) { |
4483 | - switch (e.which) { |
4484 | - case KEY.UP: |
4485 | - case KEY.DOWN: |
4486 | - this.moveHighlight((e.which === KEY.UP) ? -1 : 1); |
4487 | - killEvent(e); |
4488 | - return; |
4489 | - case KEY.TAB: |
4490 | - case KEY.ENTER: |
4491 | - this.selectHighlighted(); |
4492 | - killEvent(e); |
4493 | - return; |
4494 | - case KEY.ESC: |
4495 | - this.cancel(e); |
4496 | - killEvent(e); |
4497 | - return; |
4498 | - } |
4499 | - } else { |
4500 | - |
4501 | - if (e.which === KEY.TAB || KEY.isControl(e) || KEY.isFunctionKey(e) || e.which === KEY.ESC) { |
4502 | - return; |
4503 | - } |
4504 | - |
4505 | - if (this.opts.openOnEnter === false && e.which === KEY.ENTER) { |
4506 | - return; |
4507 | - } |
4508 | - |
4509 | - this.open(); |
4510 | - |
4511 | - if (e.which === KEY.ENTER) { |
4512 | - // do not propagate the event otherwise we open, and propagate enter which closes |
4513 | - return; |
4514 | - } |
4515 | - } |
4516 | - })); |
4517 | - |
4518 | - this.search.bind("focus", this.bind(function() { |
4519 | - this.selection.attr("tabIndex", "-1"); |
4520 | - })); |
4521 | - this.search.bind("blur", this.bind(function() { |
4522 | - if (!this.opened()) this.container.removeClass("select2-container-active"); |
4523 | - window.setTimeout(this.bind(function() { this.selection.attr("tabIndex", this.opts.element.attr("tabIndex")); }), 10); |
4524 | - })); |
4525 | - |
4526 | - selection.bind("mousedown", this.bind(function (e) { |
4527 | - clickingInside = true; |
4528 | - |
4529 | - if (this.opened()) { |
4530 | - this.close(); |
4531 | - this.selection.focus(); |
4532 | - } else if (this.enabled) { |
4533 | - this.open(); |
4534 | - } |
4535 | - |
4536 | - clickingInside = false; |
4537 | - })); |
4538 | - |
4539 | - dropdown.bind("mousedown", this.bind(function() { this.search.focus(); })); |
4540 | - |
4541 | - selection.bind("focus", this.bind(function() { |
4542 | - this.container.addClass("select2-container-active"); |
4543 | - // hide the search so the tab key does not focus on it |
4544 | - this.search.attr("tabIndex", "-1"); |
4545 | - })); |
4546 | - |
4547 | - selection.bind("blur", this.bind(function() { |
4548 | - if (!this.opened()) { |
4549 | - this.container.removeClass("select2-container-active"); |
4550 | - } |
4551 | - window.setTimeout(this.bind(function() { this.search.attr("tabIndex", this.opts.element.attr("tabIndex")); }), 10); |
4552 | - })); |
4553 | - |
4554 | - selection.bind("keydown", this.bind(function(e) { |
4555 | - if (!this.enabled) return; |
4556 | - |
4557 | - if (e.which === KEY.PAGE_UP || e.which === KEY.PAGE_DOWN) { |
4558 | - // prevent the page from scrolling |
4559 | - killEvent(e); |
4560 | - return; |
4561 | - } |
4562 | - |
4563 | - if (e.which === KEY.TAB || KEY.isControl(e) || KEY.isFunctionKey(e) |
4564 | - || e.which === KEY.ESC) { |
4565 | - return; |
4566 | - } |
4567 | - |
4568 | - if (this.opts.openOnEnter === false && e.which === KEY.ENTER) { |
4569 | - return; |
4570 | - } |
4571 | - |
4572 | - if (e.which == KEY.DELETE) { |
4573 | - if (this.opts.allowClear) { |
4574 | - this.clear(); |
4575 | - } |
4576 | - return; |
4577 | - } |
4578 | - |
4579 | - this.open(); |
4580 | - |
4581 | - if (e.which === KEY.ENTER) { |
4582 | - // do not propagate the event otherwise we open, and propagate enter which closes |
4583 | - killEvent(e); |
4584 | - return; |
4585 | - } |
4586 | - |
4587 | - // do not set the search input value for non-alpha-numeric keys |
4588 | - // otherwise pressing down results in a '(' being set in the search field |
4589 | - if (e.which < 48 ) { // '0' == 48 |
4590 | - killEvent(e); |
4591 | - return; |
4592 | - } |
4593 | - |
4594 | - var keyWritten = String.fromCharCode(e.which).toLowerCase(); |
4595 | - |
4596 | - if (e.shiftKey) { |
4597 | - keyWritten = keyWritten.toUpperCase(); |
4598 | - } |
4599 | - |
4600 | - // focus the field before calling val so the cursor ends up after the value instead of before |
4601 | - this.search.focus(); |
4602 | - this.search.val(keyWritten); |
4603 | - |
4604 | - // prevent event propagation so it doesnt replay on the now focussed search field and result in double key entry |
4605 | - killEvent(e); |
4606 | - })); |
4607 | - |
4608 | - selection.delegate("abbr", "mousedown", this.bind(function (e) { |
4609 | - if (!this.enabled) return; |
4610 | - this.clear(); |
4611 | - killEvent(e); |
4612 | - this.close(); |
4613 | - this.triggerChange(); |
4614 | - this.selection.focus(); |
4615 | - })); |
4616 | - |
4617 | - this.setPlaceholder(); |
4618 | - |
4619 | - this.search.bind("focus", this.bind(function() { |
4620 | - this.container.addClass("select2-container-active"); |
4621 | - })); |
4622 | - }, |
4623 | - |
4624 | - // single |
4625 | - clear: function() { |
4626 | - this.opts.element.val(""); |
4627 | - this.selection.find("span").empty(); |
4628 | - this.selection.removeData("select2-data"); |
4629 | - this.setPlaceholder(); |
4630 | - }, |
4631 | - |
4632 | - /** |
4633 | - * Sets selection based on source element's value |
4634 | - */ |
4635 | - // single |
4636 | - initSelection: function () { |
4637 | - var selected; |
4638 | - if (this.opts.element.val() === "") { |
4639 | - this.close(); |
4640 | - this.setPlaceholder(); |
4641 | - } else { |
4642 | - var self = this; |
4643 | - this.opts.initSelection.call(null, this.opts.element, function(selected){ |
4644 | - if (selected !== undefined && selected !== null) { |
4645 | - self.updateSelection(selected); |
4646 | - self.close(); |
4647 | - self.setPlaceholder(); |
4648 | - } |
4649 | - }); |
4650 | - } |
4651 | - }, |
4652 | - |
4653 | - // single |
4654 | - prepareOpts: function () { |
4655 | - var opts = this.parent.prepareOpts.apply(this, arguments); |
4656 | - |
4657 | - if (opts.element.get(0).tagName.toLowerCase() === "select") { |
4658 | - // install the selection initializer |
4659 | - opts.initSelection = function (element, callback) { |
4660 | - var selected = element.find(":selected"); |
4661 | - // a single select box always has a value, no need to null check 'selected' |
4662 | - if ($.isFunction(callback)) |
4663 | - callback({id: selected.attr("value"), text: selected.text()}); |
4664 | - }; |
4665 | - } |
4666 | - |
4667 | - return opts; |
4668 | - }, |
4669 | - |
4670 | - // single |
4671 | - setPlaceholder: function () { |
4672 | - var placeholder = this.getPlaceholder(); |
4673 | - |
4674 | - if (this.opts.element.val() === "" && placeholder !== undefined) { |
4675 | - |
4676 | - // check for a first blank option if attached to a select |
4677 | - if (this.select && this.select.find("option:first").text() !== "") return; |
4678 | - |
4679 | - this.selection.find("span").html(this.opts.escapeMarkup(placeholder)); |
4680 | - |
4681 | - this.selection.addClass("select2-default"); |
4682 | - |
4683 | - this.selection.find("abbr").hide(); |
4684 | - } |
4685 | - }, |
4686 | - |
4687 | - // single |
4688 | - postprocessResults: function (data, initial) { |
4689 | - var selected = 0, self = this, showSearchInput = true; |
4690 | - |
4691 | - // find the selected element in the result list |
4692 | - |
4693 | - this.results.find(".select2-result-selectable").each2(function (i, elm) { |
4694 | - if (equal(self.id(elm.data("select2-data")), self.opts.element.val())) { |
4695 | - selected = i; |
4696 | - return false; |
4697 | - } |
4698 | - }); |
4699 | - |
4700 | - // and highlight it |
4701 | - |
4702 | - this.highlight(selected); |
4703 | - |
4704 | - // hide the search box if this is the first we got the results and there are a few of them |
4705 | - |
4706 | - if (initial === true) { |
4707 | - showSearchInput = this.showSearchInput = countResults(data.results) >= this.opts.minimumResultsForSearch; |
4708 | - this.dropdown.find(".select2-search")[showSearchInput ? "removeClass" : "addClass"]("select2-search-hidden"); |
4709 | - |
4710 | - //add "select2-with-searchbox" to the container if search box is shown |
4711 | - $(this.dropdown, this.container)[showSearchInput ? "addClass" : "removeClass"]("select2-with-searchbox"); |
4712 | - } |
4713 | - |
4714 | - }, |
4715 | - |
4716 | - // single |
4717 | - onSelect: function (data) { |
4718 | - var old = this.opts.element.val(); |
4719 | - |
4720 | - this.opts.element.val(this.id(data)); |
4721 | - this.updateSelection(data); |
4722 | - this.close(); |
4723 | - this.selection.focus(); |
4724 | - |
4725 | - if (!equal(old, this.id(data))) { this.triggerChange(); } |
4726 | - }, |
4727 | - |
4728 | - // single |
4729 | - updateSelection: function (data) { |
4730 | - |
4731 | - var container=this.selection.find("span"), formatted; |
4732 | - |
4733 | - this.selection.data("select2-data", data); |
4734 | - |
4735 | - container.empty(); |
4736 | - formatted=this.opts.formatSelection(data, container); |
4737 | - if (formatted !== undefined) { |
4738 | - container.append(this.opts.escapeMarkup(formatted)); |
4739 | - } |
4740 | - |
4741 | - this.selection.removeClass("select2-default"); |
4742 | - |
4743 | - if (this.opts.allowClear && this.getPlaceholder() !== undefined) { |
4744 | - this.selection.find("abbr").show(); |
4745 | - } |
4746 | - }, |
4747 | - |
4748 | - // single |
4749 | - val: function () { |
4750 | - var val, data = null, self = this; |
4751 | - |
4752 | - if (arguments.length === 0) { |
4753 | - return this.opts.element.val(); |
4754 | - } |
4755 | - |
4756 | - val = arguments[0]; |
4757 | - |
4758 | - if (this.select) { |
4759 | - this.select |
4760 | - .val(val) |
4761 | - .find(":selected").each2(function (i, elm) { |
4762 | - data = {id: elm.attr("value"), text: elm.text()}; |
4763 | - return false; |
4764 | - }); |
4765 | - this.updateSelection(data); |
4766 | - this.setPlaceholder(); |
4767 | - } else { |
4768 | - if (this.opts.initSelection === undefined) { |
4769 | - throw new Error("cannot call val() if initSelection() is not defined"); |
4770 | - } |
4771 | - // val is an id. !val is true for [undefined,null,''] |
4772 | - if (!val) { |
4773 | - this.clear(); |
4774 | - return; |
4775 | - } |
4776 | - this.opts.element.val(val); |
4777 | - this.opts.initSelection(this.opts.element, function(data){ |
4778 | - self.opts.element.val(!data ? "" : self.id(data)); |
4779 | - self.updateSelection(data); |
4780 | - self.setPlaceholder(); |
4781 | - }); |
4782 | - } |
4783 | - }, |
4784 | - |
4785 | - // single |
4786 | - clearSearch: function () { |
4787 | - this.search.val(""); |
4788 | - }, |
4789 | - |
4790 | - // single |
4791 | - data: function(value) { |
4792 | - var data; |
4793 | - |
4794 | - if (arguments.length === 0) { |
4795 | - data = this.selection.data("select2-data"); |
4796 | - if (data == undefined) data = null; |
4797 | - return data; |
4798 | - } else { |
4799 | - if (!value || value === "") { |
4800 | - this.clear(); |
4801 | - } else { |
4802 | - this.opts.element.val(!value ? "" : this.id(value)); |
4803 | - this.updateSelection(value); |
4804 | - } |
4805 | - } |
4806 | - } |
4807 | - }); |
4808 | - |
4809 | - MultiSelect2 = clazz(AbstractSelect2, { |
4810 | - |
4811 | - // multi |
4812 | - createContainer: function () { |
4813 | - var container = $("<div></div>", { |
4814 | - "class": "select2-container select2-container-multi" |
4815 | - }).html([ |
4816 | - " <ul class='select2-choices'>", |
4817 | - //"<li class='select2-search-choice'><span>California</span><a href="javascript:void(0)" class="select2-search-choice-close"></a></li>" , |
4818 | - " <li class='select2-search-field'>" , |
4819 | - " <input type='text' autocomplete='off' class='select2-input'>" , |
4820 | - " </li>" , |
4821 | - "</ul>" , |
4822 | - "<div class='select2-drop select2-drop-multi' style='display:none;'>" , |
4823 | - " <ul class='select2-results'>" , |
4824 | - " </ul>" , |
4825 | - "</div>"].join("")); |
4826 | - return container; |
4827 | - }, |
4828 | - |
4829 | - // multi |
4830 | - prepareOpts: function () { |
4831 | - var opts = this.parent.prepareOpts.apply(this, arguments); |
4832 | - |
4833 | - // TODO validate placeholder is a string if specified |
4834 | - |
4835 | - if (opts.element.get(0).tagName.toLowerCase() === "select") { |
4836 | - // install sthe selection initializer |
4837 | - opts.initSelection = function (element,callback) { |
4838 | - |
4839 | - var data = []; |
4840 | - element.find(":selected").each2(function (i, elm) { |
4841 | - data.push({id: elm.attr("value"), text: elm.text()}); |
4842 | - }); |
4843 | - |
4844 | - if ($.isFunction(callback)) |
4845 | - callback(data); |
4846 | - }; |
4847 | - } |
4848 | - |
4849 | - return opts; |
4850 | - }, |
4851 | - |
4852 | - // multi |
4853 | - initContainer: function () { |
4854 | - |
4855 | - var selector = ".select2-choices", selection; |
4856 | - |
4857 | - this.searchContainer = this.container.find(".select2-search-field"); |
4858 | - this.selection = selection = this.container.find(selector); |
4859 | - |
4860 | - this.search.bind("keydown", this.bind(function (e) { |
4861 | - if (!this.enabled) return; |
4862 | - |
4863 | - if (e.which === KEY.BACKSPACE && this.search.val() === "") { |
4864 | - this.close(); |
4865 | - |
4866 | - var choices, |
4867 | - selected = selection.find(".select2-search-choice-focus"); |
4868 | - if (selected.length > 0) { |
4869 | - this.unselect(selected.first()); |
4870 | - this.search.width(10); |
4871 | - killEvent(e); |
4872 | - return; |
4873 | - } |
4874 | - |
4875 | - choices = selection.find(".select2-search-choice"); |
4876 | - if (choices.length > 0) { |
4877 | - choices.last().addClass("select2-search-choice-focus"); |
4878 | - } |
4879 | - } else { |
4880 | - selection.find(".select2-search-choice-focus").removeClass("select2-search-choice-focus"); |
4881 | - } |
4882 | - |
4883 | - if (this.opened()) { |
4884 | - switch (e.which) { |
4885 | - case KEY.UP: |
4886 | - case KEY.DOWN: |
4887 | - this.moveHighlight((e.which === KEY.UP) ? -1 : 1); |
4888 | - killEvent(e); |
4889 | - return; |
4890 | - case KEY.ENTER: |
4891 | - case KEY.TAB: |
4892 | - this.selectHighlighted(); |
4893 | - killEvent(e); |
4894 | - return; |
4895 | - case KEY.ESC: |
4896 | - this.cancel(e); |
4897 | - killEvent(e); |
4898 | - return; |
4899 | - } |
4900 | - } |
4901 | - |
4902 | - if (e.which === KEY.TAB || KEY.isControl(e) || KEY.isFunctionKey(e) |
4903 | - || e.which === KEY.BACKSPACE || e.which === KEY.ESC) { |
4904 | - return; |
4905 | - } |
4906 | - |
4907 | - if (this.opts.openOnEnter === false && e.which === KEY.ENTER) { |
4908 | - return; |
4909 | - } |
4910 | - |
4911 | - this.open(); |
4912 | - |
4913 | - if (e.which === KEY.PAGE_UP || e.which === KEY.PAGE_DOWN) { |
4914 | - // prevent the page from scrolling |
4915 | - killEvent(e); |
4916 | - } |
4917 | - })); |
4918 | - |
4919 | - this.search.bind("keyup", this.bind(this.resizeSearch)); |
4920 | - |
4921 | - this.search.bind("blur", this.bind(function(e) { |
4922 | - this.container.removeClass("select2-container-active"); |
4923 | - this.search.removeClass("select2-focused"); |
4924 | - this.clearSearch(); |
4925 | - e.stopImmediatePropagation(); |
4926 | - })); |
4927 | - |
4928 | - this.container.delegate(selector, "mousedown", this.bind(function (e) { |
4929 | - if (!this.enabled) return; |
4930 | - if ($(e.target).closest(".select2-search-choice").length > 0) { |
4931 | - // clicked inside a select2 search choice, do not open |
4932 | - return; |
4933 | - } |
4934 | - this.clearPlaceholder(); |
4935 | - this.open(); |
4936 | - this.focusSearch(); |
4937 | - e.preventDefault(); |
4938 | - })); |
4939 | - |
4940 | - this.container.delegate(selector, "focus", this.bind(function () { |
4941 | - if (!this.enabled) return; |
4942 | - this.container.addClass("select2-container-active"); |
4943 | - this.dropdown.addClass("select2-drop-active"); |
4944 | - this.clearPlaceholder(); |
4945 | - })); |
4946 | - |
4947 | - // set the placeholder if necessary |
4948 | - this.clearSearch(); |
4949 | - }, |
4950 | - |
4951 | - // multi |
4952 | - enable: function() { |
4953 | - if (this.enabled) return; |
4954 | - |
4955 | - this.parent.enable.apply(this, arguments); |
4956 | - |
4957 | - this.search.removeAttr("disabled"); |
4958 | - }, |
4959 | - |
4960 | - // multi |
4961 | - disable: function() { |
4962 | - if (!this.enabled) return; |
4963 | - |
4964 | - this.parent.disable.apply(this, arguments); |
4965 | - |
4966 | - this.search.attr("disabled", true); |
4967 | - }, |
4968 | - |
4969 | - // multi |
4970 | - initSelection: function () { |
4971 | - var data; |
4972 | - if (this.opts.element.val() === "") { |
4973 | - this.updateSelection([]); |
4974 | - this.close(); |
4975 | - // set the placeholder if necessary |
4976 | - this.clearSearch(); |
4977 | - } |
4978 | - if (this.select || this.opts.element.val() !== "") { |
4979 | - var self = this; |
4980 | - this.opts.initSelection.call(null, this.opts.element, function(data){ |
4981 | - if (data !== undefined && data !== null) { |
4982 | - self.updateSelection(data); |
4983 | - self.close(); |
4984 | - // set the placeholder if necessary |
4985 | - self.clearSearch(); |
4986 | - } |
4987 | - }); |
4988 | - } |
4989 | - }, |
4990 | - |
4991 | - // multi |
4992 | - clearSearch: function () { |
4993 | - var placeholder = this.getPlaceholder(); |
4994 | - |
4995 | - if (placeholder !== undefined && this.getVal().length === 0 && this.search.hasClass("select2-focused") === false) { |
4996 | - this.search.val(placeholder).addClass("select2-default"); |
4997 | - // stretch the search box to full width of the container so as much of the placeholder is visible as possible |
4998 | - this.resizeSearch(); |
4999 | - } else { |
5000 | - // we set this to " " instead of "" and later clear it on focus() because there is a firefox bug |
The diff has been truncated for viewing.