diff --git a/js/controllers/searchPageController.js b/js/controllers/searchPageController.js index 5f2fc6d..7446df5 100644 --- a/js/controllers/searchPageController.js +++ b/js/controllers/searchPageController.js @@ -1,7 +1,7 @@ /*global jquery: true, angular: true, $: true, define: true */ /*jslint node: true, browser: true, unparam: true */ /*jslint indent: 2 */ -define(["js/models/searchPage", "js/config", "js/vendor/mustache", "js/vendor/jsonview/jquery.jsonview.js"], function(searchPage, config, mustache) { +define(["js/models/searchPage", "js/config", "js/vendor/mustache", "js/vendor/jsonview/jquery.jsonview.js"], function (searchPage, config, mustache) { "use strict"; var searchPageController = {}, timeStamp = null, @@ -14,22 +14,24 @@ ctrlScope.app.apiUrl = config.apiUrl.rtrim('/ '); ctrlScope.safeApply(); - (function() { + (function () { var err = $.ajax({ url: config.apiUrl + "corpus", dataType: "jsonp", - success: function(data, status, xhr) { + success: function (data, status, xhr) { var corpusTemplate = "{{#corpusList}}{{/corpusList}}"; - $('#editorField').append(mustache.render(corpusTemplate, {corpusList:data})); + $('#editorField').append(mustache.render(corpusTemplate, {corpusList: data})); } }); - window.setTimeout(function() { + window.setTimeout(function () { console.log(err); }, 60000); }()); - searchPageController.displayRanges = function(data, field, slider, amount, nb, type) { + + + searchPageController.displayRanges = function (data, field, slider, amount, nb, type) { var minDate, maxDate; if (type === 'integer') { @@ -56,9 +58,10 @@ " à " + $(slider).slider("values", 1)); }; - searchPageController.displayResults = function(data) { + searchPageController.displayResults = function (data) { $("#jsonFromApi").JSONView(data); + if (data.total > 0) { $('#accordeon').show(); @@ -97,8 +100,10 @@ $("#totalResults").val(data.total); $("#totalms").val(data.stats.elasticsearch.took + data.stats['istex-api'].took); - data.abstr = function() { - return function(text, render) { + // On créé un wrapper à l'objet data avant de lui donner de nouvelles méthodes. + data = Object.create(data); + data.abstr = function () { + return function (text, render) { if (render(text) === "") { return "Pas de résumé pour ce résultat."; } @@ -106,9 +111,9 @@ }; }; - data.linksIcon = function() { + data.linksIcon = function () { - return function(text, render) { + return function (text, render) { var infos = render(text).split(" "), html = (infos.length === 2) ? "" : "
" + infos[0] + "
", i = 1, @@ -172,8 +177,8 @@ }; }; - data.lang = function() { - return function(text, render) { + data.lang = function () { + return function (text, render) { switch (render(text)) { case 'en': return 'Anglais (en)'; @@ -224,12 +229,13 @@ default: return render(text); break; - }; + } + ; }; }; - data.titleClic = function() { - return function(text, render) { + data.titleClic = function () { + return function (text, render) { var res = render(text), infos = res.split(" "), index = infos.indexOf("application/pdf"), @@ -243,8 +249,8 @@ }; }; - data.quality = function() { - return function(text, render) { + data.quality = function () { + return function (text, render) { if (render(text).split(':')[1] === " ") { return ""; } @@ -252,14 +258,15 @@ }; }; - data.presence = function() { - return function(text, render) { + data.presence = function () { + return function (text, render) { var res = render(text); if (res === 'T') { return "Présente(s)"; } else { return "Absente(s)"; - }; + } + ; }; }; @@ -391,13 +398,13 @@ $("#result").css("opacity", 1); }; - searchPageController.manageError = function(err) { + searchPageController.manageError = function (err) { $("button").button('reset'); $(".alert span").html("Houston ... Problem!" + err.responseText); $(".alert").alert(); }; - searchPageController.search = function() { + searchPageController.search = function () { var query = "document/?q=", fields = [], @@ -427,7 +434,7 @@ } corpusQuery = ''; - $.each(searchPage.editor, function(index, editor) { + $.each(searchPage.editor, function (index, editor) { if (editor !== "-1") { corpusQuery += editor + ','; } @@ -571,7 +578,8 @@ searchPageController.request(config.apiUrl + query); }; - searchPageController.request = function(url) { + searchPageController.request = function (url) { +// var memoizedData = ; $("#searchButton").button('loading'); $("#result").css("opacity", 0.4); @@ -579,25 +587,25 @@ var timeStampLocal = (new Date()).getTime(); timeStamp = timeStampLocal; - var request = { url: url, dataType: "jsonp", crossDomain: true, - success: function(data) { + success: function (data) { //Vérification qu'il n'y a pas eu d'autres requêtes entretemps, sinon annulation if (timeStamp === timeStampLocal) { + $("body").data(url, data); searchPageController.displayResults(data); } }, - error: function(err) { + error: function (err) { //Vérification qu'il n'y a pas eu d'autres requêtes entretemps, sinon annulation if (timeStamp === timeStampLocal) { searchPageController.manageError(err); } }, timeout: 10000, - complete: function() { + complete: function () { //Vérification qu'il n'y a pas eu d'autres requêtes entretemps, sinon annulation if (timeStamp === timeStampLocal) { $(document).trigger("resultsLoaded"); @@ -605,7 +613,12 @@ } }; - $.ajax(request); + if ($("body").data(url)) { + searchPageController.displayResults($("body").data(url)); + $(document).trigger("resultsLoaded"); + } else { + $.ajax(request); + } $("#result").removeClass('hide'); $("#paginRow").removeClass('hide'); $("#pageNumber").removeClass('hide'); diff --git a/js/main.js b/js/main.js index f7713cb..f9b1336 100755 --- a/js/main.js +++ b/js/main.js @@ -5,6 +5,40 @@ var globalSearchPage = {}, globalSearchPageController = {}; +/** + * Polyfill Object.create pour >ie9 + */ +if (typeof Object.create != 'function') { + + Object.create = (function() { + + function Temp() {} + var hasOwn = Object.prototype.hasOwnProperty; + + return function (O) { + + if (typeof O != 'object') { + throw TypeError('Object prototype may only be an Object or null'); + } + Temp.prototype = O; + var obj = new Temp(); + Temp.prototype = null; + + if (arguments.length > 1) { + var Properties = Object(arguments[1]); + for (var prop in Properties) { + if (hasOwn.call(Properties, prop)) { + obj[prop] = Properties[prop]; + } + } + } + + return obj; + }; + })(); +} + + var istexApp = angular.module("istexApp", []); var search = function (searchPage, searchPageController) { @@ -129,15 +163,15 @@ } }); }); + require(["js/config"], function (config) { $.ajax({ url: "include/top_header/surenteteistex.html", converters: {"text html": function (data) { -console.log(data); - return data - .replace(/(href|src)="(?!http)(.*?)"/img, "$1=\"include/top_header/$2\"") - ; + + return data.replace(/(href|src)="(?!http)(.*?)"/img, "$1=\"include/top_header/$2\""); + }}, success: function (data, textStatus) { diff --git a/js/vendor/jsonview/jquery.jsonview.js b/js/vendor/jsonview/jquery.jsonview.js index 2a4bd6d..09f22b7 100644 --- a/js/vendor/jsonview/jquery.jsonview.js +++ b/js/vendor/jsonview/jquery.jsonview.js @@ -1,6 +1,6 @@ /*! * jQuery JSONView - * Licensed under the MIT License. + * Licensed under the MIT License. */ (function(jQuery) { var $, Collapser, JSONFormatter, JSONView;