spree_backend 2.0.13 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/admin/admin.js.erb +27 -23
  3. data/app/assets/javascripts/admin/checkouts/edit.js +12 -0
  4. data/app/assets/javascripts/admin/image_settings.js.erb +2 -1
  5. data/app/assets/javascripts/admin/option_type_autocomplete.js.erb +1 -4
  6. data/app/assets/javascripts/admin/product_picker.js +1 -2
  7. data/app/assets/javascripts/admin/progress.coffee +4 -4
  8. data/app/assets/javascripts/admin/shipments.js.erb +0 -243
  9. data/app/assets/javascripts/admin/spree_backend.js +3 -1
  10. data/app/assets/javascripts/admin/stock_transfer.js.coffee +8 -4
  11. data/app/assets/javascripts/admin/taxonomy.js.coffee +2 -2
  12. data/app/assets/javascripts/admin/variant_autocomplete.js.erb +243 -0
  13. data/app/assets/stylesheets/admin/components/_navigation.scss +2 -8
  14. data/app/assets/stylesheets/admin/hacks/_ie.scss +2 -1
  15. data/app/assets/stylesheets/admin/hacks/_mozilla.scss +1 -2
  16. data/app/assets/stylesheets/admin/plugins/_select2.scss +8 -11
  17. data/app/assets/stylesheets/admin/sections/_tax_zones.scss +15 -0
  18. data/app/assets/stylesheets/admin/shared/_forms.scss +0 -1
  19. data/app/assets/stylesheets/admin/shared/_icons.scss +1 -0
  20. data/app/assets/stylesheets/admin/shared/_layout.scss +0 -1
  21. data/app/assets/stylesheets/admin/shared/_tables.scss +1 -1
  22. data/app/assets/stylesheets/admin/spree_admin.scss +1 -0
  23. data/app/assets/stylesheets/admin/spree_backend.css +1 -0
  24. data/app/controllers/spree/admin/base_controller.rb +1 -1
  25. data/app/controllers/spree/admin/orders/customer_details_controller.rb +10 -6
  26. data/app/controllers/spree/admin/orders_controller.rb +5 -4
  27. data/app/controllers/spree/admin/overview_controller.rb +0 -2
  28. data/app/controllers/spree/admin/payment_methods_controller.rb +7 -3
  29. data/app/controllers/spree/admin/payments_controller.rb +5 -13
  30. data/app/controllers/spree/admin/products_controller.rb +8 -0
  31. data/app/controllers/spree/admin/reports_controller.rb +16 -26
  32. data/app/controllers/spree/admin/resource_controller.rb +12 -8
  33. data/app/controllers/spree/admin/stock_items_controller.rb +5 -1
  34. data/app/controllers/spree/admin/stock_movements_controller.rb +5 -1
  35. data/app/controllers/spree/admin/stock_transfers_controller.rb +1 -1
  36. data/app/controllers/spree/admin/taxons_controller.rb +42 -16
  37. data/app/helpers/spree/admin/base_helper.rb +2 -2
  38. data/app/helpers/spree/admin/navigation_helper.rb +3 -6
  39. data/app/helpers/spree/admin/stock_movements_helper.rb +1 -12
  40. data/app/views/spree/admin/mail_methods/_form.html.erb +2 -2
  41. data/app/views/spree/admin/orders/_add_product.html.erb +0 -1
  42. data/app/views/spree/admin/orders/_form.html.erb +1 -5
  43. data/app/views/spree/admin/orders/_shipment.html.erb +2 -10
  44. data/app/views/spree/admin/orders/_shipment_manifest.html.erb +1 -1
  45. data/app/views/spree/admin/orders/customer_details/_form.html.erb +2 -2
  46. data/app/views/spree/admin/orders/customer_details/edit.html.erb +1 -1
  47. data/app/views/spree/admin/orders/index.html.erb +4 -10
  48. data/app/views/spree/admin/payment_methods/_form.html.erb +2 -0
  49. data/app/views/spree/admin/payments/_form.html.erb +2 -2
  50. data/app/views/spree/admin/payments/_list.html.erb +2 -2
  51. data/app/views/spree/admin/payments/show.html.erb +2 -2
  52. data/app/views/spree/admin/payments/source_forms/_gateway.html.erb +2 -3
  53. data/app/views/spree/admin/payments/source_views/_gateway.html.erb +15 -5
  54. data/app/views/spree/admin/products/_form.html.erb +59 -82
  55. data/app/views/spree/admin/products/index.html.erb +1 -1
  56. data/app/views/spree/admin/products/new.html.erb +6 -6
  57. data/app/views/spree/admin/products/stock.html.erb +4 -12
  58. data/app/views/spree/admin/promotion_rules/create.js.erb +0 -1
  59. data/app/views/spree/admin/promotions/_form.html.erb +5 -3
  60. data/app/views/spree/admin/prototypes/_form.html.erb +2 -2
  61. data/app/views/spree/admin/prototypes/show.html.erb +1 -1
  62. data/app/views/spree/admin/reports/sales_total.html.erb +1 -1
  63. data/app/views/spree/admin/return_authorizations/_form.html.erb +2 -2
  64. data/app/views/spree/admin/shared/_content_header.html.erb +23 -0
  65. data/app/views/spree/admin/shared/_destroy.js.erb +14 -5
  66. data/app/views/spree/admin/shared/_header.html.erb +9 -0
  67. data/app/views/spree/admin/shared/_menu.html.erb +9 -0
  68. data/app/views/spree/admin/shared/_order_tabs.html.erb +5 -5
  69. data/app/views/spree/admin/shared/_report_criteria.html.erb +2 -2
  70. data/app/views/spree/admin/shared/_routes.html.erb +1 -2
  71. data/app/views/spree/admin/shared/_sidebar.html.erb +10 -0
  72. data/app/views/spree/admin/shared/_sub_menu.html.erb +9 -0
  73. data/app/views/spree/admin/shared/_table_filter.html.erb +8 -0
  74. data/app/views/spree/admin/shared/_translations.html.erb +3 -6
  75. data/app/views/spree/admin/shipping_methods/_form.html.erb +5 -6
  76. data/app/views/spree/admin/shipping_methods/index.html.erb +1 -1
  77. data/app/views/spree/admin/stock_movements/_form.html.erb +4 -5
  78. data/app/views/spree/admin/stock_movements/index.html.erb +2 -4
  79. data/app/views/spree/admin/stock_transfers/show.html.erb +1 -1
  80. data/app/views/spree/admin/taxons/edit.html.erb +1 -1
  81. data/app/views/spree/admin/variants/_autocomplete.js.erb +51 -6
  82. data/app/views/spree/layouts/admin.html.erb +11 -81
  83. data/config/routes.rb +2 -4
  84. data/lib/spree/backend/engine.rb +0 -1
  85. data/vendor/assets/javascripts/css_browser_selector_dev.js +114 -141
  86. metadata +42 -31
  87. data/app/assets/javascripts/admin/line_items.js.coffee +0 -61
  88. data/app/assets/javascripts/admin/payments/edit.js.coffee +0 -148
  89. data/app/assets/javascripts/admin/stock_movement.js.coffee +0 -17
  90. data/app/assets/javascripts/admin/variant_management.js.coffee +0 -10
  91. data/app/assets/javascripts/spree/backend/select_payments.js.coffee +0 -7
  92. data/app/controllers/spree/admin/variants_including_master_controller.rb +0 -15
  93. data/app/views/spree/admin/orders/_line_items.html.erb +0 -46
  94. data/app/views/spree/admin/variants/_autocomplete_stock.js.erb +0 -41
  95. data/app/views/spree/admin/variants/update.js.erb +0 -1
  96. data/vendor/assets/stylesheets/AdminLTE.css +0 -3535
@@ -1,14 +1,13 @@
1
1
  <div data-hook="admin_stock_movements_form_fields" class="row">
2
- <div class="alpha twelve columns">
2
+ <div class="alpha four columns">
3
3
  <%= f.field_container :quantity do %>
4
4
  <%= f.label :quantity, Spree.t(:quantity) %>
5
- <%= f.text_field :quantity %>
5
+ <%= f.text_field :quantity, :class => 'fullwidth' %>
6
6
  <% end %>
7
7
  <%= f.field_container :stock_item_id do %>
8
8
  <%= f.label :stock_item_id, Spree.t(:stock_item_id) %>
9
- <%= f.text_field 'stock_item_id', :class => 'fullwidth' %>
9
+ <%= collection_select 'stock_movement', 'stock_item_id', stock_location.stock_items, :id, :variant_name,
10
+ { selected: @stock_movement.stock_item_id }, class: 'select2 fullwidth' %>
10
11
  <% end %>
11
12
  </div>
12
13
  </div>
13
-
14
- <%= render :partial => "spree/admin/variants/autocomplete", :formats => :js %>
@@ -30,9 +30,7 @@
30
30
  <tbody>
31
31
  <% @stock_movements.each do |stock_movement|%>
32
32
  <tr id="<%= spree_dom_id stock_movement %>" data-hook="admin_stock_movements_index_rows" class="<%= cycle('odd', 'even')%>">
33
- <td class="align-center">
34
- <%= display_variant(stock_movement) %>
35
- </td>
33
+ <td class="align-center"><%= stock_movement.stock_item.variant_name %></td>
36
34
  <td class="align-center"><%= stock_movement.quantity %></td>
37
35
  <td class="align-center"><%= pretty_originator(stock_movement) %></td>
38
36
  </tr>
@@ -42,7 +40,7 @@
42
40
  <% else %>
43
41
  <div class="alpha twelve columns no-objects-found">
44
42
  <%= Spree.t(:no_resource_found, resource: I18n.t(:other, scope: 'activerecord.models.spree/stock_movement')) %>,
45
- <%= link_to Spree.t(:add_one), spree.new_admin_stock_location_stock_movement_path(@stock_location) %>!
43
+ <%= link_to Spree.t(:add_one), spree.new_admin_stock_movement_path %>!
46
44
  </div>
47
45
  <% end %>
48
46
 
@@ -1,7 +1,7 @@
1
1
  <%= render 'spree/admin/shared/configuration_menu' %>
2
2
 
3
3
  <% content_for :page_title do %>
4
- <%= Spree.t(:stock_transfer) %>
4
+ <%= Spree.t('stock_transfer') %> (<%= @stock_transfer.number %>)
5
5
  <% end %>
6
6
 
7
7
  <% content_for :page_actions do %>
@@ -10,7 +10,7 @@
10
10
  </li>
11
11
  <% end %>
12
12
 
13
- <%# Because otherwise the form would attempt to use to_param of @taxon %>
13
+ <% # Because otherwise the form would attempt to use to_param of @taxon %>
14
14
  <% form_url = admin_taxonomy_taxon_path(@taxonomy.id, @taxon.id) %>
15
15
  <%= form_for [:admin, @taxonomy, @taxon], :method => :put, :url => form_url, :html => { :multipart => true } do |f| %>
16
16
  <%= render 'form', :f => f %>
@@ -12,14 +12,59 @@
12
12
 
13
13
  <h6 class="variant-name">{{variant.name}}</h6>
14
14
 
15
+ <ul class='variant-data'>
16
+ <li class='variant-sku'><strong><%= Spree.t(:sku) %>:</strong> {{variant.sku}}</li>
17
+ </ul>
18
+
15
19
  {{#if variant.option_values}}
16
- {{#each variant.option_values}}
17
- <strong>{{this.option_type_presentation}}:</strong> {{this.presentation}}<br>
18
- {{/each}}
20
+ <ul class='variant-options'>
21
+ {{#each variant.option_values}}
22
+ <li><strong>{{this.option_type.presentation}}:</strong> {{this.presentation}}</li>
23
+ {{/each}}
24
+ </ul>
19
25
  {{/if}}
20
-
21
- <strong><%= Spree.t(:sku) %>:</strong> {{variant.sku}}
22
26
 
23
27
  </div>
24
28
  </div>
25
- </script>
29
+ </script>
30
+
31
+ <script type='text/template' id='variant_autocomplete_stock_template'>
32
+ <fieldset>
33
+ <legend align="center"><%= Spree.t(:select_stock) %></legend>
34
+ <table class="stock-levels" data-hook="stock-levels">
35
+ <colgroup>
36
+ <col style="width: 30%;" />
37
+ <col style="width: 40%;" />
38
+ <col style="width: 20%;" />
39
+ <col style="width: 10%;" />
40
+ </colgroup>
41
+ <thead>
42
+ <th><%= Spree.t(:location) %></th>
43
+ <th><%= Spree.t(:count_on_hand) %></th>
44
+ <th><%= Spree.t(:quantity) %></th>
45
+ <th class="actions"></th>
46
+ </thead>
47
+ <tbody>
48
+ {{#each variant.stock_items}}
49
+ <tr>
50
+ <td>{{this.stock_location_name}}</td>
51
+ {{#if this.available}}
52
+ <td>
53
+ {{this.count_on_hand}}
54
+ {{#if this.backorderable}} (<%= Spree.t(:backorders_allowed) %>) {{/if}}
55
+ </td>
56
+ <td>
57
+ <input class="quantity" id="stock_item_quantity" data-stock-location-id="{{this.stock_location_id}}" type="number" min="1" value="1">
58
+ </td>
59
+ <td class="actions">
60
+ <button class="add_variant no-text icon-plus icon_link with-tip" data-stock-location-id="{{this.stock_location_id}}" title="<%= Spree.t(:add) %>" data-action="add"></button>
61
+ </td>
62
+ {{else}}
63
+ <td><%= Spree.t(:out_of_stock) %></td>
64
+ <td>0</td>
65
+ {{/if}}
66
+ </tr>
67
+ {{/each}}
68
+ </tbody>
69
+ </fieldset>
70
+ </script>
@@ -1,9 +1,9 @@
1
1
  <!doctype html>
2
- <!--[if lt IE 7 ]> <html class="ie ie6" lang="en"> <![endif]-->
3
- <!--[if IE 7 ]> <html class="ie ie7" lang="en"> <![endif]-->
4
- <!--[if IE 8 ]> <html class="ie ie8" lang="en"> <![endif]-->
5
- <!--[if IE 9 ]> <html class="ie ie9" lang="en"> <![endif]-->
6
- <!--[if gt IE 9]><!--><html lang="en"><!--<![endif]-->
2
+ <!--[if lt IE 7 ]> <html class="ie ie6" lang="<%= I18n.locale %>"> <![endif]-->
3
+ <!--[if IE 7 ]> <html class="ie ie7" lang="<%= I18n.locale %>"> <![endif]-->
4
+ <!--[if IE 8 ]> <html class="ie ie8" lang="<%= I18n.locale %>"> <![endif]-->
5
+ <!--[if IE 9 ]> <html class="ie ie9" lang="<%= I18n.locale %>"> <![endif]-->
6
+ <!--[if gt IE 9]><!--><html lang="<%= I18n.locale %>"><!--<![endif]-->
7
7
  <head data-hook="admin_inside_head">
8
8
  <%= render :partial => 'spree/admin/shared/head' %>
9
9
  </head>
@@ -30,91 +30,21 @@
30
30
 
31
31
  <%= render :partial => 'spree/admin/shared/alert', :collection => session[:alerts] %>
32
32
 
33
- <header id="header" data-hook>
34
-
35
- <div class="container">
36
- <figure data-hook="logo-wrapper" class="columns five">
37
- <%= link_to image_tag(Spree::Config[:admin_interface_logo], :id => 'logo'), spree.admin_path %>
38
- </figure>
39
-
40
- <nav data-hook="admin_login_navigation_bar" class="columns eleven"></nav>
41
- </div>
42
-
43
- </header>
44
-
45
- <nav id="admin-menu" data-hook>
46
- <div class="container">
47
- <div class="sixteen columns main-menu-wrapper">
48
- <ul data-hook="admin_tabs" class="fullwidth-menu">
49
- <%= render :partial => 'spree/admin/shared/tabs' %>
50
- </ul>
51
- </div>
52
- </div>
53
- </nav>
54
-
55
- <% if content_for?(:sub_menu) %>
56
- <nav id="sub-menu" data-hook>
57
- <div class="container">
58
-
59
- <div class="sixteen columns">
60
- <%= yield :sub_menu %>
61
- </div>
62
-
63
- </div>
64
- </nav>
65
- <% end %>
66
-
67
- <% if content_for?(:page_title) || content_for?(:page_actions) %>
68
- <div id="content-header" data-hook>
69
- <div class="container">
70
-
71
- <div class="sixteen columns">
72
- <div class="block-table">
73
- <% if content_for?(:page_title) %>
74
- <div class="table-cell">
75
- <h1 class="page-title <%= yield :page_title_classes %>"><%= yield :page_title %></h1>
76
- </div>
77
- <% end %>
78
- <% if content_for?(:page_actions) %>
79
- <div class="page-actions table-cell toolbar" data-hook="toolbar">
80
- <ul class="inline-menu">
81
- <%= yield :page_actions %>
82
- </ul>
83
- </div>
84
- <% end %>
85
- </div>
86
- </div>
87
-
88
- </div>
89
- </div>
90
- <% end %>
33
+ <%= render :partial => 'spree/admin/shared/header' %>
34
+ <%= render :partial => 'spree/admin/shared/menu' %>
35
+ <%= render :partial => 'spree/admin/shared/sub_menu' %>
36
+ <%= render :partial => 'spree/admin/shared/content_header' %>
91
37
 
92
38
  <div class="container">
93
39
  <div class="row">
94
40
  <div class="<%= 'with-sidebar ' if content_for?(:sidebar) %>" id="content" data-hook>
95
- <% if content_for?(:table_filter) %>
96
- <div id="table-filter" data-hook class="<%= if content_for?(:sidebar) then 'twelve' else 'sixteen' end %> columns">
97
- <fieldset>
98
- <legend align="center"><%= yield :table_filter_title %></legend>
99
- <%= yield :table_filter %>
100
- </fieldset>
101
- </div>
102
- <% end %>
41
+ <%= render :partial => 'spree/admin/shared/table_filter' %>
103
42
 
104
43
  <div class="<%= if content_for?(:sidebar) then 'twelve' else 'sixteen' end %> columns">
105
44
  <%= yield %>
106
45
  </div>
107
46
 
108
- <% if content_for?(:sidebar) %>
109
- <aside id="sidebar" data-hook class="four columns">
110
-
111
- <% if content_for?(:sidebar_title) %>
112
- <h5 class="sidebar-title"><span><%= yield :sidebar_title %></span></h5>
113
- <% end %>
114
-
115
- <%= yield :sidebar %>
116
- </aside>
117
- <% end %>
47
+ <%= render :partial => 'spree/admin/shared/sidebar' %>
118
48
  </div>
119
49
  </div>
120
50
  </div>
data/config/routes.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  Spree::Core::Engine.routes.draw do
2
- root :to => 'home#index'
2
+ get '/admin', :to => 'admin/orders#index', :as => :admin
3
3
 
4
4
  namespace :admin do
5
5
  get '/search/users', :to => "search#users", :as => :search_users
@@ -42,7 +42,6 @@ Spree::Core::Engine.routes.draw do
42
42
  post :update_positions
43
43
  end
44
44
  end
45
- resources :variants_including_master, :only => [:update]
46
45
  end
47
46
 
48
47
  get '/variants/search', :to => "variants#search", :as => :search_variants
@@ -144,6 +143,7 @@ Spree::Core::Engine.routes.draw do
144
143
  end
145
144
  end
146
145
 
146
+ resources :stock_movements
147
147
  resources :stock_items, :only => [:create, :update, :destroy]
148
148
  resources :tax_rates
149
149
  resource :tax_settings
@@ -154,6 +154,4 @@ Spree::Core::Engine.routes.draw do
154
154
  post :testmail, :on => :collection
155
155
  end
156
156
  end
157
-
158
- match '/admin', :to => 'admin/orders#index', :as => :admin
159
157
  end
@@ -33,7 +33,6 @@ module Spree
33
33
  jqPlot/excanvas.min.js
34
34
  admin/images/new.js
35
35
  jquery.jstree/themes/apple/*
36
- fontawesome-webfont*
37
36
  ]
38
37
  end
39
38
 
@@ -1,156 +1,129 @@
1
1
  /*
2
- CSS Browser Selector 0.6.1
2
+ CSS Browser Selector 0.6.2
3
3
  Originally written by Rafael Lima (http://rafael.adm.br)
4
4
  http://rafael.adm.br/css_browser_selector
5
5
  License: http://creativecommons.org/licenses/by/2.5/
6
6
 
7
7
  Co-maintained by:
8
8
  https://github.com/verbatim/css_browser_selector
9
-
10
9
  */
11
10
 
12
- showLog=true;
13
- function log(m) {if ( window.console && showLog ) {console.log(m); } }
14
-
15
- function css_browser_selector(u)
16
- {
17
- var uaInfo = {},
18
- screens = [320, 480, 640, 768, 1024, 1152, 1280, 1440, 1680, 1920, 2560],
19
- allScreens = screens.length,
20
- ua=u.toLowerCase(),
21
- is=function(t) { return RegExp(t,"i").test(ua); },
22
- version = function(p,n)
23
- {
24
- n=n.replace(".","_"); var i = n.indexOf('_'), ver="";
25
- while (i>0) {ver += " "+ p+n.substring(0,i);i = n.indexOf('_', i+1);}
26
- ver += " "+p+n; return ver;
27
- },
28
- g='gecko',
29
- w='webkit',
30
- c='chrome',
31
- f='firefox',
32
- s='safari',
33
- o='opera',
34
- m='mobile',
35
- a='android',
36
- bb='blackberry',
37
- lang='lang_',
38
- dv='device_',
39
- html=document.documentElement,
40
- b= [
41
-
42
- // browser
43
- (!(/opera|webtv/i.test(ua))&&/msie\s(\d+)/.test(ua))?('ie ie'+(/trident\/4\.0/.test(ua) ? '8' : RegExp.$1))
44
- :is('firefox/')?g+ " " + f+(/firefox\/((\d+)(\.(\d+))(\.\d+)*)/.test(ua)?' '+f+RegExp.$2 + ' '+f+RegExp.$2+"_"+RegExp.$4:'')
45
- :is('gecko/')?g
46
- :is('opera')?o+(/version\/((\d+)(\.(\d+))(\.\d+)*)/.test(ua)?' '+o+RegExp.$2 + ' '+o+RegExp.$2+"_"+RegExp.$4 : (/opera(\s|\/)(\d+)\.(\d+)/.test(ua)?' '+o+RegExp.$2+" "+o+RegExp.$2+"_"+RegExp.$3:''))
47
- :is('konqueror')?'konqueror'
48
-
49
- :is('blackberry') ?
50
- ( bb +
51
- ( /Version\/(\d+)(\.(\d+)+)/i.test(ua)
52
- ? " " + bb+ RegExp.$1 + " "+bb+ RegExp.$1+RegExp.$2.replace('.','_')
53
- : (/Blackberry ?(([0-9]+)([a-z]?))[\/|;]/gi.test(ua)
54
- ? ' ' +bb+RegExp.$2 + (RegExp.$3?' ' +bb+RegExp.$2+RegExp.$3:'')
55
- : '')
56
- )
57
- ) // blackberry
58
-
59
- :is('android') ?
60
- ( a +
61
- ( /Version\/(\d+)(\.(\d+))+/i.test(ua)
62
- ? " " + a+ RegExp.$1 + " "+a+ RegExp.$1+RegExp.$2.replace('.','_')
63
- : '')
64
- + (/Android (.+); (.+) Build/i.test(ua)
65
- ? ' '+dv+( (RegExp.$2).replace(/ /g,"_") ).replace(/-/g,"_")
66
- :'' )
67
- ) //android
68
-
69
- :is('chrome')?w+ ' '+c+(/chrome\/((\d+)(\.(\d+))(\.\d+)*)/.test(ua)?' '+c+RegExp.$2 +((RegExp.$4>0) ? ' '+c+RegExp.$2+"_"+RegExp.$4:''):'')
70
-
71
- :is('iron')?w+' iron'
72
-
73
- :is('applewebkit/') ?
74
- ( w+ ' '+ s +
75
- ( /version\/((\d+)(\.(\d+))(\.\d+)*)/.test(ua)
76
- ? ' '+ s +RegExp.$2 + " "+s+ RegExp.$2+RegExp.$3.replace('.','_')
77
- : ( / Safari\/(\d+)/i.test(ua)
78
- ?
79
- ( (RegExp.$1=="419" || RegExp.$1=="417" || RegExp.$1=="416" || RegExp.$1=="412" ) ? ' '+ s + '2_0'
80
- : RegExp.$1=="312" ? ' '+ s + '1_3'
81
- : RegExp.$1=="125" ? ' '+ s + '1_2'
82
- : RegExp.$1=="85" ? ' '+ s + '1_0'
83
- : '' )
84
- :'')
85
- )
86
- ) //applewebkit
87
-
88
- :is('mozilla/')?g
89
- :''
90
-
91
- // mobile
92
- ,is("android|mobi|mobile|j2me|iphone|ipod|ipad|blackberry|playbook|kindle|silk")?m:''
93
-
94
- // os/platform
95
- ,is('j2me')?'j2me'
96
- :is('ipad|ipod|iphone')?
97
- (
98
- (
99
- /CPU( iPhone)? OS (\d+[_|\.]\d+([_|\.]\d+)*)/i.test(ua) ?
100
- 'ios' + version('ios',RegExp.$2) : ''
101
- ) + ' ' + ( /(ip(ad|od|hone))/gi.test(ua) ? RegExp.$1 : "" )
102
- ) //'iphone'
103
- //:is('ipod')?'ipod'
104
- //:is('ipad')?'ipad'
105
- :is('playbook')?'playbook'
106
- :is('kindle|silk')?'kindle'
107
- :is('playbook')?'playbook'
108
- :is('mac')?'mac'+ (/mac os x ((\d+)[.|_](\d+))/.test(ua) ? ( ' mac' + (RegExp.$2) + ' mac' + (RegExp.$1).replace('.',"_") ) : '' )
109
- :is('win')?'win'+
110
- (is('windows nt 6.2')?' win8'
111
- :is('windows nt 6.1')?' win7'
112
- :is('windows nt 6.0')?' vista'
113
- :is('windows nt 5.2') || is('windows nt 5.1') ? ' win_xp'
114
- :is('windows nt 5.0')?' win_2k'
115
- :is('windows nt 4.0') || is('WinNT4.0') ?' win_nt'
116
- : ''
117
- )
118
- :is('freebsd')?'freebsd'
119
- :(is('x11|linux'))?'linux'
120
- :''
121
-
122
- // user agent language
123
- ,(/[; |\[](([a-z]{2})(\-[a-z]{2})?)[)|;|\]]/i.test(ua))?(lang+RegExp.$2).replace("-","_")+(RegExp.$3!=''?(' '+lang+RegExp.$1).replace("-","_"):''):''
124
-
125
- // beta: test if running iPad app
126
- ,( is('ipad|iphone|ipod') && !is('safari') ) ? 'ipad_app' : ''
127
-
128
-
129
- ]; // b
130
-
131
- function screenSize()
132
- {
133
- var w = window.outerWidth || html.clientWidth;
134
- var h = window.outerHeight || html.clientHeight;
135
- uaInfo.orientation = ((w<h) ? "portrait" : "landscape");
11
+ /*jshint laxcomma:true*/
12
+
13
+ function css_browser_selector(u) {
14
+ 'use strict';
15
+
16
+ var uaInfo = {},
17
+ screens = [320, 480, 640, 768, 1024, 1152, 1280, 1440, 1680, 1920, 2560],
18
+ allScreens = screens.length,
19
+ ua = u.toLowerCase(),
20
+ is = function (t) {
21
+ return new RegExp(t, "i").test(ua);
22
+ },
23
+ version = function (p, n) {
24
+ n = n.replace(".", "_");
25
+ var i = n.indexOf('_'),
26
+ ver = "";
27
+ while (i > 0) {
28
+ ver += " " + p + n.substring(0, i);
29
+ i = n.indexOf('_', i + 1);
30
+ }
31
+ ver += " " + p + n;
32
+ return ver;
33
+ },
34
+ g = 'gecko',
35
+ w = 'webkit',
36
+ c = 'chrome',
37
+ f = 'firefox',
38
+ s = 'safari',
39
+ o = 'opera',
40
+ m = 'mobile',
41
+ a = 'android',
42
+ bb = 'blackberry',
43
+ lang = 'lang_',
44
+ dv = 'device_',
45
+ html = document.documentElement,
46
+ b = [
47
+
48
+ (!(/opera|webtv/i.test(ua)) && /msie\s(\d+)/.test(ua)) ? ('ie ie' + (/trident\/4\.0/.test(ua) ? '8' : RegExp.$1)) : is('firefox/') ? g + " " + f + (/firefox\/((\d+)(\.(\d+))(\.\d+)*)/.test(ua) ? ' ' + f + RegExp.$2 + ' ' + f + RegExp.$2 + "_" + RegExp.$4 : '') : is('gecko/') ? g : is('opera') ? o + (/version\/((\d+)(\.(\d+))(\.\d+)*)/.test(ua) ? ' ' + o + RegExp.$2 + ' ' + o + RegExp.$2 + "_" + RegExp.$4 : (/opera(\s|\/)(\d+)\.(\d+)/.test(ua) ? ' ' + o + RegExp.$2 + " " + o + RegExp.$2 + "_" + RegExp.$3 : '')) : is('konqueror') ? 'konqueror'
49
+
50
+ : is('blackberry') ? (bb + (/Version\/(\d+)(\.(\d+)+)/i.test(ua) ? " " + bb + RegExp.$1 + " " + bb + RegExp.$1 + RegExp.$2.replace('.', '_') : (/Blackberry ?(([0-9]+)([a-z]?))[\/|;]/gi.test(ua) ? ' ' + bb + RegExp.$2 + (RegExp.$3 ? ' ' + bb + RegExp.$2 + RegExp.$3 : '') : '')))
51
+ : is('android') ? (a + (/Version\/(\d+)(\.(\d+))+/i.test(ua) ? " " + a + RegExp.$1 + " " + a + RegExp.$1 + RegExp.$2.replace('.', '_') : '') + (/Android (.+); (.+) Build/i.test(ua) ? ' ' + dv + ((RegExp.$2).replace(/ /g, "_")).replace(/-/g, "_") : ''))
52
+ : is('chrome') ? w + ' ' + c + (/chrome\/((\d+)(\.(\d+))(\.\d+)*)/.test(ua) ? ' ' + c + RegExp.$2 + ((RegExp.$4 > 0) ? ' ' + c + RegExp.$2 + "_" + RegExp.$4 : '') : '')
53
+ : is('iron') ? w + ' iron'
54
+ : is('applewebkit/') ? (w + ' ' + s + (/version\/((\d+)(\.(\d+))(\.\d+)*)/.test(ua) ? ' ' + s + RegExp.$2 + " " + s + RegExp.$2 + RegExp.$3.replace('.', '_') : (/ Safari\/(\d+)/i.test(ua) ? ((RegExp.$1 === "419" || RegExp.$1 === "417" || RegExp.$1 === "416" || RegExp.$1 === "412") ? ' ' + s + '2_0' : RegExp.$1 === "312" ? ' ' + s + '1_3' : RegExp.$1 === "125" ? ' ' + s + '1_2' : RegExp.$1 === "85" ? ' ' + s + '1_0' : '') : '')))
55
+ : is('mozilla/') ? g : ''
56
+
57
+ ,
58
+ is("android|mobi|mobile|j2me|iphone|ipod|ipad|blackberry|playbook|kindle|silk") ? m : ''
59
+
60
+ ,
61
+ is('j2me') ? 'j2me' : is('ipad|ipod|iphone') ? (
62
+ (
63
+ /CPU( iPhone)? OS (\d+[_|\.]\d+([_|\.]\d+)*)/i.test(ua) ?
64
+ 'ios' + version('ios', RegExp.$2) : '') + ' ' + (/(ip(ad|od|hone))/gi.test(ua) ? RegExp.$1 : "")
65
+ )
66
+
67
+ : is('playbook') ? 'playbook'
68
+ : is('kindle|silk') ? 'kindle'
69
+ : is('playbook') ? 'playbook'
70
+ : is('mac') ? 'mac' + (/mac os x ((\d+)[.|_](\d+))/.test(ua) ? (' mac' + (RegExp.$2) + ' mac' + (RegExp.$1).replace('.', "_")) : '')
71
+ : is('win') ? 'win' + (is('windows nt 6.2') ? ' win8'
72
+ : is('windows nt 6.1') ? ' win7'
73
+ : is('windows nt 6.0') ? ' vista'
74
+ : is('windows nt 5.2') || is('windows nt 5.1') ? ' win_xp'
75
+ : is('windows nt 5.0') ? ' win_2k'
76
+ : is('windows nt 4.0') || is('WinNT4.0') ? ' win_nt' : '')
77
+ : is('freebsd') ? 'freebsd'
78
+ : (is('x11|linux')) ? 'linux' : ''
79
+
80
+ ,
81
+ (/[; |\[](([a-z]{2})(\-[a-z]{2})?)[)|;|\]]/i.test(ua)) ? (lang + RegExp.$2).replace("-", "_") + (RegExp.$3 !== '' ? (' ' + lang + RegExp.$1).replace("-", "_") : '') : ''
82
+
83
+ ,
84
+ (is('ipad|iphone|ipod') && !is('safari')) ? 'ipad_app' : ''
85
+
86
+ ]; // b
87
+
88
+ function screenSize() {
89
+ var w = window.outerWidth || html.clientWidth;
90
+ var h = window.outerHeight || html.clientHeight;
91
+ uaInfo.orientation = ((w < h) ? "portrait" : "landscape");
136
92
  // remove previous min-width, max-width, client-width, client-height, and orientation
137
- html.className = html.className.replace(/ ?orientation_\w+/g, "").replace(/ [min|max|cl]+[w|h]_\d+/g, "")
138
- for (var i=(allScreens-1);i>=0;i--) { if (w >= screens[i] ) { uaInfo.maxw = screens[i]; break; }}
139
- widthClasses="";
140
- for (var info in uaInfo) { widthClasses+=" "+info+"_"+ uaInfo[info] };
141
- html.className = ( html.className +widthClasses );
142
- return widthClasses;
143
- } // screenSize
144
-
93
+ html.className = html.className.replace(/ ?orientation_\w+/g, "").replace(/ [min|max|cl]+[w|h]_\d+/g, "");
94
+ for (var i = (allScreens - 1); i >= 0; i--) {
95
+ if (w >= screens[i]) {
96
+ uaInfo.maxw = screens[i];
97
+ break;
98
+ }
99
+ }
100
+ var widthClasses = "";
101
+ for (var info in uaInfo) {
102
+ if (uaInfo.hasOwnProperty(info)) {
103
+ widthClasses += " " + info + "_" + uaInfo[info];
104
+ }
105
+ }
106
+ html.className = (html.className + widthClasses);
107
+ return widthClasses;
108
+ } // screenSize
109
+
145
110
  window.onresize = screenSize;
146
- screenSize();
111
+ screenSize();
147
112
 
148
- var cssbs = (b.join(' ')) + " js ";
149
- html.className = ( cssbs + html.className.replace(/\b(no[-|_]?)?js\b/g,"") ).replace(/^ /, "").replace(/ +/g," ");
113
+ function retina() {
114
+ var r = window.devicePixelRatio > 1;
115
+ if (r) {
116
+ html.className += ' retina';
117
+ } else {
118
+ html.className += ' non-retina';
119
+ }
120
+ }
121
+ retina();
150
122
 
151
- return cssbs;
152
- }
153
-
154
- css_browser_selector(navigator.userAgent);
123
+ var cssbs = (b.join(' ')) + " js ";
124
+ html.className = (cssbs + html.className.replace(/\b(no[-|_]?)?js\b/g, "")).replace(/^ /, "").replace(/ +/g, " ");
155
125
 
126
+ return cssbs;
127
+ }
156
128
 
129
+ css_browser_selector(navigator.userAgent);