Cart
(0)
Cart (0)
Search
HOME
STORY
About The Brand
Manifesto
About The Product
Crasqi Sisters
About the Collection
Videos
SHOP
MEN
ACCESSORIES
LOOKBOOK
CRASQICREW
FIND US
Facebook
Instagram
Bulk Order
Share
Facebook
Twitter
GooglePlus
Email
Add Line Item
Total:
| [cart]['item_count'] [CDATA][
- [lineItem.searchResult]['sku'] ['price']"> Unit price: [lineItem.searchResult]['price'] | shopifyMoneyFormat[numVariants()][1000 + 2 * index + 1][CDATA][', '').replace('// ]; $scope.cart = null; $scope.hasChanges = false; $http.get('/cart.js').success(function(response) { $scope.cart = response; }); $scope.addLineItem = function(opt_initial) { $scope.lineItems.push({ searchResult: null, expanded: false, quantity: null }); if (!opt_initial) { $scope.hasChanges = true; } }; // Initialize the first empty line item in a timeout. // Certain themes look for number inputs at page load time // and replace them with custom widgets. $timeout(function() { $scope.addLineItem(true); }); $scope.updateCart = function() { $http.post('/cart/update.js', { 'updates': _.reduce($scope.lineItems, function(obj, lineItem) { if (lineItem.searchResult && _.isNumber(lineItem.quantity)) { obj[lineItem.searchResult]['variant_id']; $scope.hasChanges = false; }); }; $scope.$on('quantity-changed', function() { $scope.hasChanges = true; }); $scope.$on('delete-line-item', function(event, lineItem) { var idx = $scope.lineItems.indexOf(lineItem); if (idx != -1) { $scope.lineItems.splice(idx, 1); } }); $scope.$on('expand-all-variants', function(event, lineItem) { var idx = $scope.lineItems.indexOf(lineItem); if (idx != -1) { var args = [idx, 1]; angular.forEach(lineItem.searchResult['product']['variants'], function(variant) { var imageUrl = ''; if (variant['featured_image']['featured_image']['src']) { imageUrl = variant['featured_image']['src'] } else if (lineItem.searchResult['product']['featured_image']) { imageUrl = lineItem.searchResult['product']['featured_image']; } args.push({ quantity: lineItem.searchResult['variant_id'] == variant['id'] ? lineItem.quantity : null, expanded: true, searchResult: { 'product_title': lineItem.searchResult['product_title'], 'variant_title': variant['title'], 'variant_id': variant['id'], 'sku': variant['sku'], 'price': variant['price'], 'url': variant['url'], 'product': lineItem.searchResult['product'], 'thumbnail_url': shopifyImageUrl(imageUrl, 'thumb') } }); }); Array.prototype.splice.apply($scope.lineItems, args); } }); } function boLineItem() { return { scope: { lineItem: '=', index: '=', allLineItems: '=' }, templateUrl: 'line-item-template', controller: function($scope) { $scope.showLineItemAlreadyExistsMsg = false; $scope.selectResult = function(result) { $scope.showLineItemAlreadyExistsMsg = false; if ($scope.variantLineItemAlreadyExists(result.originalObject['variant_id']['variant_id'] == variantId) { exists = true; } }); return exists; }; $scope.quantityChanged = function() { $scope.$emit('quantity-changed'); }; $scope.deleteLineItem = function() { if (_.isNumber($scope.lineItem.quantity)) { $scope.lineItem.quantity = 0; $scope.quantityChanged(); } else { $scope.$emit('delete-line-item', $scope.lineItem); } }; $scope.numVariants = function() { return $scope.lineItem.searchResult['product']['variants'].length; }; $scope.expandAllVariants = function() { $scope.$emit('expand-all-variants', $scope.lineItem); }; } }; } function boConfigureAngucomplete($timeout) { return { restrict: 'A', link: function(scope, element, attrs) { var input = element.find('input'); input.attr('tabindex', attrs.boTabindex); $timeout(function() { input.focus(); }); } }; } function shopifyImageUrl(url, imageType) { if (url.indexOf('_' + imageType + '.') != -1) { return url; } var dotIdx = url.lastIndexOf('.'); return [url.slice(0, dotIdx), '_', imageType, url.slice(dotIdx, url.length)].join(''); } function shopifyMoneyFormat($shopifyMoneyFormatString, $sce) { return function(cents) { return $sce.trustAsHtml(Shopify.formatMoney(cents, $shopifyMoneyFormatString)); }; } function interpolator($interpolateProvider) { $interpolateProvider.startSymbol('['); $interpolateProvider.endSymbol(']['Shopify']['Shopify'] = {}; } if (!Shopify.formatMoney) { Shopify.formatMoney = function(cents, format) { if (typeof cents == 'string') cents = cents.replace('.',''); var value = ''; var patt = /\{\{\s*(\w+)\s*\}\}/; var formatString = (format || this.money_format); function addCommas(moneyString) { return moneyString.replace(/(\d+)(\d{3}[\.,]?)/,'$1,$2'); } switch(formatString.match(patt)[1]) { case 'amount': value = addCommas(floatToString(cents/100.0, 2)); break; case 'amount_no_decimals': value = addCommas(floatToString(cents/100.0, 0)); break; case 'amount_with_comma_separator': value = floatToString(cents/100.0, 2).replace(/\./, ','); break; case 'amount_no_decimals_with_comma_separator': value = addCommas(floatToString(cents/100.0, 0)).replace(/\./, ','); break; } return formatString.replace(patt, value); }; if (!window['floatToString']['floatToString'] = function(numeric, decimals) { var amount = numeric.toFixed(decimals).toString(); if(amount.match(/^\.\d+/)) {return "0"+amount; } else { return amount; } } } } } polyfillShopifyBuiltins(); angular.module('bulkOrderAppModule', ['angucomplete-alt'], interpolator) .controller('BulkOrderRootCtrl', BulkOrderRootCtrl) .directive('boLineItem', boLineItem) .directive('boConfigureAngucomplete', boConfigureAngucomplete) .filter('shopifyMoneyFormat', shopifyMoneyFormat) .value('$shopifyMoneyFormatString', BO_MONEY_FORMAT); })();