eea.facetednavigation 16.5__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- eea/facetednavigation/README.txt +34 -0
- eea/facetednavigation/__init__.py +10 -0
- eea/facetednavigation/browser/__init__.py +2 -0
- eea/facetednavigation/browser/app/__init__.py +2 -0
- eea/facetednavigation/browser/app/catalog.py +43 -0
- eea/facetednavigation/browser/app/configure.py +307 -0
- eea/facetednavigation/browser/app/counter.py +77 -0
- eea/facetednavigation/browser/app/error.py +28 -0
- eea/facetednavigation/browser/app/exportimport.py +85 -0
- eea/facetednavigation/browser/app/query.py +209 -0
- eea/facetednavigation/browser/app/schema.py +39 -0
- eea/facetednavigation/browser/app/view.py +169 -0
- eea/facetednavigation/browser/configure.zcml +155 -0
- eea/facetednavigation/browser/interfaces.py +52 -0
- eea/facetednavigation/browser/javascript/edit.js +1198 -0
- eea/facetednavigation/browser/javascript/expand.js +107 -0
- eea/facetednavigation/browser/javascript/independent.js +25 -0
- eea/facetednavigation/browser/javascript/view.js +551 -0
- eea/facetednavigation/browser/static/30px.png +0 -0
- eea/facetednavigation/browser/static/32px.png +0 -0
- eea/facetednavigation/browser/static/README.md +6 -0
- eea/facetednavigation/browser/static/ajax-loader-small.gif +0 -0
- eea/facetednavigation/browser/static/ajax-loader.gif +0 -0
- eea/facetednavigation/browser/static/faceted-edit.css +325 -0
- eea/facetednavigation/browser/static/faceted-edit.css.map +1 -0
- eea/facetednavigation/browser/static/faceted-edit.min.css +2 -0
- eea/facetednavigation/browser/static/faceted-edit.min.css.map +1 -0
- eea/facetednavigation/browser/static/faceted-edit.min.js +1 -0
- eea/facetednavigation/browser/static/faceted-jquery.css +4117 -0
- eea/facetednavigation/browser/static/faceted-jquery.css.map +1 -0
- eea/facetednavigation/browser/static/faceted-jquery.min.css +6 -0
- eea/facetednavigation/browser/static/faceted-jquery.min.css.map +1 -0
- eea/facetednavigation/browser/static/faceted-jquery.min.js +2 -0
- eea/facetednavigation/browser/static/faceted-jquery.min.js.LICENSE.txt +263 -0
- eea/facetednavigation/browser/static/faceted-view.css +447 -0
- eea/facetednavigation/browser/static/faceted-view.css.map +1 -0
- eea/facetednavigation/browser/static/faceted-view.min.css +2 -0
- eea/facetednavigation/browser/static/faceted-view.min.css.map +1 -0
- eea/facetednavigation/browser/static/faceted-view.min.js +1 -0
- eea/facetednavigation/browser/static/fonts/titillium/titilliumweb-bold-webfont.eot +0 -0
- eea/facetednavigation/browser/static/fonts/titillium/titilliumweb-bold-webfont.svg +2377 -0
- eea/facetednavigation/browser/static/fonts/titillium/titilliumweb-bold-webfont.ttf +0 -0
- eea/facetednavigation/browser/static/fonts/titillium/titilliumweb-bold-webfont.woff +0 -0
- eea/facetednavigation/browser/static/fonts/titillium/titilliumweb-extralight-webfont.eot +0 -0
- eea/facetednavigation/browser/static/fonts/titillium/titilliumweb-extralight-webfont.svg +2410 -0
- eea/facetednavigation/browser/static/fonts/titillium/titilliumweb-extralight-webfont.ttf +0 -0
- eea/facetednavigation/browser/static/fonts/titillium/titilliumweb-extralight-webfont.woff +0 -0
- eea/facetednavigation/browser/static/fonts/titillium/titilliumweb-regular-webfont.eot +0 -0
- eea/facetednavigation/browser/static/fonts/titillium/titilliumweb-regular-webfont.svg +2725 -0
- eea/facetednavigation/browser/static/fonts/titillium/titilliumweb-regular-webfont.ttf +0 -0
- eea/facetednavigation/browser/static/fonts/titillium/titilliumweb-regular-webfont.woff +0 -0
- eea/facetednavigation/browser/static/hide.png +0 -0
- eea/facetednavigation/browser/static/images/ui-icons_444444_256x240.png +0 -0
- eea/facetednavigation/browser/static/images/ui-icons_555555_256x240.png +0 -0
- eea/facetednavigation/browser/static/images/ui-icons_777620_256x240.png +0 -0
- eea/facetednavigation/browser/static/images/ui-icons_777777_256x240.png +0 -0
- eea/facetednavigation/browser/static/images/ui-icons_cc0000_256x240.png +0 -0
- eea/facetednavigation/browser/static/images/ui-icons_ffffff_256x240.png +0 -0
- eea/facetednavigation/browser/static/select2-spinner.gif +0 -0
- eea/facetednavigation/browser/static/select2.png +0 -0
- eea/facetednavigation/browser/static/select2x2.png +0 -0
- eea/facetednavigation/browser/static/show.png +0 -0
- eea/facetednavigation/browser/static/throbber.gif +0 -0
- eea/facetednavigation/browser/stylesheets/edit.scss +383 -0
- eea/facetednavigation/browser/stylesheets/view.scss +126 -0
- eea/facetednavigation/browser/template/configure.pt +180 -0
- eea/facetednavigation/browser/template/counter.pt +0 -0
- eea/facetednavigation/browser/template/default.xml +54 -0
- eea/facetednavigation/browser/template/error.pt +15 -0
- eea/facetednavigation/browser/template/macros.pt +59 -0
- eea/facetednavigation/browser/template/query.pt +14 -0
- eea/facetednavigation/browser/template/simple_view.pt +9 -0
- eea/facetednavigation/browser/template/view.pt +34 -0
- eea/facetednavigation/browser/template/widgets.pt +57 -0
- eea/facetednavigation/caching/__init__.py +24 -0
- eea/facetednavigation/caching/cache.py +64 -0
- eea/facetednavigation/caching/configure.zcml +17 -0
- eea/facetednavigation/caching/nocache.py +24 -0
- eea/facetednavigation/config.py +6 -0
- eea/facetednavigation/configure.zcml +29 -0
- eea/facetednavigation/criteria/__init__.py +2 -0
- eea/facetednavigation/criteria/configure.zcml +12 -0
- eea/facetednavigation/criteria/handler.py +291 -0
- eea/facetednavigation/criteria/interfaces.py +7 -0
- eea/facetednavigation/criteria/utils.py +11 -0
- eea/facetednavigation/data/vocabularies/faceted_sortorder.vdex +115 -0
- eea/facetednavigation/docs/browser.txt +294 -0
- eea/facetednavigation/docs/counter.txt +76 -0
- eea/facetednavigation/docs/criteria.txt +134 -0
- eea/facetednavigation/docs/exportimport.txt +544 -0
- eea/facetednavigation/docs/facetednavigation.txt +113 -0
- eea/facetednavigation/docs/solr.txt +66 -0
- eea/facetednavigation/docs/syndication.txt +36 -0
- eea/facetednavigation/docs/unicode.txt +224 -0
- eea/facetednavigation/docs/versions.txt +175 -0
- eea/facetednavigation/docs/vocabularies.txt +69 -0
- eea/facetednavigation/docs/widgets.txt +10 -0
- eea/facetednavigation/docs/wrapper.txt +87 -0
- eea/facetednavigation/events.py +56 -0
- eea/facetednavigation/exportimport/__init__.py +2 -0
- eea/facetednavigation/exportimport/configure.zcml +27 -0
- eea/facetednavigation/exportimport/criteria.py +103 -0
- eea/facetednavigation/exportimport/criterion.py +75 -0
- eea/facetednavigation/exportimport/faceted.py +35 -0
- eea/facetednavigation/indexes/__init__.py +2 -0
- eea/facetednavigation/indexes/configure.zcml +8 -0
- eea/facetednavigation/indexes/language/__init__.py +2 -0
- eea/facetednavigation/indexes/language/adapter.py +77 -0
- eea/facetednavigation/indexes/language/configure.zcml +13 -0
- eea/facetednavigation/indexes/language/interfaces.py +7 -0
- eea/facetednavigation/interfaces.py +109 -0
- eea/facetednavigation/layout/__init__.py +2 -0
- eea/facetednavigation/layout/configure.zcml +38 -0
- eea/facetednavigation/layout/events.py +63 -0
- eea/facetednavigation/layout/interfaces.py +21 -0
- eea/facetednavigation/layout/layout.py +95 -0
- eea/facetednavigation/layout/menu.py +77 -0
- eea/facetednavigation/layout/overrides.zcml +13 -0
- eea/facetednavigation/locales/bg/LC_MESSAGES/eea.mo +0 -0
- eea/facetednavigation/locales/bg/LC_MESSAGES/eea.po +1179 -0
- eea/facetednavigation/locales/bg/LC_MESSAGES/plone.mo +0 -0
- eea/facetednavigation/locales/bg/LC_MESSAGES/plone.po +37 -0
- eea/facetednavigation/locales/ca/LC_MESSAGES/eea.mo +0 -0
- eea/facetednavigation/locales/ca/LC_MESSAGES/eea.po +1180 -0
- eea/facetednavigation/locales/ca/LC_MESSAGES/plone.mo +0 -0
- eea/facetednavigation/locales/ca/LC_MESSAGES/plone.po +38 -0
- eea/facetednavigation/locales/cs/LC_MESSAGES/eea.mo +0 -0
- eea/facetednavigation/locales/cs/LC_MESSAGES/eea.po +1179 -0
- eea/facetednavigation/locales/cs/LC_MESSAGES/plone.mo +0 -0
- eea/facetednavigation/locales/cs/LC_MESSAGES/plone.po +37 -0
- eea/facetednavigation/locales/da/LC_MESSAGES/eea.mo +0 -0
- eea/facetednavigation/locales/da/LC_MESSAGES/eea.po +1179 -0
- eea/facetednavigation/locales/da/LC_MESSAGES/plone.mo +0 -0
- eea/facetednavigation/locales/da/LC_MESSAGES/plone.po +37 -0
- eea/facetednavigation/locales/de/LC_MESSAGES/eea.mo +0 -0
- eea/facetednavigation/locales/de/LC_MESSAGES/eea.po +1236 -0
- eea/facetednavigation/locales/de/LC_MESSAGES/plone.mo +0 -0
- eea/facetednavigation/locales/de/LC_MESSAGES/plone.po +37 -0
- eea/facetednavigation/locales/eea.pot +1182 -0
- eea/facetednavigation/locales/el/LC_MESSAGES/eea.mo +0 -0
- eea/facetednavigation/locales/el/LC_MESSAGES/eea.po +1179 -0
- eea/facetednavigation/locales/el/LC_MESSAGES/plone.mo +0 -0
- eea/facetednavigation/locales/el/LC_MESSAGES/plone.po +37 -0
- eea/facetednavigation/locales/en/LC_MESSAGES/eea.mo +0 -0
- eea/facetednavigation/locales/en/LC_MESSAGES/eea.po +1179 -0
- eea/facetednavigation/locales/en/LC_MESSAGES/plone.mo +0 -0
- eea/facetednavigation/locales/en/LC_MESSAGES/plone.po +37 -0
- eea/facetednavigation/locales/es/LC_MESSAGES/eea.mo +0 -0
- eea/facetednavigation/locales/es/LC_MESSAGES/eea.po +1247 -0
- eea/facetednavigation/locales/es/LC_MESSAGES/plone.mo +0 -0
- eea/facetednavigation/locales/es/LC_MESSAGES/plone.po +39 -0
- eea/facetednavigation/locales/et/LC_MESSAGES/eea.mo +0 -0
- eea/facetednavigation/locales/et/LC_MESSAGES/eea.po +1179 -0
- eea/facetednavigation/locales/et/LC_MESSAGES/plone.mo +0 -0
- eea/facetednavigation/locales/et/LC_MESSAGES/plone.po +37 -0
- eea/facetednavigation/locales/eu/LC_MESSAGES/eea.mo +0 -0
- eea/facetednavigation/locales/eu/LC_MESSAGES/eea.po +1247 -0
- eea/facetednavigation/locales/eu/LC_MESSAGES/plone.mo +0 -0
- eea/facetednavigation/locales/eu/LC_MESSAGES/plone.po +37 -0
- eea/facetednavigation/locales/fi/LC_MESSAGES/eea.mo +0 -0
- eea/facetednavigation/locales/fi/LC_MESSAGES/eea.po +1179 -0
- eea/facetednavigation/locales/fi/LC_MESSAGES/plone.mo +0 -0
- eea/facetednavigation/locales/fi/LC_MESSAGES/plone.po +37 -0
- eea/facetednavigation/locales/fr/LC_MESSAGES/eea.mo +0 -0
- eea/facetednavigation/locales/fr/LC_MESSAGES/eea.po +1247 -0
- eea/facetednavigation/locales/fr/LC_MESSAGES/plone.mo +0 -0
- eea/facetednavigation/locales/fr/LC_MESSAGES/plone.po +37 -0
- eea/facetednavigation/locales/hr/LC_MESSAGES/eea.mo +0 -0
- eea/facetednavigation/locales/hr/LC_MESSAGES/eea.po +1182 -0
- eea/facetednavigation/locales/hr/LC_MESSAGES/plone.mo +0 -0
- eea/facetednavigation/locales/hr/LC_MESSAGES/plone.po +37 -0
- eea/facetednavigation/locales/hu/LC_MESSAGES/eea.mo +0 -0
- eea/facetednavigation/locales/hu/LC_MESSAGES/eea.po +1179 -0
- eea/facetednavigation/locales/hu/LC_MESSAGES/plone.mo +0 -0
- eea/facetednavigation/locales/hu/LC_MESSAGES/plone.po +37 -0
- eea/facetednavigation/locales/is/LC_MESSAGES/eea.mo +0 -0
- eea/facetednavigation/locales/is/LC_MESSAGES/eea.po +1179 -0
- eea/facetednavigation/locales/is/LC_MESSAGES/plone.mo +0 -0
- eea/facetednavigation/locales/is/LC_MESSAGES/plone.po +37 -0
- eea/facetednavigation/locales/it/LC_MESSAGES/eea.mo +0 -0
- eea/facetednavigation/locales/it/LC_MESSAGES/eea.po +1242 -0
- eea/facetednavigation/locales/it/LC_MESSAGES/plone.mo +0 -0
- eea/facetednavigation/locales/it/LC_MESSAGES/plone.po +37 -0
- eea/facetednavigation/locales/kl/LC_MESSAGES/eea.mo +0 -0
- eea/facetednavigation/locales/kl/LC_MESSAGES/eea.po +1179 -0
- eea/facetednavigation/locales/kl/LC_MESSAGES/plone.mo +0 -0
- eea/facetednavigation/locales/kl/LC_MESSAGES/plone.po +37 -0
- eea/facetednavigation/locales/lt/LC_MESSAGES/eea.mo +0 -0
- eea/facetednavigation/locales/lt/LC_MESSAGES/eea.po +1179 -0
- eea/facetednavigation/locales/lt/LC_MESSAGES/plone.mo +0 -0
- eea/facetednavigation/locales/lt/LC_MESSAGES/plone.po +37 -0
- eea/facetednavigation/locales/lv/LC_MESSAGES/eea.mo +0 -0
- eea/facetednavigation/locales/lv/LC_MESSAGES/eea.po +1179 -0
- eea/facetednavigation/locales/lv/LC_MESSAGES/plone.mo +0 -0
- eea/facetednavigation/locales/lv/LC_MESSAGES/plone.po +37 -0
- eea/facetednavigation/locales/mt/LC_MESSAGES/eea.mo +0 -0
- eea/facetednavigation/locales/mt/LC_MESSAGES/eea.po +1179 -0
- eea/facetednavigation/locales/mt/LC_MESSAGES/plone.mo +0 -0
- eea/facetednavigation/locales/mt/LC_MESSAGES/plone.po +37 -0
- eea/facetednavigation/locales/nl/LC_MESSAGES/eea.mo +0 -0
- eea/facetednavigation/locales/nl/LC_MESSAGES/eea.po +1179 -0
- eea/facetednavigation/locales/nl/LC_MESSAGES/plone.mo +0 -0
- eea/facetednavigation/locales/nl/LC_MESSAGES/plone.po +37 -0
- eea/facetednavigation/locales/no/LC_MESSAGES/eea.mo +0 -0
- eea/facetednavigation/locales/no/LC_MESSAGES/eea.po +1179 -0
- eea/facetednavigation/locales/no/LC_MESSAGES/plone.mo +0 -0
- eea/facetednavigation/locales/no/LC_MESSAGES/plone.po +37 -0
- eea/facetednavigation/locales/pl/LC_MESSAGES/eea.mo +0 -0
- eea/facetednavigation/locales/pl/LC_MESSAGES/eea.po +1242 -0
- eea/facetednavigation/locales/pl/LC_MESSAGES/plone.mo +0 -0
- eea/facetednavigation/locales/pl/LC_MESSAGES/plone.po +37 -0
- eea/facetednavigation/locales/plone-manual.pot +38 -0
- eea/facetednavigation/locales/pt/LC_MESSAGES/eea.mo +0 -0
- eea/facetednavigation/locales/pt/LC_MESSAGES/eea.po +1179 -0
- eea/facetednavigation/locales/pt/LC_MESSAGES/plone.mo +0 -0
- eea/facetednavigation/locales/pt/LC_MESSAGES/plone.po +37 -0
- eea/facetednavigation/locales/pt_BR/LC_MESSAGES/eea.mo +0 -0
- eea/facetednavigation/locales/pt_BR/LC_MESSAGES/eea.po +1180 -0
- eea/facetednavigation/locales/pt_BR/LC_MESSAGES/plone.mo +0 -0
- eea/facetednavigation/locales/pt_BR/LC_MESSAGES/plone.po +37 -0
- eea/facetednavigation/locales/ro/LC_MESSAGES/eea.mo +0 -0
- eea/facetednavigation/locales/ro/LC_MESSAGES/eea.po +1244 -0
- eea/facetednavigation/locales/ro/LC_MESSAGES/plone.mo +0 -0
- eea/facetednavigation/locales/ro/LC_MESSAGES/plone.po +37 -0
- eea/facetednavigation/locales/ru/LC_MESSAGES/eea.mo +0 -0
- eea/facetednavigation/locales/ru/LC_MESSAGES/eea.po +1179 -0
- eea/facetednavigation/locales/ru/LC_MESSAGES/plone.mo +0 -0
- eea/facetednavigation/locales/ru/LC_MESSAGES/plone.po +37 -0
- eea/facetednavigation/locales/sk/LC_MESSAGES/eea.mo +0 -0
- eea/facetednavigation/locales/sk/LC_MESSAGES/eea.po +1179 -0
- eea/facetednavigation/locales/sk/LC_MESSAGES/plone.mo +0 -0
- eea/facetednavigation/locales/sk/LC_MESSAGES/plone.po +37 -0
- eea/facetednavigation/locales/sl/LC_MESSAGES/eea.mo +0 -0
- eea/facetednavigation/locales/sl/LC_MESSAGES/eea.po +1179 -0
- eea/facetednavigation/locales/sl/LC_MESSAGES/plone.mo +0 -0
- eea/facetednavigation/locales/sl/LC_MESSAGES/plone.po +37 -0
- eea/facetednavigation/locales/sv/LC_MESSAGES/eea.mo +0 -0
- eea/facetednavigation/locales/sv/LC_MESSAGES/eea.po +1179 -0
- eea/facetednavigation/locales/sv/LC_MESSAGES/plone.mo +0 -0
- eea/facetednavigation/locales/sv/LC_MESSAGES/plone.po +37 -0
- eea/facetednavigation/locales/tr/LC_MESSAGES/eea.mo +0 -0
- eea/facetednavigation/locales/tr/LC_MESSAGES/eea.po +1179 -0
- eea/facetednavigation/locales/tr/LC_MESSAGES/plone.mo +0 -0
- eea/facetednavigation/locales/tr/LC_MESSAGES/plone.po +37 -0
- eea/facetednavigation/locales/update.sh +6 -0
- eea/facetednavigation/locales/zh_TW/LC_MESSAGES/eea.mo +0 -0
- eea/facetednavigation/locales/zh_TW/LC_MESSAGES/eea.po +1243 -0
- eea/facetednavigation/locales/zh_TW/LC_MESSAGES/plone.mo +0 -0
- eea/facetednavigation/locales/zh_TW/LC_MESSAGES/plone.po +37 -0
- eea/facetednavigation/meta.zcml +22 -0
- eea/facetednavigation/overrides.zcml +11 -0
- eea/facetednavigation/permissions.zcml +12 -0
- eea/facetednavigation/plonex.py +36 -0
- eea/facetednavigation/profiles/default/actions.xml +67 -0
- eea/facetednavigation/profiles/default/eea.facetednavigation.txt +0 -0
- eea/facetednavigation/profiles/default/metadata.xml +4 -0
- eea/facetednavigation/profiles/default/registry.xml +48 -0
- eea/facetednavigation/profiles/default/rolemap.xml +11 -0
- eea/facetednavigation/profiles/uninstall/actions.xml +11 -0
- eea/facetednavigation/profiles/uninstall/eea.facetednavigation.txt +0 -0
- eea/facetednavigation/profiles/uninstall/registry.xml +8 -0
- eea/facetednavigation/profiles.zcml +42 -0
- eea/facetednavigation/search/__init__.py +2 -0
- eea/facetednavigation/search/catalog.py +84 -0
- eea/facetednavigation/search/configure.zcml +8 -0
- eea/facetednavigation/search/interfaces.py +10 -0
- eea/facetednavigation/settings/__init__.py +2 -0
- eea/facetednavigation/settings/configure.zcml +34 -0
- eea/facetednavigation/settings/interfaces.py +52 -0
- eea/facetednavigation/settings/menu.py +170 -0
- eea/facetednavigation/setuphandlers.py +92 -0
- eea/facetednavigation/subtypes/__init__.py +2 -0
- eea/facetednavigation/subtypes/configure.zcml +61 -0
- eea/facetednavigation/subtypes/interfaces.py +45 -0
- eea/facetednavigation/subtypes/subtyper.py +130 -0
- eea/facetednavigation/subtypes/wrapper.py +39 -0
- eea/facetednavigation/syndication/__init__.py +2 -0
- eea/facetednavigation/syndication/configure.zcml +13 -0
- eea/facetednavigation/syndication/feed.py +19 -0
- eea/facetednavigation/tests/__init__.py +2 -0
- eea/facetednavigation/tests/autocomplete.py +33 -0
- eea/facetednavigation/tests/autocomplete.zcml +15 -0
- eea/facetednavigation/tests/base.py +49 -0
- eea/facetednavigation/tests/configure.zcml +17 -0
- eea/facetednavigation/tests/data/criteria_with_purge_false.xml +15 -0
- eea/facetednavigation/tests/data/criteria_with_purge_true.xml +15 -0
- eea/facetednavigation/tests/data/criterion_with_purge_false.xml +15 -0
- eea/facetednavigation/tests/data/criterion_with_purge_true.xml +15 -0
- eea/facetednavigation/tests/data/exportimport.xml +31 -0
- eea/facetednavigation/tests/profiles/testing/types/Document.xml +6 -0
- eea/facetednavigation/tests/profiles/testing/types.xml +4 -0
- eea/facetednavigation/tests/test_bundles.py +42 -0
- eea/facetednavigation/tests/test_doctests.py +139 -0
- eea/facetednavigation/tests/utils.py +39 -0
- eea/facetednavigation/upgrades/__init__.py +2 -0
- eea/facetednavigation/upgrades/configure.zcml +28 -0
- eea/facetednavigation/upgrades/evolve165.py +13 -0
- eea/facetednavigation/utils.py +66 -0
- eea/facetednavigation/version.txt +1 -0
- eea/facetednavigation/versions/__init__.py +2 -0
- eea/facetednavigation/versions/browser.py +78 -0
- eea/facetednavigation/versions/configure.zcml +20 -0
- eea/facetednavigation/versions/events.py +16 -0
- eea/facetednavigation/versions/interfaces.py +15 -0
- eea/facetednavigation/views/__init__.py +2 -0
- eea/facetednavigation/views/configure.zcml +41 -0
- eea/facetednavigation/views/example/__init__.py +2 -0
- eea/facetednavigation/views/example/configure.zcml +24 -0
- eea/facetednavigation/views/example/summary.pt +74 -0
- eea/facetednavigation/views/example/summary.py +20 -0
- eea/facetednavigation/views/interfaces.py +7 -0
- eea/facetednavigation/views/meta.py +63 -0
- eea/facetednavigation/views/preview-item.pt +10 -0
- eea/facetednavigation/views/preview-items.pt +38 -0
- eea/facetednavigation/views/preview.py +74 -0
- eea/facetednavigation/vocabularies/__init__.py +2 -0
- eea/facetednavigation/vocabularies/autocomplete.py +44 -0
- eea/facetednavigation/vocabularies/catalog.py +204 -0
- eea/facetednavigation/vocabularies/configure.zcml +101 -0
- eea/facetednavigation/vocabularies/faceted.py +62 -0
- eea/facetednavigation/vocabularies/portal.py +55 -0
- eea/facetednavigation/vocabularies/position.py +23 -0
- eea/facetednavigation/vocabularies/section.py +19 -0
- eea/facetednavigation/vocabularies/simple.py +40 -0
- eea/facetednavigation/vocabularies/types.py +23 -0
- eea/facetednavigation/vocabularies/utils.py +10 -0
- eea/facetednavigation/widgets/__init__.py +12 -0
- eea/facetednavigation/widgets/alphabetic/__init__.py +2 -0
- eea/facetednavigation/widgets/alphabetic/adapters.py +48 -0
- eea/facetednavigation/widgets/alphabetic/alphabets.py +1042 -0
- eea/facetednavigation/widgets/alphabetic/configure.zcml +19 -0
- eea/facetednavigation/widgets/alphabetic/edit.js +80 -0
- eea/facetednavigation/widgets/alphabetic/edit.scss +0 -0
- eea/facetednavigation/widgets/alphabetic/interfaces.py +44 -0
- eea/facetednavigation/widgets/alphabetic/tests.py +32 -0
- eea/facetednavigation/widgets/alphabetic/view.js +229 -0
- eea/facetednavigation/widgets/alphabetic/view.scss +47 -0
- eea/facetednavigation/widgets/alphabetic/widget.pt +45 -0
- eea/facetednavigation/widgets/alphabetic/widget.py +64 -0
- eea/facetednavigation/widgets/alphabetic/widget.txt +104 -0
- eea/facetednavigation/widgets/autocomplete/__init__.py +2 -0
- eea/facetednavigation/widgets/autocomplete/configure.zcml +20 -0
- eea/facetednavigation/widgets/autocomplete/edit.js +52 -0
- eea/facetednavigation/widgets/autocomplete/edit.scss +0 -0
- eea/facetednavigation/widgets/autocomplete/interfaces.py +77 -0
- eea/facetednavigation/widgets/autocomplete/tests.py +32 -0
- eea/facetednavigation/widgets/autocomplete/view.js +245 -0
- eea/facetednavigation/widgets/autocomplete/view.scss +52 -0
- eea/facetednavigation/widgets/autocomplete/widget.pt +63 -0
- eea/facetednavigation/widgets/autocomplete/widget.py +117 -0
- eea/facetednavigation/widgets/autocomplete/widget.txt +142 -0
- eea/facetednavigation/widgets/boolean/__init__.py +2 -0
- eea/facetednavigation/widgets/boolean/configure.zcml +12 -0
- eea/facetednavigation/widgets/boolean/interfaces.py +48 -0
- eea/facetednavigation/widgets/boolean/widget.pt +46 -0
- eea/facetednavigation/widgets/boolean/widget.py +56 -0
- eea/facetednavigation/widgets/checkbox/__init__.py +2 -0
- eea/facetednavigation/widgets/checkbox/configure.zcml +12 -0
- eea/facetednavigation/widgets/checkbox/edit.js +115 -0
- eea/facetednavigation/widgets/checkbox/edit.scss +0 -0
- eea/facetednavigation/widgets/checkbox/interfaces.py +104 -0
- eea/facetednavigation/widgets/checkbox/view.js +319 -0
- eea/facetednavigation/widgets/checkbox/view.scss +59 -0
- eea/facetednavigation/widgets/checkbox/widget.pt +75 -0
- eea/facetednavigation/widgets/checkbox/widget.py +102 -0
- eea/facetednavigation/widgets/configure.zcml +30 -0
- eea/facetednavigation/widgets/criteria/__init__.py +2 -0
- eea/facetednavigation/widgets/criteria/configure.zcml +12 -0
- eea/facetednavigation/widgets/criteria/edit.js +0 -0
- eea/facetednavigation/widgets/criteria/edit.scss +0 -0
- eea/facetednavigation/widgets/criteria/interfaces.py +35 -0
- eea/facetednavigation/widgets/criteria/view.js +123 -0
- eea/facetednavigation/widgets/criteria/view.scss +61 -0
- eea/facetednavigation/widgets/criteria/widget.pt +36 -0
- eea/facetednavigation/widgets/criteria/widget.py +17 -0
- eea/facetednavigation/widgets/date/__init__.py +2 -0
- eea/facetednavigation/widgets/date/configure.zcml +12 -0
- eea/facetednavigation/widgets/date/edit.js +89 -0
- eea/facetednavigation/widgets/date/edit.scss +0 -0
- eea/facetednavigation/widgets/date/interfaces.py +36 -0
- eea/facetednavigation/widgets/date/tests.py +32 -0
- eea/facetednavigation/widgets/date/view.js +195 -0
- eea/facetednavigation/widgets/date/view.scss +10 -0
- eea/facetednavigation/widgets/date/widget.pt +40 -0
- eea/facetednavigation/widgets/date/widget.py +166 -0
- eea/facetednavigation/widgets/date/widget.txt +225 -0
- eea/facetednavigation/widgets/daterange/__init__.py +2 -0
- eea/facetednavigation/widgets/daterange/configure.zcml +12 -0
- eea/facetednavigation/widgets/daterange/edit.js +114 -0
- eea/facetednavigation/widgets/daterange/edit.scss +0 -0
- eea/facetednavigation/widgets/daterange/interfaces.py +102 -0
- eea/facetednavigation/widgets/daterange/tests.py +32 -0
- eea/facetednavigation/widgets/daterange/utils.py +117 -0
- eea/facetednavigation/widgets/daterange/view.js +308 -0
- eea/facetednavigation/widgets/daterange/view.scss +14 -0
- eea/facetednavigation/widgets/daterange/widget.pt +61 -0
- eea/facetednavigation/widgets/daterange/widget.py +184 -0
- eea/facetednavigation/widgets/daterange/widget.txt +280 -0
- eea/facetednavigation/widgets/debug/__init__.py +2 -0
- eea/facetednavigation/widgets/debug/browser.py +161 -0
- eea/facetednavigation/widgets/debug/configure.zcml +58 -0
- eea/facetednavigation/widgets/debug/edit.js +104 -0
- eea/facetednavigation/widgets/debug/edit.scss +0 -0
- eea/facetednavigation/widgets/debug/interfaces.py +35 -0
- eea/facetednavigation/widgets/debug/view.js +109 -0
- eea/facetednavigation/widgets/debug/view.scss +6 -0
- eea/facetednavigation/widgets/debug/vocabulary.py +21 -0
- eea/facetednavigation/widgets/debug/widget.pt +43 -0
- eea/facetednavigation/widgets/debug/widget.py +17 -0
- eea/facetednavigation/widgets/etag/__init__.py +2 -0
- eea/facetednavigation/widgets/etag/configure.zcml +12 -0
- eea/facetednavigation/widgets/etag/edit.js +51 -0
- eea/facetednavigation/widgets/etag/edit.scss +0 -0
- eea/facetednavigation/widgets/etag/interfaces.py +52 -0
- eea/facetednavigation/widgets/etag/view.js +0 -0
- eea/facetednavigation/widgets/etag/view.scss +0 -0
- eea/facetednavigation/widgets/etag/widget.pt +25 -0
- eea/facetednavigation/widgets/etag/widget.py +16 -0
- eea/facetednavigation/widgets/interfaces.py +156 -0
- eea/facetednavigation/widgets/multiselect/__init__.py +2 -0
- eea/facetednavigation/widgets/multiselect/configure.zcml +12 -0
- eea/facetednavigation/widgets/multiselect/edit.js +131 -0
- eea/facetednavigation/widgets/multiselect/edit.scss +0 -0
- eea/facetednavigation/widgets/multiselect/interfaces.py +120 -0
- eea/facetednavigation/widgets/multiselect/view.js +383 -0
- eea/facetednavigation/widgets/multiselect/view.scss +65 -0
- eea/facetednavigation/widgets/multiselect/widget.pt +73 -0
- eea/facetednavigation/widgets/multiselect/widget.py +107 -0
- eea/facetednavigation/widgets/path/__init__.py +2 -0
- eea/facetednavigation/widgets/path/configure.zcml +28 -0
- eea/facetednavigation/widgets/path/edit.js +63 -0
- eea/facetednavigation/widgets/path/edit.scss +0 -0
- eea/facetednavigation/widgets/path/interfaces.py +67 -0
- eea/facetednavigation/widgets/path/tree.js +99 -0
- eea/facetednavigation/widgets/path/tree.py +171 -0
- eea/facetednavigation/widgets/path/view.js +158 -0
- eea/facetednavigation/widgets/path/view.scss +16 -0
- eea/facetednavigation/widgets/path/widget.pt +29 -0
- eea/facetednavigation/widgets/path/widget.py +134 -0
- eea/facetednavigation/widgets/portlet/__init__.py +2 -0
- eea/facetednavigation/widgets/portlet/configure.zcml +12 -0
- eea/facetednavigation/widgets/portlet/edit.js +0 -0
- eea/facetednavigation/widgets/portlet/edit.scss +0 -0
- eea/facetednavigation/widgets/portlet/interfaces.py +34 -0
- eea/facetednavigation/widgets/portlet/view.js +23 -0
- eea/facetednavigation/widgets/portlet/view.scss +6 -0
- eea/facetednavigation/widgets/portlet/widget.pt +20 -0
- eea/facetednavigation/widgets/portlet/widget.py +46 -0
- eea/facetednavigation/widgets/radio/__init__.py +2 -0
- eea/facetednavigation/widgets/radio/configure.zcml +12 -0
- eea/facetednavigation/widgets/radio/edit.js +76 -0
- eea/facetednavigation/widgets/radio/edit.scss +0 -0
- eea/facetednavigation/widgets/radio/interfaces.py +76 -0
- eea/facetednavigation/widgets/radio/view.js +262 -0
- eea/facetednavigation/widgets/radio/view.scss +11 -0
- eea/facetednavigation/widgets/radio/widget.pt +71 -0
- eea/facetednavigation/widgets/radio/widget.py +53 -0
- eea/facetednavigation/widgets/range/__init__.py +2 -0
- eea/facetednavigation/widgets/range/configure.zcml +12 -0
- eea/facetednavigation/widgets/range/edit.js +66 -0
- eea/facetednavigation/widgets/range/edit.scss +0 -0
- eea/facetednavigation/widgets/range/interfaces.py +78 -0
- eea/facetednavigation/widgets/range/tests.py +32 -0
- eea/facetednavigation/widgets/range/view.js +176 -0
- eea/facetednavigation/widgets/range/view.scss +14 -0
- eea/facetednavigation/widgets/range/widget.pt +50 -0
- eea/facetednavigation/widgets/range/widget.py +74 -0
- eea/facetednavigation/widgets/range/widget.txt +153 -0
- eea/facetednavigation/widgets/resultsfilter/__init__.py +2 -0
- eea/facetednavigation/widgets/resultsfilter/adapters.py +18 -0
- eea/facetednavigation/widgets/resultsfilter/configure.zcml +19 -0
- eea/facetednavigation/widgets/resultsfilter/edit.js +54 -0
- eea/facetednavigation/widgets/resultsfilter/edit.scss +0 -0
- eea/facetednavigation/widgets/resultsfilter/interfaces.py +41 -0
- eea/facetednavigation/widgets/resultsfilter/tests.py +32 -0
- eea/facetednavigation/widgets/resultsfilter/view.js +0 -0
- eea/facetednavigation/widgets/resultsfilter/view.scss +0 -0
- eea/facetednavigation/widgets/resultsfilter/widget.pt +24 -0
- eea/facetednavigation/widgets/resultsfilter/widget.py +94 -0
- eea/facetednavigation/widgets/resultsfilter/widget.txt +66 -0
- eea/facetednavigation/widgets/resultsperpage/__init__.py +2 -0
- eea/facetednavigation/widgets/resultsperpage/configure.zcml +12 -0
- eea/facetednavigation/widgets/resultsperpage/edit.js +47 -0
- eea/facetednavigation/widgets/resultsperpage/edit.scss +0 -0
- eea/facetednavigation/widgets/resultsperpage/interfaces.py +65 -0
- eea/facetednavigation/widgets/resultsperpage/view.js +159 -0
- eea/facetednavigation/widgets/resultsperpage/view.scss +5 -0
- eea/facetednavigation/widgets/resultsperpage/widget.pt +45 -0
- eea/facetednavigation/widgets/resultsperpage/widget.py +71 -0
- eea/facetednavigation/widgets/schema.pt +36 -0
- eea/facetednavigation/widgets/schema.py +31 -0
- eea/facetednavigation/widgets/select/__init__.py +2 -0
- eea/facetednavigation/widgets/select/configure.zcml +12 -0
- eea/facetednavigation/widgets/select/edit.js +63 -0
- eea/facetednavigation/widgets/select/edit.scss +0 -0
- eea/facetednavigation/widgets/select/interfaces.py +68 -0
- eea/facetednavigation/widgets/select/view.js +239 -0
- eea/facetednavigation/widgets/select/view.scss +24 -0
- eea/facetednavigation/widgets/select/widget.pt +59 -0
- eea/facetednavigation/widgets/select/widget.py +44 -0
- eea/facetednavigation/widgets/sorting/__init__.py +2 -0
- eea/facetednavigation/widgets/sorting/configure.zcml +12 -0
- eea/facetednavigation/widgets/sorting/edit.js +55 -0
- eea/facetednavigation/widgets/sorting/edit.scss +0 -0
- eea/facetednavigation/widgets/sorting/interfaces.py +35 -0
- eea/facetednavigation/widgets/sorting/view.js +213 -0
- eea/facetednavigation/widgets/sorting/view.scss +9 -0
- eea/facetednavigation/widgets/sorting/widget.pt +58 -0
- eea/facetednavigation/widgets/sorting/widget.py +80 -0
- eea/facetednavigation/widgets/storage.py +65 -0
- eea/facetednavigation/widgets/tagscloud/__init__.py +2 -0
- eea/facetednavigation/widgets/tagscloud/configure.zcml +20 -0
- eea/facetednavigation/widgets/tagscloud/counter.pt +0 -0
- eea/facetednavigation/widgets/tagscloud/counter.py +79 -0
- eea/facetednavigation/widgets/tagscloud/edit.js +150 -0
- eea/facetednavigation/widgets/tagscloud/edit.scss +0 -0
- eea/facetednavigation/widgets/tagscloud/interfaces.py +154 -0
- eea/facetednavigation/widgets/tagscloud/tagcloud.js +210 -0
- eea/facetednavigation/widgets/tagscloud/view.js +301 -0
- eea/facetednavigation/widgets/tagscloud/view.scss +33 -0
- eea/facetednavigation/widgets/tagscloud/widget.pt +65 -0
- eea/facetednavigation/widgets/tagscloud/widget.py +100 -0
- eea/facetednavigation/widgets/tal/__init__.py +2 -0
- eea/facetednavigation/widgets/tal/configure.zcml +12 -0
- eea/facetednavigation/widgets/tal/edit.js +54 -0
- eea/facetednavigation/widgets/tal/edit.scss +0 -0
- eea/facetednavigation/widgets/tal/interfaces.py +42 -0
- eea/facetednavigation/widgets/tal/tests.py +32 -0
- eea/facetednavigation/widgets/tal/view.js +0 -0
- eea/facetednavigation/widgets/tal/view.scss +0 -0
- eea/facetednavigation/widgets/tal/widget.pt +24 -0
- eea/facetednavigation/widgets/tal/widget.py +118 -0
- eea/facetednavigation/widgets/tal/widget.txt +216 -0
- eea/facetednavigation/widgets/text/__init__.py +2 -0
- eea/facetednavigation/widgets/text/configure.zcml +12 -0
- eea/facetednavigation/widgets/text/edit.js +52 -0
- eea/facetednavigation/widgets/text/edit.scss +0 -0
- eea/facetednavigation/widgets/text/interfaces.py +64 -0
- eea/facetednavigation/widgets/text/tests.py +32 -0
- eea/facetednavigation/widgets/text/view.js +190 -0
- eea/facetednavigation/widgets/text/view.scss +15 -0
- eea/facetednavigation/widgets/text/widget.pt +53 -0
- eea/facetednavigation/widgets/text/widget.py +77 -0
- eea/facetednavigation/widgets/text/widget.txt +153 -0
- eea/facetednavigation/widgets/widget.py +386 -0
- eea/facetednavigation/widgets/widgets.py +127 -0
- eea.facetednavigation-16.5-py3.14-nspkg.pth +1 -0
- eea_facetednavigation-16.5.dist-info/METADATA +1617 -0
- eea_facetednavigation-16.5.dist-info/RECORD +553 -0
- eea_facetednavigation-16.5.dist-info/WHEEL +5 -0
- eea_facetednavigation-16.5.dist-info/entry_points.txt +2 -0
- eea_facetednavigation-16.5.dist-info/namespace_packages.txt +1 -0
- eea_facetednavigation-16.5.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
Overview
|
|
2
|
+
========
|
|
3
|
+
Faceted navigation is a revolutionary plone package that redefines search
|
|
4
|
+
and navigation within plone sites.
|
|
5
|
+
|
|
6
|
+
* See more: http://plone.org/products/eea.facetednavigation
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
Installation
|
|
10
|
+
============
|
|
11
|
+
* Go to "admin > Site Setup > Add-ons"
|
|
12
|
+
* Activate "EEA Faceted Navigation"
|
|
13
|
+
* Go to "admin > Site Setup > Content Types"
|
|
14
|
+
* Select one content type and go to "Behaviors"
|
|
15
|
+
* Enable "Faceted navigable" behavior
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
Extra
|
|
19
|
+
=====
|
|
20
|
+
You can extend faceted navigation functionality by installing the following
|
|
21
|
+
addons:
|
|
22
|
+
|
|
23
|
+
* Cache (memcache)
|
|
24
|
+
- plone.memoize
|
|
25
|
+
- eea.cache
|
|
26
|
+
|
|
27
|
+
Documentation
|
|
28
|
+
=============
|
|
29
|
+
See the **docs** directory in this package.
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
Authors
|
|
33
|
+
=======
|
|
34
|
+
"European Environment Agency", mailto:webadmin@eea europa eu
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
""" Faceted catalog views
|
|
2
|
+
"""
|
|
3
|
+
import json
|
|
4
|
+
import logging
|
|
5
|
+
from Products.CMFCore.utils import getToolByName
|
|
6
|
+
from Products.Five.browser import BrowserView
|
|
7
|
+
from eea.facetednavigation.caching import ramcache
|
|
8
|
+
|
|
9
|
+
logger = logging.getLogger("eea.facetednavigation")
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def cacheKey(method, self, *args, **kwargs):
|
|
13
|
+
"""Generate unique cache id for faceted catalog indexes types"""
|
|
14
|
+
form = getattr(self.request, "form", {})
|
|
15
|
+
return form
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class FacetedCatalog(BrowserView):
|
|
19
|
+
"""Render an error message when something is wrong with widgets"""
|
|
20
|
+
|
|
21
|
+
def types(self, **kwargs):
|
|
22
|
+
"""Return a mapping between catalog indexes and types"""
|
|
23
|
+
ctool = getToolByName(self.context, "portal_catalog")
|
|
24
|
+
indexes = ctool.getIndexObjects()
|
|
25
|
+
res = {}
|
|
26
|
+
for index in indexes:
|
|
27
|
+
operator = "operator" in getattr(index, "query_options", [])
|
|
28
|
+
res[index.getId()] = {
|
|
29
|
+
"metatype": index.meta_type,
|
|
30
|
+
"operator": operator and ["or", "and"] or ["or"],
|
|
31
|
+
}
|
|
32
|
+
return res
|
|
33
|
+
|
|
34
|
+
@ramcache(cacheKey, dependencies=["eea.facetednavigation"])
|
|
35
|
+
def json_types(self, **kwargs):
|
|
36
|
+
"""Return catalog indexes, types mapping as json object"""
|
|
37
|
+
if self.request:
|
|
38
|
+
kwargs.update(self.request.form)
|
|
39
|
+
self.request.response.setHeader(
|
|
40
|
+
"Content-Type", "application/json; charset=utf-8"
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
return json.dumps(self.types(**kwargs))
|
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
""" Faceted configure
|
|
2
|
+
"""
|
|
3
|
+
from eea.facetednavigation import _
|
|
4
|
+
from eea.facetednavigation.browser import interfaces
|
|
5
|
+
from eea.facetednavigation.events import FacetedGlobalSettingsChangedEvent
|
|
6
|
+
from eea.facetednavigation.events import FacetedSettingsWillBeChangedEvent
|
|
7
|
+
from eea.facetednavigation.interfaces import ICriteria
|
|
8
|
+
from eea.facetednavigation.interfaces import IWidgetsInfo
|
|
9
|
+
from plone.protect.interfaces import IDisableCSRFProtection
|
|
10
|
+
from Products.Five.browser import BrowserView
|
|
11
|
+
from Products.statusmessages.interfaces import IStatusMessage
|
|
12
|
+
from zope.component import getMultiAdapter
|
|
13
|
+
from zope.component import getUtility
|
|
14
|
+
from zope.event import notify
|
|
15
|
+
from zope.interface import alsoProvides
|
|
16
|
+
from zope.interface import implementer
|
|
17
|
+
from zope.schema.interfaces import IVocabularyFactory
|
|
18
|
+
|
|
19
|
+
import logging
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
logger = logging.getLogger("eea.facetednavigation")
|
|
23
|
+
#
|
|
24
|
+
# Controllers
|
|
25
|
+
#
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class FacetedBasicHandler(BrowserView):
|
|
29
|
+
"""Define common methods for criteria handlers"""
|
|
30
|
+
|
|
31
|
+
def __init__(self, context, request=None):
|
|
32
|
+
self.context = context
|
|
33
|
+
self.request = request or getattr(context, "request", None)
|
|
34
|
+
self.redirect = context.absolute_url() + "/configure_faceted.html"
|
|
35
|
+
|
|
36
|
+
def _redirect(self, msg="", to=""):
|
|
37
|
+
"""Return or redirect"""
|
|
38
|
+
if not to:
|
|
39
|
+
return msg
|
|
40
|
+
|
|
41
|
+
if not self.request:
|
|
42
|
+
return msg
|
|
43
|
+
|
|
44
|
+
if msg:
|
|
45
|
+
IStatusMessage(self.request).addStatusMessage(str(msg), type="info")
|
|
46
|
+
self.request.response.redirect(to)
|
|
47
|
+
return msg
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
@implementer(interfaces.IFacetedCriteriaHandler)
|
|
51
|
+
class FacetedCriteriaHandler(FacetedBasicHandler):
|
|
52
|
+
"""Edit criteria"""
|
|
53
|
+
|
|
54
|
+
def add(self, **kwargs):
|
|
55
|
+
"""See IFacetedCriteriaHandler"""
|
|
56
|
+
wid = kwargs.pop("wtype", None)
|
|
57
|
+
position = kwargs.pop("wposition", "right")
|
|
58
|
+
section = kwargs.pop("wsection", "default")
|
|
59
|
+
try:
|
|
60
|
+
ICriteria(self.context).add(wid, position, section)
|
|
61
|
+
except NameError as err:
|
|
62
|
+
msg = err
|
|
63
|
+
else:
|
|
64
|
+
msg = _("Filter added")
|
|
65
|
+
return self._redirect(msg=msg, to=self.redirect)
|
|
66
|
+
|
|
67
|
+
def edit(self, **kwargs):
|
|
68
|
+
"""See IFacetedCriteriaHandler"""
|
|
69
|
+
criteria = ICriteria(self.context)
|
|
70
|
+
handler = getMultiAdapter(
|
|
71
|
+
(self.context, self.request), name="faceted_update_criterion"
|
|
72
|
+
)
|
|
73
|
+
for cid in criteria.keys():
|
|
74
|
+
properties = {}
|
|
75
|
+
for key, value in kwargs.items():
|
|
76
|
+
if not key.startswith(cid):
|
|
77
|
+
continue
|
|
78
|
+
key = key[len(cid) + 1 :]
|
|
79
|
+
properties[key] = value
|
|
80
|
+
handler.edit(cid, **properties)
|
|
81
|
+
return self._redirect("Changes saved", to=self.redirect)
|
|
82
|
+
|
|
83
|
+
def delete(self, **kwargs):
|
|
84
|
+
"""See IFacetedCriteriaHandler"""
|
|
85
|
+
to_delete = kwargs.get("paths", kwargs.get("ids", ()))
|
|
86
|
+
handler = getMultiAdapter(
|
|
87
|
+
(self.context, self.request), name="faceted_update_criterion"
|
|
88
|
+
)
|
|
89
|
+
for cid in to_delete:
|
|
90
|
+
handler.delete(cid)
|
|
91
|
+
return self._redirect(_("Filters deleted"), to=self.redirect)
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
@implementer(interfaces.IFacetedCriterionHandler)
|
|
95
|
+
class FacetedCriterionHandler(FacetedBasicHandler):
|
|
96
|
+
"""Edit criterion"""
|
|
97
|
+
|
|
98
|
+
def extractData(self, widget, **kwargs):
|
|
99
|
+
"""Extract form"""
|
|
100
|
+
widget.update()
|
|
101
|
+
form, _errors = widget.extractData()
|
|
102
|
+
form.update(kwargs)
|
|
103
|
+
return form
|
|
104
|
+
|
|
105
|
+
def add(self, **kwargs):
|
|
106
|
+
"""See IFacetedCriterionHandler"""
|
|
107
|
+
wid = kwargs.pop("wtype", self.request.get("wtype", None))
|
|
108
|
+
position = kwargs.pop("wposition", self.request.get("wposition", "right"))
|
|
109
|
+
section = kwargs.pop("wsection", self.request.get("wsection", "default"))
|
|
110
|
+
|
|
111
|
+
criteria = ICriteria(self.context)
|
|
112
|
+
cid = criteria.add(wid, position, section)
|
|
113
|
+
return self.edit(cid, __new__=True, **kwargs)
|
|
114
|
+
|
|
115
|
+
def edit(self, cid, **kwargs):
|
|
116
|
+
"""See IFacetedCriterionHandler"""
|
|
117
|
+
criteria = ICriteria(self.context)
|
|
118
|
+
widget = criteria.widget(cid=cid)
|
|
119
|
+
criterion = criteria.get(cid)
|
|
120
|
+
if kwargs.pop("__new__", False):
|
|
121
|
+
criterion = criterion.__class__(cid="c0")
|
|
122
|
+
widget = widget(self.context, self.request, criterion)
|
|
123
|
+
|
|
124
|
+
wid = kwargs.pop("widget", None)
|
|
125
|
+
properties = self.extractData(widget, **kwargs)
|
|
126
|
+
if wid:
|
|
127
|
+
properties["widget"] = wid
|
|
128
|
+
|
|
129
|
+
update = {}
|
|
130
|
+
for prop, value in properties.items():
|
|
131
|
+
form_key = "faceted.%s.%s" % (cid, prop)
|
|
132
|
+
if form_key not in kwargs and value is None:
|
|
133
|
+
continue
|
|
134
|
+
update[prop] = value
|
|
135
|
+
|
|
136
|
+
if update:
|
|
137
|
+
criteria.edit(cid, **update)
|
|
138
|
+
if widget.hidden:
|
|
139
|
+
notify(FacetedGlobalSettingsChangedEvent(self.context))
|
|
140
|
+
elif set(["hidden", "operator"]).intersection(list(update.keys())):
|
|
141
|
+
notify(FacetedGlobalSettingsChangedEvent(self.context))
|
|
142
|
+
|
|
143
|
+
return self._redirect("Changes saved")
|
|
144
|
+
|
|
145
|
+
def delete(self, cid, **kwargs):
|
|
146
|
+
"""See IFacetedCriterionHandler"""
|
|
147
|
+
try:
|
|
148
|
+
ICriteria(self.context).delete(cid)
|
|
149
|
+
except (TypeError, KeyError) as err:
|
|
150
|
+
msg = err
|
|
151
|
+
else:
|
|
152
|
+
msg = _("Filter deleted")
|
|
153
|
+
return self._redirect(msg=msg)
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
@implementer(interfaces.IFacetedPositionHandler)
|
|
157
|
+
class FacetedPositionHandler(FacetedBasicHandler):
|
|
158
|
+
"""Edit criteria position"""
|
|
159
|
+
|
|
160
|
+
def update(self, **kwargs):
|
|
161
|
+
"""Update position by given slots"""
|
|
162
|
+
logger.debug(kwargs)
|
|
163
|
+
ICriteria(self.context).position(**kwargs)
|
|
164
|
+
return self._redirect("Position changed")
|
|
165
|
+
|
|
166
|
+
def move_up(self, cid, **kwargs):
|
|
167
|
+
"""Move criterion up"""
|
|
168
|
+
ICriteria(self.context).up(cid)
|
|
169
|
+
return self._redirect("Position changed", to=self.redirect)
|
|
170
|
+
|
|
171
|
+
def move_down(self, cid, **kwargs):
|
|
172
|
+
"""Move criterion down"""
|
|
173
|
+
ICriteria(self.context).down(cid)
|
|
174
|
+
return self._redirect("Position changed", to=self.redirect)
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
@implementer(interfaces.IFacetedFormHandler)
|
|
178
|
+
class FacetedFormHandler(FacetedBasicHandler):
|
|
179
|
+
"""Edit criteria using a static form"""
|
|
180
|
+
|
|
181
|
+
def __init__(self, context, request):
|
|
182
|
+
super(FacetedFormHandler, self).__init__(context, request)
|
|
183
|
+
# XXX Quick fix until we figure out how to enable CSRF Protection
|
|
184
|
+
alsoProvides(request, IDisableCSRFProtection)
|
|
185
|
+
|
|
186
|
+
def __call__(self, **kwargs):
|
|
187
|
+
"""This method is called from a form with more than one submit buttons"""
|
|
188
|
+
sanitized_form = {}
|
|
189
|
+
for key, value in getattr(self.request, "form", {}).items():
|
|
190
|
+
key = key.replace("[]", "")
|
|
191
|
+
if isinstance(value, bytes):
|
|
192
|
+
value = value.decode("utf-8")
|
|
193
|
+
sanitized_form[key] = value
|
|
194
|
+
|
|
195
|
+
if sanitized_form:
|
|
196
|
+
self.request.form = sanitized_form
|
|
197
|
+
kwargs.update(sanitized_form)
|
|
198
|
+
|
|
199
|
+
notify(FacetedSettingsWillBeChangedEvent(self.context))
|
|
200
|
+
#
|
|
201
|
+
# Criteria
|
|
202
|
+
#
|
|
203
|
+
handler = getMultiAdapter(
|
|
204
|
+
(self.context, self.request), name="faceted_update_criteria"
|
|
205
|
+
)
|
|
206
|
+
|
|
207
|
+
# Add button clicked
|
|
208
|
+
if kwargs.get("addWidget_button", None):
|
|
209
|
+
return handler.add(**kwargs)
|
|
210
|
+
|
|
211
|
+
# Delete button clicked
|
|
212
|
+
if kwargs.get("deleteWidgets_button", None):
|
|
213
|
+
return handler.delete(**kwargs)
|
|
214
|
+
|
|
215
|
+
# Save button clicked
|
|
216
|
+
if kwargs.get("saveChanges_button", None):
|
|
217
|
+
return handler.edit(**kwargs)
|
|
218
|
+
#
|
|
219
|
+
# Criterion
|
|
220
|
+
#
|
|
221
|
+
handler = getMultiAdapter(
|
|
222
|
+
(self.context, self.request), name="faceted_update_criterion"
|
|
223
|
+
)
|
|
224
|
+
# Add button clicked
|
|
225
|
+
if kwargs.pop("addPropertiesWidget_button", None):
|
|
226
|
+
return handler.add(**kwargs)
|
|
227
|
+
|
|
228
|
+
# Delete button clicked
|
|
229
|
+
if kwargs.pop("deleteWidget_button", None):
|
|
230
|
+
cid = kwargs.pop("path", kwargs.pop("cid", ""))
|
|
231
|
+
return handler.delete(cid=cid, **kwargs)
|
|
232
|
+
|
|
233
|
+
# Save button clicked
|
|
234
|
+
if kwargs.pop("updateCriterion_button", None):
|
|
235
|
+
return handler.edit(**kwargs)
|
|
236
|
+
#
|
|
237
|
+
# Position
|
|
238
|
+
#
|
|
239
|
+
handler = getMultiAdapter(
|
|
240
|
+
(self.context, self.request), name="faceted_update_position"
|
|
241
|
+
)
|
|
242
|
+
|
|
243
|
+
# Update position
|
|
244
|
+
if kwargs.get("updatePosition_button", None):
|
|
245
|
+
return handler.update(**kwargs)
|
|
246
|
+
|
|
247
|
+
# Move up button clicked
|
|
248
|
+
move_up = [k for k in kwargs if k.startswith("moveUp_button")]
|
|
249
|
+
if move_up:
|
|
250
|
+
cid = move_up[0].split("+++")[1]
|
|
251
|
+
return handler.move_up(cid)
|
|
252
|
+
|
|
253
|
+
# Move down button clicked
|
|
254
|
+
move_down = [k for k in kwargs if k.startswith("moveDown_button")]
|
|
255
|
+
if move_down:
|
|
256
|
+
cid = move_down[0].split("+++")[1]
|
|
257
|
+
return handler.move_down(cid)
|
|
258
|
+
|
|
259
|
+
# Return
|
|
260
|
+
self._redirect("Nothing changed", to=self.redirect)
|
|
261
|
+
|
|
262
|
+
|
|
263
|
+
# View
|
|
264
|
+
#
|
|
265
|
+
class FacetedConfigureView(object):
|
|
266
|
+
"""Faceted configure"""
|
|
267
|
+
|
|
268
|
+
def __init__(self, context, request):
|
|
269
|
+
self.context = context
|
|
270
|
+
self.request = request
|
|
271
|
+
|
|
272
|
+
@property
|
|
273
|
+
def positions(self):
|
|
274
|
+
"""Possible positions"""
|
|
275
|
+
voc = getUtility(IVocabularyFactory, "eea.faceted.vocabularies.WidgetPositions")
|
|
276
|
+
return voc(self.context)
|
|
277
|
+
|
|
278
|
+
@property
|
|
279
|
+
def sections(self):
|
|
280
|
+
"""Possible sections"""
|
|
281
|
+
voc = getUtility(IVocabularyFactory, "eea.faceted.vocabularies.WidgetSections")
|
|
282
|
+
return voc(self.context)
|
|
283
|
+
|
|
284
|
+
def get_widget(self, wid):
|
|
285
|
+
"""Get widget by given widget id"""
|
|
286
|
+
return ICriteria(self.context).widget(wid)
|
|
287
|
+
|
|
288
|
+
def get_widget_types(self):
|
|
289
|
+
"""Widget types"""
|
|
290
|
+
info = getUtility(IWidgetsInfo)
|
|
291
|
+
res = [x for x in info.widgets.values()]
|
|
292
|
+
|
|
293
|
+
def compare(x):
|
|
294
|
+
"""Compare"""
|
|
295
|
+
return x.widget_label
|
|
296
|
+
|
|
297
|
+
res.sort(key=compare)
|
|
298
|
+
return res
|
|
299
|
+
|
|
300
|
+
def get_schema(self, criterion):
|
|
301
|
+
"""Get edit schema"""
|
|
302
|
+
schema = getMultiAdapter((self.context, self.request), name="faceted_schema")
|
|
303
|
+
return schema(criterion=criterion.getId())
|
|
304
|
+
|
|
305
|
+
def get_criteria(self):
|
|
306
|
+
"""Get criteria"""
|
|
307
|
+
return list(ICriteria(self.context).values())
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
""" Counter
|
|
2
|
+
"""
|
|
3
|
+
import logging
|
|
4
|
+
import time
|
|
5
|
+
import json
|
|
6
|
+
|
|
7
|
+
from zope.component import getMultiAdapter
|
|
8
|
+
from eea.facetednavigation.caching import ramcache
|
|
9
|
+
from eea.facetednavigation.caching import cacheCounterKeyFacetedNavigation
|
|
10
|
+
from eea.facetednavigation.interfaces import ICriteria
|
|
11
|
+
|
|
12
|
+
logger = logging.getLogger("eea.facetednavigation")
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class FacetedQueryCounter(object):
|
|
16
|
+
"""Count results per query"""
|
|
17
|
+
|
|
18
|
+
def __init__(self, context, request):
|
|
19
|
+
self.context = context
|
|
20
|
+
self.request = request
|
|
21
|
+
|
|
22
|
+
def query(self, cid, **kwargs):
|
|
23
|
+
"""Count catalog items"""
|
|
24
|
+
# Cleanup query
|
|
25
|
+
kwargs.pop("sort_on", None)
|
|
26
|
+
kwargs.pop("sort_order", None)
|
|
27
|
+
kwargs.pop("sort[]", None)
|
|
28
|
+
kwargs.pop("sort", None)
|
|
29
|
+
kwargs.pop("reversed[]", None)
|
|
30
|
+
oid = "%s-operator" % cid
|
|
31
|
+
operator = kwargs.pop(oid, kwargs.pop(oid + "[]", None))
|
|
32
|
+
|
|
33
|
+
if not operator or operator != "and":
|
|
34
|
+
kwargs.pop(cid, None)
|
|
35
|
+
self.request.form.pop(cid, None)
|
|
36
|
+
# jQuery >= 1.4 adds type to params keys
|
|
37
|
+
# $.param({ a: [2,3,4] }) // "a[]=2&a[]=3&a[]=4"
|
|
38
|
+
# Let's fix this
|
|
39
|
+
kwargs.pop(cid + "[]", None)
|
|
40
|
+
self.request.form.pop(cid + "[]", None)
|
|
41
|
+
|
|
42
|
+
criteria = ICriteria(self.context)
|
|
43
|
+
criterion = criteria.get(cid)
|
|
44
|
+
|
|
45
|
+
start = time.time()
|
|
46
|
+
# Query catalog
|
|
47
|
+
handler = getMultiAdapter((self.context, self.request), name="faceted_query")
|
|
48
|
+
|
|
49
|
+
if criterion.get("index", "") == "Language":
|
|
50
|
+
kwargs["_language_count_"] = True
|
|
51
|
+
kwargs["counter_query"] = True
|
|
52
|
+
brains = handler.query(batch=False, sort=False, **kwargs)
|
|
53
|
+
|
|
54
|
+
# Get index
|
|
55
|
+
widget = criteria.widget(cid=cid)(self.context, self.request, criterion)
|
|
56
|
+
count = getattr(widget, "count", lambda brains: {})
|
|
57
|
+
res = count(brains)
|
|
58
|
+
logger.debug("Benchmark %s: %s", cid, time.time() - start)
|
|
59
|
+
return res
|
|
60
|
+
|
|
61
|
+
@ramcache(cacheCounterKeyFacetedNavigation, dependencies=["eea.facetednavigation"])
|
|
62
|
+
def __call__(self, *args, **kwargs):
|
|
63
|
+
# Calling self.index() will set cache headers for varnish
|
|
64
|
+
self.index()
|
|
65
|
+
|
|
66
|
+
if self.request:
|
|
67
|
+
kwargs.update(self.request.form)
|
|
68
|
+
self.request.response.setHeader(
|
|
69
|
+
"Content-Type", "application/json; charset=utf-8"
|
|
70
|
+
)
|
|
71
|
+
|
|
72
|
+
cid = kwargs.pop("cid", None)
|
|
73
|
+
if not cid:
|
|
74
|
+
return {}
|
|
75
|
+
|
|
76
|
+
res = self.query(cid, **kwargs)
|
|
77
|
+
return json.dumps(res)
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
""" Errors
|
|
2
|
+
"""
|
|
3
|
+
import logging
|
|
4
|
+
from pprint import pformat
|
|
5
|
+
from zope.component import queryAdapter
|
|
6
|
+
from eea.facetednavigation.interfaces import ICriteria
|
|
7
|
+
from Products.Five.browser import BrowserView
|
|
8
|
+
|
|
9
|
+
logger = logging.getLogger("eea.facetednavigation")
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class FacetedError(BrowserView):
|
|
13
|
+
"""Render an error message when something is wrong with widgets"""
|
|
14
|
+
|
|
15
|
+
def __call__(self, **kwargs):
|
|
16
|
+
error = kwargs.get("error", None)
|
|
17
|
+
res = {"type": getattr(error, "type", ""), "value": getattr(error, "value", "")}
|
|
18
|
+
cid = kwargs.get("cid", "")
|
|
19
|
+
msg = ""
|
|
20
|
+
if cid:
|
|
21
|
+
criteria = queryAdapter(self.context, ICriteria)
|
|
22
|
+
if criteria:
|
|
23
|
+
data = criteria.get(cid)
|
|
24
|
+
if data:
|
|
25
|
+
msg = pformat(data.__dict__)
|
|
26
|
+
|
|
27
|
+
logger.exception("\n%s\n", msg)
|
|
28
|
+
return self.index(error=res)
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
""" Export / Import faceted configuration
|
|
2
|
+
"""
|
|
3
|
+
from eea.facetednavigation import _
|
|
4
|
+
from plone.protect.interfaces import IDisableCSRFProtection
|
|
5
|
+
from Products.GenericSetup.context import SnapshotExportContext
|
|
6
|
+
from Products.GenericSetup.context import SnapshotImportContext
|
|
7
|
+
from Products.GenericSetup.interfaces import IBody
|
|
8
|
+
from Products.statusmessages.interfaces import IStatusMessage
|
|
9
|
+
from zope.component import queryMultiAdapter
|
|
10
|
+
from zope.interface import alsoProvides
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class FacetedExportImport(object):
|
|
14
|
+
"""Faceted view"""
|
|
15
|
+
|
|
16
|
+
def __init__(self, context, request):
|
|
17
|
+
self.context = context
|
|
18
|
+
self.request = request
|
|
19
|
+
# XXX Quick fix until we figure out how to enable CSRF Protection
|
|
20
|
+
alsoProvides(request, IDisableCSRFProtection)
|
|
21
|
+
|
|
22
|
+
def _redirect(self, msg="", to="configure_faceted.html"):
|
|
23
|
+
"""Set status message and redirect"""
|
|
24
|
+
if not to:
|
|
25
|
+
return msg
|
|
26
|
+
|
|
27
|
+
if msg:
|
|
28
|
+
IStatusMessage(self.request).addStatusMessage(str(msg), type="info")
|
|
29
|
+
self.request.response.redirect(to)
|
|
30
|
+
|
|
31
|
+
def _import_xml(self, **kwargs):
|
|
32
|
+
"""Import"""
|
|
33
|
+
upload_file = kwargs.get("import_file", None)
|
|
34
|
+
if getattr(upload_file, "read", None):
|
|
35
|
+
upload_file = upload_file.read()
|
|
36
|
+
xml = upload_file or b""
|
|
37
|
+
if not xml.startswith(b'<?xml version="1.0"'):
|
|
38
|
+
return _("Please provide a valid xml file")
|
|
39
|
+
|
|
40
|
+
environ = SnapshotImportContext(self.context, "utf-8")
|
|
41
|
+
importer = queryMultiAdapter((self.context, environ), IBody)
|
|
42
|
+
if not importer:
|
|
43
|
+
return "No adapter found"
|
|
44
|
+
|
|
45
|
+
try:
|
|
46
|
+
importer.body = xml
|
|
47
|
+
except Exception as err:
|
|
48
|
+
return "ERROR: %s" % err
|
|
49
|
+
else:
|
|
50
|
+
return _("Configuration imported")
|
|
51
|
+
|
|
52
|
+
def import_xml(self, **kwargs):
|
|
53
|
+
"""Import config from xml"""
|
|
54
|
+
msg = self._import_xml(**kwargs)
|
|
55
|
+
return self._redirect(msg, kwargs.get("redirect", "configure_faceted.html"))
|
|
56
|
+
|
|
57
|
+
def _export_xml(self, **kwargs):
|
|
58
|
+
"""Export"""
|
|
59
|
+
environ = SnapshotExportContext(self.context, "utf-8")
|
|
60
|
+
return queryMultiAdapter((self.context, environ), IBody)
|
|
61
|
+
|
|
62
|
+
def export_xml(self, **kwargs):
|
|
63
|
+
"""Export config as xml"""
|
|
64
|
+
exporter = self._export_xml(**kwargs)
|
|
65
|
+
if not exporter:
|
|
66
|
+
return self._redirect(
|
|
67
|
+
"No adapter found", kwargs.get("redirect", "configure_faceted.html")
|
|
68
|
+
)
|
|
69
|
+
|
|
70
|
+
self.request.response.setHeader("content-type", "text/xml; charset=utf-8")
|
|
71
|
+
self.request.response.addHeader(
|
|
72
|
+
"content-disposition",
|
|
73
|
+
"attachment; filename=%s.xml" % (self.context.getId(),),
|
|
74
|
+
)
|
|
75
|
+
return exporter.body
|
|
76
|
+
|
|
77
|
+
def __call__(self, **kwargs):
|
|
78
|
+
"""Export / Import configuration"""
|
|
79
|
+
if self.request:
|
|
80
|
+
kwargs.update(self.request.form)
|
|
81
|
+
if "import_button" in kwargs.keys():
|
|
82
|
+
return self.import_xml(**kwargs)
|
|
83
|
+
if "export_button" in kwargs.keys():
|
|
84
|
+
return self.export_xml(**kwargs)
|
|
85
|
+
self._redirect(_("No action provided"), "configure_faceted.html")
|