Pull to refresh comptible on more devices + Navigation render on update

This commit is contained in:
Ghislain Loaec 2015-08-14 18:25:56 +02:00
parent 555cc00e4b
commit 110f2bfb02
2 changed files with 51 additions and 38 deletions

View File

@ -146,7 +146,7 @@ var app = {
},
checkForUpdate: function(resolve, reject) {
app.utils.setLoadingMsg("Verification des mises à jour");
app.utils.setLoadingMsg("Vérification des mises à jour");
var manifestReady = false;
var assetsReady = false;
@ -186,6 +186,7 @@ var app = {
onGetMtime('manifest', mtime, assetsReady);
manifestReady = true;
});
app.utils.getModifiedTime(app.manifest.meta.assetsUrl, function(mtime) {
app.assetsMtime = mtime;
onGetMtime('assets', mtime, manifestReady);
@ -194,11 +195,16 @@ var app = {
},
loadLocalManifest: function() {
// In case the url is incorrect, we get the backup manifest
app.safeManifest = app.manifest;
var manifest;
if(manifest = localStorage.getItem("momo-manifest")){
try {
app.manifest = JSON.parse(manifest);
} catch(e) {}
} catch(e) {
app.manifest = app.safeManifest;
}
}
},
@ -207,10 +213,6 @@ var app = {
if(DEBUG) console.log('load '+JSON.stringify(app.manifest));
app.utils.setLoadingMsg("Mise à jour du manifest - 0%");
// In case the url is incorrect, we get the backup manifest
app.safeManifest = app.manifest;
// Get manifest from localStorage if it exists
app.loadLocalManifest();
@ -246,6 +248,7 @@ var app = {
} catch(e) {
if(DEBUG) console.log('Cannot parse application manifest '+url);
app.flash('Le manifest JSON comporte des erreurs', 'danger');
app.manifest = app.safeManifest;
if(typeof reject === "function")
reject();
@ -262,9 +265,9 @@ var app = {
// Handle AJAX Error
request.onerror = function() {
app.onAjaxError(url);
if(typeof reject === "function")
reject();
app.onAjaxError(url);
};
// Send AJAX
@ -280,9 +283,6 @@ var app = {
// Restore safe manifest
app.manifest = app.safeManifest;
// And start application
app.start();
},
// Patch manifest response to set filesystem's relative paths (offline)
@ -452,7 +452,6 @@ var app = {
// Dev page refresh : redirect to home
window.location.replace('#home');
// Regiter pages tree
app.registerPage(app.manifest, app.defaultPage);
@ -483,9 +482,9 @@ var app = {
var id = data.id = data.id ? data.id : (data.title ? app.utils.hyphenate(data.title.stripTags()) : '_' + Math.random().toString(36).substr(2, 9));
// Make sure id is unique
var i = 1;
var i = 0;
while(app.pages.hasOwnProperty(data.id)){
data.id = id+'_'+i.toString();
data.id = id+'_'+(i++).toString();
}
// Register page
@ -1107,19 +1106,33 @@ var app = {
},
getModifiedTime: function(url, callback) {
var xhr = new XMLHttpRequest();
xhr.open('HEAD', url, true); // use HEAD - we only need the headers
xhr.onreadystatechange = function() {
if (xhr.readyState === 4 && xhr.status === 200) {
var mtime = new Date(xhr.getResponseHeader('Last-Modified'));
if (mtime.toString() === 'Invalid Date') {
callback(); // dont want to return a bad date
} else {
callback(mtime);
}
var xhr = new XMLHttpRequest();
xhr.open('HEAD', url, true); // use HEAD - we only need the headers
// AJAX Callback
xhr.onload = function() {
// AJAX success
if (xhr.status >= 200 && xhr.status < 400 || xhr.status == 0 /* iOS OhMyBuddha!! */) {
var mtime = new Date(xhr.getResponseHeader('Last-Modified'));
if (mtime.toString() === 'Invalid Date') {
//app.onAjaxError(url);
callback(); // dont want to return a bad date
} else {
callback(mtime);
}
// AJAX error
} else {
//app.onAjaxError(url);
callback(); // dont want to return a bad date
}
}
}
xhr.send();
// Handle AJAX Error
//xhr.onerror = function() {
// //app.onAjaxError(url);
// callback();
//};
xhr.send();
},
formatDate: function(date){

View File

@ -81,11 +81,11 @@ var WebPullToRefresh = (function () {
//options.overlay.addEventListener('touchend', _onTouchEnd);
}
options.h = new Hammer( options.contentEl, { touchAction: 'pan-y' } );
options.h = new Hammer( options.contentEl, { touchAction: 'auto' } );
options.h.get( 'pan' ).set( { direction: Hammer.DIRECTION_ALL } );
options.h.on( 'panstart', _panStart );
options.h.on( 'pandown panstart', _panStart );
options.h.on( 'pandown', _panDown );
options.h.on( 'panup', _panUp );
options.h.on( 'panright', _panRight );
@ -119,7 +119,7 @@ var WebPullToRefresh = (function () {
var scale = 1;
var rotation = 0;
if (true /*browser.usesAndroidInitTouchEventParameterOrder()*/) {
if (false /*browser.usesAndroidInitTouchEventParameterOrder()*/) {
touchEvent.initTouchEvent(
touches, targetTouches, changedTouches,
eventType,
@ -200,7 +200,9 @@ var WebPullToRefresh = (function () {
if ( pan.startingPositionY === 0 ) {
pan.enabled = true;
}
} else {
pan.enabled = false;
}
};
/**
@ -210,7 +212,7 @@ var WebPullToRefresh = (function () {
*/
var _panDown = function(e) {
if ( ! pan.enabled ) {
return;
return true;
}
e.preventDefault();
@ -228,7 +230,7 @@ var WebPullToRefresh = (function () {
*/
var _panUp = function(e) {
if ( ! pan.enabled || pan.distance === 0 ) {
return;
return true;
}
e.preventDefault();
@ -238,7 +240,6 @@ var WebPullToRefresh = (function () {
} else {
pan.distance = e.distance / options.resistance;
}
_setContentPan();
_setBodyClass();
};
@ -310,7 +311,6 @@ var WebPullToRefresh = (function () {
* @param {object} e - Event object
*/
var _panEnd = function(e) {
e.preventDefault();
//options.contentEl.style.transform = options.contentEl.style.webkitTransform = '';
@ -319,6 +319,11 @@ var WebPullToRefresh = (function () {
options.ptrEl.style.top = "";//60px";
bodyClass.remove( 'ptr-pulling' );
pan.distance = 0;
pan.distanceRight = 0;
pan.distanceLeft = 0;
pan.enabled = false;
if ( document.body.classList.contains( 'ptr-refresh' ) ) {
_doLoading();
} else if ( document.body.classList.contains( 'ptr-back' ) ) {
@ -328,11 +333,6 @@ var WebPullToRefresh = (function () {
} else {
_doReset();
}
pan.distance = 0;
pan.distanceRight = 0;
pan.distanceLeft = 0;
pan.enabled = false;
};
/**