diff --git a/app/assets/javascripts/admin/admin.js.coffee b/app/assets/javascripts/admin/admin.js.coffee index a0235a568f..c80e6252de 100644 --- a/app/assets/javascripts/admin/admin.js.coffee +++ b/app/assets/javascripts/admin/admin.js.coffee @@ -1,3 +1,3 @@ -angular.module("ofn.admin", ["ngResource", "ngAnimate", "ofn.dropdown", "admin.products"]).config ($httpProvider) -> +angular.module("ofn.admin", ["ngResource", "ngAnimate", "ofn.dropdown", "admin.products", "infinite-scroll"]).config ($httpProvider) -> $httpProvider.defaults.headers.common["X-CSRF-Token"] = $("meta[name=csrf-token]").attr("content") $httpProvider.defaults.headers.common["Accept"] = "application/json, text/javascript, */*" \ No newline at end of file diff --git a/app/assets/javascripts/admin/all.js b/app/assets/javascripts/admin/all.js index 4c763ec411..5ffb99ccb8 100644 --- a/app/assets/javascripts/admin/all.js +++ b/app/assets/javascripts/admin/all.js @@ -16,6 +16,7 @@ //= require admin/spree_auth //= require admin/spree_promo //= require admin/spree_paypal_express +//= require ../shared/ng-infinite-scroll.min.js //= require ./admin //= require ./enterprises/enterprises //= require ./payment_methods/payment_methods diff --git a/app/assets/javascripts/admin/bulk_product_update.js.coffee b/app/assets/javascripts/admin/bulk_product_update.js.coffee index db1d078d73..cbd6de7a30 100644 --- a/app/assets/javascripts/admin/bulk_product_update.js.coffee +++ b/app/assets/javascripts/admin/bulk_product_update.js.coffee @@ -30,24 +30,12 @@ angular.module("ofn.admin").controller "AdminProductEditCtrl", [ filters: { title: "Filter Products", visible: false } column_toggle: { title: "Toggle Columns", visible: false } - $scope.perPage = 25 - $scope.currentPage = 1 $scope.products = [] $scope.filteredProducts = [] $scope.currentFilters = [] - $scope.totalCount = -> $scope.filteredProducts.length - $scope.totalPages = -> Math.ceil($scope.totalCount()/$scope.perPage) - $scope.firstVisibleProduct = -> ($scope.currentPage-1)*$scope.perPage+1 - $scope.lastVisibleProduct = -> Math.min($scope.totalCount(),$scope.currentPage*$scope.perPage) - $scope.setPage = (page) -> $scope.currentPage = page - $scope.minPage = -> Math.max(1,Math.min($scope.totalPages()-4,$scope.currentPage-2)) - $scope.maxPage = -> Math.min($scope.totalPages(),Math.max(5,$scope.currentPage+2)) + $scope.limit = 15 $scope.productsWithUnsavedVariants = [] - $scope.$watch -> - $scope.totalPages() - , (newVal, oldVal) -> - $scope.currentPage = Math.max $scope.totalPages(), 1 if newVal != oldVal && $scope.totalPages() < $scope.currentPage $scope.initialise = (spree_api_key) -> authorise_api_reponse = "" @@ -328,6 +316,9 @@ angular.module("ofn.admin").controller "AdminProductEditCtrl", [ products = (product for product in product_list when product.id == id) if products.length == 0 then null else products[0] + $scope.incrementLimit = -> + if $scope.limit < $scope.products.length + $scope.limit = $scope.limit + 5 $scope.setMessage = (model, text, style, timeout) -> model.text = text @@ -464,11 +455,3 @@ toObjectWithIDKeys = (array) -> object[array[i].id].variants = toObjectWithIDKeys(array[i].variants) if array[i].hasOwnProperty("variants") and array[i].variants instanceof Array object - -subset = (bigArray,smallArray) -> - if smallArray instanceof Array && bigArray instanceof Array && smallArray.length > 0 - for item in smallArray - return false if angular.toJson(bigArray).indexOf(angular.toJson(item)) == -1 - return true - else - return false diff --git a/app/views/spree/admin/products/bulk_edit.html.haml b/app/views/spree/admin/products/bulk_edit.html.haml index 39014dae64..1d5835fa08 100644 --- a/app/views/spree/admin/products/bulk_edit.html.haml +++ b/app/views/spree/admin/products/bulk_edit.html.haml @@ -60,33 +60,8 @@ %div.sixteen.columns.alpha{ 'ng-hide' => 'loading || products.length == 500 || products.length == 0' } %div.quick_search{ :class => "five columns omega" } %input.search{ :class => "four columns alpha", 'ng-model' => 'query', :name => "quick_filter", :type => 'text', 'placeholder' => 'Quick Search' } - %div.pagination{ :class => "seven columns omega" } - %div.pagenav{ :class => "two columns alpha" } - %span.first - %a{ :href => "#", 'ng-click' => "currentPage = 1", 'ng-show' => "currentPage > 1" } - « First - %span.prev - %a{ :href => "#", 'ng-click' => "currentPage = currentPage - 1", 'ng-show' => "currentPage > 1" } - ‹ Prev - %div.pagenav{ :class => "columns omega" } - %span.page{ 'ng-repeat' => "page in [] | rangeArray:minPage():maxPage()", 'ng-class' => "{current: currentPage==page}" } - %a{ :href => "#", 'ng-click' => "setPage(page)" } - {{page}} - %span{ 'ng-show' => "maxPage() < totalPages()" } ... - %div.pagenav{ :class => "two columns omega" } - %span.next - %a{ :href => "#", 'ng-click' => "currentPage = currentPage + 1", 'ng-show' => "currentPage < totalPages()" } - Next › - %span.last - %a{ :href => "#", 'ng-click' => "currentPage = totalPages()", 'ng-show' => "currentPage < totalPages()" } - Last » - %div.pagination_info{ :class => 'four columns alpha' } - Show  - %select{ 'ng-model' => 'perPage', :name => 'perPage', 'ng-options' => 'pp for pp in [25,50,100,200]'} -  per page - %br - %span Displaying {{firstVisibleProduct()}}-{{lastVisibleProduct()}} of {{totalCount()}} products - %table.index#listing_products.bulk + %div.spacer{ :class => "nine columns omega" }   + %table.index#listing_products.bulk{ "infinite-scroll" => "incrementLimit()", "infinite-scroll-distance" => "1" } %colgroup %col %col @@ -115,7 +90,7 @@ %th.actions %th.actions %th.actions - %tbody{ 'ng-repeat' => 'product in filteredProducts = (products | filter:query)', 'ng-class-even' => "'even'", 'ng-class-odd' => "'odd'", 'ng-show' => "$index >= perPage*(currentPage-1) && $index < perPage*currentPage" } + %tbody{ 'ng-repeat' => 'product in filteredProducts = ( products | filter:query | limitTo:limit )', 'ng-class-even' => "'even'", 'ng-class-odd' => "'odd'" } %tr.product{ :id => "p_{{product.id}}" } %td.left-actions %a{ 'ofn-toggle-variants' => 'true', :class => "view-variants icon-chevron-right", 'ng-show' => 'hasVariants(product)' }