search engine
authorHarris Baptiste <harris.baptiste@iri.centrepompidou.fr>
Fri, 05 Aug 2016 15:32:49 +0200
changeset 105 eeb3541b343b
parent 104 3c4150867fe7
child 106 233bda6f2865
search engine
src/iconolab/search_indexes.py
src/iconolab/settings/__init__.py
src/iconolab/static/iconolab/js/iconolab-bundle/webpack.config.js
src/iconolab/templates/search/indexes/iconolab/annotation_text.txt
src/iconolab/templates/search/search.html
src/iconolab/urls.py
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/iconolab/search_indexes.py	Fri Aug 05 15:32:49 2016 +0200
@@ -0,0 +1,24 @@
+import datetime
+from haystack import indexes
+from iconolab.models import Annotation
+
+
+class AnnotationIndex(indexes.SearchIndex, indexes.Indexable):
+
+	##indexed field
+	text = indexes.CharField(document=True, use_template=True)
+
+	title = indexes.CharField(model_attr='current_revision__title')
+	description = indexes.CharField(model_attr='current_revision__description')
+	tags = indexes.MultiValueField()
+
+	## tags
+	def get_model(self):
+		return Annotation
+
+	def prepare_tags(self, annotation):
+		return ["toto", "titi", "sesl"]
+
+
+	def index_queryset(self, using=None):
+		return self.get_model().objects.filter(created__lte=datetime.datetime.now()).distinct('current_revision_id');
\ No newline at end of file
--- a/src/iconolab/settings/__init__.py	Fri Aug 05 15:19:47 2016 +0200
+++ b/src/iconolab/settings/__init__.py	Fri Aug 05 15:32:49 2016 +0200
@@ -56,6 +56,7 @@
     'django.contrib.sites',
     'django_comments',
     'django_comments_xtd',
+    'haystack',
     'iconolab.apps.IconolabApp',
     'sorl.thumbnail',
     'notifications'
--- a/src/iconolab/static/iconolab/js/iconolab-bundle/webpack.config.js	Fri Aug 05 15:19:47 2016 +0200
+++ b/src/iconolab/static/iconolab/js/iconolab-bundle/webpack.config.js	Fri Aug 05 15:32:49 2016 +0200
@@ -18,8 +18,11 @@
       },
       {
         test: /\.js$/,
-        loader: 'babel',
-        exclude: /node_modules/,
+        loader: 'babel-loader',
+        //exclude: /node_modules/,
+        query: {
+          presets: ['es2015']
+        },
         "plugins": ["transform-es2015-shorthand-properties"]
       },
       {
@@ -53,8 +56,7 @@
     }),
     new webpack.optimize.UglifyJsPlugin({
       compress: {
-        warnings: false,
-        minimize: true
+        warnings: false
       }
     }),
     new webpack.optimize.OccurenceOrderPlugin()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/iconolab/templates/search/indexes/iconolab/annotation_text.txt	Fri Aug 05 15:32:49 2016 +0200
@@ -0,0 +1,4 @@
+{{ object.current_revision.title }}
+
+{{ object.current_revision.description }}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/iconolab/templates/search/search.html	Fri Aug 05 15:32:49 2016 +0200
@@ -0,0 +1,46 @@
+{% extends 'iconolab_base.html' %}
+
+{% load thumbnail %}
+{% block content %}
+    <h2>Search</h2>
+
+    <form method="get" action=".">
+        <table>
+            {{ form.as_table }}
+            <tr>
+                <td>&nbsp;</td>
+                <td>
+                    <input type="submit" value="Search">
+                </td>
+            </tr>
+        </table>
+
+        {% if query %}
+            <h3>Results</h3>
+
+            {% for result in page.object_list %}
+
+            {% thumbnail result.object.image.media "500x500" crop=False as im %}
+                <p> <img src="{{ im.url }}"></img></p>
+            {% endthumbnail %}
+
+
+                <p>
+                    <a href="{{ result.object.get_absolute_url }}">{{ result.object.current_revision.title }}</a>
+                </p>
+            {% empty %}
+                <p>No results found.</p>
+            {% endfor %}
+
+            {% if page.has_previous or page.has_next %}
+                <div>
+                    {% if page.has_previous %}<a href="?q={{ query }}&amp;page={{ page.previous_page_number }}">{% endif %}&laquo; Previous{% if page.has_previous %}</a>{% endif %}
+                    |
+                    {% if page.has_next %}<a href="?q={{ query }}&amp;page={{ page.next_page_number }}">{% endif %}Next &raquo;{% if page.has_next %}</a>{% endif %}
+                </div>
+            {% endif %}
+        {% else %}
+            {# Show some example queries to run, maybe query syntax, something else? #}
+        {% endif %}
+    </form>
+{% endblock %}
\ No newline at end of file
--- a/src/iconolab/urls.py	Fri Aug 05 15:19:47 2016 +0200
+++ b/src/iconolab/urls.py	Fri Aug 05 15:32:49 2016 +0200
@@ -16,34 +16,31 @@
 from django.core.urlresolvers import reverse_lazy
 from django.conf.urls import url, include
 from django.contrib import admin
-from iconolab import views
+from . import views
 from . import settings
 
 from django.conf.urls.static import static
 from django.contrib.auth.decorators import login_required
 from django.contrib.staticfiles.urls import staticfiles_urlpatterns
-import notifications.urls
 
 urlpatterns = [
-    url(r'^$', views.iconolab.RedirectView.as_view(url=reverse_lazy("home"))),
+    url(r'^$', views.RedirectView.as_view(url=reverse_lazy("home"))),
     url(r'^admin/', admin.site.urls),
-    url(r'^home$', views.iconolab.GlobalHomepageView.as_view(), name="home"),
-    url(r'^collections/(?P<collection_name>[a-z]+)$', views.iconolab.CollectionHomepageView.as_view(), name='collection_home'), # Home fond
-    url(r'^collections/(?P<collection_name>[a-z]+)/items/(?P<item_guid>[^/]+)$', views.iconolab.ShowItemView.as_view(), name='item_detail'),
-    url(r'^collections/(?P<collection_name>[a-z]+)/images/(?P<image_guid>[^/]+)$', views.iconolab.ShowImageView.as_view(), name='image_detail'),
-    url(r'^collections/(?P<collection_name>[a-z]+)/images/(?P<image_guid>[^/]+)/annotations/create$', login_required(views.iconolab.CreateAnnotationView.as_view()), name='annotation_create'),
-    url(r'^collections/(?P<collection_name>[a-z]+)/images/(?P<image_guid>[^/]+)/annotations/(?P<annotation_guid>[^/]+)/detail$', views.iconolab.ShowAnnotationView.as_view(), name='annotation_detail'),
-    url(r'^collections/(?P<collection_name>[a-z]+)/images/(?P<image_guid>[^/]+)/annotations/(?P<annotation_guid>[^/]+)/edit$', login_required(views.iconolab.EditAnnotationView.as_view()), name='annotation_edit'),
-    url(r'^collections/(?P<collection_name>[a-z]+)/images/(?P<image_guid>[^/]+)/annotations/(?P<annotation_guid>[^/]+)/revisions/(?P<revision_guid>[^/]+)/detail', views.iconolab.ShowRevisionView.as_view(), name='revision_detail'),
-    url(r'^collections/(?P<collection_name>[a-z]+)/images/(?P<image_guid>[^/]+)/annotations/(?P<annotation_guid>[^/]+)/revisions/(?P<revision_guid>[^/]+)/merge$', login_required(views.iconolab.MergeProposalView.as_view()), name='annotation_merge'),
-    url(r'^user/(?P<slug>[a-z0-9\-]+)/home/?$', views.iconolab.UserHomeView.as_view(), name="user_home"),
-    url(r'^user/notifications/all/?$', login_required(views.iconolab.UserNotificationsView.as_view()), name="user_notifications"),
-    url(r'^errors/404', views.iconolab.NotFoundErrorView.as_view(), name="404error"),
+    url(r'^home$', views.GlobalHomepageView.as_view(), name="home"),
+    url(r'^collections/(?P<collection_name>[a-z]+)$', views.CollectionHomepageView.as_view(), name='collection_home'), # Home fond
+    url(r'^collections/(?P<collection_name>[a-z]+)/items/(?P<item_guid>[^/]+)$', views.ShowItemView.as_view(), name='item_detail'),
+    url(r'^collections/(?P<collection_name>[a-z]+)/images/(?P<image_guid>[^/]+)$', views.ShowImageView.as_view(), name='image_detail'),
+    url(r'^collections/(?P<collection_name>[a-z]+)/images/(?P<image_guid>[^/]+)/annotations/create$', login_required(views.CreateAnnotationView.as_view()), name='annotation_create'),
+    url(r'^collections/(?P<collection_name>[a-z]+)/images/(?P<image_guid>[^/]+)/annotations/(?P<annotation_guid>[^/]+)/detail$', views.ShowAnnotationView.as_view(), name='annotation_detail'),
+    url(r'^collections/(?P<collection_name>[a-z]+)/images/(?P<image_guid>[^/]+)/annotations/(?P<annotation_guid>[^/]+)/edit$', login_required(views.EditAnnotationView.as_view()), name='annotation_edit'),
+    url(r'^collections/(?P<collection_name>[a-z]+)/images/(?P<image_guid>[^/]+)/annotations/(?P<annotation_guid>[^/]+)/revisions/(?P<revision_guid>[^/]+)/detail', views.ShowRevisionView.as_view(), name='revision_detail'),
+    url(r'^collections/(?P<collection_name>[a-z]+)/images/(?P<image_guid>[^/]+)/annotations/(?P<annotation_guid>[^/]+)/revisions/(?P<revision_guid>[^/]+)/merge$', login_required(views.MergeProposalView.as_view()), name='annotation_merge'),
+    url(r'errors/404', views.NotFoundErrorView.as_view(), name="404error"),
     url(r'^rest', include('restapi.urls')),
     url(r'^account/', include('iconolab.auth.urls', namespace='account')),
     url(r'^comments/', include('django_comments_xtd.urls')),
-    url(r'^comments/annotation/post', views.comments.post_comment_iconolab, name="post_comment"),
-    url('^user/notifications/', include(notifications.urls, namespace='notifications')),
+    url(r'^comments/annotation/post', views.post_comment_iconolab, name="post_comment"),
+    url(r'^search/', include('haystack.urls')),
 ]
 
 urlpatterns += staticfiles_urlpatterns()