| author | veltr |
| Tue, 03 Sep 2013 15:50:59 +0200 | |
| changeset 101 | 19de76fe00a9 |
| parent 100 | 25636bb50756 |
| child 102 | 5d83d0105559 |
--- a/src/jocondelab/locale/en/LC_MESSAGES/django.po Fri Aug 23 15:18:43 2013 +0200 +++ b/src/jocondelab/locale/en/LC_MESSAGES/django.po Tue Sep 03 15:50:59 2013 +0200 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-08-22 09:54-0500\n" +"POT-Creation-Date: 2013-09-03 08:47-0500\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -97,10 +97,41 @@ msgid "English" msgstr "English" -#: templates/jocondelab/ajax_contents.html:2 -#: templates/jocondelab/front_search.html:35 -msgid "results for:" -msgstr "results for:" +#: settings.py:44 +msgid "Italian" +msgstr "Italian" + +#: settings.py:45 +msgid "Spanish" +msgstr "Spanish" + +#: settings.py:46 +msgid "German" +msgstr "German" + +#: settings.py:47 +msgid "Portuguese" +msgstr "Portuguese" + +#: settings.py:48 +msgid "Chinese" +msgstr "Chinese" + +#: settings.py:49 +msgid "Japanese" +msgstr "Japanese" + +#: settings.py:50 +msgid "Catalan" +msgstr "Catalan" + +#: settings.py:51 +msgid "Basque" +msgstr "Basque" + +#: settings.py:52 +msgid "Breton" +msgstr "Breton" #: templates/jocondelab/front_base.html:55 msgid "Menu" @@ -113,14 +144,14 @@ msgstr "Multilingual search" #: templates/jocondelab/front_base.html:61 -#: templates/jocondelab/front_timeline.html:28 -#: templates/jocondelab/front_timeline.html:30 +#: templates/jocondelab/front_timeline.html:27 +#: templates/jocondelab/front_timeline.html:29 msgid "Timeline" msgstr "Timeline" #: templates/jocondelab/front_base.html:64 -#: templates/jocondelab/front_geo.html:34 -#: templates/jocondelab/front_geo.html:36 +#: templates/jocondelab/front_geo.html:33 +#: templates/jocondelab/front_geo.html:35 msgid "World map" msgstr "World map" @@ -133,48 +164,54 @@ msgid "Source: Wikipedia" msgstr "Source: Wikipedia" -#: templates/jocondelab/front_geo.html:43 +#: templates/jocondelab/front_geo.html:42 msgid "Search for a place" msgstr "Search for a place" -#: templates/jocondelab/front_notice.html:44 -#: templates/jocondelab/partial/notice_list.html:9 +#: templates/jocondelab/front_notice.html:50 +#: templates/jocondelab/partial/notice_list.html:13 msgid "Title:" msgstr "Title:" -#: templates/jocondelab/front_notice.html:50 -#: templates/jocondelab/partial/notice_list.html:10 +#: templates/jocondelab/front_notice.html:56 +#: templates/jocondelab/partial/notice_list.html:14 msgid "Denomination:" msgstr "Denomination:" -#: templates/jocondelab/front_notice.html:56 -#: templates/jocondelab/partial/notice_list.html:24 +#: templates/jocondelab/front_notice.html:62 +#: templates/jocondelab/front_notice.html:110 +#: templates/jocondelab/front_notice.html:121 +#: templates/jocondelab/partial/notice_list.html:28 msgid ":" msgstr ":" -#: templates/jocondelab/front_notice.html:70 +#: templates/jocondelab/front_notice.html:76 msgid "Description:" msgstr "Description:" -#: templates/jocondelab/front_notice.html:76 +#: templates/jocondelab/front_notice.html:82 msgid "History:" msgstr "History:" -#: templates/jocondelab/front_notice.html:82 +#: templates/jocondelab/front_notice.html:88 msgid "Conservation location:" msgstr "Conservation location:" -#: templates/jocondelab/front_notice.html:88 +#: templates/jocondelab/front_notice.html:94 msgid "Datasheet rights:" msgstr "Datasheet rights:" -#: templates/jocondelab/front_notice.html:94 +#: templates/jocondelab/front_notice.html:100 msgid "Images rights:" msgstr "Images rights:" -#: templates/jocondelab/front_search.html:35 -msgid "results" -msgstr "results" +#: templates/jocondelab/front_notice.html:112 +msgid "What do you see in this work?" +msgstr "What do you see in this work?" + +#: templates/jocondelab/front_notice.html:123 +msgid "Which other work is a source for this work?" +msgstr "Which other work is a source for this work?" #: templates/jocondelab/term_edit.html:73 msgid "prev" @@ -250,7 +287,15 @@ msgid "Search" msgstr "Search" -#: templates/jocondelab/partial/notice_list.html:14 +#: templates/jocondelab/partial/notice_list.html:3 +msgid "results for:" +msgstr "results for:" + +#: templates/jocondelab/partial/notice_list.html:3 +msgid "results" +msgstr "results" + +#: templates/jocondelab/partial/notice_list.html:18 msgid "Author(s):" msgstr "Author(s):"
--- a/src/jocondelab/locale/en/LC_MESSAGES/djangojs.po Fri Aug 23 15:18:43 2013 +0200 +++ b/src/jocondelab/locale/en/LC_MESSAGES/djangojs.po Tue Sep 03 15:50:59 2013 +0200 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-07-29 22:20+0200\n" +"POT-Creation-Date: 2013-09-03 08:47-0500\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -16,6 +16,23 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +#: static/jocondelab/js/front-geo.js:11 +msgid "Map data © OpenStreetMap contributors" +msgstr "Map data © OpenStreetMap contributors" + +#: static/jocondelab/js/front-notice.js:229 +msgid "Validating Resource…" +msgstr "Validating Resource…" + +#: static/jocondelab/js/front-notice.js:233 +msgid "Saving contribution…" +msgstr "Saving contribution…" + +#: static/jocondelab/js/front-notice.js:257 +#: static/jocondelab/js/front-notice.js:261 +msgid "No DbPedia resource found for term" +msgstr "No DbPedia resource found for term" + #: static/jocondelab/js/jocondelab.js:14 msgid "Redirected from: " msgstr "Redirected from: " @@ -38,14 +55,14 @@ msgid "Confirmez-vous l'invalidation de cette fiche ?" msgstr "Do you confirm this notice validation ?" -#: static/jocondelab/js/jocondelab.js:272 +#: static/jocondelab/js/jocondelab.js:271 msgid "error when treating request" msgstr "error when treating request" -#: static/jocondelab/js/jocondelab.js:341 +#: static/jocondelab/js/jocondelab.js:348 msgid "Ok" msgstr "Ok" -#: static/jocondelab/js/jocondelab.js:354 +#: static/jocondelab/js/jocondelab.js:361 msgid "Cancel" msgstr "Cancel"
--- a/src/jocondelab/locale/fr/LC_MESSAGES/django.po Fri Aug 23 15:18:43 2013 +0200 +++ b/src/jocondelab/locale/fr/LC_MESSAGES/django.po Tue Sep 03 15:50:59 2013 +0200 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-08-22 10:10-0500\n" +"POT-Creation-Date: 2013-09-03 08:42-0500\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -98,10 +98,41 @@ msgid "English" msgstr "Anglais" -#: templates/jocondelab/ajax_contents.html:2 -#: templates/jocondelab/front_search.html:35 -msgid "results for:" -msgstr "résultats pour :" +#: settings.py:44 +msgid "Italian" +msgstr "Italien" + +#: settings.py:45 +msgid "Spanish" +msgstr "Espagnol" + +#: settings.py:46 +msgid "German" +msgstr "Allemand" + +#: settings.py:47 +msgid "Portuguese" +msgstr "Portugais" + +#: settings.py:48 +msgid "Chinese" +msgstr "Chinois" + +#: settings.py:49 +msgid "Japanese" +msgstr "Japonais" + +#: settings.py:50 +msgid "Catalan" +msgstr "Catalan" + +#: settings.py:51 +msgid "Basque" +msgstr "Basque" + +#: settings.py:52 +msgid "Breton" +msgstr "Breton" #: templates/jocondelab/front_base.html:55 msgid "Menu" @@ -114,14 +145,14 @@ msgstr "Recherche multilingue" #: templates/jocondelab/front_base.html:61 -#: templates/jocondelab/front_timeline.html:28 -#: templates/jocondelab/front_timeline.html:30 +#: templates/jocondelab/front_timeline.html:27 +#: templates/jocondelab/front_timeline.html:29 msgid "Timeline" msgstr "Frise chronologique" #: templates/jocondelab/front_base.html:64 -#: templates/jocondelab/front_geo.html:34 -#: templates/jocondelab/front_geo.html:36 +#: templates/jocondelab/front_geo.html:33 +#: templates/jocondelab/front_geo.html:35 msgid "World map" msgstr "Mappemonde" @@ -134,49 +165,55 @@ msgid "Source: Wikipedia" msgstr "Source : Wikipédia" -#: templates/jocondelab/front_geo.html:43 +#: templates/jocondelab/front_geo.html:42 msgid "Search for a place" msgstr "Rechercher un lieu" -#: templates/jocondelab/front_notice.html:44 -#: templates/jocondelab/partial/notice_list.html:9 +#: templates/jocondelab/front_notice.html:50 +#: templates/jocondelab/partial/notice_list.html:13 msgid "Title:" msgstr "Titre :" -#: templates/jocondelab/front_notice.html:50 -#: templates/jocondelab/partial/notice_list.html:10 +#: templates/jocondelab/front_notice.html:56 +#: templates/jocondelab/partial/notice_list.html:14 msgid "Denomination:" msgstr "Dénomination :" -#: templates/jocondelab/front_notice.html:56 -#: templates/jocondelab/partial/notice_list.html:24 +#: templates/jocondelab/front_notice.html:62 +#: templates/jocondelab/front_notice.html:110 +#: templates/jocondelab/front_notice.html:121 +#: templates/jocondelab/partial/notice_list.html:28 msgid ":" msgstr " :" -#: templates/jocondelab/front_notice.html:70 +#: templates/jocondelab/front_notice.html:76 #, fuzzy msgid "Description:" msgstr "Description :" -#: templates/jocondelab/front_notice.html:76 +#: templates/jocondelab/front_notice.html:82 msgid "History:" msgstr "Histoire :" -#: templates/jocondelab/front_notice.html:82 +#: templates/jocondelab/front_notice.html:88 msgid "Conservation location:" msgstr "Lieu de conservation :" -#: templates/jocondelab/front_notice.html:88 +#: templates/jocondelab/front_notice.html:94 msgid "Datasheet rights:" msgstr "Copyright notice :" -#: templates/jocondelab/front_notice.html:94 +#: templates/jocondelab/front_notice.html:100 msgid "Images rights:" msgstr "Droits photographiques :" -#: templates/jocondelab/front_search.html:35 -msgid "results" -msgstr "résultats" +#: templates/jocondelab/front_notice.html:112 +msgid "What do you see in this work?" +msgstr "Que voyez-vous dans cette œuvre ?" + +#: templates/jocondelab/front_notice.html:123 +msgid "Which other work is a source for this work?" +msgstr "Quelle autre œuvre est une source de la représentation ?" #: templates/jocondelab/term_edit.html:73 msgid "prev" @@ -252,7 +289,15 @@ msgid "Search" msgstr "Rech." -#: templates/jocondelab/partial/notice_list.html:14 +#: templates/jocondelab/partial/notice_list.html:3 +msgid "results for:" +msgstr "résultats pour :" + +#: templates/jocondelab/partial/notice_list.html:3 +msgid "results" +msgstr "résultats" + +#: templates/jocondelab/partial/notice_list.html:18 msgid "Author(s):" msgstr "Auteur(s) :"
--- a/src/jocondelab/locale/fr/LC_MESSAGES/djangojs.po Fri Aug 23 15:18:43 2013 +0200 +++ b/src/jocondelab/locale/fr/LC_MESSAGES/djangojs.po Tue Sep 03 15:50:59 2013 +0200 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-07-29 22:20+0200\n" +"POT-Creation-Date: 2013-09-03 08:45-0500\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -17,6 +17,23 @@ "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" +#: static/jocondelab/js/front-geo.js:11 +msgid "Map data © OpenStreetMap contributors" +msgstr "Données cartographiques © Contributeurs OpenStreetMap" + +#: static/jocondelab/js/front-notice.js:229 +msgid "Validating Resource…" +msgstr "Validation de la ressource…" + +#: static/jocondelab/js/front-notice.js:233 +msgid "Saving contribution…" +msgstr "Enregistrement de la contribution…" + +#: static/jocondelab/js/front-notice.js:257 +#: static/jocondelab/js/front-notice.js:261 +msgid "No DbPedia resource found for term" +msgstr "Pas de ressource DbPédia trouvée pour le terme" + #: static/jocondelab/js/jocondelab.js:14 msgid "Redirected from: " msgstr "Redirigé de : " @@ -38,14 +55,14 @@ msgid "Confirmez-vous l'invalidation de cette fiche ?" msgstr "Confirmez-vous la validation de cette fiche ?" -#: static/jocondelab/js/jocondelab.js:272 +#: static/jocondelab/js/jocondelab.js:271 msgid "error when treating request" msgstr "Erreur lors du traitement de la requête" -#: static/jocondelab/js/jocondelab.js:341 +#: static/jocondelab/js/jocondelab.js:348 msgid "Ok" msgstr "Ok" -#: static/jocondelab/js/jocondelab.js:354 +#: static/jocondelab/js/jocondelab.js:361 msgid "Cancel" msgstr "Annuler"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/jocondelab/migrations/0007_auto__add_contribution_tables.py Tue Sep 03 15:50:59 2013 +0200 @@ -0,0 +1,315 @@ +# -*- coding: utf-8 -*- +import datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + # Adding model 'ContributedFields' + db.create_table(u'jocondelab_contributedfields', ( + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('term', self.gf('django.db.models.fields.related.ForeignKey')(related_name='dbpedia_fields', to=orm['jocondelab.ContributedTerm'])), + ('dbpedia_uri', self.gf('django.db.models.fields.URLField')(max_length=2048, db_index=True)), + ('language_code', self.gf('django.db.models.fields.CharField')(max_length=15, db_index=True)), + ('thumbnail', self.gf('django.db.models.fields.URLField')(max_length=2048, null=True, blank=True)), + ('label', self.gf('django.db.models.fields.CharField')(max_length=2048, null=True, blank=True)), + ('abstract', self.gf('django.db.models.fields.TextField')(null=True, blank=True)), + )) + db.send_create_signal('jocondelab', ['ContributedFields']) + + # Adding model 'Contribution' + db.create_table(u'jocondelab_contribution', ( + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('term', self.gf('django.db.models.fields.related.ForeignKey')(related_name='contributions', to=orm['jocondelab.ContributedTerm'])), + ('thesaurus', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['core.Thesaurus'])), + ('notice', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['core.Notice'])), + ('contribution_count', self.gf('django.db.models.fields.IntegerField')(default=0, db_index=True)), + )) + db.send_create_signal('jocondelab', ['Contribution']) + + # Adding model 'ContributedTerm' + db.create_table(u'jocondelab_contributedterm', ( + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('created_at', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)), + ('dbpedia_uri', self.gf('django.db.models.fields.URLField')(unique=True, max_length=2048, db_index=True)), + ('dbpedia_language', self.gf('django.db.models.fields.CharField')(max_length=15, db_index=True)), + )) + db.send_create_signal('jocondelab', ['ContributedTerm']) + + + def backwards(self, orm): + # Deleting model 'ContributedFields' + db.delete_table(u'jocondelab_contributedfields') + + # Deleting model 'Contribution' + db.delete_table(u'jocondelab_contribution') + + # Deleting model 'ContributedTerm' + db.delete_table(u'jocondelab_contributedterm') + + + models = { + u'auth.group': { + 'Meta': {'object_name': 'Group'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + u'auth.permission': { + 'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + u'contenttypes.contenttype': { + 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, + 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) + }, + 'core.autrnoticeterm': { + 'Meta': {'object_name': 'AutrNoticeTerm', '_ormbases': ['core.NoticeTerm']}, + u'noticeterm_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['core.NoticeTerm']", 'unique': 'True', 'primary_key': 'True'}) + }, + 'core.domnnoticeterm': { + 'Meta': {'object_name': 'DomnNoticeTerm', '_ormbases': ['core.NoticeTerm']}, + u'noticeterm_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['core.NoticeTerm']", 'unique': 'True', 'primary_key': 'True'}) + }, + 'core.ecolnoticeterm': { + 'Meta': {'object_name': 'EcolNoticeTerm', '_ormbases': ['core.NoticeTerm']}, + u'noticeterm_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['core.NoticeTerm']", 'unique': 'True', 'primary_key': 'True'}) + }, + 'core.epoqnoticeterm': { + 'Meta': {'object_name': 'EpoqNoticeTerm', '_ormbases': ['core.NoticeTerm']}, + u'noticeterm_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['core.NoticeTerm']", 'unique': 'True', 'primary_key': 'True'}) + }, + 'core.lieuxnoticeterm': { + 'Meta': {'object_name': 'LieuxNoticeTerm', '_ormbases': ['core.NoticeTerm']}, + u'noticeterm_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['core.NoticeTerm']", 'unique': 'True', 'primary_key': 'True'}) + }, + 'core.notice': { + 'Meta': {'object_name': 'Notice'}, + 'adpt': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'appl': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), + 'aptn': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'attr': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'autr': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), + 'autr_terms': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'autr+'", 'symmetrical': 'False', 'through': "orm['core.AutrNoticeTerm']", 'to': "orm['core.Term']"}), + 'bibl': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'comm': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'contact': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), + 'coor': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), + 'copy': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), + 'dacq': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), + 'data': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}), + 'dation': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}), + 'ddpt': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}), + 'decv': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), + 'deno': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), + 'depo': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), + 'desc': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'desy': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}), + 'dims': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}), + 'dmaj': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), + 'dmis': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}), + 'domn': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}), + 'domn_terms': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'domn+'", 'symmetrical': 'False', 'through': "orm['core.DomnNoticeTerm']", 'to': "orm['core.Term']"}), + 'drep': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), + 'ecol': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}), + 'ecol_terms': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'ecol+'", 'symmetrical': 'False', 'through': "orm['core.EcolNoticeTerm']", 'to': "orm['core.Term']"}), + 'epoq': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}), + 'epoq_terms': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'epoq+'", 'symmetrical': 'False', 'through': "orm['core.EpoqNoticeTerm']", 'to': "orm['core.Term']"}), + 'etat': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'expo': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'gene': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), + 'geohi': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), + 'hist': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'image': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'insc': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), + 'inv': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}), + 'label': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}), + 'labo': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), + 'lieux': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), + 'lieux_terms': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'lieux+'", 'symmetrical': 'False', 'through': "orm['core.LieuxNoticeTerm']", 'to': "orm['core.Term']"}), + 'loca': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}), + 'loca2': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}), + 'mill': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}), + 'milu': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}), + 'mosa': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}), + 'msgcom': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'museo': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}), + 'nsda': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}), + 'onom': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'paut': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'pdat': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'pdec': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'peoc': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}), + 'peri': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}), + 'peri_terms': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'peri+'", 'symmetrical': 'False', 'through': "orm['core.PeriNoticeTerm']", 'to': "orm['core.Term']"}), + 'peru': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), + 'phot': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), + 'pins': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'plieux': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'prep': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'puti': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'reda': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), + 'ref': ('django.db.models.fields.CharField', [], {'max_length': '20', 'unique': 'True', 'null': 'True', 'blank': 'True'}), + 'refim': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}), + 'repr': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'repr_terms': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'repr+'", 'symmetrical': 'False', 'through': "orm['core.ReprNoticeTerm']", 'to': "orm['core.Term']"}), + 'srep': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), + 'srep_terms': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'srep+'", 'symmetrical': 'False', 'through': "orm['core.SrepNoticeTerm']", 'to': "orm['core.Term']"}), + 'stat': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), + 'tech': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}), + 'tico': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'titr': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'util': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), + 'video': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}), + 'www': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}) + }, + 'core.noticeterm': { + 'Meta': {'object_name': 'NoticeTerm'}, + 'graph': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'notice': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['core.Notice']"}), + 'term': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['core.Term']"}) + }, + 'core.perinoticeterm': { + 'Meta': {'object_name': 'PeriNoticeTerm', '_ormbases': ['core.NoticeTerm']}, + u'noticeterm_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['core.NoticeTerm']", 'unique': 'True', 'primary_key': 'True'}) + }, + 'core.reprnoticeterm': { + 'Meta': {'object_name': 'ReprNoticeTerm', '_ormbases': ['core.NoticeTerm']}, + u'noticeterm_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['core.NoticeTerm']", 'unique': 'True', 'primary_key': 'True'}) + }, + 'core.srepnoticeterm': { + 'Meta': {'object_name': 'SrepNoticeTerm', '_ormbases': ['core.NoticeTerm']}, + u'noticeterm_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['core.NoticeTerm']", 'unique': 'True', 'primary_key': 'True'}) + }, + 'core.term': { + 'Meta': {'object_name': 'Term'}, + 'alternative_wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), + 'alternative_wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}), + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'dbpedia_uri': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}), + 'lang': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '128', 'null': 'True', 'blank': 'True'}), + u'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), + u'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), + 'link_semantic_level': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True', 'db_index': 'True', 'blank': 'True'}), + 'nb_notice': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}), + 'normalized_label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'db_index': 'True'}), + 'notices': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'terms+'", 'symmetrical': 'False', 'through': "orm['core.NoticeTerm']", 'to': "orm['core.Notice']"}), + 'parent': ('mptt.fields.TreeForeignKey', [], {'blank': 'True', 'related_name': "'children'", 'null': 'True', 'to': "orm['core.Term']"}), + u'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), + 'thesaurus': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['core.Thesaurus']"}), + u'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}), + 'uri': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}), + 'url_status': ('django.db.models.fields.IntegerField', [], {'default': 'None', 'null': 'True', 'db_index': 'True', 'blank': 'True'}), + 'validated': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'db_index': 'True'}), + 'validation_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), + 'validator': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['core.User']", 'null': 'True', 'blank': 'True'}), + 'wikipedia_edition': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'wikipedia_pageid': ('django.db.models.fields.BigIntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}), + 'wikipedia_revision_id': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}), + 'wikipedia_url': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}), + 'wp_alternative_label': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '1024', 'null': 'True', 'blank': 'True'}), + 'wp_label': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '1024', 'null': 'True', 'blank': 'True'}) + }, + 'core.thesaurus': { + 'Meta': {'ordering': "['label']", 'object_name': 'Thesaurus'}, + 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'label': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128', 'db_index': 'True'}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), + 'uri': ('django.db.models.fields.URLField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}) + }, + 'core.user': { + 'Meta': {'object_name': 'User'}, + 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), + 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'language': ('django.db.models.fields.CharField', [], {'default': "'en'", 'max_length': '2'}), + 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + 'jocondelab.contributedfields': { + 'Meta': {'object_name': 'ContributedFields'}, + 'abstract': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'dbpedia_uri': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'db_index': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'label': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}), + 'language_code': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}), + 'term': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'dbpedia_fields'", 'to': "orm['jocondelab.ContributedTerm']"}), + 'thumbnail': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}) + }, + 'jocondelab.contributedterm': { + 'Meta': {'object_name': 'ContributedTerm'}, + 'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'dbpedia_language': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}), + 'dbpedia_uri': ('django.db.models.fields.URLField', [], {'unique': 'True', 'max_length': '2048', 'db_index': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) + }, + 'jocondelab.contribution': { + 'Meta': {'object_name': 'Contribution'}, + 'contribution_count': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'notice': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['core.Notice']"}), + 'term': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'contributions'", 'to': "orm['jocondelab.ContributedTerm']"}), + 'thesaurus': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['core.Thesaurus']"}) + }, + 'jocondelab.country': { + 'Meta': {'object_name': 'Country'}, + 'dbpedia_uri': ('django.db.models.fields.URLField', [], {'unique': 'True', 'max_length': '2048', 'db_index': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'iso_code_2': ('django.db.models.fields.CharField', [], {'max_length': '2', 'db_index': 'True'}), + 'iso_code_3': ('django.db.models.fields.CharField', [], {'max_length': '3', 'db_index': 'True'}) + }, + 'jocondelab.dbpediafields': { + 'Meta': {'object_name': 'DbpediaFields'}, + 'abstract': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + 'dbpedia_uri': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'db_index': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'label': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}), + 'language_code': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}), + 'term': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'dbpedia_fields'", 'to': "orm['core.Term']"}), + 'thumbnail': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}) + }, + 'jocondelab.dbpediageo': { + 'Meta': {'object_name': 'DbpediaGeo'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'latitude': ('django.db.models.fields.FloatField', [], {'db_index': 'True'}), + 'longitude': ('django.db.models.fields.FloatField', [], {'db_index': 'True'}), + 'term': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'geo'", 'unique': 'True', 'to': "orm['core.Term']"}) + }, + 'jocondelab.dbpediayears': { + 'Meta': {'object_name': 'DbpediaYears'}, + 'end_year': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'start_year': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}), + 'term': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'years'", 'unique': 'True', 'to': "orm['core.Term']"}) + }, + 'jocondelab.termlinks': { + 'Meta': {'object_name': 'TermLinks'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'object': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'termlinks_objects'", 'to': "orm['core.Term']"}), + 'subject': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'termlinks_subjects'", 'to': "orm['core.Term']"}) + } + } + + complete_apps = ['jocondelab'] \ No newline at end of file
--- a/src/jocondelab/models/__init__.py Fri Aug 23 15:18:43 2013 +0200 +++ b/src/jocondelab/models/__init__.py Tue Sep 03 15:50:59 2013 +0200 @@ -1,3 +1,4 @@ -__all__ = ['Country', 'DbpediaFields', 'TermLinks', 'DbpediaYears', 'DbpediaGeo'] +__all__ = ['Country', 'DbpediaFields', 'TermLinks', 'DbpediaYears', 'DbpediaGeo', 'ContributedTerm', 'ContributedFields', 'Contribution' ] -from jocondelab.models.data import Country, DbpediaFields, TermLinks, DbpediaYears, DbpediaGeo \ No newline at end of file +from jocondelab.models.data import Country, DbpediaFields, TermLinks, DbpediaYears, DbpediaGeo +from jocondelab.models.contribution import ContributedTerm, ContributedFields, Contribution \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/jocondelab/models/contribution.py Tue Sep 03 15:50:59 2013 +0200 @@ -0,0 +1,39 @@ +# -*- coding: utf-8 -*- +''' +Created on Jul 31, 2013 + +@author: ymh +''' +from django.db import models +from core.models import Thesaurus, Notice + +class ContributedTerm(models.Model): + + created_at = models.DateTimeField(auto_now_add=True) + dbpedia_uri = models.URLField(max_length=2048, unique=True, blank=False, null=False, db_index=True) + dbpedia_language = models.CharField(max_length=15, blank=False, null=False, db_index=True) + + class Meta: + app_label = 'jocondelab' + +class ContributedFields(models.Model): + + term = models.ForeignKey(ContributedTerm, blank=False, null=False, db_index=True, related_name="dbpedia_fields") + dbpedia_uri = models.URLField(max_length=2048, blank=False, null=False, db_index=True, unique=False) + language_code = models.CharField(max_length=15, blank=False, null=False, db_index=True) + thumbnail = models.URLField(max_length=2048, blank=True, null=True, db_index=False) + label = models.CharField(max_length=2048, unique=False, blank=True, null=True) + abstract = models.TextField(blank=True, null=True) + + class Meta: + app_label = 'jocondelab' + +class Contribution(models.Model): + + term = models.ForeignKey(ContributedTerm, blank=False, null=False, db_index=True, related_name="contributions") + thesaurus = models.ForeignKey(Thesaurus, blank=False, null=False, db_index=True) + notice = models.ForeignKey(Notice, blank=False, null=False, db_index=True) + contribution_count = models.IntegerField(blank=False, null=False, default=0, db_index=True, editable=False) + + class Meta: + app_label = 'jocondelab'
--- a/src/jocondelab/static/jocondelab/css/front-common.css Fri Aug 23 15:18:43 2013 +0200 +++ b/src/jocondelab/static/jocondelab/css/front-common.css Tue Sep 03 15:50:59 2013 +0200 @@ -174,6 +174,14 @@ background: url(../img/search-icon.png) right center no-repeat #ffffff; } +.header-search-input::-moz-placeholder { + font-size: .8em; font-style: italic; +} + +.header-search-input::-webkit-input-placeholder { + font-size: .8em; font-style: italic; +} + /* HEADER > MENUS */ .top-menus { @@ -294,6 +302,10 @@ border-radius: 3px; margin: 0 5px 2px 0; } +.notice-term:hover { + background: #ffffff; +} + .big-search-form { text-align: center; margin: 20px 0; }
--- a/src/jocondelab/static/jocondelab/css/front-notice.css Fri Aug 23 15:18:43 2013 +0200 +++ b/src/jocondelab/static/jocondelab/css/front-notice.css Tue Sep 03 15:50:59 2013 +0200 @@ -32,22 +32,18 @@ } .notice-term { - display: inline-block; padding: 3px; - border-radius: 3px; margin: -2px 5px 4px 0; + margin: -2px 5px 4px 0; } -.term-translated { - background: #d0e0f0; -} - -.term-translated:hover { - background: #ffffff; -} - -.term-untranslated { - color: #333333; font-style: italic; +.notice-term.term-untranslated { + background: transparent; color: #333333; font-style: italic; } .datasheet-small { font-size: 11px; } + +.notice-contribution-field { + font-size: 12px; line-height: 20px; height: 20px; padding: 0 4px; border: 1px solid #999999; margin-bottom: 8px; + border-radius: 4px; width: 90%; +}
--- a/src/jocondelab/static/jocondelab/js/front-common.js Fri Aug 23 15:18:43 2013 +0200 +++ b/src/jocondelab/static/jocondelab/js/front-common.js Tue Sep 03 15:50:59 2013 +0200 @@ -60,7 +60,7 @@ if (label) { wkUrl += "wiki/" + encodeURI(label.replace(/ /g,'_')); } - $h2.text(uriData.l || uriData.lr || ""); + $h2.text((uriData.l && uriData.lr) ? (uriData.l + " → " + uriData.lr) : label); $abstract.text((uriData.a || uriData.ar || "").replace(/^(.{240,260})\s.+$/,'$1…').substr(0,261)); $source.attr("href", wkUrl); moveDbpediaPopin(); @@ -101,6 +101,7 @@ if (!hovering) { $overlay.hide(); deferredRemovePopin(); + $refdiv = null; } }, 0); } @@ -110,7 +111,7 @@ mouseenter: function(e) { $refdiv = $(this); var dbpediaUri = $refdiv.attr("data-dbpedia-uri") || defaultUri; - if (!dbpediaUri) { + if (!dbpediaUri || dbpediaUri === "None") { return; } hovering = dbpediaUri;
--- a/src/jocondelab/static/jocondelab/js/front-notice.js Fri Aug 23 15:18:43 2013 +0200 +++ b/src/jocondelab/static/jocondelab/js/front-notice.js Tue Sep 03 15:50:59 2013 +0200 @@ -1,4 +1,270 @@ $(function() { + $('.notice-images a').magnificPopup({type:'image'}); bindDbpediaBox(".notice-term a"); + + var lang = document.querySelector("html").lang.substr(0,2) || "en", + labelsCache = {}, + dbpCache = {}, + eventCache = {}, + errorCache = {}; + + var frSparqlTpl = _.template( + 'select distinct * where { ?s rdfs:label "<%= label %>"@<%= lang %> . ' + + 'OPTIONAL { ?s rdfs:label ?l. ?s dbpedia-owl:abstract ?a. FILTER(lang(?a)=lang(?l)) }. ' + + 'OPTIONAL { ?s dbpedia-owl:thumbnail ?t }. OPTIONAL { ?s dbpedia-owl:wikiPageRedirects ?r }.' + + 'OPTIONAL { ?r rdfs:label ?lr. ?r dbpedia-owl:abstract ?ar FILTER(lang(?ar)=lang(?lr)) }. ' + + 'OPTIONAL { ?r dbpedia-owl:thumbnail ?tr }. ' + + 'FILTER(!regex(?s, ":[^/]+$" ) && regex(?s, "^http://fr.dbpedia.org/resource/")) }' +// + 'OPTIONAL { ?s dbpedia-owl:wikiPageDisambiguates ?d }. OPTIONAL { ?d rdfs:label ?ld FILTER( langMatches( lang(?ld), "en" ) ) }. ' + ); + + var otherSparqlTpl = _.template( + 'select distinct * where { ' + + '?s foaf:isPrimaryTopicOf <<%= wikipedia_url %>>. ' + + 'OPTIONAL { ?s dbpedia-owl:wikiPageRedirects ?r }. ' + + 'OPTIONAL { ?s rdfs:label ?l . ?s dbpedia-owl:abstract ?a . FILTER(lang(?l)=lang(?a)) }. ' + + 'OPTIONAL { ?s dbpedia-owl:thumbnail ?t }. ' + + 'OPTIONAL { ?r rdfs:label ?lr . ?r dbpedia-owl:abstract ?ar . FILTER(lang(?lr)=lang(?ar)) }. ' + + 'OPTIONAL { ?r dbpedia-owl:thumbnail ?tr }. ' + + '}' + ); + + function getDbpedia(label, callback, errorcb) { + + function onBindingsLoaded(sparqlData, initialData) { + var bindings = sparqlData.results.bindings, + res = initialData || {}; + res.translations = _(sparqlData.results.bindings).map(function(b) { + var t = {} + t.dbpedia_uri = b.s.value; + if (b.r) { t.dbpedia_uri = b.r.value; } + if (b.a) { t.abstract = b.a.value; } + if (b.ar) { t.abstract = b.ar.value; } + if (b.t) { t.thumbnail = b.t.value; } + if (b.tr) { t.thumbnail = b.tr.value; } + if (b.l) { + t.label = b.l.value; + t.language = b.l["xml:lang"]; + } + if (b.lr) { + t.label = b.lr.value; + t.language = b.lr["xml:lang"]; + } + return t; + }); + res.local = _(res.translations).find(function(t) { + return t.language === lang; + }) || {}; + res.label = res.local.label || label; + res.dbpedia_uri = res.translations[0].dbpedia_uri; + res.wikipedia_url = "http://" + lang + ".wikipedia.org/wiki/" + encodeURIComponent(res.label.replace(/ /g,'_')); + dbpCache[label] = res; + _(eventCache[label]).each(function(cb) { + cb(label, res); + }); + delete eventCache[label]; + if (res.label !== label) { + dbpCache[res.label] = res; + _(eventCache[res.label]).each(function(cb) { + cb(res.label, res); + }); + delete eventCache[res.label]; + } + } + + function onError() { + dbpCache[label] = false; + _(errorCache[label]).each(function(cb) { + cb(label); + }); + delete errorCache[label]; + } + + if (dbpCache[label]) { + //console.log("Data already in cache", dbpCache[label]); + if (typeof callback === "function") { callback(label, dbpCache[label]); } + return; + } + if (dbpCache[label] === false) { + if (typeof errorcb === "function") { errorcb(label); } + return; + } + if (typeof eventCache[label] === "undefined") { + eventCache[label] = []; + errorCache[label] = []; + } + if (typeof callback === "function") { eventCache[label].push(callback); } + if (typeof errorcb === "function") { errorCache[label].push(callback); } + + if (typeof dbpCache[label] === "undefined") { + dbpCache[label] = null; + $.ajax({ + url: wikipedia_urls.fr.dbpedia_sparql_url, + data: { + query: frSparqlTpl( { label: label, lang: lang } ), + format: "application/sparql-results+json" + }, + dataType: "json", + success: function(data) { + if (data.results.bindings.length) { + //console.log("Data found in french DbPedia", data.results.bindings[0]); + onBindingsLoaded(data, { dbpedia_language: "fr" }); + } else { + if (lang !== "fr" && wikipedia_urls[lang]) { + var wk_url = wikipedia_urls[lang].page_url + '/' + encodeURIComponent(label.replace(/ /g,'_')); + $.ajax({ + url: wikipedia_urls[lang].dbpedia_sparql_url, + data: { + query: otherSparqlTpl({ wikipedia_url: wk_url }), + format: "application/sparql-results+json" + }, + dataType: "json", + success: function(data) { + if (data.results.bindings.length) { + //console.log("Data found in "+lang+" DbPedia", data.results.bindings[0]); + onBindingsLoaded(data, { dbpedia_language: lang }); + } else { + //console.log("Data not found in "+lang+" DbPedia"); + onError(); + } + }, + error: onError + }); + } else { + //console.log("Data not found in french DbPedia and there is no known endpoint for "+lang); + onError(); + } + } + }, + error: onError + }); + } + } + + var $curitem = null, + $overlay = $(".dbpedia-overlay"), + $overlayImg = $overlay.find("img"), + $h2 = $overlay.find("h2"), + $abstract = $overlay.find(".dbpedia-abstract"), + $source = $overlay.find(".dbpedia-source a"), + hovering = false; + + $overlay.hover(function() { + hovering = true; + }, function() { + hovering = false; + hideOverlay(); + }); + + function hideOverlay() { + if (!$curitem && !hovering) { + $overlayImg.attr("src",""); + $overlay.hide(); + } + } + + function showOverlay(label, termdata) { + if (!$curitem) { + return; + } + var o = $curitem.offset(); + $overlay.css({ + top: o.top + $curitem.outerHeight(), + left: o.left - $overlay.outerWidth(), + }).show().attr("data-dbpedia-uri", termdata.dbpedia_uri); + if (termdata.local.thumbnail) { + $overlayImg.attr("src",termdata.local.thumbnail).show(); + } else { + $overlayImg.hide(); + } + $h2.text(termdata.label); + if (label !== termdata.label) { + $h2.prepend($('<span style="font-style: italic;">').text(label + " → ")); + } + $abstract.text((termdata.local.abstract || "").replace(/^(.{240,260})\s.+$/,'$1…').substr(0,261)); + $source.attr("href", termdata.wikipedia_url); + } + + var eltTemplate = '<li class="notice-term term-translated"><a class="term-link" href="#"></a></li>'; + + $(".notice-contribution-field").autocomplete({ + source: function( request, response ) { + if (labelsCache[request.term]) { + response(labelsCache[request.term]); + } + if (typeof labelsCache[request.term] === "undefined") { + labelsCache[request.term] = false; + $.ajax({ + url : "http://" + lang + ".wikipedia.org/w/api.php", + dataType: "jsonp", + data : { + action: "opensearch", + search: request.term, + format: "json", + limit: 10 + }, + success: function( data ) { + labelsCache[request.term] = _.map( data[1], function(item) { + return { + label: item, + value: item + }; + }); + response(labelsCache[request.term]); + } + }); + } + }, + focus: function(e, ui) { + $curitem = $(this); + hovering = false; + $overlay.hide(); + getDbpedia(ui.item.label, showOverlay); + }, + select: function(e, ui) { + var $this = $(this), + $newItem = $(eltTemplate); + $this.next(".notice-term-list").append($newItem); + $newItem.find(".term-link").text(gettext("Validating Resource…")); + $this.autocomplete("close"); + $this.val(""); + getDbpedia(ui.item.label, function(label, termdata) { + $newItem.find(".term-link").text(gettext("Saving contribution…")); + if (termdata.dbpedia_uri) { + bindDbpediaBox($newItem.find("term-link"), termdata.dbpedia_uri); + $.ajax({ + url: contribute_url, + dataType: "json", + type: "POST", + data: { + csrfmiddlewaretoken: csrf_token, + notice_id: notice_id, + dbpedia_language: termdata.dbpedia_language, + dbpedia_uri: termdata.dbpedia_uri, + translations: JSON.stringify(termdata.translations), + thesaurus_label: $this.attr("data-thesaurus") + }, + success: function() { + $newItem.find(".term-link").text(termdata.label); + }, + error: function() { + $newItem.remove(); + } + }) + } else { + $newItem.remove(); + alert(gettext("No DbPedia resource found for term") + " " + ui.item.label); + } + }, function() { + $newItem.remove(); + alert(gettext("No DbPedia resource found for term") + " " + ui.item.label); + }); + }, + close: function(e, ui) { + $curitem = null; + hideOverlay(); + }, + minLength: 2 + }); });
--- a/src/jocondelab/templates/jocondelab/front_notice.html Fri Aug 23 15:18:43 2013 +0200 +++ b/src/jocondelab/templates/jocondelab/front_notice.html Tue Sep 03 15:50:59 2013 +0200 @@ -9,6 +9,12 @@ {% block js_declaration %} {{block.super}} + <script type="text/javascript"> + var wikipedia_urls = {{wikipedia_urls|safe}}, + contribute_url = "{% url 'ajax_contribute' %}", + notice_id = "{{object.id}}", + csrf_token = "{{csrf_token}}"; + </script> <script type="text/javascript" src="{{STATIC_URL}}jocondelab/js/front-notice.js"></script> {% endblock %} @@ -55,7 +61,7 @@ <tr> <th>{% trans thesaurus context 'Thesaurus label' %}{% trans ':' %}</th> <td> - <ul class="datasheet-contents notice-term-list"> + <ul class="notice-term-list"> {% for termtype, terms in terms.items %} {% for term in terms %} <li class="notice-term term-{{termtype}}"><a href="{% url 'front_search' %}?q={{term.locale_label|urlencode}}" data-dbpedia-uri="{{term.dbpedia_uri}}">{{term.locale_label}}</a></li> @@ -97,4 +103,29 @@ {% endif %} </table> + <h2 style="float: left; padding: 20px 20px 0; font-size: 18px; font-weight : 800;">Contribuer</h2> + + <table class="notice-datasheet"> + <tr> + <th>{% trans 'REPR' context 'Thesaurus label' %}{% trans ':' %}</th> + <td> + <input class="notice-contribution-field" data-thesaurus="REPR" type="text" size="60" placeholder="{% trans 'What do you see in this work?' %}" /> + <ul class="notice-term-list"> + {% for term in contributions.REPR %} + <li class="notice-term term-translated"><a href="{% url 'front_search' %}?q={{term.label|urlencode}}" data-dbpedia-uri="{{term.dbpedia_uri}}">{{term.label}}</a></li> + {% endfor %} + </ul> + </td> + </tr> + <tr> + <th>{% trans 'SREP' context 'Thesaurus label' %}{% trans ':' %}</th> + <td> + <input class="notice-contribution-field" data-thesaurus="SREP" type="text" size="60" placeholder="{% trans 'Which other work is a source for this work?' %}" /> + <ul class="notice-term-list"> + {% for term in contributions.SREP %} + <li class="notice-term term-translated"><a href="{% url 'front_search' %}?q={{term.label|urlencode}}" data-dbpedia-uri="{{term.dbpedia_uri}}">{{term.label}}</a></li> + {% endfor %}</ul> + </td> + </tr> + </table> {% endblock %}
--- a/src/jocondelab/templates/jocondelab/front_search.html Fri Aug 23 15:18:43 2013 +0200 +++ b/src/jocondelab/templates/jocondelab/front_search.html Tue Sep 03 15:50:59 2013 +0200 @@ -21,7 +21,7 @@ {% block main %} <form class="big-search-form"> - <input class="big-search-input" type="search" name="q" value="{{queryterms}}" /> + <input class="big-search-input" type="search" name="q" value="{{searchterm}}" /> </form> <ul class="term-cloud">
--- a/src/jocondelab/urls.py Fri Aug 23 15:18:43 2013 +0200 +++ b/src/jocondelab/urls.py Tue Sep 03 15:50:59 2013 +0200 @@ -40,5 +40,6 @@ url(r'^ajax/geocoords/$', 'jocondelab.views.ajax.geo_coords', name='ajax_geo_coords'), url(r'^ajax/geosearch/$', 'jocondelab.views.ajax.geo_search', name='ajax_geo_search'), url(r'^ajax/contents/$', 'jocondelab.views.ajax.contents', name='ajax_contents'), + url(r'^ajax/contribute/$', 'jocondelab.views.ajax.contribute', name='ajax_contribute'), )
--- a/src/jocondelab/views/ajax.py Fri Aug 23 15:18:43 2013 +0200 +++ b/src/jocondelab/views/ajax.py Tue Sep 03 15:50:59 2013 +0200 @@ -5,8 +5,8 @@ @author: rvelt ''' -from jocondelab.models import DbpediaYears, DbpediaGeo, DbpediaFields -from core.models import Notice, Term +from jocondelab.models import DbpediaYears, DbpediaGeo, DbpediaFields, ContributedTerm, ContributedFields, Contribution +from core.models import Notice, Term, Thesaurus import django.utils.simplejson as json from django.http import HttpResponse from django.template.response import TemplateResponse @@ -136,4 +136,29 @@ results.sort(key=lambda y: y["label"]) return HttpResponse(content=json.dumps(results), mimetype='application/json') + +def contribute(request): + + notice_id = request.POST.get('notice_id', None) + dbpedia_language = request.POST.get('dbpedia_language', None) + dbpedia_uri = request.POST.get('dbpedia_uri', None) + thesaurus_label = request.POST.get('thesaurus_label', None) + translations = json.loads(request.POST.get('translations', '[]')) + + thobj = Thesaurus.objects.get(label=thesaurus_label) + notobj = Notice.objects.get(id=notice_id) + termobj, created = ContributedTerm.objects.get_or_create(dbpedia_uri=dbpedia_uri, dbpedia_language=dbpedia_language) + controbj, created = Contribution.objects.get_or_create(term=termobj, thesaurus=thobj, notice=notobj, defaults={'contribution_count': 1}) + if not created: + controbj.contribution_count += 1 + controbj.save() + for t in translations: + fieldsobj, created = ContributedFields.objects.get_or_create(term=termobj, dbpedia_uri=dbpedia_uri, language_code=t['language'], defaults={'abstract': t['abstract'], 'label': t['label'], 'thumbnail': t['thumbnail']}) + if not created: + fieldsobj.abstract = t['abstract'] + fieldsobj.thumbnail = t['thumbnail'] + fieldsobj.label = t['label'] + fieldsobj.save() + + return HttpResponse(content=json.dumps(translations), mimetype='application/json') \ No newline at end of file
--- a/src/jocondelab/views/front_office.py Fri Aug 23 15:18:43 2013 +0200 +++ b/src/jocondelab/views/front_office.py Tue Sep 03 15:50:59 2013 +0200 @@ -7,6 +7,7 @@ from core.models import (Notice, Thesaurus, Term) from jocondelab.models import DbpediaFields +import django.utils.simplejson as json from django.conf import settings from django.views.generic import View, DetailView from django.views.generic.base import TemplateResponseMixin @@ -122,27 +123,37 @@ context["images"] = [settings.JOCONDE_IMG_BASE_URL + i.url for i in self.object.images.exclude(relative_url__endswith='v.jpg')] context["title"] = self.object.titr if self.object.titr else self.object.deno - terms = [] - for nt in self.object.noticeterm_set.select_related('term__dbpedia_fields').all(): + termsbythesaurus = {} + for nt in self.object.noticeterm_set.select_related('thesaurus,term__dbpedia_fields').all(): translated_term = nt.term.dbpedia_fields.filter(language_code = lang) - termdict = { + term = { "label": nt.term.label, "thesaurus": nt.term.thesaurus.label, "dbpedia_uri": nt.term.dbpedia_uri, "translated": True if translated_term else False, "locale_label": translated_term[0].label if translated_term else nt.term.label } - terms.append(termdict) - termsbythesaurus = {} - for term in terms: if not term["thesaurus"] in termsbythesaurus: termsbythesaurus[term["thesaurus"]] = { "translated": [], "untranslated": [] } termsbythesaurus[term["thesaurus"]]["translated" if term["translated"] else "untranslated"].append(term) - + + contributions = {} + for ct in self.object.contribution_set.select_related('thesaurus,term__dbpedia_fields').filter(term__dbpedia_fields__language_code=lang): + thesauruslabel = ct.thesaurus.label + contribution = { + "label": ct.term.dbpedia_fields.get(language_code=lang).label, + "dbpedia_uri": ct.term.dbpedia_uri + } + if not thesauruslabel in contributions: + contributions[thesauruslabel] = [] + contributions[thesauruslabel].append(contribution) + context["terms_by_thesaurus"] = termsbythesaurus + context["contributions"] = contributions + context['wikipedia_urls'] = json.dumps(settings.WIKIPEDIA_URLS) return context