silk.shop.basket = ( xb.core.object.extend( { ctor: function( domNode ) { this.resource = null; this.domNode = domNode; }, init: function( resource ) { this.resource = resource; var self = this; $( this.domNode ).on( "click touchend", function( evt ) { self.__onClick( evt ); } ); $( this.domNode ).on( "change", function( evt ) { self.__onChange( evt ); } ); this.domNode.addEventListener( "silk.postings.items.page::display-after", function( evt ) { var options = $( evt.target ).find( ".silk-object.basket-options > .silk-list" ); options.each( function() { var selected = -1; var items = $( this ).find( ".silk-elm.basket-option" ); if ( items.length ) { for ( var i = 0, il = items.length; i < il; i++ ) { if ( $( items[ i ] ).is( ".selected" ) ) { if ( selected >= 0 ) { $( items[ i ] ).removeClass( "selected" ); } else { selected = i; } } } if ( selected < 0 ) { $( items[ 0 ] ).addClass( "selected" ); } } } ); } ); }, __onClick: function( evt ) { this.onClickBasket( evt ); this.onClickProduct( evt ); }, __onChange: function( evt ) { var t = evt.target; if ( !$( t ).parents( "[data-simply-list=basket-list]" ).length ) { return; } if ( t.tagName.toLowerCase() === "select" ) { var value = t.options[ t.selectedIndex ].value; this.add( { "delivery": value } ); } }, onClickProduct: function( evt ) { //console.log( "Clicked me", this, evt.target ); if ( $( evt.target ).is( ".silk-elm.basket-option" ) ) { $( evt.target ) .parents( ".silk-object.basket-options > .silk-list" ) .find( ".silk-elm.basket-option" ) .each( function() { if ( this !== evt.target ) { $( this ).removeClass( "selected" ); } else { $( this ).addClass( "selected" ); } } ) ; return false; } var toAdd = $( evt.target ).is( ".button.basket-add" ) || ( $( evt.target ).parents( ".button.basket-add" ).length > 0 ); var toOrder = !toAdd && ( $( evt.target ).is( ".button.basket-order" ) || ( $( evt.target ).parents( ".button.basket-order" ).length > 0 ) ); if ( toAdd || toOrder ) { return this.onAddToBasket( evt, toOrder ); } }, onAddToBasket: function( evt, checkout ) { evt.preventDefault(); var template = $( evt.target ).parents( "[data-simply-data] > .silk-listItem" ); if ( !template.length ) { console.error( "basket::onAddToBasket", "could not find template listItem" ); return false; } var id = template.find( ".silk-id.posting-id" ); if ( !id.length ) { console.error( "basket::onAddToBasket", "could not find posting-id for product" ); return false; } var optionValue = null; var option = template.find( ".silk-elm.basket-option.selected" ); if ( option.length ) { optionValue = option[ 0 ].textContent; } var resource = template[ 0 ].parentNode.getAttribute( "data-simply-data" ); this.add( { "amount": 1, "option": optionValue, "checkout": checkout, "id": id[ 0 ].textContent, "resource": resource } ); }, onClickBasket: function( evt ) { var target = evt.target; if ( $( target ).hasClass( "basket-icon" ) || $( target ).parents( ".basket-icon" ).length ) { var basket = $( target ).parents( ".silk-object.basket" ); if ( basket.length ) { basket.toggleClass( "open" ); evt.preventDefault(); } } var product = $( target ).parents( ".silk-object.basket-product" ); var add = 0; if ( $( target ).hasClass( "icon" ) ) { if ( $( target ).hasClass( "minus" ) ) { add = -1; } else if ( $( target ).hasClass( "plus" ) ) { add = 1; } else if ( $( target ).hasClass( "delete" ) ) { var amount = product.find( ".silk-elm.basket-amount" ); if ( amount.length ) { add = -( amount[ 0 ].textContent ); } } } if ( add !== 0 ) { if ( product.length ) { var resource = product.find( ".silk-id.product-resource" ); var id = product.find( ".silk-id.product-id" ); var option = product.find( ".silk-elm.product-option" ); if ( id.length && option.length ) { this.add( { "amount": add, "resource": resource[ 0 ].textContent, "id": id[ 0 ].textContent, "option": option[ 0 ].textContent } ); } } evt.preventDefault(); } }, add: function( params ) { var self = this; var params = ( typeof( params ) === "object" ) ? params : {}; var http = new XMLHttpRequest(); http.open( "post", "/components/apps/shop/basket/json.add.php", true ); http.setRequestHeader( "Content-type", "application/x-www-form-urlencoded" ); http.onreadystatechange = function() { if ( http.readyState == 4 ) { if ( http.status == 200 ) { self.resource.init(); $( ".silk-object.basket" ).addClass( "open" ); } } }; http.send( jQuery.param( params ) ); if ( params.checkout === true ) { console.error( "FIXME:", "haal checkout url uit een data-checkout-url attribuut - waarde daarvan via config!" ); window.setTimeout( function() { window.location = "/afrekenen/"; }, 100 ); } } } ) )( document );