]> git.parisson.com Git - telemeta.git/commitdiff
rename utils to tags
authorGuillaume Pellerin <guillaume.pellerin@ircam.fr>
Mon, 28 Mar 2016 13:52:52 +0000 (15:52 +0200)
committerGuillaume Pellerin <guillaume.pellerin@ircam.fr>
Mon, 28 Mar 2016 13:52:52 +0000 (15:52 +0200)
78 files changed:
doc/devel/telemeta.templatetags.rst
telemeta/templates/search/addplaylist.html
telemeta/templates/search/advanceSearch.html
telemeta/templates/search/confirmation_add_playslist.html
telemeta/templates/search/filters.html
telemeta/templates/search/mediacollection_listhaystack.html
telemeta/templates/search/mediaitem_listhaystack.html
telemeta/templates/search/mediaresource_listhaystack.html
telemeta/templates/search/search.html
telemeta/templates/telemeta/admin.html
telemeta/templates/telemeta/admin_enumerations.html
telemeta/templates/telemeta/admin_instruments.html
telemeta/templates/telemeta/admin_users.html
telemeta/templates/telemeta/base.html
telemeta/templates/telemeta/collection.m3u
telemeta/templates/telemeta/collection_add.html
telemeta/templates/telemeta/collection_detail.html
telemeta/templates/telemeta/collection_detail_dc.html
telemeta/templates/telemeta/collection_edit.html
telemeta/templates/telemeta/collection_list.html
telemeta/templates/telemeta/collection_related_edit.html
telemeta/templates/telemeta/collection_xspf.xml
telemeta/templates/telemeta/country_info.html
telemeta/templates/telemeta/flatpage.html
telemeta/templates/telemeta/geo_continents.html
telemeta/templates/telemeta/geo_countries.html
telemeta/templates/telemeta/geo_country_collections.html
telemeta/templates/telemeta/geo_country_items.html
telemeta/templates/telemeta/hello_world.html
telemeta/templates/telemeta/home.html
telemeta/templates/telemeta/inc/chat_room.html
telemeta/templates/telemeta/inc/children_list.html
telemeta/templates/telemeta/inc/collection_list.html
telemeta/templates/telemeta/inc/collection_related.html
telemeta/templates/telemeta/inc/dublincore.html
telemeta/templates/telemeta/inc/epub_list.html
telemeta/templates/telemeta/inc/epub_preamble.html
telemeta/templates/telemeta/inc/mediaitem_list.html
telemeta/templates/telemeta/inc/mediaitem_related.html
telemeta/templates/telemeta/inc/mediaitem_video.html
telemeta/templates/telemeta/inc/module_revisions.html
telemeta/templates/telemeta/inc/module_searches.html
telemeta/templates/telemeta/inc/module_user_revisions.html
telemeta/templates/telemeta/inc/resource_list.html
telemeta/templates/telemeta/inc/resource_related.html
telemeta/templates/telemeta/inc/user_list.html
telemeta/templates/telemeta/lists.html
telemeta/templates/telemeta/mediaitem_add.html
telemeta/templates/telemeta/mediaitem_detail.html
telemeta/templates/telemeta/mediaitem_detail_dc.html
telemeta/templates/telemeta/mediaitem_edit.html
telemeta/templates/telemeta/mediaitem_keywords_edit.html
telemeta/templates/telemeta/mediaitem_list.html
telemeta/templates/telemeta/mediaitem_performances_edit.html
telemeta/templates/telemeta/mediaitem_player.html
telemeta/templates/telemeta/mediaitem_player_contour.html
telemeta/templates/telemeta/mediaitem_player_simple.html
telemeta/templates/telemeta/mediaitem_related_edit.html
telemeta/templates/telemeta/mediaitem_video_player.html
telemeta/templates/telemeta/mediaitem_xspf.xml
telemeta/templates/telemeta/paginator.html
telemeta/templates/telemeta/profile_detail.html
telemeta/templates/telemeta/profile_edit.html
telemeta/templates/telemeta/registration/registration_complete.html
telemeta/templates/telemeta/registration/registration_form.html
telemeta/templates/telemeta/resource_add.html
telemeta/templates/telemeta/resource_confirm_delete.html
telemeta/templates/telemeta/resource_detail.html
telemeta/templates/telemeta/resource_detail_dc.html
telemeta/templates/telemeta/resource_edit.html
telemeta/templates/telemeta/resource_epub_list.html
telemeta/templates/telemeta/resource_list.html
telemeta/templates/telemeta/resource_related_edit.html
telemeta/templates/telemeta/search_criteria.html
telemeta/templates/telemeta/search_results.html
telemeta/templates/telemeta/users.html
telemeta/templatetags/telemeta_tags.py [new file with mode: 0644]
telemeta/templatetags/telemeta_utils.py [deleted file]

index 4b1d38f9763d4abfca9e2dbba70a0bb35fe052f8..1dcab63b19bb0d26ab5798d90eb8eb8e21709c2b 100644 (file)
@@ -12,10 +12,10 @@ telemeta.templatetags.paginator module
     :undoc-members:
     :show-inheritance:
 
-telemeta.templatetags.telemeta_utils module
+telemeta.templatetags.telemeta_tags module
 -------------------------------------------
 
-.. automodule:: telemeta.templatetags.telemeta_utils
+.. automodule:: telemeta.templatetags.telemeta_tags
     :members:
     :undoc-members:
     :show-inheritance:
index 8f1e552d62da30a3eceab5e8f0b1181bc7722d64..0d184bf0ae355c0af09599f21446d39a5466fc0f 100644 (file)
@@ -1,5 +1,5 @@
 {% extends 'telemeta/base.html' %}
-{% load telemeta_utils %}
+{% load telemeta_tags %}
 {% load i18n %}
 
 {% block title %}
index 035553847e850e4a0cb867207d73f7d552467052..5285222ca1be3948090638bd9056a44b97cee88a 100644 (file)
@@ -1,5 +1,5 @@
 {% extends 'telemeta/base.html' %}
-{% load telemeta_utils %}
+{% load telemeta_tags %}
 {% load i18n %}
 {% load bootstrap_pagination %}
 
index b5438e741165dd7288a92f731699e49140b6fba8..0804447edd3056e12937ff60a15a9f995fdf8150 100644 (file)
@@ -1,5 +1,5 @@
 {% extends 'telemeta/base.html' %}
-{% load telemeta_utils %}
+{% load telemeta_tags %}
 {% load i18n %}
 
 {% block title %}
index 54a54d8c1808eb2ceac2d904844d927d727d1a56..c2495f7b014ef81d2d6940b042bc35d65a7ce218 100644 (file)
@@ -1,4 +1,4 @@
-{% load telemeta_utils %}
+{% load telemeta_tags %}
 {% load i18n %}
 
 <div id="accordeon" style="margin-bottom:20px">
index b29527de2e7cd654fa503fac7695c1a199b99696..621fac942976a57628bc7a57f3ae284c4b3b7149 100644 (file)
@@ -1,4 +1,4 @@
-{% load telemeta_utils %}
+{% load telemeta_tags %}
 {% load i18n %}
 
 {% if page.object_list %}
index 3270a04f28d85cd8c15d3253dddea8b34d7c0904..47bf9da0db28b2a660900254130ccff36a4441e4 100644 (file)
@@ -1,4 +1,4 @@
-{% load telemeta_utils %}
+{% load telemeta_tags %}
 {% load i18n %}
 
 {% if page.object_list %}
index 44de7db7e16c4238d74a5c84928562546716afeb..533c32f01fc0c764fbf6b20425d97f35a89c2292 100644 (file)
@@ -1,4 +1,4 @@
-{% load telemeta_utils %}
+{% load telemeta_tags %}
 {% load i18n %}
 
 {% if page.object_list %}
index 8a2193c0ef7334b8737e6cfc911e4757e83c56b6..4cca777e0c3aaded2b6b87fc0e4bbbeec4d0912b 100644 (file)
@@ -1,5 +1,5 @@
 {% extends 'telemeta/base.html' %}
-{% load telemeta_utils %}
+{% load telemeta_tags %}
 {% load i18n %}
 {% load bootstrap_pagination %}
 
index d71c90bb20e503066177e2e3dac8b8e13c655f84..f2232cf1af408ed320e3860155a980751274cad3 100644 (file)
@@ -1,5 +1,5 @@
 {% extends "telemeta/base.html" %}
-{% load telemeta_utils %}
+{% load telemeta_tags %}
 {% load i18n %}
 
 {% block stylesheets %}
index 4f45f190f7aae5e09cc9bca79868511ec5f72fcd..4d0236a6b3437606f1a22108b8f5952b94524526 100644 (file)
@@ -1,5 +1,5 @@
 {% extends "telemeta/admin.html" %}
-{% load telemeta_utils %}
+{% load telemeta_tags %}
 {% load i18n %}
 
 {% block title %}
index 5a3fa5f3e960c06adb3bb73e2d842f3cefcf3b59..682393ef7732e19da084cbf04477db77bc5524ec 100644 (file)
@@ -1,5 +1,5 @@
 {% extends "telemeta/admin.html" %}
-{% load telemeta_utils %}
+{% load telemeta_tags %}
 {% load i18n %}
 
 {% block tabcontents %}
index 5a277a9fdd7414df1ff2095bc5d5fe66248aaa5c..60591b37a82ac36e7ef1203ae0228d2e765eb6d7 100644 (file)
@@ -1,5 +1,5 @@
 {% extends "telemeta/admin.html" %}
-{% load telemeta_utils %}
+{% load telemeta_tags %}
 {% load i18n %}
 
 {% block tabcontents %}
index 5bc2dba4d20423c6d6dc248103ef55019b3c5c66..69397cc328af495e36687feaea4bfa6e9e015e86 100644 (file)
@@ -1,6 +1,6 @@
 <!DOCTYPE html>
 {% load i18n %}
-{% load telemeta_utils %}
+{% load telemeta_tags %}
 {% load bootstrap3 %}
 {% settings_value 'INSTALLED_APPS' as INSTALLED_APPS %}
 {% if 'googletools' in INSTALLED_APPS %}
index 00ad96da435a744dcf44c8c51b096287d8a2f8ea..0203776abbbcd6ab99081a8e8142373ef170610b 100644 (file)
@@ -1,3 +1,3 @@
-#EXTM3U{% load telemeta_utils %}{% for item in collection.items.all %}
+#EXTM3U{% load telemeta_tags %}{% for item in collection.items.all %}
 #EXTINF:{{ item.get_duration }},{{ item }}
 http://{{ host }}{% url "telemeta-item-export" item.public_id,"mp3" %}{% endfor %}
index ac66b00e59a8843089df0b53d3ab63f9bb199bdb..1118ecdf95781b7e2e0f454da1a3d542268a5fc4 100644 (file)
@@ -1,6 +1,6 @@
 {% extends "telemeta/collection_edit.html" %}
 {% load i18n %}
-{% load telemeta_utils %}
+{% load telemeta_tags %}
 
 {% block title %}
     <img src="{{ STATIC_URL }}telemeta/images/collections_red.png" style="vertical-align:middle" /> Collection : {% trans "New" %}
index 361e456d998bebcd2a6f02fc8fb4002a7da80099..82eb8418363f5c967bc40cef667bfb13a461f09b 100644 (file)
@@ -1,6 +1,6 @@
 {% extends "telemeta/base.html" %}
 {% load i18n %}
-{% load telemeta_utils %}
+{% load telemeta_tags %}
 
 {% block head_title %}{% trans "Collection" %}{{collection|prepend:' : '}} - {{ block.super }}{% endblock %}
 
index cda7b9c88372e6e3b5c8115b8a8fbc993c823a45..23ae84128f4cddb759ca127ecfc41a66a39137ad 100644 (file)
@@ -1,5 +1,5 @@
 {% extends "telemeta/collection_detail.html" %}
-{% load telemeta_utils %}
+{% load telemeta_tags %}
 {% load i18n %}
 
 {% block content %}
index 42f3701856e2dc3340ada4ef5bb22ce2b5dc936b..823f5e29478b0c6d45802d33d832e7d7b4dcfe7f 100644 (file)
@@ -1,6 +1,6 @@
 {% extends "telemeta/collection_detail.html" %}
 {% load i18n %}
-{% load telemeta_utils %}
+{% load telemeta_tags %}
 {% load bootstrap3 %}
 
 {% block title %}
index d05d9c4eaea66052d1b7ae30c6d05b8ac04e42d3..36dccf2a23a67dfd0fb68134d5ed7b4ae7711452 100644 (file)
@@ -1,5 +1,5 @@
 {% extends "telemeta/base.html" %}
-{% load telemeta_utils %}
+{% load telemeta_tags %}
 {% load i18n %}
 {% load bootstrap_pagination %}
 
index 48f3e0f45df0cf9322d306c0f23025ae33ad4191..1c586bb1a229af9afe719016f639baac626d0f7b 100644 (file)
@@ -1,6 +1,6 @@
 {% extends "telemeta/collection_detail.html" %}
 {% load i18n %}
-{% load telemeta_utils %}
+{% load telemeta_tags %}
 
 {% block extra_javascript %}{% endblock %}
 
index df3e60b17062d927562ab576e077b197c624016b..c8b2758fa3858719caa14918ab756942200b9dd6 100644 (file)
@@ -1,5 +1,5 @@
 {% extends "telemeta/base_xspf.xml" %}
-{% load telemeta_utils %}
+{% load telemeta_tags %}
 
 {% block listinfo %}
 {% with collection.to_dublincore.flatten as dc %}
index bde7b8436fc3403062fb5e79b56cfc23255ca4cc..9a4b32e307258c5fd48136e870d7209ca6e9382c 100644 (file)
@@ -1,4 +1,4 @@
-{% load telemeta_utils %}
+{% load telemeta_tags %}
 {% load i18n %}
 
 <h2>{{ country }}</h2>
index 6b2b55f476e870cf2b5d7a825ae60b20544536a3..46ef0fe51b69daf043337b03bdacdacf6e3d721d 100644 (file)
@@ -1,5 +1,5 @@
 {% extends "telemeta/base.html" %}
-{% load telemeta_utils %}
+{% load telemeta_tags %}
 {% block content %}
 {{ page_content|render_flatpage }}
 {% endblock %}
index 5435281caddf42eaec72275462e8685398c96315..c9ac3f7d0b439f682143b46affa12223499f92f8 100644 (file)
@@ -1,5 +1,5 @@
 {% extends "telemeta/base.html" %}
-{% load telemeta_utils %}
+{% load telemeta_tags %}
 {% load i18n %}
 
 {% block head_title %}{% trans "Geographic Navigator" %} - {{ block.super }}{% endblock %}
index 6d81e04b56a7f69abbd081ed3ff262aaded10e8f..b41e031bb1509e6cd6d133da7993e62e8a195a70 100644 (file)
@@ -1,5 +1,5 @@
 {% extends "telemeta/base.html" %}
-{% load telemeta_utils %}
+{% load telemeta_tags %}
 {% load i18n %}
 
 {% block head_title %}{{ continent }} - {% trans "Geographic Navigator" %} - {{ block.super }}{% endblock %}
index ec42fbfb4d9225580c5467f98fe619917f0b1dff..00ef80a99584e47693aa87c59db2120a0567dc60 100644 (file)
@@ -1,6 +1,6 @@
 {% extends "telemeta/base.html" %}
 {% load i18n %}
-{% load telemeta_utils %}
+{% load telemeta_tags %}
 {% load bootstrap_pagination %}
 
 {% block head_title %}{{ country }} - {% trans "Geographic Navigator" %} - {{ block.super }}{% endblock %}
index 08e5dce4cd44ce0029d98721ca1a73a40640ca12..81a4c9d91c02482200655cdfd1fb6f166e7c2b24 100644 (file)
@@ -1,6 +1,6 @@
 {% extends "telemeta/base.html" %}
 {% load i18n %}
-{% load telemeta_utils %}
+{% load telemeta_tags %}
 {% load bootstrap_pagination %}
 
 {% block head_title %}{{ country }} - {% trans "Geographic Navigator" %} - {{ block.super }}{% endblock %}
index ef6efa2f201c779a49d3aabd065348c29e5863cb..997e01d781fdc18b755f1b440b5f59f9207a5b9d 100644 (file)
@@ -1,5 +1,5 @@
 {% extends "telemeta/base.html" %}
-{% load telemeta_utils %}
+{% load telemeta_tags %}
 {% load i18n %}
 {% load bootstrap_pagination %}
 
index 66bd821e528da7e0e8f937fb565ee9324159f7a9..38564a39e8a63c5ef13e8b597720bbe8efda53e4 100644 (file)
@@ -1,5 +1,5 @@
 {% extends "telemeta/base.html" %}
-{% load telemeta_utils %}
+{% load telemeta_tags %}
 {% load i18n %}
 
 {% block content %}
index 07432961bbebc1b3981ff77099ed5852feff21ae..a0874d26db8c3bb0da85bbb11896e28b6a2b45eb 100644 (file)
@@ -1,5 +1,5 @@
 {% load i18n %}
-{% load telemeta_utils %}
+{% load telemeta_tags %}
 
 <script src="{{ STATIC_URL }}jqchat/jqchat.js" type="text/javascript" ></script>
 
index 7cc392d503bd1a0be37b7c9bb4b622e2ba642169..5f3244b0150ebcedcb33624d64a4872f47142b62 100644 (file)
@@ -1,4 +1,4 @@
-{% load telemeta_utils %}
+{% load telemeta_tags %}
 {% load i18n %}
 
 {% if children %}
index da275b01df565cfc1d97a4b70a20022874037ccc..a2ecfb8ec9017466d36b7461c0a5d73e4c504d64 100644 (file)
@@ -1,4 +1,4 @@
-{% load telemeta_utils %}
+{% load telemeta_tags %}
 {% load i18n %}
 
 {% if collections %}
index 997d995364bc1c10809773531c6809f095fc8371..c00c6297dd0478f0ae0b95f79fcdc121d090b808 100644 (file)
@@ -1,5 +1,5 @@
 {% load i18n %}
-{% load telemeta_utils %}
+{% load telemeta_tags %}
 {% load thumbnail %}
 
         <div>
index 82389c34dfccc03190d08c92f33eed62b31f4b4e..b3f6b1eb1e0d1f0857c2f474bdc79e5ccf6a740e 100644 (file)
@@ -1,4 +1,4 @@
-{% load telemeta_utils %}
+{% load telemeta_tags %}
 {% load i18n %}
 
     <h4 class="dublincore">{% trans "Dublin Core Metadata" %}</h4>
index ff890a54c3837428977b3513c030bab31e8fe863..1b198ec9292083c891423c3417c1e52918f55192 100644 (file)
@@ -1,4 +1,4 @@
-{% load telemeta_utils %}
+{% load telemeta_tags %}
 {% load i18n %}
 
 {% if children %}
index 91f7b865935e7799aa4487a0e542963ebed03571..3f369b09f196dce481219e1cf31c8a73e8119e94 100644 (file)
@@ -1,4 +1,4 @@
-{% load telemeta_utils %}
+{% load telemeta_tags %}
 {% load i18n %}
 
 <link rel="stylesheet" type="text/css" href="style/epub.css" />
index e958b4b05a65e97137d4128e7c750cc626eb9a42..b93933dad892876c3369d1ae99b358343bb36e64 100644 (file)
@@ -1,4 +1,4 @@
-{% load telemeta_utils %}
+{% load telemeta_tags %}
 {% load i18n %}
 
 {% if items %}
index 9fe8eb864fd23f6dc13921de1d6be0d48f86253f..d06316dd6f2b5ac22a4d0a3d34d82b5d8dc215f6 100644 (file)
@@ -1,5 +1,5 @@
 {% load i18n %}
-{% load telemeta_utils %}
+{% load telemeta_tags %}
 {% load thumbnail %}
 
         <div>
index 9125f5b4d7147a8b285422cb36e890ce54924634..3b43cdd5f583103334dabddc5b15552ec205ac85 100644 (file)
@@ -1,4 +1,4 @@
-{% load telemeta_utils %}
+{% load telemeta_tags %}
 {% load i18n %}
 
 <div class="video">
index 40f8d2593dc27179c7f647ab757318ff4befc72f..d7d153b74ff1b5b8ec54855fbf54129f612408ec 100644 (file)
@@ -1,4 +1,4 @@
-{% load telemeta_utils %}
+{% load telemeta_tags %}
 {% load i18n %}
 
    <div class="module">
index c2331859eeba024c92730f56fe59e29032b1fbc6..397724376baa451b11f99acdc7ab0b5091ed136b 100644 (file)
@@ -1,4 +1,4 @@
-{% load i18n telemeta_utils saved_searches_tags %}
+{% load i18n telemeta_tags saved_searches_tags %}
 {% most_recent_searches as searches for_user request.user %}
 
    <div class="module">
index 4acaacd5774dae1954b14149780681ff9a3cd238..736e30f2a90bd893acc5159294c73a6ca1118189 100644 (file)
@@ -1,5 +1,5 @@
 {% extends "telemeta/inc/module_revisions.html" %}
-{% load telemeta_utils %}
+{% load telemeta_tags %}
 {% load i18n %}
 
 {% block rss_title %}
index 683b63ac85d94d65e5f3343f4bba41ccee82d3da..d5c15200440c4c2a18647d154817f02a7bde3626 100644 (file)
@@ -1,4 +1,4 @@
-{% load telemeta_utils %}
+{% load telemeta_tags %}
 {% load i18n %}
 
 {% if object_list %}
index 730d91399272092548f0730e230dd54202327dfa..ac76ebd2eee3067769ebccff1f518fc05e9d5eb1 100644 (file)
@@ -1,5 +1,5 @@
 {% load i18n %}
-{% load telemeta_utils %}
+{% load telemeta_tags %}
 {% load thumbnail %}
 
         <div>
index 65e5e3ee312487d42ef5d8197ff25784af2b5be9..b19369032dcb92a12a555cc3acdd81bd744de86d 100644 (file)
@@ -1,5 +1,5 @@
 {% load i18n %}
-{% load telemeta_utils %}
+{% load telemeta_tags %}
 
   <table class="listing" width="100%">
    <thead>
index feca98ea5fc101748dc4a39c8646bdfcfaed9fe8..866caf64a1e3332b3d2b099d72584612c50c072a 100644 (file)
@@ -1,5 +1,5 @@
 {% extends "telemeta/base.html" %}
-{% load telemeta_utils %}
+{% load telemeta_tags %}
 {% load i18n %}
 
 {% comment "added by Killian Mary" %}{% endcomment %}
index 787aec4539fec1e392cbfeeaa786fdf56c67fb1d..0fc23843cee0224bce64bdb2f48b55ac4d36e767 100644 (file)
@@ -1,5 +1,5 @@
 {% extends "telemeta/mediaitem_edit.html" %}
-{% load telemeta_utils %}
+{% load telemeta_tags %}
 {% load i18n %}
 
 {% block head_title %}{% trans "Item" %}- {{ block.super }}{% endblock %}
index 9553a159e965a5f8dc0ba7a250c5e1aeae8e38c5..2fa27eb99a1f4f512f6c7e7d602d107e0d7d7140 100644 (file)
@@ -1,5 +1,5 @@
 {% extends "telemeta/base.html" %}
-{% load telemeta_utils %}
+{% load telemeta_tags %}
 {% load i18n %}
 
 {% block head_title %}{% trans "Item" %} : {% if item.title %}{{ item.title }}{% else %}{{ item.public_id}}{% endif %} - {{ block.super }}{% endblock %}
index 75d6b78d1d3e2c24cd450d2420130b1b275a0a56..ba358fa8d6e0654e743b88cccad2f658f5859437 100644 (file)
@@ -1,5 +1,5 @@
 {% extends "telemeta/mediaitem_detail.html" %}
-{% load telemeta_utils %}
+{% load telemeta_tags %}
 {% load i18n %}
 
 {% if item %}
index e854dace6bd11b99a95e63181f75e4ed31a058b6..7b3a3420dffdd68e50f7899f266b2ce30aca3f77 100644 (file)
@@ -1,6 +1,6 @@
 {% extends "telemeta/mediaitem_detail.html" %}
 {% load i18n %}
-{% load telemeta_utils %}
+{% load telemeta_tags %}
 {% load bootstrap3 %}
 
 {% block title %}
index 31aceadf824c7583608aeb79fe74e127d82212f3..4addb105992518c371bf58fea600634fbb863c22 100644 (file)
@@ -1,6 +1,6 @@
 {% extends "telemeta/mediaitem_detail.html" %}
 {% load i18n %}
-{% load telemeta_utils %}
+{% load telemeta_tags %}
 
 {% block extra_javascript %}
 {% endblock %}
index 01bf5df6482b822f622876a30598fc3915c56e41..449ced2745dc34033a34740952d2f601f3b9662f 100644 (file)
@@ -1,6 +1,6 @@
 {% extends "telemeta/base.html" %}
 {% load i18n %}
-{% load telemeta_utils %}
+{% load telemeta_tags %}
 {% load bootstrap_pagination %}
 
 {% block head_title %}{% trans "Media Items" %} - {{ block.super }}{% endblock %}
index 45cfeb4cc4019b8b281cc64dee79730c120f7cf5..b866a93ee9d9e6f9ea65faa98def13b926d9cb43 100644 (file)
@@ -1,6 +1,6 @@
 {% extends "telemeta/mediaitem_detail.html" %}
 {% load i18n %}
-{% load telemeta_utils %}
+{% load telemeta_tags %}
 
 {% block extra_javascript %}{% endblock %}
 
index f7fbf21b8cba0a7af59e17323478901357524682..501ae0a91e8489b8239fa384901135a386f431e4 100644 (file)
@@ -1,5 +1,5 @@
 {% extends "telemeta/mediaitem_detail.html" %}
-{% load telemeta_utils %}
+{% load telemeta_tags %}
 {% load i18n %}
 
 
index b57093514c3ef2f851d503ffb6ade69cc1ce796e..09d92fbd3853f19dbfd2e495cd7a5a54dc7ee93a 100644 (file)
@@ -1,5 +1,5 @@
 {% extends "telemeta/mediaitem_detail.html" %}
-{% load telemeta_utils %}
+{% load telemeta_tags %}
 {% load i18n %}
 
 {% block stylesheets %}
index ae96620a37dd4dcb49e417d4e9e4845ee1bde953..b86063df11b6ee16f5a14b50a16d7f5d931b2b6d 100644 (file)
@@ -1,5 +1,5 @@
 {% extends "telemeta/mediaitem_detail.html" %}
-{% load telemeta_utils %}
+{% load telemeta_tags %}
 {% load i18n %}
 
 
index 619a61771268b1cbd73b236d32f73acff3120e73..fb43628a0f27a95302f7afbeb88210bf65dd4b6e 100644 (file)
@@ -1,6 +1,6 @@
 {% extends "telemeta/mediaitem_detail.html" %}
 {% load i18n %}
-{% load telemeta_utils %}
+{% load telemeta_tags %}
 
 {% block extra_javascript %}{% endblock %}
 
index a54c9faa667d08c3b096896b08e25fc57ea22ca8..e224f43aa1428f3ad88af43905b9d54de5f650d1 100644 (file)
@@ -1,5 +1,5 @@
 {% extends "telemeta/mediaitem_detail.html" %}
-{% load telemeta_utils %}
+{% load telemeta_tags %}
 {% load i18n %}
 
 {% block extra_javascript %}{% endblock %}
index 6d9da33e544dbfb98fda63e86e6ac0d157093e48..707e6c1daddb0cf5575d3e877eb232ab38e3b04e 100644 (file)
@@ -1,5 +1,5 @@
 {% extends "telemeta/base_xspf.xml" %}
-{% load telemeta_utils %}
+{% load telemeta_tags %}
 
 {% block tracklist %}
     <track>
index e47187d6d8cadc7415a562a803abad4e02ad498b..1d59d018547a6feb4d2aad15657927f00ec988f5 100644 (file)
@@ -1,4 +1,4 @@
-{% load telemeta_utils %}
+{% load telemeta_tags %}
 {% load i18n %}
 
 {% if has_previous %}
index 7a6df49e691a8f4746b601f0f312b2835e79230c..6d434e52db5ec71a08ffa3fed560b03e5234f2a9 100644 (file)
@@ -1,6 +1,6 @@
 {% extends "telemeta/base.html" %}
 {% load i18n %}
-{% load telemeta_utils %}
+{% load telemeta_tags %}
 
 {% block head_title %}{% trans "User Profile" %} : {{ usr.username }}{% endblock %}
 
index afaa1f8c877ed2e906eebd2156a2c88c23b223fc..7495ad188d9da72584317eedddb6dbfedd2d99cd 100644 (file)
@@ -1,6 +1,6 @@
 {% extends "telemeta/profile_detail.html" %}
 {% load i18n %}
-{% load telemeta_utils %}
+{% load telemeta_tags %}
 
 {% block title_buttons %}
  <a href="{% url "telemeta-profile-detail" usr.username %}" class="component_icon button icon_cancel">{% trans "Cancel" %}</a>
index 9ba78fd0fc14a2c31b35dcc988dde878b9ab606c..f344cc10e84378ca99a4e7c4204109042cecc986 100644 (file)
@@ -1,6 +1,6 @@
 {% extends "telemeta/registration/registration_base.html" %}
 {% load i18n %}
-{% load telemeta_utils %}
+{% load telemeta_tags %}
 {% load teleforma_tags %}
 
 {% block title %}<center>{% trans "Registration" %} - {% description %}</center>{% endblock %}
index 3801a55edacff538041132062975c18895f47645..1f376574b9b84ab5cf1275ea3c5974ca571e4cf0 100644 (file)
@@ -1,6 +1,6 @@
 {% extends "telemeta/registration/registration_base.html" %}
 {% load i18n %}
-{% load telemeta_utils %}
+{% load telemeta_tags %}
 {% load teleforma_tags %}
 
 {% block title %}<center>{% trans "Registration" %} - {% description %}</center>{% endblock %}
index 06c4215b0beb6e121769fe122789a9a351eba974..24b3df9f2d7bd7f1e44e6208dcba2be356909b10 100644 (file)
@@ -1,6 +1,6 @@
 {% extends "telemeta/resource_edit.html" %}
 {% load i18n %}
-{% load telemeta_utils %}
+{% load telemeta_tags %}
 {% load bootstrap3 %}
 
 {% block title %}
index 591da69c369a36648e23b511e47d4ebbe99274b2..7a2e9f38354e5e779a41143c97e40ccf4888b666 100644 (file)
@@ -1,6 +1,6 @@
 {% extends "telemeta/resource_detail.html" %}
 {% load i18n %}
-{% load telemeta_utils %}
+{% load telemeta_tags %}
 
 {% block title %}
 <img src="{{ STATIC_URL }}telemeta/images/{{ type }}.png" style="vertical-align:middle" /> {{ type }} : {{ resource }}
index 01a07f5278d3aeac8332779f5f03ef921717dd51..92f39909e8dd59fa496e5ae9c231a07d3eb6b601 100644 (file)
@@ -1,6 +1,6 @@
 {% extends "telemeta/base.html" %}
 {% load i18n %}
-{% load telemeta_utils %}
+{% load telemeta_tags %}
 
 {% block head_title %}{% trans type %}{{resource|prepend:' : '}} - {{ block.super }}{% endblock %}
 
index a31231bf4762dba7faa865f62296a5fa1eddb0a4..57f9d40050a3ecb2e01532ef5e69510da8b77bf5 100644 (file)
@@ -1,5 +1,5 @@
 {% extends "telemeta/resource_detail.html" %}
-{% load telemeta_utils %}
+{% load telemeta_tags %}
 {% load i18n %}
 
 {% if item %}
index 74e4f5e390b70fe5a58997522a7d8eee8684aaa2..abd4882b478427498af31f3933db5e90878108cb 100644 (file)
@@ -1,6 +1,6 @@
 {% extends "telemeta/resource_detail.html" %}
 {% load i18n %}
-{% load telemeta_utils %}
+{% load telemeta_tags %}
 {% load bootstrap3 %}
 
 {% block title %}
index 0c1dd16e20e89ba16327117e18cd0936bd9a19af..eab05ff61afe701652299f5b4de3f06a9f0735b0 100644 (file)
@@ -1,6 +1,6 @@
 {% extends "telemeta/resource_detail.html" %}
 {% load i18n %}
-{% load telemeta_utils %}
+{% load telemeta_tags %}
 
 
 {% block search %}
index f80aeccab110286926732c9a83620ce1f59fc35a..8ee59d5e855b57ec464216d281bac4abd8910681 100644 (file)
@@ -1,5 +1,5 @@
 {% extends "telemeta/base.html" %}
-{% load telemeta_utils %}
+{% load telemeta_tags %}
 {% load i18n %}
 {% load bootstrap_pagination %}
 
index d787dcec4b3341fa9b7254818a3804a9054b0942..d591a6f720c4ff338382f630ff58e1cd985d87e0 100644 (file)
@@ -1,6 +1,6 @@
 {% extends "telemeta/resource_detail.html" %}
 {% load i18n %}
-{% load telemeta_utils %}
+{% load telemeta_tags %}
 
 {% block extra_javascript %}{% endblock %}
 
index 18fa0b0bb91e46f9c5007151200ccf78d1caeaa8..c39cb535d0bcdf7cbad577777e9bad7e2d2637ca 100644 (file)
@@ -1,5 +1,5 @@
 {% extends "telemeta/base.html" %}
-{% load telemeta_utils %}
+{% load telemeta_tags %}
 {% load i18n %}
 
 {% block head_title %}{% trans "Advanced Search" %} - {{ block.super }}{% endblock %}
index 68e1c43384ca08f51d485131ac3db0d7b9a6f469..034587b2c7601bcaeed08063a73063d2ad73adee 100644 (file)
@@ -1,5 +1,5 @@
 {% extends "telemeta/base.html" %}
-{% load telemeta_utils %}
+{% load telemeta_tags %}
 {% load i18n %}
 {% load bootstrap_pagination %}
 
index bbf4d913cbb7a4cee5e1780c9c5c694e5598d1fe..48ced40ee74dd188235eae6d79e356fe7483b9bd 100644 (file)
@@ -1,6 +1,6 @@
 {% extends "telemeta/base.html" %}
 {% load i18n %}
-{% load telemeta_utils %}
+{% load telemeta_tags %}
 
 {% block head_title %}{% trans "Users" %} - {{ block.super }}{% endblock %}
 
diff --git a/telemeta/templatetags/telemeta_tags.py b/telemeta/templatetags/telemeta_tags.py
new file mode 100644 (file)
index 0000000..a085034
--- /dev/null
@@ -0,0 +1,469 @@
+from django import template
+from django.utils.http import urlquote
+from telemeta import models
+from django.core.urlresolvers import reverse
+import telemeta.models.dublincore as dc
+from django.utils import html
+from django import template
+from django.utils.text import capfirst
+from django.utils.translation import ungettext
+from docutils.core import publish_parts
+from django.utils.encoding import smart_str, force_unicode
+from django.utils.safestring import mark_safe
+from django import db
+import re
+import os
+import ast
+import datetime
+from django.conf import settings
+from django.template.defaultfilters import stringfilter
+from django.template import NodeList
+from telemeta.views.core import get_item_access
+
+register = template.Library()
+
+@register.filter
+def tolist(dict):
+    "Converts a simple dict into a list"
+    list = []
+    for k, v in dict.iteritems():
+        list.append({'name': k, 'value': v})
+    return list
+
+@register.filter
+def mul(value, arg):
+    "Multiply a numeric value"
+    return value * arg
+
+class TelemetaVersionNode(template.Node):
+    def render(self, context):
+        from telemeta import __version__
+        return __version__
+
+@register.tag
+def telemeta_version(parser, token):
+    "Get Telemeta version number"
+    return TelemetaVersionNode()
+
+class TelemetaUrlNode(template.Node):
+    def render(self, context):
+        from telemeta import __url__
+        return __url__
+
+@register.tag
+def telemeta_url(parser, token):
+    "Get Telemeta project homepage URL"
+    return TelemetaUrlNode()
+
+_js_escapes = (
+    ('\\', '\\\\'),
+    ('"', '\\"'),
+    ("'", "\\'"),
+    ('\n', '\\n'),
+    ('\r', '\\r'),
+    ('\b', '\\b'),
+    ('\f', '\\f'),
+    ('\t', '\\t'),
+    ('\v', '\\v'),
+    ('</', '<\\/'),
+)
+@register.filter
+def escapejs(value):
+    """Backslash-escapes characters for use in JavaScript strings."""
+    for bad, good in _js_escapes:
+        value = value.replace(bad, good)
+    return value
+
+@register.filter
+def build_pattern_dict(query):
+    return ast.literal_eval(query.rstrip())
+
+@register.filter
+def build_query_string(vars):
+    """Build an HTTP query string out of a dict"""
+    if type(vars) == dict:
+      import urllib
+      args = []
+      for k, v in vars.iteritems():
+          if isinstance(v, db.models.Model):
+              v = v.pk
+          elif not isinstance(v, basestring):
+              v = unicode(v)
+          args.append(urlquote(k) + '=' + urlquote(v))
+      return "&".join(args)
+    return ''
+
+@register.filter
+def with_no_sound(vars):
+    _vars = vars.copy()
+    if type(_vars) == dict:
+        if u'sound' in _vars:
+            del _vars[u'sound']
+    return _vars
+
+@register.filter
+def with_sound(vars):
+    _vars = vars.copy()
+    if type(_vars) == dict:
+        if not 'sound' in _vars:
+            _vars['sound'] = True
+    return _vars
+
+
+@register.filter
+def code_or_id(resource):
+    if resource.code:
+        return resource.code
+    else:
+        return resource.id
+
+@register.filter
+def is_item(resource):
+    return isinstance(resource, models.MediaItem)
+
+@register.filter
+def is_collection(resource):
+    return isinstance(resource, models.MediaCollection)
+
+@register.filter
+def is_corpus(resource):
+    return isinstance(resource, models.MediaCorpus)
+
+@register.filter
+def is_fonds(resource):
+    return isinstance(resource, models.MediaFonds)
+
+@register.filter
+def is_resource(resource):
+    return is_fonds(resource) or is_corpus(resource)
+
+@register.filter
+def to_dublincore(resource):
+    if isinstance(resource, models.MediaItem):
+        return dc.express_item(resource)
+    elif isinstance(resource, models.MediaCollection):
+        return dc.express_collection(resource)
+    else:
+        return dc.express_generic_resource(resource)
+
+class DescriptionListFieldNode(template.Node):
+    def __init__(self, model, attr, join_with = None, show_empty = False):
+        self.model  = model
+        self.member = attr
+        self.join_with = join_with
+        self.show_empty = show_empty
+
+    def render(self, context):
+        try:
+            model = self.model.resolve(context)
+            if isinstance(self.member, template.Variable):
+                member = self.member.resolve(context)
+            else:
+                member = self.member
+            label = html.escape(capfirst(unicode(model.field_label(member))))
+            try:
+                value = getattr(model, member)
+            except AttributeError:
+                value = '<ERROR: no such field>'
+        except template.VariableDoesNotExist:
+            label = unicode(self.model) + '.' + self.member
+            value = '<ERROR: can\'t find variable>'
+
+        try:
+            value = value()
+        except TypeError:
+            pass
+        if self.join_with:
+            value = self.join_with.join([unicode(v) for v in value])
+        if not value:
+            value = ''
+        if value or self.show_empty:
+            value = html.escape(unicode(value))
+            markup  = '<dt>%s</dt><dd>%s</dd>' % (label, value)
+            return markup
+
+        return ''
+
+@register.tag
+def dl_field(parser, token):
+    cut = token.split_contents()
+    join_with = None
+    show_empty = False
+    if len(cut) == 3:
+        tag_name, model, attr = cut
+    elif len(cut) == 4:
+        tag_name, model, attr, arg3 = cut
+        if arg3 == 'placeholder':
+            show_empty = True
+        else:
+            raise ValueError()
+    elif len(cut) >= 6:
+        tag_name, model, attr, arg3, arg4, arg5  = cut[0:6]
+        if arg3 == 'join' and arg4 == 'with'and arg5[0] == arg5[-1] and arg5[0] in ('"', "'"):
+            join_with = arg5[1:-1]
+        else:
+            raise ValueError()
+        if len(cut) > 6:
+            if cut[6] == 'placeholder':
+                show_empty = True
+            else:
+                raise ValueError();
+    else:
+        raise template.TemplateSyntaxError("%r tag: invalid arguments"
+                                           % token.contents.split()[0])
+
+    if attr[0] == attr[-1] and attr[0] in ('"', "'"):
+        attr = attr[1:-1]
+    else:
+        attr = template.Variable(attr)
+    model = template.Variable(model)
+    return DescriptionListFieldNode(model, attr, join_with=join_with, show_empty=show_empty)
+
+@register.filter
+def prepend(str, prefix):
+    if str:
+        return prefix + unicode(str)
+    return ''
+
+@register.simple_tag
+def field_label(model, field=None):
+    if isinstance(model, basestring):
+        model = getattr(models, model)
+
+    if not field:
+        return capfirst(unicode(model._meta.verbose_name))
+
+    return capfirst(unicode(model.field_label(field)))
+
+@register.simple_tag
+def field_value(object, member):
+    value = getattr(object, member)
+    try:
+        value = value()
+    except TypeError:
+        pass
+    return value
+
+@register.filter
+def is_none(value):
+    return value is None
+
+@register.filter
+def resources_num(value):
+    model = value.model
+    count = value.count()
+    label = str(count)
+    if model == models.MediaItem:
+        label = ungettext('%(count)d item', '%(count)d items', count) % {
+            'count': count, }
+    elif model == models.MediaCollection:
+        label = ungettext('%(count)d collection', '%(count)d collections', count) % {
+            'count': count, }
+
+    return label
+
+@register.filter
+def split(value, sep=','):
+    return value.split(sep)
+
+@register.simple_tag
+def variable_link(object, url_name, url_key):
+    return reverse(url_name, args=[field_value(object, url_key)])
+
+@register.filter
+def equals(value1, value2):
+    return value1 == value2
+
+@register.filter
+def render_flatpage(content):
+    parsed = ""
+    path = getattr(content, 'path', '')
+    if isinstance(content, basestring):
+        content = content.split("\n")
+
+    for line in content:
+        match = re.match('^(\.\. *(?:_[^:]*:|(?:\|\w+\|)? *image::) *)([^ ]+) *$', line)
+        if match:
+            directive, urlname = match.groups()
+            line = directive
+            try:
+                i = urlname.index('telemeta-')
+            except ValueError:
+                i = -1
+            if i == 0:
+                line += reverse(urlname)
+            elif urlname[:1] != '/' and urlname[:4] != 'http':
+                line += reverse('telemeta-flatpage', args=[path + '/../' + urlname])
+            else:
+                line += urlname
+
+        parsed += line + "\n"
+
+    parts = publish_parts(source=smart_str(parsed), writer_name="html4css1", settings_overrides={})
+    return mark_safe('<div class="rst-content">\n' + force_unicode(parts["html_body"]) + '</div>')
+
+render_flatpage.is_safe = True
+
+@register.simple_tag
+def organization():
+    return settings.TELEMETA_ORGANIZATION
+
+@register.simple_tag
+def description():
+    try:
+        description = settings.TELEMETA_OAI_REPOSITORY_NAME
+    except:
+        description = settings.TELEMETA_DESCRIPTION
+        pass
+    return description
+
+class SetVarNode(template.Node):
+
+    def __init__(self, var_name, var_value):
+        self.var_name = var_name
+        self.var_value = var_value
+
+    def render(self, context):
+        try:
+            value = template.Variable(self.var_value).resolve(context)
+        except template.VariableDoesNotExist:
+            value = ""
+        context[self.var_name] = value
+        return u""
+
+@register.tag
+def set_var(parser, token):
+    """
+        {% set <var_name>  = <var_value> %}
+    """
+    parts = token.split_contents()
+    if len(parts) < 4:
+        raise template.TemplateSyntaxError("'set' tag must be of the form:  {% set <var_name>  = <var_value> %}")
+    return SetVarNode(parts[1], parts[3])
+
+@register.simple_tag
+def current_year():
+    return datetime.datetime.now().strftime("%Y")
+
+@register.filter
+def html_line_break(text):
+    return text.replace('\n', '<br />')
+
+@register.simple_tag
+def profile(user):
+    return user.get_profile()
+
+@register.filter
+def to_string(list):
+    if len(list) != 0:
+        return list[0].encode('utf-8')
+    else:
+        return ''
+
+@register.filter
+def get_filename(object):
+    if isinstance(object, unicode):
+       return object.split('/')[-1]
+    elif hasattr(object, 'path'):
+        return object.path.split(os.sep)[-1]
+    else:
+        return ''
+
+@register.filter
+def get_youtube(link):
+    link = link.split('&')
+    if "=" in link[0]:
+        ref = link[0].split('=')[1]
+    else:
+        ref = link[0].split('/')[-1]
+    return 'http://www.youtube.com/embed/'+ref
+
+@register.filter
+def to_utf8(word):
+    return word.encode('utf-8')
+
+@register.filter
+@stringfilter
+def capitalize(value):
+    return value.capitalize()
+
+@register.filter
+@stringfilter
+def mime_to_ext(mime_type):
+    return mime_type.split('/')[1]
+
+@register.filter
+@stringfilter
+def mime_to_media_type(mime_type):
+    if 'video' in mime_type:
+        return 'Video'
+    else:
+        return 'Audio'
+
+@register.simple_tag
+def is_installed(app):
+    return app in settings.INSTALLED_APPS
+
+def do_ifloaded(parser, token):
+    bits = token.split_contents()[1:]
+    var = bits[0]
+    nodelist_true = parser.parse(('else', 'endifloaded'))
+    token = parser.next_token()
+    if token.contents == 'else':
+        nodelist_false = parser.parse(('endifloaded',))
+        parser.delete_first_token()
+    else:
+        nodelist_false = NodeList()
+    return IfLoadedNode(var, nodelist_true, nodelist_false)
+register.tag('ifloaded', do_ifloaded)
+
+
+class IfLoadedNode(template.Node):
+    def __init__(self, var, nodelist_true, nodelist_false=None):
+        self.nodelist_true, self.nodelist_false = nodelist_true, nodelist_false
+        self.var = var
+
+    def __repr__(self):
+        return '<IfLoaded node>'
+
+    def __iter__(self):
+        for node in self.nodelist_true:
+            yield node
+        for node in self.nodelist_false:
+            yield node
+
+    def get_nodes_by_type(self, nodetype):
+        nodes = []
+        if isinstance(self, nodetype):
+            nodes.append(self)
+        nodes.extend(self.nodelist_true.get_nodes_by_type(nodetype))
+        nodes.extend(self.nodelist_false.get_nodes_by_type(nodetype))
+        return nodes
+
+    def render(self, context):
+        for app in settings.INSTALLED_APPS:
+            if str(app) == str(self.var):
+                return self.nodelist_true.render(context)
+        return self.nodelist_false.render(context)
+
+
+@register.filter
+def has_access(user, item):
+    return get_item_access(item, user)
+
+@register.filter
+def get_attr(obj, val):
+    return getattr(obj, val)
+
+@register.simple_tag
+def logo_url():
+    static_url = getattr(settings, 'STATIC_URL', '/static/')
+    return getattr(settings, 'TELEMETA_LOGO', static_url + '/telemeta/images/logo_telemeta_2.png')
+
+@register.assignment_tag
+def get_googletools():
+    return 'googletools' in settings.INSTALLED_APPS
+
+@register.assignment_tag
+def settings_value(name):
+    return getattr(settings, name, "")
diff --git a/telemeta/templatetags/telemeta_utils.py b/telemeta/templatetags/telemeta_utils.py
deleted file mode 100644 (file)
index a085034..0000000
+++ /dev/null
@@ -1,469 +0,0 @@
-from django import template
-from django.utils.http import urlquote
-from telemeta import models
-from django.core.urlresolvers import reverse
-import telemeta.models.dublincore as dc
-from django.utils import html
-from django import template
-from django.utils.text import capfirst
-from django.utils.translation import ungettext
-from docutils.core import publish_parts
-from django.utils.encoding import smart_str, force_unicode
-from django.utils.safestring import mark_safe
-from django import db
-import re
-import os
-import ast
-import datetime
-from django.conf import settings
-from django.template.defaultfilters import stringfilter
-from django.template import NodeList
-from telemeta.views.core import get_item_access
-
-register = template.Library()
-
-@register.filter
-def tolist(dict):
-    "Converts a simple dict into a list"
-    list = []
-    for k, v in dict.iteritems():
-        list.append({'name': k, 'value': v})
-    return list
-
-@register.filter
-def mul(value, arg):
-    "Multiply a numeric value"
-    return value * arg
-
-class TelemetaVersionNode(template.Node):
-    def render(self, context):
-        from telemeta import __version__
-        return __version__
-
-@register.tag
-def telemeta_version(parser, token):
-    "Get Telemeta version number"
-    return TelemetaVersionNode()
-
-class TelemetaUrlNode(template.Node):
-    def render(self, context):
-        from telemeta import __url__
-        return __url__
-
-@register.tag
-def telemeta_url(parser, token):
-    "Get Telemeta project homepage URL"
-    return TelemetaUrlNode()
-
-_js_escapes = (
-    ('\\', '\\\\'),
-    ('"', '\\"'),
-    ("'", "\\'"),
-    ('\n', '\\n'),
-    ('\r', '\\r'),
-    ('\b', '\\b'),
-    ('\f', '\\f'),
-    ('\t', '\\t'),
-    ('\v', '\\v'),
-    ('</', '<\\/'),
-)
-@register.filter
-def escapejs(value):
-    """Backslash-escapes characters for use in JavaScript strings."""
-    for bad, good in _js_escapes:
-        value = value.replace(bad, good)
-    return value
-
-@register.filter
-def build_pattern_dict(query):
-    return ast.literal_eval(query.rstrip())
-
-@register.filter
-def build_query_string(vars):
-    """Build an HTTP query string out of a dict"""
-    if type(vars) == dict:
-      import urllib
-      args = []
-      for k, v in vars.iteritems():
-          if isinstance(v, db.models.Model):
-              v = v.pk
-          elif not isinstance(v, basestring):
-              v = unicode(v)
-          args.append(urlquote(k) + '=' + urlquote(v))
-      return "&".join(args)
-    return ''
-
-@register.filter
-def with_no_sound(vars):
-    _vars = vars.copy()
-    if type(_vars) == dict:
-        if u'sound' in _vars:
-            del _vars[u'sound']
-    return _vars
-
-@register.filter
-def with_sound(vars):
-    _vars = vars.copy()
-    if type(_vars) == dict:
-        if not 'sound' in _vars:
-            _vars['sound'] = True
-    return _vars
-
-
-@register.filter
-def code_or_id(resource):
-    if resource.code:
-        return resource.code
-    else:
-        return resource.id
-
-@register.filter
-def is_item(resource):
-    return isinstance(resource, models.MediaItem)
-
-@register.filter
-def is_collection(resource):
-    return isinstance(resource, models.MediaCollection)
-
-@register.filter
-def is_corpus(resource):
-    return isinstance(resource, models.MediaCorpus)
-
-@register.filter
-def is_fonds(resource):
-    return isinstance(resource, models.MediaFonds)
-
-@register.filter
-def is_resource(resource):
-    return is_fonds(resource) or is_corpus(resource)
-
-@register.filter
-def to_dublincore(resource):
-    if isinstance(resource, models.MediaItem):
-        return dc.express_item(resource)
-    elif isinstance(resource, models.MediaCollection):
-        return dc.express_collection(resource)
-    else:
-        return dc.express_generic_resource(resource)
-
-class DescriptionListFieldNode(template.Node):
-    def __init__(self, model, attr, join_with = None, show_empty = False):
-        self.model  = model
-        self.member = attr
-        self.join_with = join_with
-        self.show_empty = show_empty
-
-    def render(self, context):
-        try:
-            model = self.model.resolve(context)
-            if isinstance(self.member, template.Variable):
-                member = self.member.resolve(context)
-            else:
-                member = self.member
-            label = html.escape(capfirst(unicode(model.field_label(member))))
-            try:
-                value = getattr(model, member)
-            except AttributeError:
-                value = '<ERROR: no such field>'
-        except template.VariableDoesNotExist:
-            label = unicode(self.model) + '.' + self.member
-            value = '<ERROR: can\'t find variable>'
-
-        try:
-            value = value()
-        except TypeError:
-            pass
-        if self.join_with:
-            value = self.join_with.join([unicode(v) for v in value])
-        if not value:
-            value = ''
-        if value or self.show_empty:
-            value = html.escape(unicode(value))
-            markup  = '<dt>%s</dt><dd>%s</dd>' % (label, value)
-            return markup
-
-        return ''
-
-@register.tag
-def dl_field(parser, token):
-    cut = token.split_contents()
-    join_with = None
-    show_empty = False
-    if len(cut) == 3:
-        tag_name, model, attr = cut
-    elif len(cut) == 4:
-        tag_name, model, attr, arg3 = cut
-        if arg3 == 'placeholder':
-            show_empty = True
-        else:
-            raise ValueError()
-    elif len(cut) >= 6:
-        tag_name, model, attr, arg3, arg4, arg5  = cut[0:6]
-        if arg3 == 'join' and arg4 == 'with'and arg5[0] == arg5[-1] and arg5[0] in ('"', "'"):
-            join_with = arg5[1:-1]
-        else:
-            raise ValueError()
-        if len(cut) > 6:
-            if cut[6] == 'placeholder':
-                show_empty = True
-            else:
-                raise ValueError();
-    else:
-        raise template.TemplateSyntaxError("%r tag: invalid arguments"
-                                           % token.contents.split()[0])
-
-    if attr[0] == attr[-1] and attr[0] in ('"', "'"):
-        attr = attr[1:-1]
-    else:
-        attr = template.Variable(attr)
-    model = template.Variable(model)
-    return DescriptionListFieldNode(model, attr, join_with=join_with, show_empty=show_empty)
-
-@register.filter
-def prepend(str, prefix):
-    if str:
-        return prefix + unicode(str)
-    return ''
-
-@register.simple_tag
-def field_label(model, field=None):
-    if isinstance(model, basestring):
-        model = getattr(models, model)
-
-    if not field:
-        return capfirst(unicode(model._meta.verbose_name))
-
-    return capfirst(unicode(model.field_label(field)))
-
-@register.simple_tag
-def field_value(object, member):
-    value = getattr(object, member)
-    try:
-        value = value()
-    except TypeError:
-        pass
-    return value
-
-@register.filter
-def is_none(value):
-    return value is None
-
-@register.filter
-def resources_num(value):
-    model = value.model
-    count = value.count()
-    label = str(count)
-    if model == models.MediaItem:
-        label = ungettext('%(count)d item', '%(count)d items', count) % {
-            'count': count, }
-    elif model == models.MediaCollection:
-        label = ungettext('%(count)d collection', '%(count)d collections', count) % {
-            'count': count, }
-
-    return label
-
-@register.filter
-def split(value, sep=','):
-    return value.split(sep)
-
-@register.simple_tag
-def variable_link(object, url_name, url_key):
-    return reverse(url_name, args=[field_value(object, url_key)])
-
-@register.filter
-def equals(value1, value2):
-    return value1 == value2
-
-@register.filter
-def render_flatpage(content):
-    parsed = ""
-    path = getattr(content, 'path', '')
-    if isinstance(content, basestring):
-        content = content.split("\n")
-
-    for line in content:
-        match = re.match('^(\.\. *(?:_[^:]*:|(?:\|\w+\|)? *image::) *)([^ ]+) *$', line)
-        if match:
-            directive, urlname = match.groups()
-            line = directive
-            try:
-                i = urlname.index('telemeta-')
-            except ValueError:
-                i = -1
-            if i == 0:
-                line += reverse(urlname)
-            elif urlname[:1] != '/' and urlname[:4] != 'http':
-                line += reverse('telemeta-flatpage', args=[path + '/../' + urlname])
-            else:
-                line += urlname
-
-        parsed += line + "\n"
-
-    parts = publish_parts(source=smart_str(parsed), writer_name="html4css1", settings_overrides={})
-    return mark_safe('<div class="rst-content">\n' + force_unicode(parts["html_body"]) + '</div>')
-
-render_flatpage.is_safe = True
-
-@register.simple_tag
-def organization():
-    return settings.TELEMETA_ORGANIZATION
-
-@register.simple_tag
-def description():
-    try:
-        description = settings.TELEMETA_OAI_REPOSITORY_NAME
-    except:
-        description = settings.TELEMETA_DESCRIPTION
-        pass
-    return description
-
-class SetVarNode(template.Node):
-
-    def __init__(self, var_name, var_value):
-        self.var_name = var_name
-        self.var_value = var_value
-
-    def render(self, context):
-        try:
-            value = template.Variable(self.var_value).resolve(context)
-        except template.VariableDoesNotExist:
-            value = ""
-        context[self.var_name] = value
-        return u""
-
-@register.tag
-def set_var(parser, token):
-    """
-        {% set <var_name>  = <var_value> %}
-    """
-    parts = token.split_contents()
-    if len(parts) < 4:
-        raise template.TemplateSyntaxError("'set' tag must be of the form:  {% set <var_name>  = <var_value> %}")
-    return SetVarNode(parts[1], parts[3])
-
-@register.simple_tag
-def current_year():
-    return datetime.datetime.now().strftime("%Y")
-
-@register.filter
-def html_line_break(text):
-    return text.replace('\n', '<br />')
-
-@register.simple_tag
-def profile(user):
-    return user.get_profile()
-
-@register.filter
-def to_string(list):
-    if len(list) != 0:
-        return list[0].encode('utf-8')
-    else:
-        return ''
-
-@register.filter
-def get_filename(object):
-    if isinstance(object, unicode):
-       return object.split('/')[-1]
-    elif hasattr(object, 'path'):
-        return object.path.split(os.sep)[-1]
-    else:
-        return ''
-
-@register.filter
-def get_youtube(link):
-    link = link.split('&')
-    if "=" in link[0]:
-        ref = link[0].split('=')[1]
-    else:
-        ref = link[0].split('/')[-1]
-    return 'http://www.youtube.com/embed/'+ref
-
-@register.filter
-def to_utf8(word):
-    return word.encode('utf-8')
-
-@register.filter
-@stringfilter
-def capitalize(value):
-    return value.capitalize()
-
-@register.filter
-@stringfilter
-def mime_to_ext(mime_type):
-    return mime_type.split('/')[1]
-
-@register.filter
-@stringfilter
-def mime_to_media_type(mime_type):
-    if 'video' in mime_type:
-        return 'Video'
-    else:
-        return 'Audio'
-
-@register.simple_tag
-def is_installed(app):
-    return app in settings.INSTALLED_APPS
-
-def do_ifloaded(parser, token):
-    bits = token.split_contents()[1:]
-    var = bits[0]
-    nodelist_true = parser.parse(('else', 'endifloaded'))
-    token = parser.next_token()
-    if token.contents == 'else':
-        nodelist_false = parser.parse(('endifloaded',))
-        parser.delete_first_token()
-    else:
-        nodelist_false = NodeList()
-    return IfLoadedNode(var, nodelist_true, nodelist_false)
-register.tag('ifloaded', do_ifloaded)
-
-
-class IfLoadedNode(template.Node):
-    def __init__(self, var, nodelist_true, nodelist_false=None):
-        self.nodelist_true, self.nodelist_false = nodelist_true, nodelist_false
-        self.var = var
-
-    def __repr__(self):
-        return '<IfLoaded node>'
-
-    def __iter__(self):
-        for node in self.nodelist_true:
-            yield node
-        for node in self.nodelist_false:
-            yield node
-
-    def get_nodes_by_type(self, nodetype):
-        nodes = []
-        if isinstance(self, nodetype):
-            nodes.append(self)
-        nodes.extend(self.nodelist_true.get_nodes_by_type(nodetype))
-        nodes.extend(self.nodelist_false.get_nodes_by_type(nodetype))
-        return nodes
-
-    def render(self, context):
-        for app in settings.INSTALLED_APPS:
-            if str(app) == str(self.var):
-                return self.nodelist_true.render(context)
-        return self.nodelist_false.render(context)
-
-
-@register.filter
-def has_access(user, item):
-    return get_item_access(item, user)
-
-@register.filter
-def get_attr(obj, val):
-    return getattr(obj, val)
-
-@register.simple_tag
-def logo_url():
-    static_url = getattr(settings, 'STATIC_URL', '/static/')
-    return getattr(settings, 'TELEMETA_LOGO', static_url + '/telemeta/images/logo_telemeta_2.png')
-
-@register.assignment_tag
-def get_googletools():
-    return 'googletools' in settings.INSTALLED_APPS
-
-@register.assignment_tag
-def settings_value(name):
-    return getattr(settings, name, "")