$(document).ready(function (){ if($(window).width() < 768){ $('.menu-side').on('click', function(e){ e.preventDefault(); $('.menu-side li:not(".active")').slideToggle(); }); $('.menu-side li:not(".active")').hide(); $('.menu-side>.active').html(''); $('.menu-side>.active').addClass('menu-side-mobile'); // hide menu if there are no items in it if($('#navbar ul li').length === 0){ $('#navbar').hide(); } $('#offcanvasClose').hide(); } $('.shipping-form input').each(function(e){ $(this).wrap('
'); var tag = $(this).attr('placeholder'); $(this).after(''); }); $('.shipping-form input').on('focus', function(){ $(this).next().addClass('floatLabel'); $(this).next().removeClass('hidden'); }); $('.shipping-form input').on('blur', function(){ if($(this).val() === ''){ $(this).next().addClass('hidden'); $(this).next().removeClass('floatLabel'); } }); $('.menu-btn').on('click', function(e){ e.preventDefault(); }); $('#sendTestEmail').on('click', function(e){ e.preventDefault(); $.ajax({ method: 'POST', url: '/admin/testEmail' }) .done(function(msg){ showNotification(msg, 'success'); }) .fail(function(msg){ showNotification(msg.responseText, 'danger'); }); }); if($('#footerHtml').length){ var footerHTML = window.CodeMirror.fromTextArea(document.getElementById('footerHtml'), { mode: 'xml', tabMode: 'indent', theme: 'flatly', lineNumbers: true, htmlMode: true, fixedGutter: false }); footerHTML.setValue(footerHTML.getValue()); } if($('#googleAnalytics').length){ window.CodeMirror.fromTextArea(document.getElementById('googleAnalytics'), { mode: 'xml', tabMode: 'indent', theme: 'flatly', lineNumbers: true, htmlMode: true, fixedGutter: false }); } if($('#customCss').length){ var customCss = window.CodeMirror.fromTextArea(document.getElementById('customCss'), { mode: 'text/css', tabMode: 'indent', theme: 'flatly', lineNumbers: true }); var customCssBeautified = window.cssbeautify(customCss.getValue(), { indent: ' ', autosemicolon: true }); customCss.setValue(customCssBeautified); } // add the table class to all tables $('table').each(function(){ $(this).addClass('table table-hover'); }); $('#frmProductTags').tokenfield(); $(document).on('click', '.dashboard_list', function(e){ window.document.location = $(this).attr('href'); }).hover(function(){ $(this).toggleClass('hover'); }); $('.product-title').dotdotdot({ ellipsis: '...' }); // Call to API for a change to the published state of a product $("input[class='published_state']").change(function(){ $.ajax({ method: 'POST', url: '/admin/product/published_state', data: {id: this.id, state: this.checked} }) .done(function(msg){ showNotification(msg, 'success'); }) .fail(function(msg){ showNotification(msg.responseText, 'danger'); }); }); $(document).on('click', '.btn-qty-minus', function(e){ var qtyElement = $(e.target).parent().parent().find('.cart-product-quantity'); $(qtyElement).val(parseInt(qtyElement.val()) - 1); cartUpdate(qtyElement); }); $(document).on('click', '.btn-qty-add', function(e){ var qtyElement = $(e.target).parent().parent().find('.cart-product-quantity'); $(qtyElement).val(parseInt(qtyElement.val()) + 1); cartUpdate(qtyElement); }); $(document).on('click', '.orderFilterByStatus', function(e){ e.preventDefault(); window.location = '/admin/orders/bystatus/' + $('#orderStatusFilter').val(); }); if($('#pager').length){ var pageNum = $('#pageNum').val(); var pageLen = $('#productsPerPage').val(); var productCount = $('#totalProductCount').val(); var paginateUrl = $('#paginateUrl').val(); var searchTerm = $('#searchTerm').val(); if(searchTerm !== ''){ searchTerm = searchTerm + '/'; } var pagerHref = '/' + paginateUrl + '/' + searchTerm + '{{number}}'; var totalProducts = Math.ceil(productCount / pageLen); if(parseInt(productCount) > parseInt(pageLen)){ $('#pager').bootpag({ total: totalProducts, page: pageNum, maxVisible: 5, href: pagerHref }); } } $(document).on('click', '#btnPageUpdate', function(e){ e.preventDefault(); $.ajax({ method: 'POST', url: '/admin/settings/pages/update', data: { page_id: $('#page_id').val(), pageName: $('#pageName').val(), pageSlug: $('#pageSlug').val(), pageEnabled: $('#pageEnabled').is(':checked'), pageContent: $('#pageContent').val() } }) .done(function(msg){ showNotification(msg.message, 'success', true); }) .fail(function(msg){ showNotification(msg.responseJSON.message, 'danger'); }); }); $(document).on('click', '.product_opt_remove', function(e){ e.preventDefault(); var name = $(this).closest('li').find('.opt-name').html(); $.ajax({ method: 'POST', url: '/admin/settings/option/remove/', data: {productId: $('#frmProductId').val(), optName: name} }) .done(function(msg){ showNotification(msg.message, 'success', true); }) .fail(function(msg){ showNotification(msg.responseJSON.message, 'danger'); }); }); $(document).on('click', '#product_opt_add', function(e){ e.preventDefault(); var optName = $('#product_optName').val(); var optLabel = $('#product_optLabel').val(); var optType = $('#product_optType').val(); var optOptions = $('#product_optOptions').val(); var optJson = {}; if($('#productOptJson').val() !== ''){ optJson = JSON.parse($('#productOptJson').val()); } var html = '
  • '; html += '
    '; html += '
    ' + optName + '
    '; html += '
    ' + optLabel + '
    '; html += '
    ' + optType + '
    '; html += '
    ' + optOptions + '
    '; html += '
    '; html += ''; html += '
  • '; // append data $('#product_opt_wrapper').append(html); // add to the stored json string optJson[optName] = { optName: optName, optLabel: optLabel, optType: optType, optOptions: $.grep(optOptions.split(','), function(n){ return n === 0 || n; }) }; // write new json back to field $('#productOptJson').val(JSON.stringify(optJson)); // clear inputs $('#product_optName').val(''); $('#product_optLabel').val(''); $('#product_optOptions').val(''); }); // validate form and show stripe payment $('#stripeButton').validator().on('click', function(e){ e.preventDefault(); if($('#shipping-form').validator('validate').has('.has-error').length === 0){ // if no form validation errors var handler = window.StripeCheckout.configure({ key: $('#stripeButton').data('key'), image: $('#stripeButton').data('image'), locale: 'auto', token: function(token){ $('#shipping-form').append(''); $('#shipping-form').submit(); } }); // open the stripe payment form handler.open({ name: $('#stripeButton').data('name'), description: $('#stripeButton').data('description'), zipCode: $('#stripeButton').data('zipCode'), amount: $('#stripeButton').data('amount'), currency: $('#stripeButton').data('currency') }); } }); // call update settings API $('#settingsForm').validator().on('submit', function(e){ if(!e.isDefaultPrevented()){ e.preventDefault(); // set hidden elements from codemirror editors $('#footerHtml_input').val($('.CodeMirror')[0].CodeMirror.getValue()); $('#googleAnalytics_input').val($('.CodeMirror')[1].CodeMirror.getValue()); $('#customCss_input').val($('.CodeMirror')[2].CodeMirror.getValue()); $.ajax({ method: 'POST', url: '/admin/settings/update', data: $('#settingsForm').serialize() }) .done(function(msg){ showNotification(msg.message, 'success'); }) .fail(function(msg){ showNotification(msg.responseJSON.message, 'danger'); }); } }); $(document).on('click', '.image-next', function(e){ var thumbnails = $('.thumbnail-image'); var index = 0; var matchedIndex = 0; // get the current src image and go to the next one $('.thumbnail-image').each(function(){ if($('#product-title-image').attr('src') === $(this).attr('src')){ if(index + 1 === thumbnails.length || index + 1 < 0){ matchedIndex = 0; }else{ matchedIndex = index + 1; } } index++; }); // set the image src $('#product-title-image').attr('src', $(thumbnails).eq(matchedIndex).attr('src')); }); $(document).on('click', '.image-prev', function(e){ var thumbnails = $('.thumbnail-image'); var index = 0; var matchedIndex = 0; // get the current src image and go to the next one $('.thumbnail-image').each(function(){ if($('#product-title-image').attr('src') === $(this).attr('src')){ if(index - 1 === thumbnails.length || index - 1 < 0){ matchedIndex = thumbnails.length - 1; }else{ matchedIndex = index - 1; } } index++; }); // set the image src $('#product-title-image').attr('src', $(thumbnails).eq(matchedIndex).attr('src')); }); $(document).on('click', '#orderStatusUpdate', function(e){ $.ajax({ method: 'POST', url: '/admin/order/statusupdate', data: {order_id: $('#order_id').val(), status: $('#orderStatus').val()} }) .done(function(msg){ showNotification(msg.message, 'success', true); }) .fail(function(msg){ showNotification(msg.responseJSON.message, 'danger'); }); }); $(document).on('click', '.product-add-to-cart', function(e){ var productOptions = getSelectedOptions(); $.ajax({ method: 'POST', url: '/admin/product/addtocart', data: {productId: $('#productId').val(), productQuantity: $('#product_quantity').val(), productOptions: JSON.stringify(productOptions)} }) .done(function(msg){ $('#cart-count').text(msg.totalCartItems); updateCartDiv(); showNotification(msg.message, 'success'); }) .fail(function(msg){ showNotification(msg.responseJSON.message, 'danger'); }); }); $('.cart-product-quantity').on('input', function(){ cartUpdate(); }); $(document).on('click', '.pushy-link', function(e){ $('body').removeClass('pushy-open-right'); }); $(document).on('click', '.add-to-cart', function(e){ var productLink = '/product/' + $(this).attr('data-id'); if($(this).attr('data-link')){ productLink = '/product/' + $(this).attr('data-link'); } if($(this).attr('data-has-options') === 'true'){ window.location = productLink; }else{ $.ajax({ method: 'POST', url: '/admin/product/addtocart', data: {productId: $(this).attr('data-id')} }) .done(function(msg){ $('#cart-count').text(msg.totalCartItems); updateCartDiv(); showNotification(msg.message, 'success'); }) .fail(function(msg){ showNotification(msg.responseJSON.message, 'danger'); }); } }); $(document).on('click', '#empty-cart', function(e){ $.ajax({ method: 'POST', url: '/admin/product/emptycart' }) .done(function(msg){ $('#cart-count').text(msg.totalCartItems); updateCartDiv(); showNotification(msg.message, 'success', true); }); }); $('.qty-btn-minus').on('click', function(){ $(this).parent().siblings('input').val(parseInt($(this).parent().siblings('input').val()) - 1); }); $('.qty-btn-plus').on('click', function(){ $(this).parent().siblings('input').val(parseInt($(this).parent().siblings('input').val()) + 1); }); // product thumbnail image click $('.thumbnail-image').on('click', function(){ $('#product-title-image').attr('src', $(this).attr('src')); }); $('.set-as-main-image').on('click', function(){ $.ajax({ method: 'POST', url: '/admin/product/setasmainimage', data: {product_id: $('#frmProductId').val(), productImage: $(this).attr('data-id')} }) .done(function(msg){ showNotification(msg.message, 'success', true); }) .fail(function(msg){ showNotification(msg.responseJSON.message, 'danger'); }); }); $('.btn-delete-image').on('click', function(){ $.ajax({ method: 'POST', url: '/admin/product/deleteimage', data: {product_id: $('#frmProductId').val(), productImage: $(this).attr('data-id')} }) .done(function(msg){ showNotification(msg.message, 'success', true); }) .fail(function(msg){ showNotification(msg.responseJSON.message, 'danger'); }); }); // Call to API to check if a permalink is available $(document).on('click', '#validate_permalink', function(e){ if($('#frmProductPermalink').val() !== ''){ $.ajax({ method: 'POST', url: '/admin/api/validate_permalink', data: {'permalink': $('#frmProductPermalink').val(), 'docId': $('#frmProductId').val()} }) .done(function(msg){ showNotification(msg, 'success'); }) .fail(function(msg){ showNotification(msg.responseText, 'danger'); }); }else{ showNotification('Please enter a permalink to validate', 'danger'); } }); // applies an product filter $(document).on('click', '#btn_product_filter', function(e){ if($('#product_filter').val() !== ''){ window.location.href = '/admin/products/filter/' + $('#product_filter').val(); }else{ showNotification('Please enter a keyword to filter', 'danger'); } }); // applies an order filter $(document).on('click', '#btn_order_filter', function(e){ if($('#order_filter').val() !== ''){ window.location.href = '/admin/orders/filter/' + $('#order_filter').val(); }else{ showNotification('Please enter a keyword to filter', 'danger'); } }); // resets the order filter $(document).on('click', '#btn_search_reset', function(e){ window.location.replace('/'); }); // resets the product filter $(document).on('click', '#btn_product_reset', function(e){ window.location.href = '/admin/products'; }); // resets the order filter $(document).on('click', '#btn_order_reset', function(e){ window.location.href = '/admin/orders'; }); // search button click event $(document).on('click', '#btn_search', function(e){ e.preventDefault(); if($('#frm_search').val().trim() === ''){ showNotification('Please enter a search value', 'danger'); }else{ window.location.href = '/search/' + $('#frm_search').val(); } }); // create a permalink from the product title if no permalink has already been set $(document).on('click', '#frm_edit_product_save', function(e){ if($('#frmProductPermalink').val() === '' && $('#frmProductTitle').val() !== ''){ $('#frmProductPermalink').val(slugify($('#frmProductTitle').val())); } }); if($('#input_notify_message').val() !== ''){ // save values from inputs var messageVal = $('#input_notify_message').val(); var messageTypeVal = $('#input_notify_messageType').val(); // clear inputs $('#input_notify_message').val(''); $('#input_notify_messageType').val(''); // alert showNotification(messageVal, messageTypeVal, false); } }); function deleteFromCart(element){ $.ajax({ method: 'POST', url: '/admin/product/removefromcart', data: {cart_index: element} }) .done(function(msg){ $('#cart-count').text(msg.totalCartItems); if(msg.totalCartItems === 0){ showNotification(msg.message, 'success'); setTimeout(function(){ window.location = '/'; }, 3700); }else{ showNotification(msg.message, 'success', true); } }) .fail(function(msg){ showNotification(msg.responseJSON.message, 'danger'); }); } function slugify(str){ var $slug = ''; var trimmed = $.trim(str); $slug = trimmed.replace(/[^a-z0-9-æøå]/gi, '-') .replace(/-+/g, '-') .replace(/^-|-$/g, '') .replace(/æ/gi, 'ae') .replace(/ø/gi, 'oe') .replace(/å/gi, 'a'); return $slug.toLowerCase(); } function cartUpdate(element){ if($(element).val() === 0){ deleteFromCart($(element).attr('data-id')); }else{ if($(element).val() !== ''){ updateCart(); } } } function updateCart(){ // gather items of cart var cartItems = []; $('.cart-product-quantity').each(function(){ var item = { cartIndex: $(this).attr('id'), itemQuantity: $(this).val(), productId: $(this).attr('data-id') }; if($(this).val() === '0'){ deleteFromCart($(this).attr('data-id')); }else{ cartItems.push(item); } }); // update cart on server $.ajax({ method: 'POST', url: '/admin/product/updatecart', data: {items: JSON.stringify(cartItems)} }) .done(function(msg){ // update cart items updateCartDiv(); $('#cart-count').text(msg.totalCartItems); }) .fail(function(msg){ showNotification(msg.responseJSON.message, 'danger'); }); } function updateCartDiv(){ // get new cart render var path = window.location.pathname.split('/').length > 0 ? window.location.pathname.split('/')[1] : ''; $.ajax({ method: 'GET', url: '/cartPartial', data: {path: path} }) .done(function(msg){ // update cart div $('#cart').html(msg); }) .fail(function(msg){ showNotification(msg.responseJSON.message, 'danger'); }); } function getSelectedOptions(){ var options = {}; $('.product-opt').each(function(){ options[$(this).attr('name')] = $(this).val(); }); return options; } // show notification popup function showNotification(msg, type, reloadPage){ // defaults to false reloadPage = reloadPage || false; $('#notify_message').removeClass(); $('#notify_message').addClass('alert-' + type); $('#notify_message').html(msg); $('#notify_message').slideDown(600).delay(2500).slideUp(600, function(){ if(reloadPage === true){ location.reload(); } }); } function searchForm(id){ $('form#' + id).submit(); }