joosy 1.0.0.RC7 → 1.1.0.alpha.1

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.
data/Gemfile.lock CHANGED
@@ -1,6 +1,6 @@
1
1
  GIT
2
2
  remote: git://github.com/pivotal/jasmine-gem.git
3
- revision: 63e8d46556a421cbb3b511b52cd8c2188d72b9db
3
+ revision: ff6fa02f3083b8f9423ddf0cdee5b41ff6d18de1
4
4
  specs:
5
5
  jasmine (1.3.2)
6
6
  jasmine-core (~> 1.3.1)
@@ -11,19 +11,14 @@ GIT
11
11
  PATH
12
12
  remote: .
13
13
  specs:
14
- joosy (1.0.0.RC7)
15
- coffee-rails
14
+ joosy (1.1.0.alpha.1)
16
15
  haml_coffee_assets
17
16
  i18n-js
18
- jquery-rails
19
- rails (>= 3.1.0)
17
+ sprockets
20
18
 
21
19
  GEM
22
20
  remote: http://rubygems.org/
23
21
  specs:
24
- actionmailer (3.2.11)
25
- actionpack (= 3.2.11)
26
- mail (~> 2.4.4)
27
22
  actionpack (3.2.11)
28
23
  activemodel (= 3.2.11)
29
24
  activesupport (= 3.2.11)
@@ -37,26 +32,13 @@ GEM
37
32
  activemodel (3.2.11)
38
33
  activesupport (= 3.2.11)
39
34
  builder (~> 3.0.0)
40
- activerecord (3.2.11)
41
- activemodel (= 3.2.11)
42
- activesupport (= 3.2.11)
43
- arel (~> 3.0.2)
44
- tzinfo (~> 0.3.29)
45
- activeresource (3.2.11)
46
- activemodel (= 3.2.11)
47
- activesupport (= 3.2.11)
48
35
  activesupport (3.2.11)
49
36
  i18n (~> 0.6)
50
37
  multi_json (~> 1.0)
51
- addressable (2.3.2)
52
- arel (3.0.2)
53
38
  builder (3.0.4)
54
- childprocess (0.3.6)
39
+ childprocess (0.3.7)
55
40
  ffi (~> 1.0, >= 1.0.6)
56
41
  coderay (1.0.8)
57
- coffee-rails (3.2.2)
58
- coffee-script (>= 2.2.0)
59
- railties (~> 3.2.0)
60
42
  coffee-script (2.2.0)
61
43
  coffee-script-source
62
44
  execjs
@@ -70,18 +52,20 @@ GEM
70
52
  multi_json (~> 1.0)
71
53
  ffi (1.3.1)
72
54
  ffi (1.3.1-java)
73
- guard (1.6.1)
55
+ guard (1.6.2)
74
56
  listen (>= 0.6.0)
75
57
  lumberjack (>= 1.0.2)
76
58
  pry (>= 0.9.10)
59
+ terminal-table (>= 1.4.3)
77
60
  thor (>= 0.14.6)
78
61
  guard-coffeescript (1.2.1)
79
62
  coffee-script (>= 2.2.0)
80
63
  guard (>= 1.1.0)
81
- guard-sprockets (0.4.1)
64
+ guard-sprockets (0.4.2)
65
+ execjs (~> 1.0)
82
66
  guard (>= 1.1.0)
83
67
  sprockets (~> 2.0)
84
- haml_coffee_assets (1.10.0)
68
+ haml_coffee_assets (1.11.1)
85
69
  coffee-script (>= 1.0.0)
86
70
  sprockets (>= 2.0.3)
87
71
  tilt (>= 1.3.3)
@@ -91,31 +75,22 @@ GEM
91
75
  i18n
92
76
  jasmine-core (1.3.1)
93
77
  journey (1.0.4)
94
- jquery-rails (2.1.4)
78
+ jquery-rails (2.2.0)
95
79
  railties (>= 3.0, < 5.0)
96
80
  thor (>= 0.14, < 2.0)
97
81
  json (1.7.6)
98
82
  json (1.7.6-java)
99
83
  libnotify (0.8.0)
100
84
  ffi (>= 1.0.11)
101
- libwebsocket (0.1.7.1)
102
- addressable
103
- websocket
104
85
  listen (0.7.2)
105
86
  lumberjack (1.0.2)
106
- mail (2.4.4)
107
- i18n (>= 0.4.0)
108
- mime-types (~> 1.16)
109
- treetop (~> 1.4.8)
110
87
  method_source (0.8.1)
111
- mime-types (1.19)
112
88
  multi_json (1.5.0)
113
- polyglot (0.3.3)
114
- pry (0.9.11.3)
89
+ pry (0.9.11.4)
115
90
  coderay (~> 1.0.5)
116
91
  method_source (~> 0.8)
117
92
  slop (~> 3.4)
118
- pry (0.9.11.3-java)
93
+ pry (0.9.11.4-java)
119
94
  coderay (~> 1.0.5)
120
95
  method_source (~> 0.8)
121
96
  slop (~> 3.4)
@@ -127,14 +102,6 @@ GEM
127
102
  rack
128
103
  rack-test (0.6.2)
129
104
  rack (>= 1.0)
130
- rails (3.2.11)
131
- actionmailer (= 3.2.11)
132
- actionpack (= 3.2.11)
133
- activerecord (= 3.2.11)
134
- activeresource (= 3.2.11)
135
- activesupport (= 3.2.11)
136
- bundler (~> 1.0)
137
- railties (= 3.2.11)
138
105
  railties (3.2.11)
139
106
  actionpack (= 3.2.11)
140
107
  activesupport (= 3.2.11)
@@ -154,13 +121,13 @@ GEM
154
121
  rspec-core (2.12.2)
155
122
  rspec-expectations (2.12.1)
156
123
  diff-lcs (~> 1.1.3)
157
- rspec-mocks (2.12.1)
124
+ rspec-mocks (2.12.2)
158
125
  rubyzip (0.9.9)
159
- selenium-webdriver (2.27.2)
126
+ selenium-webdriver (2.29.0)
160
127
  childprocess (>= 0.2.5)
161
- libwebsocket (~> 0.1.3)
162
128
  multi_json (~> 1.0)
163
129
  rubyzip
130
+ websocket (~> 1.0.4)
164
131
  slop (3.4.3)
165
132
  spoon (0.0.1)
166
133
  sprockets (2.2.2)
@@ -168,17 +135,14 @@ GEM
168
135
  multi_json (~> 1.0)
169
136
  rack (~> 1.0)
170
137
  tilt (~> 1.1, != 1.3.0)
138
+ terminal-table (1.4.5)
171
139
  thin (1.5.0)
172
140
  daemons (>= 1.0.9)
173
141
  eventmachine (>= 0.12.6)
174
142
  rack (>= 1.0.0)
175
- thor (0.16.0)
143
+ thor (0.17.0)
176
144
  tilt (1.3.3)
177
- treetop (1.4.12)
178
- polyglot
179
- polyglot (>= 0.3.1)
180
- tzinfo (0.3.35)
181
- websocket (1.0.6)
145
+ websocket (1.0.7)
182
146
 
183
147
  PLATFORMS
184
148
  java
@@ -190,6 +154,7 @@ DEPENDENCIES
190
154
  guard-sprockets
191
155
  jasmine!
192
156
  joosy!
157
+ jquery-rails
193
158
  libnotify
194
159
  rb-inotify
195
160
  thin
@@ -26,9 +26,9 @@
26
26
  # @include Joosy.Modules.Container
27
27
  #
28
28
  class Joosy.Form extends Joosy.Module
29
+ @include Joosy.Modules.Container
29
30
  @include Joosy.Modules.Log
30
31
  @include Joosy.Modules.Events
31
- @include Joosy.Modules.Container
32
32
 
33
33
  #
34
34
  # Marks the CSS class to use to mark invalidated fields
@@ -114,7 +114,7 @@ class Joosy.Form extends Joosy.Module
114
114
  @__delegateEvents()
115
115
 
116
116
  method = @container.get(0).getAttribute('method')?.toLowerCase()
117
- if method && !['get', 'post'].has method
117
+ if method && !['get', 'post'].any method
118
118
  @__markMethod method
119
119
  @container.attr 'method', 'POST'
120
120
 
@@ -196,13 +196,14 @@ class Joosy.Form extends Joosy.Module
196
196
  input.filter("[value='#{val}']").attr 'checked', 'checked'
197
197
  else
198
198
  input.val val
199
- if Object.isObject(val) || Object.isArray(val)
200
- filler val, key
201
- else if val instanceof Joosy.Resource.REST
202
- filler val.data, @concatFieldName(scope, "[#{property}_attributes][0]")
203
- else if val instanceof Joosy.Resource.RESTCollection
199
+ if val instanceof Joosy.Resource.RESTCollection
204
200
  for entity, i in val.data
205
201
  filler entity.data, @concatFieldName(scope, "[#{property}_attributes][#{i}]")
202
+ else if val instanceof Joosy.Resource.REST
203
+ filler val.data, @concatFieldName(scope, "[#{property}_attributes][0]")
204
+ else if Object.isObject(val) || Object.isArray(val)
205
+ filler val, key
206
+ else
206
207
  delete data.__joosy_form_filler_lock
207
208
 
208
209
  filler data, resource.__entityName || options.resourceName
@@ -45,7 +45,7 @@ class Joosy.Layout extends Joosy.Module
45
45
  # preparations are done you should call that function.
46
46
  #
47
47
  # @example Sample before painter
48
- # @beforePaint (complete) ->
48
+ # @beforePaint (container, page, complete) ->
49
49
  # if !@data # checks if parallel fetching finished
50
50
  # $('preloader').slideDown -> complete()
51
51
  #
@@ -63,7 +63,7 @@ class Joosy.Layout extends Joosy.Module
63
63
  # preparations are done you should call that function.
64
64
  #
65
65
  # @example Sample painter
66
- # @paint (complete) ->
66
+ # @paint (container, page, complete) ->
67
67
  # @container.fadeIn -> complete()
68
68
  #
69
69
  @paint: (callback) ->
@@ -81,7 +81,7 @@ class Joosy.Layout extends Joosy.Module
81
81
  # access layout data from that. Think twice if you are doing it right though.
82
82
  #
83
83
  # @example Sample eraser
84
- # @erase (complete) ->
84
+ # @erase (container, page, complete) ->
85
85
  # @container.fadeOut -> complete()
86
86
  #
87
87
  @erase: (callback) ->
@@ -73,7 +73,7 @@ Joosy.Modules.Events =
73
73
  callback data...
74
74
  if @__boundEvents
75
75
  for [events, callback] in @__boundEvents
76
- if events.has event
76
+ if events.any event
77
77
  callback data...
78
78
 
79
79
  #
@@ -1,5 +1,3 @@
1
- moduleKeywords = ['included', 'extended']
2
-
3
1
  #
4
2
  # Base Joosy class extending Coffee class with module-like injections
5
3
  # and other tiny stuff.
@@ -95,8 +93,8 @@ class Joosy.Module
95
93
  unless object
96
94
  throw new Error 'include(object) requires obj'
97
95
 
98
- Object.each object, (key, value) =>
99
- if key not in moduleKeywords
96
+ for key, value of object
97
+ if key != 'included' && key != 'extended'
100
98
  this::[key] = value
101
99
 
102
100
  object.included?.apply this
@@ -74,7 +74,7 @@ class Joosy.Page extends Joosy.Module
74
74
  # preparations are done you should call that function.
75
75
  #
76
76
  # @example Sample before painter
77
- # @beforePaint (complete) ->
77
+ # @beforePaint (container, complete) ->
78
78
  # if !@data # checks if parallel fetching finished
79
79
  # $('preloader').slideDown -> complete()
80
80
  #
@@ -92,7 +92,7 @@ class Joosy.Page extends Joosy.Module
92
92
  # preparations are done you should call that function.
93
93
  #
94
94
  # @example Sample painter
95
- # @paint (complete) ->
95
+ # @paint (container, complete) ->
96
96
  # @container.fadeIn -> complete()
97
97
  #
98
98
  @paint: (callback) ->
@@ -113,7 +113,7 @@ class Joosy.Page extends Joosy.Module
113
113
  # access page data from that. Think twice if you are doing it right though.
114
114
  #
115
115
  # @example Sample eraser
116
- # @erase (complete) ->
116
+ # @erase (container, complete) ->
117
117
  # @container.fadeOut -> complete()
118
118
  #
119
119
  @erase: (callback) ->
@@ -26,13 +26,19 @@ Joosy.Router =
26
26
  # need) and actual executors
27
27
  #
28
28
  routes: Object.extended()
29
-
29
+
30
30
  #
31
31
  # The regexp to restrict the next loading url. By default set to false and
32
32
  # therefore no restrictions apply.
33
33
  #
34
34
  restrictPattern: false
35
-
35
+
36
+ #
37
+ # TODO: Write readme
38
+ #
39
+ __namespace: ""
40
+ __asNamespace: ""
41
+
36
42
  #
37
43
  # Set the restriction pattern. If the requested url does not match this it
38
44
  # will not load. Set `false` to avoid check.
@@ -45,6 +51,17 @@ Joosy.Router =
45
51
  reset: ->
46
52
  @rawRoutes = Object.extended()
47
53
  @routes = Object.extended()
54
+ @__namespace = ""
55
+ @__asNamespace = ""
56
+
57
+
58
+ #
59
+ # Draws the routes similar to Ruby on Rails
60
+ #
61
+ # @param [Function] block callback for child commands
62
+ #
63
+ draw: (block)->
64
+ block.call(this) if Object.isFunction(block)
48
65
 
49
66
  #
50
67
  # Registers the set of raw routes
@@ -78,7 +95,68 @@ Joosy.Router =
78
95
  , 2 # jQuery.hashchange checks hash changing every 1ms
79
96
  else
80
97
  history[if options.replaceState then 'replaceState' else 'pushState'] {}, '', '#'+path
98
+
99
+ #
100
+ # Match route (ads it to @rawRoutes)
101
+ #
102
+ # @param [String] route similar to ones sent in map hash
103
+ #
104
+ # @param options [String] to function to which the route routes
105
+ # @option options [String] as name of the route, used for reverse routing
106
+ #
107
+ match: (route, options={}) ->
108
+ if @__asNamespace
109
+ as = @__asNamespace + options["as"].capitalize()
110
+ else
111
+ as = options["as"]
112
+
113
+ routeName = @__namespace + route
81
114
 
115
+ map = {}
116
+ map[route] = options["to"]
117
+
118
+ Joosy.Module.merge @rawRoutes, map
119
+
120
+ @__injectReverseUrl(as, routeName)
121
+
122
+ #
123
+ # Shortcut to match "/"
124
+ #
125
+ # @param options [String] to function to which the route routes
126
+ # @option options [String] as name of the route, used for reverse routing
127
+ # default it is "root"
128
+ #
129
+ root: (options={}) ->
130
+ as = options["as"] || "root"
131
+ @match("/", to: options["to"], as: as)
132
+
133
+ #
134
+ # Routes the 404
135
+ #
136
+ # @param options [String] to function to which the route routes
137
+ #
138
+ notFound: (options={}) ->
139
+ @match(404, to: options["to"])
140
+
141
+ #
142
+ # Namespaces a match route
143
+ #
144
+ # @param [String] name name of the namespace, prefixes other commands
145
+ #
146
+ # @option [Hash] options "as", prefixes all other "as" commands
147
+ # @param [Function] block callback for child commands
148
+ namespace: (name, options={}, block) ->
149
+ if Object.isFunction(options)
150
+ block = options
151
+ options = {}
152
+
153
+ newScope = $.extend({}, this)
154
+ newScope.rawRoutes = {}
155
+ newScope.__namespace += name
156
+ newScope.__asNamespace += "#{options["as"]}" if options["as"]
157
+ block.call(newScope) if Object.isFunction(block)
158
+ @rawRoutes[name] = newScope.rawRoutes
159
+
82
160
  #
83
161
  # Inits the routing system and loads the current route
84
162
  # Binds the window hashchange event and therefore should only be called once
@@ -199,5 +277,31 @@ Joosy.Router =
199
277
  params[pair[0]] = pair[1]
200
278
 
201
279
  params
280
+
281
+ #
282
+ # Injects reverse routing function into global namespace
283
+ # @param [String] as The name for the route, ex: for "projects"
284
+ # builds "projects_url" and "projects_path" functions
285
+ # @param [String] route Entire route, joined by namespaces, ex:
286
+ # "/projects/":
287
+ # "/:id" :
288
+ # "/edit": TestPage
289
+ # joins to "/projects/:id/edit"
290
+ #
291
+ __injectReverseUrl: (as, route) ->
292
+ return if as == undefined
293
+
294
+ fnc = (options) ->
295
+ url = route
296
+ (route.match(/\/:[^\/]+/g) || []).each (str) ->
297
+ url = url.replace(str.substr(1), options[str.substr(2)])
298
+ "#!#{url}"
299
+
300
+ Joosy.Helpers.Application["#{as}Path"] = (options) ->
301
+ fnc(options)
302
+
303
+ Joosy.Helpers.Application["#{as}Url"] = (options) ->
304
+ url = 'http://' + window.location.host + window.location.pathname
305
+ "#{url}#{fnc(options)}"
202
306
 
203
307
  Joosy.Module.merge Joosy.Router, Joosy.Modules.Events
@@ -1,5 +1,4 @@
1
1
  #= require jquery
2
- #= require jquery_ujs
3
2
  #= require jquery.hashchange
4
3
  #= require jquery.form
5
4
  #= require sugar
data/joosy.gemspec CHANGED
@@ -1,8 +1,8 @@
1
- require File.expand_path("../lib/joosy/rails/version", __FILE__)
1
+ require File.expand_path("../lib/joosy/version", __FILE__)
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = "joosy"
5
- s.version = Joosy::Rails::VERSION
5
+ s.version = Joosy::VERSION
6
6
  s.platform = Gem::Platform::RUBY
7
7
  s.summary = "Joosy Framework support for Ruby on Rails"
8
8
  s.email = "boris@roundlake.ru"
@@ -13,12 +13,10 @@ Gem::Specification.new do |s|
13
13
  s.files = `git ls-files`.split("\n")
14
14
  s.require_paths = ["lib"]
15
15
 
16
- s.add_dependency 'rails', ">= 3.1.0"
17
- s.add_dependency 'coffee-rails'
18
- s.add_dependency 'jquery-rails'
16
+ s.add_dependency 'sprockets'
19
17
  s.add_dependency 'haml_coffee_assets'
20
- s.add_dependency 'i18n-js'
21
18
 
19
+ s.add_development_dependency 'jquery-rails'
22
20
  s.add_development_dependency 'guard'
23
21
  s.add_development_dependency 'guard-coffeescript'
24
22
  s.add_development_dependency 'guard-sprockets'
@@ -1,6 +1,10 @@
1
1
  require 'rails/engine'
2
2
 
3
3
  module Joosy
4
+ def self.resources(namespaces=nil)
5
+ Joosy::SprocketsHelper.joosy_resources(namespaces).to_json
6
+ end
7
+
4
8
  module Rails
5
9
  class Engine < ::Rails::Engine
6
10
 
@@ -0,0 +1,3 @@
1
+ module Joosy
2
+ VERSION = "1.1.0.alpha.1"
3
+ end
data/lib/joosy.rb CHANGED
@@ -1,16 +1,17 @@
1
1
  require 'haml_coffee_assets'
2
- require 'jquery-rails'
3
- require 'coffee-rails'
4
-
5
- require 'joosy/rails/engine'
6
- require 'joosy/rails/version'
7
- require 'rails/resources_with_joosy'
8
-
9
- require 'i18n-js'
2
+ require 'joosy/version'
10
3
 
4
+ if defined?(Rails)
5
+ require 'joosy/rails/engine'
6
+ require 'rails/resources_with_joosy'
7
+ end
11
8
 
12
9
  module Joosy
13
- def self.resources(namespaces=nil)
14
- Joosy::SprocketsHelper.joosy_resources(namespaces).to_json
10
+ def self.assets_paths
11
+ [
12
+ File.expand_path('../../app/assets/javascripts', __FILE__),
13
+ File.expand_path('../../vendor/assets/javascripts', __FILE__),
14
+ File.dirname(HamlCoffeeAssets.helpers_path)
15
+ ]
15
16
  end
16
17
  end
@@ -140,4 +140,95 @@ describe "Joosy.Router", ->
140
140
  expect(Joosy.Application.setCurrentPage.args.last()).toEqual [TestPage, Object.extended()]
141
141
 
142
142
  Joosy.Application.setCurrentPage.restore()
143
- Joosy.Router.restrict false
143
+ Joosy.Router.restrict false
144
+
145
+ it "should DRAW simple routes, only using match and root", ->
146
+ Joosy.Router.map
147
+ '/': spies.root
148
+ '/page': TestPage
149
+ 404: spies.wildcard
150
+ raw_routes_for_map = Joosy.Router.rawRoutes
151
+
152
+ Joosy.Router.reset()
153
+
154
+ Joosy.Router.draw ->
155
+ @root to: spies.root
156
+ @match '/page', to: TestPage
157
+ @notFound to: spies.wildcard
158
+
159
+ expect(Joosy.Router.rawRoutes).toEqual(raw_routes_for_map)
160
+
161
+ it "should DRAW namespaced routes", ->
162
+ Joosy.Router.map
163
+ '/': spies.root
164
+ '/page': TestPage
165
+ '/section':
166
+ '/page/:id': spies.section
167
+ '/page2/:more': TestPage
168
+ 404: spies.wildcard
169
+ rawRoutesForMap = Joosy.Router.rawRoutes
170
+
171
+ Joosy.Router.reset()
172
+
173
+ Joosy.Router.draw ->
174
+ @root to: spies.root
175
+ @match '/page', to: TestPage
176
+ @namespace '/section', ->
177
+ @match '/page/:id', to: spies.section
178
+ @match '/page2/:more', to: TestPage
179
+ @notFound to: spies.wildcard
180
+
181
+ expect(Joosy.Router.rawRoutes).toEqual(rawRoutesForMap)
182
+
183
+ it "should DRAW simple route reverses, only using match and root", ->
184
+ Joosy.Router.draw ->
185
+ @root to: spies.root
186
+ @match '/page', to: TestPage, as: "page"
187
+ @match '/page/:id', to: TestPage, as: "pageFor"
188
+ @notFound to: spies.wildcard
189
+
190
+ validate = ->
191
+ expect(@rootUrl).not.toEqual undefined
192
+ expect(@rootPath).not.toEqual undefined
193
+
194
+ expect(@rootPath()).toEqual "#!/"
195
+ expect(@pagePath()).toEqual "#!/page"
196
+ expect(@pageForPath(id: 3)).toEqual "#!/page/3"
197
+ validate.call(Joosy.Helpers.Application)
198
+
199
+ it "should DRAW more complex reverses using namespaces", ->
200
+ Joosy.Router.draw ->
201
+ @namespace '/projects', as: "projects", ->
202
+ @match "/", to: TestPage, as: "index"
203
+ @namespace "/:id", ->
204
+ @match "/", to: TestPage, as: "show"
205
+ @match "/edit", to: TestPage, as: "edit"
206
+ @match "/delete", to: TestPage, as: "delete"
207
+
208
+ @namespace '/tickets', ->
209
+ @match "/", to: TestPage, as: "tasksIndex"
210
+
211
+ @namespace '/activities', ->
212
+ @root to: TestPage, as: "activities"
213
+
214
+ validate = ->
215
+ expect(@projectsIndexPath).not.toEqual undefined
216
+ expect(@projectsIndexPath()).not.toEqual "#!/projects"
217
+ expect(@projectsIndexPath()).toEqual "#!/projects/"
218
+
219
+ expect(@projectsShowPath(id: 3)).toEqual "#!/projects/3/"
220
+ expect(@projectsEditPath(id: 3)).toEqual "#!/projects/3/edit"
221
+ expect(@projectsDeletePath(id: 3)).toEqual "#!/projects/3/delete"
222
+
223
+ expect(@tasksIndexPath()).toEqual "#!/tickets/"
224
+ expect(@activitiesPath()).toEqual "#!/activities/"
225
+ validate.call(Joosy.Helpers.Application)
226
+
227
+ it "should return reverse url with hostname and pathname", ->
228
+ Joosy.Router.draw ->
229
+ @match "/projects/", to: TestPage, as: "projectsIndex"
230
+
231
+ validate = ->
232
+ expect(@projectsIndexPath()).toEqual "#!/projects/"
233
+ expect(@projectsIndexUrl()).toEqual "http://localhost:8888/#!/projects/"
234
+ validate.call(Joosy.Helpers.Application)
@@ -297,7 +297,7 @@
297
297
  // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
298
298
  // vvvvvvvvvvvvvvvvvvv REMOVE IF NOT SUPPORTING IE6/7/8 vvvvvvvvvvvvvvvvvvv
299
299
  // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
300
- $.browser.msie && !supports_onhashchange && (function(){
300
+ !supports_onhashchange && (function(){
301
301
  // Not only do IE6/7 need the "magical" Iframe treatment, but so does IE8
302
302
  // when running in "IE7 compatibility" mode.
303
303