Basics in place, about to rework karma config

This commit is contained in:
Will Marshall
2014-04-08 12:58:37 +10:00
parent fbcf06f5f5
commit f6c173d0de
17 changed files with 254 additions and 69 deletions

View File

@@ -4,8 +4,10 @@
#= require spin
#
#= require angular
#= require angular-cookies
#= require angular-resource
#= require ../shared/mm-foundation-tpls-0.2.0-SNAPSHOT
#= require ../shared/angular-local-storage.js
#
#= require ../shared/jquery.timeago
#= require foundation

View File

@@ -1,9 +1,12 @@
Darkswarm.controller "CheckoutCtrl", ($scope, $rootScope, Order) ->
$scope.require_ship_address = false
Darkswarm.controller "CheckoutCtrl", ($scope, $rootScope, Order, storage) ->
$scope.order = $scope.Order = Order
$scope.shippingMethodChanged = ->
Order.shippingMethodChanged()
# Binding accordion panel states to local storage
storage.bind $scope, "user"
storage.bind $scope, "details"
storage.bind $scope, "billing"
storage.bind $scope, "shipping"
storage.bind $scope, "payment"
$scope.purchase = (event)->
event.preventDefault()

View File

@@ -1,4 +1,4 @@
window.Darkswarm = angular.module("Darkswarm", ["ngResource", "filters", 'mm.foundation']).config ($httpProvider, $tooltipProvider) ->
window.Darkswarm = angular.module("Darkswarm", ["ngResource", "filters", 'mm.foundation', 'angularLocalStorage']).config ($httpProvider, $tooltipProvider) ->
$httpProvider.defaults.headers.post['X-CSRF-Token'] = $('meta[name="csrf-token"]').attr('content')
$httpProvider.defaults.headers['common']['X-Requested-With'] = 'XMLHttpRequest'
$httpProvider.defaults.headers.common.Accept = "application/json, text/javascript, */*"

View File

@@ -1,24 +1,17 @@
Darkswarm.factory 'Order', ($resource, Product, order)->
## I am being clever here
## order is a JSON object generated in shop/checkout/order.rabl
## We're extending this to add methods while retaining the data!
new class Order
constructor: ->
@[name] = method for name, method of order # Clone all data from the order JSON object
# Our shipping_methods comes through as a hash like so: {id: requires_shipping_address}
# Here we default to the first shipping method if none is selected
@shipping_method_id ||= Object.keys(@shipping_methods)[0]
@ship_address_same_as_billing = true if @ship_address_same_as_billing == null
@shippingMethodChanged()
@shipping_method_id ||= parseInt(Object.keys(@shipping_methods)[0])
@ship_address_same_as_billing ?= true
shippingMethod: ->
@shipping_methods[@shipping_method_id]
shippingMethodChanged: =>
@require_ship_address = @shippingMethod().require_ship_address if @shippingMethod()
requireShipAddress: ->
@shippingMethod().require_ship_address
shippingPrice: ->
@shippingMethod().price
@@ -26,7 +19,6 @@ Darkswarm.factory 'Order', ($resource, Product, order)->
paymentMethod: ->
@payment_methods[@payment_method_id]
cartTotal: ->
@shippingPrice() + @display_total

View File

@@ -1,14 +1,13 @@
Darkswarm.factory 'OrderCycle', ($resource, Product, orderCycleData) ->
class OrderCycle
@order_cycle = orderCycleData || null
@order_cycle = orderCycleData # Object or {} due to RABL
@push_order_cycle: ->
new $resource("/shop/order_cycle").save {order_cycle_id: @order_cycle.order_cycle_id}, (order_data)->
OrderCycle.order_cycle.orders_close_at = order_data.orders_close_at
Product.update()
@orders_close_at: ->
if @selected()
@order_cycle.orders_close_at
@order_cycle.orders_close_at if @selected()
@selected: ->
@order_cycle != null and !$.isEmptyObject(@order_cycle) and @order_cycle.orders_close_at != undefined
!$.isEmptyObject(@order_cycle) and @order_cycle.orders_close_at?

View File

@@ -0,0 +1,170 @@
/*
* Angular.js localStorage module
* https://github.com/agrublev/angularLocalStorage
*/
(function (window, angular, undefined) {
'use strict';
angular.module('angularLocalStorage', ['ngCookies']).factory('storage', ['$parse', '$cookieStore', '$window', '$log', function ($parse, $cookieStore, $window, $log) {
/**
* Global Vars
*/
var storage = (typeof $window.localStorage === 'undefined') ? undefined : $window.localStorage;
var supported = typeof storage !== 'undefined';
var privateMethods = {
/**
* Pass any type of a string from the localStorage to be parsed so it returns a usable version (like an Object)
* @param res - a string that will be parsed for type
* @returns {*} - whatever the real type of stored value was
*/
parseValue: function (res) {
var val;
try {
val = angular.fromJson(res);
if (typeof val === 'undefined') {
val = res;
}
if (val === 'true') {
val = true;
}
if (val === 'false') {
val = false;
}
if ($window.parseFloat(val) === val && !angular.isObject(val)) {
val = $window.parseFloat(val);
}
} catch (e) {
val = res;
}
return val;
}
};
var publicMethods = {
/**
* Set - let's you set a new localStorage key pair set
* @param key - a string that will be used as the accessor for the pair
* @param value - the value of the localStorage item
* @returns {*} - will return whatever it is you've stored in the local storage
*/
set: function (key, value) {
if (!supported) {
try {
$cookieStore.put(key, value);
return value;
} catch(e) {
$log.log('Local Storage not supported, make sure you have angular-cookies enabled.');
}
}
var saver = angular.toJson(value);
storage.setItem(key, saver);
return privateMethods.parseValue(saver);
},
/**
* Get - let's you get the value of any pair you've stored
* @param key - the string that you set as accessor for the pair
* @returns {*} - Object,String,Float,Boolean depending on what you stored
*/
get: function (key) {
if (!supported) {
try {
return privateMethods.parseValue($.cookie(key));
} catch (e) {
return null;
}
}
var item = storage.getItem(key);
return privateMethods.parseValue(item);
},
/**
* Remove - let's you nuke a value from localStorage
* @param key - the accessor value
* @returns {boolean} - if everything went as planned
*/
remove: function (key) {
if (!supported) {
try {
$cookieStore.remove(key);
return true;
} catch (e) {
return false;
}
}
storage.removeItem(key);
return true;
},
/**
* Bind - let's you directly bind a localStorage value to a $scope variable
* @param {Angular $scope} $scope - the current scope you want the variable available in
* @param {String} key - the name of the variable you are binding
* @param {Object} opts - (optional) custom options like default value or unique store name
* Here are the available options you can set:
* * defaultValue: the default value
* * storeName: add a custom store key value instead of using the scope variable name
* @returns {*} - returns whatever the stored value is
*/
bind: function ($scope, key, opts) {
var defaultOpts = {
defaultValue: '',
storeName: ''
};
// Backwards compatibility with old defaultValue string
if (angular.isString(opts)) {
opts = angular.extend({},defaultOpts,{defaultValue:opts});
} else {
// If no defined options we use defaults otherwise extend defaults
opts = (angular.isUndefined(opts)) ? defaultOpts : angular.extend(defaultOpts,opts);
}
// Set the storeName key for the localStorage entry
// use user defined in specified
var storeName = opts.storeName || key;
// If a value doesn't already exist store it as is
if (!publicMethods.get(storeName)) {
publicMethods.set(storeName, opts.defaultValue);
}
// If it does exist assign it to the $scope value
$parse(key).assign($scope, publicMethods.get(storeName));
// Register a listener for changes on the $scope value
// to update the localStorage value
$scope.$watch(key, function (val) {
if (angular.isDefined(val)) {
publicMethods.set(storeName, val);
}
}, true);
return publicMethods.get(storeName);
},
/**
* Unbind - let's you unbind a variable from localStorage while removing the value from both
* the localStorage and the local variable and sets it to null
* @param $scope - the scope the variable was initially set in
* @param key - the name of the variable you are unbinding
* @param storeName - (optional) if you used a custom storeName you will have to specify it here as well
*/
unbind: function($scope,key,storeName) {
storeName = storeName || key;
$parse(key).assign($scope, null);
$scope.$watch(key, function () { });
publicMethods.remove(storeName);
},
/**
* Clear All - let's you clear out ALL localStorage variables, use this carefully!
*/
clearAll: function() {
storage.clear();
}
};
return publicMethods;
}]);
})(window, window.angular);