var pageWidth = 3; var perPage = 5; var globalVendorList; var globalCategoryList; var websocket; var queryProductRecommend = function(ws, id) { req = { "cmd" : "shop", "route" : "product_recommend", "id" : id } ws.send(JSON.stringify(req)) } var queryProduct = function(ws, id) { req = { "cmd" : "shop", "route" : "product", "id" : id } ws.send(JSON.stringify(req)) } var handleProduct = function(r) { $('#loading').hide() r.userId = getCookie("user_id") $('#body_container').templateRender('details', r); } var handleProductRecommend = function(r) { $('#recommended_products').templateRender('recommended_products', r); } var handleProducts = function(t, r, container) { $('#loading').hide() r.page = parseInt($.urlParam('p')) if(!r.page) r.page = 1; var pages = [ ] try { var maxPage = Math.ceil( (r.results.total / perPage)) console.log('Max pages: ' + maxPage) for(var k = r.page - (pageWidth +1); k <= (r.page + pageWidth - 1); k++) { if(k < 0) k = 1; if(k > maxPage) break; pages.push(k) } r.pages = pages r.maxPage = maxPage } catch(e) { } console.log(t) console.log("container") console.log(container) $('#' + container).templateRender(t, r); if(container != 'body_container' && r.filter && r.filter != 'featured') { // write our meta stats $('#app_count').html(r.results.total) $('#vendor_count').html(globalVendorList.length) $('#cat_count').html(globalCategoryList.length) /***** Counter Up *****/ $('.counter').counterUp({ delay: 10, time: 2000 }); } $(".preloader").fadeOut(1000); } var handleVendorProducts = function(r) { $('#loading').hide() r.page = parseInt($.urlParam('p')) if(!r.page) r.page = 1; var pages = [ ] var maxPage = Math.ceil( (r.results.total / perPage)) console.log('Max pages: ' + maxPage) for(var k = r.page - (pageWidth +1); k <= (r.page + pageWidth - 1); k++) { if(k < 0) k = 1; if(k > maxPage) break; pages.push(k) } r.pages = pages r.maxPage = maxPage console.log(r.pages) $('#body_container').templateRender('vendors', r); $(".preloader").fadeOut(1000); } var handleCategoryProducts = function(r) { $('#loading').hide() r.page = parseInt($.urlParam('p')) if(!r.page) r.page = 1; var pages = [ ] var maxPage = Math.ceil( (r.results.total / perPage)) console.log('Max pages: ' + maxPage) for(var k = r.page - (pageWidth +1); k <= (r.page + pageWidth - 1); k++) { if(k < 0) k = 1; if(k > maxPage) break; pages.push(k) } r.pages = pages r.maxPage = maxPage $('#body_container').templateRender('categories', r); $(".preloader").fadeOut(1000); } var queryByVendor = function(ws, id, filter=null) { console.log(filter) var perPage = parseInt($.urlParam('o')); if(!perPage) perPage = 5; var page = parseInt($.urlParam('p')) if(!page) page = 1; req = { "cmd" : "shop", "route" : "products", "method" : "vendor", "start" : (page - 1) * perPage, "end" : (page) * perPage, "id" : id } if(filter) req.filter = filter; ws.send(JSON.stringify(req)) } var queryByCategory = function(ws, id, filter=null) { var perPage = parseInt($.urlParam('o')) if(!perPage) perPage = 5; var page = parseInt($.urlParam('p')) if(!page) page = 1; req = { "cmd" : "shop", "route" : "products", "method" : "category", "start" : (page - 1) * perPage, "end" : (page) * perPage, "id" : id } if(filter) req.filter = filter; ws.send(JSON.stringify(req)) } var queryProducts = function(ws, filter=null, container=full, lper=5) { var perPage = parseInt($.urlParam('o')) if(lper) perPage = lper; if(!perPage) perPage = 5; var page = parseInt($.urlParam('p')) if(!page) page = 1; req = { "cmd" : "shop", "route" : "products", "container" : container, "start" : (page - 1) * perPage, "end" : (page) * perPage } if(filter) req.filter = filter; console.log(req) ws.send(JSON.stringify(req)) } var queryToken = function(ws) { // make ajax request $.getJSON("/api/session", function(data) { $(".preloader").fadeOut(1000); $('#body_container').templateRender('signup', data.oauth2Profile ); }); } var throwError = function(e) { $("#error").empty() html = '
Error ' + e + '
' console.log(html) $("#error").html(html) $("#error").show() } var handleRegistration = function(r) { console.log(r) // save user_id cookie if(r.status == false) { console.log("Throwing error") throwError(r.msg) return } setCookie("user_id", r.results[0].id , 3600); // redirect window.location.replace("/"); } var handleAuthentication = function(r) { console.log(r); // if auth fails entirely, then prompt the login buttons... if(!('oauth2Profile' in r.results)) { // login handler, get template and orient var data = { "oauth2_baseurl" : "https://accounts.google.com/o/oauth2/v2/auth", "oauth2_client_id" : "79144872999-2pcqi15rt9366hvlcll05bbiv0m11sb2.apps.googleusercontent.com", "oauth2_redirecturl" : "https://marketplace.hawk.io/api/oauth2", "oauth2_custom_fields" : "response_type=code&scope=https://www.googleapis.com/auth/userinfo.profile%20https://www.googleapis.com/auth/userinfo.email&", "randomState" : "0.5206055706737784" } $('#login_button').templateRender('top_login', data); } else { $('#login_button').templateRender('top_profile', r.results); } } var queryAuthentication = function(ws) { req = { "cmd" : "profile", "route" : "token" } console.log(req) ws.send(JSON.stringify(req)) } var submitOrder = function(ws, data) { console.log('Submit review'); req = { "cmd" : "shop", "route" : "order", "data" : data } console.log(req) ws.send(JSON.stringify(req)) } var submitReview = function(ws, data) { console.log('Submit review'); req = { "cmd" : "reviews", "route" : "add", "data" : data } console.log(req) ws.send(JSON.stringify(req)) } var submitSignup = function(ws) { console.log('Submit data'); arr = $("#signup").serializeArray() data = { } for(k in arr) { data[arr[k].name] = arr[k].value } console.log(data) req = { "cmd" : "profile", "route" : "register", "data" : data } console.log(req) ws.send(JSON.stringify(req)) return false; } var setHelp = function(ws, id, product_id, value) { data = { "id" : id, "value" : value, "product_id" : product_id } req = { "cmd" : "reviews", "route" : "set_help", "data" : data } console.log(req) ws.send(JSON.stringify(req)) } var handleCartGet = function(r) { console.log(r.results) // for each set contents of value and set the template data $('.cart-body').empty() $('.cart-body').templateRender('top_cart', r ); $('.cart-amt').empty() $('.cart-amt').append(r.results.length) console.log('setting length') console.log(r.results.length) if(window.location.pathname == "/cart") { $('#body_container').templateRender('cart', r ); $(".preloader").fadeOut(1000); } else if(window.location.pathname == "/checkout") { $('#body_container').templateRender('checkout', r); $(".preloader").fadeOut(1000); } } var deleteCart = function(ws, item) { req = { "cmd" : "cart", "route" : "delete", "id" : item } console.log(req) ws.send(JSON.stringify(req)) } var addCart = function(ws, item) { req = { "cmd" : "cart", "route" : "add", "id" : item } console.log(req) ws.send(JSON.stringify(req)) } var queryCart = function(ws) { req = { "cmd" : "cart", "route" : "get" } console.log(req) ws.send(JSON.stringify(req)) } var querySearch = function(ws, q, lper=5) { var perPage = parseInt($.urlParam('o')) if(lper) perPage = lper; if(!perPage) perPage = 5; var page = parseInt($.urlParam('p')) if(!page) page = 1; req = { "cmd" : "shop", "route" : "products", "method" : "search", "container" : "body_container", "start" : (page - 1) * perPage, "end" : (page) * perPage, "q" : q } console.log(req) ws.send(JSON.stringify(req)) } var queryVendors = function(ws) { req = { "cmd" : "shop", "route" : "vendors" } console.log(req) ws.send(JSON.stringify(req)) } var handleSideVendors = function() { // get our value $('#side-vendor-list').empty() r = globalVendorList // add list console.log(r) for(x in r) { $('#side-vendor-list').append('
  • ' + r[x].name + '
  • ') } } var handleOrder = function(r) { // redirect to completed if success.... window.location.replace("/completed"); } var handleVendors = function(r) { $('#vendor-list').empty() var amountPerColumn = 5; globalVendorList = r var html = ''; $('#vendor-list').append(html); handleSideVendors() // show and hide loading... } var queryCategories = function(ws) { req = { "cmd" : "shop", "route" : "categories" } ws.send(JSON.stringify(req)) } var handleSideCategories = function() { r = globalCategoryList $('#side-category-list').empty() // add list console.log('Side Categories...') console.log(r) for(x in r) { $('#side-category-list').append('
  • ' + r[x].name + '
  • ') } } var handleCategories = function(r) { $('#category-list').empty() // add list console.log(r) globalCategoryList = r; for(x in r) { $('#category-list').append('
  • ' + r[x].name + '
  • ') } $('#mobile-category-list').empty() // add list console.log(r) globalCategoryList = r; for(x in r) { $('#mobile-category-list').append('
  • ' + r[x].name + '
  • ') } handleSideCategories() } var onOpen = function(event) { console.log("Open"); console.log(event); } var onError = function(event) { console.log("Error"); console.log(event); } var onMessage = function(event) { var data = JSON.parse(event.data); console.log("DATA"); console.log(data); // do something with this and hand it off to proper handler // take result, depending on what it is and store/set it somewhere that auto triggers population of data switch(data.cmd) { case "hello": console.log('successful connection'); break; case "cart": switch(data.route) { case "delete": case "clear": case "add": case "get": handleCartGet(data) break; } break; case "shop": switch(data.route) { case "categories": handleCategories(data.results) break; case "vendors": handleVendors(data.results) break; case "product": handleProduct(data.results) $(".preloader").fadeOut(1000); break; case "order": handleOrder(data.results) break; case "products": console.log(data); if('method' in data) { if(data.method == 'vendor') { handleVendorProducts(data) } else if (data.method == 'category') { handleCategoryProducts(data) } else if (data.method == 'search') { handleProducts('search', data, data.container) } } else { // use filter console.log('newest data goo') if('filter' in data) { if(data.filter == 'newest') { // if index, then use sub if(data.container == 'body_container') handleProducts('whatsnew', data, data.container) else handleProducts('mid_container', data, data.container) } else if(data.filter == 'popular') { if(data.container == 'body_container') handleProducts('popular', data, data.container) else handleProducts('mid_container', data, data.container) } else if(data.filter == 'top') { console.log('TOPP') handleProducts('mid_container', data, data.container) } else if(data.filter == 'featured') { console.log('feature') handleProducts('mid_container', data, data.container) } } } $(".preloader").fadeOut(1000); break; case "product_recommend": handleProductRecommend(data) break; } break; case "profile": switch(data.route) { case "token": handleAuthentication(data); break; case "register": handleRegistration(data); break; } case "reviews": switch(data.route) { case "add": // refresh page... location.hash = '#review' location.reload() break; } break; } } function waitForSocketConnection(socket, callback){ setTimeout( function () { if (socket.readyState === 1) { console.log("Connection is made") if (callback != null){ callback(); } } else { console.log("wait for connection...") waitForSocketConnection(socket, callback); } }, 5); // wait 5 milisecond for the connection... } $(document).ready(function(){ /***** Mobile Menu *****/ jQuery('nav#dropdown').meanmenu({ meanScreenWidth: "767" }); /***** Isotope Gallery *****/ $(window).on('load', function() { //Preloader $(".preloader .item-wrapper").delay(700).animate({ top: "-100%" },1000,"easeInQuart"); var connect = function() { websocket = new WebSocket('wss://' + window.location.host); websocket.onerror = onError; websocket.onopen = function(x) { console.log("local open") onOpen(x) } websocket.onmessage = onMessage; websocket.onclose = function(e) { console.log('Socket is closed. Reconnect will be attempted in 1 second.', e.reason); setTimeout(function() { connect(); }, 1000); }; }; connect(); // get path and route to js accordingly console.log(window.location); if(window.location.pathname == "/") { $('#body_container').templateRender('index_body', { }); $(".preloader").fadeOut(1000); } else if(window.location.pathname == "/signup") { waitForSocketConnection(websocket, function() { queryToken(websocket) }); } else if(window.location.pathname == "/profile") { $('#body_container').templateRender('profile', { }); $(".preloader").fadeOut(1000); } else if(window.location.pathname == "/checkout") { } else if(window.location.pathname == "/completed") { $('#body_container').templateRender('completed', { }); $(".preloader").fadeOut(1000); } else if(window.location.pathname == "/cart") { // contents already exist... /* $('#body_container').templateRender('cart', { }); $(".preloader").fadeOut(1000); */ } else if(window.location.pathname == "/search") { // search and get results waitForSocketConnection(websocket, function() { q = $.urlParam('q') if(q) querySearch(websocket, q) else { // render search template $('#body_container').templateRender('search_base', { }); $(".preloader").fadeOut(1000); } }) //$('#body_container').templateRender('search', { }); } else if(window.location.pathname.indexOf("/popular") != -1 ) { // fetch categories and render template $('#products').hide() $('#loading').show() // get list of products by category # waitForSocketConnection(websocket, function() { console.log('Querying by category....') queryProducts(websocket, 'popular', "body_container") }); } else if(window.location.pathname.indexOf("/whatsnew") != -1 ) { // fetch categories and render template $('#products').hide() $('#loading').show() // get list of products by category # waitForSocketConnection(websocket, function() { console.log('Querying by category....') queryProducts(websocket, 'newest', "body_container") }); } else if(window.location.pathname.indexOf("/categories") != -1 ) { // fetch categories and render template $('#products').hide() $('#loading').show() // get list of products by category # var id = $(location).attr('pathname').substring($(location).attr('pathname').indexOf('/categories/') + 12, $(location).attr('pathname').length) waitForSocketConnection(websocket, function() { console.log('Querying by category....') queryByCategory(websocket, id) }); } else if(window.location.pathname.indexOf("/vendors") != -1 ) { $('#products').hide() $('#loading').show() // get list of products by category # var id = $(location).attr('pathname').substring($(location).attr('pathname').indexOf('/vendors/') + 9, $(location).attr('pathname').length) waitForSocketConnection(websocket, function() { console.log('Querying by vendor....') queryByVendor(websocket, id) }); } else if(window.location.pathname.indexOf("/app/details") != -1) { // get product $('#loading').show() // get list of products by category # var id = $(location).attr('pathname').substring($(location).attr('pathname').indexOf('/app/details/') + 13, $(location).attr('pathname').length) console.log(id); waitForSocketConnection(websocket, function() { queryProduct(websocket, id); }); } else { // 404 } waitForSocketConnection(websocket, function() { console.log('socket is ready') queryAuthentication(websocket) queryCategories(websocket) queryVendors(websocket) queryCart(websocket) }) }); /* $(".testimonial-slider").owlCarousel({ autoplay:true, autoplayTimeout:4000, smartSpeed:1000, loop: true, responsiveClass: true, items : 2, nav : false, margin: 30, dots: false, responsive: { 0: { items: 1 }, 576: { items: 1 }, 768: { items: 2 }, 992: { items: 2 } } }); $(".team-slider").owlCarousel({ autoplay:false, autoplayTimeout:4000, smartSpeed:1000, loop: true, responsiveClass: true, items : 3, nav : true, navText: ['', ''], margin: 30, dots: false, responsive: { 0: { items: 1 }, 576: { items: 1 }, 768: { items: 2 }, 992: { items: 3 } } }); */ /***** Magnific Popup *****/ $('#video-btn').magnificPopup({ type: 'iframe', iframe: { markup: '
    ' + '
    ' + '' + '
    ', patterns: { youtube: { index: 'youtube.com/', id: 'v=', src: 'http://www.youtube.com/embed/%id%?autoplay=1' } }, srcAction: 'iframe_src' } }); /***** Sicky Menubar *****/ $(window).on('scroll',function() { var scroll = $(window).scrollTop(); if (scroll < 250) { $("header").removeClass("sticky"); }else{ $("header").addClass("sticky"); } }); /***** Back To Top *****/ $(window).scroll(function(){ if($(this).scrollTop()>500){ $(".back-to-top").fadeIn(); } else{ $(".back-to-top").fadeOut(); } }); $(".back-to-top").on('click',function(){ $("html, body").animate({scrollTop:0}, 900); }); $("#signup-button").on('click', function(e) { e.preventDefault() waitForSocketConnection(websocket, function() { submitSignup(websocket) }); }); /***** Syotimer *****/ /* $('#timer-wrapper').syotimer({ year: 2020, month: 6, day: 1, hour: 7, minute: 30 }); */ });