discourse-ember-source 3.5.1.1 → 3.5.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (741) hide show
  1. checksums.yaml +4 -4
  2. data/lib/ember/version.rb +1 -1
  3. metadata +2 -740
  4. data/.gitignore +0 -9
  5. data/.travis.yml +0 -5
  6. data/Gemfile +0 -6
  7. data/LICENSE.txt +0 -21
  8. data/README +0 -18
  9. data/README.md +0 -39
  10. data/Rakefile +0 -27
  11. data/bin/console +0 -14
  12. data/bin/setup +0 -8
  13. data/discourse-ember-source-3.5.1.0.gem +0 -0
  14. data/dist/ember-all.debug.map +0 -1
  15. data/dist/ember-template-compiler.map +0 -1
  16. data/dist/ember-testing.map +0 -1
  17. data/dist/ember-tests.map +0 -1
  18. data/dist/ember-tests.prod.map +0 -1
  19. data/dist/ember.debug.map +0 -1
  20. data/dist/ember.min.map +0 -1
  21. data/dist/ember.prod.map +0 -1
  22. data/dist/es/@ember/application/globals-resolver.js +0 -425
  23. data/dist/es/@ember/application/index.js +0 -3
  24. data/dist/es/@ember/application/instance.js +0 -513
  25. data/dist/es/@ember/application/lib/application.js +0 -1139
  26. data/dist/es/@ember/application/lib/lazy_load.js +0 -69
  27. data/dist/es/@ember/application/lib/validate-type.js +0 -24
  28. data/dist/es/@ember/application/tests/application_instance_test.js +0 -230
  29. data/dist/es/@ember/application/tests/application_test.js +0 -470
  30. data/dist/es/@ember/application/tests/bootstrap-test.js +0 -28
  31. data/dist/es/@ember/application/tests/dependency_injection/custom_resolver_test.js +0 -32
  32. data/dist/es/@ember/application/tests/dependency_injection/default_resolver_test.js +0 -363
  33. data/dist/es/@ember/application/tests/dependency_injection/normalization_test.js +0 -70
  34. data/dist/es/@ember/application/tests/dependency_injection/to_string_test.js +0 -71
  35. data/dist/es/@ember/application/tests/dependency_injection_test.js +0 -93
  36. data/dist/es/@ember/application/tests/initializers_test.js +0 -391
  37. data/dist/es/@ember/application/tests/instance_initializers_test.js +0 -395
  38. data/dist/es/@ember/application/tests/lazy_load_test.js +0 -79
  39. data/dist/es/@ember/application/tests/logging_test.js +0 -179
  40. data/dist/es/@ember/application/tests/readiness_test.js +0 -138
  41. data/dist/es/@ember/application/tests/reset_test.js +0 -185
  42. data/dist/es/@ember/application/tests/visit_test.js +0 -783
  43. data/dist/es/@ember/canary-features/index.js +0 -76
  44. data/dist/es/@ember/controller/index.js +0 -50
  45. data/dist/es/@ember/controller/lib/controller_mixin.js +0 -42
  46. data/dist/es/@ember/controller/tests/controller_test.js +0 -209
  47. data/dist/es/@ember/debug/index.js +0 -264
  48. data/dist/es/@ember/debug/lib/deprecate.js +0 -198
  49. data/dist/es/@ember/debug/lib/handlers.js +0 -22
  50. data/dist/es/@ember/debug/lib/testing.js +0 -7
  51. data/dist/es/@ember/debug/lib/warn.js +0 -107
  52. data/dist/es/@ember/debug/tests/handlers-test.js +0 -144
  53. data/dist/es/@ember/debug/tests/main_test.js +0 -444
  54. data/dist/es/@ember/deprecated-features/index.js +0 -21
  55. data/dist/es/@ember/engine/index.js +0 -532
  56. data/dist/es/@ember/engine/instance.js +0 -228
  57. data/dist/es/@ember/engine/lib/engine-parent.js +0 -32
  58. data/dist/es/@ember/engine/tests/engine_initializers_test.js +0 -366
  59. data/dist/es/@ember/engine/tests/engine_instance_initializers_test.js +0 -409
  60. data/dist/es/@ember/engine/tests/engine_instance_test.js +0 -115
  61. data/dist/es/@ember/engine/tests/engine_parent_test.js +0 -20
  62. data/dist/es/@ember/engine/tests/engine_test.js +0 -121
  63. data/dist/es/@ember/error/index.js +0 -36
  64. data/dist/es/@ember/error/tests/index_test.js +0 -19
  65. data/dist/es/@ember/instrumentation/index.js +0 -240
  66. data/dist/es/@ember/instrumentation/tests/index-test.js +0 -214
  67. data/dist/es/@ember/map/index.js +0 -218
  68. data/dist/es/@ember/map/lib/ordered-set.js +0 -186
  69. data/dist/es/@ember/map/lib/utils.js +0 -29
  70. data/dist/es/@ember/map/tests/map_test.js +0 -578
  71. data/dist/es/@ember/map/with-default.js +0 -87
  72. data/dist/es/@ember/object/computed.js +0 -35
  73. data/dist/es/@ember/object/lib/computed/computed_macros.js +0 -742
  74. data/dist/es/@ember/object/lib/computed/reduce_computed_macros.js +0 -894
  75. data/dist/es/@ember/object/tests/computed/computed_macros_test.js +0 -533
  76. data/dist/es/@ember/object/tests/computed/reduce_computed_macros_test.js +0 -2243
  77. data/dist/es/@ember/polyfills/index.js +0 -3
  78. data/dist/es/@ember/polyfills/lib/assign.js +0 -43
  79. data/dist/es/@ember/polyfills/lib/merge.js +0 -35
  80. data/dist/es/@ember/polyfills/tests/assign_test.js +0 -64
  81. data/dist/es/@ember/runloop/index.js +0 -749
  82. data/dist/es/@ember/runloop/tests/debounce_test.js +0 -87
  83. data/dist/es/@ember/runloop/tests/later_test.js +0 -264
  84. data/dist/es/@ember/runloop/tests/next_test.js +0 -56
  85. data/dist/es/@ember/runloop/tests/once_test.js +0 -62
  86. data/dist/es/@ember/runloop/tests/onerror_test.js +0 -59
  87. data/dist/es/@ember/runloop/tests/run_bind_test.js +0 -59
  88. data/dist/es/@ember/runloop/tests/run_test.js +0 -28
  89. data/dist/es/@ember/runloop/tests/schedule_test.js +0 -86
  90. data/dist/es/@ember/runloop/tests/sync_test.js +0 -32
  91. data/dist/es/@ember/runloop/tests/unwind_test.js +0 -54
  92. data/dist/es/@ember/service/index.js +0 -57
  93. data/dist/es/@ember/string/index.js +0 -362
  94. data/dist/es/@ember/string/lib/string_registry.js +0 -13
  95. data/dist/es/@ember/string/tests/camelize_test.js +0 -53
  96. data/dist/es/@ember/string/tests/capitalize_test.js +0 -58
  97. data/dist/es/@ember/string/tests/classify_test.js +0 -79
  98. data/dist/es/@ember/string/tests/dasherize_test.js +0 -57
  99. data/dist/es/@ember/string/tests/decamelize_test.js +0 -51
  100. data/dist/es/@ember/string/tests/loc_test.js +0 -76
  101. data/dist/es/@ember/string/tests/underscore_test.js +0 -51
  102. data/dist/es/@ember/string/tests/w_test.js +0 -39
  103. data/dist/es/@glimmer/compiler.js +0 -1226
  104. data/dist/es/@glimmer/encoder.js +0 -39
  105. data/dist/es/@glimmer/low-level.js +0 -82
  106. data/dist/es/@glimmer/node.js +0 -112
  107. data/dist/es/@glimmer/opcode-compiler.js +0 -1999
  108. data/dist/es/@glimmer/program.js +0 -405
  109. data/dist/es/@glimmer/reference.js +0 -478
  110. data/dist/es/@glimmer/runtime.js +0 -4086
  111. data/dist/es/@glimmer/syntax.js +0 -1424
  112. data/dist/es/@glimmer/util.js +0 -189
  113. data/dist/es/@glimmer/vm.js +0 -27
  114. data/dist/es/@glimmer/wire-format.js +0 -56
  115. data/dist/es/backburner.js +0 -936
  116. data/dist/es/container/index.js +0 -8
  117. data/dist/es/container/lib/container.js +0 -437
  118. data/dist/es/container/lib/registry.js +0 -646
  119. data/dist/es/container/tests/container_test.js +0 -872
  120. data/dist/es/container/tests/owner_test.js +0 -20
  121. data/dist/es/container/tests/registry_test.js +0 -943
  122. data/dist/es/dag-map.js +0 -209
  123. data/dist/es/ember-browser-environment/index.js +0 -8
  124. data/dist/es/ember-browser-environment/lib/has-dom.js +0 -19
  125. data/dist/es/ember-console/index.js +0 -177
  126. data/dist/es/ember-environment/index.js +0 -3
  127. data/dist/es/ember-environment/lib/context.js +0 -20
  128. data/dist/es/ember-environment/lib/env.js +0 -185
  129. data/dist/es/ember-environment/lib/global.js +0 -14
  130. data/dist/es/ember-error-handling/index.js +0 -22
  131. data/dist/es/ember-extension-support/index.js +0 -2
  132. data/dist/es/ember-extension-support/lib/container_debug_adapter.js +0 -99
  133. data/dist/es/ember-extension-support/lib/data_adapter.js +0 -493
  134. data/dist/es/ember-extension-support/tests/container_debug_adapter_test.js +0 -73
  135. data/dist/es/ember-extension-support/tests/data_adapter_test.js +0 -301
  136. data/dist/es/ember-glimmer/index.js +0 -286
  137. data/dist/es/ember-glimmer/lib/compile-time-lookup.js +0 -37
  138. data/dist/es/ember-glimmer/lib/component-managers/abstract.js +0 -49
  139. data/dist/es/ember-glimmer/lib/component-managers/curly.js +0 -395
  140. data/dist/es/ember-glimmer/lib/component-managers/custom.js +0 -145
  141. data/dist/es/ember-glimmer/lib/component-managers/definition-state.js +0 -1
  142. data/dist/es/ember-glimmer/lib/component-managers/mount.js +0 -103
  143. data/dist/es/ember-glimmer/lib/component-managers/outlet.js +0 -114
  144. data/dist/es/ember-glimmer/lib/component-managers/render.js +0 -112
  145. data/dist/es/ember-glimmer/lib/component-managers/root.js +0 -74
  146. data/dist/es/ember-glimmer/lib/component-managers/template-only.js +0 -46
  147. data/dist/es/ember-glimmer/lib/component.js +0 -633
  148. data/dist/es/ember-glimmer/lib/components/checkbox.js +0 -57
  149. data/dist/es/ember-glimmer/lib/components/link-to.js +0 -777
  150. data/dist/es/ember-glimmer/lib/components/text_area.js +0 -236
  151. data/dist/es/ember-glimmer/lib/components/text_field.js +0 -145
  152. data/dist/es/ember-glimmer/lib/dom.js +0 -3
  153. data/dist/es/ember-glimmer/lib/environment.js +0 -102
  154. data/dist/es/ember-glimmer/lib/helper.js +0 -128
  155. data/dist/es/ember-glimmer/lib/helpers/-class.js +0 -23
  156. data/dist/es/ember-glimmer/lib/helpers/-html-safe.js +0 -9
  157. data/dist/es/ember-glimmer/lib/helpers/-input-type.js +0 -11
  158. data/dist/es/ember-glimmer/lib/helpers/-normalize-class.js +0 -22
  159. data/dist/es/ember-glimmer/lib/helpers/action.js +0 -360
  160. data/dist/es/ember-glimmer/lib/helpers/component.js +0 -135
  161. data/dist/es/ember-glimmer/lib/helpers/concat.js +0 -38
  162. data/dist/es/ember-glimmer/lib/helpers/each-in.js +0 -126
  163. data/dist/es/ember-glimmer/lib/helpers/get.js +0 -100
  164. data/dist/es/ember-glimmer/lib/helpers/hash.js +0 -44
  165. data/dist/es/ember-glimmer/lib/helpers/if-unless.js +0 -142
  166. data/dist/es/ember-glimmer/lib/helpers/loc.js +0 -40
  167. data/dist/es/ember-glimmer/lib/helpers/log.js +0 -25
  168. data/dist/es/ember-glimmer/lib/helpers/mut.js +0 -107
  169. data/dist/es/ember-glimmer/lib/helpers/query-param.js +0 -31
  170. data/dist/es/ember-glimmer/lib/helpers/readonly.js +0 -104
  171. data/dist/es/ember-glimmer/lib/helpers/unbound.js +0 -36
  172. data/dist/es/ember-glimmer/lib/modifiers/action.js +0 -185
  173. data/dist/es/ember-glimmer/lib/protocol-for-url.js +0 -48
  174. data/dist/es/ember-glimmer/lib/renderer.js +0 -371
  175. data/dist/es/ember-glimmer/lib/resolver.js +0 -290
  176. data/dist/es/ember-glimmer/lib/setup-registry.js +0 -77
  177. data/dist/es/ember-glimmer/lib/syntax.js +0 -73
  178. data/dist/es/ember-glimmer/lib/syntax/-text-area.js +0 -8
  179. data/dist/es/ember-glimmer/lib/syntax/input.js +0 -173
  180. data/dist/es/ember-glimmer/lib/syntax/let.js +0 -50
  181. data/dist/es/ember-glimmer/lib/syntax/mount.js +0 -101
  182. data/dist/es/ember-glimmer/lib/syntax/outlet.js +0 -120
  183. data/dist/es/ember-glimmer/lib/syntax/render.js +0 -140
  184. data/dist/es/ember-glimmer/lib/syntax/utils.js +0 -6
  185. data/dist/es/ember-glimmer/lib/template-compiler.js +0 -7
  186. data/dist/es/ember-glimmer/lib/template.js +0 -16
  187. data/dist/es/ember-glimmer/lib/template_registry.js +0 -18
  188. data/dist/es/ember-glimmer/lib/templates/component.js +0 -2
  189. data/dist/es/ember-glimmer/lib/templates/empty.js +0 -2
  190. data/dist/es/ember-glimmer/lib/templates/link-to.js +0 -2
  191. data/dist/es/ember-glimmer/lib/templates/outlet.js +0 -2
  192. data/dist/es/ember-glimmer/lib/templates/root.js +0 -2
  193. data/dist/es/ember-glimmer/lib/utils/bindings.js +0 -180
  194. data/dist/es/ember-glimmer/lib/utils/curly-component-state-bucket.js +0 -36
  195. data/dist/es/ember-glimmer/lib/utils/custom-component-manager.js +0 -20
  196. data/dist/es/ember-glimmer/lib/utils/debug-stack.js +0 -57
  197. data/dist/es/ember-glimmer/lib/utils/iterable.js +0 -358
  198. data/dist/es/ember-glimmer/lib/utils/outlet.js +0 -89
  199. data/dist/es/ember-glimmer/lib/utils/process-args.js +0 -40
  200. data/dist/es/ember-glimmer/lib/utils/references.js +0 -325
  201. data/dist/es/ember-glimmer/lib/utils/serialization-first-node-helpers.js +0 -1
  202. data/dist/es/ember-glimmer/lib/utils/string.js +0 -98
  203. data/dist/es/ember-glimmer/lib/utils/to-bool.js +0 -9
  204. data/dist/es/ember-glimmer/lib/views/outlet.js +0 -71
  205. data/dist/es/ember-glimmer/tests/integration/application/actions-test.js +0 -107
  206. data/dist/es/ember-glimmer/tests/integration/application/engine-test.js +0 -912
  207. data/dist/es/ember-glimmer/tests/integration/application/rendering-test.js +0 -530
  208. data/dist/es/ember-glimmer/tests/integration/components/angle-bracket-invocation-test.js +0 -852
  209. data/dist/es/ember-glimmer/tests/integration/components/append-test.js +0 -742
  210. data/dist/es/ember-glimmer/tests/integration/components/attribute-bindings-test.js +0 -999
  211. data/dist/es/ember-glimmer/tests/integration/components/attrs-lookup-test.js +0 -268
  212. data/dist/es/ember-glimmer/tests/integration/components/class-bindings-test.js +0 -849
  213. data/dist/es/ember-glimmer/tests/integration/components/contextual-components-test.js +0 -1493
  214. data/dist/es/ember-glimmer/tests/integration/components/curly-components-test.js +0 -3705
  215. data/dist/es/ember-glimmer/tests/integration/components/destroy-test.js +0 -33
  216. data/dist/es/ember-glimmer/tests/integration/components/dynamic-components-test.js +0 -896
  217. data/dist/es/ember-glimmer/tests/integration/components/error-handling-test.js +0 -164
  218. data/dist/es/ember-glimmer/tests/integration/components/fragment-components-test.js +0 -285
  219. data/dist/es/ember-glimmer/tests/integration/components/instrumentation-compile-test.js +0 -108
  220. data/dist/es/ember-glimmer/tests/integration/components/instrumentation-test.js +0 -157
  221. data/dist/es/ember-glimmer/tests/integration/components/life-cycle-test.js +0 -1653
  222. data/dist/es/ember-glimmer/tests/integration/components/link-to-test.js +0 -218
  223. data/dist/es/ember-glimmer/tests/integration/components/local-lookup-test.js +0 -414
  224. data/dist/es/ember-glimmer/tests/integration/components/namespaced-lookup-test.js +0 -185
  225. data/dist/es/ember-glimmer/tests/integration/components/render-to-element-test.js +0 -0
  226. data/dist/es/ember-glimmer/tests/integration/components/target-action-test.js +0 -779
  227. data/dist/es/ember-glimmer/tests/integration/components/template-only-components-test.js +0 -225
  228. data/dist/es/ember-glimmer/tests/integration/components/to-string-test.js +0 -27
  229. data/dist/es/ember-glimmer/tests/integration/components/utils-test.js +0 -401
  230. data/dist/es/ember-glimmer/tests/integration/components/web-component-fallback-test.js +0 -35
  231. data/dist/es/ember-glimmer/tests/integration/components/will-destroy-element-hook-test.js +0 -40
  232. data/dist/es/ember-glimmer/tests/integration/content-test.js +0 -1759
  233. data/dist/es/ember-glimmer/tests/integration/custom-component-manager-test.js +0 -508
  234. data/dist/es/ember-glimmer/tests/integration/event-dispatcher-test.js +0 -607
  235. data/dist/es/ember-glimmer/tests/integration/helpers/-class-test.js +0 -76
  236. data/dist/es/ember-glimmer/tests/integration/helpers/closure-action-test.js +0 -1240
  237. data/dist/es/ember-glimmer/tests/integration/helpers/concat-test.js +0 -106
  238. data/dist/es/ember-glimmer/tests/integration/helpers/custom-helper-test.js +0 -672
  239. data/dist/es/ember-glimmer/tests/integration/helpers/element-action-test.js +0 -1595
  240. data/dist/es/ember-glimmer/tests/integration/helpers/get-test.js +0 -618
  241. data/dist/es/ember-glimmer/tests/integration/helpers/hash-test.js +0 -188
  242. data/dist/es/ember-glimmer/tests/integration/helpers/if-unless-test.js +0 -149
  243. data/dist/es/ember-glimmer/tests/integration/helpers/input-test.js +0 -827
  244. data/dist/es/ember-glimmer/tests/integration/helpers/loc-test.js +0 -103
  245. data/dist/es/ember-glimmer/tests/integration/helpers/log-test.js +0 -61
  246. data/dist/es/ember-glimmer/tests/integration/helpers/mut-test.js +0 -580
  247. data/dist/es/ember-glimmer/tests/integration/helpers/partial-test.js +0 -386
  248. data/dist/es/ember-glimmer/tests/integration/helpers/readonly-test.js +0 -293
  249. data/dist/es/ember-glimmer/tests/integration/helpers/render-test.js +0 -522
  250. data/dist/es/ember-glimmer/tests/integration/helpers/text-area-test.js +0 -166
  251. data/dist/es/ember-glimmer/tests/integration/helpers/unbound-test.js +0 -650
  252. data/dist/es/ember-glimmer/tests/integration/helpers/yield-test.js +0 -275
  253. data/dist/es/ember-glimmer/tests/integration/input-test.js +0 -242
  254. data/dist/es/ember-glimmer/tests/integration/mount-test.js +0 -424
  255. data/dist/es/ember-glimmer/tests/integration/outlet-test.js +0 -318
  256. data/dist/es/ember-glimmer/tests/integration/refinements-test.js +0 -74
  257. data/dist/es/ember-glimmer/tests/integration/render-settled-test.js +0 -72
  258. data/dist/es/ember-glimmer/tests/integration/svg-test.js +0 -158
  259. data/dist/es/ember-glimmer/tests/integration/syntax/each-in-test.js +0 -697
  260. data/dist/es/ember-glimmer/tests/integration/syntax/each-test.js +0 -1251
  261. data/dist/es/ember-glimmer/tests/integration/syntax/experimental-syntax-test.js +0 -42
  262. data/dist/es/ember-glimmer/tests/integration/syntax/if-unless-test.js +0 -108
  263. data/dist/es/ember-glimmer/tests/integration/syntax/in-element-test.js +0 -119
  264. data/dist/es/ember-glimmer/tests/integration/syntax/let-test.js +0 -390
  265. data/dist/es/ember-glimmer/tests/integration/syntax/with-dynamic-var-test.js +0 -36
  266. data/dist/es/ember-glimmer/tests/integration/syntax/with-test.js +0 -422
  267. data/dist/es/ember-glimmer/tests/unit/outlet-test.js +0 -48
  268. data/dist/es/ember-glimmer/tests/unit/runtime-resolver-cache-test.js +0 -263
  269. data/dist/es/ember-glimmer/tests/unit/template-factory-test.js +0 -67
  270. data/dist/es/ember-glimmer/tests/unit/utils/debug-stack-test.js +0 -38
  271. data/dist/es/ember-glimmer/tests/utils/abstract-test-case.js +0 -1
  272. data/dist/es/ember-glimmer/tests/utils/helpers.js +0 -15
  273. data/dist/es/ember-glimmer/tests/utils/shared-conditional-tests.js +0 -965
  274. data/dist/es/ember-glimmer/tests/utils/string-test.js +0 -47
  275. data/dist/es/ember-glimmer/tests/utils/test-case.js +0 -6
  276. data/dist/es/ember-glimmer/tests/utils/test-helpers.js +0 -1
  277. data/dist/es/ember-meta/index.js +0 -1
  278. data/dist/es/ember-meta/lib/meta.js +0 -623
  279. data/dist/es/ember-meta/tests/meta_test.js +0 -169
  280. data/dist/es/ember-metal/index.js +0 -33
  281. data/dist/es/ember-metal/lib/alias.js +0 -80
  282. data/dist/es/ember-metal/lib/array.js +0 -55
  283. data/dist/es/ember-metal/lib/array_events.js +0 -65
  284. data/dist/es/ember-metal/lib/chains.js +0 -315
  285. data/dist/es/ember-metal/lib/change_event.js +0 -4
  286. data/dist/es/ember-metal/lib/computed.js +0 -526
  287. data/dist/es/ember-metal/lib/computed_cache.js +0 -58
  288. data/dist/es/ember-metal/lib/dependent_keys.js +0 -34
  289. data/dist/es/ember-metal/lib/deprecate_property.js +0 -34
  290. data/dist/es/ember-metal/lib/descriptor.js +0 -28
  291. data/dist/es/ember-metal/lib/each_proxy.js +0 -106
  292. data/dist/es/ember-metal/lib/each_proxy_events.js +0 -13
  293. data/dist/es/ember-metal/lib/events.js +0 -174
  294. data/dist/es/ember-metal/lib/expand_properties.js +0 -64
  295. data/dist/es/ember-metal/lib/get_properties.js +0 -45
  296. data/dist/es/ember-metal/lib/injected_property.js +0 -53
  297. data/dist/es/ember-metal/lib/is_blank.js +0 -34
  298. data/dist/es/ember-metal/lib/is_empty.js +0 -63
  299. data/dist/es/ember-metal/lib/is_none.js +0 -27
  300. data/dist/es/ember-metal/lib/is_present.js +0 -38
  301. data/dist/es/ember-metal/lib/libraries.js +0 -80
  302. data/dist/es/ember-metal/lib/mixin.js +0 -646
  303. data/dist/es/ember-metal/lib/namespace_search.js +0 -166
  304. data/dist/es/ember-metal/lib/observer.js +0 -34
  305. data/dist/es/ember-metal/lib/observer_set.js +0 -48
  306. data/dist/es/ember-metal/lib/path_cache.js +0 -5
  307. data/dist/es/ember-metal/lib/properties.js +0 -192
  308. data/dist/es/ember-metal/lib/property_events.js +0 -198
  309. data/dist/es/ember-metal/lib/property_get.js +0 -160
  310. data/dist/es/ember-metal/lib/property_set.js +0 -157
  311. data/dist/es/ember-metal/lib/set_properties.js +0 -43
  312. data/dist/es/ember-metal/lib/tags.js +0 -81
  313. data/dist/es/ember-metal/lib/tracked.js +0 -201
  314. data/dist/es/ember-metal/lib/transaction.js +0 -137
  315. data/dist/es/ember-metal/lib/watch_key.js +0 -113
  316. data/dist/es/ember-metal/lib/watch_path.js +0 -24
  317. data/dist/es/ember-metal/lib/watching.js +0 -54
  318. data/dist/es/ember-metal/tests/accessors/get_path_test.js +0 -82
  319. data/dist/es/ember-metal/tests/accessors/get_properties_test.js +0 -36
  320. data/dist/es/ember-metal/tests/accessors/get_test.js +0 -335
  321. data/dist/es/ember-metal/tests/accessors/mandatory_setters_test.js +0 -470
  322. data/dist/es/ember-metal/tests/accessors/set_path_test.js +0 -97
  323. data/dist/es/ember-metal/tests/accessors/set_test.js +0 -128
  324. data/dist/es/ember-metal/tests/alias_test.js +0 -167
  325. data/dist/es/ember-metal/tests/chains_test.js +0 -210
  326. data/dist/es/ember-metal/tests/computed_test.js +0 -1040
  327. data/dist/es/ember-metal/tests/descriptor_test.js +0 -368
  328. data/dist/es/ember-metal/tests/events_test.js +0 -210
  329. data/dist/es/ember-metal/tests/expand_properties_test.js +0 -119
  330. data/dist/es/ember-metal/tests/injected_property_test.js +0 -76
  331. data/dist/es/ember-metal/tests/is_blank_test.js +0 -29
  332. data/dist/es/ember-metal/tests/is_empty_test.js +0 -55
  333. data/dist/es/ember-metal/tests/is_none_test.js +0 -23
  334. data/dist/es/ember-metal/tests/is_present_test.js +0 -30
  335. data/dist/es/ember-metal/tests/libraries_test.js +0 -99
  336. data/dist/es/ember-metal/tests/main_test.js +0 -31
  337. data/dist/es/ember-metal/tests/mixin/alias_method_test.js +0 -91
  338. data/dist/es/ember-metal/tests/mixin/apply_test.js +0 -40
  339. data/dist/es/ember-metal/tests/mixin/computed_test.js +0 -166
  340. data/dist/es/ember-metal/tests/mixin/concatenated_properties_test.js +0 -117
  341. data/dist/es/ember-metal/tests/mixin/detect_test.js +0 -40
  342. data/dist/es/ember-metal/tests/mixin/introspection_test.js +0 -75
  343. data/dist/es/ember-metal/tests/mixin/merged_properties_test.js +0 -200
  344. data/dist/es/ember-metal/tests/mixin/method_test.js +0 -252
  345. data/dist/es/ember-metal/tests/mixin/observer_test.js +0 -202
  346. data/dist/es/ember-metal/tests/mixin/reopen_test.js +0 -53
  347. data/dist/es/ember-metal/tests/mixin/without_test.js +0 -22
  348. data/dist/es/ember-metal/tests/namespace_search_test.js +0 -16
  349. data/dist/es/ember-metal/tests/observer_test.js +0 -961
  350. data/dist/es/ember-metal/tests/performance_test.js +0 -81
  351. data/dist/es/ember-metal/tests/properties_test.js +0 -120
  352. data/dist/es/ember-metal/tests/property_did_change_hook.js +0 -73
  353. data/dist/es/ember-metal/tests/set_properties_test.js +0 -49
  354. data/dist/es/ember-metal/tests/tracked/computed_test.js +0 -67
  355. data/dist/es/ember-metal/tests/tracked/get_test.js +0 -86
  356. data/dist/es/ember-metal/tests/tracked/set_test.js +0 -44
  357. data/dist/es/ember-metal/tests/tracked/support.js +0 -37
  358. data/dist/es/ember-metal/tests/tracked/validation_test.js +0 -233
  359. data/dist/es/ember-metal/tests/watching/is_watching_test.js +0 -97
  360. data/dist/es/ember-metal/tests/watching/unwatch_test.js +0 -109
  361. data/dist/es/ember-metal/tests/watching/watch_test.js +0 -255
  362. data/dist/es/ember-owner/index.js +0 -66
  363. data/dist/es/ember-routing/index.js +0 -21
  364. data/dist/es/ember-routing/lib/ext/controller.js +0 -222
  365. data/dist/es/ember-routing/lib/location/api.js +0 -118
  366. data/dist/es/ember-routing/lib/location/auto_location.js +0 -323
  367. data/dist/es/ember-routing/lib/location/hash_location.js +0 -171
  368. data/dist/es/ember-routing/lib/location/history_location.js +0 -298
  369. data/dist/es/ember-routing/lib/location/none_location.js +0 -122
  370. data/dist/es/ember-routing/lib/location/util.js +0 -114
  371. data/dist/es/ember-routing/lib/services/router.js +0 -243
  372. data/dist/es/ember-routing/lib/services/routing.js +0 -101
  373. data/dist/es/ember-routing/lib/system/cache.js +0 -40
  374. data/dist/es/ember-routing/lib/system/controller_for.js +0 -14
  375. data/dist/es/ember-routing/lib/system/dsl.js +0 -208
  376. data/dist/es/ember-routing/lib/system/generate_controller.js +0 -54
  377. data/dist/es/ember-routing/lib/system/query_params.js +0 -6
  378. data/dist/es/ember-routing/lib/system/route.js +0 -2476
  379. data/dist/es/ember-routing/lib/system/router.js +0 -1607
  380. data/dist/es/ember-routing/lib/system/router_state.js +0 -26
  381. data/dist/es/ember-routing/lib/system/transition.js +0 -153
  382. data/dist/es/ember-routing/lib/utils.js +0 -230
  383. data/dist/es/ember-routing/tests/ext/controller_test.js +0 -85
  384. data/dist/es/ember-routing/tests/location/auto_location_test.js +0 -379
  385. data/dist/es/ember-routing/tests/location/hash_location_test.js +0 -207
  386. data/dist/es/ember-routing/tests/location/history_location_test.js +0 -322
  387. data/dist/es/ember-routing/tests/location/none_location_test.js +0 -88
  388. data/dist/es/ember-routing/tests/location/util_test.js +0 -159
  389. data/dist/es/ember-routing/tests/system/cache_test.js +0 -54
  390. data/dist/es/ember-routing/tests/system/controller_for_test.js +0 -75
  391. data/dist/es/ember-routing/tests/system/dsl_test.js +0 -413
  392. data/dist/es/ember-routing/tests/system/route_test.js +0 -587
  393. data/dist/es/ember-routing/tests/system/router_test.js +0 -287
  394. data/dist/es/ember-routing/tests/utils_test.js +0 -37
  395. data/dist/es/ember-runtime/.gitignore +0 -1
  396. data/dist/es/ember-runtime/README +0 -12
  397. data/dist/es/ember-runtime/index.js +0 -35
  398. data/dist/es/ember-runtime/lib/compare.js +0 -149
  399. data/dist/es/ember-runtime/lib/copy.js +0 -106
  400. data/dist/es/ember-runtime/lib/ext/function.js +0 -154
  401. data/dist/es/ember-runtime/lib/ext/rsvp.js +0 -59
  402. data/dist/es/ember-runtime/lib/is-equal.js +0 -60
  403. data/dist/es/ember-runtime/lib/mixins/-proxy.js +0 -109
  404. data/dist/es/ember-runtime/lib/mixins/action_handler.js +0 -222
  405. data/dist/es/ember-runtime/lib/mixins/array.js +0 -1661
  406. data/dist/es/ember-runtime/lib/mixins/comparable.js +0 -38
  407. data/dist/es/ember-runtime/lib/mixins/container_proxy.js +0 -154
  408. data/dist/es/ember-runtime/lib/mixins/copyable.js +0 -34
  409. data/dist/es/ember-runtime/lib/mixins/enumerable.js +0 -16
  410. data/dist/es/ember-runtime/lib/mixins/evented.js +0 -149
  411. data/dist/es/ember-runtime/lib/mixins/mutable_enumerable.js +0 -18
  412. data/dist/es/ember-runtime/lib/mixins/observable.js +0 -482
  413. data/dist/es/ember-runtime/lib/mixins/promise_proxy.js +0 -224
  414. data/dist/es/ember-runtime/lib/mixins/registry_proxy.js +0 -265
  415. data/dist/es/ember-runtime/lib/mixins/target_action_support.js +0 -172
  416. data/dist/es/ember-runtime/lib/system/array_proxy.js +0 -298
  417. data/dist/es/ember-runtime/lib/system/core_object.js +0 -1037
  418. data/dist/es/ember-runtime/lib/system/namespace.js +0 -69
  419. data/dist/es/ember-runtime/lib/system/object.js +0 -73
  420. data/dist/es/ember-runtime/lib/system/object_proxy.js +0 -81
  421. data/dist/es/ember-runtime/lib/type-of.js +0 -107
  422. data/dist/es/ember-runtime/tests/array/any-test.js +0 -55
  423. data/dist/es/ember-runtime/tests/array/compact-test.js +0 -12
  424. data/dist/es/ember-runtime/tests/array/every-test.js +0 -82
  425. data/dist/es/ember-runtime/tests/array/filter-test.js +0 -123
  426. data/dist/es/ember-runtime/tests/array/find-test.js +0 -86
  427. data/dist/es/ember-runtime/tests/array/firstObject-test.js +0 -27
  428. data/dist/es/ember-runtime/tests/array/forEach-test.js +0 -68
  429. data/dist/es/ember-runtime/tests/array/includes-test.js +0 -46
  430. data/dist/es/ember-runtime/tests/array/indexOf-test.js +0 -27
  431. data/dist/es/ember-runtime/tests/array/invoke-test.js +0 -60
  432. data/dist/es/ember-runtime/tests/array/isAny-test.js +0 -53
  433. data/dist/es/ember-runtime/tests/array/lastIndexOf-test.js +0 -78
  434. data/dist/es/ember-runtime/tests/array/lastObject-test.js +0 -31
  435. data/dist/es/ember-runtime/tests/array/map-test.js +0 -68
  436. data/dist/es/ember-runtime/tests/array/mapBy-test.js +0 -16
  437. data/dist/es/ember-runtime/tests/array/objectAt-test.js +0 -34
  438. data/dist/es/ember-runtime/tests/array/reduce-test.js +0 -24
  439. data/dist/es/ember-runtime/tests/array/reject-test.js +0 -134
  440. data/dist/es/ember-runtime/tests/array/sortBy-test.js +0 -23
  441. data/dist/es/ember-runtime/tests/array/toArray-test.js +0 -11
  442. data/dist/es/ember-runtime/tests/array/uniq-test.js +0 -27
  443. data/dist/es/ember-runtime/tests/array/uniqBy-test.js +0 -33
  444. data/dist/es/ember-runtime/tests/array/without-test.js +0 -39
  445. data/dist/es/ember-runtime/tests/copyable-array/copy-test.js +0 -12
  446. data/dist/es/ember-runtime/tests/core/compare_test.js +0 -89
  447. data/dist/es/ember-runtime/tests/core/copy_test.js +0 -47
  448. data/dist/es/ember-runtime/tests/core/isEqual_test.js +0 -65
  449. data/dist/es/ember-runtime/tests/core/is_array_test.js +0 -59
  450. data/dist/es/ember-runtime/tests/core/is_empty_test.js +0 -15
  451. data/dist/es/ember-runtime/tests/core/type_of_test.js +0 -54
  452. data/dist/es/ember-runtime/tests/ext/function_test.js +0 -121
  453. data/dist/es/ember-runtime/tests/ext/rsvp_test.js +0 -269
  454. data/dist/es/ember-runtime/tests/helpers/array.js +0 -336
  455. data/dist/es/ember-runtime/tests/inject_test.js +0 -51
  456. data/dist/es/ember-runtime/tests/legacy_1x/mixins/observable/chained_test.js +0 -63
  457. data/dist/es/ember-runtime/tests/legacy_1x/mixins/observable/observable_test.js +0 -892
  458. data/dist/es/ember-runtime/tests/legacy_1x/mixins/observable/propertyChanges_test.js +0 -142
  459. data/dist/es/ember-runtime/tests/legacy_1x/system/object/base_test.js +0 -98
  460. data/dist/es/ember-runtime/tests/legacy_1x/system/object/concatenated_test.js +0 -131
  461. data/dist/es/ember-runtime/tests/mixins/array_test.js +0 -400
  462. data/dist/es/ember-runtime/tests/mixins/comparable_test.js +0 -37
  463. data/dist/es/ember-runtime/tests/mixins/container_proxy_test.js +0 -48
  464. data/dist/es/ember-runtime/tests/mixins/enumerable_test.js +0 -17
  465. data/dist/es/ember-runtime/tests/mixins/evented_test.js +0 -23
  466. data/dist/es/ember-runtime/tests/mixins/mutable_enumerable_test.js +0 -17
  467. data/dist/es/ember-runtime/tests/mixins/observable_test.js +0 -137
  468. data/dist/es/ember-runtime/tests/mixins/promise_proxy_test.js +0 -593
  469. data/dist/es/ember-runtime/tests/mixins/target_action_support_test.js +0 -237
  470. data/dist/es/ember-runtime/tests/mutable-array/addObject-test.js +0 -76
  471. data/dist/es/ember-runtime/tests/mutable-array/clear-test.js +0 -64
  472. data/dist/es/ember-runtime/tests/mutable-array/insertAt-test.js +0 -216
  473. data/dist/es/ember-runtime/tests/mutable-array/popObject-test.js +0 -91
  474. data/dist/es/ember-runtime/tests/mutable-array/pushObject-test.js +0 -98
  475. data/dist/es/ember-runtime/tests/mutable-array/pushObjects-test.js +0 -12
  476. data/dist/es/ember-runtime/tests/mutable-array/removeAt-test.js +0 -187
  477. data/dist/es/ember-runtime/tests/mutable-array/removeObject-test.js +0 -77
  478. data/dist/es/ember-runtime/tests/mutable-array/removeObjects-test.js +0 -202
  479. data/dist/es/ember-runtime/tests/mutable-array/replace-test.js +0 -221
  480. data/dist/es/ember-runtime/tests/mutable-array/reverseObjects-test.js +0 -35
  481. data/dist/es/ember-runtime/tests/mutable-array/setObjects-test.js +0 -63
  482. data/dist/es/ember-runtime/tests/mutable-array/shiftObject-test.js +0 -105
  483. data/dist/es/ember-runtime/tests/mutable-array/unshiftObject-test.js +0 -99
  484. data/dist/es/ember-runtime/tests/mutable-array/unshiftObjects-test.js +0 -102
  485. data/dist/es/ember-runtime/tests/system/array_proxy/arranged_content_test.js +0 -275
  486. data/dist/es/ember-runtime/tests/system/array_proxy/array_observer_test.js +0 -51
  487. data/dist/es/ember-runtime/tests/system/array_proxy/content_change_test.js +0 -85
  488. data/dist/es/ember-runtime/tests/system/array_proxy/length_test.js +0 -201
  489. data/dist/es/ember-runtime/tests/system/array_proxy/watching_and_listening_test.js +0 -157
  490. data/dist/es/ember-runtime/tests/system/core_object_test.js +0 -114
  491. data/dist/es/ember-runtime/tests/system/namespace/base_test.js +0 -175
  492. data/dist/es/ember-runtime/tests/system/native_array/a_test.js +0 -16
  493. data/dist/es/ember-runtime/tests/system/native_array/copyable_suite_test.js +0 -19
  494. data/dist/es/ember-runtime/tests/system/native_array/replace_test.js +0 -17
  495. data/dist/es/ember-runtime/tests/system/object/computed_test.js +0 -352
  496. data/dist/es/ember-runtime/tests/system/object/create_test.js +0 -135
  497. data/dist/es/ember-runtime/tests/system/object/destroy_test.js +0 -146
  498. data/dist/es/ember-runtime/tests/system/object/detectInstance_test.js +0 -38
  499. data/dist/es/ember-runtime/tests/system/object/detect_test.js +0 -33
  500. data/dist/es/ember-runtime/tests/system/object/es-compatibility-test.js +0 -469
  501. data/dist/es/ember-runtime/tests/system/object/events_test.js +0 -156
  502. data/dist/es/ember-runtime/tests/system/object/extend_test.js +0 -153
  503. data/dist/es/ember-runtime/tests/system/object/observer_test.js +0 -216
  504. data/dist/es/ember-runtime/tests/system/object/reopenClass_test.js +0 -36
  505. data/dist/es/ember-runtime/tests/system/object/reopen_test.js +0 -48
  506. data/dist/es/ember-runtime/tests/system/object/strict-mode-test.js +0 -31
  507. data/dist/es/ember-runtime/tests/system/object/toString_test.js +0 -125
  508. data/dist/es/ember-runtime/tests/system/object_proxy_test.js +0 -314
  509. data/dist/es/ember-template-compiler/index.js +0 -26
  510. data/dist/es/ember-template-compiler/lib/compat.js +0 -16
  511. data/dist/es/ember-template-compiler/lib/plugins/assert-if-helper-without-arguments.js +0 -38
  512. data/dist/es/ember-template-compiler/lib/plugins/assert-input-helper-without-block.js +0 -20
  513. data/dist/es/ember-template-compiler/lib/plugins/assert-reserved-named-arguments.js +0 -26
  514. data/dist/es/ember-template-compiler/lib/plugins/assert-splattribute-expression.js +0 -27
  515. data/dist/es/ember-template-compiler/lib/plugins/deprecate-render-model.js +0 -38
  516. data/dist/es/ember-template-compiler/lib/plugins/deprecate-render.js +0 -41
  517. data/dist/es/ember-template-compiler/lib/plugins/deprecate-send-action.js +0 -42
  518. data/dist/es/ember-template-compiler/lib/plugins/index.js +0 -50
  519. data/dist/es/ember-template-compiler/lib/plugins/transform-action-syntax.js +0 -52
  520. data/dist/es/ember-template-compiler/lib/plugins/transform-angle-bracket-components.js +0 -10
  521. data/dist/es/ember-template-compiler/lib/plugins/transform-attrs-into-args.js +0 -62
  522. data/dist/es/ember-template-compiler/lib/plugins/transform-dot-component-invocation.js +0 -88
  523. data/dist/es/ember-template-compiler/lib/plugins/transform-each-in-into-each.js +0 -48
  524. data/dist/es/ember-template-compiler/lib/plugins/transform-has-block-syntax.js +0 -46
  525. data/dist/es/ember-template-compiler/lib/plugins/transform-in-element.js +0 -83
  526. data/dist/es/ember-template-compiler/lib/plugins/transform-inline-link-to.js +0 -31
  527. data/dist/es/ember-template-compiler/lib/plugins/transform-input-type-syntax.js +0 -52
  528. data/dist/es/ember-template-compiler/lib/plugins/transform-old-binding-syntax.js +0 -48
  529. data/dist/es/ember-template-compiler/lib/plugins/transform-old-class-binding-syntax.js +0 -102
  530. data/dist/es/ember-template-compiler/lib/plugins/transform-quoted-bindings-into-just-bindings.js +0 -34
  531. data/dist/es/ember-template-compiler/lib/plugins/transform-top-level-components.js +0 -41
  532. data/dist/es/ember-template-compiler/lib/system/bootstrap.js +0 -44
  533. data/dist/es/ember-template-compiler/lib/system/calculate-location-display.js +0 -20
  534. data/dist/es/ember-template-compiler/lib/system/compile-options.js +0 -71
  535. data/dist/es/ember-template-compiler/lib/system/compile.js +0 -28
  536. data/dist/es/ember-template-compiler/lib/system/dasherize-component-name.js +0 -13
  537. data/dist/es/ember-template-compiler/lib/system/initializer.js +0 -22
  538. data/dist/es/ember-template-compiler/lib/system/precompile.js +0 -18
  539. data/dist/es/ember-template-compiler/tests/plugins/assert-if-helper-without-arguments-test.js +0 -51
  540. data/dist/es/ember-template-compiler/tests/plugins/assert-input-helper-without-block-test.js +0 -17
  541. data/dist/es/ember-template-compiler/tests/plugins/assert-reserved-named-arguments-test.js +0 -416
  542. data/dist/es/ember-template-compiler/tests/plugins/assert-splattribute-expression-test.js +0 -57
  543. data/dist/es/ember-template-compiler/tests/plugins/deprecate-render-model-test.js +0 -19
  544. data/dist/es/ember-template-compiler/tests/plugins/deprecate-render-test.js +0 -19
  545. data/dist/es/ember-template-compiler/tests/plugins/deprecate-send-action-test.js +0 -29
  546. data/dist/es/ember-template-compiler/tests/plugins/transform-dot-component-invocation-test.js +0 -27
  547. data/dist/es/ember-template-compiler/tests/plugins/transform-inline-link-to-test.js +0 -15
  548. data/dist/es/ember-template-compiler/tests/plugins/transform-input-type-syntax-test.js +0 -25
  549. data/dist/es/ember-template-compiler/tests/system/bootstrap-test.js +0 -155
  550. data/dist/es/ember-template-compiler/tests/system/compile_options_test.js +0 -115
  551. data/dist/es/ember-template-compiler/tests/system/dasherize-component-name-test.js +0 -19
  552. data/dist/es/ember-testing/index.js +0 -10
  553. data/dist/es/ember-testing/lib/adapters/adapter.js +0 -58
  554. data/dist/es/ember-testing/lib/adapters/qunit.js +0 -47
  555. data/dist/es/ember-testing/lib/events.js +0 -136
  556. data/dist/es/ember-testing/lib/ext/application.js +0 -191
  557. data/dist/es/ember-testing/lib/ext/rsvp.js +0 -19
  558. data/dist/es/ember-testing/lib/helpers.js +0 -30
  559. data/dist/es/ember-testing/lib/helpers/-is-form-control.js +0 -16
  560. data/dist/es/ember-testing/lib/helpers/and_then.js +0 -3
  561. data/dist/es/ember-testing/lib/helpers/click.js +0 -36
  562. data/dist/es/ember-testing/lib/helpers/current_path.js +0 -27
  563. data/dist/es/ember-testing/lib/helpers/current_route_name.js +0 -25
  564. data/dist/es/ember-testing/lib/helpers/current_url.js +0 -27
  565. data/dist/es/ember-testing/lib/helpers/fill_in.js +0 -46
  566. data/dist/es/ember-testing/lib/helpers/find.js +0 -41
  567. data/dist/es/ember-testing/lib/helpers/find_with_assert.js +0 -34
  568. data/dist/es/ember-testing/lib/helpers/key_event.js +0 -36
  569. data/dist/es/ember-testing/lib/helpers/pause_test.js +0 -65
  570. data/dist/es/ember-testing/lib/helpers/trigger_event.js +0 -62
  571. data/dist/es/ember-testing/lib/helpers/visit.js +0 -42
  572. data/dist/es/ember-testing/lib/helpers/wait.js +0 -72
  573. data/dist/es/ember-testing/lib/initializers.js +0 -17
  574. data/dist/es/ember-testing/lib/setup_for_testing.js +0 -44
  575. data/dist/es/ember-testing/lib/support.js +0 -62
  576. data/dist/es/ember-testing/lib/test.js +0 -70
  577. data/dist/es/ember-testing/lib/test/adapter.js +0 -33
  578. data/dist/es/ember-testing/lib/test/helpers.js +0 -125
  579. data/dist/es/ember-testing/lib/test/on_inject_helpers.js +0 -38
  580. data/dist/es/ember-testing/lib/test/pending_requests.js +0 -24
  581. data/dist/es/ember-testing/lib/test/promise.js +0 -79
  582. data/dist/es/ember-testing/lib/test/run.js +0 -9
  583. data/dist/es/ember-testing/lib/test/waiters.js +0 -117
  584. data/dist/es/ember-testing/tests/acceptance_test.js +0 -478
  585. data/dist/es/ember-testing/tests/adapters/adapter_test.js +0 -31
  586. data/dist/es/ember-testing/tests/adapters/qunit_test.js +0 -50
  587. data/dist/es/ember-testing/tests/adapters_test.js +0 -405
  588. data/dist/es/ember-testing/tests/ext/rsvp_test.js +0 -124
  589. data/dist/es/ember-testing/tests/helper_registration_test.js +0 -98
  590. data/dist/es/ember-testing/tests/helpers_test.js +0 -1228
  591. data/dist/es/ember-testing/tests/integration_test.js +0 -106
  592. data/dist/es/ember-testing/tests/reexports_test.js +0 -26
  593. data/dist/es/ember-testing/tests/test/waiters-test.js +0 -145
  594. data/dist/es/ember-utils/index.js +0 -28
  595. data/dist/es/ember-utils/lib/cache.js +0 -36
  596. data/dist/es/ember-utils/lib/dictionary.js +0 -11
  597. data/dist/es/ember-utils/lib/guid.js +0 -120
  598. data/dist/es/ember-utils/lib/inspect.js +0 -112
  599. data/dist/es/ember-utils/lib/intern.js +0 -49
  600. data/dist/es/ember-utils/lib/invoke.js +0 -53
  601. data/dist/es/ember-utils/lib/is_proxy.js +0 -14
  602. data/dist/es/ember-utils/lib/lookup-descriptor.js +0 -11
  603. data/dist/es/ember-utils/lib/make-array.js +0 -7
  604. data/dist/es/ember-utils/lib/name.js +0 -9
  605. data/dist/es/ember-utils/lib/proxy-utils.js +0 -1
  606. data/dist/es/ember-utils/lib/spec.js +0 -14
  607. data/dist/es/ember-utils/lib/super.js +0 -83
  608. data/dist/es/ember-utils/lib/symbol-utils.js +0 -8
  609. data/dist/es/ember-utils/lib/symbol.js +0 -15
  610. data/dist/es/ember-utils/lib/to-string.js +0 -35
  611. data/dist/es/ember-utils/lib/weak_set.js +0 -18
  612. data/dist/es/ember-utils/tests/cache_test.js +0 -77
  613. data/dist/es/ember-utils/tests/can_invoke_test.js +0 -46
  614. data/dist/es/ember-utils/tests/checkHasSuper_test.js +0 -17
  615. data/dist/es/ember-utils/tests/generate_guid_test.js +0 -13
  616. data/dist/es/ember-utils/tests/guid_for_test.js +0 -101
  617. data/dist/es/ember-utils/tests/inspect_test.js +0 -146
  618. data/dist/es/ember-utils/tests/is_proxy_test.js +0 -18
  619. data/dist/es/ember-utils/tests/make_array_test.js +0 -41
  620. data/dist/es/ember-utils/tests/to-string-test.js +0 -32
  621. data/dist/es/ember-utils/tests/try_invoke_test.js +0 -48
  622. data/dist/es/ember-views/index.js +0 -28
  623. data/dist/es/ember-views/lib/compat/attrs.js +0 -3
  624. data/dist/es/ember-views/lib/compat/fallback-view-registry.js +0 -3
  625. data/dist/es/ember-views/lib/component_lookup.js +0 -27
  626. data/dist/es/ember-views/lib/mixins/action_support.js +0 -189
  627. data/dist/es/ember-views/lib/mixins/child_views_support.js +0 -27
  628. data/dist/es/ember-views/lib/mixins/class_names_support.js +0 -102
  629. data/dist/es/ember-views/lib/mixins/text_support.js +0 -333
  630. data/dist/es/ember-views/lib/mixins/view_state_support.js +0 -19
  631. data/dist/es/ember-views/lib/mixins/view_support.js +0 -452
  632. data/dist/es/ember-views/lib/system/action_manager.js +0 -14
  633. data/dist/es/ember-views/lib/system/event_dispatcher.js +0 -454
  634. data/dist/es/ember-views/lib/system/jquery.js +0 -29
  635. data/dist/es/ember-views/lib/system/jquery_event_deprecation.js +0 -61
  636. data/dist/es/ember-views/lib/system/lookup_partial.js +0 -55
  637. data/dist/es/ember-views/lib/system/utils.js +0 -201
  638. data/dist/es/ember-views/lib/utils/lookup-component.js +0 -58
  639. data/dist/es/ember-views/lib/views/core_view.js +0 -83
  640. data/dist/es/ember-views/lib/views/states.js +0 -48
  641. data/dist/es/ember-views/lib/views/states/default.js +0 -17
  642. data/dist/es/ember-views/lib/views/states/destroying.js +0 -16
  643. data/dist/es/ember-views/lib/views/states/has_element.js +0 -31
  644. data/dist/es/ember-views/lib/views/states/in_dom.js +0 -28
  645. data/dist/es/ember-views/lib/views/states/pre_render.js +0 -3
  646. data/dist/es/ember/index.js +0 -645
  647. data/dist/es/ember/tests/application_lifecycle_test.js +0 -188
  648. data/dist/es/ember/tests/component_context_test.js +0 -255
  649. data/dist/es/ember/tests/component_registration_test.js +0 -252
  650. data/dist/es/ember/tests/controller_test.js +0 -44
  651. data/dist/es/ember/tests/error_handler_test.js +0 -581
  652. data/dist/es/ember/tests/helpers/helper_registration_test.js +0 -103
  653. data/dist/es/ember/tests/helpers/link_to_test.js +0 -2103
  654. data/dist/es/ember/tests/helpers/link_to_test/link_to_transitioning_classes_test.js +0 -342
  655. data/dist/es/ember/tests/helpers/link_to_test/link_to_with_query_params_test.js +0 -694
  656. data/dist/es/ember/tests/homepage_example_test.js +0 -47
  657. data/dist/es/ember/tests/integration/multiple-app-test.js +0 -101
  658. data/dist/es/ember/tests/production_build_test.js +0 -34
  659. data/dist/es/ember/tests/reexports_test.js +0 -307
  660. data/dist/es/ember/tests/routing/decoupled_basic_test.js +0 -4506
  661. data/dist/es/ember/tests/routing/query_params_test.js +0 -1579
  662. data/dist/es/ember/tests/routing/query_params_test/model_dependent_state_with_query_params_test.js +0 -1117
  663. data/dist/es/ember/tests/routing/query_params_test/overlapping_query_params_test.js +0 -185
  664. data/dist/es/ember/tests/routing/query_params_test/query_param_async_get_handler_test.js +0 -327
  665. data/dist/es/ember/tests/routing/query_params_test/query_params_paramless_link_to_test.js +0 -37
  666. data/dist/es/ember/tests/routing/query_params_test/shared_state_test.js +0 -84
  667. data/dist/es/ember/tests/routing/router_map_test.js +0 -46
  668. data/dist/es/ember/tests/routing/router_service_test/basic_test.js +0 -95
  669. data/dist/es/ember/tests/routing/router_service_test/currenturl_lifecycle_test.js +0 -149
  670. data/dist/es/ember/tests/routing/router_service_test/isActive_test.js +0 -113
  671. data/dist/es/ember/tests/routing/router_service_test/replaceWith_test.js +0 -144
  672. data/dist/es/ember/tests/routing/router_service_test/transitionTo_test.js +0 -370
  673. data/dist/es/ember/tests/routing/router_service_test/urlFor_test.js +0 -307
  674. data/dist/es/ember/tests/routing/substates_test.js +0 -1110
  675. data/dist/es/ember/tests/routing/toplevel_dom_test.js +0 -37
  676. data/dist/es/ember/tests/service_injection_test.js +0 -278
  677. data/dist/es/ember/tests/view_instrumentation_test.js +0 -47
  678. data/dist/es/ember/version.js +0 -1
  679. data/dist/es/handlebars.js +0 -1268
  680. data/dist/es/internal-test-helpers/index.js +0 -31
  681. data/dist/es/internal-test-helpers/lib/.gitkeep +0 -0
  682. data/dist/es/internal-test-helpers/lib/apply-mixins.js +0 -37
  683. data/dist/es/internal-test-helpers/lib/browser-detect.js +0 -4
  684. data/dist/es/internal-test-helpers/lib/build-owner.js +0 -49
  685. data/dist/es/internal-test-helpers/lib/confirm-export.js +0 -45
  686. data/dist/es/internal-test-helpers/lib/ember-dev/assertion.js +0 -87
  687. data/dist/es/internal-test-helpers/lib/ember-dev/containers.js +0 -34
  688. data/dist/es/internal-test-helpers/lib/ember-dev/debug.js +0 -47
  689. data/dist/es/internal-test-helpers/lib/ember-dev/deprecation.js +0 -71
  690. data/dist/es/internal-test-helpers/lib/ember-dev/index.js +0 -19
  691. data/dist/es/internal-test-helpers/lib/ember-dev/method-call-tracker.js +0 -127
  692. data/dist/es/internal-test-helpers/lib/ember-dev/namespaces.js +0 -34
  693. data/dist/es/internal-test-helpers/lib/ember-dev/run-loop.js +0 -28
  694. data/dist/es/internal-test-helpers/lib/ember-dev/setup-qunit.js +0 -26
  695. data/dist/es/internal-test-helpers/lib/ember-dev/utils.js +0 -33
  696. data/dist/es/internal-test-helpers/lib/ember-dev/warning.js +0 -71
  697. data/dist/es/internal-test-helpers/lib/equal-inner-html.js +0 -37
  698. data/dist/es/internal-test-helpers/lib/equal-tokens.js +0 -53
  699. data/dist/es/internal-test-helpers/lib/factory.js +0 -65
  700. data/dist/es/internal-test-helpers/lib/get-all-property-names.js +0 -12
  701. data/dist/es/internal-test-helpers/lib/get-text-of.js +0 -3
  702. data/dist/es/internal-test-helpers/lib/matchers.js +0 -167
  703. data/dist/es/internal-test-helpers/lib/module-for.js +0 -89
  704. data/dist/es/internal-test-helpers/lib/registry-check.js +0 -28
  705. data/dist/es/internal-test-helpers/lib/run.js +0 -11
  706. data/dist/es/internal-test-helpers/lib/strip.js +0 -12
  707. data/dist/es/internal-test-helpers/lib/system/synthetic-events.js +0 -183
  708. data/dist/es/internal-test-helpers/lib/test-cases/abstract-application.js +0 -70
  709. data/dist/es/internal-test-helpers/lib/test-cases/abstract-rendering.js +0 -203
  710. data/dist/es/internal-test-helpers/lib/test-cases/abstract.js +0 -222
  711. data/dist/es/internal-test-helpers/lib/test-cases/application.js +0 -39
  712. data/dist/es/internal-test-helpers/lib/test-cases/autoboot-application.js +0 -34
  713. data/dist/es/internal-test-helpers/lib/test-cases/default-resolver-application.js +0 -43
  714. data/dist/es/internal-test-helpers/lib/test-cases/node-query.js +0 -120
  715. data/dist/es/internal-test-helpers/lib/test-cases/query-param.js +0 -124
  716. data/dist/es/internal-test-helpers/lib/test-cases/rendering.js +0 -14
  717. data/dist/es/internal-test-helpers/lib/test-cases/router.js +0 -26
  718. data/dist/es/internal-test-helpers/lib/test-cases/test-resolver-application.js +0 -40
  719. data/dist/es/internal-test-helpers/lib/test-resolver.js +0 -86
  720. data/dist/es/internal-test-helpers/tests/index-test.js +0 -10
  721. data/dist/es/route-recognizer.js +0 -685
  722. data/dist/es/router.js +0 -2454
  723. data/dist/es/rsvp.js +0 -2394
  724. data/dist/es/simple-html-tokenizer.js +0 -638
  725. data/dist/jquery/jquery.js +0 -10364
  726. data/dist/node/app-boot-test.js +0 -146
  727. data/dist/node/build-info-test.js +0 -177
  728. data/dist/node/component-rendering-test.js +0 -34
  729. data/dist/node/helpers/app-module.js +0 -198
  730. data/dist/node/helpers/assert-html-matches.js +0 -25
  731. data/dist/node/helpers/build-owner.js +0 -28
  732. data/dist/node/helpers/component-module.js +0 -137
  733. data/dist/node/sourcemap-test.js +0 -27
  734. data/dist/node/template-compiler-test.js +0 -45
  735. data/dist/node/visit-test.js +0 -349
  736. data/dist/qunit/qunit.css +0 -436
  737. data/dist/qunit/qunit.js +0 -5188
  738. data/dist/tests/index.html +0 -254
  739. data/ember-source.gemspec +0 -28
  740. data/node_modules/.yarn-integrity +0 -10
  741. data/yarn.lock +0 -4
@@ -1,54 +0,0 @@
1
- import { get } from 'ember-metal';
2
- import { info } from '@ember/debug';
3
- import { DEBUG } from '@glimmer/env';
4
- /**
5
- @module ember
6
- */
7
-
8
- /**
9
- Generates a controller factory
10
-
11
- @for Ember
12
- @method generateControllerFactory
13
- @private
14
- */
15
-
16
- export function generateControllerFactory(owner, controllerName) {
17
- let Factory = owner.factoryFor('controller:basic').class;
18
-
19
- Factory = Factory.extend({
20
- toString() {
21
- return `(generated ${controllerName} controller)`;
22
- },
23
- });
24
-
25
- let fullName = `controller:${controllerName}`;
26
-
27
- owner.register(fullName, Factory);
28
-
29
- return Factory;
30
- }
31
-
32
- /**
33
- Generates and instantiates a controller extending from `controller:basic`
34
- if present, or `Controller` if not.
35
-
36
- @for Ember
37
- @method generateController
38
- @private
39
- @since 1.3.0
40
- */
41
- export default function generateController(owner, controllerName) {
42
- generateControllerFactory(owner, controllerName);
43
-
44
- let fullName = `controller:${controllerName}`;
45
- let instance = owner.lookup(fullName);
46
-
47
- if (DEBUG) {
48
- if (get(instance, 'namespace.LOG_ACTIVE_GENERATION')) {
49
- info(`generated -> ${fullName}`, { fullName });
50
- }
51
- }
52
-
53
- return instance;
54
- }
@@ -1,6 +0,0 @@
1
- export default class QueryParams {
2
- constructor(values = null) {
3
- this.values = values;
4
- this.isQueryParams = true;
5
- }
6
- }
@@ -1,2476 +0,0 @@
1
- import { ROUTER_ROUTER } from '@ember/deprecated-features';
2
- import { getOwner } from 'ember-owner';
3
- import { assign } from '@ember/polyfills';
4
- import { once } from '@ember/runloop';
5
- import { get, set, getProperties, setProperties, computed, isEmpty } from 'ember-metal';
6
- import { assert, deprecate, info, isTesting } from '@ember/debug';
7
- import { DEBUG } from '@glimmer/env';
8
- import { classify } from '@ember/string';
9
- import { typeOf, Object as EmberObject, A as emberA, Evented, ActionHandler } from 'ember-runtime';
10
- import generateController from './generate_controller';
11
- import {
12
- stashParamNames,
13
- normalizeControllerQueryParams,
14
- calculateCacheKey,
15
- prefixRouteNameArg,
16
- } from '../utils';
17
-
18
- function K() {
19
- return this;
20
- }
21
-
22
- export function defaultSerialize(model, params) {
23
- if (params.length < 1 || !model) {
24
- return;
25
- }
26
-
27
- let object = {};
28
- if (params.length === 1) {
29
- let [name] = params;
30
- if (name in model) {
31
- object[name] = get(model, name);
32
- } else if (/_id$/.test(name)) {
33
- object[name] = get(model, 'id');
34
- }
35
- } else {
36
- object = getProperties(model, params);
37
- }
38
-
39
- return object;
40
- }
41
-
42
- export function hasDefaultSerialize(route) {
43
- return route.serialize === defaultSerialize;
44
- }
45
-
46
- /**
47
- @module @ember/routing
48
- */
49
-
50
- /**
51
- The `Route` class is used to define individual routes. Refer to
52
- the [routing guide](https://guides.emberjs.com/release/routing/) for documentation.
53
-
54
- @class Route
55
- @extends EmberObject
56
- @uses ActionHandler
57
- @uses Evented
58
- @since 1.0.0
59
- @public
60
- */
61
- let Route = EmberObject.extend(ActionHandler, Evented, {
62
- /**
63
- Configuration hash for this route's queryParams. The possible
64
- configuration options and their defaults are as follows
65
- (assuming a query param whose controller property is `page`):
66
-
67
- ```javascript
68
- queryParams: {
69
- page: {
70
- // By default, controller query param properties don't
71
- // cause a full transition when they are changed, but
72
- // rather only cause the URL to update. Setting
73
- // `refreshModel` to true will cause an "in-place"
74
- // transition to occur, whereby the model hooks for
75
- // this route (and any child routes) will re-fire, allowing
76
- // you to reload models (e.g., from the server) using the
77
- // updated query param values.
78
- refreshModel: false,
79
-
80
- // By default, changes to controller query param properties
81
- // cause the URL to update via `pushState`, which means an
82
- // item will be added to the browser's history, allowing
83
- // you to use the back button to restore the app to the
84
- // previous state before the query param property was changed.
85
- // Setting `replace` to true will use `replaceState` (or its
86
- // hash location equivalent), which causes no browser history
87
- // item to be added. This options name and default value are
88
- // the same as the `link-to` helper's `replace` option.
89
- replace: false,
90
-
91
- // By default, the query param URL key is the same name as
92
- // the controller property name. Use `as` to specify a
93
- // different URL key.
94
- as: 'page'
95
- }
96
- }
97
- ```
98
-
99
- @property queryParams
100
- @for Route
101
- @type Object
102
- @since 1.6.0
103
- @public
104
- */
105
- queryParams: {},
106
-
107
- router: ROUTER_ROUTER
108
- ? computed('_router', function() {
109
- deprecate(
110
- 'Route#router is an intimate API that has been renamed to Route#_router. However you might want to consider using the router service',
111
- false,
112
- {
113
- id: 'ember-routing.route-router',
114
- until: '3.5.0',
115
- url: 'https://emberjs.com/deprecations/v3.x#toc_ember-routing-route-router',
116
- }
117
- );
118
- return this._router;
119
- })
120
- : undefined,
121
-
122
- /**
123
- The name of the route, dot-delimited.
124
-
125
- For example, a route found at `app/routes/posts/post.js` will have
126
- a `routeName` of `posts.post`.
127
-
128
- @property routeName
129
- @for Route
130
- @type String
131
- @since 1.0.0
132
- @public
133
- */
134
-
135
- /**
136
- The name of the route, dot-delimited, including the engine prefix
137
- if applicable.
138
-
139
- For example, a route found at `addon/routes/posts/post.js` within an
140
- engine named `admin` will have a `fullRouteName` of `admin.posts.post`.
141
-
142
- @property fullRouteName
143
- @for Route
144
- @type String
145
- @since 2.10.0
146
- @public
147
- */
148
-
149
- /**
150
- Sets the name for this route, including a fully resolved name for routes
151
- inside engines.
152
-
153
- @private
154
- @method _setRouteName
155
- @param {String} name
156
- */
157
- _setRouteName(name) {
158
- this.routeName = name;
159
- this.fullRouteName = getEngineRouteName(getOwner(this), name);
160
- },
161
-
162
- /**
163
- @private
164
-
165
- @property _qp
166
- */
167
- _qp: computed(function() {
168
- let combinedQueryParameterConfiguration;
169
-
170
- let controllerName = this.controllerName || this.routeName;
171
- let owner = getOwner(this);
172
- let controller = owner.lookup(`controller:${controllerName}`);
173
- let queryParameterConfiguraton = get(this, 'queryParams');
174
- let hasRouterDefinedQueryParams = Object.keys(queryParameterConfiguraton).length > 0;
175
-
176
- if (controller) {
177
- // the developer has authored a controller class in their application for
178
- // this route find its query params and normalize their object shape them
179
- // merge in the query params for the route. As a mergedProperty,
180
- // Route#queryParams is always at least `{}`
181
-
182
- let controllerDefinedQueryParameterConfiguration = get(controller, 'queryParams') || {};
183
- let normalizedControllerQueryParameterConfiguration = normalizeControllerQueryParams(
184
- controllerDefinedQueryParameterConfiguration
185
- );
186
- combinedQueryParameterConfiguration = mergeEachQueryParams(
187
- normalizedControllerQueryParameterConfiguration,
188
- queryParameterConfiguraton
189
- );
190
- } else if (hasRouterDefinedQueryParams) {
191
- // the developer has not defined a controller but *has* supplied route query params.
192
- // Generate a class for them so we can later insert default values
193
- controller = generateController(owner, controllerName);
194
- combinedQueryParameterConfiguration = queryParameterConfiguraton;
195
- }
196
-
197
- let qps = [];
198
- let map = {};
199
- let propertyNames = [];
200
-
201
- for (let propName in combinedQueryParameterConfiguration) {
202
- if (!combinedQueryParameterConfiguration.hasOwnProperty(propName)) {
203
- continue;
204
- }
205
-
206
- // to support the dubious feature of using unknownProperty
207
- // on queryParams configuration
208
- if (propName === 'unknownProperty' || propName === '_super') {
209
- // possible todo: issue deprecation warning?
210
- continue;
211
- }
212
-
213
- let desc = combinedQueryParameterConfiguration[propName];
214
- let scope = desc.scope || 'model';
215
- let parts;
216
-
217
- if (scope === 'controller') {
218
- parts = [];
219
- }
220
-
221
- let urlKey = desc.as || this.serializeQueryParamKey(propName);
222
- let defaultValue = get(controller, propName);
223
-
224
- if (Array.isArray(defaultValue)) {
225
- defaultValue = emberA(defaultValue.slice());
226
- }
227
-
228
- let type = desc.type || typeOf(defaultValue);
229
-
230
- let defaultValueSerialized = this.serializeQueryParam(defaultValue, urlKey, type);
231
- let scopedPropertyName = `${controllerName}:${propName}`;
232
- let qp = {
233
- undecoratedDefaultValue: get(controller, propName),
234
- defaultValue,
235
- serializedDefaultValue: defaultValueSerialized,
236
- serializedValue: defaultValueSerialized,
237
-
238
- type,
239
- urlKey,
240
- prop: propName,
241
- scopedPropertyName,
242
- controllerName,
243
- route: this,
244
- parts, // provided later when stashNames is called if 'model' scope
245
- values: null, // provided later when setup is called. no idea why.
246
- scope,
247
- };
248
-
249
- map[propName] = map[urlKey] = map[scopedPropertyName] = qp;
250
- qps.push(qp);
251
- propertyNames.push(propName);
252
- }
253
-
254
- return {
255
- qps,
256
- map,
257
- propertyNames,
258
- states: {
259
- /*
260
- Called when a query parameter changes in the URL, this route cares
261
- about that query parameter, but the route is not currently
262
- in the active route hierarchy.
263
- */
264
- inactive: (prop, value) => {
265
- let qp = map[prop];
266
- this._qpChanged(prop, value, qp);
267
- },
268
- /*
269
- Called when a query parameter changes in the URL, this route cares
270
- about that query parameter, and the route is currently
271
- in the active route hierarchy.
272
- */
273
- active: (prop, value) => {
274
- let qp = map[prop];
275
- this._qpChanged(prop, value, qp);
276
- return this._activeQPChanged(qp, value);
277
- },
278
- /*
279
- Called when a value of a query parameter this route handles changes in a controller
280
- and the route is currently in the active route hierarchy.
281
- */
282
- allowOverrides: (prop, value) => {
283
- let qp = map[prop];
284
- this._qpChanged(prop, value, qp);
285
- return this._updatingQPChanged(qp);
286
- },
287
- },
288
- };
289
- }),
290
-
291
- /**
292
- @private
293
-
294
- @property _names
295
- */
296
- _names: null,
297
-
298
- /**
299
- @private
300
-
301
- @method _stashNames
302
- */
303
- _stashNames(handlerInfo, dynamicParent) {
304
- if (this._names) {
305
- return;
306
- }
307
- let names = (this._names = handlerInfo._names);
308
-
309
- if (!names.length) {
310
- handlerInfo = dynamicParent;
311
- names = (handlerInfo && handlerInfo._names) || [];
312
- }
313
-
314
- let qps = get(this, '_qp.qps');
315
-
316
- let namePaths = new Array(names.length);
317
- for (let a = 0; a < names.length; ++a) {
318
- namePaths[a] = `${handlerInfo.name}.${names[a]}`;
319
- }
320
-
321
- for (let i = 0; i < qps.length; ++i) {
322
- let qp = qps[i];
323
- if (qp.scope === 'model') {
324
- qp.parts = namePaths;
325
- }
326
- }
327
- },
328
-
329
- /**
330
- @private
331
-
332
- @property _activeQPChanged
333
- */
334
- _activeQPChanged(qp, value) {
335
- this._router._activeQPChanged(qp.scopedPropertyName, value);
336
- },
337
-
338
- /**
339
- @private
340
- @method _updatingQPChanged
341
- */
342
- _updatingQPChanged(qp) {
343
- this._router._updatingQPChanged(qp.urlKey);
344
- },
345
-
346
- mergedProperties: ['queryParams'],
347
-
348
- /**
349
- Returns a hash containing the parameters of an ancestor route.
350
-
351
- Example
352
-
353
- ```app/router.js
354
- // ...
355
-
356
- Router.map(function() {
357
- this.route('member', { path: ':name' }, function() {
358
- this.route('interest', { path: ':interest' });
359
- });
360
- });
361
- ```
362
-
363
- ```app/routes/member.js
364
- import Route from '@ember/routing/route';
365
-
366
- export default Route.extend({
367
- queryParams: {
368
- memberQp: { refreshModel: true }
369
- }
370
- });
371
- ```
372
-
373
- ```app/routes/member/interest.js
374
- import Route from '@ember/routing/route';
375
-
376
- export default Route.extend({
377
- queryParams: {
378
- interestQp: { refreshModel: true }
379
- },
380
-
381
- model() {
382
- return this.paramsFor('member');
383
- }
384
- });
385
- ```
386
-
387
- If we visit `/turing/maths?memberQp=member&interestQp=interest` the model for
388
- the `member.interest` route is a hash with:
389
-
390
- * `name`: `turing`
391
- * `memberQp`: `member`
392
-
393
- @method paramsFor
394
- @param {String} name
395
- @return {Object} hash containing the parameters of the route `name`
396
- @since 1.4.0
397
- @public
398
- */
399
- paramsFor(name) {
400
- let route = getOwner(this).lookup(`route:${name}`);
401
-
402
- if (!route) {
403
- return {};
404
- }
405
-
406
- let transition = this._router._routerMicrolib.activeTransition;
407
- let state = transition ? transition.state : this._router._routerMicrolib.state;
408
-
409
- let fullName = route.fullRouteName;
410
- let params = assign({}, state.params[fullName]);
411
- let queryParams = getQueryParamsFor(route, state);
412
-
413
- return Object.keys(queryParams).reduce((params, key) => {
414
- assert(
415
- `The route '${
416
- this.routeName
417
- }' has both a dynamic segment and query param with name '${key}'. Please rename one to avoid collisions.`,
418
- !params[key]
419
- );
420
- params[key] = queryParams[key];
421
- return params;
422
- }, params);
423
- },
424
-
425
- /**
426
- Serializes the query parameter key
427
-
428
- @method serializeQueryParamKey
429
- @param {String} controllerPropertyName
430
- @private
431
- */
432
- serializeQueryParamKey(controllerPropertyName) {
433
- return controllerPropertyName;
434
- },
435
-
436
- /**
437
- Serializes value of the query parameter based on defaultValueType
438
-
439
- @method serializeQueryParam
440
- @param {Object} value
441
- @param {String} urlKey
442
- @param {String} defaultValueType
443
- @private
444
- */
445
- serializeQueryParam(value, urlKey, defaultValueType) {
446
- // urlKey isn't used here, but anyone overriding
447
- // can use it to provide serialization specific
448
- // to a certain query param.
449
- return this._router._serializeQueryParam(value, defaultValueType);
450
- },
451
-
452
- /**
453
- Deserializes value of the query parameter based on defaultValueType
454
-
455
- @method deserializeQueryParam
456
- @param {Object} value
457
- @param {String} urlKey
458
- @param {String} defaultValueType
459
- @private
460
- */
461
- deserializeQueryParam(value, urlKey, defaultValueType) {
462
- // urlKey isn't used here, but anyone overriding
463
- // can use it to provide deserialization specific
464
- // to a certain query param.
465
- return this._router._deserializeQueryParam(value, defaultValueType);
466
- },
467
-
468
- /**
469
- @private
470
-
471
- @property _optionsForQueryParam
472
- */
473
- _optionsForQueryParam(qp) {
474
- return get(this, `queryParams.${qp.urlKey}`) || get(this, `queryParams.${qp.prop}`) || {};
475
- },
476
-
477
- /**
478
- A hook you can use to reset controller values either when the model
479
- changes or the route is exiting.
480
-
481
- ```app/routes/articles.js
482
- import Route from '@ember/routing/route';
483
-
484
- export default Route.extend({
485
- resetController(controller, isExiting, transition) {
486
- if (isExiting && transition.targetName !== 'error') {
487
- controller.set('page', 1);
488
- }
489
- }
490
- });
491
- ```
492
-
493
- @method resetController
494
- @param {Controller} controller instance
495
- @param {Boolean} isExiting
496
- @param {Object} transition
497
- @since 1.7.0
498
- @public
499
- */
500
- resetController: K,
501
-
502
- /**
503
- @private
504
-
505
- @method exit
506
- */
507
- exit() {
508
- this.deactivate();
509
- this.trigger('deactivate');
510
- this.teardownViews();
511
- },
512
-
513
- /**
514
- @private
515
-
516
- @method _reset
517
- @since 1.7.0
518
- */
519
- _reset(isExiting, transition) {
520
- let controller = this.controller;
521
- controller._qpDelegate = get(this, '_qp.states.inactive');
522
-
523
- this.resetController(controller, isExiting, transition);
524
- },
525
-
526
- /**
527
- @private
528
-
529
- @method enter
530
- */
531
- enter() {
532
- this.connections = [];
533
- this.activate();
534
- this.trigger('activate');
535
- },
536
-
537
- /**
538
- The name of the template to use by default when rendering this routes
539
- template.
540
-
541
- ```app/routes/posts/list.js
542
- import Route from '@ember/routing/route';
543
-
544
- export default Route.extend({
545
- templateName: 'posts/list'
546
- });
547
- ```
548
-
549
- ```app/routes/posts/index.js
550
- import PostsList from '../posts/list';
551
-
552
- export default PostsList.extend();
553
- ```
554
-
555
- ```app/routes/posts/archived.js
556
- import PostsList from '../posts/list';
557
-
558
- export default PostsList.extend();
559
- ```
560
-
561
- @property templateName
562
- @type String
563
- @default null
564
- @since 1.4.0
565
- @public
566
- */
567
- templateName: null,
568
-
569
- /**
570
- The name of the controller to associate with this route.
571
-
572
- By default, Ember will lookup a route's controller that matches the name
573
- of the route (i.e. `posts.new`). However,
574
- if you would like to define a specific controller to use, you can do so
575
- using this property.
576
-
577
- This is useful in many ways, as the controller specified will be:
578
-
579
- * passed to the `setupController` method.
580
- * used as the controller for the template being rendered by the route.
581
- * returned from a call to `controllerFor` for the route.
582
-
583
- @property controllerName
584
- @type String
585
- @default null
586
- @since 1.4.0
587
- @public
588
- */
589
- controllerName: null,
590
-
591
- /**
592
- The `willTransition` action is fired at the beginning of any
593
- attempted transition with a `Transition` object as the sole
594
- argument. This action can be used for aborting, redirecting,
595
- or decorating the transition from the currently active routes.
596
-
597
- A good example is preventing navigation when a form is
598
- half-filled out:
599
-
600
- ```app/routes/contact-form.js
601
- import Route from '@ember/routing/route';
602
-
603
- export default Route.extend({
604
- actions: {
605
- willTransition(transition) {
606
- if (this.controller.get('userHasEnteredData')) {
607
- this.controller.displayNavigationConfirm();
608
- transition.abort();
609
- }
610
- }
611
- }
612
- });
613
- ```
614
-
615
- You can also redirect elsewhere by calling
616
- `this.transitionTo('elsewhere')` from within `willTransition`.
617
- Note that `willTransition` will not be fired for the
618
- redirecting `transitionTo`, since `willTransition` doesn't
619
- fire when there is already a transition underway. If you want
620
- subsequent `willTransition` actions to fire for the redirecting
621
- transition, you must first explicitly call
622
- `transition.abort()`.
623
-
624
- To allow the `willTransition` event to continue bubbling to the parent
625
- route, use `return true;`. When the `willTransition` method has a
626
- return value of `true` then the parent route's `willTransition` method
627
- will be fired, enabling "bubbling" behavior for the event.
628
-
629
- @event willTransition
630
- @param {Transition} transition
631
- @since 1.0.0
632
- @public
633
- */
634
-
635
- /**
636
- The `didTransition` action is fired after a transition has
637
- successfully been completed. This occurs after the normal model
638
- hooks (`beforeModel`, `model`, `afterModel`, `setupController`)
639
- have resolved. The `didTransition` action has no arguments,
640
- however, it can be useful for tracking page views or resetting
641
- state on the controller.
642
-
643
- ```app/routes/login.js
644
- import Route from '@ember/routing/route';
645
-
646
- export default Route.extend({
647
- actions: {
648
- didTransition() {
649
- this.controller.get('errors.base').clear();
650
- return true; // Bubble the didTransition event
651
- }
652
- }
653
- });
654
- ```
655
-
656
- @event didTransition
657
- @since 1.2.0
658
- @public
659
- */
660
-
661
- /**
662
- The `loading` action is fired on the route when a route's `model`
663
- hook returns a promise that is not already resolved. The current
664
- `Transition` object is the first parameter and the route that
665
- triggered the loading event is the second parameter.
666
-
667
- ```app/routes/application.js
668
- import Route from '@ember/routing/route';
669
-
670
- export default Route.extend({
671
- actions: {
672
- loading(transition, route) {
673
- let controller = this.controllerFor('foo');
674
- controller.set('currentlyLoading', true);
675
-
676
- transition.finally(function() {
677
- controller.set('currentlyLoading', false);
678
- });
679
- }
680
- }
681
- });
682
- ```
683
-
684
- @event loading
685
- @param {Transition} transition
686
- @param {Route} route The route that triggered the loading event
687
- @since 1.2.0
688
- @public
689
- */
690
-
691
- /**
692
- When attempting to transition into a route, any of the hooks
693
- may return a promise that rejects, at which point an `error`
694
- action will be fired on the partially-entered routes, allowing
695
- for per-route error handling logic, or shared error handling
696
- logic defined on a parent route.
697
-
698
- Here is an example of an error handler that will be invoked
699
- for rejected promises from the various hooks on the route,
700
- as well as any unhandled errors from child routes:
701
-
702
- ```app/routes/admin.js
703
- import { reject } from 'rsvp';
704
- import Route from '@ember/routing/route';
705
-
706
- export default Route.extend({
707
- beforeModel() {
708
- return reject('bad things!');
709
- },
710
-
711
- actions: {
712
- error(error, transition) {
713
- // Assuming we got here due to the error in `beforeModel`,
714
- // we can expect that error === "bad things!",
715
- // but a promise model rejecting would also
716
- // call this hook, as would any errors encountered
717
- // in `afterModel`.
718
-
719
- // The `error` hook is also provided the failed
720
- // `transition`, which can be stored and later
721
- // `.retry()`d if desired.
722
-
723
- this.transitionTo('login');
724
- }
725
- }
726
- });
727
- ```
728
-
729
- `error` actions that bubble up all the way to `ApplicationRoute`
730
- will fire a default error handler that logs the error. You can
731
- specify your own global default error handler by overriding the
732
- `error` handler on `ApplicationRoute`:
733
-
734
- ```app/routes/application.js
735
- import Route from '@ember/routing/route';
736
-
737
- export default Route.extend({
738
- actions: {
739
- error(error, transition) {
740
- this.controllerFor('banner').displayError(error.message);
741
- }
742
- }
743
- });
744
- ```
745
- @event error
746
- @param {Error} error
747
- @param {Transition} transition
748
- @since 1.0.0
749
- @public
750
- */
751
-
752
- /**
753
- This event is triggered when the router enters the route. It is
754
- not executed when the model for the route changes.
755
-
756
- ```app/routes/application.js
757
- import { on } from '@ember/object/evented';
758
- import Route from '@ember/routing/route';
759
-
760
- export default Route.extend({
761
- collectAnalytics: on('activate', function(){
762
- collectAnalytics();
763
- })
764
- });
765
- ```
766
-
767
- @event activate
768
- @since 1.9.0
769
- @public
770
- */
771
-
772
- /**
773
- This event is triggered when the router completely exits this
774
- route. It is not executed when the model for the route changes.
775
-
776
- ```app/routes/index.js
777
- import { on } from '@ember/object/evented';
778
- import Route from '@ember/routing/route';
779
-
780
- export default Route.extend({
781
- trackPageLeaveAnalytics: on('deactivate', function(){
782
- trackPageLeaveAnalytics();
783
- })
784
- });
785
- ```
786
-
787
- @event deactivate
788
- @since 1.9.0
789
- @public
790
- */
791
-
792
- /**
793
- The controller associated with this route.
794
-
795
- Example
796
-
797
- ```app/routes/form.js
798
- import Route from '@ember/routing/route';
799
-
800
- export default Route.extend({
801
- actions: {
802
- willTransition(transition) {
803
- if (this.controller.get('userHasEnteredData') &&
804
- !confirm('Are you sure you want to abandon progress?')) {
805
- transition.abort();
806
- } else {
807
- // Bubble the `willTransition` action so that
808
- // parent routes can decide whether or not to abort.
809
- return true;
810
- }
811
- }
812
- }
813
- });
814
- ```
815
-
816
- @property controller
817
- @type Controller
818
- @since 1.6.0
819
- @public
820
- */
821
-
822
- actions: {
823
- /**
824
- This action is called when one or more query params have changed. Bubbles.
825
-
826
- @method queryParamsDidChange
827
- @param changed {Object} Keys are names of query params that have changed.
828
- @param totalPresent {Object} Keys are names of query params that are currently set.
829
- @param removed {Object} Keys are names of query params that have been removed.
830
- @returns {boolean}
831
- @private
832
- */
833
- queryParamsDidChange(changed, totalPresent, removed) {
834
- let qpMap = get(this, '_qp').map;
835
-
836
- let totalChanged = Object.keys(changed).concat(Object.keys(removed));
837
- for (let i = 0; i < totalChanged.length; ++i) {
838
- let qp = qpMap[totalChanged[i]];
839
- if (
840
- qp &&
841
- get(this._optionsForQueryParam(qp), 'refreshModel') &&
842
- this._router.currentState
843
- ) {
844
- this.refresh();
845
- break;
846
- }
847
- }
848
-
849
- return true;
850
- },
851
-
852
- finalizeQueryParamChange(params, finalParams, transition) {
853
- if (this.fullRouteName !== 'application') {
854
- return true;
855
- }
856
-
857
- // Transition object is absent for intermediate transitions.
858
- if (!transition) {
859
- return;
860
- }
861
-
862
- let handlerInfos = transition.state.handlerInfos;
863
- let router = this._router;
864
- let qpMeta = router._queryParamsFor(handlerInfos);
865
- let changes = router._qpUpdates;
866
- let replaceUrl;
867
-
868
- stashParamNames(router, handlerInfos);
869
-
870
- for (let i = 0; i < qpMeta.qps.length; ++i) {
871
- let qp = qpMeta.qps[i];
872
- let route = qp.route;
873
- let controller = route.controller;
874
- let presentKey = qp.urlKey in params && qp.urlKey;
875
-
876
- // Do a reverse lookup to see if the changed query
877
- // param URL key corresponds to a QP property on
878
- // this controller.
879
- let value, svalue;
880
- if (changes && qp.urlKey in changes) {
881
- // Value updated in/before setupController
882
- value = get(controller, qp.prop);
883
- svalue = route.serializeQueryParam(value, qp.urlKey, qp.type);
884
- } else {
885
- if (presentKey) {
886
- svalue = params[presentKey];
887
-
888
- if (svalue !== undefined) {
889
- value = route.deserializeQueryParam(svalue, qp.urlKey, qp.type);
890
- }
891
- } else {
892
- // No QP provided; use default value.
893
- svalue = qp.serializedDefaultValue;
894
- value = copyDefaultValue(qp.defaultValue);
895
- }
896
- }
897
-
898
- controller._qpDelegate = get(route, '_qp.states.inactive');
899
-
900
- let thisQueryParamChanged = svalue !== qp.serializedValue;
901
- if (thisQueryParamChanged) {
902
- if (transition.queryParamsOnly && replaceUrl !== false) {
903
- let options = route._optionsForQueryParam(qp);
904
- let replaceConfigValue = get(options, 'replace');
905
- if (replaceConfigValue) {
906
- replaceUrl = true;
907
- } else if (replaceConfigValue === false) {
908
- // Explicit pushState wins over any other replaceStates.
909
- replaceUrl = false;
910
- }
911
- }
912
-
913
- set(controller, qp.prop, value);
914
- }
915
-
916
- // Stash current serialized value of controller.
917
- qp.serializedValue = svalue;
918
-
919
- let thisQueryParamHasDefaultValue = qp.serializedDefaultValue === svalue;
920
- if (!thisQueryParamHasDefaultValue || transition._keepDefaultQueryParamValues) {
921
- finalParams.push({
922
- value: svalue,
923
- visible: true,
924
- key: presentKey || qp.urlKey,
925
- });
926
- }
927
- }
928
-
929
- if (replaceUrl) {
930
- transition.method('replace');
931
- }
932
-
933
- qpMeta.qps.forEach(qp => {
934
- let routeQpMeta = get(qp.route, '_qp');
935
- let finalizedController = qp.route.controller;
936
- finalizedController._qpDelegate = get(routeQpMeta, 'states.active');
937
- });
938
-
939
- router._qpUpdates = null;
940
- },
941
- },
942
-
943
- /**
944
- This hook is executed when the router completely exits this route. It is
945
- not executed when the model for the route changes.
946
-
947
- @method deactivate
948
- @since 1.0.0
949
- @public
950
- */
951
- deactivate: K,
952
-
953
- /**
954
- This hook is executed when the router enters the route. It is not executed
955
- when the model for the route changes.
956
-
957
- @method activate
958
- @since 1.0.0
959
- @public
960
- */
961
- activate: K,
962
-
963
- /**
964
- Transition the application into another route. The route may
965
- be either a single route or route path:
966
-
967
- ```javascript
968
- this.transitionTo('blogPosts');
969
- this.transitionTo('blogPosts.recentEntries');
970
- ```
971
-
972
- Optionally supply a model for the route in question. The model
973
- will be serialized into the URL using the `serialize` hook of
974
- the route:
975
-
976
- ```javascript
977
- this.transitionTo('blogPost', aPost);
978
- ```
979
-
980
- If a literal is passed (such as a number or a string), it will
981
- be treated as an identifier instead. In this case, the `model`
982
- hook of the route will be triggered:
983
-
984
- ```javascript
985
- this.transitionTo('blogPost', 1);
986
- ```
987
-
988
- Multiple models will be applied last to first recursively up the
989
- route tree.
990
-
991
- ```app/routes.js
992
- // ...
993
-
994
- Router.map(function() {
995
- this.route('blogPost', { path:':blogPostId' }, function() {
996
- this.route('blogComment', { path: ':blogCommentId' });
997
- });
998
- });
999
-
1000
- export default Router;
1001
- ```
1002
-
1003
- ```javascript
1004
- this.transitionTo('blogComment', aPost, aComment);
1005
- this.transitionTo('blogComment', 1, 13);
1006
- ```
1007
-
1008
- It is also possible to pass a URL (a string that starts with a
1009
- `/`). This is intended for testing and debugging purposes and
1010
- should rarely be used in production code.
1011
-
1012
- ```javascript
1013
- this.transitionTo('/');
1014
- this.transitionTo('/blog/post/1/comment/13');
1015
- this.transitionTo('/blog/posts?sort=title');
1016
- ```
1017
-
1018
- An options hash with a `queryParams` property may be provided as
1019
- the final argument to add query parameters to the destination URL.
1020
-
1021
- ```javascript
1022
- this.transitionTo('blogPost', 1, {
1023
- queryParams: { showComments: 'true' }
1024
- });
1025
-
1026
- // if you just want to transition the query parameters without changing the route
1027
- this.transitionTo({ queryParams: { sort: 'date' } });
1028
- ```
1029
-
1030
- See also [replaceWith](#method_replaceWith).
1031
-
1032
- Simple Transition Example
1033
-
1034
- ```app/routes.js
1035
- // ...
1036
-
1037
- Router.map(function() {
1038
- this.route('index');
1039
- this.route('secret');
1040
- this.route('fourOhFour', { path: '*:' });
1041
- });
1042
-
1043
- export default Router;
1044
- ```
1045
-
1046
- ```app/routes/index.js
1047
- import Route from '@ember/routing/route';
1048
-
1049
- export Route.extend({
1050
- actions: {
1051
- moveToSecret(context) {
1052
- if (authorized()) {
1053
- this.transitionTo('secret', context);
1054
- } else {
1055
- this.transitionTo('fourOhFour');
1056
- }
1057
- }
1058
- }
1059
- });
1060
- ```
1061
-
1062
- Transition to a nested route
1063
-
1064
- ```app/router.js
1065
- // ...
1066
-
1067
- Router.map(function() {
1068
- this.route('articles', { path: '/articles' }, function() {
1069
- this.route('new');
1070
- });
1071
- });
1072
-
1073
- export default Router;
1074
- ```
1075
-
1076
- ```app/routes/index.js
1077
- import Route from '@ember/routing/route';
1078
-
1079
- export default Route.extend({
1080
- actions: {
1081
- transitionToNewArticle() {
1082
- this.transitionTo('articles.new');
1083
- }
1084
- }
1085
- });
1086
- ```
1087
-
1088
- Multiple Models Example
1089
-
1090
- ```app/router.js
1091
- // ...
1092
-
1093
- Router.map(function() {
1094
- this.route('index');
1095
-
1096
- this.route('breakfast', { path: ':breakfastId' }, function() {
1097
- this.route('cereal', { path: ':cerealId' });
1098
- });
1099
- });
1100
-
1101
- export default Router;
1102
- ```
1103
-
1104
- ```app/routes/index.js
1105
- import Route from '@ember/routing/route';
1106
-
1107
- export default Route.extend({
1108
- actions: {
1109
- moveToChocolateCereal() {
1110
- let cereal = { cerealId: 'ChocolateYumminess' };
1111
- let breakfast = { breakfastId: 'CerealAndMilk' };
1112
-
1113
- this.transitionTo('breakfast.cereal', breakfast, cereal);
1114
- }
1115
- }
1116
- });
1117
- ```
1118
-
1119
- Nested Route with Query String Example
1120
-
1121
- ```app/routes.js
1122
- // ...
1123
-
1124
- Router.map(function() {
1125
- this.route('fruits', function() {
1126
- this.route('apples');
1127
- });
1128
- });
1129
-
1130
- export default Router;
1131
- ```
1132
-
1133
- ```app/routes/index.js
1134
- import Route from '@ember/routing/route';
1135
-
1136
- export default Route.extend({
1137
- actions: {
1138
- transitionToApples() {
1139
- this.transitionTo('fruits.apples', { queryParams: { color: 'red' } });
1140
- }
1141
- }
1142
- });
1143
- ```
1144
-
1145
- @method transitionTo
1146
- @param {String} name the name of the route or a URL
1147
- @param {...Object} models the model(s) or identifier(s) to be used while
1148
- transitioning to the route.
1149
- @param {Object} [options] optional hash with a queryParams property
1150
- containing a mapping of query parameters
1151
- @return {Transition} the transition object associated with this
1152
- attempted transition
1153
- @since 1.0.0
1154
- @public
1155
- */
1156
- transitionTo(/* name, context */) {
1157
- // eslint-disable-line no-unused-vars
1158
- return this._router.transitionTo(...prefixRouteNameArg(this, arguments));
1159
- },
1160
-
1161
- /**
1162
- Perform a synchronous transition into another route without attempting
1163
- to resolve promises, update the URL, or abort any currently active
1164
- asynchronous transitions (i.e. regular transitions caused by
1165
- `transitionTo` or URL changes).
1166
-
1167
- This method is handy for performing intermediate transitions on the
1168
- way to a final destination route, and is called internally by the
1169
- default implementations of the `error` and `loading` handlers.
1170
-
1171
- @method intermediateTransitionTo
1172
- @param {String} name the name of the route
1173
- @param {...Object} models the model(s) to be used while transitioning
1174
- to the route.
1175
- @since 1.2.0
1176
- @public
1177
- */
1178
- intermediateTransitionTo() {
1179
- this._router.intermediateTransitionTo(...prefixRouteNameArg(this, arguments));
1180
- },
1181
-
1182
- /**
1183
- Refresh the model on this route and any child routes, firing the
1184
- `beforeModel`, `model`, and `afterModel` hooks in a similar fashion
1185
- to how routes are entered when transitioning in from other route.
1186
- The current route params (e.g. `article_id`) will be passed in
1187
- to the respective model hooks, and if a different model is returned,
1188
- `setupController` and associated route hooks will re-fire as well.
1189
-
1190
- An example usage of this method is re-querying the server for the
1191
- latest information using the same parameters as when the route
1192
- was first entered.
1193
-
1194
- Note that this will cause `model` hooks to fire even on routes
1195
- that were provided a model object when the route was initially
1196
- entered.
1197
-
1198
- @method refresh
1199
- @return {Transition} the transition object associated with this
1200
- attempted transition
1201
- @since 1.4.0
1202
- @public
1203
- */
1204
- refresh() {
1205
- return this._router._routerMicrolib.refresh(this);
1206
- },
1207
-
1208
- /**
1209
- Transition into another route while replacing the current URL, if possible.
1210
- This will replace the current history entry instead of adding a new one.
1211
- Beside that, it is identical to `transitionTo` in all other respects. See
1212
- 'transitionTo' for additional information regarding multiple models.
1213
-
1214
- Example
1215
-
1216
- ```app/router.js
1217
- // ...
1218
-
1219
- Router.map(function() {
1220
- this.route('index');
1221
- this.route('secret');
1222
- });
1223
-
1224
- export default Router;
1225
- ```
1226
-
1227
- ```app/routes/secret.js
1228
- import Route from '@ember/routing/route';
1229
-
1230
- export default Route.extend({
1231
- afterModel() {
1232
- if (!authorized()){
1233
- this.replaceWith('index');
1234
- }
1235
- }
1236
- });
1237
- ```
1238
-
1239
- @method replaceWith
1240
- @param {String} name the name of the route or a URL
1241
- @param {...Object} models the model(s) or identifier(s) to be used while
1242
- transitioning to the route.
1243
- @param {Object} [options] optional hash with a queryParams property
1244
- containing a mapping of query parameters
1245
- @return {Transition} the transition object associated with this
1246
- attempted transition
1247
- @since 1.0.0
1248
- @public
1249
- */
1250
- replaceWith() {
1251
- return this._router.replaceWith(...prefixRouteNameArg(this, arguments));
1252
- },
1253
-
1254
- /**
1255
- Sends an action to the router, which will delegate it to the currently
1256
- active route hierarchy per the bubbling rules explained under `actions`.
1257
-
1258
- Example
1259
-
1260
- ```app/router.js
1261
- // ...
1262
-
1263
- Router.map(function() {
1264
- this.route('index');
1265
- });
1266
-
1267
- export default Router;
1268
- ```
1269
-
1270
- ```app/routes/application.js
1271
- import Route from '@ember/routing/route';
1272
-
1273
- export default Route.extend({
1274
- actions: {
1275
- track(arg) {
1276
- console.log(arg, 'was clicked');
1277
- }
1278
- }
1279
- });
1280
- ```
1281
-
1282
- ```app/routes/index.js
1283
- import Route from '@ember/routing/route';
1284
-
1285
- export default Route.extend({
1286
- actions: {
1287
- trackIfDebug(arg) {
1288
- if (debug) {
1289
- this.send('track', arg);
1290
- }
1291
- }
1292
- }
1293
- });
1294
- ```
1295
-
1296
- @method send
1297
- @param {String} name the name of the action to trigger
1298
- @param {...*} args
1299
- @since 1.0.0
1300
- @public
1301
- */
1302
- send(...args) {
1303
- assert(
1304
- `Attempted to call .send() with the action '${args[0]}' on the destroyed route '${
1305
- this.routeName
1306
- }'.`,
1307
- !this.isDestroying && !this.isDestroyed
1308
- );
1309
- if ((this._router && this._router._routerMicrolib) || !isTesting()) {
1310
- this._router.send(...args);
1311
- } else {
1312
- let name = args.shift();
1313
- let action = this.actions[name];
1314
- if (action) {
1315
- return action.apply(this, args);
1316
- }
1317
- }
1318
- },
1319
-
1320
- /**
1321
- This hook is the entry point for router.js
1322
-
1323
- @private
1324
- @method setup
1325
- */
1326
- setup(context, transition) {
1327
- let controller;
1328
-
1329
- let controllerName = this.controllerName || this.routeName;
1330
- let definedController = this.controllerFor(controllerName, true);
1331
-
1332
- if (definedController) {
1333
- controller = definedController;
1334
- } else {
1335
- controller = this.generateController(controllerName);
1336
- }
1337
-
1338
- // Assign the route's controller so that it can more easily be
1339
- // referenced in action handlers. Side effects. Side effects everywhere.
1340
- if (!this.controller) {
1341
- let propNames = get(this, '_qp.propertyNames');
1342
- addQueryParamsObservers(controller, propNames);
1343
- this.controller = controller;
1344
- }
1345
-
1346
- let queryParams = get(this, '_qp');
1347
-
1348
- let states = queryParams.states;
1349
-
1350
- controller._qpDelegate = states.allowOverrides;
1351
-
1352
- if (transition) {
1353
- // Update the model dep values used to calculate cache keys.
1354
- stashParamNames(this._router, transition.state.handlerInfos);
1355
-
1356
- let cache = this._bucketCache;
1357
- let params = transition.params;
1358
- let allParams = queryParams.propertyNames;
1359
-
1360
- allParams.forEach(prop => {
1361
- let aQp = queryParams.map[prop];
1362
- aQp.values = params;
1363
-
1364
- let cacheKey = calculateCacheKey(aQp.route.fullRouteName, aQp.parts, aQp.values);
1365
- let value = cache.lookup(cacheKey, prop, aQp.undecoratedDefaultValue);
1366
- set(controller, prop, value);
1367
- });
1368
-
1369
- let qpValues = getQueryParamsFor(this, transition.state);
1370
- setProperties(controller, qpValues);
1371
- }
1372
-
1373
- this.setupController(controller, context, transition);
1374
-
1375
- if (this._environment.options.shouldRender) {
1376
- this.renderTemplate(controller, context);
1377
- }
1378
- },
1379
-
1380
- /*
1381
- Called when a query parameter for this route changes, regardless of whether the route
1382
- is currently part of the active route hierarchy. This will update the query parameter's
1383
- value in the cache so if this route becomes active, the cache value has been updated.
1384
- */
1385
- _qpChanged(prop, value, qp) {
1386
- if (!qp) {
1387
- return;
1388
- }
1389
-
1390
- // Update model-dep cache
1391
- let cache = this._bucketCache;
1392
- let cacheKey = calculateCacheKey(qp.route.fullRouteName, qp.parts, qp.values);
1393
- cache.stash(cacheKey, prop, value);
1394
- },
1395
-
1396
- /**
1397
- This hook is the first of the route entry validation hooks
1398
- called when an attempt is made to transition into a route
1399
- or one of its children. It is called before `model` and
1400
- `afterModel`, and is appropriate for cases when:
1401
-
1402
- 1) A decision can be made to redirect elsewhere without
1403
- needing to resolve the model first.
1404
- 2) Any async operations need to occur first before the
1405
- model is attempted to be resolved.
1406
-
1407
- This hook is provided the current `transition` attempt
1408
- as a parameter, which can be used to `.abort()` the transition,
1409
- save it for a later `.retry()`, or retrieve values set
1410
- on it from a previous hook. You can also just call
1411
- `this.transitionTo` to another route to implicitly
1412
- abort the `transition`.
1413
-
1414
- You can return a promise from this hook to pause the
1415
- transition until the promise resolves (or rejects). This could
1416
- be useful, for instance, for retrieving async code from
1417
- the server that is required to enter a route.
1418
-
1419
- @method beforeModel
1420
- @param {Transition} transition
1421
- @return {any | Promise<any>} if the value returned from this hook is
1422
- a promise, the transition will pause until the transition
1423
- resolves. Otherwise, non-promise return values are not
1424
- utilized in any way.
1425
- @since 1.0.0
1426
- @public
1427
- */
1428
- beforeModel: K,
1429
-
1430
- /**
1431
- This hook is called after this route's model has resolved.
1432
- It follows identical async/promise semantics to `beforeModel`
1433
- but is provided the route's resolved model in addition to
1434
- the `transition`, and is therefore suited to performing
1435
- logic that can only take place after the model has already
1436
- resolved.
1437
-
1438
- ```app/routes/posts.js
1439
- import Route from '@ember/routing/route';
1440
-
1441
- export default Route.extend({
1442
- afterModel(posts, transition) {
1443
- if (posts.get('length') === 1) {
1444
- this.transitionTo('post.show', posts.get('firstObject'));
1445
- }
1446
- }
1447
- });
1448
- ```
1449
-
1450
- Refer to documentation for `beforeModel` for a description
1451
- of transition-pausing semantics when a promise is returned
1452
- from this hook.
1453
-
1454
- @method afterModel
1455
- @param {Object} resolvedModel the value returned from `model`,
1456
- or its resolved value if it was a promise
1457
- @param {Transition} transition
1458
- @return {any | Promise<any>} if the value returned from this hook is
1459
- a promise, the transition will pause until the transition
1460
- resolves. Otherwise, non-promise return values are not
1461
- utilized in any way.
1462
- @since 1.0.0
1463
- @public
1464
- */
1465
- afterModel: K,
1466
-
1467
- /**
1468
- A hook you can implement to optionally redirect to another route.
1469
-
1470
- If you call `this.transitionTo` from inside of this hook, this route
1471
- will not be entered in favor of the other hook.
1472
-
1473
- `redirect` and `afterModel` behave very similarly and are
1474
- called almost at the same time, but they have an important
1475
- distinction in the case that, from one of these hooks, a
1476
- redirect into a child route of this route occurs: redirects
1477
- from `afterModel` essentially invalidate the current attempt
1478
- to enter this route, and will result in this route's `beforeModel`,
1479
- `model`, and `afterModel` hooks being fired again within
1480
- the new, redirecting transition. Redirects that occur within
1481
- the `redirect` hook, on the other hand, will _not_ cause
1482
- these hooks to be fired again the second time around; in
1483
- other words, by the time the `redirect` hook has been called,
1484
- both the resolved model and attempted entry into this route
1485
- are considered to be fully validated.
1486
-
1487
- @method redirect
1488
- @param {Object} model the model for this route
1489
- @param {Transition} transition the transition object associated with the current transition
1490
- @since 1.0.0
1491
- @public
1492
- */
1493
- redirect: K,
1494
-
1495
- /**
1496
- Called when the context is changed by router.js.
1497
-
1498
- @private
1499
- @method contextDidChange
1500
- */
1501
- contextDidChange() {
1502
- this.currentModel = this.context;
1503
- },
1504
-
1505
- /**
1506
- A hook you can implement to convert the URL into the model for
1507
- this route.
1508
-
1509
- ```app/router.js
1510
- // ...
1511
-
1512
- Router.map(function() {
1513
- this.route('post', { path: '/posts/:post_id' });
1514
- });
1515
-
1516
- export default Router;
1517
- ```
1518
-
1519
- The model for the `post` route is `store.findRecord('post', params.post_id)`.
1520
-
1521
- By default, if your route has a dynamic segment ending in `_id`:
1522
-
1523
- * The model class is determined from the segment (`post_id`'s
1524
- class is `App.Post`)
1525
- * The find method is called on the model class with the value of
1526
- the dynamic segment.
1527
-
1528
- Note that for routes with dynamic segments, this hook is not always
1529
- executed. If the route is entered through a transition (e.g. when
1530
- using the `link-to` Handlebars helper or the `transitionTo` method
1531
- of routes), and a model context is already provided this hook
1532
- is not called.
1533
-
1534
- A model context does not include a primitive string or number,
1535
- which does cause the model hook to be called.
1536
-
1537
- Routes without dynamic segments will always execute the model hook.
1538
-
1539
- ```javascript
1540
- // no dynamic segment, model hook always called
1541
- this.transitionTo('posts');
1542
-
1543
- // model passed in, so model hook not called
1544
- thePost = store.findRecord('post', 1);
1545
- this.transitionTo('post', thePost);
1546
-
1547
- // integer passed in, model hook is called
1548
- this.transitionTo('post', 1);
1549
-
1550
- // model id passed in, model hook is called
1551
- // useful for forcing the hook to execute
1552
- thePost = store.findRecord('post', 1);
1553
- this.transitionTo('post', thePost.id);
1554
- ```
1555
-
1556
-
1557
- This hook follows the asynchronous/promise semantics
1558
- described in the documentation for `beforeModel`. In particular,
1559
- if a promise returned from `model` fails, the error will be
1560
- handled by the `error` hook on `Route`.
1561
-
1562
- Example
1563
-
1564
- ```app/routes/post.js
1565
- import Route from '@ember/routing/route';
1566
-
1567
- export default Route.extend({
1568
- model(params) {
1569
- return this.store.findRecord('post', params.post_id);
1570
- }
1571
- });
1572
- ```
1573
-
1574
- @method model
1575
- @param {Object} params the parameters extracted from the URL
1576
- @param {Transition} transition
1577
- @return {any | Promise<any>} the model for this route. If
1578
- a promise is returned, the transition will pause until
1579
- the promise resolves, and the resolved value of the promise
1580
- will be used as the model for this route.
1581
- @since 1.0.0
1582
- @public
1583
- */
1584
- model(params, transition) {
1585
- let name, sawParams, value;
1586
- let queryParams = get(this, '_qp.map');
1587
-
1588
- for (let prop in params) {
1589
- if (prop === 'queryParams' || (queryParams && prop in queryParams)) {
1590
- continue;
1591
- }
1592
-
1593
- let match = prop.match(/^(.*)_id$/);
1594
- if (match !== null) {
1595
- name = match[1];
1596
- value = params[prop];
1597
- }
1598
- sawParams = true;
1599
- }
1600
-
1601
- if (!name) {
1602
- if (sawParams) {
1603
- return Object.assign({}, params);
1604
- } else {
1605
- if (transition.resolveIndex < 1) {
1606
- return;
1607
- }
1608
- return transition.state.handlerInfos[transition.resolveIndex - 1].context;
1609
- }
1610
- }
1611
-
1612
- return this.findModel(name, value);
1613
- },
1614
-
1615
- /**
1616
- @private
1617
- @method deserialize
1618
- @param {Object} params the parameters extracted from the URL
1619
- @param {Transition} transition
1620
- @return {any | Promise<any>} the model for this route.
1621
-
1622
- Router.js hook.
1623
- */
1624
- deserialize(params, transition) {
1625
- return this.model(this.paramsFor(this.routeName), transition);
1626
- },
1627
-
1628
- /**
1629
-
1630
- @method findModel
1631
- @param {String} type the model type
1632
- @param {Object} value the value passed to find
1633
- @private
1634
- */
1635
- findModel() {
1636
- return get(this, 'store').find(...arguments);
1637
- },
1638
-
1639
- /**
1640
- Store property provides a hook for data persistence libraries to inject themselves.
1641
-
1642
- By default, this store property provides the exact same functionality previously
1643
- in the model hook.
1644
-
1645
- Currently, the required interface is:
1646
-
1647
- `store.find(modelName, findArguments)`
1648
-
1649
- @method store
1650
- @param {Object} store
1651
- @private
1652
- */
1653
- store: computed(function() {
1654
- let owner = getOwner(this);
1655
- let routeName = this.routeName;
1656
- let namespace = get(this, '_router.namespace');
1657
-
1658
- return {
1659
- find(name, value) {
1660
- let modelClass = owner.factoryFor(`model:${name}`);
1661
-
1662
- assert(
1663
- `You used the dynamic segment ${name}_id in your route ${routeName}, but ${namespace}.${classify(
1664
- name
1665
- )} did not exist and you did not override your route's \`model\` hook.`,
1666
- !!modelClass
1667
- );
1668
-
1669
- if (!modelClass) {
1670
- return;
1671
- }
1672
-
1673
- modelClass = modelClass.class;
1674
-
1675
- assert(`${classify(name)} has no method \`find\`.`, typeof modelClass.find === 'function');
1676
-
1677
- return modelClass.find(value);
1678
- },
1679
- };
1680
- }),
1681
-
1682
- /**
1683
- A hook you can implement to convert the route's model into parameters
1684
- for the URL.
1685
-
1686
- ```app/router.js
1687
- // ...
1688
-
1689
- Router.map(function() {
1690
- this.route('post', { path: '/posts/:post_id' });
1691
- });
1692
-
1693
- ```
1694
-
1695
- ```app/routes/post.js
1696
- import $ from 'jquery';
1697
- import Route from '@ember/routing/route';
1698
-
1699
- export default Route.extend({
1700
- model(params) {
1701
- // the server returns `{ id: 12 }`
1702
- return $.getJSON('/posts/' + params.post_id);
1703
- },
1704
-
1705
- serialize(model) {
1706
- // this will make the URL `/posts/12`
1707
- return { post_id: model.id };
1708
- }
1709
- });
1710
- ```
1711
-
1712
- The default `serialize` method will insert the model's `id` into the
1713
- route's dynamic segment (in this case, `:post_id`) if the segment contains '_id'.
1714
- If the route has multiple dynamic segments or does not contain '_id', `serialize`
1715
- will return `getProperties(model, params)`
1716
-
1717
- This method is called when `transitionTo` is called with a context
1718
- in order to populate the URL.
1719
-
1720
- @method serialize
1721
- @param {Object} model the routes model
1722
- @param {Array} params an Array of parameter names for the current
1723
- route (in the example, `['post_id']`.
1724
- @return {Object} the serialized parameters
1725
- @since 1.0.0
1726
- @public
1727
- */
1728
- serialize: defaultSerialize,
1729
-
1730
- /**
1731
- A hook you can use to setup the controller for the current route.
1732
-
1733
- This method is called with the controller for the current route and the
1734
- model supplied by the `model` hook.
1735
-
1736
- By default, the `setupController` hook sets the `model` property of
1737
- the controller to the specified `model` when it is not `undefined`.
1738
-
1739
- If you implement the `setupController` hook in your Route, it will
1740
- prevent this default behavior. If you want to preserve that behavior
1741
- when implementing your `setupController` function, make sure to call
1742
- `_super`:
1743
-
1744
- ```app/routes/photos.js
1745
- import Route from '@ember/routing/route';
1746
-
1747
- export default Route.extend({
1748
- model() {
1749
- return this.store.findAll('photo');
1750
- },
1751
-
1752
- setupController(controller, model) {
1753
- // Call _super for default behavior
1754
- this._super(controller, model);
1755
- // Implement your custom setup after
1756
- this.controllerFor('application').set('showingPhotos', true);
1757
- }
1758
- });
1759
- ```
1760
-
1761
- The provided controller will be one resolved based on the name
1762
- of this route.
1763
-
1764
- If no explicit controller is defined, Ember will automatically create one.
1765
-
1766
- As an example, consider the router:
1767
-
1768
- ```app/router.js
1769
- // ...
1770
-
1771
- Router.map(function() {
1772
- this.route('post', { path: '/posts/:post_id' });
1773
- });
1774
-
1775
- export default Router;
1776
- ```
1777
-
1778
- For the `post` route, a controller named `App.PostController` would
1779
- be used if it is defined. If it is not defined, a basic `Controller`
1780
- instance would be used.
1781
-
1782
- Example
1783
-
1784
- ```app/routes/post.js
1785
- import Route from '@ember/routing/route';
1786
-
1787
- export default Route.extend({
1788
- setupController(controller, model) {
1789
- controller.set('model', model);
1790
- }
1791
- });
1792
- ```
1793
-
1794
- @method setupController
1795
- @param {Controller} controller instance
1796
- @param {Object} model
1797
- @since 1.0.0
1798
- @public
1799
- */
1800
- setupController(controller, context /*, transition */) {
1801
- // eslint-disable-line no-unused-vars
1802
- if (controller && context !== undefined) {
1803
- set(controller, 'model', context);
1804
- }
1805
- },
1806
-
1807
- /**
1808
- Returns the controller of the current route, or a parent (or any ancestor)
1809
- route in a route hierarchy.
1810
-
1811
- The controller instance must already have been created, either through entering the
1812
- associated route or using `generateController`.
1813
-
1814
- ```app/routes/post.js
1815
- import Route from '@ember/routing/route';
1816
-
1817
- export default Route.extend({
1818
- setupController(controller, post) {
1819
- this._super(controller, post);
1820
- this.controllerFor('posts').set('currentPost', post);
1821
- }
1822
- });
1823
- ```
1824
-
1825
- @method controllerFor
1826
- @param {String} name the name of the route or controller
1827
- @return {Controller}
1828
- @since 1.0.0
1829
- @public
1830
- */
1831
- controllerFor(name, _skipAssert) {
1832
- let owner = getOwner(this);
1833
- let route = owner.lookup(`route:${name}`);
1834
- let controller;
1835
-
1836
- if (route && route.controllerName) {
1837
- name = route.controllerName;
1838
- }
1839
-
1840
- controller = owner.lookup(`controller:${name}`);
1841
-
1842
- // NOTE: We're specifically checking that skipAssert is true, because according
1843
- // to the old API the second parameter was model. We do not want people who
1844
- // passed a model to skip the assertion.
1845
- assert(
1846
- `The controller named '${name}' could not be found. Make sure that this route exists and has already been entered at least once. If you are accessing a controller not associated with a route, make sure the controller class is explicitly defined.`,
1847
- controller || _skipAssert === true
1848
- );
1849
-
1850
- return controller;
1851
- },
1852
-
1853
- /**
1854
- Generates a controller for a route.
1855
-
1856
- Example
1857
-
1858
- ```app/routes/post.js
1859
- import Route from '@ember/routing/route';
1860
-
1861
- export default Route.extend({
1862
- setupController(controller, post) {
1863
- this._super(controller, post);
1864
- this.generateController('posts');
1865
- }
1866
- });
1867
- ```
1868
-
1869
- @method generateController
1870
- @param {String} name the name of the controller
1871
- @private
1872
- */
1873
- generateController(name) {
1874
- let owner = getOwner(this);
1875
-
1876
- return generateController(owner, name);
1877
- },
1878
-
1879
- /**
1880
- Returns the resolved model of a parent (or any ancestor) route
1881
- in a route hierarchy. During a transition, all routes
1882
- must resolve a model object, and if a route
1883
- needs access to a parent route's model in order to
1884
- resolve a model (or just reuse the model from a parent),
1885
- it can call `this.modelFor(theNameOfParentRoute)` to
1886
- retrieve it. If the ancestor route's model was a promise,
1887
- its resolved result is returned.
1888
-
1889
- Example
1890
-
1891
- ```app/router.js
1892
- // ...
1893
-
1894
- Router.map(function() {
1895
- this.route('post', { path: '/posts/:post_id' }, function() {
1896
- this.route('comments');
1897
- });
1898
- });
1899
-
1900
- export default Router;
1901
- ```
1902
-
1903
- ```app/routes/post/comments.js
1904
- import Route from '@ember/routing/route';
1905
-
1906
- export default Route.extend({
1907
- model() {
1908
- let post = this.modelFor('post');
1909
- return post.get('comments');
1910
- }
1911
- });
1912
- ```
1913
-
1914
- @method modelFor
1915
- @param {String} name the name of the route
1916
- @return {Object} the model object
1917
- @since 1.0.0
1918
- @public
1919
- */
1920
- modelFor(_name) {
1921
- let name;
1922
- let owner = getOwner(this);
1923
- let transition =
1924
- this._router && this._router._routerMicrolib
1925
- ? this._router._routerMicrolib.activeTransition
1926
- : null;
1927
-
1928
- // Only change the route name when there is an active transition.
1929
- // Otherwise, use the passed in route name.
1930
- if (owner.routable && transition !== null) {
1931
- name = getEngineRouteName(owner, _name);
1932
- } else {
1933
- name = _name;
1934
- }
1935
-
1936
- let route = owner.lookup(`route:${name}`);
1937
- // If we are mid-transition, we want to try and look up
1938
- // resolved parent contexts on the current transitionEvent.
1939
- if (transition !== null) {
1940
- let modelLookupName = (route && route.routeName) || name;
1941
- if (transition.resolvedModels.hasOwnProperty(modelLookupName)) {
1942
- return transition.resolvedModels[modelLookupName];
1943
- }
1944
- }
1945
-
1946
- return route && route.currentModel;
1947
- },
1948
-
1949
- /**
1950
- A hook you can use to render the template for the current route.
1951
-
1952
- This method is called with the controller for the current route and the
1953
- model supplied by the `model` hook. By default, it renders the route's
1954
- template, configured with the controller for the route.
1955
-
1956
- This method can be overridden to set up and render additional or
1957
- alternative templates.
1958
-
1959
- ```app/routes/posts.js
1960
- import Route from '@ember/routing/route';
1961
-
1962
- export default Route.extend({
1963
- renderTemplate(controller, model) {
1964
- let favController = this.controllerFor('favoritePost');
1965
-
1966
- // Render the `favoritePost` template into
1967
- // the outlet `posts`, and display the `favoritePost`
1968
- // controller.
1969
- this.render('favoritePost', {
1970
- outlet: 'posts',
1971
- controller: favController
1972
- });
1973
- }
1974
- });
1975
- ```
1976
-
1977
- @method renderTemplate
1978
- @param {Object} controller the route's controller
1979
- @param {Object} model the route's model
1980
- @since 1.0.0
1981
- @public
1982
- */
1983
- renderTemplate(/* controller, model */) {
1984
- // eslint-disable-line no-unused-vars
1985
- this.render();
1986
- },
1987
-
1988
- /**
1989
- `render` is used to render a template into a region of another template
1990
- (indicated by an `{{outlet}}`). `render` is used both during the entry
1991
- phase of routing (via the `renderTemplate` hook) and later in response to
1992
- user interaction.
1993
-
1994
- For example, given the following minimal router and templates:
1995
-
1996
- ```app/router.js
1997
- // ...
1998
-
1999
- Router.map(function() {
2000
- this.route('photos');
2001
- });
2002
-
2003
- export default Router;
2004
- ```
2005
-
2006
- ```handlebars
2007
- <!-- application.hbs -->
2008
- <div class='something-in-the-app-hbs'>
2009
- {{outlet "anOutletName"}}
2010
- </div>
2011
- ```
2012
-
2013
- ```handlebars
2014
- <!-- photos.hbs -->
2015
- <h1>Photos</h1>
2016
- ```
2017
-
2018
- You can render `photos.hbs` into the `"anOutletName"` outlet of
2019
- `application.hbs` by calling `render`:
2020
-
2021
- ```app/routes/post.js
2022
- import Route from '@ember/routing/route';
2023
-
2024
- export default Route.extend({
2025
- renderTemplate() {
2026
- this.render('photos', {
2027
- into: 'application',
2028
- outlet: 'anOutletName'
2029
- })
2030
- }
2031
- });
2032
- ```
2033
-
2034
- `render` additionally allows you to supply which `controller` and
2035
- `model` objects should be loaded and associated with the rendered template.
2036
-
2037
-
2038
- ```app/routes/posts.js
2039
- import Route from '@ember/routing/route';
2040
-
2041
- export default Route.extend({
2042
- renderTemplate(controller, model){
2043
- this.render('posts', { // the template to render, referenced by name
2044
- into: 'application', // the template to render into, referenced by name
2045
- outlet: 'anOutletName', // the outlet inside `options.into` to render into.
2046
- controller: 'someControllerName', // the controller to use for this template, referenced by name
2047
- model: model // the model to set on `options.controller`.
2048
- })
2049
- }
2050
- });
2051
- ```
2052
-
2053
- The string values provided for the template name, and controller
2054
- will eventually pass through to the resolver for lookup. See
2055
- Resolver for how these are mapped to JavaScript objects in your
2056
- application. The template to render into needs to be related to either the
2057
- current route or one of its ancestors.
2058
-
2059
- Not all options need to be passed to `render`. Default values will be used
2060
- based on the name of the route specified in the router or the Route's
2061
- `controllerName` and `templateName` properties.
2062
-
2063
- For example:
2064
-
2065
- ```app/router.js
2066
- // ...
2067
-
2068
- Router.map(function() {
2069
- this.route('index');
2070
- this.route('post', { path: '/posts/:post_id' });
2071
- });
2072
-
2073
- export default Router;
2074
- ```
2075
-
2076
- ```app/routes/post.js
2077
- import Route from '@ember/routing/route';
2078
-
2079
- export default Route.extend({
2080
- renderTemplate() {
2081
- this.render(); // all defaults apply
2082
- }
2083
- });
2084
- ```
2085
-
2086
- The name of the route, defined by the router, is `post`.
2087
-
2088
- The following equivalent default options will be applied when
2089
- the Route calls `render`:
2090
-
2091
- ```javascript
2092
- this.render('post', { // the template name associated with 'post' Route
2093
- into: 'application', // the parent route to 'post' Route
2094
- outlet: 'main', // {{outlet}} and {{outlet 'main'}} are synonymous,
2095
- controller: 'post', // the controller associated with the 'post' Route
2096
- })
2097
- ```
2098
-
2099
- By default the controller's `model` will be the route's model, so it does not
2100
- need to be passed unless you wish to change which model is being used.
2101
-
2102
- @method render
2103
- @param {String} name the name of the template to render
2104
- @param {Object} [options] the options
2105
- @param {String} [options.into] the template to render into,
2106
- referenced by name. Defaults to the parent template
2107
- @param {String} [options.outlet] the outlet inside `options.into` to render into.
2108
- Defaults to 'main'
2109
- @param {String|Object} [options.controller] the controller to use for this template,
2110
- referenced by name or as a controller instance. Defaults to the Route's paired controller
2111
- @param {Object} [options.model] the model object to set on `options.controller`.
2112
- Defaults to the return value of the Route's model hook
2113
- @since 1.0.0
2114
- @public
2115
- */
2116
- render(_name, options) {
2117
- let name;
2118
- let isDefaultRender = arguments.length === 0;
2119
- if (!isDefaultRender) {
2120
- if (typeof _name === 'object' && !options) {
2121
- name = this.templateName || this.routeName;
2122
- options = _name;
2123
- } else {
2124
- assert('The name in the given arguments is undefined or empty string', !isEmpty(_name));
2125
- name = _name;
2126
- }
2127
- }
2128
-
2129
- let renderOptions = buildRenderOptions(this, isDefaultRender, name, options);
2130
- this.connections.push(renderOptions);
2131
- once(this._router, '_setOutlets');
2132
- },
2133
-
2134
- /**
2135
- Disconnects a view that has been rendered into an outlet.
2136
-
2137
- You may pass any or all of the following options to `disconnectOutlet`:
2138
-
2139
- * `outlet`: the name of the outlet to clear (default: 'main')
2140
- * `parentView`: the name of the view containing the outlet to clear
2141
- (default: the view rendered by the parent route)
2142
-
2143
- Example:
2144
-
2145
- ```app/routes/application.js
2146
- import Route from '@ember/routing/route';
2147
-
2148
- export default Route.extend({
2149
- actions: {
2150
- showModal(evt) {
2151
- this.render(evt.modalName, {
2152
- outlet: 'modal',
2153
- into: 'application'
2154
- });
2155
- },
2156
-
2157
- hideModal(evt) {
2158
- this.disconnectOutlet({
2159
- outlet: 'modal',
2160
- parentView: 'application'
2161
- });
2162
- }
2163
- }
2164
- });
2165
- ```
2166
-
2167
- Alternatively, you can pass the `outlet` name directly as a string.
2168
-
2169
- Example:
2170
-
2171
- ```app/routes/application.js
2172
- import Route from '@ember/routing/route';
2173
-
2174
- export default Route.extend({
2175
- actions: {
2176
- showModal(evt) {
2177
- // ...
2178
- },
2179
- hideModal(evt) {
2180
- this.disconnectOutlet('modal');
2181
- }
2182
- }
2183
- });
2184
- ```
2185
-
2186
- @method disconnectOutlet
2187
- @param {Object|String} options the options hash or outlet name
2188
- @since 1.0.0
2189
- @public
2190
- */
2191
- disconnectOutlet(options) {
2192
- let outletName;
2193
- let parentView;
2194
- if (options) {
2195
- if (typeof options === 'string') {
2196
- outletName = options;
2197
- } else {
2198
- outletName = options.outlet;
2199
- parentView = options.parentView ? options.parentView.replace(/\//g, '.') : undefined;
2200
-
2201
- assert(
2202
- 'You passed undefined as the outlet name.',
2203
- !('outlet' in options && options.outlet === undefined)
2204
- );
2205
- }
2206
- }
2207
-
2208
- outletName = outletName || 'main';
2209
- this._disconnectOutlet(outletName, parentView);
2210
- let handlerInfos = this._router._routerMicrolib.currentHandlerInfos;
2211
- for (let i = 0; i < handlerInfos.length; i++) {
2212
- // This non-local state munging is sadly necessary to maintain
2213
- // backward compatibility with our existing semantics, which allow
2214
- // any route to disconnectOutlet things originally rendered by any
2215
- // other route. This should all get cut in 2.0.
2216
- handlerInfos[i].handler._disconnectOutlet(outletName, parentView);
2217
- }
2218
- },
2219
-
2220
- _disconnectOutlet(outletName, parentView) {
2221
- let parent = parentRoute(this);
2222
- if (parent && parentView === parent.routeName) {
2223
- parentView = undefined;
2224
- }
2225
- for (let i = 0; i < this.connections.length; i++) {
2226
- let connection = this.connections[i];
2227
- if (connection.outlet === outletName && connection.into === parentView) {
2228
- // This neuters the disconnected outlet such that it doesn't
2229
- // render anything, but it leaves an entry in the outlet
2230
- // hierarchy so that any existing other renders that target it
2231
- // don't suddenly blow up. They will still stick themselves
2232
- // into its outlets, which won't render anywhere. All of this
2233
- // statefulness should get the machete in 2.0.
2234
- this.connections[i] = {
2235
- owner: connection.owner,
2236
- into: connection.into,
2237
- outlet: connection.outlet,
2238
- name: connection.name,
2239
- controller: undefined,
2240
- template: undefined,
2241
- };
2242
- once(this._router, '_setOutlets');
2243
- }
2244
- }
2245
- },
2246
-
2247
- willDestroy() {
2248
- this.teardownViews();
2249
- },
2250
-
2251
- /**
2252
- @private
2253
-
2254
- @method teardownViews
2255
- */
2256
- teardownViews() {
2257
- if (this.connections && this.connections.length > 0) {
2258
- this.connections = [];
2259
- once(this._router, '_setOutlets');
2260
- }
2261
- },
2262
- });
2263
-
2264
- Route.reopenClass({
2265
- isRouteFactory: true,
2266
- });
2267
-
2268
- function parentRoute(route) {
2269
- let handlerInfo = handlerInfoFor(route, route._router._routerMicrolib.state.handlerInfos, -1);
2270
- return handlerInfo && handlerInfo.handler;
2271
- }
2272
-
2273
- function handlerInfoFor(route, handlerInfos, offset = 0) {
2274
- if (!handlerInfos) {
2275
- return;
2276
- }
2277
-
2278
- let current;
2279
- for (let i = 0; i < handlerInfos.length; i++) {
2280
- current = handlerInfos[i].handler;
2281
- if (current === route) {
2282
- return handlerInfos[i + offset];
2283
- }
2284
- }
2285
- }
2286
-
2287
- function buildRenderOptions(route, isDefaultRender, _name, options) {
2288
- assert(
2289
- 'You passed undefined as the outlet name.',
2290
- isDefaultRender || !(options && 'outlet' in options && options.outlet === undefined)
2291
- );
2292
-
2293
- let owner = getOwner(route);
2294
- let name, templateName, into, outlet, controller, model;
2295
- if (options) {
2296
- into = options.into && options.into.replace(/\//g, '.');
2297
- outlet = options.outlet;
2298
- controller = options.controller;
2299
- model = options.model;
2300
- }
2301
- outlet = outlet || 'main';
2302
-
2303
- if (isDefaultRender) {
2304
- name = route.routeName;
2305
- templateName = route.templateName || name;
2306
- } else {
2307
- name = _name.replace(/\//g, '.');
2308
- templateName = name;
2309
- }
2310
-
2311
- if (!controller) {
2312
- if (isDefaultRender) {
2313
- controller = route.controllerName || owner.lookup(`controller:${name}`);
2314
- } else {
2315
- controller = owner.lookup(`controller:${name}`) || route.controllerName || route.routeName;
2316
- }
2317
- }
2318
-
2319
- if (typeof controller === 'string') {
2320
- let controllerName = controller;
2321
- controller = owner.lookup(`controller:${controllerName}`);
2322
- assert(
2323
- `You passed \`controller: '${controllerName}'\` into the \`render\` method, but no such controller could be found.`,
2324
- isDefaultRender || controller
2325
- );
2326
- }
2327
-
2328
- if (model) {
2329
- controller.set('model', model);
2330
- }
2331
-
2332
- let template = owner.lookup(`template:${templateName}`);
2333
- assert(
2334
- `Could not find "${templateName}" template, view, or component.`,
2335
- isDefaultRender || template
2336
- );
2337
-
2338
- let parent;
2339
- if (into && (parent = parentRoute(route)) && into === parent.routeName) {
2340
- into = undefined;
2341
- }
2342
-
2343
- let renderOptions = {
2344
- owner,
2345
- into,
2346
- outlet,
2347
- name,
2348
- controller,
2349
- template: template || route._topLevelViewTemplate,
2350
- };
2351
-
2352
- if (DEBUG) {
2353
- let LOG_VIEW_LOOKUPS = get(route._router, 'namespace.LOG_VIEW_LOOKUPS');
2354
- if (LOG_VIEW_LOOKUPS && !template) {
2355
- info(`Could not find "${name}" template. Nothing will be rendered`, {
2356
- fullName: `template:${name}`,
2357
- });
2358
- }
2359
- }
2360
-
2361
- return renderOptions;
2362
- }
2363
-
2364
- function getFullQueryParams(router, state) {
2365
- if (state.fullQueryParams) {
2366
- return state.fullQueryParams;
2367
- }
2368
-
2369
- state.fullQueryParams = {};
2370
- assign(state.fullQueryParams, state.queryParams);
2371
-
2372
- router._deserializeQueryParams(state.handlerInfos, state.fullQueryParams);
2373
- return state.fullQueryParams;
2374
- }
2375
-
2376
- function getQueryParamsFor(route, state) {
2377
- state.queryParamsFor = state.queryParamsFor || {};
2378
- let name = route.fullRouteName;
2379
-
2380
- if (state.queryParamsFor[name]) {
2381
- return state.queryParamsFor[name];
2382
- }
2383
-
2384
- let fullQueryParams = getFullQueryParams(route._router, state);
2385
-
2386
- let params = (state.queryParamsFor[name] = {});
2387
-
2388
- // Copy over all the query params for this route/controller into params hash.
2389
- let qpMeta = get(route, '_qp');
2390
- let qps = qpMeta.qps;
2391
- for (let i = 0; i < qps.length; ++i) {
2392
- // Put deserialized qp on params hash.
2393
- let qp = qps[i];
2394
-
2395
- let qpValueWasPassedIn = qp.prop in fullQueryParams;
2396
- params[qp.prop] = qpValueWasPassedIn
2397
- ? fullQueryParams[qp.prop]
2398
- : copyDefaultValue(qp.defaultValue);
2399
- }
2400
-
2401
- return params;
2402
- }
2403
-
2404
- function copyDefaultValue(value) {
2405
- if (Array.isArray(value)) {
2406
- return emberA(value.slice());
2407
- }
2408
- return value;
2409
- }
2410
-
2411
- /*
2412
- Merges all query parameters from a controller with those from
2413
- a route, returning a new object and avoiding any mutations to
2414
- the existing objects.
2415
- */
2416
- function mergeEachQueryParams(controllerQP, routeQP) {
2417
- let qps = {};
2418
- let keysAlreadyMergedOrSkippable = {
2419
- defaultValue: true,
2420
- type: true,
2421
- scope: true,
2422
- as: true,
2423
- };
2424
-
2425
- // first loop over all controller qps, merging them with any matching route qps
2426
- // into a new empty object to avoid mutating.
2427
- for (let cqpName in controllerQP) {
2428
- if (!controllerQP.hasOwnProperty(cqpName)) {
2429
- continue;
2430
- }
2431
-
2432
- let newControllerParameterConfiguration = {};
2433
- assign(newControllerParameterConfiguration, controllerQP[cqpName], routeQP[cqpName]);
2434
-
2435
- qps[cqpName] = newControllerParameterConfiguration;
2436
-
2437
- // allows us to skip this QP when we check route QPs.
2438
- keysAlreadyMergedOrSkippable[cqpName] = true;
2439
- }
2440
-
2441
- // loop over all route qps, skipping those that were merged in the first pass
2442
- // because they also appear in controller qps
2443
- for (let rqpName in routeQP) {
2444
- if (!routeQP.hasOwnProperty(rqpName) || keysAlreadyMergedOrSkippable[rqpName]) {
2445
- continue;
2446
- }
2447
-
2448
- let newRouteParameterConfiguration = {};
2449
- assign(newRouteParameterConfiguration, routeQP[rqpName], controllerQP[rqpName]);
2450
- qps[rqpName] = newRouteParameterConfiguration;
2451
- }
2452
-
2453
- return qps;
2454
- }
2455
-
2456
- function addQueryParamsObservers(controller, propNames) {
2457
- propNames.forEach(prop => {
2458
- controller.addObserver(`${prop}.[]`, controller, controller._qpChanged);
2459
- });
2460
- }
2461
-
2462
- function getEngineRouteName(engine, routeName) {
2463
- if (engine.routable) {
2464
- let prefix = engine.mountPoint;
2465
-
2466
- if (routeName === 'application') {
2467
- return prefix;
2468
- } else {
2469
- return `${prefix}.${routeName}`;
2470
- }
2471
- }
2472
-
2473
- return routeName;
2474
- }
2475
-
2476
- export default Route;