Commit 67f96207 by talequale

merge

parents 5249e7f9 293acf8e
let latest; let latest, STORE_VERSION = 'v0.1';
const store = new Store(latest = { const store = new Store(latest = {
commit: window.CommitID, _VERSION_: STORE_VERSION,
'navigation': { 'navigation': {
current: 'Login' current: 'Login'
}, },
...@@ -16,23 +16,23 @@ const store = new Store(latest = { ...@@ -16,23 +16,23 @@ const store = new Store(latest = {
try{ try{
var data = JSON.parse( localStorage.getItem( 'store' ) ); var data = JSON.parse( localStorage.getItem( 'store' ) );
if(data.commit !== store.get('commit')){ if(data._VERSION_ !== store.get('_VERSION_')){
console.warn('STORE:outdated, new state → localStorage'); console.warn('STORE:outdated, new state → localStorage');
console.warn('\tSTORE:currentData #'+ store.get('commit'), store._props); console.warn('\tSTORE:currentData #'+ store.get('_VERSION_'), store._props);
console.warn('\tSTORE:savedData # '+ window.CommitID, data); console.warn('\tSTORE:savedData #'+ STORE_VERSION, data);
console.warn('\tSTORE:hint → Run Store.restore() for restore saved state'); console.warn('\tSTORE:hint → Run Store.restore() for restore saved state');
console.warn('\tStore:hint → Run Store.update() for load latest default state'); console.warn('\tStore:hint → Run Store.update() for load latest default state');
Store.restore = function() { Store.restore = function() {
for( var k in data ){ for( var k in data ){
if(k !== 'commit'){ if(k !== '_VERSION_'){
store.set( k, data[ k ] ); store.set( k, data[ k ] );
} }
} }
}; };
Store.update = function() { Store.update = function() {
for( var k in latest ){ for( var k in latest ){
if(k !== 'commit'){ if(k !== '_VERSION_'){
store.set( k, latest[ k ] ); store.set( k, latest[ k ] );
} }
} }
...@@ -51,11 +51,11 @@ store.on('change', function() { ...@@ -51,11 +51,11 @@ store.on('change', function() {
const createSavableStore = function(name) { const createSavableStore = function(name) {
const store = new Store(latest = { const store = new Store(latest = {
commit: window.CommitID _VERSION_: STORE_VERSION
}); });
try{ try{
var data = JSON.parse( localStorage.getItem( name ) ); var data = JSON.parse( localStorage.getItem( name ) );
if(data.commit === store.get('commit')){ if(data._VERSION_ === store.get('_VERSION_')){
for( var k in data ){ for( var k in data ){
store.set( k, data[ k ] ); store.set( k, data[ k ] );
} }
......
...@@ -20,19 +20,6 @@ const CardSlider = D.declare( 'view.cmp.CardSlider', (cfg) => { ...@@ -20,19 +20,6 @@ const CardSlider = D.declare( 'view.cmp.CardSlider', (cfg) => {
update = function() { update = function() {
updateSize(); updateSize();
updateVisibleDom(); updateVisibleDom();
/*D.removeChildren(wrap);
D.appendChild(wrap, items.map(function(item, n) {
return <div className="cards-list__item">
<Card
type={'product,info,other'.split( ',' )[ n % 3 ]}
disabled={n % 5 === 0}
seen={n % 4 === 0}
title={item.name}
image={item.image}
/>
</div>
}));*/
}; };
...@@ -44,17 +31,31 @@ const CardSlider = D.declare( 'view.cmp.CardSlider', (cfg) => { ...@@ -44,17 +31,31 @@ const CardSlider = D.declare( 'view.cmp.CardSlider', (cfg) => {
}, 30)); }, 30));
let waitTimeout = false; let waitTimeout = false;
let tuning = false; let tuning = false;
let leftestItem = 0;
let lastLeftestItem = 0;
let tuneScrollPosition = function() { let tuneScrollPosition = function() {
waitTimeout = false; waitTimeout = false;
tuning = true; tuning = true;
let fromLeft = dom.scrollLeft; let fromLeft = dom.scrollLeft;
let firstItem = Math.round(fromLeft/(cardWidth+padding)); let firstItem = Math.round(fromLeft/(cardWidth+padding)-(lastLeftestItem>leftestItem?0.4:-0.4));
let toLeft = Math.round(firstItem*(cardWidth+padding)); let toLeft = Math.round(firstItem*(cardWidth+padding));
let deltaMove = (toLeft - fromLeft)/Math.ceil(200/(1000/60)); let deltaMove = (toLeft - fromLeft)/Math.ceil(200/(1000/60));
while(deltaMove>0 && deltaMove<1){
deltaMove *= 2;
}
if(Math.abs(fromLeft+deltaMove - toLeft) > Math.abs(fromLeft-toLeft)){
deltaMove = toLeft - fromLeft;
}
let tune = function() { let tune = function() {
if(Math.abs(toLeft-dom.scrollLeft) > (cardWidth+padding)){
return tuning = false;
}
if(Math.sign(toLeft-dom.scrollLeft) !== Math.sign(deltaMove)){
return tuning = false;
}
if(Math.abs(dom.scrollLeft-toLeft) < Math.abs(deltaMove)){ if(Math.abs(dom.scrollLeft-toLeft) < Math.abs(deltaMove)){
dom.scrollLeft = toLeft; dom.scrollLeft = toLeft;
tuning = false; return tuning = false;
}else{ }else{
dom.scrollLeft += deltaMove; dom.scrollLeft += deltaMove;
requestAnimationFrame( tune ); requestAnimationFrame( tune );
...@@ -67,13 +68,16 @@ const CardSlider = D.declare( 'view.cmp.CardSlider', (cfg) => { ...@@ -67,13 +68,16 @@ const CardSlider = D.declare( 'view.cmp.CardSlider', (cfg) => {
} }
}; };
let waitUntilDoNotTouchScroll=function() { let waitUntilDoNotTouchScroll = function() {
if(tuning) if(tuning)
return; return;
lastLeftestItem = leftestItem;
leftestItem = dom.scrollLeft/(cardWidth+padding);
if(waitTimeout) if(waitTimeout)
clearTimeout(waitTimeout); clearTimeout(waitTimeout);
waitTimeout = setTimeout(tuneScrollPosition,200); waitTimeout = setTimeout(tuneScrollPosition,80);
}; };
let dom; let dom;
let theDOM = <div class="card-slider"> let theDOM = <div class="card-slider">
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment