blogelator 0.2.2 → 0.2.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Rakefile +6 -1
- data/app/assets/javascripts/blogelator/admin.js +3 -4
- data/app/assets/javascripts/blogelator/components/markdown_editor_component.js +1 -1
- data/app/assets/javascripts/blogelator/config/router.js +2 -2
- data/app/assets/javascripts/blogelator/config/store.js +2 -2
- data/app/assets/javascripts/blogelator/templates/application.handlebars +2 -2
- data/lib/blogelator/version.rb +1 -1
- data/spec/dummy/config/environments/development.rb +0 -3
- data/spec/dummy/config/environments/production.rb +2 -0
- data/spec/dummy/config/initializers/teaspoon.rb +64 -0
- data/spec/dummy/log/development.log +407 -0
- data/spec/dummy/log/test.log +5931 -0
- data/spec/dummy/spec/teaspoon_env.rb +31 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/0035bf20bb2b00b92d477d04c43d0aea +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/01c8388ac413839f6da6e2873f33deea +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/02a1af1f7714de8266abf72c7b50ec59 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/04972fd2c5849771d18618dab6a8d393 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/04d4299740c43aa28bd490d49442847c +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/06818102fbdd5098a2498c66217c0b9e +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/07480eab8b760aa7803bd2a43a5af8a6 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/0b8aefc6414907c456a6d2931770ce92 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/0bb3f71998327005fa4474b72cdf1906 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/0ccdcb035f2272248685f6eed371496f +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/0ffdbaf6d16aec30bfb6cb6ecfe1fc2c +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/10540929b00cc93cf8bbb830eea7c13e +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/113ed6660764a34b6b949e3e83d8f47f +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/124e25ebca5867367adec79115a0ca67 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/1761f2355c63a1327d71f704fd0f0f45 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/17b4609c1f1f232b9fd22f9a2c93f2cd +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/18dc9c71fcdc767f25de258b404ca42d +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/19c6abd503d4336614f363a40b336791 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/1ac2bd9b586578646ecaabcb6bde0d66 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/1bf531ae5678827808cefad9b853f496 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/1ca7621c302e2cbcdc92a0721c796f52 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/1dd23e80ffe5d395ed6a7d546d2c44db +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/1de63e02a9a79453e462e5c7d4e40cbd +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/1eb306e34ba8e9ef81ecf63449426d77 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/1ec03d1119edc56c6c9baaa98293a121 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/1f2d7a7aa7865b4a3201f89f96420158 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/21e1804f6dfe3ceb605f24c94e6dc477 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/23ecf564fa7a4ba6b10cdc7e73d5b96e +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/267fee7621dd7da0cd0edb1f5211c66f +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/26dea14589bf3e74e9f726683e9bdac4 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/27b8ac22c4b0536c99a0f7a691ad3158 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/292a4cc1ea9e79b14723bcdfee877f3d +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/29c7267c0af25b5030fdb4ec5b022a8b +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/2c1b170c79a25314872eab0e7f4c41d7 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/2c470d2f2580f505c77ad6670dd81c30 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/316356e0eb458fecf1a5988644ebebbb +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/342e80130bda0307bc4265b1c00c1c44 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/353019a91a110855ae406b8781f39712 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/3825351bd9442ada367da384627944d1 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/38b2231f7dcef36baead65ebd56d76dd +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/39228b61911dee6579813ab9cb88b895 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/39bf4ddb5d1cea8953aedd1d9b5dffaa +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/3b1d211a9594243e7a3d8e756187ecf8 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/3c6e4f15dfdefdca999e660090d687cf +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/3d4cef0777fbc54966e4b1163bebc7d1 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/41f65c62a632c84d566297229642675b +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/42634b762cfb2fd6c61d47d2dabc357a +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/428224d0d8a310a21e1b4f0d1455be48 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/42cbac3d7bd8cde35e5dd4c94d8b50a8 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/45cfce5040774a9551d99044ac56f7a1 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/4aba8376707070db8167c05302adccc6 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/4ba26a30b63589959d0c4692f314e3aa +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/4bb90865eea96559493ce136ee691802 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/4c3720dcc01594b1fdba08d914c56073 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/4d177c54215992cd81a26f8b170ea7f7 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/4e642b7ec829037721eacf43d146e0f5 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/4fd6af204163612638290ad988d8a9b6 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/506ca0631764d6a3d89109efb476fd18 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/507f01d96025d73ea9f817a06010b12d +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/508bb4304d3050108e2234b3d55b122e +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/5259e519b65d2a2a7df713ed4ad776a7 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/5312340bbf8ff1672ab7ba17dc5d1e54 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/5496155aa1d57a5d452afcebd4580646 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/5833e5b28944a870da20b0261e2bba31 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/58ac11795f3db30a3bbec089eb578085 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/5a33192c3ff661394755236ff6a2a843 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/5c50bbb6a22243becf4b686559662232 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/5c6c35f39bf47311fa42de94e9e8472e +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/5e96b7215788159b18088b94aadfe4ea +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/6026416a45d2a8e2d81898511b5d0060 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/63b25dc5521cb7ee9181b5a3d4263f6d +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/64f890cc56d1b4ed3144210969474884 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/6759aa60233dd6de6888e3bee3522ccf +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/67ae152dfaec9b4d5c3c45a2f9fc69eb +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/6870da13c3305651063dc22ccce27d5c +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/6c4037151edd61cb313584b066e1ca79 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/6d586185a813e8684c5f4f8c76901509 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/6fac693c6eccbde54dd39a5346a17795 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/7046170cbc635a51f15a2fd233cd3a9a +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/710d01e35d3ed05436fc147fc9812c11 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/718bd7b3b79761648c0189b0bb1a7c66 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/72f2ad6a628692922c1df934c7936ada +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/7321581cff8c39b5facc2ad1d4199612 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/775ff6f166a14c9c033dfdb5607c9636 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/77679fbf4182f999a442c39af05f45f8 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/7772ce8d6dd3ef1168110de0a6c10abd +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/793531ed1abf292ae64bda64a55dd2f4 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/7adb4f2b567f224e053ccb04c28a35eb +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/7bc99f8531b4485710faeee593166533 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/7bf478cd8afa28bc218eca40f254d2e1 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/7db6bbe81b6c8340fdd201ac653594d9 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/7ecfc7a95d353736efabc93863355528 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/8099cc04495d5ad8fc3842f9c370f598 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/852fb692cb3efe1b33e399dae3bf86ef +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/886f23353b9e21b3076056205a177dce +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/88b70b8abde033544479b6f2340ff71e +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/88c3f23d1be22355f7c33520660c5509 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/89a8e874d08cfbe4244d85c138ad6038 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/89c4f203a2820da990cf4a49eafbf1a0 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/8aa831d20b1255f392910cd1c8f4a28c +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/8b28271b15c4c4fda575bd3a4e4f74b1 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/8c8c8c1ff0cfc510fe182015d7434ac5 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/8cf8bc288b245b2429ed0405fd481660 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/8e42dcc7aefa852924d151abf2e7e6c1 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/8ebc8c58233ab12eee6edfc0feca2492 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/8fb8b09fa416ad2d9ab9b159f7b0a899 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/906e74f34706bce5e8fef1dd4767a131 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/91e1869728c5050bc849e555ce1988e7 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/95de9cef9d0ff722b4dc8eb23451a807 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/96810adc9f3a9a1c1bbf54814f649e42 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/975b498c626717504e487d848a70c7e0 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/97c11dd89708841479148008c34005ec +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/987957ae03ced9fff088f7a19748bc74 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/99ab6ebc5d61383f810287cc74fcdbb9 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/9a875c88481e2d53f5c249cc4acd6018 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/9d39b3fcf086f350b30bd73e86e4d976 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/9d55ee6b4e9674f9fddeb9a4727c9084 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/9dc0cbc69cd2c6dce076e5ea6a3651a2 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/9eb50f68fb4418df7860e3df4e8647b4 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/9f5e4c9e2daa2fd45246135c99f01509 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/9f760111b547264ef7ca7885c6a77466 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/9f8009e93b65f35cb6167d749f963476 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/9f895ffe0a7ff3ab6d1f21c34f021cec +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/a0a9793653f72971df5333971af113d4 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/a0d4d1565c853652662f6bad39d00b4c +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/a136ee2b8fb74ee5d30378a374c22f3b +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/a1fd1034ae16d33292e1f73f75113f04 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/a65830b2fc6ebb1b5d5aafa38847f1c2 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/a6613cb28bb9bda909e818c9dabda1d1 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/a73670c606b6495d2c5fa68ab021b110 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/a7ad947e6f3a1e3c5f7c7f1ba2830a22 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/a8a327d32373b4335667206d19f042b1 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/a9648a765fed0738b076bd24099109a3 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/ab26323068f77b2f0d2c16e9f66288a1 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/ad4490686c57d2eb25ed3f99c9ea39c3 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/aee731d32c121990e31f5d68a034087c +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/b2015ea2290a27920d1a5b872c2ebde1 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/b2be916e010058f87f9fd484fad599a3 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/b566b85043412c7c5f600929543544f1 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/b64b2ef188a76f97d0e4b82358e9148d +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/b92d02f74337d1b255e8405aa5d62189 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/be0fe76ebb304256db992362f9fc8228 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/be9bbd2e4f4d9711bc483c3cf230ec6e +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/bfbb0dd7d2e0f641cddb16994bb507d9 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/c07430879f13129e2effbb47ede61618 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/c1877ea0f62c92c885c76713cfe3c82d +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/c28281ffeb723fa28495ef556c557a22 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/c362f64f02f137c3937eccd575d4f31b +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/c3dd754c803e3f32c139eedce6233772 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/c43a1989c268b5844b7676a3cf7d378b +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/c5348a26b2c297ab5889ae73637d25f5 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/c7a04cc7805eba56ebba93120225763c +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/c8c4c1b316845f30168739b5795846d6 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/cc0fd9cf6eb1a82ae9b2b8ad81244035 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/cc52477f6be74a37d0b39ab009804c20 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/ccb95c683cf313ad174fbf9fee3ef4b0 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/ce76f61efc5296b76def34ab78730fc7 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/cea8867ce266b545d9f17a7e6b06d0b7 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/cf30721780868ab370fc70e707649a28 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/d0f099f88c45a76b27b2673ae1022c7c +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/d395fe077c5c94c1bb4e614bc7c8b86d +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/d4ec2eb97b872d3b50052ab27dcd4e03 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/d75682e5e9727c3bc417517944521579 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/d89d2c001862ea8ad82717e98c8053ff +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/d8f5f1c7f3a91ceab9105589757ee925 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/dd855d74d3af81e354b2575f7ae1bb7c +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/dda9a60cee77db7f1c9005e6aedf15c4 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/ddf96d93d5c2ed2884db3ef9ed9deee5 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/de53fe5f77c008da07d1fd63b9e13417 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/e1ac04dc134267c818b73ae2bdf561da +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/e28cc82b7abf4f6b6f43aa24e4b2760a +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/e3317328f38868bbbfe90f75151afa2b +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/e383447a775cdea087b07afe27ec5fcf +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/e411a2f57978dfd7a700e2e11cc18484 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/e55198eac891bbb0bfc98ef7ad095674 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/e6f95dbc64cc12ee3eac2bfdab8a10f2 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/e7b3430e063930d966796d6deeac5afb +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/e944ae1af382e6fa7bafacb52dc3d446 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/e9ccdd01928a9f7ad24b8cae6cadb30d +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/eac0749c781be78064d69e6ebe7a5b93 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/ead1564499c3c5590a6bb4c7399cc15c +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/ed3b4296b4342de62dceb8aa09c84972 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/eeb8644081bf2a1e50342ed7847f170b +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/ef7cff62ef5f81d217b7b08e2e9b1acf +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/f0e98cce3b04b7496dfb9abc3cbb997e +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/f442e3d6a56eb466469e033205299c08 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/f5e9bb68665aed5a27bdf2b2a66c81de +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/f678d58a741fef36c848e1f1bfbc2f21 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/f77b040af039273989c26d806db1ce9b +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/f8e63775bae7f226ec296177be6ca8ed +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/fa01a50da660614bd1fd691d70faffab +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/fa2afb49c0fe605d48d92fb011b1325d +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/fc4c248705c8d53f522afbaa47265569 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/fdd7bc67106a7c5d0d8912519d463f4d +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/fdfd7e17f67d5b3f03c50d1686928177 +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/07921f743ac03b1f16c8610a85b27a8051687f6b/_button.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/07921f743ac03b1f16c8610a85b27a8051687f6b/_clearfix.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/07921f743ac03b1f16c8610a85b27a8051687f6b/_font-family.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/07921f743ac03b1f16c8610a85b27a8051687f6b/_hide-text.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/07921f743ac03b1f16c8610a85b27a8051687f6b/_html5-input-types.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/07921f743ac03b1f16c8610a85b27a8051687f6b/_position.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/07921f743ac03b1f16c8610a85b27a8051687f6b/_prefixer.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/07921f743ac03b1f16c8610a85b27a8051687f6b/_retina-image.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/07921f743ac03b1f16c8610a85b27a8051687f6b/_size.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/07921f743ac03b1f16c8610a85b27a8051687f6b/_timing-functions.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/07921f743ac03b1f16c8610a85b27a8051687f6b/_triangle.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/0b8483437e27ce81f53b75759a3a5d94f92b66a2/_bourbon.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/0b8483437e27ce81f53b75759a3a5d94f92b66a2/_neat.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/0b8483437e27ce81f53b75759a3a5d94f92b66a2/font-awesome.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/21fd1683fd80d7894dd681f2a5e0b5e886e5b924/post.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/2c46632a039be6e399018f6c2a4447b940c04379/_bordered-pulled.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/2c46632a039be6e399018f6c2a4447b940c04379/_core.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/2c46632a039be6e399018f6c2a4447b940c04379/_fixed-width.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/2c46632a039be6e399018f6c2a4447b940c04379/_icons.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/2c46632a039be6e399018f6c2a4447b940c04379/_larger.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/2c46632a039be6e399018f6c2a4447b940c04379/_list.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/2c46632a039be6e399018f6c2a4447b940c04379/_mixins.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/2c46632a039be6e399018f6c2a4447b940c04379/_path.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/2c46632a039be6e399018f6c2a4447b940c04379/_rotated-flipped.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/2c46632a039be6e399018f6c2a4447b940c04379/_spinning.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/2c46632a039be6e399018f6c2a4447b940c04379/_stacked.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/2c46632a039be6e399018f6c2a4447b940c04379/_variables.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/37b3a50d25c898dbca066a1bc8b29de6b6d4c47b/_deprecated-webkit-gradient.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/37b3a50d25c898dbca066a1bc8b29de6b6d4c47b/_gradient-positions-parser.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/37b3a50d25c898dbca066a1bc8b29de6b6d4c47b/_linear-positions-parser.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/37b3a50d25c898dbca066a1bc8b29de6b6d4c47b/_radial-arg-parser.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/37b3a50d25c898dbca066a1bc8b29de6b6d4c47b/_radial-positions-parser.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/37b3a50d25c898dbca066a1bc8b29de6b6d4c47b/_render-gradients.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/37b3a50d25c898dbca066a1bc8b29de6b6d4c47b/_shape-size-stripper.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/3be4963cb1c563e597c71b09139a24543d3b2819/_variables.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/3be4963cb1c563e597c71b09139a24543d3b2819/application.css.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/41cced0dfa1e19edfeb39bf9dd9403889328aff7/_fill-parent.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/41cced0dfa1e19edfeb39bf9dd9403889328aff7/_grid.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/41cced0dfa1e19edfeb39bf9dd9403889328aff7/_media.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/41cced0dfa1e19edfeb39bf9dd9403889328aff7/_omega.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/41cced0dfa1e19edfeb39bf9dd9403889328aff7/_outer-container.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/41cced0dfa1e19edfeb39bf9dd9403889328aff7/_pad.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/41cced0dfa1e19edfeb39bf9dd9403889328aff7/_private.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/41cced0dfa1e19edfeb39bf9dd9403889328aff7/_reset.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/41cced0dfa1e19edfeb39bf9dd9403889328aff7/_row.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/41cced0dfa1e19edfeb39bf9dd9403889328aff7/_shift.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/41cced0dfa1e19edfeb39bf9dd9403889328aff7/_span-columns.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/41cced0dfa1e19edfeb39bf9dd9403889328aff7/_to-deprecate.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/41cced0dfa1e19edfeb39bf9dd9403889328aff7/_visual-grid.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/45854bbd858f3f86b0a584dfaf9bab704c8297c6/_new-breakpoint.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/45854bbd858f3f86b0a584dfaf9bab704c8297c6/_private.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/80dd986b754d1ad645c2b6fbc04a7591de921a71/_compact.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/80dd986b754d1ad645c2b6fbc04a7591de921a71/_flex-grid.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/80dd986b754d1ad645c2b6fbc04a7591de921a71/_grid-width.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/80dd986b754d1ad645c2b6fbc04a7591de921a71/_linear-gradient.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/80dd986b754d1ad645c2b6fbc04a7591de921a71/_modular-scale.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/80dd986b754d1ad645c2b6fbc04a7591de921a71/_px-to-em.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/80dd986b754d1ad645c2b6fbc04a7591de921a71/_radial-gradient.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/80dd986b754d1ad645c2b6fbc04a7591de921a71/_tint-shade.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/80dd986b754d1ad645c2b6fbc04a7591de921a71/_transition-property-name.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/97963dc217c21292bf44715cd5d7413261d0adaa/_bourbon-deprecated-upcoming.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/b70a674b159e0032279f472ea6d42a76c3e47c19/blogelator_button.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/b70a674b159e0032279f472ea6d42a76c3e47c19/blogelator_logo.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/b7dbb1c3deaab5164c4bca07f653866f08bca0c7/code_highlighting.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/b7dbb1c3deaab5164c4bca07f653866f08bca0c7/forms.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/b7dbb1c3deaab5164c4bca07f653866f08bca0c7/headings.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/b7dbb1c3deaab5164c4bca07f653866f08bca0c7/lists.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/ba99e5ab418fb834c6e49ce31afd3075de4d50db/_grid.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/ba99e5ab418fb834c6e49ce31afd3075de4d50db/_visual-grid.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/c1ce53a77acbf2341c879195eb20239272a8b087/all.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/c1ce53a77acbf2341c879195eb20239272a8b087/layout.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/cd9238e64a3f5e261455709885c1b1a6bcfd40f5/_animation.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/cd9238e64a3f5e261455709885c1b1a6bcfd40f5/_appearance.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/cd9238e64a3f5e261455709885c1b1a6bcfd40f5/_backface-visibility.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/cd9238e64a3f5e261455709885c1b1a6bcfd40f5/_background-image.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/cd9238e64a3f5e261455709885c1b1a6bcfd40f5/_background.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/cd9238e64a3f5e261455709885c1b1a6bcfd40f5/_border-image.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/cd9238e64a3f5e261455709885c1b1a6bcfd40f5/_border-radius.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/cd9238e64a3f5e261455709885c1b1a6bcfd40f5/_box-sizing.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/cd9238e64a3f5e261455709885c1b1a6bcfd40f5/_columns.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/cd9238e64a3f5e261455709885c1b1a6bcfd40f5/_flex-box.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/cd9238e64a3f5e261455709885c1b1a6bcfd40f5/_font-face.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/cd9238e64a3f5e261455709885c1b1a6bcfd40f5/_hidpi-media-query.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/cd9238e64a3f5e261455709885c1b1a6bcfd40f5/_image-rendering.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/cd9238e64a3f5e261455709885c1b1a6bcfd40f5/_inline-block.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/cd9238e64a3f5e261455709885c1b1a6bcfd40f5/_keyframes.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/cd9238e64a3f5e261455709885c1b1a6bcfd40f5/_linear-gradient.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/cd9238e64a3f5e261455709885c1b1a6bcfd40f5/_perspective.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/cd9238e64a3f5e261455709885c1b1a6bcfd40f5/_placeholder.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/cd9238e64a3f5e261455709885c1b1a6bcfd40f5/_radial-gradient.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/cd9238e64a3f5e261455709885c1b1a6bcfd40f5/_transform.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/cd9238e64a3f5e261455709885c1b1a6bcfd40f5/_transition.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/cd9238e64a3f5e261455709885c1b1a6bcfd40f5/_user-select.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/d0967d53bf90082006477ee97c33804093680157/index.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/d0967d53bf90082006477ee97c33804093680157/show.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sass/faa8931c2712754847644594af58d6dafcb7eba6/_neat-helpers.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/{development/sprockets/243a09d063adc2c1bf9c84a015b4deae → test/sprockets/014f2aa73071096a708e79e83a4de78c} +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sprockets/03ee17815887f7f9572e7846347b73ad +0 -0
- data/spec/dummy/tmp/cache/assets/{development/sprockets/220178fefb8edca0ad305f035bcf755f → test/sprockets/07bcf8deb56158c6ac1e2b67dd08a58f} +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sprockets/0b162b0585e479967a196493d24c9c31 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/0b388d9b94f431857e6113f620e7f0ab +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/11a4b58bdf1e66237f1ad0ffddbc9d81 +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sprockets/1642cb2980f0d6138a107f39e9b029ac +0 -0
- data/spec/dummy/tmp/cache/assets/{development/sprockets/06610a7a54fafe2fc26fcd24ffc25d6c → test/sprockets/18541c8a2f4dd2ad65967ac01540b5e5} +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sprockets/1c911dda22afcac8e8b6b68de4f40cac +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sprockets/1dfaa29320fac6e3f39174823f26ce4e +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/20bd84682bd4ad3230cb82210d277318 +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sprockets/2bcb59581cfc2be9512e3653b1b83921 +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sprockets/2c7aca493752ef3d0f2703c4afdeec35 +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sprockets/2cb791441267f115aa66746962037d14 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/31ff4fd075fbadfc861af13fa40e3fc6 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/32290d48b6752b0790c7d40155a269a3 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/4f929ac9fa380b32ac71e967031ce99e +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/4f9f2ec9f45bcb2b0314409f4ed8d314 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/516b084be1daee008f2ee724442c2572 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/59cac6b69b1e6be1078b191e0a426617 +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sprockets/5dccf598e9581501f947944ab7ea77f8 +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sprockets/5fed700ff4f114325222352b4a9eb173 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/6a0de03f92b58421c222ff15037aa805 +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sprockets/717a204b713a195d5144254a6c5f8eef +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sprockets/7a89f6daba9fe362c5c272ee22f29114 +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sprockets/876c20900cfbc139f2bcc806b9920bc0 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/8c58f5e9fc13afdcf8a7347ea5b6433f +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/94737fda0d9284d7e802606d616d4d06 +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sprockets/98c63563b5427dfac401489800970502 +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sprockets/a57aae0412ef4b230257432da5013077 +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sprockets/b24cd42a9549ae6c7654bbfcc4daf4fc +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/bf5947432e5c44e62273ea61a0293420 +0 -0
- data/spec/dummy/tmp/cache/assets/{development/sprockets/3ed3b2471b145dde7066f62e9943a664 → test/sprockets/c348ad210d6130dd55fd6affe02771a9} +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/c920365528fa0e293905ee4ebe14d0b4 +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sprockets/cb25bb8c2cebf1ab8cbfd41bdae0e83a +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/e13d9fe9bfdbecc97bfc1b6e29c0fdde +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sprockets/f54685839a569bf8fc641548a69ac0ba +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/f8ffdf212392f071a81075cd04868690 +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sprockets/f9b9728da11c0c9be6ffbb4a37a2b543 +0 -0
- data/spec/dummy/tmp/cache/assets/{development → test}/sprockets/fba2381f8cbae687c6e72ca4dd779af3 +0 -0
- data/spec/dummy/tmp/ember-rails/ember-data.js +8964 -9892
- data/spec/dummy/tmp/ember-rails/ember.js +1390 -179
- data/spec/{dummy/app/assets/javascripts → javascripts}/features/user_visits_admin_page_spec.js +0 -0
- data/spec/{dummy/app/assets/javascripts → javascripts}/features/user_visits_post_page_spec.js +0 -0
- data/spec/{dummy/app/assets/javascripts → javascripts}/fixtures/post.js +6 -6
- data/spec/javascripts/spec_helper.js +37 -0
- data/spec/teaspoon_env.rb +40 -0
- data/vendor/assets/javascripts/blogelator/ember-data.js +12 -0
- data/vendor/assets/javascripts/blogelator/ember.js +22 -0
- metadata +773 -434
- data/spec/dummy/app/assets/javascripts/test_helper.js +0 -12
- data/spec/dummy/tmp/cache/assets/development/sprockets/0b388d9b94f431857e6113f620e7f0ab +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/11a4b58bdf1e66237f1ad0ffddbc9d81 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/18541c8a2f4dd2ad65967ac01540b5e5 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/1a74619c045ead4f6c12d8fc82c8aca9 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/20bd84682bd4ad3230cb82210d277318 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/2e8caa7e10cf5e9f57a6e30591e14157 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/31ff4fd075fbadfc861af13fa40e3fc6 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/32290d48b6752b0790c7d40155a269a3 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/41eec45d61cb4b25a78069f86a0846d6 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/423852439fdd3ebb9e12cb1478647b7a +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/4f929ac9fa380b32ac71e967031ce99e +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/4f9f2ec9f45bcb2b0314409f4ed8d314 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/516b084be1daee008f2ee724442c2572 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/59cac6b69b1e6be1078b191e0a426617 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/69af9db22ca680482e3b0fd69d77e381 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/6a0de03f92b58421c222ff15037aa805 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/892abc349986f4ebdd38a0606c2a7b47 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/8c58f5e9fc13afdcf8a7347ea5b6433f +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/94737fda0d9284d7e802606d616d4d06 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/96e4483c40e54e5cdef2e7baf5572cca +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/a234af77d7c2b510167d2448c4db2b02 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/bf5947432e5c44e62273ea61a0293420 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/c348ad210d6130dd55fd6affe02771a9 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/c920365528fa0e293905ee4ebe14d0b4 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/e13d9fe9bfdbecc97bfc1b6e29c0fdde +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/f7555b4d036360dedd6a3f1e75df2ae0 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/f8ffdf212392f071a81075cd04868690 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/fe17a0ac115f8c03036161dfae02e31b +0 -0
- data/spec/qunit_runner.js +0 -148
- data/vendor/assets/stylesheets/blogelator/_neat-helpers.scss +0 -7
- data/vendor/assets/stylesheets/blogelator/functions/_new-breakpoint.scss +0 -16
- data/vendor/assets/stylesheets/blogelator/functions/_private.scss +0 -125
- data/vendor/assets/stylesheets/blogelator/grid/_fill-parent.scss +0 -7
- data/vendor/assets/stylesheets/blogelator/grid/_grid.scss +0 -5
- data/vendor/assets/stylesheets/blogelator/grid/_media.scss +0 -51
- data/vendor/assets/stylesheets/blogelator/grid/_omega.scss +0 -79
- data/vendor/assets/stylesheets/blogelator/grid/_outer-container.scss +0 -8
- data/vendor/assets/stylesheets/blogelator/grid/_pad.scss +0 -8
- data/vendor/assets/stylesheets/blogelator/grid/_private.scss +0 -50
- data/vendor/assets/stylesheets/blogelator/grid/_reset.scss +0 -12
- data/vendor/assets/stylesheets/blogelator/grid/_row.scss +0 -17
- data/vendor/assets/stylesheets/blogelator/grid/_shift.scss +0 -16
- data/vendor/assets/stylesheets/blogelator/grid/_span-columns.scss +0 -45
- data/vendor/assets/stylesheets/blogelator/grid/_to-deprecate.scss +0 -57
- data/vendor/assets/stylesheets/blogelator/grid/_visual-grid.scss +0 -41
- data/vendor/assets/stylesheets/blogelator/settings/_grid.scss +0 -7
- data/vendor/assets/stylesheets/blogelator/settings/_visual-grid.scss +0 -5
@@ -5,7 +5,7 @@
|
|
5
5
|
* Portions Copyright 2008-2011 Apple Inc. All rights reserved.
|
6
6
|
* @license Licensed under MIT license
|
7
7
|
* See https://raw.github.com/emberjs/ember.js/master/LICENSE
|
8
|
-
* @version 1.5.0
|
8
|
+
* @version 1.5.0
|
9
9
|
*/
|
10
10
|
|
11
11
|
|
@@ -175,6 +175,27 @@ Ember.deprecateFunc = function(message, func) {
|
|
175
175
|
};
|
176
176
|
|
177
177
|
|
178
|
+
/**
|
179
|
+
Run a function meant for debugging. Ember build tools will remove any calls to
|
180
|
+
`Ember.runInDebug()` when doing a production build.
|
181
|
+
|
182
|
+
```javascript
|
183
|
+
Ember.runInDebug( function() {
|
184
|
+
Ember.Handlebars.EachView.reopen({
|
185
|
+
didInsertElement: function() {
|
186
|
+
console.log("I'm happy");
|
187
|
+
}
|
188
|
+
});
|
189
|
+
});
|
190
|
+
```
|
191
|
+
|
192
|
+
@method runInDebug
|
193
|
+
@param {Function} func The function to be executed.
|
194
|
+
*/
|
195
|
+
Ember.runInDebug = function(func) {
|
196
|
+
func()
|
197
|
+
};
|
198
|
+
|
178
199
|
// Inform the developer about the Ember Inspector if not installed.
|
179
200
|
if (!Ember.testing) {
|
180
201
|
var isFirefox = typeof InstallTrigger !== 'undefined';
|
@@ -188,7 +209,7 @@ if (!Ember.testing) {
|
|
188
209
|
if(isChrome) {
|
189
210
|
downloadURL = 'https://chrome.google.com/webstore/detail/ember-inspector/bmdblncegkenkacieihfhpjfppoconhi';
|
190
211
|
} else if(isFirefox) {
|
191
|
-
downloadURL = 'https://addons.mozilla.org/en-US/firefox/addon/ember-inspector/'
|
212
|
+
downloadURL = 'https://addons.mozilla.org/en-US/firefox/addon/ember-inspector/';
|
192
213
|
}
|
193
214
|
|
194
215
|
Ember.debug('For more advanced debugging, install the Ember Inspector from ' + downloadURL);
|
@@ -206,7 +227,7 @@ if (!Ember.testing) {
|
|
206
227
|
* Portions Copyright 2008-2011 Apple Inc. All rights reserved.
|
207
228
|
* @license Licensed under MIT license
|
208
229
|
* See https://raw.github.com/emberjs/ember.js/master/LICENSE
|
209
|
-
* @version 1.5.0
|
230
|
+
* @version 1.5.0
|
210
231
|
*/
|
211
232
|
|
212
233
|
|
@@ -289,7 +310,7 @@ var define, requireModule, require, requirejs;
|
|
289
310
|
|
290
311
|
@class Ember
|
291
312
|
@static
|
292
|
-
@version 1.5.0
|
313
|
+
@version 1.5.0
|
293
314
|
*/
|
294
315
|
|
295
316
|
if ('undefined' === typeof Ember) {
|
@@ -316,10 +337,10 @@ Ember.toString = function() { return "Ember"; };
|
|
316
337
|
/**
|
317
338
|
@property VERSION
|
318
339
|
@type String
|
319
|
-
@default '1.5.0
|
340
|
+
@default '1.5.0'
|
320
341
|
@static
|
321
342
|
*/
|
322
|
-
Ember.VERSION = '1.5.0
|
343
|
+
Ember.VERSION = '1.5.0';
|
323
344
|
|
324
345
|
/**
|
325
346
|
Standard environmental variables. You can define these in a global `EmberENV`
|
@@ -462,6 +483,7 @@ Ember.K = function() { return this; };
|
|
462
483
|
if ('undefined' === typeof Ember.assert) { Ember.assert = Ember.K; }
|
463
484
|
if ('undefined' === typeof Ember.warn) { Ember.warn = Ember.K; }
|
464
485
|
if ('undefined' === typeof Ember.debug) { Ember.debug = Ember.K; }
|
486
|
+
if ('undefined' === typeof Ember.runInDebug) { Ember.runInDebug = Ember.K; }
|
465
487
|
if ('undefined' === typeof Ember.deprecate) { Ember.deprecate = Ember.K; }
|
466
488
|
if ('undefined' === typeof Ember.deprecateFunc) {
|
467
489
|
Ember.deprecateFunc = function(_, func) { return func; };
|
@@ -1093,6 +1115,7 @@ function Meta(obj) {
|
|
1093
1115
|
this.descs = {};
|
1094
1116
|
this.watching = {};
|
1095
1117
|
this.cache = {};
|
1118
|
+
this.cacheMeta = {};
|
1096
1119
|
this.source = obj;
|
1097
1120
|
}
|
1098
1121
|
|
@@ -1102,6 +1125,7 @@ Meta.prototype = {
|
|
1102
1125
|
watching: null,
|
1103
1126
|
listeners: null,
|
1104
1127
|
cache: null,
|
1128
|
+
cacheMeta: null,
|
1105
1129
|
source: null,
|
1106
1130
|
mixins: null,
|
1107
1131
|
bindings: null,
|
@@ -1169,10 +1193,11 @@ Ember.meta = function meta(obj, writable) {
|
|
1169
1193
|
if (!isDefinePropertySimulated) o_defineProperty(obj, META_KEY, META_DESC);
|
1170
1194
|
|
1171
1195
|
ret = o_create(ret);
|
1172
|
-
ret.descs
|
1173
|
-
ret.watching
|
1174
|
-
ret.cache
|
1175
|
-
ret.
|
1196
|
+
ret.descs = o_create(ret.descs);
|
1197
|
+
ret.watching = o_create(ret.watching);
|
1198
|
+
ret.cache = {};
|
1199
|
+
ret.cacheMeta = {};
|
1200
|
+
ret.source = obj;
|
1176
1201
|
|
1177
1202
|
if (MANDATORY_SETTER) { ret.values = o_create(ret.values); }
|
1178
1203
|
|
@@ -2029,12 +2054,12 @@ var utils = Ember.EnumerableUtils = {
|
|
2029
2054
|
* @param {Array} array The array the objects should be inserted into.
|
2030
2055
|
* @param {Number} idx Starting index in the array to replace. If *idx* >=
|
2031
2056
|
* length, then append to the end of the array.
|
2032
|
-
* @param {Number} amt Number of elements that should be
|
2057
|
+
* @param {Number} amt Number of elements that should be removed from the array,
|
2033
2058
|
* starting at *idx*
|
2034
2059
|
* @param {Array} objects An array of zero or more objects that should be
|
2035
2060
|
* inserted into the array at *idx*
|
2036
2061
|
*
|
2037
|
-
* @return {Array} The
|
2062
|
+
* @return {Array} The modified array.
|
2038
2063
|
*/
|
2039
2064
|
replace: function(array, idx, amt, objects) {
|
2040
2065
|
if (array.replace) {
|
@@ -5826,6 +5851,7 @@ function beforeEvent(keyName) {
|
|
5826
5851
|
|
5827
5852
|
/**
|
5828
5853
|
@method addObserver
|
5854
|
+
@for Ember
|
5829
5855
|
@param obj
|
5830
5856
|
@param {String} path
|
5831
5857
|
@param {Object|Function} targetOrMethod
|
@@ -5844,6 +5870,7 @@ Ember.observersFor = function(obj, path) {
|
|
5844
5870
|
|
5845
5871
|
/**
|
5846
5872
|
@method removeObserver
|
5873
|
+
@for Ember
|
5847
5874
|
@param obj
|
5848
5875
|
@param {String} path
|
5849
5876
|
@param {Object|Function} targetOrMethod
|
@@ -5858,6 +5885,7 @@ Ember.removeObserver = function(obj, _path, target, method) {
|
|
5858
5885
|
|
5859
5886
|
/**
|
5860
5887
|
@method addBeforeObserver
|
5888
|
+
@for Ember
|
5861
5889
|
@param obj
|
5862
5890
|
@param {String} path
|
5863
5891
|
@param {Object|Function} targetOrMethod
|
@@ -5900,6 +5928,7 @@ Ember.beforeObserversFor = function(obj, path) {
|
|
5900
5928
|
|
5901
5929
|
/**
|
5902
5930
|
@method removeBeforeObserver
|
5931
|
+
@for Ember
|
5903
5932
|
@param obj
|
5904
5933
|
@param {String} path
|
5905
5934
|
@param {Object|Function} targetOrMethod
|
@@ -6731,9 +6760,9 @@ Ember.run.join = function(target, method /* args */) {
|
|
6731
6760
|
when called within an existing loop, no return value is possible.
|
6732
6761
|
*/
|
6733
6762
|
Ember.run.bind = function(target, method /* args*/) {
|
6734
|
-
var args = arguments;
|
6763
|
+
var args = slice.call(arguments);
|
6735
6764
|
return function() {
|
6736
|
-
return Ember.run.join.apply(Ember.run, args);
|
6765
|
+
return Ember.run.join.apply(Ember.run, args.concat(slice.call(arguments)));
|
6737
6766
|
};
|
6738
6767
|
};
|
6739
6768
|
|
@@ -7065,8 +7094,6 @@ Ember.run.next = function() {
|
|
7065
7094
|
// the 100ms delay until this method can be called again will be cancelled
|
7066
7095
|
Ember.run.cancel(debounceImmediate);
|
7067
7096
|
```
|
7068
|
-
```
|
7069
|
-
```
|
7070
7097
|
|
7071
7098
|
@method cancel
|
7072
7099
|
@param {Object} timer Timer object to cancel
|
@@ -7137,7 +7164,7 @@ Ember.run.cancel = function(timer) {
|
|
7137
7164
|
then it will be looked up on the passed target.
|
7138
7165
|
@param {Object} [args*] Optional arguments to pass to the timeout.
|
7139
7166
|
@param {Number} wait Number of milliseconds to wait.
|
7140
|
-
@param {Boolean} immediate Trigger the function on the leading instead
|
7167
|
+
@param {Boolean} immediate Trigger the function on the leading instead
|
7141
7168
|
of the trailing edge of the wait interval. Defaults to false.
|
7142
7169
|
@return {Array} Timer information for use in cancelling, see `Ember.run.cancel`.
|
7143
7170
|
*/
|
@@ -11769,6 +11796,8 @@ function _copy(obj, deep, seen, copies) {
|
|
11769
11796
|
}
|
11770
11797
|
} else if (Ember.Copyable && Ember.Copyable.detect(obj)) {
|
11771
11798
|
ret = obj.copy(deep, seen, copies);
|
11799
|
+
} else if (obj instanceof Date) {
|
11800
|
+
ret = new Date(obj.getTime());
|
11772
11801
|
} else {
|
11773
11802
|
ret = {};
|
11774
11803
|
for(key in obj) {
|
@@ -12875,7 +12904,7 @@ function makeCtor() {
|
|
12875
12904
|
|
12876
12905
|
var desc = m.descs[keyName];
|
12877
12906
|
|
12878
|
-
Ember.assert("Ember.Object.create no longer supports defining computed properties.", !(value instanceof Ember.ComputedProperty));
|
12907
|
+
Ember.assert("Ember.Object.create no longer supports defining computed properties. Define computed properties using extend() or reopen() before calling create().", !(value instanceof Ember.ComputedProperty));
|
12879
12908
|
Ember.assert("Ember.Object.create no longer supports defining methods that call _super.", !(typeof value === 'function' && value.toString().indexOf('._super') !== -1));
|
12880
12909
|
Ember.assert("`actions` must be provided at extend time, not at create " +
|
12881
12910
|
"time, when Ember.ActionHandler is used (i.e. views, " +
|
@@ -15391,6 +15420,9 @@ var e_get = Ember.get,
|
|
15391
15420
|
a_slice = [].slice,
|
15392
15421
|
o_create = Ember.create,
|
15393
15422
|
forEach = Ember.EnumerableUtils.forEach,
|
15423
|
+
cacheSet = Ember.cacheFor.set,
|
15424
|
+
cacheGet = Ember.cacheFor.get,
|
15425
|
+
cacheRemove = Ember.cacheFor.remove,
|
15394
15426
|
// Here we explicitly don't allow `@each.foo`; it would require some special
|
15395
15427
|
// testing, but there's no particular reason why it should be disallowed.
|
15396
15428
|
eachPropertyPattern = /^(.*)\.@each\.(.*)/,
|
@@ -15829,7 +15861,6 @@ function ReduceComputedProperty(options) {
|
|
15829
15861
|
var cp = this;
|
15830
15862
|
|
15831
15863
|
this.options = options;
|
15832
|
-
this._instanceMetas = {};
|
15833
15864
|
|
15834
15865
|
this._dependentKeys = null;
|
15835
15866
|
// A map of dependentKey -> [itemProperty, ...] that tracks what properties of
|
@@ -15841,11 +15872,10 @@ function ReduceComputedProperty(options) {
|
|
15841
15872
|
this.cacheable();
|
15842
15873
|
|
15843
15874
|
this.recomputeOnce = function(propertyName) {
|
15844
|
-
//
|
15845
|
-
|
15846
|
-
// coalesce by, in addition to the target and method.
|
15847
|
-
Ember.run.once(this, recompute, propertyName);
|
15875
|
+
// TODO: Coalesce recomputation by <this, propertyName, cp>.
|
15876
|
+
recompute.call(this, propertyName);
|
15848
15877
|
};
|
15878
|
+
|
15849
15879
|
var recompute = function(propertyName) {
|
15850
15880
|
var dependentKeys = cp._dependentKeys,
|
15851
15881
|
meta = cp._instanceMeta(this, propertyName),
|
@@ -15927,19 +15957,15 @@ ReduceComputedProperty.prototype._callbacks = function () {
|
|
15927
15957
|
};
|
15928
15958
|
|
15929
15959
|
ReduceComputedProperty.prototype._hasInstanceMeta = function (context, propertyName) {
|
15930
|
-
|
15931
|
-
key = guid + ':' + propertyName;
|
15932
|
-
|
15933
|
-
return !!this._instanceMetas[key];
|
15960
|
+
return !!metaFor(context).cacheMeta[propertyName];
|
15934
15961
|
};
|
15935
15962
|
|
15936
15963
|
ReduceComputedProperty.prototype._instanceMeta = function (context, propertyName) {
|
15937
|
-
var
|
15938
|
-
|
15939
|
-
meta = this._instanceMetas[key];
|
15964
|
+
var cacheMeta = metaFor(context).cacheMeta,
|
15965
|
+
meta = cacheMeta[propertyName];
|
15940
15966
|
|
15941
15967
|
if (!meta) {
|
15942
|
-
meta =
|
15968
|
+
meta = cacheMeta[propertyName] = new ReduceComputedPropertyInstanceMeta(context, propertyName, this.initialValue());
|
15943
15969
|
meta.dependentArraysObserver = new DependentArraysObserver(this._callbacks(), this, meta, context, propertyName, meta.sugarMeta);
|
15944
15970
|
}
|
15945
15971
|
|
@@ -16996,9 +17022,12 @@ SearchProxy = Ember.ObjectProxy.extend();
|
|
16996
17022
|
- `itemA` the first item to compare.
|
16997
17023
|
- `itemB` the second item to compare.
|
16998
17024
|
|
16999
|
-
This function should return `-1` when `itemA` should come before
|
17000
|
-
`itemB`. It should return `1` when `itemA` should come after
|
17025
|
+
This function should return negative number (e.g. `-1`) when `itemA` should come before
|
17026
|
+
`itemB`. It should return positive number (e.g. `1`) when `itemA` should come after
|
17001
17027
|
`itemB`. If the `itemA` and `itemB` are equal this function should return `0`.
|
17028
|
+
|
17029
|
+
Therefore, if this function is comparing some numeric values, simple `itemA - itemB` or
|
17030
|
+
`itemA.get( 'foo' ) - itemB.get( 'foo' )` can be used instead of series of `if`.
|
17002
17031
|
|
17003
17032
|
Example
|
17004
17033
|
|
@@ -18444,8 +18473,12 @@ var get = Ember.get, typeOf = Ember.typeOf;
|
|
18444
18473
|
property to an `_actions` property at extend time, and adding `_actions`
|
18445
18474
|
to the object's mergedProperties list.
|
18446
18475
|
|
18447
|
-
`Ember.ActionHandler` is
|
18448
|
-
`Ember.
|
18476
|
+
`Ember.ActionHandler` is available on some familiar classes including
|
18477
|
+
`Ember.Route`, `Ember.View`, `Ember.Component`, and controllers such as
|
18478
|
+
`Ember.Controller` and `Ember.ObjectController`.
|
18479
|
+
(Internally the mixin is used by `Ember.CoreView`, `Ember.ControllerMixin`,
|
18480
|
+
and `Ember.Route` and available to the above classes through
|
18481
|
+
inheritance.)
|
18449
18482
|
|
18450
18483
|
@class ActionHandler
|
18451
18484
|
@namespace Ember
|
@@ -19549,6 +19582,10 @@ Ember.ArrayProxy = Ember.Object.extend(Ember.MutableArray, {
|
|
19549
19582
|
var content = get(this, 'content');
|
19550
19583
|
|
19551
19584
|
if (content) {
|
19585
|
+
Ember.assert(Ember.String.fmt('ArrayProxy expects an Array or ' +
|
19586
|
+
'Ember.ArrayProxy, but you passed %@', [typeof content]),
|
19587
|
+
Ember.isArray(content) || content.isDestroyed);
|
19588
|
+
|
19552
19589
|
content.addArrayObserver(this, {
|
19553
19590
|
willChange: 'contentArrayWillChange',
|
19554
19591
|
didChange: 'contentArrayDidChange'
|
@@ -19582,6 +19619,10 @@ Ember.ArrayProxy = Ember.Object.extend(Ember.MutableArray, {
|
|
19582
19619
|
var arrangedContent = get(this, 'arrangedContent');
|
19583
19620
|
|
19584
19621
|
if (arrangedContent) {
|
19622
|
+
Ember.assert(Ember.String.fmt('ArrayProxy expects an Array or ' +
|
19623
|
+
'Ember.ArrayProxy, but you passed %@', [typeof arrangedContent]),
|
19624
|
+
Ember.isArray(arrangedContent) || arrangedContent.isDestroyed);
|
19625
|
+
|
19585
19626
|
arrangedContent.addArrayObserver(this, {
|
19586
19627
|
willChange: 'arrangedContentArrayWillChange',
|
19587
19628
|
didChange: 'arrangedContentArrayDidChange'
|
@@ -20605,6 +20646,8 @@ Ember.Deferred = Deferred;
|
|
20605
20646
|
|
20606
20647
|
|
20607
20648
|
(function() {
|
20649
|
+
/*globals CustomEvent */
|
20650
|
+
|
20608
20651
|
var forEach = Ember.ArrayPolyfills.forEach;
|
20609
20652
|
|
20610
20653
|
/**
|
@@ -20656,6 +20699,11 @@ Ember.onLoad = function(name, callback) {
|
|
20656
20699
|
Ember.runLoadHooks = function(name, object) {
|
20657
20700
|
loaded[name] = object;
|
20658
20701
|
|
20702
|
+
if (typeof window === 'object' && typeof window.dispatchEvent === 'function' && typeof CustomEvent === "function") {
|
20703
|
+
var event = new CustomEvent(name, {detail: object, name: name});
|
20704
|
+
window.dispatchEvent(event);
|
20705
|
+
}
|
20706
|
+
|
20659
20707
|
if (loadHooks[name]) {
|
20660
20708
|
forEach.call(loadHooks[name], function(callback) {
|
20661
20709
|
callback(object);
|
@@ -21315,7 +21363,7 @@ Ember Runtime
|
|
21315
21363
|
@submodule ember-views
|
21316
21364
|
*/
|
21317
21365
|
|
21318
|
-
var jQuery = (
|
21366
|
+
var jQuery = (Ember.imports && Ember.imports.jQuery) || (this && this.jQuery);
|
21319
21367
|
if (!jQuery && typeof require === 'function') {
|
21320
21368
|
jQuery = require('jquery');
|
21321
21369
|
}
|
@@ -26037,6 +26085,8 @@ Ember.CollectionView.CONTAINER_MAP = {
|
|
26037
26085
|
|
26038
26086
|
|
26039
26087
|
(function() {
|
26088
|
+
var get = Ember.get;
|
26089
|
+
|
26040
26090
|
/**
|
26041
26091
|
The ComponentTemplateDeprecation mixin is used to provide a useful
|
26042
26092
|
deprecation warning when using either `template` or `templateName` with
|
@@ -26071,7 +26121,7 @@ Ember.ComponentTemplateDeprecation = Ember.Mixin.create({
|
|
26071
26121
|
this._super.apply(this, arguments);
|
26072
26122
|
|
26073
26123
|
var deprecatedProperty, replacementProperty,
|
26074
|
-
layoutSpecified = (props.layoutName || props.layout);
|
26124
|
+
layoutSpecified = (props.layoutName || props.layout || get(this, 'layoutName'));
|
26075
26125
|
|
26076
26126
|
if (props.templateName && !layoutSpecified) {
|
26077
26127
|
deprecatedProperty = 'templateName';
|
@@ -27075,7 +27125,7 @@ Ember.Handlebars.helper = function(name, value) {
|
|
27075
27125
|
involving helper/component registration.
|
27076
27126
|
|
27077
27127
|
@private
|
27078
|
-
@method
|
27128
|
+
@method makeViewHelper
|
27079
27129
|
@for Ember.Handlebars
|
27080
27130
|
@param {Function} ViewClass view class constructor
|
27081
27131
|
*/
|
@@ -27165,7 +27215,7 @@ Ember.Handlebars.JavaScriptCompiler.stringifyLastBlockHelperMissingInvocation =
|
|
27165
27215
|
matches = INVOCATION_SPLITTING_REGEX.exec(helperInvocation);
|
27166
27216
|
|
27167
27217
|
source[source.length - 1] = matches[1] + "'" + helperName + "'" + matches[3];
|
27168
|
-
}
|
27218
|
+
};
|
27169
27219
|
var stringifyBlockHelperMissing = Ember.Handlebars.JavaScriptCompiler.stringifyLastBlockHelperMissingInvocation;
|
27170
27220
|
|
27171
27221
|
var originalBlockValue = Ember.Handlebars.JavaScriptCompiler.prototype.blockValue;
|
@@ -30008,6 +30058,24 @@ Ember.Handlebars.EachView = Ember.CollectionView.extend(Ember._Metamorph, {
|
|
30008
30058
|
}
|
30009
30059
|
});
|
30010
30060
|
|
30061
|
+
// Defeatureify doesn't seem to like nested functions that need to be removed
|
30062
|
+
function _addMetamorphCheck() {
|
30063
|
+
Ember.Handlebars.EachView.reopen({
|
30064
|
+
_checkMetamorph: Ember.on('didInsertElement', function() {
|
30065
|
+
Ember.assert("The metamorph tags, " +
|
30066
|
+
this.morph.start + " and " + this.morph.end +
|
30067
|
+
", have different parents.\nThe browser has fixed your template to output valid HTML (for example, check that you have properly closed all tags and have used a TBODY tag when creating a table with '{{#each}}')",
|
30068
|
+
document.getElementById( this.morph.start ).parentNode ===
|
30069
|
+
document.getElementById( this.morph.end ).parentNode
|
30070
|
+
);
|
30071
|
+
})
|
30072
|
+
});
|
30073
|
+
}
|
30074
|
+
|
30075
|
+
Ember.runInDebug( function() {
|
30076
|
+
_addMetamorphCheck();
|
30077
|
+
});
|
30078
|
+
|
30011
30079
|
var GroupedEach = Ember.Handlebars.GroupedEach = function(context, path, options) {
|
30012
30080
|
var self = this,
|
30013
30081
|
normalized = Ember.Handlebars.normalizePath(context, path, options.data);
|
@@ -34672,6 +34740,8 @@ function DSL(name) {
|
|
34672
34740
|
|
34673
34741
|
DSL.prototype = {
|
34674
34742
|
resource: function(name, options, callback) {
|
34743
|
+
Ember.assert("'basic' cannot be used as a resource name.", name !== 'basic');
|
34744
|
+
|
34675
34745
|
if (arguments.length === 2 && typeof options === 'function') {
|
34676
34746
|
callback = options;
|
34677
34747
|
options = {};
|
@@ -34706,6 +34776,8 @@ DSL.prototype = {
|
|
34706
34776
|
},
|
34707
34777
|
|
34708
34778
|
route: function(name, options) {
|
34779
|
+
Ember.assert("'basic' cannot be used as a route name.", name !== 'basic');
|
34780
|
+
|
34709
34781
|
route(this, name, options);
|
34710
34782
|
},
|
34711
34783
|
|
@@ -36525,6 +36597,8 @@ Ember.Route = Ember.Object.extend(Ember.ActionHandler, {
|
|
36525
36597
|
|
36526
36598
|
if (!modelClass) { return; }
|
36527
36599
|
|
36600
|
+
Ember.assert(classify(name) + ' has no method `find`.', typeof modelClass.find === 'function');
|
36601
|
+
|
36528
36602
|
return modelClass.find(value);
|
36529
36603
|
}
|
36530
36604
|
};
|
@@ -37167,6 +37241,18 @@ Ember.onLoad('Ember.Handlebars', function() {
|
|
37167
37241
|
var get = Ember.get, set = Ember.set, fmt = Ember.String.fmt;
|
37168
37242
|
|
37169
37243
|
var slice = Array.prototype.slice;
|
37244
|
+
var numberOfContextsAcceptedByHandler = function(handler, handlerInfos) {
|
37245
|
+
var req = 0;
|
37246
|
+
for (var i = 0, l = handlerInfos.length; i < l; i++) {
|
37247
|
+
req = req + handlerInfos[i].names.length;
|
37248
|
+
if (handlerInfos[i].handler === handler)
|
37249
|
+
break;
|
37250
|
+
}
|
37251
|
+
|
37252
|
+
// query params adds an additional context
|
37253
|
+
return req;
|
37254
|
+
};
|
37255
|
+
|
37170
37256
|
Ember.onLoad('Ember.Handlebars', function(Handlebars) {
|
37171
37257
|
|
37172
37258
|
var QueryParams = Ember.Object.extend({
|
@@ -37442,13 +37528,14 @@ Ember.onLoad('Ember.Handlebars', function(Handlebars) {
|
|
37442
37528
|
routeArgs = get(this, 'routeArgs'),
|
37443
37529
|
contexts = routeArgs.slice(1),
|
37444
37530
|
resolvedParams = get(this, 'resolvedParams'),
|
37445
|
-
currentWhen = this.currentWhen || routeArgs[0]
|
37446
|
-
|
37447
|
-
// if overriding active w/ currentWhen then don't apply contexts since they won't match
|
37448
|
-
if (this.currentWhen) {
|
37449
|
-
contexts = [];
|
37450
|
-
}
|
37531
|
+
currentWhen = this.currentWhen || routeArgs[0],
|
37532
|
+
maximumContexts = numberOfContextsAcceptedByHandler(currentWhen, router.router.recognizer.handlersFor(currentWhen));
|
37451
37533
|
|
37534
|
+
// if we don't have enough contexts revert back to full route name
|
37535
|
+
// this is because the leaf route will use one of the contexts
|
37536
|
+
if (contexts.length > maximumContexts)
|
37537
|
+
currentWhen = routeArgs[0];
|
37538
|
+
|
37452
37539
|
var isActive = router.isActive.apply(router, [currentWhen].concat(contexts));
|
37453
37540
|
|
37454
37541
|
if (isActive) { return get(this, 'activeClass'); }
|
@@ -37578,9 +37665,6 @@ Ember.onLoad('Ember.Handlebars', function(Handlebars) {
|
|
37578
37665
|
} else {
|
37579
37666
|
return resolveParams(parameters.context, parameters.params, { types: types, data: data });
|
37580
37667
|
}
|
37581
|
-
|
37582
|
-
// Original implementation if query params not enabled
|
37583
|
-
return resolveParams(parameters.context, parameters.params, { types: types, data: data });
|
37584
37668
|
}).property('router.url'),
|
37585
37669
|
|
37586
37670
|
/**
|
@@ -39983,16 +40067,46 @@ var get = Ember.get,
|
|
39983
40067
|
capitalize = Ember.String.capitalize,
|
39984
40068
|
decamelize = Ember.String.decamelize;
|
39985
40069
|
|
40070
|
+
Ember.Resolver = Ember.Object.extend({
|
40071
|
+
/**
|
40072
|
+
This will be set to the Application instance when it is
|
40073
|
+
created.
|
40074
|
+
|
40075
|
+
@property namespace
|
40076
|
+
*/
|
40077
|
+
namespace: null,
|
40078
|
+
normalize: function(fullName) {
|
40079
|
+
throw new Error("Invalid call to `resolver.normalize(fullName)`. Please override the 'normalize' method in subclass of `Ember.AbstractResolver` to prevent falling through to this error.");
|
40080
|
+
},
|
40081
|
+
resolve: function(fullName) {
|
40082
|
+
throw new Error("Invalid call to `resolver.resolve(parsedName)`. Please override the 'resolve' method in subclass of `Ember.AbstractResolver` to prevent falling through to this error.");
|
40083
|
+
},
|
40084
|
+
parseName: function(parsedName) {
|
40085
|
+
throw new Error("Invalid call to `resolver.resolveByType(parsedName)`. Please override the 'resolveByType' method in subclass of `Ember.AbstractResolver` to prevent falling through to this error.");
|
40086
|
+
},
|
40087
|
+
lookupDescription: function(fullName) {
|
40088
|
+
throw new Error("Invalid call to `resolver.lookupDescription(fullName)`. Please override the 'lookupDescription' method in subclass of `Ember.AbstractResolver` to prevent falling through to this error.");
|
40089
|
+
},
|
40090
|
+
makeToString: function(factory, fullName) {
|
40091
|
+
throw new Error("Invalid call to `resolver.makeToString(factory, fullName)`. Please override the 'makeToString' method in subclass of `Ember.AbstractResolver` to prevent falling through to this error.");
|
40092
|
+
},
|
40093
|
+
resolveOther: function(parsedName) {
|
40094
|
+
throw new Error("Invalid call to `resolver.resolveDefault(parsedName)`. Please override the 'resolveDefault' method in subclass of `Ember.AbstractResolver` to prevent falling through to this error.");
|
40095
|
+
}
|
40096
|
+
});
|
40097
|
+
|
40098
|
+
|
40099
|
+
|
39986
40100
|
/**
|
39987
40101
|
The DefaultResolver defines the default lookup rules to resolve
|
39988
40102
|
container lookups before consulting the container for registered
|
39989
40103
|
items:
|
39990
40104
|
|
39991
|
-
* templates are looked up on `Ember.TEMPLATES`
|
39992
|
-
* other names are looked up on the application after converting
|
39993
|
-
|
39994
|
-
|
39995
|
-
* there are some nuances (see examples below)
|
40105
|
+
* templates are looked up on `Ember.TEMPLATES`
|
40106
|
+
* other names are looked up on the application after converting
|
40107
|
+
the name. For example, `controller:post` looks up
|
40108
|
+
`App.PostController` by default.
|
40109
|
+
* there are some nuances (see examples below)
|
39996
40110
|
|
39997
40111
|
### How Resolving Works
|
39998
40112
|
|
@@ -40067,10 +40181,7 @@ Ember.DefaultResolver = Ember.Object.extend({
|
|
40067
40181
|
type = split[0],
|
40068
40182
|
name = split[1];
|
40069
40183
|
|
40070
|
-
Ember.assert("Tried to normalize a container name without a colon (:) in "
|
40071
|
-
"it. You probably tried to lookup a name that did not contain " +
|
40072
|
-
"a type, a colon, and a name. A proper lookup name would be " +
|
40073
|
-
"`view:post`.", split.length === 2);
|
40184
|
+
Ember.assert("Tried to normalize a container name without a colon (:) in it. You probably tried to lookup a name that did not contain a type, a colon, and a name. A proper lookup name would be `view:post`.", split.length === 2);
|
40074
40185
|
|
40075
40186
|
if (type !== 'template') {
|
40076
40187
|
var result = name;
|
@@ -40147,6 +40258,48 @@ Ember.DefaultResolver = Ember.Object.extend({
|
|
40147
40258
|
resolveMethodName: "resolve" + classify(type)
|
40148
40259
|
};
|
40149
40260
|
},
|
40261
|
+
|
40262
|
+
/**
|
40263
|
+
Returns a human-readable description for a fullName. Used by the
|
40264
|
+
Application namespace in assertions to describe the
|
40265
|
+
precise name of the class that Ember is looking for, rather than
|
40266
|
+
container keys.
|
40267
|
+
|
40268
|
+
@protected
|
40269
|
+
@param {String} fullName the lookup string
|
40270
|
+
@method lookupDescription
|
40271
|
+
*/
|
40272
|
+
lookupDescription: function(fullName) {
|
40273
|
+
var parsedName = this.parseName(fullName);
|
40274
|
+
|
40275
|
+
if (parsedName.type === 'template') {
|
40276
|
+
return "template at " + parsedName.fullNameWithoutType.replace(/\./g, '/');
|
40277
|
+
}
|
40278
|
+
|
40279
|
+
var description = parsedName.root + "." + classify(parsedName.name);
|
40280
|
+
if (parsedName.type !== 'model') { description += classify(parsedName.type); }
|
40281
|
+
|
40282
|
+
return description;
|
40283
|
+
},
|
40284
|
+
|
40285
|
+
makeToString: function(factory, fullName) {
|
40286
|
+
return factory.toString();
|
40287
|
+
},
|
40288
|
+
/**
|
40289
|
+
Given a parseName object (output from `parseName`), apply
|
40290
|
+
the conventions expected by `Ember.Router`
|
40291
|
+
|
40292
|
+
@protected
|
40293
|
+
@param {Object} parsedName a parseName object with the parsed
|
40294
|
+
fullName lookup string
|
40295
|
+
@method useRouterNaming
|
40296
|
+
*/
|
40297
|
+
useRouterNaming: function(parsedName) {
|
40298
|
+
parsedName.name = parsedName.name.replace(/\./g, '_');
|
40299
|
+
if (parsedName.name === 'basic') {
|
40300
|
+
parsedName.name = '';
|
40301
|
+
}
|
40302
|
+
},
|
40150
40303
|
/**
|
40151
40304
|
Look up the template in Ember.TEMPLATES
|
40152
40305
|
|
@@ -40168,19 +40321,16 @@ Ember.DefaultResolver = Ember.Object.extend({
|
|
40168
40321
|
}
|
40169
40322
|
},
|
40170
40323
|
/**
|
40171
|
-
|
40172
|
-
the conventions expected by `Ember.Router`
|
40324
|
+
Lookup the view using `resolveOther`
|
40173
40325
|
|
40174
40326
|
@protected
|
40175
40327
|
@param {Object} parsedName a parseName object with the parsed
|
40176
40328
|
fullName lookup string
|
40177
|
-
@method
|
40329
|
+
@method resolveView
|
40178
40330
|
*/
|
40179
|
-
|
40180
|
-
|
40181
|
-
|
40182
|
-
parsedName.name = '';
|
40183
|
-
}
|
40331
|
+
resolveView: function(parsedName) {
|
40332
|
+
this.useRouterNaming(parsedName);
|
40333
|
+
return this.resolveOther(parsedName);
|
40184
40334
|
},
|
40185
40335
|
/**
|
40186
40336
|
Lookup the controller using `resolveOther`
|
@@ -40206,22 +40356,6 @@ Ember.DefaultResolver = Ember.Object.extend({
|
|
40206
40356
|
this.useRouterNaming(parsedName);
|
40207
40357
|
return this.resolveOther(parsedName);
|
40208
40358
|
},
|
40209
|
-
/**
|
40210
|
-
Lookup the view using `resolveOther`
|
40211
|
-
|
40212
|
-
@protected
|
40213
|
-
@param {Object} parsedName a parseName object with the parsed
|
40214
|
-
fullName lookup string
|
40215
|
-
@method resolveView
|
40216
|
-
*/
|
40217
|
-
resolveView: function(parsedName) {
|
40218
|
-
this.useRouterNaming(parsedName);
|
40219
|
-
return this.resolveOther(parsedName);
|
40220
|
-
},
|
40221
|
-
|
40222
|
-
resolveHelper: function(parsedName) {
|
40223
|
-
return this.resolveOther(parsedName) || Ember.Handlebars.helpers[parsedName.fullNameWithoutType];
|
40224
|
-
},
|
40225
40359
|
|
40226
40360
|
/**
|
40227
40361
|
Lookup the model on the Application namespace
|
@@ -40244,39 +40378,24 @@ Ember.DefaultResolver = Ember.Object.extend({
|
|
40244
40378
|
@protected
|
40245
40379
|
@param {Object} parsedName a parseName object with the parsed
|
40246
40380
|
fullName lookup string
|
40247
|
-
@method
|
40381
|
+
@method resolveHelper
|
40248
40382
|
*/
|
40249
|
-
|
40250
|
-
|
40251
|
-
factory = get(parsedName.root, className);
|
40252
|
-
if (factory) { return factory; }
|
40383
|
+
resolveHelper: function(parsedName) {
|
40384
|
+
return this.resolveOther(parsedName) || Ember.Handlebars.helpers[parsedName.fullNameWithoutType];
|
40253
40385
|
},
|
40254
|
-
|
40255
40386
|
/**
|
40256
|
-
|
40257
|
-
|
40258
|
-
precise name of the class that Ember is looking for, rather than
|
40259
|
-
container keys.
|
40387
|
+
Look up the specified object (from parsedName) on the appropriate
|
40388
|
+
namespace (usually on the Application)
|
40260
40389
|
|
40261
40390
|
@protected
|
40262
|
-
@param {
|
40263
|
-
|
40391
|
+
@param {Object} parsedName a parseName object with the parsed
|
40392
|
+
fullName lookup string
|
40393
|
+
@method resolveOther
|
40264
40394
|
*/
|
40265
|
-
|
40266
|
-
var
|
40267
|
-
|
40268
|
-
if (
|
40269
|
-
return "template at " + parsedName.fullNameWithoutType.replace(/\./g, '/');
|
40270
|
-
}
|
40271
|
-
|
40272
|
-
var description = parsedName.root + "." + classify(parsedName.name);
|
40273
|
-
if (parsedName.type !== 'model') { description += classify(parsedName.type); }
|
40274
|
-
|
40275
|
-
return description;
|
40276
|
-
},
|
40277
|
-
|
40278
|
-
makeToString: function(factory, fullName) {
|
40279
|
-
return factory.toString();
|
40395
|
+
resolveOther: function(parsedName) {
|
40396
|
+
var className = classify(parsedName.name) + classify(parsedName.type),
|
40397
|
+
factory = get(parsedName.root, className);
|
40398
|
+
if (factory) { return factory; }
|
40280
40399
|
}
|
40281
40400
|
});
|
40282
40401
|
|
@@ -40406,18 +40525,24 @@ DeprecatedContainer.prototype = {
|
|
40406
40525
|
|
40407
40526
|
### Initializers
|
40408
40527
|
|
40409
|
-
Libraries on top of Ember can
|
40528
|
+
Libraries on top of Ember can add initializers, like so:
|
40410
40529
|
|
40411
40530
|
```javascript
|
40412
40531
|
Ember.Application.initializer({
|
40413
|
-
name:
|
40532
|
+
name: 'api-adapter',
|
40414
40533
|
|
40415
40534
|
initialize: function(container, application) {
|
40416
|
-
|
40535
|
+
application.register('api-adapter:main', ApiAdapter);
|
40417
40536
|
}
|
40418
40537
|
});
|
40419
40538
|
```
|
40420
40539
|
|
40540
|
+
Initializers provide an opportunity to access the container, which
|
40541
|
+
organizes the different components of an Ember application. Additionally
|
40542
|
+
they provide a chance to access the instantiated application. Beyond
|
40543
|
+
being used for libraries, initializers are also a great way to organize
|
40544
|
+
dependency injection or setup in your own application.
|
40545
|
+
|
40421
40546
|
### Routing
|
40422
40547
|
|
40423
40548
|
In addition to creating your application's router, `Ember.Application` is
|
@@ -40662,17 +40787,50 @@ var Application = Ember.Application = Ember.Namespace.extend(Ember.DeferredMixin
|
|
40662
40787
|
},
|
40663
40788
|
|
40664
40789
|
/**
|
40665
|
-
|
40790
|
+
Registers a factory that can be used for dependency injection (with
|
40791
|
+
`App.inject`) or for service lookup. Each factory is registered with
|
40792
|
+
a full name including two parts: `type:name`.
|
40666
40793
|
|
40667
|
-
|
40794
|
+
A simple example:
|
40668
40795
|
|
40669
40796
|
```javascript
|
40670
|
-
App = Ember.Application.create();
|
40797
|
+
var App = Ember.Application.create();
|
40798
|
+
App.Orange = Ember.Object.extend();
|
40799
|
+
App.register('fruit:favorite', App.Orange);
|
40800
|
+
```
|
40801
|
+
|
40802
|
+
Ember will resolve factories from the `App` namespace automatically.
|
40803
|
+
For example `App.CarsController` will be discovered and returned if
|
40804
|
+
an application requests `controller:cars`.
|
40805
|
+
|
40806
|
+
An example of registering a controller with a non-standard name:
|
40807
|
+
|
40808
|
+
```javascript
|
40809
|
+
var App = Ember.Application.create(),
|
40810
|
+
Session = Ember.Controller.extend();
|
40811
|
+
|
40812
|
+
App.register('controller:session', Session);
|
40813
|
+
|
40814
|
+
// The Session controller can now be treated like a normal controller,
|
40815
|
+
// despite its non-standard name.
|
40816
|
+
App.ApplicationController = Ember.Controller.extend({
|
40817
|
+
needs: ['session']
|
40818
|
+
});
|
40819
|
+
```
|
40820
|
+
|
40821
|
+
Registered factories are **instantiated** by having `create`
|
40822
|
+
called on them. Additionally they are **singletons**, each time
|
40823
|
+
they are looked up they return the same instance.
|
40671
40824
|
|
40672
|
-
|
40673
|
-
|
40674
|
-
|
40675
|
-
App
|
40825
|
+
Some examples modifying that default behavior:
|
40826
|
+
|
40827
|
+
```javascript
|
40828
|
+
var App = Ember.Application.create();
|
40829
|
+
|
40830
|
+
App.Person = Ember.Object.extend();
|
40831
|
+
App.Orange = Ember.Object.extend();
|
40832
|
+
App.Email = Ember.Object.extend();
|
40833
|
+
App.session = Ember.Object.create();
|
40676
40834
|
|
40677
40835
|
App.register('model:user', App.Person, {singleton: false });
|
40678
40836
|
App.register('fruit:favorite', App.Orange);
|
@@ -40683,28 +40841,56 @@ var Application = Ember.Application = Ember.Namespace.extend(Ember.DeferredMixin
|
|
40683
40841
|
@method register
|
40684
40842
|
@param fullName {String} type:name (e.g., 'model:user')
|
40685
40843
|
@param factory {Function} (e.g., App.Person)
|
40686
|
-
@param options {Object} (optional)
|
40844
|
+
@param options {Object} (optional) disable instantiation or singleton usage
|
40687
40845
|
**/
|
40688
40846
|
register: function() {
|
40689
40847
|
var container = this.__container__;
|
40690
40848
|
container.register.apply(container, arguments);
|
40691
40849
|
},
|
40850
|
+
|
40692
40851
|
/**
|
40693
|
-
|
40852
|
+
Define a dependency injection onto a specific factory or all factories
|
40853
|
+
of a type.
|
40694
40854
|
|
40695
|
-
|
40855
|
+
When Ember instantiates a controller, view, or other framework component
|
40856
|
+
it can attach a dependency to that component. This is often used to
|
40857
|
+
provide services to a set of framework components.
|
40858
|
+
|
40859
|
+
An example of providing a session object to all controllers:
|
40860
|
+
|
40861
|
+
```javascript
|
40862
|
+
var App = Ember.Application.create(),
|
40863
|
+
Session = Ember.Object.extend({ isAuthenticated: false });
|
40864
|
+
|
40865
|
+
// A factory must be registered before it can be injected
|
40866
|
+
App.register('session:main', Session);
|
40867
|
+
|
40868
|
+
// Inject 'session:main' onto all factories of the type 'controller'
|
40869
|
+
// with the name 'session'
|
40870
|
+
App.inject('controller', 'session', 'session:main');
|
40871
|
+
|
40872
|
+
App.IndexController = Ember.Controller.extend({
|
40873
|
+
isLoggedIn: Ember.computed.alias('session.isAuthenticated')
|
40874
|
+
});
|
40875
|
+
```
|
40876
|
+
|
40877
|
+
Injections can also be performed on specific factories.
|
40696
40878
|
|
40697
40879
|
```javascript
|
40698
40880
|
App.inject(<full_name or type>, <property name>, <full_name>)
|
40699
|
-
App.inject('
|
40700
|
-
App.inject('
|
40881
|
+
App.inject('route', 'source', 'source:main')
|
40882
|
+
App.inject('route:application', 'email', 'model:email')
|
40701
40883
|
```
|
40702
|
-
Please note that injections on models are currently disabled.
|
40703
|
-
This was done because ember-data was not ready for fully a container aware ecosystem.
|
40704
40884
|
|
40705
|
-
|
40706
|
-
|
40707
|
-
|
40885
|
+
It is important to note that injections can only be performed on
|
40886
|
+
classes that are instantiated by Ember itself. Instantiating a class
|
40887
|
+
directly (via `create` or `new`) bypasses the dependency injection
|
40888
|
+
system.
|
40889
|
+
|
40890
|
+
Ember-Data instantiates its models in a unique manner, and consequently
|
40891
|
+
injections onto models (or all models) will not work as expected. Injections
|
40892
|
+
on models can be enabled by setting `Ember.MODEL_FACTORY_INJECTIONS`
|
40893
|
+
to `true`.
|
40708
40894
|
|
40709
40895
|
@method inject
|
40710
40896
|
@param factoryNameOrType {String}
|
@@ -40729,6 +40915,7 @@ var Application = Ember.Application = Ember.Namespace.extend(Ember.DeferredMixin
|
|
40729
40915
|
initialize: function() {
|
40730
40916
|
Ember.deprecate('Calling initialize manually is not supported. Please see Ember.Application#advanceReadiness and Ember.Application#deferReadiness');
|
40731
40917
|
},
|
40918
|
+
|
40732
40919
|
/**
|
40733
40920
|
Initialize the application. This happens automatically.
|
40734
40921
|
|
@@ -41049,6 +41236,13 @@ Ember.Application.reopenClass({
|
|
41049
41236
|
|
41050
41237
|
container.injection('route', 'router', 'router:main');
|
41051
41238
|
|
41239
|
+
// DEBUGGING
|
41240
|
+
container.register('resolver-for-debugging:main', container.resolver.__resolver__, { instantiate: false });
|
41241
|
+
container.injection('container-debug-adapter:main', 'resolver', 'resolver-for-debugging:main');
|
41242
|
+
container.injection('data-adapter:main', 'containerDebugAdapter', 'container-debug-adapter:main');
|
41243
|
+
// Custom resolver authors may want to register their own ContainerDebugAdapter with this key
|
41244
|
+
container.register('container-debug-adapter:main', Ember.ContainerDebugAdapter);
|
41245
|
+
|
41052
41246
|
return container;
|
41053
41247
|
}
|
41054
41248
|
});
|
@@ -41100,6 +41294,8 @@ function resolverFor(namespace) {
|
|
41100
41294
|
}
|
41101
41295
|
};
|
41102
41296
|
|
41297
|
+
resolve.__resolver__ = resolver;
|
41298
|
+
|
41103
41299
|
return resolve;
|
41104
41300
|
}
|
41105
41301
|
|
@@ -41300,6 +41496,111 @@ Ember Application
|
|
41300
41496
|
|
41301
41497
|
})();
|
41302
41498
|
|
41499
|
+
(function() {
|
41500
|
+
/**
|
41501
|
+
@module ember
|
41502
|
+
@submodule ember-extension-support
|
41503
|
+
*/
|
41504
|
+
/**
|
41505
|
+
The `ContainerDebugAdapter` helps the container and resolver interface
|
41506
|
+
with tools that debug Ember such as the
|
41507
|
+
[Ember Extension](https://github.com/tildeio/ember-extension)
|
41508
|
+
for Chrome and Firefox.
|
41509
|
+
|
41510
|
+
This class can be extended by a custom resolver implementer
|
41511
|
+
to override some of the methods with library-specific code.
|
41512
|
+
|
41513
|
+
The methods likely to be overridden are:
|
41514
|
+
|
41515
|
+
* `canCatalogEntriesByType`
|
41516
|
+
* `catalogEntriesByType`
|
41517
|
+
|
41518
|
+
The adapter will need to be registered
|
41519
|
+
in the application's container as `container-debug-adapter:main`
|
41520
|
+
|
41521
|
+
Example:
|
41522
|
+
|
41523
|
+
```javascript
|
41524
|
+
Application.initializer({
|
41525
|
+
name: "containerDebugAdapter",
|
41526
|
+
|
41527
|
+
initialize: function(container, application) {
|
41528
|
+
application.register('container-debug-adapter:main', require('app/container-debug-adapter'));
|
41529
|
+
}
|
41530
|
+
});
|
41531
|
+
```
|
41532
|
+
|
41533
|
+
@class ContainerDebugAdapter
|
41534
|
+
@namespace Ember
|
41535
|
+
@extends Ember.Object
|
41536
|
+
*/
|
41537
|
+
Ember.ContainerDebugAdapter = Ember.Object.extend({
|
41538
|
+
/**
|
41539
|
+
The container of the application being debugged.
|
41540
|
+
This property will be injected
|
41541
|
+
on creation.
|
41542
|
+
|
41543
|
+
@property container
|
41544
|
+
@default null
|
41545
|
+
*/
|
41546
|
+
container: null,
|
41547
|
+
|
41548
|
+
/**
|
41549
|
+
The resolver instance of the application
|
41550
|
+
being debugged. This property will be injected
|
41551
|
+
on creation.
|
41552
|
+
|
41553
|
+
@property resolver
|
41554
|
+
@default null
|
41555
|
+
*/
|
41556
|
+
resolver: null,
|
41557
|
+
|
41558
|
+
/**
|
41559
|
+
Returns true if it is possible to catalog a list of available
|
41560
|
+
classes in the resolver for a given type.
|
41561
|
+
|
41562
|
+
@method canCatalogEntriesByType
|
41563
|
+
@param {string} type The type. e.g. "model", "controller", "route"
|
41564
|
+
@return {boolean} whether a list is available for this type.
|
41565
|
+
*/
|
41566
|
+
canCatalogEntriesByType: function(type) {
|
41567
|
+
if (type === 'model' || type === 'template') return false;
|
41568
|
+
return true;
|
41569
|
+
},
|
41570
|
+
|
41571
|
+
/**
|
41572
|
+
Returns the available classes a given type.
|
41573
|
+
|
41574
|
+
@method catalogEntriesByType
|
41575
|
+
@param {string} type The type. e.g. "model", "controller", "route"
|
41576
|
+
@return {Array} An array of strings.
|
41577
|
+
*/
|
41578
|
+
catalogEntriesByType: function(type) {
|
41579
|
+
var namespaces = Ember.A(Ember.Namespace.NAMESPACES), types = Ember.A(), self = this;
|
41580
|
+
var typeSuffixRegex = new RegExp(Ember.String.classify(type) + "$");
|
41581
|
+
|
41582
|
+
namespaces.forEach(function(namespace) {
|
41583
|
+
if (namespace !== Ember) {
|
41584
|
+
for (var key in namespace) {
|
41585
|
+
if (!namespace.hasOwnProperty(key)) { continue; }
|
41586
|
+
if (typeSuffixRegex.test(key)) {
|
41587
|
+
var klass = namespace[key];
|
41588
|
+
if (Ember.typeOf(klass) === 'class') {
|
41589
|
+
types.push(Ember.String.dasherize(key.replace(typeSuffixRegex, '')));
|
41590
|
+
}
|
41591
|
+
}
|
41592
|
+
}
|
41593
|
+
}
|
41594
|
+
});
|
41595
|
+
return types;
|
41596
|
+
}
|
41597
|
+
});
|
41598
|
+
|
41599
|
+
|
41600
|
+
})();
|
41601
|
+
|
41602
|
+
|
41603
|
+
|
41303
41604
|
(function() {
|
41304
41605
|
/**
|
41305
41606
|
@module ember
|
@@ -41334,10 +41635,10 @@ Ember Application
|
|
41334
41635
|
|
41335
41636
|
```javascript
|
41336
41637
|
Application.initializer({
|
41337
|
-
name: "
|
41638
|
+
name: "data-adapter",
|
41338
41639
|
|
41339
41640
|
initialize: function(container, application) {
|
41340
|
-
application.register('
|
41641
|
+
application.register('data-adapter:main', DS.DataAdapter);
|
41341
41642
|
}
|
41342
41643
|
});
|
41343
41644
|
```
|
@@ -41362,6 +41663,16 @@ Ember.DataAdapter = Ember.Object.extend({
|
|
41362
41663
|
*/
|
41363
41664
|
container: null,
|
41364
41665
|
|
41666
|
+
|
41667
|
+
/**
|
41668
|
+
The container-debug-adapter which is used
|
41669
|
+
to list all models.
|
41670
|
+
|
41671
|
+
@property containerDebugAdapter
|
41672
|
+
@default undefined
|
41673
|
+
**/
|
41674
|
+
containerDebugAdapter: undefined,
|
41675
|
+
|
41365
41676
|
/**
|
41366
41677
|
Number of attributes to send
|
41367
41678
|
as columns. (Enough to make the record
|
@@ -41415,8 +41726,9 @@ Ember.DataAdapter = Ember.Object.extend({
|
|
41415
41726
|
self = this, typesToSend, releaseMethods = Ember.A();
|
41416
41727
|
|
41417
41728
|
typesToSend = modelTypes.map(function(type) {
|
41418
|
-
var
|
41419
|
-
|
41729
|
+
var klass = type.klass;
|
41730
|
+
var wrapped = self.wrapModelType(klass, type.name);
|
41731
|
+
releaseMethods.push(self.observeModelType(klass, typesUpdated));
|
41420
41732
|
return wrapped;
|
41421
41733
|
});
|
41422
41734
|
|
@@ -41430,6 +41742,13 @@ Ember.DataAdapter = Ember.Object.extend({
|
|
41430
41742
|
return release;
|
41431
41743
|
},
|
41432
41744
|
|
41745
|
+
_nameToClass: function(type) {
|
41746
|
+
if (typeof type === 'string') {
|
41747
|
+
type = this.container.lookupFactory('model:' + type);
|
41748
|
+
}
|
41749
|
+
return type;
|
41750
|
+
},
|
41751
|
+
|
41433
41752
|
/**
|
41434
41753
|
Fetch the records of a given type and observe them for changes.
|
41435
41754
|
|
@@ -41572,7 +41891,7 @@ Ember.DataAdapter = Ember.Object.extend({
|
|
41572
41891
|
@private
|
41573
41892
|
@method wrapModelType
|
41574
41893
|
@param {Class} type A model class
|
41575
|
-
@param {
|
41894
|
+
@param {String} Optional name of the class
|
41576
41895
|
@return {Object} contains the wrapped type and the function to remove observers
|
41577
41896
|
Format:
|
41578
41897
|
type: {Object} the wrapped type
|
@@ -41583,12 +41902,12 @@ Ember.DataAdapter = Ember.Object.extend({
|
|
41583
41902
|
object: {Class} the actual Model type class
|
41584
41903
|
release: {Function} The function to remove observers
|
41585
41904
|
*/
|
41586
|
-
wrapModelType: function(type,
|
41905
|
+
wrapModelType: function(type, name) {
|
41587
41906
|
var release, records = this.getRecords(type),
|
41588
41907
|
typeToSend, self = this;
|
41589
41908
|
|
41590
41909
|
typeToSend = {
|
41591
|
-
name: type.toString(),
|
41910
|
+
name: name || type.toString(),
|
41592
41911
|
count: Ember.get(records, 'length'),
|
41593
41912
|
columns: this.columnsForType(type),
|
41594
41913
|
object: type
|
@@ -41606,18 +41925,45 @@ Ember.DataAdapter = Ember.Object.extend({
|
|
41606
41925
|
@method getModelTypes
|
41607
41926
|
@return {Array} Array of model types
|
41608
41927
|
*/
|
41609
|
-
|
41610
|
-
// TODO: Use the resolver instead of looping over namespaces.
|
41611
41928
|
getModelTypes: function() {
|
41612
|
-
var
|
41929
|
+
var types, self = this,
|
41930
|
+
containerDebugAdapter = this.get('containerDebugAdapter');
|
41931
|
+
|
41932
|
+
if (containerDebugAdapter.canCatalogEntriesByType('model')) {
|
41933
|
+
types = containerDebugAdapter.catalogEntriesByType('model');
|
41934
|
+
} else {
|
41935
|
+
types = this._getObjectsOnNamespaces();
|
41936
|
+
}
|
41937
|
+
// New adapters return strings instead of classes
|
41938
|
+
return types.map(function(name) {
|
41939
|
+
return {
|
41940
|
+
klass: self._nameToClass(name),
|
41941
|
+
name: name
|
41942
|
+
};
|
41943
|
+
}).filter(function(type) {
|
41944
|
+
return self.detect(type.klass);
|
41945
|
+
});
|
41946
|
+
},
|
41947
|
+
|
41948
|
+
/**
|
41949
|
+
Loops over all namespaces and all objects
|
41950
|
+
attached to them
|
41951
|
+
|
41952
|
+
@private
|
41953
|
+
@method _getObjectsOnNamespaces
|
41954
|
+
@return {Array} Array of model type strings
|
41955
|
+
*/
|
41956
|
+
_getObjectsOnNamespaces: function() {
|
41957
|
+
var namespaces = Ember.A(Ember.Namespace.NAMESPACES), types = Ember.A();
|
41613
41958
|
|
41614
41959
|
namespaces.forEach(function(namespace) {
|
41615
41960
|
for (var key in namespace) {
|
41616
41961
|
if (!namespace.hasOwnProperty(key)) { continue; }
|
41617
|
-
var
|
41618
|
-
if (
|
41619
|
-
|
41962
|
+
var name = Ember.String.dasherize(key);
|
41963
|
+
if (!(namespace instanceof Ember.Application) && namespace.toString()) {
|
41964
|
+
name = namespace + '/' + name;
|
41620
41965
|
}
|
41966
|
+
types.push(name);
|
41621
41967
|
}
|
41622
41968
|
});
|
41623
41969
|
return types;
|
@@ -41737,31 +42083,865 @@ Ember Extension Support
|
|
41737
42083
|
|
41738
42084
|
})();
|
41739
42085
|
|
41740
|
-
(
|
41741
|
-
|
41742
|
-
|
41743
|
-
|
41744
|
-
|
41745
|
-
Use `App.setupForTesting` to perform integration tests (full
|
41746
|
-
application testing).
|
42086
|
+
define("container/container",
|
42087
|
+
["container/inheriting_dict","exports"],
|
42088
|
+
function(__dependency1__, __exports__) {
|
42089
|
+
"use strict";
|
42090
|
+
var InheritingDict = __dependency1__["default"];
|
41747
42091
|
|
41748
|
-
|
41749
|
-
|
41750
|
-
|
41751
|
-
|
41752
|
-
|
42092
|
+
// A lightweight container that helps to assemble and decouple components.
|
42093
|
+
// Public api for the container is still in flux.
|
42094
|
+
// The public api, specified on the application namespace should be considered the stable api.
|
42095
|
+
function Container(parent) {
|
42096
|
+
this.parent = parent;
|
42097
|
+
this.children = [];
|
41753
42098
|
|
41754
|
-
|
41755
|
-
if (!Ember.Test.adapter) {
|
41756
|
-
Ember.Test.adapter = Ember.Test.QUnitAdapter.create();
|
41757
|
-
}
|
41758
|
-
};
|
42099
|
+
this.resolver = parent && parent.resolver || function() {};
|
41759
42100
|
|
41760
|
-
|
42101
|
+
this.registry = new InheritingDict(parent && parent.registry);
|
42102
|
+
this.cache = new InheritingDict(parent && parent.cache);
|
42103
|
+
this.factoryCache = new InheritingDict(parent && parent.factoryCache);
|
42104
|
+
this.resolveCache = new InheritingDict(parent && parent.resolveCache);
|
42105
|
+
this.typeInjections = new InheritingDict(parent && parent.typeInjections);
|
42106
|
+
this.injections = {};
|
41761
42107
|
|
42108
|
+
this.factoryTypeInjections = new InheritingDict(parent && parent.factoryTypeInjections);
|
42109
|
+
this.factoryInjections = {};
|
41762
42110
|
|
42111
|
+
this._options = new InheritingDict(parent && parent._options);
|
42112
|
+
this._typeOptions = new InheritingDict(parent && parent._typeOptions);
|
42113
|
+
}
|
41763
42114
|
|
41764
|
-
|
42115
|
+
Container.prototype = {
|
42116
|
+
|
42117
|
+
/**
|
42118
|
+
@property parent
|
42119
|
+
@type Container
|
42120
|
+
@default null
|
42121
|
+
*/
|
42122
|
+
parent: null,
|
42123
|
+
|
42124
|
+
/**
|
42125
|
+
@property children
|
42126
|
+
@type Array
|
42127
|
+
@default []
|
42128
|
+
*/
|
42129
|
+
children: null,
|
42130
|
+
|
42131
|
+
/**
|
42132
|
+
@property resolver
|
42133
|
+
@type function
|
42134
|
+
*/
|
42135
|
+
resolver: null,
|
42136
|
+
|
42137
|
+
/**
|
42138
|
+
@property registry
|
42139
|
+
@type InheritingDict
|
42140
|
+
*/
|
42141
|
+
registry: null,
|
42142
|
+
|
42143
|
+
/**
|
42144
|
+
@property cache
|
42145
|
+
@type InheritingDict
|
42146
|
+
*/
|
42147
|
+
cache: null,
|
42148
|
+
|
42149
|
+
/**
|
42150
|
+
@property typeInjections
|
42151
|
+
@type InheritingDict
|
42152
|
+
*/
|
42153
|
+
typeInjections: null,
|
42154
|
+
|
42155
|
+
/**
|
42156
|
+
@property injections
|
42157
|
+
@type Object
|
42158
|
+
@default {}
|
42159
|
+
*/
|
42160
|
+
injections: null,
|
42161
|
+
|
42162
|
+
/**
|
42163
|
+
@private
|
42164
|
+
|
42165
|
+
@property _options
|
42166
|
+
@type InheritingDict
|
42167
|
+
@default null
|
42168
|
+
*/
|
42169
|
+
_options: null,
|
42170
|
+
|
42171
|
+
/**
|
42172
|
+
@private
|
42173
|
+
|
42174
|
+
@property _typeOptions
|
42175
|
+
@type InheritingDict
|
42176
|
+
*/
|
42177
|
+
_typeOptions: null,
|
42178
|
+
|
42179
|
+
/**
|
42180
|
+
Returns a new child of the current container. These children are configured
|
42181
|
+
to correctly inherit from the current container.
|
42182
|
+
|
42183
|
+
@method child
|
42184
|
+
@return {Container}
|
42185
|
+
*/
|
42186
|
+
child: function() {
|
42187
|
+
var container = new Container(this);
|
42188
|
+
this.children.push(container);
|
42189
|
+
return container;
|
42190
|
+
},
|
42191
|
+
|
42192
|
+
/**
|
42193
|
+
Sets a key-value pair on the current container. If a parent container,
|
42194
|
+
has the same key, once set on a child, the parent and child will diverge
|
42195
|
+
as expected.
|
42196
|
+
|
42197
|
+
@method set
|
42198
|
+
@param {Object} object
|
42199
|
+
@param {String} key
|
42200
|
+
@param {any} value
|
42201
|
+
*/
|
42202
|
+
set: function(object, key, value) {
|
42203
|
+
object[key] = value;
|
42204
|
+
},
|
42205
|
+
|
42206
|
+
/**
|
42207
|
+
Registers a factory for later injection.
|
42208
|
+
|
42209
|
+
Example:
|
42210
|
+
|
42211
|
+
```javascript
|
42212
|
+
var container = new Container();
|
42213
|
+
|
42214
|
+
container.register('model:user', Person, {singleton: false });
|
42215
|
+
container.register('fruit:favorite', Orange);
|
42216
|
+
container.register('communication:main', Email, {singleton: false});
|
42217
|
+
```
|
42218
|
+
|
42219
|
+
@method register
|
42220
|
+
@param {String} fullName
|
42221
|
+
@param {Function} factory
|
42222
|
+
@param {Object} options
|
42223
|
+
*/
|
42224
|
+
register: function(fullName, factory, options) {
|
42225
|
+
validateFullName(fullName);
|
42226
|
+
|
42227
|
+
if (factory === undefined) {
|
42228
|
+
throw new TypeError('Attempting to register an unknown factory: `' + fullName + '`');
|
42229
|
+
}
|
42230
|
+
|
42231
|
+
var normalizedName = this.normalize(fullName);
|
42232
|
+
|
42233
|
+
if (this.cache.has(normalizedName)) {
|
42234
|
+
throw new Error('Cannot re-register: `' + fullName +'`, as it has already been looked up.');
|
42235
|
+
}
|
42236
|
+
|
42237
|
+
this.registry.set(normalizedName, factory);
|
42238
|
+
this._options.set(normalizedName, options || {});
|
42239
|
+
},
|
42240
|
+
|
42241
|
+
/**
|
42242
|
+
Unregister a fullName
|
42243
|
+
|
42244
|
+
```javascript
|
42245
|
+
var container = new Container();
|
42246
|
+
container.register('model:user', User);
|
42247
|
+
|
42248
|
+
container.lookup('model:user') instanceof User //=> true
|
42249
|
+
|
42250
|
+
container.unregister('model:user')
|
42251
|
+
container.lookup('model:user') === undefined //=> true
|
42252
|
+
```
|
42253
|
+
|
42254
|
+
@method unregister
|
42255
|
+
@param {String} fullName
|
42256
|
+
*/
|
42257
|
+
unregister: function(fullName) {
|
42258
|
+
validateFullName(fullName);
|
42259
|
+
|
42260
|
+
var normalizedName = this.normalize(fullName);
|
42261
|
+
|
42262
|
+
this.registry.remove(normalizedName);
|
42263
|
+
this.cache.remove(normalizedName);
|
42264
|
+
this.factoryCache.remove(normalizedName);
|
42265
|
+
this.resolveCache.remove(normalizedName);
|
42266
|
+
this._options.remove(normalizedName);
|
42267
|
+
},
|
42268
|
+
|
42269
|
+
/**
|
42270
|
+
Given a fullName return the corresponding factory.
|
42271
|
+
|
42272
|
+
By default `resolve` will retrieve the factory from
|
42273
|
+
its container's registry.
|
42274
|
+
|
42275
|
+
```javascript
|
42276
|
+
var container = new Container();
|
42277
|
+
container.register('api:twitter', Twitter);
|
42278
|
+
|
42279
|
+
container.resolve('api:twitter') // => Twitter
|
42280
|
+
```
|
42281
|
+
|
42282
|
+
Optionally the container can be provided with a custom resolver.
|
42283
|
+
If provided, `resolve` will first provide the custom resolver
|
42284
|
+
the oppertunity to resolve the fullName, otherwise it will fallback
|
42285
|
+
to the registry.
|
42286
|
+
|
42287
|
+
```javascript
|
42288
|
+
var container = new Container();
|
42289
|
+
container.resolver = function(fullName) {
|
42290
|
+
// lookup via the module system of choice
|
42291
|
+
};
|
42292
|
+
|
42293
|
+
// the twitter factory is added to the module system
|
42294
|
+
container.resolve('api:twitter') // => Twitter
|
42295
|
+
```
|
42296
|
+
|
42297
|
+
@method resolve
|
42298
|
+
@param {String} fullName
|
42299
|
+
@return {Function} fullName's factory
|
42300
|
+
*/
|
42301
|
+
resolve: function(fullName) {
|
42302
|
+
validateFullName(fullName);
|
42303
|
+
|
42304
|
+
var normalizedName = this.normalize(fullName);
|
42305
|
+
var cached = this.resolveCache.get(normalizedName);
|
42306
|
+
|
42307
|
+
if (cached) { return cached; }
|
42308
|
+
|
42309
|
+
var resolved = this.resolver(normalizedName) || this.registry.get(normalizedName);
|
42310
|
+
|
42311
|
+
this.resolveCache.set(normalizedName, resolved);
|
42312
|
+
|
42313
|
+
return resolved;
|
42314
|
+
},
|
42315
|
+
|
42316
|
+
/**
|
42317
|
+
A hook that can be used to describe how the resolver will
|
42318
|
+
attempt to find the factory.
|
42319
|
+
|
42320
|
+
For example, the default Ember `.describe` returns the full
|
42321
|
+
class name (including namespace) where Ember's resolver expects
|
42322
|
+
to find the `fullName`.
|
42323
|
+
|
42324
|
+
@method describe
|
42325
|
+
@param {String} fullName
|
42326
|
+
@return {string} described fullName
|
42327
|
+
*/
|
42328
|
+
describe: function(fullName) {
|
42329
|
+
return fullName;
|
42330
|
+
},
|
42331
|
+
|
42332
|
+
/**
|
42333
|
+
A hook to enable custom fullName normalization behaviour
|
42334
|
+
|
42335
|
+
@method normalize
|
42336
|
+
@param {String} fullName
|
42337
|
+
@return {string} normalized fullName
|
42338
|
+
*/
|
42339
|
+
normalize: function(fullName) {
|
42340
|
+
return fullName;
|
42341
|
+
},
|
42342
|
+
|
42343
|
+
/**
|
42344
|
+
@method makeToString
|
42345
|
+
|
42346
|
+
@param {any} factory
|
42347
|
+
@param {string} fullName
|
42348
|
+
@return {function} toString function
|
42349
|
+
*/
|
42350
|
+
makeToString: function(factory, fullName) {
|
42351
|
+
return factory.toString();
|
42352
|
+
},
|
42353
|
+
|
42354
|
+
/**
|
42355
|
+
Given a fullName return a corresponding instance.
|
42356
|
+
|
42357
|
+
The default behaviour is for lookup to return a singleton instance.
|
42358
|
+
The singleton is scoped to the container, allowing multiple containers
|
42359
|
+
to all have their own locally scoped singletons.
|
42360
|
+
|
42361
|
+
```javascript
|
42362
|
+
var container = new Container();
|
42363
|
+
container.register('api:twitter', Twitter);
|
42364
|
+
|
42365
|
+
var twitter = container.lookup('api:twitter');
|
42366
|
+
|
42367
|
+
twitter instanceof Twitter; // => true
|
42368
|
+
|
42369
|
+
// by default the container will return singletons
|
42370
|
+
var twitter2 = container.lookup('api:twitter');
|
42371
|
+
twitter instanceof Twitter; // => true
|
42372
|
+
|
42373
|
+
twitter === twitter2; //=> true
|
42374
|
+
```
|
42375
|
+
|
42376
|
+
If singletons are not wanted an optional flag can be provided at lookup.
|
42377
|
+
|
42378
|
+
```javascript
|
42379
|
+
var container = new Container();
|
42380
|
+
container.register('api:twitter', Twitter);
|
42381
|
+
|
42382
|
+
var twitter = container.lookup('api:twitter', { singleton: false });
|
42383
|
+
var twitter2 = container.lookup('api:twitter', { singleton: false });
|
42384
|
+
|
42385
|
+
twitter === twitter2; //=> false
|
42386
|
+
```
|
42387
|
+
|
42388
|
+
@method lookup
|
42389
|
+
@param {String} fullName
|
42390
|
+
@param {Object} options
|
42391
|
+
@return {any}
|
42392
|
+
*/
|
42393
|
+
lookup: function(fullName, options) {
|
42394
|
+
validateFullName(fullName);
|
42395
|
+
return lookup(this, this.normalize(fullName), options);
|
42396
|
+
},
|
42397
|
+
|
42398
|
+
/**
|
42399
|
+
Given a fullName return the corresponding factory.
|
42400
|
+
|
42401
|
+
@method lookupFactory
|
42402
|
+
@param {String} fullName
|
42403
|
+
@return {any}
|
42404
|
+
*/
|
42405
|
+
lookupFactory: function(fullName) {
|
42406
|
+
validateFullName(fullName);
|
42407
|
+
return factoryFor(this, this.normalize(fullName));
|
42408
|
+
},
|
42409
|
+
|
42410
|
+
/**
|
42411
|
+
Given a fullName check if the container is aware of its factory
|
42412
|
+
or singleton instance.
|
42413
|
+
|
42414
|
+
@method has
|
42415
|
+
@param {String} fullName
|
42416
|
+
@return {Boolean}
|
42417
|
+
*/
|
42418
|
+
has: function(fullName) {
|
42419
|
+
validateFullName(fullName);
|
42420
|
+
return has(this, this.normalize(fullName));
|
42421
|
+
},
|
42422
|
+
|
42423
|
+
/**
|
42424
|
+
Allow registering options for all factories of a type.
|
42425
|
+
|
42426
|
+
```javascript
|
42427
|
+
var container = new Container();
|
42428
|
+
|
42429
|
+
// if all of type `connection` must not be singletons
|
42430
|
+
container.optionsForType('connection', { singleton: false });
|
42431
|
+
|
42432
|
+
container.register('connection:twitter', TwitterConnection);
|
42433
|
+
container.register('connection:facebook', FacebookConnection);
|
42434
|
+
|
42435
|
+
var twitter = container.lookup('connection:twitter');
|
42436
|
+
var twitter2 = container.lookup('connection:twitter');
|
42437
|
+
|
42438
|
+
twitter === twitter2; // => false
|
42439
|
+
|
42440
|
+
var facebook = container.lookup('connection:facebook');
|
42441
|
+
var facebook2 = container.lookup('connection:facebook');
|
42442
|
+
|
42443
|
+
facebook === facebook2; // => false
|
42444
|
+
```
|
42445
|
+
|
42446
|
+
@method optionsForType
|
42447
|
+
@param {String} type
|
42448
|
+
@param {Object} options
|
42449
|
+
*/
|
42450
|
+
optionsForType: function(type, options) {
|
42451
|
+
if (this.parent) { illegalChildOperation('optionsForType'); }
|
42452
|
+
|
42453
|
+
this._typeOptions.set(type, options);
|
42454
|
+
},
|
42455
|
+
|
42456
|
+
/**
|
42457
|
+
@method options
|
42458
|
+
@param {String} type
|
42459
|
+
@param {Object} options
|
42460
|
+
*/
|
42461
|
+
options: function(type, options) {
|
42462
|
+
this.optionsForType(type, options);
|
42463
|
+
},
|
42464
|
+
|
42465
|
+
/**
|
42466
|
+
Used only via `injection`.
|
42467
|
+
|
42468
|
+
Provides a specialized form of injection, specifically enabling
|
42469
|
+
all objects of one type to be injected with a reference to another
|
42470
|
+
object.
|
42471
|
+
|
42472
|
+
For example, provided each object of type `controller` needed a `router`.
|
42473
|
+
one would do the following:
|
42474
|
+
|
42475
|
+
```javascript
|
42476
|
+
var container = new Container();
|
42477
|
+
|
42478
|
+
container.register('router:main', Router);
|
42479
|
+
container.register('controller:user', UserController);
|
42480
|
+
container.register('controller:post', PostController);
|
42481
|
+
|
42482
|
+
container.typeInjection('controller', 'router', 'router:main');
|
42483
|
+
|
42484
|
+
var user = container.lookup('controller:user');
|
42485
|
+
var post = container.lookup('controller:post');
|
42486
|
+
|
42487
|
+
user.router instanceof Router; //=> true
|
42488
|
+
post.router instanceof Router; //=> true
|
42489
|
+
|
42490
|
+
// both controllers share the same router
|
42491
|
+
user.router === post.router; //=> true
|
42492
|
+
```
|
42493
|
+
|
42494
|
+
@private
|
42495
|
+
@method typeInjection
|
42496
|
+
@param {String} type
|
42497
|
+
@param {String} property
|
42498
|
+
@param {String} fullName
|
42499
|
+
*/
|
42500
|
+
typeInjection: function(type, property, fullName) {
|
42501
|
+
validateFullName(fullName);
|
42502
|
+
if (this.parent) { illegalChildOperation('typeInjection'); }
|
42503
|
+
|
42504
|
+
var fullNameType = fullName.split(':')[0];
|
42505
|
+
if(fullNameType === type) {
|
42506
|
+
throw new Error('Cannot inject a `' + fullName + '` on other ' + type + '(s). Register the `' + fullName + '` as a different type and perform the typeInjection.');
|
42507
|
+
}
|
42508
|
+
addTypeInjection(this.typeInjections, type, property, fullName);
|
42509
|
+
},
|
42510
|
+
|
42511
|
+
/**
|
42512
|
+
Defines injection rules.
|
42513
|
+
|
42514
|
+
These rules are used to inject dependencies onto objects when they
|
42515
|
+
are instantiated.
|
42516
|
+
|
42517
|
+
Two forms of injections are possible:
|
42518
|
+
|
42519
|
+
* Injecting one fullName on another fullName
|
42520
|
+
* Injecting one fullName on a type
|
42521
|
+
|
42522
|
+
Example:
|
42523
|
+
|
42524
|
+
```javascript
|
42525
|
+
var container = new Container();
|
42526
|
+
|
42527
|
+
container.register('source:main', Source);
|
42528
|
+
container.register('model:user', User);
|
42529
|
+
container.register('model:post', Post);
|
42530
|
+
|
42531
|
+
// injecting one fullName on another fullName
|
42532
|
+
// eg. each user model gets a post model
|
42533
|
+
container.injection('model:user', 'post', 'model:post');
|
42534
|
+
|
42535
|
+
// injecting one fullName on another type
|
42536
|
+
container.injection('model', 'source', 'source:main');
|
42537
|
+
|
42538
|
+
var user = container.lookup('model:user');
|
42539
|
+
var post = container.lookup('model:post');
|
42540
|
+
|
42541
|
+
user.source instanceof Source; //=> true
|
42542
|
+
post.source instanceof Source; //=> true
|
42543
|
+
|
42544
|
+
user.post instanceof Post; //=> true
|
42545
|
+
|
42546
|
+
// and both models share the same source
|
42547
|
+
user.source === post.source; //=> true
|
42548
|
+
```
|
42549
|
+
|
42550
|
+
@method injection
|
42551
|
+
@param {String} factoryName
|
42552
|
+
@param {String} property
|
42553
|
+
@param {String} injectionName
|
42554
|
+
*/
|
42555
|
+
injection: function(fullName, property, injectionName) {
|
42556
|
+
if (this.parent) { illegalChildOperation('injection'); }
|
42557
|
+
|
42558
|
+
validateFullName(injectionName);
|
42559
|
+
var normalizedInjectionName = this.normalize(injectionName);
|
42560
|
+
|
42561
|
+
if (fullName.indexOf(':') === -1) {
|
42562
|
+
return this.typeInjection(fullName, property, normalizedInjectionName);
|
42563
|
+
}
|
42564
|
+
|
42565
|
+
validateFullName(fullName);
|
42566
|
+
var normalizedName = this.normalize(fullName);
|
42567
|
+
|
42568
|
+
addInjection(this.injections, normalizedName, property, normalizedInjectionName);
|
42569
|
+
},
|
42570
|
+
|
42571
|
+
|
42572
|
+
/**
|
42573
|
+
Used only via `factoryInjection`.
|
42574
|
+
|
42575
|
+
Provides a specialized form of injection, specifically enabling
|
42576
|
+
all factory of one type to be injected with a reference to another
|
42577
|
+
object.
|
42578
|
+
|
42579
|
+
For example, provided each factory of type `model` needed a `store`.
|
42580
|
+
one would do the following:
|
42581
|
+
|
42582
|
+
```javascript
|
42583
|
+
var container = new Container();
|
42584
|
+
|
42585
|
+
container.register('store:main', SomeStore);
|
42586
|
+
|
42587
|
+
container.factoryTypeInjection('model', 'store', 'store:main');
|
42588
|
+
|
42589
|
+
var store = container.lookup('store:main');
|
42590
|
+
var UserFactory = container.lookupFactory('model:user');
|
42591
|
+
|
42592
|
+
UserFactory.store instanceof SomeStore; //=> true
|
42593
|
+
```
|
42594
|
+
|
42595
|
+
@private
|
42596
|
+
@method factoryTypeInjection
|
42597
|
+
@param {String} type
|
42598
|
+
@param {String} property
|
42599
|
+
@param {String} fullName
|
42600
|
+
*/
|
42601
|
+
factoryTypeInjection: function(type, property, fullName) {
|
42602
|
+
if (this.parent) { illegalChildOperation('factoryTypeInjection'); }
|
42603
|
+
|
42604
|
+
addTypeInjection(this.factoryTypeInjections, type, property, this.normalize(fullName));
|
42605
|
+
},
|
42606
|
+
|
42607
|
+
/**
|
42608
|
+
Defines factory injection rules.
|
42609
|
+
|
42610
|
+
Similar to regular injection rules, but are run against factories, via
|
42611
|
+
`Container#lookupFactory`.
|
42612
|
+
|
42613
|
+
These rules are used to inject objects onto factories when they
|
42614
|
+
are looked up.
|
42615
|
+
|
42616
|
+
Two forms of injections are possible:
|
42617
|
+
|
42618
|
+
* Injecting one fullName on another fullName
|
42619
|
+
* Injecting one fullName on a type
|
42620
|
+
|
42621
|
+
Example:
|
42622
|
+
|
42623
|
+
```javascript
|
42624
|
+
var container = new Container();
|
42625
|
+
|
42626
|
+
container.register('store:main', Store);
|
42627
|
+
container.register('store:secondary', OtherStore);
|
42628
|
+
container.register('model:user', User);
|
42629
|
+
container.register('model:post', Post);
|
42630
|
+
|
42631
|
+
// injecting one fullName on another type
|
42632
|
+
container.factoryInjection('model', 'store', 'store:main');
|
42633
|
+
|
42634
|
+
// injecting one fullName on another fullName
|
42635
|
+
container.factoryInjection('model:post', 'secondaryStore', 'store:secondary');
|
42636
|
+
|
42637
|
+
var UserFactory = container.lookupFactory('model:user');
|
42638
|
+
var PostFactory = container.lookupFactory('model:post');
|
42639
|
+
var store = container.lookup('store:main');
|
42640
|
+
|
42641
|
+
UserFactory.store instanceof Store; //=> true
|
42642
|
+
UserFactory.secondaryStore instanceof OtherStore; //=> false
|
42643
|
+
|
42644
|
+
PostFactory.store instanceof Store; //=> true
|
42645
|
+
PostFactory.secondaryStore instanceof OtherStore; //=> true
|
42646
|
+
|
42647
|
+
// and both models share the same source instance
|
42648
|
+
UserFactory.store === PostFactory.store; //=> true
|
42649
|
+
```
|
42650
|
+
|
42651
|
+
@method factoryInjection
|
42652
|
+
@param {String} factoryName
|
42653
|
+
@param {String} property
|
42654
|
+
@param {String} injectionName
|
42655
|
+
*/
|
42656
|
+
factoryInjection: function(fullName, property, injectionName) {
|
42657
|
+
if (this.parent) { illegalChildOperation('injection'); }
|
42658
|
+
|
42659
|
+
var normalizedName = this.normalize(fullName);
|
42660
|
+
var normalizedInjectionName = this.normalize(injectionName);
|
42661
|
+
|
42662
|
+
validateFullName(injectionName);
|
42663
|
+
|
42664
|
+
if (fullName.indexOf(':') === -1) {
|
42665
|
+
return this.factoryTypeInjection(normalizedName, property, normalizedInjectionName);
|
42666
|
+
}
|
42667
|
+
|
42668
|
+
validateFullName(fullName);
|
42669
|
+
|
42670
|
+
addInjection(this.factoryInjections, normalizedName, property, normalizedInjectionName);
|
42671
|
+
},
|
42672
|
+
|
42673
|
+
/**
|
42674
|
+
A depth first traversal, destroying the container, its descendant containers and all
|
42675
|
+
their managed objects.
|
42676
|
+
|
42677
|
+
@method destroy
|
42678
|
+
*/
|
42679
|
+
destroy: function() {
|
42680
|
+
for (var i=0, l=this.children.length; i<l; i++) {
|
42681
|
+
this.children[i].destroy();
|
42682
|
+
}
|
42683
|
+
|
42684
|
+
this.children = [];
|
42685
|
+
|
42686
|
+
eachDestroyable(this, function(item) {
|
42687
|
+
item.destroy();
|
42688
|
+
});
|
42689
|
+
|
42690
|
+
this.parent = undefined;
|
42691
|
+
this.isDestroyed = true;
|
42692
|
+
},
|
42693
|
+
|
42694
|
+
/**
|
42695
|
+
@method reset
|
42696
|
+
*/
|
42697
|
+
reset: function() {
|
42698
|
+
for (var i=0, l=this.children.length; i<l; i++) {
|
42699
|
+
resetCache(this.children[i]);
|
42700
|
+
}
|
42701
|
+
resetCache(this);
|
42702
|
+
}
|
42703
|
+
};
|
42704
|
+
|
42705
|
+
function has(container, fullName){
|
42706
|
+
if (container.cache.has(fullName)) {
|
42707
|
+
return true;
|
42708
|
+
}
|
42709
|
+
|
42710
|
+
return !!container.resolve(fullName);
|
42711
|
+
}
|
42712
|
+
|
42713
|
+
function lookup(container, fullName, options) {
|
42714
|
+
options = options || {};
|
42715
|
+
|
42716
|
+
if (container.cache.has(fullName) && options.singleton !== false) {
|
42717
|
+
return container.cache.get(fullName);
|
42718
|
+
}
|
42719
|
+
|
42720
|
+
var value = instantiate(container, fullName);
|
42721
|
+
|
42722
|
+
if (value === undefined) { return; }
|
42723
|
+
|
42724
|
+
if (isSingleton(container, fullName) && options.singleton !== false) {
|
42725
|
+
container.cache.set(fullName, value);
|
42726
|
+
}
|
42727
|
+
|
42728
|
+
return value;
|
42729
|
+
}
|
42730
|
+
|
42731
|
+
function illegalChildOperation(operation) {
|
42732
|
+
throw new Error(operation + " is not currently supported on child containers");
|
42733
|
+
}
|
42734
|
+
|
42735
|
+
function isSingleton(container, fullName) {
|
42736
|
+
var singleton = option(container, fullName, 'singleton');
|
42737
|
+
|
42738
|
+
return singleton !== false;
|
42739
|
+
}
|
42740
|
+
|
42741
|
+
function buildInjections(container, injections) {
|
42742
|
+
var hash = {};
|
42743
|
+
|
42744
|
+
if (!injections) { return hash; }
|
42745
|
+
|
42746
|
+
var injection, injectable;
|
42747
|
+
|
42748
|
+
for (var i=0, l=injections.length; i<l; i++) {
|
42749
|
+
injection = injections[i];
|
42750
|
+
injectable = lookup(container, injection.fullName);
|
42751
|
+
|
42752
|
+
if (injectable !== undefined) {
|
42753
|
+
hash[injection.property] = injectable;
|
42754
|
+
} else {
|
42755
|
+
throw new Error('Attempting to inject an unknown injection: `' + injection.fullName + '`');
|
42756
|
+
}
|
42757
|
+
}
|
42758
|
+
|
42759
|
+
return hash;
|
42760
|
+
}
|
42761
|
+
|
42762
|
+
function option(container, fullName, optionName) {
|
42763
|
+
var options = container._options.get(fullName);
|
42764
|
+
|
42765
|
+
if (options && options[optionName] !== undefined) {
|
42766
|
+
return options[optionName];
|
42767
|
+
}
|
42768
|
+
|
42769
|
+
var type = fullName.split(":")[0];
|
42770
|
+
options = container._typeOptions.get(type);
|
42771
|
+
|
42772
|
+
if (options) {
|
42773
|
+
return options[optionName];
|
42774
|
+
}
|
42775
|
+
}
|
42776
|
+
|
42777
|
+
function factoryFor(container, fullName) {
|
42778
|
+
var name = fullName;
|
42779
|
+
var factory = container.resolve(name);
|
42780
|
+
var injectedFactory;
|
42781
|
+
var cache = container.factoryCache;
|
42782
|
+
var type = fullName.split(":")[0];
|
42783
|
+
|
42784
|
+
if (factory === undefined) { return; }
|
42785
|
+
|
42786
|
+
if (cache.has(fullName)) {
|
42787
|
+
return cache.get(fullName);
|
42788
|
+
}
|
42789
|
+
|
42790
|
+
if (!factory || typeof factory.extend !== 'function' || (!Ember.MODEL_FACTORY_INJECTIONS && type === 'model')) {
|
42791
|
+
// TODO: think about a 'safe' merge style extension
|
42792
|
+
// for now just fallback to create time injection
|
42793
|
+
return factory;
|
42794
|
+
} else {
|
42795
|
+
|
42796
|
+
var injections = injectionsFor(container, fullName);
|
42797
|
+
var factoryInjections = factoryInjectionsFor(container, fullName);
|
42798
|
+
|
42799
|
+
factoryInjections._toString = container.makeToString(factory, fullName);
|
42800
|
+
|
42801
|
+
injectedFactory = factory.extend(injections);
|
42802
|
+
injectedFactory.reopenClass(factoryInjections);
|
42803
|
+
|
42804
|
+
cache.set(fullName, injectedFactory);
|
42805
|
+
|
42806
|
+
return injectedFactory;
|
42807
|
+
}
|
42808
|
+
}
|
42809
|
+
|
42810
|
+
function injectionsFor(container, fullName) {
|
42811
|
+
var splitName = fullName.split(":"),
|
42812
|
+
type = splitName[0],
|
42813
|
+
injections = [];
|
42814
|
+
|
42815
|
+
injections = injections.concat(container.typeInjections.get(type) || []);
|
42816
|
+
injections = injections.concat(container.injections[fullName] || []);
|
42817
|
+
|
42818
|
+
injections = buildInjections(container, injections);
|
42819
|
+
injections._debugContainerKey = fullName;
|
42820
|
+
injections.container = container;
|
42821
|
+
|
42822
|
+
return injections;
|
42823
|
+
}
|
42824
|
+
|
42825
|
+
function factoryInjectionsFor(container, fullName) {
|
42826
|
+
var splitName = fullName.split(":"),
|
42827
|
+
type = splitName[0],
|
42828
|
+
factoryInjections = [];
|
42829
|
+
|
42830
|
+
factoryInjections = factoryInjections.concat(container.factoryTypeInjections.get(type) || []);
|
42831
|
+
factoryInjections = factoryInjections.concat(container.factoryInjections[fullName] || []);
|
42832
|
+
|
42833
|
+
factoryInjections = buildInjections(container, factoryInjections);
|
42834
|
+
factoryInjections._debugContainerKey = fullName;
|
42835
|
+
|
42836
|
+
return factoryInjections;
|
42837
|
+
}
|
42838
|
+
|
42839
|
+
function instantiate(container, fullName) {
|
42840
|
+
var factory = factoryFor(container, fullName);
|
42841
|
+
|
42842
|
+
if (option(container, fullName, 'instantiate') === false) {
|
42843
|
+
return factory;
|
42844
|
+
}
|
42845
|
+
|
42846
|
+
if (factory) {
|
42847
|
+
if (typeof factory.extend === 'function') {
|
42848
|
+
// assume the factory was extendable and is already injected
|
42849
|
+
return factory.create();
|
42850
|
+
} else {
|
42851
|
+
// assume the factory was extendable
|
42852
|
+
// to create time injections
|
42853
|
+
// TODO: support new'ing for instantiation and merge injections for pure JS Functions
|
42854
|
+
return factory.create(injectionsFor(container, fullName));
|
42855
|
+
}
|
42856
|
+
}
|
42857
|
+
}
|
42858
|
+
|
42859
|
+
function eachDestroyable(container, callback) {
|
42860
|
+
container.cache.eachLocal(function(key, value) {
|
42861
|
+
if (option(container, key, 'instantiate') === false) { return; }
|
42862
|
+
callback(value);
|
42863
|
+
});
|
42864
|
+
}
|
42865
|
+
|
42866
|
+
function resetCache(container) {
|
42867
|
+
container.cache.eachLocal(function(key, value) {
|
42868
|
+
if (option(container, key, 'instantiate') === false) { return; }
|
42869
|
+
value.destroy();
|
42870
|
+
});
|
42871
|
+
container.cache.dict = {};
|
42872
|
+
}
|
42873
|
+
|
42874
|
+
function addTypeInjection(rules, type, property, fullName) {
|
42875
|
+
var injections = rules.get(type);
|
42876
|
+
|
42877
|
+
if (!injections) {
|
42878
|
+
injections = [];
|
42879
|
+
rules.set(type, injections);
|
42880
|
+
}
|
42881
|
+
|
42882
|
+
injections.push({
|
42883
|
+
property: property,
|
42884
|
+
fullName: fullName
|
42885
|
+
});
|
42886
|
+
}
|
42887
|
+
|
42888
|
+
var VALID_FULL_NAME_REGEXP = /^[^:]+.+:[^:]+$/;
|
42889
|
+
function validateFullName(fullName) {
|
42890
|
+
if (!VALID_FULL_NAME_REGEXP.test(fullName)) {
|
42891
|
+
throw new TypeError('Invalid Fullname, expected: `type:name` got: ' + fullName);
|
42892
|
+
}
|
42893
|
+
}
|
42894
|
+
|
42895
|
+
function addInjection(rules, factoryName, property, injectionName) {
|
42896
|
+
var injections = rules[factoryName] = rules[factoryName] || [];
|
42897
|
+
injections.push({ property: property, fullName: injectionName });
|
42898
|
+
}
|
42899
|
+
|
42900
|
+
__exports__["default"] = Container;
|
42901
|
+
});define("ember-runtime/ext/rsvp",
|
42902
|
+
["ember-metal/core","ember-metal/logger","exports"],
|
42903
|
+
function(__dependency1__, __dependency2__, __exports__) {
|
42904
|
+
"use strict";
|
42905
|
+
var Ember = __dependency1__["default"];
|
42906
|
+
var Logger = __dependency2__["default"];
|
42907
|
+
|
42908
|
+
var RSVP = requireModule("rsvp");
|
42909
|
+
var Test, testModuleName = 'ember-testing/test';
|
42910
|
+
|
42911
|
+
RSVP.onerrorDefault = function(error) {
|
42912
|
+
if (error instanceof Error) {
|
42913
|
+
if (Ember.testing) {
|
42914
|
+
// ES6TODO: remove when possible
|
42915
|
+
if (!Test && Ember.__loader.registry[testModuleName]) {
|
42916
|
+
Test = requireModule(testModuleName)['default'];
|
42917
|
+
}
|
42918
|
+
|
42919
|
+
if (Test && Test.adapter) {
|
42920
|
+
Test.adapter.exception(error);
|
42921
|
+
} else {
|
42922
|
+
throw error;
|
42923
|
+
}
|
42924
|
+
} else {
|
42925
|
+
Logger.error(error.stack);
|
42926
|
+
Ember.assert(error, false);
|
42927
|
+
}
|
42928
|
+
}
|
42929
|
+
};
|
42930
|
+
|
42931
|
+
RSVP.on('error', RSVP.onerrorDefault);
|
42932
|
+
|
42933
|
+
__exports__["default"] = RSVP;
|
42934
|
+
});define("ember-runtime/system/container",
|
42935
|
+
["ember-metal/property_set","exports"],
|
42936
|
+
function(__dependency1__, __exports__) {
|
42937
|
+
"use strict";
|
42938
|
+
var set = __dependency1__["default"];
|
42939
|
+
|
42940
|
+
var Container = requireModule('container')["default"];
|
42941
|
+
Container.set = set;
|
42942
|
+
|
42943
|
+
__exports__["default"] = Container;
|
42944
|
+
});(function() {
|
41765
42945
|
/**
|
41766
42946
|
@module ember
|
41767
42947
|
@submodule ember-testing
|
@@ -41894,11 +43074,11 @@ Ember.Test = {
|
|
41894
43074
|
|
41895
43075
|
```javascript
|
41896
43076
|
Ember.Test.onInjectHelpers(function() {
|
41897
|
-
Ember.$(document).
|
43077
|
+
Ember.$(document).ajaxSend(function() {
|
41898
43078
|
Test.pendingAjaxRequests++;
|
41899
43079
|
});
|
41900
43080
|
|
41901
|
-
Ember.$(document).
|
43081
|
+
Ember.$(document).ajaxComplete(function() {
|
41902
43082
|
Test.pendingAjaxRequests--;
|
41903
43083
|
});
|
41904
43084
|
});
|
@@ -42261,6 +43441,53 @@ function isolate(fn, val) {
|
|
42261
43441
|
|
42262
43442
|
|
42263
43443
|
|
43444
|
+
(function() {
|
43445
|
+
var Test = Ember.Test;
|
43446
|
+
|
43447
|
+
function incrementAjaxPendingRequests(){
|
43448
|
+
Test.pendingAjaxRequests++;
|
43449
|
+
}
|
43450
|
+
|
43451
|
+
function decrementAjaxPendingRequests(){
|
43452
|
+
Ember.assert("An ajaxComplete event which would cause the number of pending AJAX " +
|
43453
|
+
"requests to be negative has been triggered. This is most likely " +
|
43454
|
+
"caused by AJAX events that were started before calling " +
|
43455
|
+
"`injectTestHelpers()`.", Test.pendingAjaxRequests !== 0);
|
43456
|
+
Test.pendingAjaxRequests--;
|
43457
|
+
}
|
43458
|
+
|
43459
|
+
/**
|
43460
|
+
Sets Ember up for testing. This is useful to perform
|
43461
|
+
basic setup steps in order to unit test.
|
43462
|
+
|
43463
|
+
Use `App.setupForTesting` to perform integration tests (full
|
43464
|
+
application testing).
|
43465
|
+
|
43466
|
+
@method setupForTesting
|
43467
|
+
@namespace Ember
|
43468
|
+
*/
|
43469
|
+
Ember.setupForTesting = function() {
|
43470
|
+
Ember.testing = true;
|
43471
|
+
|
43472
|
+
// if adapter is not manually set default to QUnit
|
43473
|
+
if (!Ember.Test.adapter) {
|
43474
|
+
Ember.Test.adapter = Ember.Test.QUnitAdapter.create();
|
43475
|
+
}
|
43476
|
+
|
43477
|
+
if (!Test.pendingAjaxRequests) {
|
43478
|
+
Test.pendingAjaxRequests = 0;
|
43479
|
+
}
|
43480
|
+
|
43481
|
+
Ember.$(document).off('ajaxSend', incrementAjaxPendingRequests);
|
43482
|
+
Ember.$(document).off('ajaxComplete', decrementAjaxPendingRequests);
|
43483
|
+
Ember.$(document).on('ajaxSend', incrementAjaxPendingRequests);
|
43484
|
+
Ember.$(document).on('ajaxComplete', decrementAjaxPendingRequests);
|
43485
|
+
};
|
43486
|
+
|
43487
|
+
})();
|
43488
|
+
|
43489
|
+
|
43490
|
+
|
42264
43491
|
(function() {
|
42265
43492
|
Ember.onLoad('Ember.Application', function(Application) {
|
42266
43493
|
Application.initializer({
|
@@ -42429,22 +43656,6 @@ var get = Ember.get,
|
|
42429
43656
|
asyncHelper = Test.registerAsyncHelper,
|
42430
43657
|
countAsync = 0;
|
42431
43658
|
|
42432
|
-
Test.pendingAjaxRequests = 0;
|
42433
|
-
|
42434
|
-
Test.onInjectHelpers(function() {
|
42435
|
-
Ember.$(document).ajaxStart(function() {
|
42436
|
-
Test.pendingAjaxRequests++;
|
42437
|
-
});
|
42438
|
-
|
42439
|
-
Ember.$(document).ajaxStop(function() {
|
42440
|
-
Ember.assert("An ajaxStop event which would cause the number of pending AJAX " +
|
42441
|
-
"requests to be negative has been triggered. This is most likely " +
|
42442
|
-
"caused by AJAX events that were started before calling " +
|
42443
|
-
"`injectTestHelpers()`.", Test.pendingAjaxRequests !== 0);
|
42444
|
-
Test.pendingAjaxRequests--;
|
42445
|
-
});
|
42446
|
-
});
|
42447
|
-
|
42448
43659
|
function currentRouteName(app){
|
42449
43660
|
var appController = app.__container__.lookup('controller:application');
|
42450
43661
|
|
@@ -42530,7 +43741,7 @@ function keyEvent(app, selector, context, type, keyCode) {
|
|
42530
43741
|
context = null;
|
42531
43742
|
}
|
42532
43743
|
|
42533
|
-
return triggerEvent(app, selector, context, type, { keyCode: keyCode });
|
43744
|
+
return triggerEvent(app, selector, context, type, { keyCode: keyCode, which: keyCode });
|
42534
43745
|
}
|
42535
43746
|
|
42536
43747
|
function fillIn(app, selector, context, text) {
|