From 39ca0ce3dc68ee0970225a00a736062e8af7579c Mon Sep 17 00:00:00 2001 From: Rob Harrington Date: Fri, 28 Nov 2014 12:05:01 +1100 Subject: [PATCH] WIP: Adding a side_menu to the enterprise form --- app/assets/javascripts/admin/all.js | 1 + .../side_menu_controller.js.coffee | 20 +++++++++ .../admin/enterprises/enterprises.js.coffee | 2 +- .../side_menu/services/side_menu.js.coffee | 15 +++++++ .../admin/side_menu/side_menu.js.coffee | 1 + .../stylesheets/admin/side_menu.css.sass | 17 ++++++++ .../admin/enterprises/_ng_form.html.haml | 6 +-- .../admin/enterprises/_side_menu.html.haml | 3 ++ .../side_menu_controller_spec.js.coffee | 41 +++++++++++++++++++ 9 files changed, 102 insertions(+), 4 deletions(-) create mode 100644 app/assets/javascripts/admin/enterprises/controllers/side_menu_controller.js.coffee create mode 100644 app/assets/javascripts/admin/side_menu/services/side_menu.js.coffee create mode 100644 app/assets/javascripts/admin/side_menu/side_menu.js.coffee create mode 100644 app/assets/stylesheets/admin/side_menu.css.sass create mode 100644 app/views/admin/enterprises/_side_menu.html.haml create mode 100644 spec/javascripts/unit/admin/enterprises/controllers/side_menu_controller_spec.js.coffee diff --git a/app/assets/javascripts/admin/all.js b/app/assets/javascripts/admin/all.js index 7dc9d1116f..d51898775d 100644 --- a/app/assets/javascripts/admin/all.js +++ b/app/assets/javascripts/admin/all.js @@ -22,6 +22,7 @@ //= require ./payment_methods/payment_methods //= require ./products/products //= require ./shipping_methods/shipping_methods +//= require ./side_menu/side_menu //= require ./utils/utils //= require ./users/users //= require textAngular.min.js diff --git a/app/assets/javascripts/admin/enterprises/controllers/side_menu_controller.js.coffee b/app/assets/javascripts/admin/enterprises/controllers/side_menu_controller.js.coffee new file mode 100644 index 0000000000..4076f83ab1 --- /dev/null +++ b/app/assets/javascripts/admin/enterprises/controllers/side_menu_controller.js.coffee @@ -0,0 +1,20 @@ +angular.module("admin.enterprises") + .controller "sideMenuCtrl", ($scope, Enterprise, SideMenu) -> + $scope.Enterprise = Enterprise.enterprise + $scope.select = SideMenu.select + + SideMenu.setItems [ + { name: 'Primary Details' } + { name: 'Address' } + { name: "Shipping Methods"} + { name: "Payment Methods"} + { name: "Enterprise Fees"} + { name: 'Contact & Social' } + { name: 'About' } + { name: "Business Details"} + { name: 'Images' } + { name: "Preferences"} + ] + + $scope.select(0) + $scope.menu = SideMenu.items diff --git a/app/assets/javascripts/admin/enterprises/enterprises.js.coffee b/app/assets/javascripts/admin/enterprises/enterprises.js.coffee index e1e43854d1..1568af32f7 100644 --- a/app/assets/javascripts/admin/enterprises/enterprises.js.coffee +++ b/app/assets/javascripts/admin/enterprises/enterprises.js.coffee @@ -1 +1 @@ -angular.module("admin.enterprises", ["admin.payment_methods", "admin.utils", "admin.shipping_methods", "admin.users", "textAngular"]) \ No newline at end of file +angular.module("admin.enterprises", [ "admin.payment_methods", "admin.utils", "admin.shipping_methods", "admin.users", "textAngular", "admin.side_menu"] ) \ No newline at end of file diff --git a/app/assets/javascripts/admin/side_menu/services/side_menu.js.coffee b/app/assets/javascripts/admin/side_menu/services/side_menu.js.coffee new file mode 100644 index 0000000000..5f45bb4818 --- /dev/null +++ b/app/assets/javascripts/admin/side_menu/services/side_menu.js.coffee @@ -0,0 +1,15 @@ +angular.module("admin.side_menu") + .factory "SideMenu", -> + new class SideMenu + items: [] + selected: null + + setItems: (items) => + @items = items + + select: (index) => + @selected.selected = false if @selected + @selected = @items[index] + @selected.selected = true + + diff --git a/app/assets/javascripts/admin/side_menu/side_menu.js.coffee b/app/assets/javascripts/admin/side_menu/side_menu.js.coffee new file mode 100644 index 0000000000..c0e0c1d766 --- /dev/null +++ b/app/assets/javascripts/admin/side_menu/side_menu.js.coffee @@ -0,0 +1 @@ +angular.module("admin.side_menu", []) \ No newline at end of file diff --git a/app/assets/stylesheets/admin/side_menu.css.sass b/app/assets/stylesheets/admin/side_menu.css.sass new file mode 100644 index 0000000000..540b7ceae9 --- /dev/null +++ b/app/assets/stylesheets/admin/side_menu.css.sass @@ -0,0 +1,17 @@ +.side_menu + border-right: 2px solid #f6f6f6 + border-top: 2px solid #f6f6f6 + .menu_item + padding: 8px 15px + font-size: 120% + cursor: pointer + text-transform: uppercase + &.even + background-color: #ebf3fb + &.odd + background-color: #ffffff + &:hover + background-color: #eaf0f5 + &.selected + background-color: #5498da + color: #ffffff diff --git a/app/views/admin/enterprises/_ng_form.html.haml b/app/views/admin/enterprises/_ng_form.html.haml index e0a9bef86e..198a66383b 100644 --- a/app/views/admin/enterprises/_ng_form.html.haml +++ b/app/views/admin/enterprises/_ng_form.html.haml @@ -11,11 +11,11 @@ } do |f| .row .sixteen.columns.alpha + .four.columns.omega + = render 'side_menu' + .one.column   .eleven.columns.alpha.fullwidth_inputs = render 'form', f: f - .one.column   - .four.columns.omega - = render 'sidebar', f: f .row .twelve.columns.alpha = render partial: "spree/admin/shared/#{action}_resource_links" diff --git a/app/views/admin/enterprises/_side_menu.html.haml b/app/views/admin/enterprises/_side_menu.html.haml new file mode 100644 index 0000000000..0f03786527 --- /dev/null +++ b/app/views/admin/enterprises/_side_menu.html.haml @@ -0,0 +1,3 @@ +.side_menu{ ng: { controller: 'sideMenuCtrl' } } + .menu_item{ ng: { repeat: '(index,item) in menu', click: 'select(index)', class: '{ selected: item.selected}', 'class-odd' => "'odd'", 'class-even' => "'even'" } } + {{ item.name }} \ No newline at end of file diff --git a/spec/javascripts/unit/admin/enterprises/controllers/side_menu_controller_spec.js.coffee b/spec/javascripts/unit/admin/enterprises/controllers/side_menu_controller_spec.js.coffee new file mode 100644 index 0000000000..87d5fe3169 --- /dev/null +++ b/spec/javascripts/unit/admin/enterprises/controllers/side_menu_controller_spec.js.coffee @@ -0,0 +1,41 @@ +describe "menuCtrl", -> + ctrl = null + scope = null + Enterprise = null + SideMenu = SideMenu + + beforeEach -> + module('admin.enterprises') + Enterprise = + enterprise: + payment_method_ids: [ 1, 3 ] + shipping_method_ids: [ 2, 4 ] + # PaymentMethods = + # paymentMethods: [ { id: 1 }, { id: 2 }, { id: 3 }, { id: 4 } ] + # ShippingMethods = + # shippingMethods: [ { id: 1 }, { id: 2 }, { id: 3 }, { id: 4 } ] + + inject ($controller, _SideMenu_) -> + scope = {} + SideMenu = _SideMenu_ + spyOn(SideMenu, "select").andCallThrough() + spyOn(SideMenu, "setItems").andCallThrough() + ctrl = $controller 'sideMenuCtrl', {$scope: scope, Enterprise: Enterprise, SideMenu: SideMenu} + + describe "initialisation", -> + it "stores enterprise", -> + expect(scope.Enterprise).toEqual Enterprise.enterprise + + it "sets the item list", -> + expect(SideMenu.setItems).toHaveBeenCalled + expect(scope.menu).toBe SideMenu.items + + it "sets the initally selected value", -> + expect(SideMenu.select).toHaveBeenCalledWith 0 + + + describe "selecting an item", -> + it "selects an item by performing setting the selected property on the item to true", -> + scope.select 4 + expect(SideMenu.select).toHaveBeenCalledWith 4 + expect(scope.menu[4].selected).toBe true