Koha-clms/koha-tmpl/intranet-tmpl/prog/js/browser.js

232 lines
8.7 KiB
JavaScript

/* global __ */
if (KOHA === undefined) var KOHA = {};
KOHA.browser = function (searchid, biblionumber) {
var me = this;
if (!searchid) {
// We are generating a clean numeric datetime representation so we can easily compare them using the default javascript lexicographic sorter.
searchid = "scs_" + new Date().getTime(); // scs for Staff Client Search
}
me.searchid = searchid;
var searches_stored = localStorage.getItem("searches");
var current_search;
var searches = {};
if (searches_stored) {
searches = JSON.parse(searches_stored);
current_search = searches[me.searchid];
// Remove old entries
var searchids = Object.keys(searches);
var nb_searches = searchids.length;
if (nb_searches > 20) {
// No need to keep more than 20 searches
searchids = searchids.sort();
for (var i = 0; i < nb_searches - 20; i++) {
delete searches[searchids[i]];
}
}
}
var browseRecords = function (movement) {
var newSearchPos = me.curPos + movement;
if (newSearchPos > current_search.results.length - 1) {
window.location =
"/cgi-bin/koha/catalogue/search.pl?" +
current_search.query +
"&limit=" +
current_search.limit +
"&sort_by=" +
current_search.sort +
"&gotoPage=detail.pl&gotoNumber=first&searchid=" +
me.searchid +
"&offset=" +
newSearchPos;
} else if (newSearchPos < 0) {
window.location =
"/cgi-bin/koha/catalogue/search.pl?" +
current_search.query +
"&limit=" +
current_search.limit +
"&sort_by=" +
current_search.sort +
"&gotoPage=detail.pl&gotoNumber=last&searchid=" +
me.searchid +
"&offset=" +
(me.offset - current_search.pagelen);
} else {
window.location = window.location.href.replace(
"biblionumber=" + biblionumber,
"biblionumber=" + current_search.results[newSearchPos]
);
}
};
me.create = function (offset, query, limit, sort, newresults, total) {
if (current_search) {
if (
offset ===
parseInt(current_search.offset) - newresults.length
) {
current_search.results = newresults.concat(
current_search.results
);
} else if (
(searchOffset =
parseInt(current_search.offset) + newresults.length)
) {
current_search.results =
current_search.results.concat(newresults);
} else {
delete current_search;
}
}
if (!current_search) {
current_search = {
offset: offset,
query: query,
limit: limit,
sort: sort,
pagelen: newresults.length,
results: newresults,
total: total,
searchid: searchid,
};
}
searches[me.searchid] = current_search;
localStorage.setItem("searches", JSON.stringify(searches));
$(document).ready(function () {
$('#searchresults table tr a[href*="/detail.pl"]').each(
function () {
$(this).attr(
"href",
$(this).attr("href") + "&searchid=" + me.searchid
);
}
);
});
};
me.show = function () {
if (current_search) {
me.curPos = $.inArray(biblionumber, current_search.results);
if (
parseInt(current_search.offset) + me.curPos <=
current_search.pagelen
) {
// First page
me.offset = 0;
} else {
me.offset = parseInt(current_search.offset) - 1;
}
$(document).ready(function () {
if (me.curPos > -1) {
var searchURL =
"/cgi-bin/koha/catalogue/search.pl?" +
current_search.query +
"&limit=" +
current_search.limit +
"&sort_by=" +
current_search.sort +
"&searchid=" +
me.searchid +
"&offset=" +
me.offset;
var prevbutton;
var nextbutton;
if (
me.curPos === 0 &&
parseInt(current_search.offset) === 1
) {
prevbutton =
'<span id="browse-previous" class="browse-button" title="' +
__("Previous") +
'"><i class="fa fa-arrow-left"></i></span>';
} else {
prevbutton =
'<a href="#" id="browse-previous" class="browse-button" title="' +
__("Previous") +
'"><i class="fa fa-arrow-left"></i></a>';
}
if (
parseInt(current_search.offset) + me.curPos ==
current_search.total
) {
nextbutton =
'<span id="browse-next" class="browse-button" title="' +
__("Next") +
'"><i class="fa fa-arrow-right"></i></span>';
} else {
nextbutton =
'<a href="#" id="browse-next" class="browse-button" title="' +
__("Next") +
'"><i class="fa fa-arrow-right"></i></a>';
}
$("#biblio-view-menu").before(
'<div class="browse-controls"><div class="browse-controls-inner"><div class="browse-label"><a href="' +
searchURL +
'" id="browse-return-to-results" class="searchwithcontext"><i class="fa fa-list"></i> ' +
__("Results") +
'</a></div><div class="browse-prev-next">' +
prevbutton +
nextbutton +
"</div></div></div>"
);
$("a#browse-previous").click(function (ev) {
ev.preventDefault();
browseRecords(-1);
});
$("a#browse-next").click(function (ev) {
ev.preventDefault();
browseRecords(1);
});
$('a[href*="biblionumber="]')
.not('a[target="_blank"]')
.click(function (ev) {
ev.preventDefault();
var url = new URL(
$(this).attr("href"),
window.location.origin
);
url.searchParams.set("searchid", me.searchid);
window.location = url.href;
});
$('form[name="f"]').append(
'<input type="hidden" name="searchid" value="' +
me.searchid +
'"></input>'
);
}
});
}
};
me.show_back_link = function () {
if (current_search) {
$(document).ready(function () {
var searchURL =
"/cgi-bin/koha/catalogue/search.pl?" +
current_search.query +
"&limit=" +
current_search.limit +
"&sort_by=" +
current_search.sort +
"&searchid=" +
me.searchid;
$("#previous_search_link").replaceWith(
'<div><div class="browse-label"><a href="' +
searchURL +
'"><i class="fa fa-list"></i> ' +
__("Go back to the results") +
"</a></div></div>"
);
});
}
};
return me;
};