spree_backend 2.0.13 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
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);