silk.shop.items = xb.core.object.extend( { } ); silk.shop.items.mount = xb.core.object.extend( silk.node.mount, { ctor: function( domNode, name, resource ) { if ( typeof( this.DOMNodeHandler ) === "undefined" || this.DOMNodeHandler === null ) { this.DOMNodeHandler = silk.shop.items.mount.handler; } silk.node.mount.prototype.ctor.call( this, domNode, name, resource ); }, onLoad: function() { console.log( "silk.shop.items.mount: loaded" ); }, getSetting: function( fieldName, mountName ) { var value = null; var mountName = ( typeof( mountName ) === "string" ) ? mountName : this.name; var config = silk.postings.config[ this.resource.config.name ]; if ( typeof( config.settings ) === "object" ) { if ( typeof( config.settings[ mountName ] ) === "object" ) { if ( typeof( config.settings[ mountName ][ fieldName ] ) !== "undefined" ) { return config.settings[ mountName ][ fieldName ]; } } } return value; }, display: function( data, reset ) { var self = this; this.render( data, reset ); // FIXME!!: Gooi een event, en handle onderstaande in een handler! objectFitImages(); }, onDOMChange: function( handler, before ) { var data = this.resource.data[ this.fieldName ]; //data.onDOMChange( handler, before ); var changes = data.handleDOMChanges( handler, before ); data.delete( changes.removed ); data.update( changes.mutations ); if ( changes.added.length ) { } data.add( changes.added ); data.reorder( changes.reorder[ 0 ], changes.reorder[ 1 ] ); }, save: function() { // return; for ( var i = 0, il = this.nodes.length; i < il; i++ ) { $( this.nodes[ i ].domNode ) .find( "[data-silk-new]" ) .each( function() { this.removeAttribute( "data-silk-new" ); } ) ; } debugger return this.resource.data[ this.fieldName ].set; } } ); silk.shop.items.mount.handler = xb.core.object.extend( silk.node.mount.DOMNode, { factory: function( mount, domNode ) { return new silk.shop.items.mount.handler( mount, domNode ); }, ctor: function( mount, domNode ) { var self = this; silk.node.mount.DOMNode.prototype.ctor.call( this, mount, domNode ); var updating = false; var fn = function( evt ) { if ( !self.mount.resource.done ) { return; } if ( !updating ) { updating = true; window.setTimeout( function() { updating = false; self.display_update( evt ); }, 150 ); } }; window.addEventListener( "resize", fn ); window.addEventListener( "scroll", fn ); }, display_update: function( evt ) { var resource = this.mount.resource; var __view = "list"; if ( typeof( resource.data[ "postings-view" ] ) === "string" ) { __view = resource.data[ "postings-view" ]; } if ( __view !== "list" ) { return; } var info = resource.data[ "postings-query" ]; if ( typeof( info ) !== "object" || info === null ) { return; } //console.log( resource.getSelection() ); var cRect = this.domNode.getBoundingClientRect(); var i = cRect.bottom - window.innerHeight; //console.log( "offset", i ); if ( i > 300 ) { return; } //console.log( "dispatcher.shop.items::display_update", info ); if ( info.offset + info.limit >= info.count ) { //console.log( "dispatcher.shop.items::display_update", "no extra load needed" ); return; } var s = resource.getSelection(); s.deselect( "offset" ); s.select( "offset", info.offset + info.limit ); resource.master.view_update(); }, display: function( data, reset ) { var resource = this.mount.resource; var __view = "list"; if ( typeof( resource.data[ "postings-view" ] ) === "string" ) { __view = resource.data[ "postings-view" ]; } if ( reset ) { this.domNode.setAttribute( "data-postings-view", __view ); this.domNode.parentElement.setAttribute( "data-postings-view", __view ); if ( __view === "detail" ) { window.scroll( 0, 0 ); } } silk.node.mount.DOMNode.prototype.display.call( this, data, reset ); if ( reset ) { this.afterEffects( this.domNode, data ); } }, afterEffects: function( domNode, data ) { var query = silk.html.query( [ "$(shop/view/mount) := list > .silk-listItem := listItem > .silk-object := object [data-simply-field=posting-id] := id", ] ); var products = query.find( domNode ); for ( var i = 0, il = products.length; i < il; i++ ) { var product = products[ i ]; var _id = product.id.domNode.textContent; var item = data.get( _id ); if ( item === null ) { console.error( "No item", _id ); continue; } if ( ( item.classes instanceof Array ) && item.classes.length ) { for ( var j = 0, jl = item.classes.length; j < jl; j++ ) { if ( item.classes[ j ] ) { if ( product.object ) { product.object.domNode.classList.add( item.classes[ j ] ); } product.listItem.domNode.classList.add( item.classes[ j ] ); } } //products[ i ].listItem.domNode.classList.add( classes ); //console.warn( product ); } } } } );