silk.shop.categories = xb.core.object.extend( { } ); silk.shop.categories.mount = xb.core.object.extend( silk.node.mount, { ctor: function( domNode, name, resource ) { this.DOMNodeHandler = silk.shop.categories.mount.handler; this.$id = 0; this.indexed = {}; silk.node.mount.prototype.ctor.call( this, domNode, name, resource ); }, onLoad: function() { var self = this; }, display: function( data, reset ) { this.render( data, reset ); }, save: function( data ) { 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" ); } ) ; } return this.resource.data[ this.fieldName ].set; }, } ); silk.shop.categories.mount.handler = xb.core.object.extend( silk.node.mount.DOMNode, { factory: function( mount, domNode ) { console.warn( "domNode", domNode ); return new silk.shop.categories.mount.handler( mount, domNode ); }, ctor: function( mount, domNode ) { this.rendered = false; this.init(); silk.node.mount.DOMNode.prototype.ctor.call( this, mount, domNode ); }, display: function( data, reset ) { var index = {}; if ( data.set instanceof Array ) { for ( var i = 0, il = data.set.length; i < il; i++ ) { var items = data.set[ i ][ "category-items" ]; if ( items instanceof Array ) { for ( var j = 0, jl = items.length; j < jl; j++ ) { index[ items[ j ][ "category-id" ] ] = items[ j ]; } } } } this.__index = index; var resource = this.mount.resource; var __view = "list"; if ( typeof( resource.data[ "postings-view" ] ) === "string" ) { __view = resource.data[ "postings-view" ]; } this.domNode.setAttribute( "data-postings-view", __view ); this.domNode.parentElement.setAttribute( "data-postings-view", __view ); var initialRender = !this.domNode.children.length; if ( initialRender ) { silk.node.mount.DOMNode.prototype.display.call( this, data, reset ); var p = this.domNode.querySelector( ".silk-object.category-pulldown" ); if ( p !== null ) { // p.classList.add( "open" ); } } else { console.warn( "Going to update categories" ) } var evt = new CustomEvent( "events/dispatcher/render", { detail: { data: data, object: this, initialRender: initialRender } } ); this.domNode.dispatchEvent( evt ); }, afterEffects: function( domNode, index ) { // console.warn( "afterEffects::data", data ); var o = silk.html.query( "$( shop/categories/mount ) := mount" ) .match( domNode ) ; o.mount.update( index ); return; }, onDOMChange: function( mutations, dt, mObserver ) { silk.node.mount.DOMNode.prototype.onDOMChange.call( this, mutations, dt, mObserver ); }, init: function() { } } );