Recherche avancée (google seulement), simplifications
authorCyril Robert <Cyril Robert crobert@inverse.ca>
Fri, 19 Mar 2010 20:42:20 +0000 (16:42 -0400)
committerCyril Robert <Cyril Robert crobert@inverse.ca>
Fri, 19 Mar 2010 20:42:20 +0000 (16:42 -0400)
13 files changed:
auf_savoirs_en_partage_django/media/css/global.css
auf_savoirs_en_partage_django/media/css/tabber.css [new file with mode: 0644]
auf_savoirs_en_partage_django/media/js/formulaire.js [deleted file]
auf_savoirs_en_partage_django/media/js/global.js [deleted file]
auf_savoirs_en_partage_django/media/js/pagination.js [new file with mode: 0644]
auf_savoirs_en_partage_django/media/js/tabber.js [new file with mode: 0644]
auf_savoirs_en_partage_django/savoirs/recherche.py
auf_savoirs_en_partage_django/savoirs/views.py
auf_savoirs_en_partage_django/templates/container_base.html
auf_savoirs_en_partage_django/templates/savoirs/avancee.html [new file with mode: 0644]
auf_savoirs_en_partage_django/templates/savoirs/editor.html
auf_savoirs_en_partage_django/templates/savoirs/recherche.html
auf_savoirs_en_partage_django/urls.py

index 5c36983..cd753ca 100644 (file)
@@ -65,6 +65,7 @@ div.boite-recherche p a { color:#3a3125;}
 div.boite-recherche p a:hover { color:#97012c; text-decoration:none;}
 
 #contenu { width:744px; margin:0; padding:0; margin-top:100px; margin-bottom:50px; margin-left:0;  display:inline; float:left;background:url(../img/contenu-bkg-middle.png) repeat-y 0 0;}
+#tabs { margin-left: 8px; margin-right: 8px; }
 #contenu h4 {padding: 0 25px; margin-bottom:1.2em; font-size:2.2em; font-weight:normal; letter-spacing:-1px;}
 #contenu .zone-texte {padding: 0 25px; font-size: 1.2em; min-height: 375px;}
 #contenu .zone-texte ul li {list-style: disc; margin: 0 0 .25em;}
diff --git a/auf_savoirs_en_partage_django/media/css/tabber.css b/auf_savoirs_en_partage_django/media/css/tabber.css
new file mode 100644 (file)
index 0000000..10bcada
--- /dev/null
@@ -0,0 +1,97 @@
+/* $Id: example.css,v 1.5 2006/03/27 02:44:36 pat Exp $ */\r
+\r
+/*--------------------------------------------------\r
+  REQUIRED to hide the non-active tab content.\r
+  But do not hide them in the print stylesheet!\r
+  --------------------------------------------------*/\r
+.tabberlive .tabbertabhide {\r
+ display:none;\r
+}\r
+\r
+/*--------------------------------------------------\r
+  .tabber = before the tabber interface is set up\r
+  .tabberlive = after the tabber interface is set up\r
+  --------------------------------------------------*/\r
+.tabber {\r
+}\r
+.tabberlive {\r
+ margin-top:1em;\r
+}\r
+\r
+/*--------------------------------------------------\r
+  ul.tabbernav = the tab navigation list\r
+  li.tabberactive = the active tab\r
+  --------------------------------------------------*/\r
+ul.tabbernav\r
+{\r
+ margin:0;\r
+ padding: 3px 0;\r
+ border-bottom: 1px solid #e8e8e8;\r
+ font: bold 12px Verdana, sans-serif;\r
+}\r
+\r
+ul.tabbernav li\r
+{\r
+ list-style: none;\r
+ margin: 0;\r
+ display: inline;\r
+}\r
+\r
+ul.tabbernav li a\r
+{\r
+ padding: 3px 0.5em;\r
+ margin-left: 3px;\r
+ border: 1px solid #e8e8e8;\r
+ border-bottom: none;\r
+ background: #f0f0f0;\r
+ text-decoration: none;\r
+}\r
+ul.tabbernav li:first-child a:first-child { margin-left: 0px; }\r
+\r
+ul.tabbernav li a:link { color: #3A3125; }\r
+ul.tabbernav li a:visited { color: #667; }\r
+\r
+ul.tabbernav li.tabberactive a\r
+{\r
+ background-color: #fff;\r
+ border-bottom: 1px solid #fff;\r
+}\r
+\r
+\r
+/*--------------------------------------------------\r
+  .tabbertab = the tab content\r
+  Add style only after the tabber interface is set up (.tabberlive)\r
+  --------------------------------------------------*/\r
+.tabberlive .tabbertab {\r
+ padding:5px;\r
+ border:1px solid #e8e8e8;\r
+ border-top:0;\r
+\r
+ /* If you don't want the tab size changing whenever a tab is changed\r
+    you can set a fixed height */\r
+\r
+ /* height:200px; */\r
+\r
+ /* If you set a fix height set overflow to auto and you will get a\r
+    scrollbar when necessary */\r
+\r
+ /* overflow:auto; */\r
+}\r
+\r
+/* If desired, hide the heading since a heading is provided by the tab */\r
+.tabberlive .tabbertab h2 {\r
+ display:none;\r
+}\r
+.tabberlive .tabbertab h3 {\r
+ display:none;\r
+}\r
+\r
+/* Example of using an ID to set different styles for the tabs on the page */\r
+.tabberlive#tab1 {\r
+}\r
+.tabberlive#tab2 {\r
+}\r
+.tabberlive#tab2 .tabbertab {\r
+ height:200px;\r
+ overflow:auto;\r
+}\r
diff --git a/auf_savoirs_en_partage_django/media/js/formulaire.js b/auf_savoirs_en_partage_django/media/js/formulaire.js
deleted file mode 100644 (file)
index 1e9a45c..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-$(document).ready(function() {\r
-       $('form').submit(function() {\r
-               var valide = true;\r
-               \r
-               // Titre\r
-               if ($('#titre').val() == "") {\r
-                       valide = false;\r
-               }\r
-\r
-               // Date de début\r
-               if ($('#dateDebut').val().match(AUF.validation.regex.date) == null) {\r
-                       valide = false;\r
-               } else {\r
-                       var date = $('#dateDebut').val();\r
-                       if (date != "") { date = date.split('-'); }\r
-                       date = date[1]+'/'+date[2]+'/'+date[0];\r
-                       // Date valide\r
-                       if (!isDate(date)) {\r
-                               valide = false;\r
-                       }       \r
-               }\r
-\r
-               // Date de fin\r
-               if ($('#dateFin').val() != "") {\r
-                       if ($('#dateFin').val().match(AUF.validation.regex.date) == null) {\r
-                               valide = false;\r
-                       } else {\r
-                               var date = $('#dateFin').val();\r
-                               if (date != "") { date = date.split('-'); }\r
-                               date = date[1]+'/'+date[2]+'/'+date[0];\r
-                               // Date valide\r
-                               if (!isDate(date)) {\r
-                                       valide = false;\r
-                               }       \r
-                       }\r
-               }\r
-               \r
-               // Organisateur\r
-               if ($('#organisateur').val() == "") {\r
-                       valide = false;\r
-               }\r
-               \r
-               // Lieu\r
-               if ($('#lieu').val() == "") {\r
-                       valide = false;\r
-               }\r
-               \r
-               // Ville\r
-               if ($('#ville').val() == "") {\r
-                       valide = false;\r
-               }\r
-               \r
-               // Pays\r
-               if ($('#pays').val() == "") {\r
-                       valide = false;\r
-               }\r
-               \r
-               // Site web\r
-               if ($('#siteWeb').val() != "") {\r
-                       if ($('#siteWeb').val().match(AUF.validation.regex.url) == null) {\r
-                               valide = false;\r
-                       }\r
-               }\r
-               \r
-               // Discipline\r
-               if ($('#discipline').val() == "") {\r
-                       valide = false;\r
-               }\r
-               \r
-               // Discipline\r
-               if ($('#description').val() == "") {\r
-                       valide = false;\r
-               }\r
-       });\r
-});
\ No newline at end of file
diff --git a/auf_savoirs_en_partage_django/media/js/global.js b/auf_savoirs_en_partage_django/media/js/global.js
deleted file mode 100644 (file)
index 595d12b..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-var AUF = {};\r
-\r
-AUF.validation = {};\r
-AUF.validation.regex = {\r
-       date : /^[0-9]{4}\-[0-9]{1,2}\-[0-9]{1,2}$/,\r
-       url : /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/\r
-}\r
-\r
-$(document).ready(function() {\r
-       /************************************************************\r
-        * Calendriers\r
-        ************************************************************/\r
-       Date.format = 'yyyy-mm-dd';\r
-       if ($('.date-pick').length > 0) {\r
-               // Traduction des textes du calendrier\r
-               $.dpText = {\r
-                       TEXT_PREV_YEAR          :       'Année précédente',\r
-                       TEXT_PREV_MONTH         :       'Mois précédent',\r
-                       TEXT_NEXT_YEAR          :       'Année suivante',\r
-                       TEXT_NEXT_MONTH         :       'Mois suivant',\r
-                       TEXT_CLOSE                      :       'Fermer',\r
-                       TEXT_CHOOSE_DATE        :       'Choisir une date',\r
-                       HEADER_FORMAT           :       'mmmm yyyy'\r
-               };\r
-\r
-               $('.date-pick').datePicker({\r
-                       showYearNavigation: false\r
-               }).each(function() {\r
-                       //if ($(this).val() == "") {\r
-                               //$(this).val(new Date().asString())\r
-                       //}\r
-                       $(this).trigger('change');\r
-               });\r
-\r
-               $('.dp-choose-date').click(function() {\r
-                       $('.champ').removeClass('focus');\r
-                       $(this).parent().addClass('focus');\r
-               });\r
-               \r
-       }\r
-});
\ No newline at end of file
diff --git a/auf_savoirs_en_partage_django/media/js/pagination.js b/auf_savoirs_en_partage_django/media/js/pagination.js
new file mode 100644 (file)
index 0000000..0c6c97d
--- /dev/null
@@ -0,0 +1,62 @@
+function urlencode(str) {
+    return escape(str).replace(/\+/g,'%2B').replace(
+                 /%20/g, '+').replace(/\*/g, '%2A').replace(
+                 /\//g, '%2F').replace(/@/g, '%40');
+}
+function getUrlVars()
+{
+    var vars = {};
+    var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
+    for(var i = 0; i < hashes.length; i++)
+    {
+        var hash = hashes[i].split('=');
+        vars[hash[0]] = hash[1];
+    }
+    return vars;
+}
+function makeLink (page) {
+    var params = getUrlVars ();
+    params.page = page;
+    var rc = "?";
+    for (k in params) {
+        rc += k + "=" + urlencode(params[k]) + "&";
+    }
+    rc = rc.substr (0, rc.length - 1);
+    return rc;
+}
+function makePageLinks (currentPage, lastPage, more) {
+    var span = $("#pageLinks");
+    // Premiere page
+    if (currentPage == 0)
+      span.append ('<span class="lien-texte">&lt;&lt;</span>&nbsp;&nbsp;');
+    else
+      span.append ('<a href="' + makeLink(0) + 
+                   '"><span class="lien-texte">&lt;&lt;</span></a>&nbsp;&nbsp;');
+
+    // Boucle
+    var f = currentPage - 4;
+    var t = 0;
+    if (f < 0) { t = -f; f = 0; }
+    t += currentPage + 4;
+    if (t > lastPage) t = lastPage;
+
+    for (var i = f; i <= t; i++) {
+        var display = i + 1;
+        if (i == currentPage)
+          span.append ("<span>" + display + "</span>&nbsp;&nbsp;");
+        else
+          span.append ('<a href="' + makeLink(i) + '"><span>' + 
+                       display + '</span></a>&nbsp;&nbsp;');
+    }
+
+    // Derniere page
+    if (currentPage == lastPage)
+      span.append ('<span class="lien-texte">&gt;&gt;</span>');
+    else
+      span.append ('<a href="' + makeLink(lastPage) + 
+                   '"><span class="lien-texte">&gt;&gt;</span></a>');
+
+    if (more.length > 0)
+      span.append ('&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' + 
+                   '<a href="'+more+'"><span class="lien-texte">Plus de résultats</span></a>');
+}
diff --git a/auf_savoirs_en_partage_django/media/js/tabber.js b/auf_savoirs_en_partage_django/media/js/tabber.js
new file mode 100644 (file)
index 0000000..34dd2e8
--- /dev/null
@@ -0,0 +1,40 @@
+/* Copyright (c) 2006 Patrick Fitzgerald */
+
+function tabberObj(argsObj)
+{var arg;this.div=null;this.classMain="tabber";this.classMainLive="tabberlive";this.classTab="tabbertab";this.classTabDefault="tabbertabdefault";this.classNav="tabbernav";this.classTabHide="tabbertabhide";this.classNavActive="tabberactive";this.titleElements=['h2','h3','h4','h5','h6'];this.titleElementsStripHTML=true;this.removeTitle=true;this.addLinkId=false;this.linkIdFormat='<tabberid>nav<tabnumberone>';for(arg in argsObj){this[arg]=argsObj[arg];}
+this.REclassMain=new RegExp('\\b'+this.classMain+'\\b','gi');this.REclassMainLive=new RegExp('\\b'+this.classMainLive+'\\b','gi');this.REclassTab=new RegExp('\\b'+this.classTab+'\\b','gi');this.REclassTabDefault=new RegExp('\\b'+this.classTabDefault+'\\b','gi');this.REclassTabHide=new RegExp('\\b'+this.classTabHide+'\\b','gi');this.tabs=new Array();if(this.div){this.init(this.div);this.div=null;}}
+tabberObj.prototype.init=function(e)
+{var
+childNodes,i,i2,t,defaultTab=0,DOM_ul,DOM_li,DOM_a,aId,headingElement;if(!document.getElementsByTagName){return false;}
+if(e.id){this.id=e.id;}
+this.tabs.length=0;childNodes=e.childNodes;for(i=0;i<childNodes.length;i++){if(childNodes[i].className&&childNodes[i].className.match(this.REclassTab)){t=new Object();t.div=childNodes[i];this.tabs[this.tabs.length]=t;if(childNodes[i].className.match(this.REclassTabDefault)){defaultTab=this.tabs.length-1;}}}
+DOM_ul=document.createElement("ul");DOM_ul.className=this.classNav;for(i=0;i<this.tabs.length;i++){t=this.tabs[i];t.headingText=t.div.title;if(this.removeTitle){t.div.title='';}
+if(!t.headingText){for(i2=0;i2<this.titleElements.length;i2++){headingElement=t.div.getElementsByTagName(this.titleElements[i2])[0];if(headingElement){t.headingText=headingElement.innerHTML;if(this.titleElementsStripHTML){t.headingText.replace(/<br>/gi," ");t.headingText=t.headingText.replace(/<[^>]+>/g,"");}
+break;}}}
+if(!t.headingText){t.headingText=i+1;}
+DOM_li=document.createElement("li");t.li=DOM_li;DOM_a=document.createElement("a");DOM_a.appendChild(document.createTextNode(t.headingText));DOM_a.href="javascript:void(null);";DOM_a.title=t.headingText;DOM_a.onclick=this.navClick;DOM_a.tabber=this;DOM_a.tabberIndex=i;if(this.addLinkId&&this.linkIdFormat){aId=this.linkIdFormat;aId=aId.replace(/<tabberid>/gi,this.id);aId=aId.replace(/<tabnumberzero>/gi,i);aId=aId.replace(/<tabnumberone>/gi,i+1);aId=aId.replace(/<tabtitle>/gi,t.headingText.replace(/[^a-zA-Z0-9\-]/gi,''));DOM_a.id=aId;}
+DOM_li.appendChild(DOM_a);DOM_ul.appendChild(DOM_li);}
+e.insertBefore(DOM_ul,e.firstChild);e.className=e.className.replace(this.REclassMain,this.classMainLive);this.tabShow(defaultTab);if(typeof this.onLoad=='function'){this.onLoad({tabber:this});}
+return this;};tabberObj.prototype.navClick=function(event)
+{var
+rVal,a,self,tabberIndex,onClickArgs;a=this;if(!a.tabber){return false;}
+self=a.tabber;tabberIndex=a.tabberIndex;a.blur();if(typeof self.onClick=='function'){onClickArgs={'tabber':self,'index':tabberIndex,'event':event};if(!event){onClickArgs.event=window.event;}
+rVal=self.onClick(onClickArgs);if(rVal===false){return false;}}
+self.tabShow(tabberIndex);return false;};tabberObj.prototype.tabHideAll=function()
+{var i;for(i=0;i<this.tabs.length;i++){this.tabHide(i);}};tabberObj.prototype.tabHide=function(tabberIndex)
+{var div;if(!this.tabs[tabberIndex]){return false;}
+div=this.tabs[tabberIndex].div;if(!div.className.match(this.REclassTabHide)){div.className+=' '+this.classTabHide;}
+this.navClearActive(tabberIndex);return this;};tabberObj.prototype.tabShow=function(tabberIndex)
+{var div;if(!this.tabs[tabberIndex]){return false;}
+this.tabHideAll();div=this.tabs[tabberIndex].div;div.className=div.className.replace(this.REclassTabHide,'');this.navSetActive(tabberIndex);if(typeof this.onTabDisplay=='function'){this.onTabDisplay({'tabber':this,'index':tabberIndex});}
+return this;};tabberObj.prototype.navSetActive=function(tabberIndex)
+{this.tabs[tabberIndex].li.className=this.classNavActive;return this;};tabberObj.prototype.navClearActive=function(tabberIndex)
+{this.tabs[tabberIndex].li.className='';return this;};function tabberAutomatic(tabberArgs)
+{var
+tempObj,divs,i;if(!tabberArgs){tabberArgs={};}
+tempObj=new tabberObj(tabberArgs);divs=document.getElementsByTagName("div");for(i=0;i<divs.length;i++){if(divs[i].className&&divs[i].className.match(tempObj.REclassMain)){tabberArgs.div=divs[i];divs[i].tabber=new tabberObj(tabberArgs);}}
+return this;}
+function tabberAutomaticOnLoad(tabberArgs)
+{var oldOnLoad;if(!tabberArgs){tabberArgs={};}
+oldOnLoad=window.onload;if(typeof window.onload!='function'){window.onload=function(){tabberAutomatic(tabberArgs);};}else{window.onload=function(){oldOnLoad();tabberAutomatic(tabberArgs);};}}
+if(typeof tabberOptions=='undefined'){tabberAutomaticOnLoad();}else{if(!tabberOptions['manualStartup']){tabberAutomaticOnLoad(tabberOptions);}}
\ No newline at end of file
index df192f4..13c140e 100644 (file)
@@ -25,17 +25,18 @@ def google_search (page, q, data):
     #print pprint.pformat (response)
     handle.close ()
 
-    for i in response['responseData']['cursor']['pages']:
-        p = int (i['label']) - 1
-        if p > data['last_page']:
-            data['last_page'] = p
+    if len (response['responseData']['results']) > 0:
+        for i in response['responseData']['cursor']['pages']:
+            p = int (i['label']) - 1
+            if p > data['last_page']:
+                data['last_page'] = p
 
-    for r in response['responseData']['results']:
-        data['results'].append( {'uri': r['url'],
-                    'content': r['content'],
-                    'title': r['title']} )
+        for r in response['responseData']['results']:
+            data['results'].append( {'uri': r['url'],
+                        'content': r['content'],
+                        'title': r['title']} )
 
-    data['more_link'] = response['responseData']['cursor']['moreResultsUrl']
+        data['more_link'] = response['responseData']['cursor']['moreResultsUrl']
 
 
 def sep_build_content (regexp, description):
@@ -88,10 +89,11 @@ def sep_search (page, q, data):
         data['results'].append ({'uri': uri, 'id': r.get("uri"), 'title': title, 'content': content})
 
 
-def cherche (page, q):
+def cherche (page, q, engin=None):
     rc = {'results': [], 'last_page': 0, 'more_link': ''}
 
-    engin = configuration['engin_recherche']
+    if engin is None:
+        engin = configuration['engin_recherche']
 
     if engin == 'google':
         google_search (page, q, rc)
index 111edd1..e837a32 100644 (file)
@@ -6,7 +6,7 @@ from django.http import HttpResponse
 from django.contrib.auth.decorators import login_required
 from models import Actualite
 from savoirs import configuration
-from recherche import cherche
+from recherche import cherche, google_search
 from auf_savoirs_en_partage_backend.sep.io import SEP
 
 def index (request):
@@ -19,7 +19,6 @@ def index (request):
             context_instance = RequestContext(request))
 
 def recherche (request):
-    results = None
     q = request.GET.get("q", "")
     page = int(request.GET.get("page", 0))
 
@@ -31,6 +30,22 @@ def recherche (request):
                       'data': r}), \
             context_instance = RequestContext(request))
 
+def avancee (request):
+    type = request.GET.get("type", "")
+    page = int(request.GET.get("page", 0))
+
+    q = request.GET.get("google-q", "")
+
+    if type == 'google':
+        r = cherche (page, q, type)
+
+    return render_to_response ("savoirs/avancee.html", \
+            Context ({'type': type,
+                      'page': page,
+                      'data': r,
+                      'q': q}), 
+            context_instance = RequestContext(request))
+
 def conseils (request):
     return render_to_response ("savoirs/conseils.html", \
             Context (), \
index 056d103..21409e4 100644 (file)
@@ -4,12 +4,14 @@
         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
         <title>Savoirs en partage - Agence universitaire de la Francophonie</title>
         <script type="text/javascript" src="{{ MEDIA_URL }}js/jquery/jquery.js"></script>
+        <script type="text/javascript" src="{{ MEDIA_URL }}js/jquery/jquery-ui.js"></script>
+        <script type="text/javascript" src="{{ MEDIA_URL }}js/tabber.js"></script>
+        <script type="text/javascript" src="{{ MEDIA_URL }}js/pagination.js"></script>
         <script type="text/javascript" src="{{ MEDIA_URL }}js/jquery/jquery.datepicker.js"></script>
-        <script type="text/javascript" src="{{ MEDIA_URL }}js/global.js"></script>
-        <script type="text/javascript" src="{{ MEDIA_URL }}js/formulaire.js"></script>
-
         <link href="{{ MEDIA_URL }}css/jquery/jquery.datepicker.css" rel="stylesheet" type="text/css" />
         <link href="{{ MEDIA_URL }}css/global.css" rel="stylesheet" type="text/css" />
+        <link href="{{ MEDIA_URL }}css/tabber.css" rel="stylesheet" type="text/css" />
+        <link rel="stylesheet" href="{{ MEDIA_URL }}js/jquery/css/smoothness/jquery-ui-1.8rc3.custom.css" type="text/css" media="all" />
 
         <!--[if lt IE 7]>
         <link href="/css/ie6.css" rel="stylesheet" type="text/css" media="screen" />
@@ -62,7 +64,7 @@
                         </form>
 
                         <p>
-                        <a href="#">Recherche avancée</a> | 
+                        <a href="{% url savoirs.views.avancee %}">Recherche avancée</a> | 
                         <a href="{% url savoirs.views.conseils %}">Conseils</a>
                         </p>
                     </div>
diff --git a/auf_savoirs_en_partage_django/templates/savoirs/avancee.html b/auf_savoirs_en_partage_django/templates/savoirs/avancee.html
new file mode 100644 (file)
index 0000000..eaab759
--- /dev/null
@@ -0,0 +1,80 @@
+{% extends "container_base.html" %}
+
+{% block contenu %}
+<style>
+  div.boite-recherche { display: none !important; }
+  div#contenu { margin-top: 20px !important; }
+  div#results { margin-top: 15px; }
+</style>
+<script>
+  function setup () {
+    var type = '{{ type|default:"" }}';
+
+    if (type == 'google') 
+      $("#tabs-2").addClass ('tabbertabdefault');
+    else if (type == '')
+      $("#results").css ({display: 'none'});
+  }
+
+  {% if user.is_authenticated %}
+  function showEditModal (uri) {
+    $('#jsonsource').load ('{% url savoirs.views.json_get %}?uri='+uri, 
+    function() {
+      __jf = new JSONForm ('schema', 'mainform', 'jsonsource');
+      __jf.setup ();
+      $('#edit-form').dialog({height: 400, width: 650, modal: true});
+    });
+  }
+  {% endif %}
+
+  $(document).ready(function(){
+    setup ();
+    makePageLinks ({{ page|default:0 }}, {{ data.last_page|default:0 }}, 
+                   '{{ data.more_link }}');
+  });
+</script>
+
+<div id="tabs" class="tabber">
+  <div id="tabs-1" class="tabbertab">
+    <h2>Recherche détaillée</h2>
+    <p>Proin elit arcu, rutrum commodo, vehicula tempus, commodo a, risus. Curabitur nec arcu. Donec sollicitudin mi sit amet mauris. Nam elementum quam ullamcorper ante. Etiam aliquet massa et lorem. Mauris dapibus lacus auctor risus. Aenean tempor ullamcorper leo. Vivamus sed magna quis ligula eleifend adipiscing. Duis orci. Aliquam sodales tortor vitae ipsum. Aliquam nulla. Duis aliquam molestie erat. Ut et mauris vel pede varius sollicitudin. Sed ut dolor nec orci tincidunt interdum. Phasellus ipsum. Nunc tristique tempus lectus.</p>
+  </div>
+  <div id="tabs-2" class="tabbertab">
+    <h2>Recherche google</h2>
+    <form method="get">
+      <input type="hidden" name="type" value="google" />
+      <p style="margin-top: 10px;"><input type="text" name="google-q" value="{{ q|default:""}}" /><input type="submit" name="" value="Chercher" /></p>
+    </form>
+  </div>
+</div>
+
+<div id="results">
+  <h4>Résultats de recherche pour « {{ q }} » :</h4>
+
+  <div class="zone-texte">
+    {% for r in data.results %}
+    <div class="resultatRecherche">
+      <a class="le-titre" href="{{ r.uri }}">{{ r.title|safe }}</a>
+      <div class="resultatResume">{{ r.content|safe }}</div>
+      <a class="ligne-url" href="{{ r.uri }}">{{ r.uri }}</a>
+      {% if user.is_authenticated %}
+      <a href="#" onclick="showEditModal('{{ r.id }}'); return false;">EDIT</a>
+      {% endif %}
+    </div>
+    {% empty %}
+    <div class="resultatRecherche">
+      <h2>Aucun résultat trouvé</h2>
+    </div>
+    {% endfor %}
+  </div>
+  <div class="resultatPages">
+    <span id="pageLinks">
+    </span>
+  </div>
+
+  {% if user.is_authenticated %}
+  {% include "savoirs/editor.html" %}
+  {% endif %}
+
+  {% endblock %}
+</div>
index d153c98..e90d1ee 100644 (file)
@@ -1,7 +1,4 @@
-<script src="{{ MEDIA_URL }}js/jquery/jquery-ui.js"></script> 
 <script src="{{ MEDIA_URL }}js/form.js"></script> 
-<!--script src="{{ MEDIA_URL }}js/json2.js"></script-->
-<link rel="stylesheet" href="{{ MEDIA_URL }}js/jquery/css/smoothness/jquery-ui-1.8rc3.custom.css" type="text/css" media="all" />
 
 <script type="text/javascript" language="javascript">
 var __jf = new JSONForm ('schema', 'mainform', 'jsonsource');
index 096d91d..9a74d86 100644 (file)
@@ -2,96 +2,50 @@
 
 {% block contenu %}
 <script>
-    function urlencode(str) {
-        return escape(str).replace(/\+/g,'%2B').replace(
-                    /%20/g, '+').replace(/\*/g, '%2A').replace(
-                    /\//g, '%2F').replace(/@/g, '%40');
-    }
-    function makeLink (page) {
-        return "?page=" + page +
-                "&q=" + urlencode ("{{ q }}");
-    }
-
-    $(document).ready(function(){
-        var currentPage = {{ page }};
-        var lastPage = {{ data.last_page }};
-        var more = '{{ data.more_link }}';
-
-        var span = $("#pageLinks");
-        // Premiere page
-        if (currentPage == 0)
-            span.append ('<span class="lien-texte">&lt;&lt;</span>&nbsp;&nbsp;');
-        else
-            span.append ('<a href="' + makeLink(0) + 
-                         '"><span class="lien-texte">&lt;&lt;</span></a>&nbsp;&nbsp;');
-
-        // Boucle
-        var f = currentPage - 4;
-        var t = 0;
-        if (f < 0) { t = -f; f = 0; }
-        t += currentPage + 4;
-        if (t > lastPage) t = lastPage;
-
-        for (var i = f; i <= t; i++) {
-            var display = i + 1;
-            if (i == currentPage)
-                span.append ("<span>" + display + "</span>&nbsp;&nbsp;");
-            else
-                span.append ('<a href="' + makeLink(i) + '"><span>' + 
-                             display + '</span></a>&nbsp;&nbsp;');
-        }
-
-        // Derniere page
-        if (currentPage == lastPage)
-            span.append ('<span class="lien-texte">&gt;&gt;</span>');
-        else
-            span.append ('<a href="' + makeLink(lastPage) + 
-                         '"><span class="lien-texte">&gt;&gt;</span></a>');
-
-        if (more.length > 0)
-            span.append ('&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' + 
-                '<a href="'+more+'"><span class="lien-texte">Plus de résultats</span></a>');
+  $(document).ready(function(){
+    makePageLinks ({{ page|default:0 }}, {{ data.last_page|default:0 }}, 
+                   '{{ data.more_link }}');
+  });
+
+  {% if user.is_authenticated %}
+  function showEditModal (uri) {
+    $('#jsonsource').load ('{% url savoirs.views.json_get %}?uri='+uri, 
+    function() {
+      __jf = new JSONForm ('schema', 'mainform', 'jsonsource');
+      __jf.setup ();
+      $('#edit-form').dialog({height: 400, width: 650, modal: true});
     });
-
-    {% if user.is_authenticated %}
-    function showEditModal (uri) {
-      $('#jsonsource').load ('{% url savoirs.views.json_get %}?uri='+uri, 
-      function() {
-        __jf = new JSONForm ('schema', 'mainform', 'jsonsource');
-        __jf.setup ();
-        $('#edit-form').dialog({height: 400, width: 650, modal: true});
-        });
-    }
-    {% endif %}
+  }
+  {% endif %}
 
 
-    </script>
+</script>
 
-    <h4>Résultats de recherche pour « {{ q }} » :</h4>
-
-    <div class="zone-texte">
-        {% for r in data.results %}
-        <div class="resultatRecherche">
-            <a class="le-titre" href="{{ r.uri }}">{{ r.title|safe }}</a>
-            <div class="resultatResume">{{ r.content|safe }}</div>
-            <a class="ligne-url" href="{{ r.uri }}">{{ r.uri }}</a>
-            {% if user.is_authenticated %}
-              <a href="#" onclick="showEditModal('{{ r.id }}'); return false;">EDIT</a>
-            {% endif %}
-        </div>
-        {% empty %}
-        <div class="resultatRecherche">
-          <h2>Aucun résultat trouvé</h2>
-        </div>
-        {% endfor %}
-    </div>
-    <div class="resultatPages">
-        <span id="pageLinks">
-        </span>
-    </div>
+<h4>Résultats de recherche pour « {{ q }} » :</h4>
 
+<div class="zone-texte">
+  {% for r in data.results %}
+  <div class="resultatRecherche">
+    <a class="le-titre" href="{{ r.uri }}">{{ r.title|safe }}</a>
+    <div class="resultatResume">{{ r.content|safe }}</div>
+    <a class="ligne-url" href="{{ r.uri }}">{{ r.uri }}</a>
     {% if user.is_authenticated %}
-    {% include "savoirs/editor.html" %}
+    <a href="#" onclick="showEditModal('{{ r.id }}'); return false;">EDIT</a>
     {% endif %}
-
-    {% endblock %}
+  </div>
+  {% empty %}
+  <div class="resultatRecherche">
+    <h2>Aucun résultat trouvé</h2>
+  </div>
+  {% endfor %}
+</div>
+<div class="resultatPages">
+  <span id="pageLinks">
+  </span>
+</div>
+
+{% if user.is_authenticated %}
+{% include "savoirs/editor.html" %}
+{% endif %}
+
+{% endblock %}
index df68151..316bf00 100644 (file)
@@ -17,6 +17,7 @@ urlpatterns = patterns(
     (r'^a-propos$', 'savoirs.views.a_propos'),
     (r'^nous-contacter$', 'savoirs.views.nous_contacter'),
     (r'^recherche$', 'savoirs.views.recherche'),
+    (r'^recherche/avancee$', 'savoirs.views.avancee'),
     (r'^json/get$', 'savoirs.views.json_get'),
     (r'^json/set$', 'savoirs.views.json_set'),
 )