--- /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> </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 }}&page={{ page.previous_page_number }}">{% endif %}« Previous{% if page.has_previous %}</a>{% endif %}
+ |
+ {% if page.has_next %}<a href="?q={{ query }}&page={{ page.next_page_number }}">{% endif %}Next »{% 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()