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.
Files changed (553) hide show
  1. eea/facetednavigation/README.txt +34 -0
  2. eea/facetednavigation/__init__.py +10 -0
  3. eea/facetednavigation/browser/__init__.py +2 -0
  4. eea/facetednavigation/browser/app/__init__.py +2 -0
  5. eea/facetednavigation/browser/app/catalog.py +43 -0
  6. eea/facetednavigation/browser/app/configure.py +307 -0
  7. eea/facetednavigation/browser/app/counter.py +77 -0
  8. eea/facetednavigation/browser/app/error.py +28 -0
  9. eea/facetednavigation/browser/app/exportimport.py +85 -0
  10. eea/facetednavigation/browser/app/query.py +209 -0
  11. eea/facetednavigation/browser/app/schema.py +39 -0
  12. eea/facetednavigation/browser/app/view.py +169 -0
  13. eea/facetednavigation/browser/configure.zcml +155 -0
  14. eea/facetednavigation/browser/interfaces.py +52 -0
  15. eea/facetednavigation/browser/javascript/edit.js +1198 -0
  16. eea/facetednavigation/browser/javascript/expand.js +107 -0
  17. eea/facetednavigation/browser/javascript/independent.js +25 -0
  18. eea/facetednavigation/browser/javascript/view.js +551 -0
  19. eea/facetednavigation/browser/static/30px.png +0 -0
  20. eea/facetednavigation/browser/static/32px.png +0 -0
  21. eea/facetednavigation/browser/static/README.md +6 -0
  22. eea/facetednavigation/browser/static/ajax-loader-small.gif +0 -0
  23. eea/facetednavigation/browser/static/ajax-loader.gif +0 -0
  24. eea/facetednavigation/browser/static/faceted-edit.css +325 -0
  25. eea/facetednavigation/browser/static/faceted-edit.css.map +1 -0
  26. eea/facetednavigation/browser/static/faceted-edit.min.css +2 -0
  27. eea/facetednavigation/browser/static/faceted-edit.min.css.map +1 -0
  28. eea/facetednavigation/browser/static/faceted-edit.min.js +1 -0
  29. eea/facetednavigation/browser/static/faceted-jquery.css +4117 -0
  30. eea/facetednavigation/browser/static/faceted-jquery.css.map +1 -0
  31. eea/facetednavigation/browser/static/faceted-jquery.min.css +6 -0
  32. eea/facetednavigation/browser/static/faceted-jquery.min.css.map +1 -0
  33. eea/facetednavigation/browser/static/faceted-jquery.min.js +2 -0
  34. eea/facetednavigation/browser/static/faceted-jquery.min.js.LICENSE.txt +263 -0
  35. eea/facetednavigation/browser/static/faceted-view.css +447 -0
  36. eea/facetednavigation/browser/static/faceted-view.css.map +1 -0
  37. eea/facetednavigation/browser/static/faceted-view.min.css +2 -0
  38. eea/facetednavigation/browser/static/faceted-view.min.css.map +1 -0
  39. eea/facetednavigation/browser/static/faceted-view.min.js +1 -0
  40. eea/facetednavigation/browser/static/fonts/titillium/titilliumweb-bold-webfont.eot +0 -0
  41. eea/facetednavigation/browser/static/fonts/titillium/titilliumweb-bold-webfont.svg +2377 -0
  42. eea/facetednavigation/browser/static/fonts/titillium/titilliumweb-bold-webfont.ttf +0 -0
  43. eea/facetednavigation/browser/static/fonts/titillium/titilliumweb-bold-webfont.woff +0 -0
  44. eea/facetednavigation/browser/static/fonts/titillium/titilliumweb-extralight-webfont.eot +0 -0
  45. eea/facetednavigation/browser/static/fonts/titillium/titilliumweb-extralight-webfont.svg +2410 -0
  46. eea/facetednavigation/browser/static/fonts/titillium/titilliumweb-extralight-webfont.ttf +0 -0
  47. eea/facetednavigation/browser/static/fonts/titillium/titilliumweb-extralight-webfont.woff +0 -0
  48. eea/facetednavigation/browser/static/fonts/titillium/titilliumweb-regular-webfont.eot +0 -0
  49. eea/facetednavigation/browser/static/fonts/titillium/titilliumweb-regular-webfont.svg +2725 -0
  50. eea/facetednavigation/browser/static/fonts/titillium/titilliumweb-regular-webfont.ttf +0 -0
  51. eea/facetednavigation/browser/static/fonts/titillium/titilliumweb-regular-webfont.woff +0 -0
  52. eea/facetednavigation/browser/static/hide.png +0 -0
  53. eea/facetednavigation/browser/static/images/ui-icons_444444_256x240.png +0 -0
  54. eea/facetednavigation/browser/static/images/ui-icons_555555_256x240.png +0 -0
  55. eea/facetednavigation/browser/static/images/ui-icons_777620_256x240.png +0 -0
  56. eea/facetednavigation/browser/static/images/ui-icons_777777_256x240.png +0 -0
  57. eea/facetednavigation/browser/static/images/ui-icons_cc0000_256x240.png +0 -0
  58. eea/facetednavigation/browser/static/images/ui-icons_ffffff_256x240.png +0 -0
  59. eea/facetednavigation/browser/static/select2-spinner.gif +0 -0
  60. eea/facetednavigation/browser/static/select2.png +0 -0
  61. eea/facetednavigation/browser/static/select2x2.png +0 -0
  62. eea/facetednavigation/browser/static/show.png +0 -0
  63. eea/facetednavigation/browser/static/throbber.gif +0 -0
  64. eea/facetednavigation/browser/stylesheets/edit.scss +383 -0
  65. eea/facetednavigation/browser/stylesheets/view.scss +126 -0
  66. eea/facetednavigation/browser/template/configure.pt +180 -0
  67. eea/facetednavigation/browser/template/counter.pt +0 -0
  68. eea/facetednavigation/browser/template/default.xml +54 -0
  69. eea/facetednavigation/browser/template/error.pt +15 -0
  70. eea/facetednavigation/browser/template/macros.pt +59 -0
  71. eea/facetednavigation/browser/template/query.pt +14 -0
  72. eea/facetednavigation/browser/template/simple_view.pt +9 -0
  73. eea/facetednavigation/browser/template/view.pt +34 -0
  74. eea/facetednavigation/browser/template/widgets.pt +57 -0
  75. eea/facetednavigation/caching/__init__.py +24 -0
  76. eea/facetednavigation/caching/cache.py +64 -0
  77. eea/facetednavigation/caching/configure.zcml +17 -0
  78. eea/facetednavigation/caching/nocache.py +24 -0
  79. eea/facetednavigation/config.py +6 -0
  80. eea/facetednavigation/configure.zcml +29 -0
  81. eea/facetednavigation/criteria/__init__.py +2 -0
  82. eea/facetednavigation/criteria/configure.zcml +12 -0
  83. eea/facetednavigation/criteria/handler.py +291 -0
  84. eea/facetednavigation/criteria/interfaces.py +7 -0
  85. eea/facetednavigation/criteria/utils.py +11 -0
  86. eea/facetednavigation/data/vocabularies/faceted_sortorder.vdex +115 -0
  87. eea/facetednavigation/docs/browser.txt +294 -0
  88. eea/facetednavigation/docs/counter.txt +76 -0
  89. eea/facetednavigation/docs/criteria.txt +134 -0
  90. eea/facetednavigation/docs/exportimport.txt +544 -0
  91. eea/facetednavigation/docs/facetednavigation.txt +113 -0
  92. eea/facetednavigation/docs/solr.txt +66 -0
  93. eea/facetednavigation/docs/syndication.txt +36 -0
  94. eea/facetednavigation/docs/unicode.txt +224 -0
  95. eea/facetednavigation/docs/versions.txt +175 -0
  96. eea/facetednavigation/docs/vocabularies.txt +69 -0
  97. eea/facetednavigation/docs/widgets.txt +10 -0
  98. eea/facetednavigation/docs/wrapper.txt +87 -0
  99. eea/facetednavigation/events.py +56 -0
  100. eea/facetednavigation/exportimport/__init__.py +2 -0
  101. eea/facetednavigation/exportimport/configure.zcml +27 -0
  102. eea/facetednavigation/exportimport/criteria.py +103 -0
  103. eea/facetednavigation/exportimport/criterion.py +75 -0
  104. eea/facetednavigation/exportimport/faceted.py +35 -0
  105. eea/facetednavigation/indexes/__init__.py +2 -0
  106. eea/facetednavigation/indexes/configure.zcml +8 -0
  107. eea/facetednavigation/indexes/language/__init__.py +2 -0
  108. eea/facetednavigation/indexes/language/adapter.py +77 -0
  109. eea/facetednavigation/indexes/language/configure.zcml +13 -0
  110. eea/facetednavigation/indexes/language/interfaces.py +7 -0
  111. eea/facetednavigation/interfaces.py +109 -0
  112. eea/facetednavigation/layout/__init__.py +2 -0
  113. eea/facetednavigation/layout/configure.zcml +38 -0
  114. eea/facetednavigation/layout/events.py +63 -0
  115. eea/facetednavigation/layout/interfaces.py +21 -0
  116. eea/facetednavigation/layout/layout.py +95 -0
  117. eea/facetednavigation/layout/menu.py +77 -0
  118. eea/facetednavigation/layout/overrides.zcml +13 -0
  119. eea/facetednavigation/locales/bg/LC_MESSAGES/eea.mo +0 -0
  120. eea/facetednavigation/locales/bg/LC_MESSAGES/eea.po +1179 -0
  121. eea/facetednavigation/locales/bg/LC_MESSAGES/plone.mo +0 -0
  122. eea/facetednavigation/locales/bg/LC_MESSAGES/plone.po +37 -0
  123. eea/facetednavigation/locales/ca/LC_MESSAGES/eea.mo +0 -0
  124. eea/facetednavigation/locales/ca/LC_MESSAGES/eea.po +1180 -0
  125. eea/facetednavigation/locales/ca/LC_MESSAGES/plone.mo +0 -0
  126. eea/facetednavigation/locales/ca/LC_MESSAGES/plone.po +38 -0
  127. eea/facetednavigation/locales/cs/LC_MESSAGES/eea.mo +0 -0
  128. eea/facetednavigation/locales/cs/LC_MESSAGES/eea.po +1179 -0
  129. eea/facetednavigation/locales/cs/LC_MESSAGES/plone.mo +0 -0
  130. eea/facetednavigation/locales/cs/LC_MESSAGES/plone.po +37 -0
  131. eea/facetednavigation/locales/da/LC_MESSAGES/eea.mo +0 -0
  132. eea/facetednavigation/locales/da/LC_MESSAGES/eea.po +1179 -0
  133. eea/facetednavigation/locales/da/LC_MESSAGES/plone.mo +0 -0
  134. eea/facetednavigation/locales/da/LC_MESSAGES/plone.po +37 -0
  135. eea/facetednavigation/locales/de/LC_MESSAGES/eea.mo +0 -0
  136. eea/facetednavigation/locales/de/LC_MESSAGES/eea.po +1236 -0
  137. eea/facetednavigation/locales/de/LC_MESSAGES/plone.mo +0 -0
  138. eea/facetednavigation/locales/de/LC_MESSAGES/plone.po +37 -0
  139. eea/facetednavigation/locales/eea.pot +1182 -0
  140. eea/facetednavigation/locales/el/LC_MESSAGES/eea.mo +0 -0
  141. eea/facetednavigation/locales/el/LC_MESSAGES/eea.po +1179 -0
  142. eea/facetednavigation/locales/el/LC_MESSAGES/plone.mo +0 -0
  143. eea/facetednavigation/locales/el/LC_MESSAGES/plone.po +37 -0
  144. eea/facetednavigation/locales/en/LC_MESSAGES/eea.mo +0 -0
  145. eea/facetednavigation/locales/en/LC_MESSAGES/eea.po +1179 -0
  146. eea/facetednavigation/locales/en/LC_MESSAGES/plone.mo +0 -0
  147. eea/facetednavigation/locales/en/LC_MESSAGES/plone.po +37 -0
  148. eea/facetednavigation/locales/es/LC_MESSAGES/eea.mo +0 -0
  149. eea/facetednavigation/locales/es/LC_MESSAGES/eea.po +1247 -0
  150. eea/facetednavigation/locales/es/LC_MESSAGES/plone.mo +0 -0
  151. eea/facetednavigation/locales/es/LC_MESSAGES/plone.po +39 -0
  152. eea/facetednavigation/locales/et/LC_MESSAGES/eea.mo +0 -0
  153. eea/facetednavigation/locales/et/LC_MESSAGES/eea.po +1179 -0
  154. eea/facetednavigation/locales/et/LC_MESSAGES/plone.mo +0 -0
  155. eea/facetednavigation/locales/et/LC_MESSAGES/plone.po +37 -0
  156. eea/facetednavigation/locales/eu/LC_MESSAGES/eea.mo +0 -0
  157. eea/facetednavigation/locales/eu/LC_MESSAGES/eea.po +1247 -0
  158. eea/facetednavigation/locales/eu/LC_MESSAGES/plone.mo +0 -0
  159. eea/facetednavigation/locales/eu/LC_MESSAGES/plone.po +37 -0
  160. eea/facetednavigation/locales/fi/LC_MESSAGES/eea.mo +0 -0
  161. eea/facetednavigation/locales/fi/LC_MESSAGES/eea.po +1179 -0
  162. eea/facetednavigation/locales/fi/LC_MESSAGES/plone.mo +0 -0
  163. eea/facetednavigation/locales/fi/LC_MESSAGES/plone.po +37 -0
  164. eea/facetednavigation/locales/fr/LC_MESSAGES/eea.mo +0 -0
  165. eea/facetednavigation/locales/fr/LC_MESSAGES/eea.po +1247 -0
  166. eea/facetednavigation/locales/fr/LC_MESSAGES/plone.mo +0 -0
  167. eea/facetednavigation/locales/fr/LC_MESSAGES/plone.po +37 -0
  168. eea/facetednavigation/locales/hr/LC_MESSAGES/eea.mo +0 -0
  169. eea/facetednavigation/locales/hr/LC_MESSAGES/eea.po +1182 -0
  170. eea/facetednavigation/locales/hr/LC_MESSAGES/plone.mo +0 -0
  171. eea/facetednavigation/locales/hr/LC_MESSAGES/plone.po +37 -0
  172. eea/facetednavigation/locales/hu/LC_MESSAGES/eea.mo +0 -0
  173. eea/facetednavigation/locales/hu/LC_MESSAGES/eea.po +1179 -0
  174. eea/facetednavigation/locales/hu/LC_MESSAGES/plone.mo +0 -0
  175. eea/facetednavigation/locales/hu/LC_MESSAGES/plone.po +37 -0
  176. eea/facetednavigation/locales/is/LC_MESSAGES/eea.mo +0 -0
  177. eea/facetednavigation/locales/is/LC_MESSAGES/eea.po +1179 -0
  178. eea/facetednavigation/locales/is/LC_MESSAGES/plone.mo +0 -0
  179. eea/facetednavigation/locales/is/LC_MESSAGES/plone.po +37 -0
  180. eea/facetednavigation/locales/it/LC_MESSAGES/eea.mo +0 -0
  181. eea/facetednavigation/locales/it/LC_MESSAGES/eea.po +1242 -0
  182. eea/facetednavigation/locales/it/LC_MESSAGES/plone.mo +0 -0
  183. eea/facetednavigation/locales/it/LC_MESSAGES/plone.po +37 -0
  184. eea/facetednavigation/locales/kl/LC_MESSAGES/eea.mo +0 -0
  185. eea/facetednavigation/locales/kl/LC_MESSAGES/eea.po +1179 -0
  186. eea/facetednavigation/locales/kl/LC_MESSAGES/plone.mo +0 -0
  187. eea/facetednavigation/locales/kl/LC_MESSAGES/plone.po +37 -0
  188. eea/facetednavigation/locales/lt/LC_MESSAGES/eea.mo +0 -0
  189. eea/facetednavigation/locales/lt/LC_MESSAGES/eea.po +1179 -0
  190. eea/facetednavigation/locales/lt/LC_MESSAGES/plone.mo +0 -0
  191. eea/facetednavigation/locales/lt/LC_MESSAGES/plone.po +37 -0
  192. eea/facetednavigation/locales/lv/LC_MESSAGES/eea.mo +0 -0
  193. eea/facetednavigation/locales/lv/LC_MESSAGES/eea.po +1179 -0
  194. eea/facetednavigation/locales/lv/LC_MESSAGES/plone.mo +0 -0
  195. eea/facetednavigation/locales/lv/LC_MESSAGES/plone.po +37 -0
  196. eea/facetednavigation/locales/mt/LC_MESSAGES/eea.mo +0 -0
  197. eea/facetednavigation/locales/mt/LC_MESSAGES/eea.po +1179 -0
  198. eea/facetednavigation/locales/mt/LC_MESSAGES/plone.mo +0 -0
  199. eea/facetednavigation/locales/mt/LC_MESSAGES/plone.po +37 -0
  200. eea/facetednavigation/locales/nl/LC_MESSAGES/eea.mo +0 -0
  201. eea/facetednavigation/locales/nl/LC_MESSAGES/eea.po +1179 -0
  202. eea/facetednavigation/locales/nl/LC_MESSAGES/plone.mo +0 -0
  203. eea/facetednavigation/locales/nl/LC_MESSAGES/plone.po +37 -0
  204. eea/facetednavigation/locales/no/LC_MESSAGES/eea.mo +0 -0
  205. eea/facetednavigation/locales/no/LC_MESSAGES/eea.po +1179 -0
  206. eea/facetednavigation/locales/no/LC_MESSAGES/plone.mo +0 -0
  207. eea/facetednavigation/locales/no/LC_MESSAGES/plone.po +37 -0
  208. eea/facetednavigation/locales/pl/LC_MESSAGES/eea.mo +0 -0
  209. eea/facetednavigation/locales/pl/LC_MESSAGES/eea.po +1242 -0
  210. eea/facetednavigation/locales/pl/LC_MESSAGES/plone.mo +0 -0
  211. eea/facetednavigation/locales/pl/LC_MESSAGES/plone.po +37 -0
  212. eea/facetednavigation/locales/plone-manual.pot +38 -0
  213. eea/facetednavigation/locales/pt/LC_MESSAGES/eea.mo +0 -0
  214. eea/facetednavigation/locales/pt/LC_MESSAGES/eea.po +1179 -0
  215. eea/facetednavigation/locales/pt/LC_MESSAGES/plone.mo +0 -0
  216. eea/facetednavigation/locales/pt/LC_MESSAGES/plone.po +37 -0
  217. eea/facetednavigation/locales/pt_BR/LC_MESSAGES/eea.mo +0 -0
  218. eea/facetednavigation/locales/pt_BR/LC_MESSAGES/eea.po +1180 -0
  219. eea/facetednavigation/locales/pt_BR/LC_MESSAGES/plone.mo +0 -0
  220. eea/facetednavigation/locales/pt_BR/LC_MESSAGES/plone.po +37 -0
  221. eea/facetednavigation/locales/ro/LC_MESSAGES/eea.mo +0 -0
  222. eea/facetednavigation/locales/ro/LC_MESSAGES/eea.po +1244 -0
  223. eea/facetednavigation/locales/ro/LC_MESSAGES/plone.mo +0 -0
  224. eea/facetednavigation/locales/ro/LC_MESSAGES/plone.po +37 -0
  225. eea/facetednavigation/locales/ru/LC_MESSAGES/eea.mo +0 -0
  226. eea/facetednavigation/locales/ru/LC_MESSAGES/eea.po +1179 -0
  227. eea/facetednavigation/locales/ru/LC_MESSAGES/plone.mo +0 -0
  228. eea/facetednavigation/locales/ru/LC_MESSAGES/plone.po +37 -0
  229. eea/facetednavigation/locales/sk/LC_MESSAGES/eea.mo +0 -0
  230. eea/facetednavigation/locales/sk/LC_MESSAGES/eea.po +1179 -0
  231. eea/facetednavigation/locales/sk/LC_MESSAGES/plone.mo +0 -0
  232. eea/facetednavigation/locales/sk/LC_MESSAGES/plone.po +37 -0
  233. eea/facetednavigation/locales/sl/LC_MESSAGES/eea.mo +0 -0
  234. eea/facetednavigation/locales/sl/LC_MESSAGES/eea.po +1179 -0
  235. eea/facetednavigation/locales/sl/LC_MESSAGES/plone.mo +0 -0
  236. eea/facetednavigation/locales/sl/LC_MESSAGES/plone.po +37 -0
  237. eea/facetednavigation/locales/sv/LC_MESSAGES/eea.mo +0 -0
  238. eea/facetednavigation/locales/sv/LC_MESSAGES/eea.po +1179 -0
  239. eea/facetednavigation/locales/sv/LC_MESSAGES/plone.mo +0 -0
  240. eea/facetednavigation/locales/sv/LC_MESSAGES/plone.po +37 -0
  241. eea/facetednavigation/locales/tr/LC_MESSAGES/eea.mo +0 -0
  242. eea/facetednavigation/locales/tr/LC_MESSAGES/eea.po +1179 -0
  243. eea/facetednavigation/locales/tr/LC_MESSAGES/plone.mo +0 -0
  244. eea/facetednavigation/locales/tr/LC_MESSAGES/plone.po +37 -0
  245. eea/facetednavigation/locales/update.sh +6 -0
  246. eea/facetednavigation/locales/zh_TW/LC_MESSAGES/eea.mo +0 -0
  247. eea/facetednavigation/locales/zh_TW/LC_MESSAGES/eea.po +1243 -0
  248. eea/facetednavigation/locales/zh_TW/LC_MESSAGES/plone.mo +0 -0
  249. eea/facetednavigation/locales/zh_TW/LC_MESSAGES/plone.po +37 -0
  250. eea/facetednavigation/meta.zcml +22 -0
  251. eea/facetednavigation/overrides.zcml +11 -0
  252. eea/facetednavigation/permissions.zcml +12 -0
  253. eea/facetednavigation/plonex.py +36 -0
  254. eea/facetednavigation/profiles/default/actions.xml +67 -0
  255. eea/facetednavigation/profiles/default/eea.facetednavigation.txt +0 -0
  256. eea/facetednavigation/profiles/default/metadata.xml +4 -0
  257. eea/facetednavigation/profiles/default/registry.xml +48 -0
  258. eea/facetednavigation/profiles/default/rolemap.xml +11 -0
  259. eea/facetednavigation/profiles/uninstall/actions.xml +11 -0
  260. eea/facetednavigation/profiles/uninstall/eea.facetednavigation.txt +0 -0
  261. eea/facetednavigation/profiles/uninstall/registry.xml +8 -0
  262. eea/facetednavigation/profiles.zcml +42 -0
  263. eea/facetednavigation/search/__init__.py +2 -0
  264. eea/facetednavigation/search/catalog.py +84 -0
  265. eea/facetednavigation/search/configure.zcml +8 -0
  266. eea/facetednavigation/search/interfaces.py +10 -0
  267. eea/facetednavigation/settings/__init__.py +2 -0
  268. eea/facetednavigation/settings/configure.zcml +34 -0
  269. eea/facetednavigation/settings/interfaces.py +52 -0
  270. eea/facetednavigation/settings/menu.py +170 -0
  271. eea/facetednavigation/setuphandlers.py +92 -0
  272. eea/facetednavigation/subtypes/__init__.py +2 -0
  273. eea/facetednavigation/subtypes/configure.zcml +61 -0
  274. eea/facetednavigation/subtypes/interfaces.py +45 -0
  275. eea/facetednavigation/subtypes/subtyper.py +130 -0
  276. eea/facetednavigation/subtypes/wrapper.py +39 -0
  277. eea/facetednavigation/syndication/__init__.py +2 -0
  278. eea/facetednavigation/syndication/configure.zcml +13 -0
  279. eea/facetednavigation/syndication/feed.py +19 -0
  280. eea/facetednavigation/tests/__init__.py +2 -0
  281. eea/facetednavigation/tests/autocomplete.py +33 -0
  282. eea/facetednavigation/tests/autocomplete.zcml +15 -0
  283. eea/facetednavigation/tests/base.py +49 -0
  284. eea/facetednavigation/tests/configure.zcml +17 -0
  285. eea/facetednavigation/tests/data/criteria_with_purge_false.xml +15 -0
  286. eea/facetednavigation/tests/data/criteria_with_purge_true.xml +15 -0
  287. eea/facetednavigation/tests/data/criterion_with_purge_false.xml +15 -0
  288. eea/facetednavigation/tests/data/criterion_with_purge_true.xml +15 -0
  289. eea/facetednavigation/tests/data/exportimport.xml +31 -0
  290. eea/facetednavigation/tests/profiles/testing/types/Document.xml +6 -0
  291. eea/facetednavigation/tests/profiles/testing/types.xml +4 -0
  292. eea/facetednavigation/tests/test_bundles.py +42 -0
  293. eea/facetednavigation/tests/test_doctests.py +139 -0
  294. eea/facetednavigation/tests/utils.py +39 -0
  295. eea/facetednavigation/upgrades/__init__.py +2 -0
  296. eea/facetednavigation/upgrades/configure.zcml +28 -0
  297. eea/facetednavigation/upgrades/evolve165.py +13 -0
  298. eea/facetednavigation/utils.py +66 -0
  299. eea/facetednavigation/version.txt +1 -0
  300. eea/facetednavigation/versions/__init__.py +2 -0
  301. eea/facetednavigation/versions/browser.py +78 -0
  302. eea/facetednavigation/versions/configure.zcml +20 -0
  303. eea/facetednavigation/versions/events.py +16 -0
  304. eea/facetednavigation/versions/interfaces.py +15 -0
  305. eea/facetednavigation/views/__init__.py +2 -0
  306. eea/facetednavigation/views/configure.zcml +41 -0
  307. eea/facetednavigation/views/example/__init__.py +2 -0
  308. eea/facetednavigation/views/example/configure.zcml +24 -0
  309. eea/facetednavigation/views/example/summary.pt +74 -0
  310. eea/facetednavigation/views/example/summary.py +20 -0
  311. eea/facetednavigation/views/interfaces.py +7 -0
  312. eea/facetednavigation/views/meta.py +63 -0
  313. eea/facetednavigation/views/preview-item.pt +10 -0
  314. eea/facetednavigation/views/preview-items.pt +38 -0
  315. eea/facetednavigation/views/preview.py +74 -0
  316. eea/facetednavigation/vocabularies/__init__.py +2 -0
  317. eea/facetednavigation/vocabularies/autocomplete.py +44 -0
  318. eea/facetednavigation/vocabularies/catalog.py +204 -0
  319. eea/facetednavigation/vocabularies/configure.zcml +101 -0
  320. eea/facetednavigation/vocabularies/faceted.py +62 -0
  321. eea/facetednavigation/vocabularies/portal.py +55 -0
  322. eea/facetednavigation/vocabularies/position.py +23 -0
  323. eea/facetednavigation/vocabularies/section.py +19 -0
  324. eea/facetednavigation/vocabularies/simple.py +40 -0
  325. eea/facetednavigation/vocabularies/types.py +23 -0
  326. eea/facetednavigation/vocabularies/utils.py +10 -0
  327. eea/facetednavigation/widgets/__init__.py +12 -0
  328. eea/facetednavigation/widgets/alphabetic/__init__.py +2 -0
  329. eea/facetednavigation/widgets/alphabetic/adapters.py +48 -0
  330. eea/facetednavigation/widgets/alphabetic/alphabets.py +1042 -0
  331. eea/facetednavigation/widgets/alphabetic/configure.zcml +19 -0
  332. eea/facetednavigation/widgets/alphabetic/edit.js +80 -0
  333. eea/facetednavigation/widgets/alphabetic/edit.scss +0 -0
  334. eea/facetednavigation/widgets/alphabetic/interfaces.py +44 -0
  335. eea/facetednavigation/widgets/alphabetic/tests.py +32 -0
  336. eea/facetednavigation/widgets/alphabetic/view.js +229 -0
  337. eea/facetednavigation/widgets/alphabetic/view.scss +47 -0
  338. eea/facetednavigation/widgets/alphabetic/widget.pt +45 -0
  339. eea/facetednavigation/widgets/alphabetic/widget.py +64 -0
  340. eea/facetednavigation/widgets/alphabetic/widget.txt +104 -0
  341. eea/facetednavigation/widgets/autocomplete/__init__.py +2 -0
  342. eea/facetednavigation/widgets/autocomplete/configure.zcml +20 -0
  343. eea/facetednavigation/widgets/autocomplete/edit.js +52 -0
  344. eea/facetednavigation/widgets/autocomplete/edit.scss +0 -0
  345. eea/facetednavigation/widgets/autocomplete/interfaces.py +77 -0
  346. eea/facetednavigation/widgets/autocomplete/tests.py +32 -0
  347. eea/facetednavigation/widgets/autocomplete/view.js +245 -0
  348. eea/facetednavigation/widgets/autocomplete/view.scss +52 -0
  349. eea/facetednavigation/widgets/autocomplete/widget.pt +63 -0
  350. eea/facetednavigation/widgets/autocomplete/widget.py +117 -0
  351. eea/facetednavigation/widgets/autocomplete/widget.txt +142 -0
  352. eea/facetednavigation/widgets/boolean/__init__.py +2 -0
  353. eea/facetednavigation/widgets/boolean/configure.zcml +12 -0
  354. eea/facetednavigation/widgets/boolean/interfaces.py +48 -0
  355. eea/facetednavigation/widgets/boolean/widget.pt +46 -0
  356. eea/facetednavigation/widgets/boolean/widget.py +56 -0
  357. eea/facetednavigation/widgets/checkbox/__init__.py +2 -0
  358. eea/facetednavigation/widgets/checkbox/configure.zcml +12 -0
  359. eea/facetednavigation/widgets/checkbox/edit.js +115 -0
  360. eea/facetednavigation/widgets/checkbox/edit.scss +0 -0
  361. eea/facetednavigation/widgets/checkbox/interfaces.py +104 -0
  362. eea/facetednavigation/widgets/checkbox/view.js +319 -0
  363. eea/facetednavigation/widgets/checkbox/view.scss +59 -0
  364. eea/facetednavigation/widgets/checkbox/widget.pt +75 -0
  365. eea/facetednavigation/widgets/checkbox/widget.py +102 -0
  366. eea/facetednavigation/widgets/configure.zcml +30 -0
  367. eea/facetednavigation/widgets/criteria/__init__.py +2 -0
  368. eea/facetednavigation/widgets/criteria/configure.zcml +12 -0
  369. eea/facetednavigation/widgets/criteria/edit.js +0 -0
  370. eea/facetednavigation/widgets/criteria/edit.scss +0 -0
  371. eea/facetednavigation/widgets/criteria/interfaces.py +35 -0
  372. eea/facetednavigation/widgets/criteria/view.js +123 -0
  373. eea/facetednavigation/widgets/criteria/view.scss +61 -0
  374. eea/facetednavigation/widgets/criteria/widget.pt +36 -0
  375. eea/facetednavigation/widgets/criteria/widget.py +17 -0
  376. eea/facetednavigation/widgets/date/__init__.py +2 -0
  377. eea/facetednavigation/widgets/date/configure.zcml +12 -0
  378. eea/facetednavigation/widgets/date/edit.js +89 -0
  379. eea/facetednavigation/widgets/date/edit.scss +0 -0
  380. eea/facetednavigation/widgets/date/interfaces.py +36 -0
  381. eea/facetednavigation/widgets/date/tests.py +32 -0
  382. eea/facetednavigation/widgets/date/view.js +195 -0
  383. eea/facetednavigation/widgets/date/view.scss +10 -0
  384. eea/facetednavigation/widgets/date/widget.pt +40 -0
  385. eea/facetednavigation/widgets/date/widget.py +166 -0
  386. eea/facetednavigation/widgets/date/widget.txt +225 -0
  387. eea/facetednavigation/widgets/daterange/__init__.py +2 -0
  388. eea/facetednavigation/widgets/daterange/configure.zcml +12 -0
  389. eea/facetednavigation/widgets/daterange/edit.js +114 -0
  390. eea/facetednavigation/widgets/daterange/edit.scss +0 -0
  391. eea/facetednavigation/widgets/daterange/interfaces.py +102 -0
  392. eea/facetednavigation/widgets/daterange/tests.py +32 -0
  393. eea/facetednavigation/widgets/daterange/utils.py +117 -0
  394. eea/facetednavigation/widgets/daterange/view.js +308 -0
  395. eea/facetednavigation/widgets/daterange/view.scss +14 -0
  396. eea/facetednavigation/widgets/daterange/widget.pt +61 -0
  397. eea/facetednavigation/widgets/daterange/widget.py +184 -0
  398. eea/facetednavigation/widgets/daterange/widget.txt +280 -0
  399. eea/facetednavigation/widgets/debug/__init__.py +2 -0
  400. eea/facetednavigation/widgets/debug/browser.py +161 -0
  401. eea/facetednavigation/widgets/debug/configure.zcml +58 -0
  402. eea/facetednavigation/widgets/debug/edit.js +104 -0
  403. eea/facetednavigation/widgets/debug/edit.scss +0 -0
  404. eea/facetednavigation/widgets/debug/interfaces.py +35 -0
  405. eea/facetednavigation/widgets/debug/view.js +109 -0
  406. eea/facetednavigation/widgets/debug/view.scss +6 -0
  407. eea/facetednavigation/widgets/debug/vocabulary.py +21 -0
  408. eea/facetednavigation/widgets/debug/widget.pt +43 -0
  409. eea/facetednavigation/widgets/debug/widget.py +17 -0
  410. eea/facetednavigation/widgets/etag/__init__.py +2 -0
  411. eea/facetednavigation/widgets/etag/configure.zcml +12 -0
  412. eea/facetednavigation/widgets/etag/edit.js +51 -0
  413. eea/facetednavigation/widgets/etag/edit.scss +0 -0
  414. eea/facetednavigation/widgets/etag/interfaces.py +52 -0
  415. eea/facetednavigation/widgets/etag/view.js +0 -0
  416. eea/facetednavigation/widgets/etag/view.scss +0 -0
  417. eea/facetednavigation/widgets/etag/widget.pt +25 -0
  418. eea/facetednavigation/widgets/etag/widget.py +16 -0
  419. eea/facetednavigation/widgets/interfaces.py +156 -0
  420. eea/facetednavigation/widgets/multiselect/__init__.py +2 -0
  421. eea/facetednavigation/widgets/multiselect/configure.zcml +12 -0
  422. eea/facetednavigation/widgets/multiselect/edit.js +131 -0
  423. eea/facetednavigation/widgets/multiselect/edit.scss +0 -0
  424. eea/facetednavigation/widgets/multiselect/interfaces.py +120 -0
  425. eea/facetednavigation/widgets/multiselect/view.js +383 -0
  426. eea/facetednavigation/widgets/multiselect/view.scss +65 -0
  427. eea/facetednavigation/widgets/multiselect/widget.pt +73 -0
  428. eea/facetednavigation/widgets/multiselect/widget.py +107 -0
  429. eea/facetednavigation/widgets/path/__init__.py +2 -0
  430. eea/facetednavigation/widgets/path/configure.zcml +28 -0
  431. eea/facetednavigation/widgets/path/edit.js +63 -0
  432. eea/facetednavigation/widgets/path/edit.scss +0 -0
  433. eea/facetednavigation/widgets/path/interfaces.py +67 -0
  434. eea/facetednavigation/widgets/path/tree.js +99 -0
  435. eea/facetednavigation/widgets/path/tree.py +171 -0
  436. eea/facetednavigation/widgets/path/view.js +158 -0
  437. eea/facetednavigation/widgets/path/view.scss +16 -0
  438. eea/facetednavigation/widgets/path/widget.pt +29 -0
  439. eea/facetednavigation/widgets/path/widget.py +134 -0
  440. eea/facetednavigation/widgets/portlet/__init__.py +2 -0
  441. eea/facetednavigation/widgets/portlet/configure.zcml +12 -0
  442. eea/facetednavigation/widgets/portlet/edit.js +0 -0
  443. eea/facetednavigation/widgets/portlet/edit.scss +0 -0
  444. eea/facetednavigation/widgets/portlet/interfaces.py +34 -0
  445. eea/facetednavigation/widgets/portlet/view.js +23 -0
  446. eea/facetednavigation/widgets/portlet/view.scss +6 -0
  447. eea/facetednavigation/widgets/portlet/widget.pt +20 -0
  448. eea/facetednavigation/widgets/portlet/widget.py +46 -0
  449. eea/facetednavigation/widgets/radio/__init__.py +2 -0
  450. eea/facetednavigation/widgets/radio/configure.zcml +12 -0
  451. eea/facetednavigation/widgets/radio/edit.js +76 -0
  452. eea/facetednavigation/widgets/radio/edit.scss +0 -0
  453. eea/facetednavigation/widgets/radio/interfaces.py +76 -0
  454. eea/facetednavigation/widgets/radio/view.js +262 -0
  455. eea/facetednavigation/widgets/radio/view.scss +11 -0
  456. eea/facetednavigation/widgets/radio/widget.pt +71 -0
  457. eea/facetednavigation/widgets/radio/widget.py +53 -0
  458. eea/facetednavigation/widgets/range/__init__.py +2 -0
  459. eea/facetednavigation/widgets/range/configure.zcml +12 -0
  460. eea/facetednavigation/widgets/range/edit.js +66 -0
  461. eea/facetednavigation/widgets/range/edit.scss +0 -0
  462. eea/facetednavigation/widgets/range/interfaces.py +78 -0
  463. eea/facetednavigation/widgets/range/tests.py +32 -0
  464. eea/facetednavigation/widgets/range/view.js +176 -0
  465. eea/facetednavigation/widgets/range/view.scss +14 -0
  466. eea/facetednavigation/widgets/range/widget.pt +50 -0
  467. eea/facetednavigation/widgets/range/widget.py +74 -0
  468. eea/facetednavigation/widgets/range/widget.txt +153 -0
  469. eea/facetednavigation/widgets/resultsfilter/__init__.py +2 -0
  470. eea/facetednavigation/widgets/resultsfilter/adapters.py +18 -0
  471. eea/facetednavigation/widgets/resultsfilter/configure.zcml +19 -0
  472. eea/facetednavigation/widgets/resultsfilter/edit.js +54 -0
  473. eea/facetednavigation/widgets/resultsfilter/edit.scss +0 -0
  474. eea/facetednavigation/widgets/resultsfilter/interfaces.py +41 -0
  475. eea/facetednavigation/widgets/resultsfilter/tests.py +32 -0
  476. eea/facetednavigation/widgets/resultsfilter/view.js +0 -0
  477. eea/facetednavigation/widgets/resultsfilter/view.scss +0 -0
  478. eea/facetednavigation/widgets/resultsfilter/widget.pt +24 -0
  479. eea/facetednavigation/widgets/resultsfilter/widget.py +94 -0
  480. eea/facetednavigation/widgets/resultsfilter/widget.txt +66 -0
  481. eea/facetednavigation/widgets/resultsperpage/__init__.py +2 -0
  482. eea/facetednavigation/widgets/resultsperpage/configure.zcml +12 -0
  483. eea/facetednavigation/widgets/resultsperpage/edit.js +47 -0
  484. eea/facetednavigation/widgets/resultsperpage/edit.scss +0 -0
  485. eea/facetednavigation/widgets/resultsperpage/interfaces.py +65 -0
  486. eea/facetednavigation/widgets/resultsperpage/view.js +159 -0
  487. eea/facetednavigation/widgets/resultsperpage/view.scss +5 -0
  488. eea/facetednavigation/widgets/resultsperpage/widget.pt +45 -0
  489. eea/facetednavigation/widgets/resultsperpage/widget.py +71 -0
  490. eea/facetednavigation/widgets/schema.pt +36 -0
  491. eea/facetednavigation/widgets/schema.py +31 -0
  492. eea/facetednavigation/widgets/select/__init__.py +2 -0
  493. eea/facetednavigation/widgets/select/configure.zcml +12 -0
  494. eea/facetednavigation/widgets/select/edit.js +63 -0
  495. eea/facetednavigation/widgets/select/edit.scss +0 -0
  496. eea/facetednavigation/widgets/select/interfaces.py +68 -0
  497. eea/facetednavigation/widgets/select/view.js +239 -0
  498. eea/facetednavigation/widgets/select/view.scss +24 -0
  499. eea/facetednavigation/widgets/select/widget.pt +59 -0
  500. eea/facetednavigation/widgets/select/widget.py +44 -0
  501. eea/facetednavigation/widgets/sorting/__init__.py +2 -0
  502. eea/facetednavigation/widgets/sorting/configure.zcml +12 -0
  503. eea/facetednavigation/widgets/sorting/edit.js +55 -0
  504. eea/facetednavigation/widgets/sorting/edit.scss +0 -0
  505. eea/facetednavigation/widgets/sorting/interfaces.py +35 -0
  506. eea/facetednavigation/widgets/sorting/view.js +213 -0
  507. eea/facetednavigation/widgets/sorting/view.scss +9 -0
  508. eea/facetednavigation/widgets/sorting/widget.pt +58 -0
  509. eea/facetednavigation/widgets/sorting/widget.py +80 -0
  510. eea/facetednavigation/widgets/storage.py +65 -0
  511. eea/facetednavigation/widgets/tagscloud/__init__.py +2 -0
  512. eea/facetednavigation/widgets/tagscloud/configure.zcml +20 -0
  513. eea/facetednavigation/widgets/tagscloud/counter.pt +0 -0
  514. eea/facetednavigation/widgets/tagscloud/counter.py +79 -0
  515. eea/facetednavigation/widgets/tagscloud/edit.js +150 -0
  516. eea/facetednavigation/widgets/tagscloud/edit.scss +0 -0
  517. eea/facetednavigation/widgets/tagscloud/interfaces.py +154 -0
  518. eea/facetednavigation/widgets/tagscloud/tagcloud.js +210 -0
  519. eea/facetednavigation/widgets/tagscloud/view.js +301 -0
  520. eea/facetednavigation/widgets/tagscloud/view.scss +33 -0
  521. eea/facetednavigation/widgets/tagscloud/widget.pt +65 -0
  522. eea/facetednavigation/widgets/tagscloud/widget.py +100 -0
  523. eea/facetednavigation/widgets/tal/__init__.py +2 -0
  524. eea/facetednavigation/widgets/tal/configure.zcml +12 -0
  525. eea/facetednavigation/widgets/tal/edit.js +54 -0
  526. eea/facetednavigation/widgets/tal/edit.scss +0 -0
  527. eea/facetednavigation/widgets/tal/interfaces.py +42 -0
  528. eea/facetednavigation/widgets/tal/tests.py +32 -0
  529. eea/facetednavigation/widgets/tal/view.js +0 -0
  530. eea/facetednavigation/widgets/tal/view.scss +0 -0
  531. eea/facetednavigation/widgets/tal/widget.pt +24 -0
  532. eea/facetednavigation/widgets/tal/widget.py +118 -0
  533. eea/facetednavigation/widgets/tal/widget.txt +216 -0
  534. eea/facetednavigation/widgets/text/__init__.py +2 -0
  535. eea/facetednavigation/widgets/text/configure.zcml +12 -0
  536. eea/facetednavigation/widgets/text/edit.js +52 -0
  537. eea/facetednavigation/widgets/text/edit.scss +0 -0
  538. eea/facetednavigation/widgets/text/interfaces.py +64 -0
  539. eea/facetednavigation/widgets/text/tests.py +32 -0
  540. eea/facetednavigation/widgets/text/view.js +190 -0
  541. eea/facetednavigation/widgets/text/view.scss +15 -0
  542. eea/facetednavigation/widgets/text/widget.pt +53 -0
  543. eea/facetednavigation/widgets/text/widget.py +77 -0
  544. eea/facetednavigation/widgets/text/widget.txt +153 -0
  545. eea/facetednavigation/widgets/widget.py +386 -0
  546. eea/facetednavigation/widgets/widgets.py +127 -0
  547. eea.facetednavigation-16.5-py3.14-nspkg.pth +1 -0
  548. eea_facetednavigation-16.5.dist-info/METADATA +1617 -0
  549. eea_facetednavigation-16.5.dist-info/RECORD +553 -0
  550. eea_facetednavigation-16.5.dist-info/WHEEL +5 -0
  551. eea_facetednavigation-16.5.dist-info/entry_points.txt +2 -0
  552. eea_facetednavigation-16.5.dist-info/namespace_packages.txt +1 -0
  553. eea_facetednavigation-16.5.dist-info/top_level.txt +1 -0
@@ -0,0 +1,386 @@
1
+ """ Abstract widgets
2
+ """
3
+ from eea.facetednavigation.interfaces import IFacetedCatalog
4
+ from eea.facetednavigation.interfaces import ILanguageWidgetAdapter
5
+ from eea.facetednavigation.plonex import HAVE_SOLR
6
+ from eea.facetednavigation.plonex import ISolrSearch
7
+ from eea.facetednavigation.plonex import SolrConnectionException
8
+ from eea.facetednavigation.plonex import SolrInactiveException
9
+ from eea.facetednavigation.widgets.interfaces import CountableSchemata
10
+ from eea.facetednavigation.widgets.interfaces import DefaultSchemata
11
+ from eea.facetednavigation.widgets.interfaces import IWidget
12
+ from eea.facetednavigation.widgets.interfaces import LayoutSchemata
13
+ from plone.i18n.normalizer import urlnormalizer as normalizer
14
+ from Products.CMFCore.utils import getToolByName
15
+ from Products.CMFPlone.utils import safe_unicode
16
+ from Products.CMFPlone.utils import safeToInt
17
+ from z3c.form.form import Form
18
+ from z3c.form.group import GroupForm
19
+ from z3c.form.interfaces import IGroup
20
+ from zope import interface
21
+ from zope.component import queryMultiAdapter
22
+ from zope.component import queryUtility
23
+ from zope.i18n import translate
24
+ from zope.i18nmessageid.message import Message
25
+ from zope.schema.interfaces import IVocabularyFactory
26
+ from ZTUtils.Lazy import LazyMap
27
+
28
+ import logging
29
+ import re
30
+
31
+
32
+ logger = logging.getLogger("eea.facetednavigation")
33
+
34
+
35
+ def lowercase(value):
36
+ try:
37
+ return value[1].lower()
38
+ except AttributeError:
39
+ return value[1]
40
+
41
+
42
+ #
43
+ # Faceted Widget
44
+ #
45
+ @interface.implementer(IWidget)
46
+ class Widget(GroupForm, Form):
47
+ """All faceted widgets should inherit from this class"""
48
+
49
+ # z3c.form
50
+ groups = (DefaultSchemata, LayoutSchemata)
51
+
52
+ # Faceted Widget properties
53
+ widget_type = "abstract"
54
+ widget_label = "Abstract"
55
+
56
+ def __init__(self, context, request, data=None):
57
+ self.context = context
58
+ self.request = request
59
+ self.request.debug = False
60
+ self.data = data
61
+
62
+ @property
63
+ def prefix(self):
64
+ """Form prefix"""
65
+ cid = self.data.getId()
66
+ return cid
67
+
68
+ def getContent(self):
69
+ """Content"""
70
+ return self.data
71
+
72
+ def update(self):
73
+ """Update"""
74
+ self.updateWidgets(prefix=self.prefix)
75
+ groups = []
76
+ for groupClass in self.groups:
77
+ if IGroup.providedBy(groupClass):
78
+ group = groupClass
79
+ else:
80
+ group = groupClass(self.data, self.request, self)
81
+ group.updateWidgets(prefix=self.prefix)
82
+ groups.append(group)
83
+ self.groups = tuple(groups)
84
+
85
+ @property
86
+ def template(self):
87
+ """Widget template"""
88
+ return self.index()
89
+
90
+ @property
91
+ def css_class(self):
92
+ """Widget specific css class"""
93
+ css_type = self.widget_type
94
+ css_title = normalizer.normalize(self.data.title)
95
+ return "faceted-{0}-widget section-{1}{2}".format(
96
+ css_type, css_title, self.custom_css
97
+ )
98
+
99
+ @property
100
+ def hidden(self):
101
+ """Widget hidden?"""
102
+ return self.data.hidden
103
+
104
+ @property
105
+ def custom_css(self):
106
+ if self.data.custom_css:
107
+ return " {}".format(self.data.custom_css)
108
+ return ""
109
+
110
+ @property
111
+ def default(self):
112
+ """Get default values"""
113
+ # Language widget has custom behaviour so be sure you keep
114
+ # this in your widget
115
+ index = self.data.get("index", None)
116
+ if index == "Language":
117
+ language_widget = queryMultiAdapter(
118
+ (self, self.context), ILanguageWidgetAdapter
119
+ )
120
+ if language_widget:
121
+ return language_widget.default
122
+ # Take value from request parameter, for example ?SearchableText=test.
123
+ from_request = self.request.form.pop(index, None)
124
+ if from_request is not None:
125
+ return from_request
126
+ return self.data.get("default", None)
127
+
128
+ def query(self, form):
129
+ """Get value from form and return a catalog dict query"""
130
+ return {}
131
+
132
+ def translate(self, message):
133
+ """Use zope.i18n to translate message"""
134
+ if not message:
135
+ return ""
136
+
137
+ if isinstance(message, Message):
138
+ # message is an i18n message
139
+ return translate(message, context=self.request)
140
+
141
+ # message is a simple msgid
142
+ for domain in ["eea", "plone"]:
143
+ if isinstance(message, bytes):
144
+ try:
145
+ message = message.decode("utf-8")
146
+ except Exception as err:
147
+ logger.exception(err)
148
+ continue
149
+
150
+ value = translate(message, domain=domain, context=self.request)
151
+ if value != message:
152
+ return value
153
+ return message
154
+
155
+ def cleanup(self, string):
156
+ """Quote string"""
157
+ safe = re.compile(r"[^_A-Za-z0-9\-]")
158
+ return safe.sub("-", string)
159
+
160
+ def word_break(self, text="", insert="<wbr />", nchars=15):
161
+ """Insert a string (insert) every space or if a word length is bigger
162
+ than given chars, every ${chars} characters.
163
+
164
+ Example:
165
+ >>> text = 'this is a bigwordwith_and-and.jpg'
166
+ >>> print word_break(text, nchars=10)
167
+ this is a bigwordwit<wbr />h_and-and.<wbr />jpg
168
+ """
169
+ list_text = text.split(" ")
170
+ res = []
171
+ for word in list_text:
172
+ word = [word[i : i + nchars] for i in range(0, len(word), nchars)]
173
+ word = insert.join(word)
174
+ res.append(word)
175
+ return " ".join(res)
176
+
177
+ def catalog_vocabulary(self):
178
+ """Get vocabulary from catalog"""
179
+ catalog = self.data.get("catalog", "portal_catalog")
180
+ ctool = getToolByName(self.context, catalog)
181
+ if not ctool:
182
+ return []
183
+
184
+ index = self.data.get("index", None)
185
+ if not index:
186
+ return []
187
+
188
+ index = ctool.Indexes.get(index, None)
189
+ if not index:
190
+ return []
191
+
192
+ res = []
193
+ for val in index.uniqueValues():
194
+ if isinstance(val, (int, float)):
195
+ val = str(val)
196
+
197
+ elif not isinstance(val, str):
198
+ try:
199
+ val = safe_unicode(str(val))
200
+ except Exception:
201
+ continue
202
+
203
+ val = val.strip()
204
+ if not val:
205
+ continue
206
+
207
+ if val not in res:
208
+ res.append(val)
209
+
210
+ return res
211
+
212
+ def portal_vocabulary(self):
213
+ """Look up selected vocabulary from ZTK zope-vocabulary factory."""
214
+ voc_id = self.data.get("vocabulary", None)
215
+ if not voc_id:
216
+ return []
217
+
218
+ voc = queryUtility(IVocabularyFactory, voc_id, None)
219
+ if not voc:
220
+ return []
221
+
222
+ values = []
223
+ for term in voc(self.context):
224
+ value = term.value
225
+ if isinstance(value, bytes):
226
+ value = value.decode("utf-8")
227
+ values.append((value, (term.title or term.token or value)))
228
+ return values
229
+
230
+ def vocabulary(self, **kwargs):
231
+ """Return data vocabulary"""
232
+ reverse = safeToInt(self.data.get("sortreversed", 0))
233
+ mapping = self.portal_vocabulary()
234
+ catalog = self.data.get("catalog", None)
235
+
236
+ if catalog:
237
+ mapping = dict(mapping)
238
+ values = []
239
+
240
+ if HAVE_SOLR:
241
+ try:
242
+ # get values from SOLR if collective.solr is present
243
+ searchutility = queryUtility(ISolrSearch)
244
+ if searchutility is not None:
245
+ index = self.data.get("index", None)
246
+ kw = {
247
+ "facet": "on",
248
+ "facet.field": index, # facet on index
249
+ "facet.limit": -1, # show unlimited results
250
+ "rows": 0,
251
+ } # no results needed
252
+ result = searchutility.search("*:*", **kw)
253
+ try:
254
+ values = list(
255
+ result.facet_counts["facet_fields"][index].keys()
256
+ )
257
+ except (AttributeError, KeyError):
258
+ pass
259
+ except (SolrConnectionException, SolrInactiveException):
260
+ # solr is down or disabled
261
+ pass
262
+
263
+ if not values:
264
+ values = self.catalog_vocabulary()
265
+
266
+ res = [(val, mapping.get(val, val)) for val in values]
267
+ res.sort(key=lowercase)
268
+ else:
269
+ res = mapping
270
+
271
+ if reverse:
272
+ res.reverse()
273
+ return res
274
+
275
+ def __call__(self, **kwargs):
276
+ """ """
277
+ return self.template
278
+
279
+
280
+ class CountableWidget(Widget):
281
+ """Defines useful methods for countable widgets"""
282
+
283
+ groups = Widget.groups + (CountableSchemata,)
284
+
285
+ @property
286
+ def countable(self):
287
+ """Count results?"""
288
+ return bool(safeToInt(self.data.get("count", 0)))
289
+
290
+ @property
291
+ def sortcountable(self):
292
+ """Sort results by countable value?"""
293
+ return bool(safeToInt(self.data.get("sortcountable", 0)))
294
+
295
+ @property
296
+ def hidezerocount(self):
297
+ """Hide items that return no result?"""
298
+ return bool(safeToInt(self.data.get("hidezerocount", 0)))
299
+
300
+ faceted_field = True
301
+
302
+ def facet_counts(self, brains):
303
+ """Count"""
304
+ res = {}
305
+ facet_fields = brains.facet_counts.get("facet_fields")
306
+ if facet_fields:
307
+ index_id = self.data.get("index")
308
+ facet_field = facet_fields.get(index_id, {})
309
+ for value, num in facet_field.items():
310
+ normalized_value = safe_unicode(value)
311
+ if isinstance(value, str):
312
+ res[value] = num
313
+ elif isinstance(normalized_value, str):
314
+ res[normalized_value] = num
315
+ else:
316
+ unicode_value = value.decode("utf-8")
317
+ res[unicode_value] = num
318
+ else:
319
+ # no facet counts were returned. we exit anyway because
320
+ # zcatalog methods throw an error on solr responses
321
+ return res
322
+
323
+ res[""] = res["all"] = len(brains)
324
+ return res
325
+
326
+ def count(self, brains, sequence=None):
327
+ """Intersect results"""
328
+ res = {}
329
+ # by checking for facet_counts we assume this is a SolrResponse
330
+ # from collective.solr
331
+ if hasattr(brains, "facet_counts"):
332
+ return self.facet_counts(brains)
333
+
334
+ # this is handled by the zcatalog.
335
+ if not sequence:
336
+ sequence = [key for key, value in self.vocabulary()]
337
+
338
+ if not sequence:
339
+ return res
340
+
341
+ index_id = self.data.get("index")
342
+ if not index_id:
343
+ return res
344
+
345
+ ctool = getToolByName(self.context, "portal_catalog")
346
+ index = ctool._catalog.getIndex(index_id)
347
+ ctool = queryUtility(IFacetedCatalog)
348
+ if not ctool:
349
+ return res
350
+
351
+ if isinstance(brains, LazyMap):
352
+ values = brains._seq
353
+ # 75384 seq might be a pair of tuples instead of ints
354
+ # if you upgrade to ZCatalog 3
355
+ if isinstance(values[0], tuple):
356
+ values = [v[1] for v in values]
357
+ brains = frozenset(values)
358
+ else:
359
+ brains = frozenset(brain.getRID() for brain in brains)
360
+
361
+ res[""] = res["all"] = len(brains)
362
+ for value in sequence:
363
+ normalized_value = safe_unicode(value)
364
+ if index.meta_type == "BooleanIndex":
365
+ if normalized_value in ("False", 0):
366
+ normalized_value = False
367
+ elif normalized_value in ("True", 1):
368
+ normalized_value = True
369
+ if not value:
370
+ res[value] = len(brains)
371
+ continue
372
+
373
+ rset = ctool.apply_index(self.context, index, normalized_value)[0]
374
+ rset = frozenset(rset)
375
+ rset = brains.intersection(rset)
376
+ if isinstance(value, str):
377
+ res[value] = len(rset)
378
+ elif isinstance(normalized_value, str):
379
+ res[normalized_value] = len(rset)
380
+ elif isinstance(normalized_value, bool):
381
+ # We only get here for true values, not for false.
382
+ res["selected"] = len(rset)
383
+ else:
384
+ unicode_value = value.decode("utf-8")
385
+ res[unicode_value] = len(rset)
386
+ return res
@@ -0,0 +1,127 @@
1
+ """ Faceted widgets
2
+ """
3
+ import warnings
4
+ from zope.interface import implementer
5
+ from zope.component.zcml import adapter
6
+ from eea.facetednavigation.widgets.interfaces import ICriterion
7
+ from eea.facetednavigation.widgets.interfaces import IWidgetsInfo
8
+
9
+
10
+ @implementer(IWidgetsInfo)
11
+ class WidgetsInfo(object):
12
+ """Widgets registry"""
13
+
14
+ _widgets = {}
15
+ _schemas = {}
16
+
17
+ @property
18
+ def widgets(self):
19
+ """Widgets"""
20
+ return self._widgets
21
+
22
+ @property
23
+ def schemas(self):
24
+ """Widgets schemas"""
25
+ return self._schemas
26
+
27
+ def widget(self, name, default=None):
28
+ """Get widget by name"""
29
+ return self.widgets.get(name, default)
30
+
31
+ def schema(self, name, default=None):
32
+ """Return widget schema by name"""
33
+ return self.schemas.get(name, default)
34
+
35
+ def __call__(self, key):
36
+ """Get widget by key or raise"""
37
+ return self.widgets.get(key)
38
+
39
+
40
+ class WidgetData(object):
41
+ """Get data to populate widget with"""
42
+
43
+ def __init__(self, context):
44
+ self.context = context
45
+
46
+ def __getattr__(self, name, default=None):
47
+ return self.context.get(name, default)
48
+
49
+
50
+ def WidgetDirective(
51
+ _context,
52
+ factory=None,
53
+ schema=None,
54
+ accessor=WidgetData,
55
+ criterion=ICriterion,
56
+ **kwargs
57
+ ):
58
+ """Register faceted widgets"""
59
+ if not factory:
60
+ raise TypeError("No factory provided")
61
+
62
+ name = getattr(factory, "widget_type", None)
63
+ if not name:
64
+ raise TypeError("Invalid factory: widget_type property is empty or not defined")
65
+
66
+ WidgetsInfo._widgets[name] = factory
67
+
68
+ if schema is None:
69
+ raise TypeError("No schema provided for faceted widget type '%s'" % name)
70
+
71
+ WidgetsInfo._schemas[name] = schema
72
+ adapter(_context=_context, provides=schema, factory=(accessor,), for_=(criterion,))
73
+
74
+ #
75
+ # Ensure custom Faceted Navigation widgets were upgraded
76
+ #
77
+ edit_schema = getattr(factory, "edit_schema", None)
78
+ if edit_schema is not None:
79
+ warnings.warn(
80
+ "'edit_schema' attribute is deprecated. "
81
+ "Please remove it from your custom Faceted Widget: %s" % name,
82
+ DeprecationWarning,
83
+ )
84
+
85
+ view_schema = getattr(factory, "view_schema", None)
86
+ if view_schema is not None:
87
+ warnings.warn(
88
+ "'view_schema' attribute is deprecated. "
89
+ "Please remove it from your custom Faceted Widget: %s" % name,
90
+ DeprecationWarning,
91
+ )
92
+
93
+ view_css = getattr(factory, "view_css", None)
94
+ if view_css is not None:
95
+ warnings.warn(
96
+ "'view_css' attribute is deprecated. "
97
+ "Please remove it from your custom Faceted Widget: %s "
98
+ "and register it within registry.xml/cssregistry,xml" % name,
99
+ DeprecationWarning,
100
+ )
101
+
102
+ edit_css = getattr(factory, "edit_css", None)
103
+ if edit_css is not None:
104
+ warnings.warn(
105
+ "'edit_css' attribute is deprecated. "
106
+ "Please remove it from your custom Faceted Widget: %s "
107
+ "and register it within registry.xml/cssregistry,xml" % name,
108
+ DeprecationWarning,
109
+ )
110
+
111
+ view_js = getattr(factory, "view_js", None)
112
+ if view_js is not None:
113
+ warnings.warn(
114
+ "'view_js' attribute is deprecated. "
115
+ "Please remove it from your custom Faceted Widget: %s "
116
+ "and register it within registry.xml/jsregistry,xml" % name,
117
+ DeprecationWarning,
118
+ )
119
+
120
+ edit_js = getattr(factory, "edit_js", None)
121
+ if edit_js is not None:
122
+ warnings.warn(
123
+ "'edit_js' attribute is deprecated. "
124
+ "Please remove it from your custom Faceted Widget: %s "
125
+ "and register it within registry.xml/jsregistry,xml" % name,
126
+ DeprecationWarning,
127
+ )
@@ -0,0 +1 @@
1
+ import sys, types, os;p = os.path.join(sys._getframe(1).f_locals['sitedir'], *('eea',));importlib = __import__('importlib.util');__import__('importlib.machinery');m = sys.modules.setdefault('eea', importlib.util.module_from_spec(importlib.machinery.PathFinder.find_spec('eea', [os.path.dirname(p)])));m = m or sys.modules.setdefault('eea', types.ModuleType('eea'));mp = (m or []) and m.__dict__.setdefault('__path__',[]);(p not in mp) and mp.append(p)