X-Git-Url: http://jsfdemo.indexdata.com/?a=blobdiff_plain;f=www%2Fmobile%2Fmobile_client.js;h=f7a0076960ba50d046a5d771742e3f0542378613;hb=5d943bcaa56f11883c2c3d5c79248777bab80a76;hp=5b96fef2e841a2b88178e03aa91a4c189b2de49c;hpb=42eb0192cebaf513cb42dfc6b0726b137000b47c;p=pazpar2-moved-to-github.git
diff --git a/www/mobile/mobile_client.js b/www/mobile/mobile_client.js
index 5b96fef..f7a0076 100644
--- a/www/mobile/mobile_client.js
+++ b/www/mobile/mobile_client.js
@@ -12,8 +12,73 @@ var querys = {'su': '', 'au': '', 'xt': ''};
var query_client_server = {'su': 'subject', 'au': 'author', 'xt': 'xtargets'};
var querys_server = {};
var useLimit = 1;
+var state = new State();
// Fail to get JSON working stabil.
var showResponseType = 'xml';
+//some state vars
+state.curPage = 1;
+state.recPerPage = 5;
+var recToShowPageSize = 20;
+var recToShow = recToShowPageSize;
+var recIDs = {};
+var totalRec = 0;
+var curDetRecId = '';
+var curDetRecData = null;
+var curSort = 'relevance';
+var curFilter = 'ALL';
+var submitted = false;
+var SourceMax = 16;
+var SubjectMax = 10;
+var AuthorMax = 10;
+var tab = "recordview";
+
+var triedPass = "";
+var triedUser = "";
+
+var previousOrientation = window.orientation || 0;
+
+
+window.addEventListener("load",function() {
+ // Set a timeout...
+ setTimeout(function(){
+ // Hide the address bar!
+ window.scrollTo(0, 1);
+ }, 0);
+});
+
+function calcRecPerPage() {
+ state.width = window.innerWidth;
+ state.height = window.innerHeight;
+ return Math.max(Math.round((state.height - 88 - 40) / 60), 5) ;
+}
+
+function checkOrientation() {
+ if(state.height != window.innerHeight){
+ var newPageSize = calcRecPerPage();
+ //alert("orient change: Dimension " + state.width + " " + state.height + " Old Rec/page " + state.recPerPage + " New: " + newPageSize);
+ state.setRecPerPage(newPageSize);
+ my_paz.show(state.getStartWith(), state.getRecPerPage(), curSort);
+ }
+};
+
+function setQS (encodedParams) {
+ if ("onhashchange" in window) {
+ window.location.hash = '#' + encodedParams;
+ } else {
+ var url = document.location.href;
+ var i = url.indexOf("?");
+ if (i > -1) url = url.substr(0, i);
+ document.location.href = url + "?" + encodedParams;
+ }
+}
+
+state.setRecPerPage(calcRecPerPage());
+
+window.addEventListener("resize", checkOrientation, false);
+window.addEventListener("orientationchange", checkOrientation, false);
+
+// (optional) Android doesn't always fire orientationChange on 180 degree turns
+//setInterval(checkOrientation, 2000);
var imageHelper = new ImageHelper();
@@ -36,25 +101,6 @@ my_paz = new pz2( { "onshow": my_onshow,
"onrecord": my_onrecord,
"errorhandler" : my_onerror}
);
-// some state vars
-var curPage = 1;
-var recPerPage = 10;
-var recToShowPageSize = 20;
-var recToShow = recToShowPageSize;
-var recIDs = {};
-var totalRec = 0;
-var curDetRecId = '';
-var curDetRecData = null;
-var curSort = 'relevance';
-var curFilter = 'ALL';
-var submitted = false;
-var SourceMax = 16;
-var SubjectMax = 10;
-var AuthorMax = 10;
-var tab = "recordview";
-
-var triedPass = "";
-var triedUser = "";
//
// pz2.js event handlers:
@@ -78,11 +124,17 @@ function my_onerror(error) {
auth.check(loggedIn, login);
break;
default:
- alert("Unhandled error: " + error.code);
- throw error; // display error in JavaScript console
+ alert("Unhandled error: " + error.code);
+ throw error; // display error in JavaScript console
}
}
+//FF has a bug and un-escaped location.hash, don't use it
+function getRealHash() {
+ var i = window.location.href.indexOf('#');
+ return i > -1 ? window.location.href.substr(i) : "";
+}
+
function loginFormSubmit() {
triedUser = document.loginForm.username.value;
triedPass = document.loginForm.password.value;
@@ -150,15 +202,19 @@ function logInOrOut() {
else
logout();
}
-function loggedIn() {
+function loggedIn(context) {
+
+ if (context.ipAuth != true) {
var login = document.getElementById("login");
login.innerHTML = 'Logout';
document.getElementById("log").innerHTML = login.innerHTML;
+ }
+ domReady();
}
function auth_check() {
auth.check(loggedIn, login);
- domReady();
+ //domReady();
}
//
@@ -172,12 +228,12 @@ function my_oninit() {
function showMoreRecords() {
var i = recToShow;
recToShow += recToShowPageSize;
- for ( ; i < recToShow && i < recPerPage; i++) {
+ for ( ; i < recToShow && i < state.recPerPage; i++) {
var element = document.getElementById(recIDs[i]);
if (element)
element.style.display = '';
}
- if (i == recPerPage) {
+ if (i == state.recPerPage) {
var element = document.getElementById('recdiv_END');
if (element)
element.style.display = 'none';
@@ -196,25 +252,23 @@ function hideRecords() {
}
function showRecords() {
- for (var i = 0 ; i < recToShow && i < recPerPage; i++) {
+ for (var i = 0 ; i < recToShow && i < state.recPerPage; i++) {
var element = document.getElementById(recIDs[i]);
if (element)
element.style.display = '';
}
var element = document.getElementById('recdiv_END');
if (element) {
- if (i == recPerPage)
+ if (i == state.recPerPage)
element.style.display = 'none';
else
element.style.display = '';
}
}
-
-
-
function my_onshow(data) {
- totalRec = data.merged;
+ hideLogo();
+ totalRec = data.merged;
// move it out
var pager = document.getElementById("pager");
pager.innerHTML = "";
@@ -284,6 +338,11 @@ function my_onshow(data) {
html.push(" ");
html.push("");
}
+/*
+ html.push('');
+ html.push("item page;");
+ html.push("");
+*/
/*
if (hit.recid == curDetRecId) {
html.push(renderDetails_iphone(curDetRecData));
@@ -292,7 +351,7 @@ function my_onshow(data) {
html.push('');
}
if (data.activeclients == 0)
- document.getElementById("loading").style.display = 'none';
+ finishLoading();
/*
// set up "More..." if needed.
style = 'display:none';
@@ -393,10 +452,17 @@ function my_onterm(data) {
termlists.push('
Subjects
');
termlists.push('');
termlists.push('');
@@ -404,13 +470,20 @@ function my_onterm(data) {
termlists.push('Authors
');
termlists.push('');
termlists.push('');
var termlist = document.getElementById("termlist");
@@ -465,7 +538,7 @@ function my_onrecord(data) {
var html = renderDetails_iphone(curDetRecData);
detailRecordDiv.innerHTML = html;
showhide('detailview');
- document.getElementById("loading").style.display = 'none';
+ finishLoading();
}
function my_onrecord_iphone(data) {
@@ -497,7 +570,7 @@ function my_onbytarget(data) {
// wait until the DOM is ready
function domReady ()
{
- document.search.onsubmit = onFormSubmitEventHandler;
+ // document.search.onsubmit = onFormSubmitEventHandler;
document.search.query.value = '';
document.select.sort.onchange = onSelectDdChange;
document.select.perpage.onchange = onSelectDdChange;
@@ -506,11 +579,32 @@ function domReady ()
else
applicationMode(false);
+ window.location.parameters = parseQueryString(window.location.search);
+ window.location.parametersMulti = parseQueryStringMulti(window.location.search);
+
+ // hash params have highest priority, than query params
+ var params = (window.location.hash && window.location.hash.length > 1)
+ ? parseQueryString(getRealHash())
+ : window.location.parameters;
+ var paramsMulti = window.location.parametersMulti;
+/*
var params = parseQueryString(window.location.search);
if (params.query) {
document.search.query.value = params.query;
onFormSubmitEventHandler();
}
+
+*/
+ controlRegister.loadControls();
+
+ //append settings to the 'state'
+ loadSettings(function (setts) {
+ state.setFallbackSettings(setts);
+ controlRegister.populateControls(setts); // set controls from cookies
+ controlRegister.populateControls(params); // override from query string
+ stateChanged(params);
+ });
+
}
function applicationMode(newmode)
@@ -528,7 +622,7 @@ function applicationMode(newmode)
document.getElementById("normal").style.display="inline";
document.getElementById("normal").style.visibility="";
searchdiv.style.display = '';
- document.search.onsubmit = onFormSubmit;
+ //document.search.onsubmit = onFormSubmit;
}
callback.init();
}
@@ -536,7 +630,8 @@ function applicationMode(newmode)
function onFormSubmitEventHandler()
{
resetPage();
- document.getElementById("logo").style.display = 'none';
+ document.location.hash = "query=" + document.search.query.value;
+ //window.location.search = "query=" + document.search.query.value;
loadSelect();
triggerSearch();
submitted = true;
@@ -548,14 +643,39 @@ function onSelectDdChange()
if (!submitted) return false;
resetPage();
loadSelect();
- my_paz.show(0, recPerPage, curSort);
+ my_paz.show(0, state.recPerPage, curSort);
return false;
}
+
+function stateChanged(params) {
+ if (params == undefined)
+ return;
+ if (params["query"]) {
+ // If this page was accessed with a query param, usually means
+ // new page refresh, but not always!
+ state.reset(); // to ensure it's clean and fallbacks are loaded
+ calcRecPerPage();
+ state.loadParams(params);
+ } else if (params["query_state"]) {
+ // If this page was accessed with a serialized State object
+ state.reset(); // to ensure it's clean and fallbacks are loaded
+ state.deserialize(String(params["query_state"]));
+ }
+ document.search.query.value = state.simpleQuery;
+ document.select.sort.value = state.curSort;
+ //document.select.perpage.value = state.recPerPage;
+ if (document.category && document.category.category_filter) {
+ document.category.category_filter.value = state.categoryFilter;
+ }
+ if (document.search.query.value != "")
+ triggerSearch();
+}
+
function resetPage()
{
- curPage = 1;
- totalRec = 0;
+ state.curPage = 1;
+ totalRec = 0;
}
function getFacets() {
@@ -570,10 +690,11 @@ function getFacets() {
function triggerSearch ()
{
- // Restore to initial page size
+ // Restore to initial page size. Old stuff
recToShow = recToShowPageSize;
- document.getElementById("loading").style.display = 'inline';
- my_paz.search(document.search.query.value, recPerPage, curSort, curFilter, undefined,
+
+ displayLoading();
+ my_paz.search(document.search.query.value, state.recPerPage, curSort, curFilter, undefined,
{
"limit" : getFacets()
}
@@ -584,7 +705,7 @@ function triggerSearch ()
function loadSelect ()
{
curSort = document.select.sort.value;
- recPerPage = document.select.perpage.value;
+ //state.recPerPage = document.select.perpage.value;
}
// limit the query after clicking the facet
@@ -694,10 +815,10 @@ function drawPager (pagerDiv)
{
//client indexes pages from 1 but pz2 from 0
var onsides = 2;
- var pages = Math.ceil(totalRec / recPerPage);
+ var pages = Math.ceil(totalRec / state.recPerPage);
- var firstClkbl = ( curPage - onsides > 0 )
- ? curPage - onsides
+ var firstClkbl = ( state.curPage - onsides > 0 )
+ ? state.curPage - onsides
: 1;
var lastClkbl = firstClkbl + 2*onsides < pages
@@ -705,14 +826,14 @@ function drawPager (pagerDiv)
: pages;
var prev = 'Prev | ';
- if (curPage > 1)
+ if (state.curPage > 1)
var prev = ''
+'Prev | ';
var middle = '';
for(var i = firstClkbl; i <= lastClkbl; i++) {
var numLabel = i;
- if(i == curPage)
+ if(i == state.curPage)
numLabel = '' + i + '';
middle += ' '
@@ -720,7 +841,7 @@ function drawPager (pagerDiv)
}
var next = ' | Next';
- if (pages - curPage > 0)
+ if (pages - state.curPage > 0)
var next = ' | '
+'Next';
@@ -736,24 +857,33 @@ function drawPager (pagerDiv)
+ prev + predots + middle + postdots + next + '';
}
-function showPage (pageNum)
+function showPage(pageNum)
{
- curPage = pageNum;
- my_paz.showPage( curPage - 1 );
+ //state.curPage = pageNum;
+ state.curPage = pageNum;
+ displayLoading();
+ my_paz.showPage( state.curPage - 1 );
}
// simple paging functions
function pagerNext() {
- if ( totalRec - recPerPage*curPage > 0) {
+ if ( totalRec - state.recPerPage*state.curPage > 0) {
+ displayLoading();
my_paz.showNext();
- curPage++;
+ //curPage++;
+ state.curPage++;
}
}
function pagerPrev() {
- if ( my_paz.showPrev() != false )
- curPage--;
+ if ( my_paz.showPrev() != false ) {
+ displayLoading();
+ state.curPage--;
+ if (state.curPage <= 0)
+ throw "Zero or negative current page";
+ }
+
}
// swithing view between targets and records
@@ -777,6 +907,19 @@ function switchView(view) {
}
}
+function hideLogo() {
+ document.getElementById("logo").style.display = 'none';
+}
+
+function displayLoading() {
+ document.getElementById("loading").style.display = 'inline';
+}
+
+function finishLoading() {
+ document.getElementById("loading").style.display = 'none';
+}
+
+
// detailed record drawing
function showDetails (prefixRecId) {
var recId = prefixRecId.replace('rec_', '');
@@ -789,8 +932,8 @@ function showDetails (prefixRecId) {
return;
}
// request the record
- document.getElementById("loading").style.display = 'inline';
- my_paz.record(recId);
+ displayLoading()
+ my_paz.record_with_query(recId, state.simpleQuery);
}
function replaceHtml(el, html) {