Compare commits
1452 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| c6553764e7 | |||
| 17c8b7320f | |||
| 9139217264 | |||
| 5ab70160dc | |||
| 76eae6ebc5 | |||
| c38558d2d3 | |||
| c4b0a970f2 | |||
| 522beb170b | |||
| 5b79e032dd | |||
| 09061a4f98 | |||
| 48a5282b45 | |||
| d24e60ee50 | |||
| dca4c5835a | |||
| 690400df8e | |||
| ab1b11315c | |||
| d00e27b267 | |||
| d076ba2ffc | |||
| 964338ef87 | |||
| f46406be13 | |||
| 6a84363adf | |||
| d8242f2eba | |||
| 6a6ea36e25 | |||
| ffc493e60b | |||
| e78eed1475 | |||
| deb2a98df6 | |||
| 2292244fa8 | |||
| 152e1290a6 | |||
| 39c52f270d | |||
| b229cfe76c | |||
| 170d46e195 | |||
| 19aa6d631c | |||
| 5ee1731dd1 | |||
| 4b7b3aea4f | |||
| ca4307a11d | |||
| 48dd128dbc | |||
| cf59717498 | |||
| 6cda57a9b9 | |||
| 932d0d5ce7 | |||
| c6d1970aef | |||
| 0b2adcab59 | |||
| 96bd561806 | |||
| d024cfb867 | |||
| 35ba8568e3 | |||
| 344388d99d | |||
| 91170f3deb | |||
| e44b6d6f2e | |||
| 6c7495261d | |||
| a4306f5619 | |||
| 5d9c3e26e5 | |||
| 9d6fc4cdc3 | |||
| b3e1350fda | |||
| e5946fdb67 | |||
| 5ff0edd3ca | |||
| b8508e0d56 | |||
| 5a1a8921a8 | |||
| df4f2f611b | |||
| a6c586481b | |||
| 88b7127bab | |||
| 2b5b5c4b39 | |||
| 66bd1bcf32 | |||
| 4ce8eb90d5 | |||
| 61d5d4b286 | |||
| 11912f7f2e | |||
| 447415acaf | |||
| 5cebd17748 | |||
| 98921f4560 | |||
| 29d0c10d2d | |||
| 5902ebbcb6 | |||
| eee69719b7 | |||
| 690b9a4b0b | |||
| 5a2aa743a5 | |||
| 23cd283b7f | |||
| 745c75ffee | |||
| 2bfd24fbd6 | |||
| 70ac727a0d | |||
| a5f551acad | |||
| 1f4309a9e3 | |||
| beca776f99 | |||
| 819a408ea1 | |||
| 84be83e008 | |||
| e085280499 | |||
| 95ba34b067 | |||
| 07c3da465c | |||
| a2dee1bdeb | |||
| 409eec4019 | |||
| b90485b2a4 | |||
| 0d79005f8d | |||
| e538d2f71f | |||
| f5b357fd11 | |||
| 761db7b4b7 | |||
| 86ee770834 | |||
| 47c4544e23 | |||
| e8479514cd | |||
| cf3f870735 | |||
| 7d3a7502fa | |||
| 71dc691323 | |||
| 42f3cc847a | |||
| b755559ec9 | |||
| 9e6d2a0a14 | |||
| 2596b9805f | |||
| 5a3e44a146 | |||
| 4872c05a32 | |||
| fc686bb7a3 | |||
| 7f664f9f45 | |||
| 955848c3b1 | |||
| 7a1d54c8c3 | |||
| 0ed1a59aef | |||
| f2722b59a5 | |||
| 57ed7e4f7f | |||
| 90848144e8 | |||
| a4d7076c8e | |||
| c824731ae8 | |||
| 1653afa210 | |||
| 7e2f2c1bad | |||
| 61f365abfd | |||
| ec2d9ad605 | |||
| 08b50ccb1c | |||
| 44ab0a8106 | |||
| 1962485504 | |||
| 8a4f625ef6 | |||
| 7be665399f | |||
| 2edb5d38cb | |||
| 4e06553f7c | |||
| 25ff206767 | |||
| 997813f0eb | |||
| 25db68e903 | |||
| 78559761dc | |||
| 14384fc40f | |||
| 58f1813aca | |||
| 9666c64f4a | |||
| f9f7e02d15 | |||
| a4bea6f229 | |||
| c00851a18b | |||
| c687acd489 | |||
| 3f70d76327 | |||
| 08ee30a91e | |||
| 7671bd6ed4 | |||
| 1a132dd757 | |||
| 9881a27397 | |||
| 294b151342 | |||
| 969eb9c74d | |||
| 048d85a2ad | |||
| 876e72a0df | |||
| 6734908108 | |||
| 515bcf2933 | |||
| 148371fb6d | |||
| 8047c06258 | |||
| 3e8ecfffe0 | |||
| ddcacb7a83 | |||
| 915eda0540 | |||
| f9eede7555 | |||
| fb5fabf580 | |||
| aef24cde4b | |||
| b893a93f82 | |||
| 6352f13e85 | |||
| 76cd65ef1a | |||
| 84cc2cf5cc | |||
| 2ade0545a9 | |||
| f5ff12c0a4 | |||
| f147d22f5c | |||
| f798a47d48 | |||
| 43a1f75e7c | |||
| 4a5e6a7418 | |||
| af6c2aaca0 | |||
| 61415e1968 | |||
| 5123e38a49 | |||
| ca20be4667 | |||
| d9dd5803ae | |||
| 86f528730b | |||
| fbd0845c95 | |||
| 5597e2fa99 | |||
| 6bad7592b9 | |||
| 0023d1bd97 | |||
| be0d0564c2 | |||
| 9f3e387473 | |||
| 58e0433b96 | |||
| 87a373936d | |||
| e8e4ef1070 | |||
| c61d16a933 | |||
| 6bfb4cdbdf | |||
| cac6a45345 | |||
| 8a53327bd6 | |||
| 9f06a8bfdb | |||
| 5173779f84 | |||
| 1616e9720d | |||
| b77f02cdce | |||
| 39d9b9886d | |||
| 2d831bcc2a | |||
| d846e2d788 | |||
| 409b7aa3b3 | |||
| ed3400bb68 | |||
| 1cbd73d227 | |||
| 433e536e6b | |||
| 1ec099767f | |||
| 4e0e34f47a | |||
| 7457fb0e63 | |||
| 23ef372a17 | |||
| 164811ab35 | |||
| 1de58a3e5d | |||
| 7e320e0e92 | |||
| d6fe9c7e7a | |||
| 75188211aa | |||
| 4e68778561 | |||
| a68cc20dd4 | |||
| ba113a050e | |||
| 0d8cec6e4f | |||
| a47bcedad4 | |||
| 387c6e7bbc | |||
| 9b24e1dfed | |||
| 5f4eedd0e7 | |||
| 96d52ce150 | |||
| 55cf26bf28 | |||
| 5fdcbd6b90 | |||
| e92fb7fa7c | |||
| 1a870a3bb1 | |||
| 6038403179 | |||
| fb38d0db2e | |||
| 5046bd4e56 | |||
| 2458c2863d | |||
| 3819bbe8fa | |||
| e2016fd2eb | |||
| 34a1443a85 | |||
| 35ced04445 | |||
| 90fa2f682a | |||
| 4fef0377bb | |||
| b0466d9e6e | |||
| 4b912228be | |||
| 9a606dca7c | |||
| 6d5b84a0ba | |||
| cce00970f1 | |||
| 23b91d951e | |||
| 053035234c | |||
| a075824087 | |||
| 13c14af9a2 | |||
| 280ddaf47e | |||
| dc85f67b2d | |||
| 2ffb86f201 | |||
| aec5304ef5 | |||
| eb02778297 | |||
| 26d399557e | |||
| 9436b9e7bd | |||
| b2984b0416 | |||
| 5188463f69 | |||
| a417ec2ab9 | |||
| d923df9100 | |||
| dd09148893 | |||
| 5741be9d5b | |||
| 1611248daa | |||
| e51373d84b | |||
| 4c40d9db7f | |||
| f88067a04f | |||
| 0137179ee6 | |||
| 2b48259a35 | |||
| 241fea8355 | |||
| f0e661c7c0 | |||
| 78db2cefe7 | |||
| 5eab8ffc49 | |||
| 68200bbccb | |||
| 68ed7ab477 | |||
| d96d53ec32 | |||
| aef08d5555 | |||
| a27a4e2204 | |||
| a887d2b4c9 | |||
| bba3f27e3d | |||
| 3d7191cc06 | |||
| 32f78b8718 | |||
| 4044f08980 | |||
| 33cbd0f4a2 | |||
| 3b8f18e373 | |||
| 0f3a5214f4 | |||
| 37f9cd26e5 | |||
| 169c50403c | |||
| 38a334c7d8 | |||
| c05aefe96d | |||
| 98eb8f1a77 | |||
| 1c6c7b913c | |||
| 1519c4b46d | |||
| 86ee9c3af1 | |||
| a08ad700f6 | |||
| 4ec35e4dcb | |||
| daf5c820e3 | |||
| d767afbd2a | |||
| 701e0cbded | |||
| fc02fd1e30 | |||
| 4fe5d9936d | |||
| e0fcc004c0 | |||
| cca1460eb0 | |||
| c83d0a8daf | |||
| a3964d4d81 | |||
| 434c1c595b | |||
| 48f62a6dad | |||
| 1fa358fa6b | |||
| 393d00e415 | |||
| 80748994a3 | |||
| e50f602488 | |||
| f57302707c | |||
| de504fb512 | |||
| daf3b2e7f7 | |||
| 41e670c34a | |||
| d1c49fe342 | |||
| f6735dc2bb | |||
| 03e60479d4 | |||
| 449c0d11d6 | |||
| c534cb4a94 | |||
| 45165ba58b | |||
| 8590ea7240 | |||
| 44fb19bc83 | |||
| fbc873cfb2 | |||
| ad91c82164 | |||
| 46ff62dd75 | |||
| 34adfbce01 | |||
| 307d8992a8 | |||
| fa46e16eab | |||
| 6955cf0079 | |||
| c7be087ca0 | |||
| 1b888d4b0e | |||
| 5ef56e2de8 | |||
| bc7c55aec8 | |||
| 316e96c9b0 | |||
| 8747b585f4 | |||
| e15a22a8d4 | |||
| bb36e40582 | |||
| 7f93bfc16f | |||
| 1714a388b4 | |||
| 66c416cf77 | |||
| f2004a9186 | |||
| 54ac06af80 | |||
| ffb5529771 | |||
| d6b9ee17e5 | |||
| 7cbf957a0e | |||
| 800c153ebd | |||
| 6f3800f860 | |||
| fe30e5151e | |||
| a945dd247a | |||
| aac0d2b8fe | |||
| 7949494493 | |||
| dd62c73a1a | |||
| 313ba83793 | |||
| 94c34b781f | |||
| 0beb06f24a | |||
| a516178635 | |||
| c15dcbd1d1 | |||
| 4b06b0bcda | |||
| 55d9c3f48d | |||
| 5e43870c5d | |||
| 9d74d6ce50 | |||
| 4369800682 | |||
| 09b2150eb0 | |||
| a816251c9f | |||
| 299f7517b6 | |||
| d68086f978 | |||
| dd844ad8b3 | |||
| 679a8d54a7 | |||
| cc2d1b90c3 | |||
| c8922a2f04 | |||
| 7d79cdddd2 | |||
| bd55e14de5 | |||
| a9e810d0af | |||
| 70c1c9079a | |||
| 1b709e5a5c | |||
| 43daa97561 | |||
| a69f4d29a8 | |||
| deedaea250 | |||
| 785c373241 | |||
| 8364e76bb4 | |||
| 85751551e3 | |||
| d546671717 | |||
| 19e4171dfe | |||
| 2968f4cb9e | |||
| 876974973e | |||
| 97244c7e64 | |||
| 1cc142b225 | |||
| ab5941315f | |||
| 4bb178ac5b | |||
| bbc4912d55 | |||
| d880aea9b6 | |||
| b24524280c | |||
| 47e412ec0b | |||
| 74a1d04e27 | |||
| 3c0a7cd57c | |||
| fa17c483e0 | |||
| 6fd47892ce | |||
| 69aae3547f | |||
| 96c686611d | |||
| 834975899b | |||
| 64e3127479 | |||
| d1553a450f | |||
| 8b3e86f2c6 | |||
| 417850001d | |||
| 3814fe3ad1 | |||
| 979fe0bad1 | |||
| 57326a9b35 | |||
| f9903baf14 | |||
| b8353322be | |||
| b95d1e2b2a | |||
| 54c51c4ffc | |||
| c5397a893b | |||
| b808c0ddfe | |||
| cd2f050f2f | |||
| 32a247471f | |||
| a35a63d4f9 | |||
| d7b6aa1206 | |||
| 74e129dc28 | |||
| 5ec19b643b | |||
| 946b7e040b | |||
| d5a757d46d | |||
| 01e199815f | |||
| 2116f7e4a4 | |||
| 10eac7c22b | |||
| e4fc20167b | |||
| 068d18189b | |||
| 9c0acf67eb | |||
| ca6b177db1 | |||
| a5aebda854 | |||
| f81d440ba6 | |||
| 42fb486735 | |||
| e283cea0e4 | |||
| 853d302356 | |||
| 258b3413be | |||
| 81498a7c6a | |||
| 4b2ee0fa85 | |||
| f125537610 | |||
| 5c565df024 | |||
| 3a03f293b5 | |||
| e4c88bf54b | |||
| e645ab78a2 | |||
| 3e10184c1c | |||
| d88c0fb117 | |||
| 15c5c503a4 | |||
| dbd3947002 | |||
| c3b14315d9 | |||
| 48c9cd8f51 | |||
| 0b7e742f6e | |||
| dbe9e8171f | |||
| d2621e3f98 | |||
| b1ad080741 | |||
| e58c42c5b2 | |||
| 61cdef1ee6 | |||
| 56f5c82c72 | |||
| 2af95a2cd4 | |||
| 096e171137 | |||
| 97af6a99dd | |||
| d5a48eaff0 | |||
| 5fcca2e83b | |||
| 8f94fe84b0 | |||
| f303df419b | |||
| 9050949b79 | |||
| 5325559795 | |||
| 594a312645 | |||
| b477165816 | |||
| 826228de85 | |||
| 38ba6ec9ea | |||
| 77fa33022b | |||
| 2a1f1bc182 | |||
| c10280618a | |||
| ca04d5bc31 | |||
| ee889ca841 | |||
| 3c2b57e9f9 | |||
| 332eefb464 | |||
| 3b7be53bbe | |||
| 8a3c4b8a6d | |||
| 4cf6a8334c | |||
| e4eeb4b55b | |||
| 3f809affd3 | |||
| 32b88f1fc7 | |||
| c4171a2de2 | |||
| a5797b9302 | |||
| e105e85d7a | |||
| f19b657658 | |||
| 62213208e0 | |||
| 1dbad8a057 | |||
| 78ba137383 | |||
| 2cb3bc2e76 | |||
| c6504f8fa5 | |||
| ca0eaab5bb | |||
| 7e93ec95cb | |||
| bcaa221e4b | |||
| b76e98e16f | |||
| 39d8bc699c | |||
| 57219aa153 | |||
| 907c851fd0 | |||
| de249270a8 | |||
| b3e6d1750c | |||
| 717ea692b9 | |||
| a47580ed62 | |||
| f523361e9e | |||
| e8b6a83a71 | |||
| ea542213bb | |||
| a25caa7c00 | |||
| 00ac93e3ec | |||
| 9f4c3a5ac8 | |||
| 3468888ae2 | |||
| 6a2d91bf7c | |||
| 446364ad1b | |||
| e8201d1f34 | |||
| b658b03afe | |||
| 6843ab6ea1 | |||
| 3bacd454e8 | |||
| 1038c5422f | |||
| 5daa6de160 | |||
| f608b143c5 | |||
| 2ebe83e93b | |||
| c1fbf4d940 | |||
| 627a451f53 | |||
| bae7bc809a | |||
| 74be568c65 | |||
| 66d4300734 | |||
| 234992470e | |||
| 11d18a5252 | |||
| 2f6fb2abda | |||
| 3dac5e3450 | |||
| db7adf737e | |||
| 79fa363d91 | |||
| 0d1ca858be | |||
| 176f41978b | |||
| 4c338eb4fc | |||
| bd6de24ace | |||
| 1340812caa | |||
| 9e9c6cf153 | |||
| 4b0e381b01 | |||
| aa010b024e | |||
| 9d0269ea97 | |||
| 7250ff3ad8 | |||
| 63ca2f3755 | |||
| 36fca744d5 | |||
| 428beaff4c | |||
| 6ad873fab4 | |||
| 84bb118b35 | |||
| 71afeeb6e3 | |||
| a42266c956 | |||
| 2dfa1f5c53 | |||
| 16c7f9fbf1 | |||
| 00c4df10c2 | |||
| 162de3eaf2 | |||
| ac32cbb4cf | |||
| b32003bb8c | |||
| 859dccd711 | |||
| 1a3e2adf1a | |||
| b6031d6bf0 | |||
| a9e476f0f7 | |||
| e1e6e1bb62 | |||
| 3e876b8fdd | |||
| 3ef8992c54 | |||
| a5ca78ad2a | |||
| d320df88a3 | |||
| f40066af9e | |||
| e1723bf09d | |||
| 86ed171e37 | |||
| 4d37c9240b | |||
| cab0945ac9 | |||
| ff5e720690 | |||
| dbdffd4c4e | |||
| dc229ac01f | |||
| c357385207 | |||
| 6b5fcc385c | |||
| b8ebad2dfa | |||
| ed7e4600b0 | |||
| 2ccaa1977f | |||
| 1f3e55f6fc | |||
| e98492baa2 | |||
| db52961f5c | |||
| 72f13ef38b | |||
| f33ab7ceca | |||
| 14037f1633 | |||
| ca580268eb | |||
| 7a8cf0e458 | |||
| 36c687a32f | |||
| fccc9691f9 | |||
| 8b68fe052d | |||
| 1273156097 | |||
| 33b7a3760f | |||
| 2cc6cbaa0d | |||
| 74b213ef60 | |||
| 277ffa998c | |||
| 5805b51f4d | |||
| 4dba58ddbe | |||
| a5c2a5b061 | |||
| 3b7f78a93d | |||
| 1524080078 | |||
| 3845980bda | |||
| 6fa4cc5a4a | |||
| 09098f891f | |||
| 9019298cc3 | |||
| 2635f0d65b | |||
| fd5991311a | |||
| 00a7cc393a | |||
| 5ad08fff46 | |||
| 000d6c309e | |||
| ccf161afba | |||
| bf1768e752 | |||
| 2a1aaf2d85 | |||
| a49ce8e50a | |||
| e6474f0597 | |||
| e7f709f0a7 | |||
| 812d47e817 | |||
| 6dbd3f8f06 | |||
| b784422ee3 | |||
| d84cb6536a | |||
| e18bdd557c | |||
| 8b721f425b | |||
| 9a32cda11c | |||
| 174c3bda20 | |||
| 406528eee2 | |||
| c4a3ad41ad | |||
| be772fa5ae | |||
| 46882525f4 | |||
| 1e24ff7bc1 | |||
| 7be21c4983 | |||
| b31f87cef6 | |||
| fe68977033 | |||
| b8969d1937 | |||
| 2460e42322 | |||
| 3658502c74 | |||
| a5cac90ad0 | |||
| fd88dcb274 | |||
| 62e0761351 | |||
| 8930a7f373 | |||
| 8a7ebbf94d | |||
| 75b8e5aa0e | |||
| 5e5c8b4af2 | |||
| c0f10276af | |||
| 384fdfc83d | |||
| 66d290225a | |||
| f125cdb6ae | |||
| 8c4d248afa | |||
| 763cfd921e | |||
| a8b0d454f9 | |||
| bd47f6c4ff | |||
| 6094e0725e | |||
| c488d824bb | |||
| e9c4977dc4 | |||
| 9d139a5975 | |||
| d9e3dd5c44 | |||
| 19b7e3e699 | |||
| 12a37e0f02 | |||
| d8c8767c3d | |||
| 1a822a1170 | |||
| 1d49f054c0 | |||
| f3f5430b1c | |||
| f2f8c4e8d3 | |||
| 8bfeda00d4 | |||
| f3d4dc2cf9 | |||
| 58902485ef | |||
| 891c449ad4 | |||
| 80e927e735 | |||
| 9f0dba173f | |||
| 9513f1007f | |||
| d265113984 | |||
| 526e6de82a | |||
| 2a3314df70 | |||
| 2cd7f4fe6d | |||
| 48505a3045 | |||
| dd6ddc8039 | |||
| 56f9a207de | |||
| 423ba10875 | |||
| 77a5158c2b | |||
| e209db392e | |||
| 726ccc367d | |||
| 6d5b1d9038 | |||
| 31af431d5a | |||
| 57f72b219e | |||
| 4dab96e28c | |||
| 58205a82bb | |||
| 4de49f4f58 | |||
| 85fdfc2024 | |||
| b1c05f40cc | |||
| 53806c2779 | |||
| c34317d13d | |||
| 4199237da0 | |||
| c9363809d8 | |||
| a255d99b0b | |||
| c61257143f | |||
| 9131907bb4 | |||
| 9b80ee1b2f | |||
| 26d31037ce | |||
| 0917623b18 | |||
| 44820a01b3 | |||
| 873730360c | |||
| 3ca8b88044 | |||
| 1e19292b6b | |||
| e196be855e | |||
| a5bafe6439 | |||
| 1f43cdf3da | |||
| f68a7e0c27 | |||
| ca02088666 | |||
| e48342a3f8 | |||
| e28ccedb6c | |||
| ee7ab9f36a | |||
| 07c31d0731 | |||
| 742132a2c8 | |||
| 342c576ea4 | |||
| fe6938675e | |||
| 703432b259 | |||
| ea388b34d0 | |||
| 8c3c38ded7 | |||
| 2fb812be13 | |||
| 628039bb16 | |||
| 80df0152b3 | |||
| 5bf4052d69 | |||
| 434c6026a5 | |||
| 73efc782e9 | |||
| aff9010250 | |||
| 1c30baa335 | |||
| 465119141a | |||
| beabb4a04d | |||
| fc61e178b6 | |||
| bd8acac329 | |||
| 83d1435444 | |||
| 56642ea396 | |||
| 3f307e4c4b | |||
| b1cfc5762d | |||
| 3f5b420a8c | |||
| d732929d7e | |||
| 02d2ef3c63 | |||
| 3aa41f053f | |||
| 8637afcbac | |||
| 08ad07701e | |||
| 01c2d9a5c0 | |||
| 8b75bc4f5f | |||
| d59083b65e | |||
| df211bd625 | |||
| 0495ff0917 | |||
| b77618e06f | |||
| 739b667cc5 | |||
| 1c79888ca6 | |||
| 809ecdb476 | |||
| da455f6dd0 | |||
| d859f42cc0 | |||
| 20a8701c34 | |||
| f6f6db1681 | |||
| 65b47a2e0e | |||
| 3f6d388925 | |||
| a1355e7687 | |||
| ef82ad1f29 | |||
| 9d93af1c81 | |||
| 30099a0cd0 | |||
| 167cfad72a | |||
| a8624e0cff | |||
| c8df6f2700 | |||
| d60f2dfa09 | |||
| a8516369f4 | |||
| 8c0b3f592f | |||
| 09ad740434 | |||
| 468d68ac6b | |||
| 16d854ca4c | |||
| 8ffdaeb099 | |||
| c7fa84529c | |||
| 21b2297aec | |||
| 429ddc12b6 | |||
| 1cfaf64418 | |||
| 97c4333495 | |||
| 1d9294c8e6 | |||
| 623e564f07 | |||
| a1e0686162 | |||
| acb54991bb | |||
| bb7b9e3f5a | |||
| 9e6bf021da | |||
| dbc9cb7a77 | |||
| 38bb19a275 | |||
| 286860a1b7 | |||
| 738b6addf0 | |||
| d2097c1dd7 | |||
| 4eaa82f978 | |||
| 9d886da6f9 | |||
| e1222fbfaa | |||
| 972dee623b | |||
| 38c1b14684 | |||
| 8899fc8e85 | |||
| 79367b82de | |||
| 0669b06650 | |||
| 42fa28f850 | |||
| 75e493a940 | |||
| feb2b736d3 | |||
| 606d419e92 | |||
| d844623a1e | |||
| 1b75164c4f | |||
| a85d4996c2 | |||
| 2fc3f2147b | |||
| 0010aff05d | |||
| ca3a343e2e | |||
| 2d68f4131c | |||
| b159b21c85 | |||
| b5492632a8 | |||
| bc004dfa3a | |||
| 21e852b8ec | |||
| 187f64c006 | |||
| 80ede3797f | |||
| 0b04eefd12 | |||
| e9d6ec2a29 | |||
| 1f94104b69 | |||
| 1599cfff9b | |||
| ac62276943 | |||
| 8417b2d525 | |||
| 0d64aad4dd | |||
| d3056c7605 | |||
| 134086a6b0 | |||
| a6cb8d37dd | |||
| 74f9945171 | |||
| ff9092ec84 | |||
| de24f4647f | |||
| 563410c3cb | |||
| 312dc3e82a | |||
| 1cba27c1f2 | |||
| 964aa16831 | |||
| 94fb282481 | |||
| 97fd37e226 | |||
| 7c3c631075 | |||
| 6d1cd0f409 | |||
| 82cd2d41d1 | |||
| 13be7b78c6 | |||
| 31446331e1 | |||
| 7985a46ead | |||
| 550ca0f9a7 | |||
| c18cb16baa | |||
| 59f87fcc95 | |||
| e8808d3a67 | |||
| 02425b807e | |||
| 6c82b2b213 | |||
| 1f65d87fc3 | |||
| 16dafd5f1b | |||
| 539b4723e7 | |||
| 6daf871863 | |||
| be5802a5da | |||
| 8ba3466048 | |||
| ebb5e18761 | |||
| feb689cf8e | |||
| 0b1e206141 | |||
| 5646cbe63f | |||
| 68f9530565 | |||
| 1a1cd35d80 | |||
| a1340d72b6 | |||
| f9a73a08bd | |||
| 4ebecbcca8 | |||
| 18371ab1df | |||
| a09275afde | |||
| 70be195959 | |||
| 1cb4f631b2 | |||
| ae1a87c6d2 | |||
| 00f60eeb27 | |||
| 685bd6a461 | |||
| ce1114a4ee | |||
| 1c5e4798dd | |||
| d50e8d22ac | |||
| f6c7931e85 | |||
| 1e3cbd82ed | |||
| e8c8ee6cd2 | |||
| c5e6042bf2 | |||
| 9e71da8d1a | |||
| d668ce14f6 | |||
| 6bb2f550eb | |||
| c7cc9eab88 | |||
| 0ad7cb9ed1 | |||
| 32729600c6 | |||
| 22f1a4b6c4 | |||
| 01b9624ef0 | |||
| c9ab5f63bf | |||
| 7675457a06 | |||
| 53bb69ee62 | |||
| adf68ebc35 | |||
| f900fdd321 | |||
| 305dc2e1f8 | |||
| b1862d32dc | |||
| 694a0116e3 | |||
| 44354f67e5 | |||
| 9e5e1a2eab | |||
| 038157dd57 | |||
| 001574e5ef | |||
| 4db0f95c95 | |||
| dc8379a014 | |||
| a76fd08dc3 | |||
| 795b7cf736 | |||
| 18590f065f | |||
| adebde9044 | |||
| 5f7051b38f | |||
| d4adef7834 | |||
| f8bc038db6 | |||
| 9aea856f11 | |||
| 4e60e22c49 | |||
| 8c7b9e4c78 | |||
| 30e8aa71e2 | |||
| 6b4267b2d3 | |||
| 0b3d5bd38c | |||
| 3aa984182e | |||
| 435924f201 | |||
| aede646189 | |||
| 5604e59586 | |||
| 92ab48ece5 | |||
| c0dbf793ba | |||
| f561aa9e95 | |||
| 5382226a54 | |||
| db36c62f99 | |||
| e7c58791af | |||
| 8fa158769d | |||
| 3a3b383f2f | |||
| 8d19c608e0 | |||
| d1555dcdb6 | |||
| 7b7039b4d9 | |||
| 85d7748162 | |||
| 2e268151e2 | |||
| 6f9f1fcf6b | |||
| 5bc0851c08 | |||
| 615809169b | |||
| 504e653f6b | |||
| 66819c2ad0 | |||
| 2e5bfaca3b | |||
| 0fa851fb80 | |||
| 298ec8cf20 | |||
| 377b4b7962 | |||
| fdf53e6461 | |||
| 8919b0a08e | |||
| e432059aed | |||
| d25a8c245b | |||
| 23a312d5c1 | |||
| da711594f8 | |||
| 19118f162e | |||
| ec6c0bca1b | |||
| 81a38d7261 | |||
| a59caf183d | |||
| 5a1c2c9a27 | |||
| 4031e29cae | |||
| 2c0ad03f8a | |||
| bba0e686dc | |||
| d9a521a4e5 | |||
| 868c0e248d | |||
| b74c263fd5 | |||
| fa1cdfccd3 | |||
| 7ba252787c | |||
| fb90152c7e | |||
| b10a48b5ed | |||
| cbf2c0d1e4 | |||
| fabf0161ce | |||
| 36ecf60c23 | |||
| 5e3a87a91e | |||
| a04b4ff284 | |||
| d1babb64e9 | |||
| 641cdb32d8 | |||
| b1fdca5da2 | |||
| fcb08e9dfc | |||
| 47076029f1 | |||
| 252837158b | |||
| 9d6ab9665b | |||
| 65814f1e95 | |||
| 53f5f477ef | |||
| 4d01387a1b | |||
| c08509a071 | |||
| f26998303d | |||
| 365cdd6acb | |||
| bd38e8f355 | |||
| 0328a7630a | |||
| eb2366fe11 | |||
| d6cda93aff | |||
| 8ae664fa2e | |||
| ff52f52a8d | |||
| 5f68280ad0 | |||
| c064748536 | |||
| b864aa9c81 | |||
| cf92eae985 | |||
| e6f3b874cb | |||
| 9bdb32ed8f | |||
| 79e38cbce7 | |||
| b413a226a4 | |||
| 9d80066321 | |||
| c4b7e04b7c | |||
| d11c3d0ef0 | |||
| ddfca61360 | |||
| 8fee75d517 | |||
| 72de2d80e7 | |||
| af2d1ef4e5 | |||
| 50ebfc3db0 | |||
| 508acebe8e | |||
| 745c57d41b | |||
| 1e039e86b6 | |||
| f7cb8bc014 | |||
| 5482db2edd | |||
| 31e04a85a9 | |||
| 1583dde5e2 | |||
| 533a9f03c6 | |||
| 0a69580432 | |||
| b6635e68e3 | |||
| da6924eba2 | |||
| 8b809b2831 | |||
| dfa4c97cb6 | |||
| 833e7ad765 | |||
| 20739e4a2e | |||
| eec160855f | |||
| 86e35a7740 | |||
| defcbbb1b6 | |||
| c7d669fd38 | |||
| 7556beda48 | |||
| d891c8da3f | |||
| ae6583d54c | |||
| 4b026481c9 | |||
| aa5a991ea5 | |||
| 9b2f7ac315 | |||
| 3b35349320 | |||
| 44fd16cd13 | |||
| ccaa6272eb | |||
| 56bdb1c104 | |||
| 457f10c92b | |||
| b1e98b1f79 | |||
| bf63cef0aa | |||
| 49a0858a80 | |||
| 0be8778b67 | |||
| 695db9d53e | |||
| 1bba8b4bf5 | |||
| 937a1f3f78 | |||
| 5a44eb2f38 | |||
| 9b094a0d31 | |||
| ad760434e8 | |||
| 1914955a10 | |||
| 5229c204df | |||
| a06afe6bc1 | |||
| ef668f67f3 | |||
| 639d5117b7 | |||
| 53c94be934 | |||
| afa8cdda5d | |||
| 1b76695c46 | |||
| c31a7cce97 | |||
| f50a4d6138 | |||
| 5ee6f0e39e | |||
| 6af48e18d5 | |||
| d0653c81b2 | |||
| bdfb28916e | |||
| 5ee23a4c26 | |||
| 07a938d124 | |||
| 7d3ba1e10e | |||
| 790d6b97f1 | |||
| 3492c26259 | |||
| dac087eb89 | |||
| 3d01c597b9 | |||
| 550fe20d65 | |||
| 734bd6a566 | |||
| ba734b4e63 | |||
| 0b03a01faf | |||
| 432b4eb93e | |||
| bb9fa1a2a5 | |||
| aaec2f4d84 | |||
| 42dab29a3e | |||
| 86a91da916 | |||
| 30dd34f9dc | |||
| aaf65bbda6 | |||
| 773af482c2 | |||
| 16ff411b81 | |||
| b5ecda30c3 | |||
| f8eab5594b | |||
| 71e0b8a981 | |||
| 8e84567555 | |||
| cd4822dcf0 | |||
| 575eb8593a | |||
| dccd619755 | |||
| f36b61d7a2 | |||
| a366648c38 | |||
| 07f51356f4 | |||
| bb460c380d | |||
| 401c2d127c | |||
| 0e32664ca0 | |||
| fba7bfb5ef | |||
| 5b0c10922b | |||
| f9b761d0eb | |||
| da8821fc58 | |||
| 8213e7b5aa | |||
| 17cc39f4b7 | |||
| 581161d577 | |||
| f3b68b3810 | |||
| 20f525ba0e | |||
| 94acfda024 | |||
| ed236b318c | |||
| e7761b4485 | |||
| 0d6b897e91 | |||
| 71360800a3 | |||
| 467292ad6c | |||
| 99b87cc07b | |||
| dbd6f737cd | |||
| ba2ce243b0 | |||
| ace4ae19e2 | |||
| 1abfd057ee | |||
| 84cc5f0656 | |||
| 32f002dbfc | |||
| 311c97f868 | |||
| 818f7e53ca | |||
| 11ecfd5d62 | |||
| a75d5e6b34 | |||
| 64b52896fc | |||
| 3c06832d76 | |||
| 215abd01c2 | |||
| 876b9769e7 | |||
| 0ba4184d02 | |||
| 739b1d19f5 | |||
| 3a036de799 | |||
| 4a69d00815 | |||
| 54f4d735c3 | |||
| e04b06d765 | |||
| 68afc4c63e | |||
| 991c91d404 | |||
| 901a7c6656 | |||
| ead15e37f6 | |||
| 22b16f01be | |||
| 895a228107 | |||
| b21c9abdf9 | |||
| a29c8f2070 | |||
| 02872dc1fe | |||
| 88a885ca73 | |||
| 9865ee8e1c | |||
| a0e1c91cb1 | |||
| 5a28ff76ff | |||
| f081fabe1a | |||
| bfec07e45e | |||
| 893688565f | |||
| 3c58a7323c | |||
| feee292de0 | |||
| f3d263e1b9 | |||
| abfd26c025 | |||
| bab1d3754a | |||
| 87fc242d80 | |||
| 6c0010be41 | |||
| a05b9c1ac5 | |||
| 1ecd82ced1 | |||
| e633ca80f4 | |||
| c7f19d5834 | |||
| 265d429b67 | |||
| e60c3ff6e2 | |||
| 8853bd8325 | |||
| 0b37f088f1 | |||
| 12c527afb3 | |||
| 8359d73fd3 | |||
| 3584061f19 | |||
| 5ae5be6625 | |||
| 3b5b3bd24b | |||
| 328146db6e | |||
| f777c320cc | |||
| b18dc8f9bc | |||
| 394fcc2576 | |||
| fbba5d3853 | |||
| c9b0d0b05f | |||
| 707fbf55c0 | |||
| 758860dbca | |||
| 74a8be4c5a | |||
| ca9196fa8f | |||
| 8dc13be924 | |||
| 5245ccad3c | |||
| c7d3a66095 | |||
| cf65a6357c | |||
| a8a22cff06 | |||
| 8056368e03 | |||
| ff37fb68ba | |||
| 76b21f5973 | |||
| 95d22cbb6f | |||
| 5e372c021b | |||
| 13df1c9305 | |||
| 632aa8204b | |||
| 1e8297be43 | |||
| 647cdd931c | |||
| 9f73d240ab | |||
| 6b90e9edf2 | |||
| 25704838d2 | |||
| 7af9cdf804 | |||
| 97e077e115 | |||
| ab4580fd81 | |||
| 20047577b0 | |||
| a9d3d253eb | |||
| 4f1e03f114 | |||
| 713c8487cb | |||
| a69f66f127 | |||
| 0643fd3e6c | |||
| 577b2a2ace | |||
| 811bf96eb1 | |||
| 277b30ca8b | |||
| d0bdd2ade6 | |||
| 27f7ca26d2 | |||
| 797804cacc | |||
| f45b4a4cdf | |||
| 42e1af5c60 | |||
| 1b04599b15 | |||
| 32e73280a6 | |||
| c55ee4f527 | |||
| 1afc5d1d7c | |||
| 9f593baf0c | |||
| fe0d954a54 | |||
| 2e9177e5f6 | |||
| a028d2aa16 | |||
| 60e431608f | |||
| 0c78026b6c | |||
| a65a5fa196 | |||
| c727da815b | |||
| feb8a8642c | |||
| 7bf3a2bed0 | |||
| 4a29947a5a | |||
| fbc655614c | |||
| 960b5e29d4 | |||
| a722395bec | |||
| ece8a36cba | |||
| 5b37bb8b4e | |||
| 7d1c46009f | |||
| 8ae1a76dc1 | |||
| cc66a06872 | |||
| 6173664ff7 | |||
| 091f0f609d | |||
| 8adfc833f7 | |||
| a861a2c6b0 | |||
| 5567c43251 | |||
| aef8957307 | |||
| 41ebd9846a | |||
| 4af83ade14 | |||
| 2332f14d66 | |||
| 14689e058c | |||
| 9c2a8db9f2 | |||
| 493510d059 | |||
| f14120149b | |||
| 68cac59ac0 | |||
| 054341b715 | |||
| b72efed56f | |||
| dbceec76d0 | |||
| 86bfec1919 | |||
| f6edfa5ddf | |||
| 2b27dcbf99 | |||
| 92551342cc | |||
| ede9ea4606 | |||
| fb302c6086 | |||
| 158d267659 | |||
| 13a0354f66 | |||
| 0286828be3 | |||
| dd4f3cc872 | |||
| 3316d3e1ca | |||
| 7fb3840f2f | |||
| eb3b32ecd6 | |||
| 44e0642562 | |||
| 36e0f0ea36 | |||
| 62359370e9 | |||
| 49e73a89f3 | |||
| ca07ad7c72 | |||
| a5a25141fc | |||
| 988336ccff | |||
| 0d96221fa3 | |||
| 115d490a25 | |||
| f02a24d232 | |||
| ef45ecf894 | |||
| 83c4266cd8 | |||
| 1f760eb35f | |||
| d631af5a05 | |||
| 8297244aba | |||
| 10c67e7b5d | |||
| c946509bda | |||
| 195e520ec4 | |||
| e5a1e88fd7 | |||
| 9247f15b30 | |||
| a469fc36f2 | |||
| 13b2f9b17a | |||
| ed10899d6b | |||
| 4683996246 | |||
| 2a2e5de7d8 | |||
| 21b2002461 | |||
| ce3ef4c74d | |||
| 8824532f26 | |||
| e9b9eb00b0 | |||
| 4c6e0b3b2e | |||
| fcbc07c689 | |||
| 88a41dce86 | |||
| 6af627a8ed | |||
| 34044a7707 | |||
| 422c823460 | |||
| d867f8302d | |||
| aef8953c79 | |||
| 1a9e88fe9e | |||
| e909b922a2 | |||
| f02c1bbbf7 | |||
| f0cadb1f1a | |||
| 0de8c866ad | |||
| 39e5fd3e49 | |||
| 82cb637dd1 | |||
| ec0f3db314 | |||
| 3264cd0904 | |||
| 8bbc463b78 | |||
| 9f5d389c30 | |||
| 6324486d70 | |||
| 31a68021f5 | |||
| 09cf058498 | |||
| da4208acbb | |||
| 4b7c21be6d | |||
| c8156c7e21 | |||
| 22a21448cb | |||
| c2ace47225 | |||
| e31fcf0fcb | |||
| 9ca9d7f526 | |||
| 4bfae2238d | |||
| 461087b5ff | |||
| 8a55244374 | |||
| d0cc72841b | |||
| d024dd77ed | |||
| 971a1b5739 | |||
| b4bbc01982 | |||
| 33269bb6b4 | |||
| e6b105ae39 | |||
| 26b40903ab | |||
| 7de7a8ea28 | |||
| dfe9854be3 | |||
| a643f96d67 | |||
| 6355d8adc7 | |||
| 5536e9660e | |||
| a1e50d37a5 | |||
| 0ad208d6a0 | |||
| 489961e1a0 | |||
| ac6a0f4e6d | |||
| a50f11201e | |||
| dcdce69fc6 | |||
| 5e661d47d6 | |||
| 4a06adbac6 | |||
| 31c2694007 | |||
| 2c1a4cc09c | |||
| a1695114a2 | |||
| 7e3179ab9f | |||
| bf4b5ec985 | |||
| f908c2b1aa | |||
| dcc340f7f4 | |||
| dcb44b10c9 | |||
| fa8e52c406 | |||
| 8821d12eb2 | |||
| 7ccff028ff | |||
| f13ed0fb84 | |||
| 853fa4578a | |||
| a726b7cd47 | |||
| 7c1c75b46c | |||
| df5bda6574 | |||
| 8cf810baee | |||
| 5cb2f78f78 | |||
| 58e74af071 | |||
| 85eeb95428 | |||
| 9468d7239d | |||
| 35b8512ac7 | |||
| 8e89440ba8 | |||
| 13bd516cfc | |||
| 89ab4580cd | |||
| 98e2bdfc8b | |||
| c19b8879e9 | |||
| b5e534b893 | |||
| df0bc00522 | |||
| 570f2e1f2a | |||
| bed788eb58 | |||
| 7940fd05f0 | |||
| b076483caa | |||
| c0a9c70790 | |||
| 405dab65f7 | |||
| f7b44286aa | |||
| 950c22cdab | |||
| 36e6363765 | |||
| c5b63ded0a | |||
| 22961157ad | |||
| 0d8820b9aa | |||
| 0bcd30c4a6 | |||
| b004443371 | |||
| 03446c5633 | |||
| e5f5f75b37 | |||
| 2c2dba6d14 | |||
| b5f220fa84 | |||
| d253208bd7 | |||
| d784354a53 | |||
| 0ecf7faad3 | |||
| f9a9b979c5 | |||
| 20a01cefcc | |||
| 431b9c76b0 | |||
| d03543ea61 | |||
| 8e4860f8f0 | |||
| 9a26b36803 | |||
| f74b9583e6 | |||
| 907c55ff3e | |||
| 8c584cd057 | |||
| 30a34196d7 | |||
| 8dc3cffa6c | |||
| 91b5fb62ee | |||
| a5a82d9be7 | |||
| ab919f9f89 | |||
| 99af5f8a36 | |||
| b5a80c08f2 | |||
| 87a3607632 | |||
| aa0b6392db | |||
| 9ca4ec399b | |||
| 6abad509cd | |||
| db570e36df | |||
| c505546abb | |||
| c2e5b284a3 | |||
| 2724b46282 | |||
| cb41538eea | |||
| 001c9effa4 | |||
| 692268185d | |||
| f1dd46a07a | |||
| 868798ed2e | |||
| f38ad2ba5e | |||
| 23936f9f6e | |||
| 5f9afe5a86 | |||
| ed5013b331 | |||
| fe33ca9848 | |||
| b7e68347ad | |||
| 5726e3efae | |||
| da31a4fcda | |||
| 821c1ab0b1 | |||
| b8bfd364fe | |||
| 5dc30504a8 | |||
| ee829af310 | |||
| a89fc720be | |||
| 18c6acf7ad | |||
| b7beaae53a | |||
| 60aec2e88d | |||
| c237757c9a | |||
| ea4460434c | |||
| 384bf6061c | |||
| 2e62733c7a | |||
| ec5d73ee48 | |||
| 721e288a91 | |||
| 905db179f4 | |||
| 9935e6c7a2 | |||
| 4ed94b566b | |||
| 0938d3fec3 | |||
| f671e02e97 | |||
| 1ac964600a | |||
| a6b9d5390d | |||
| 722036c77c | |||
| eec68d81f4 | |||
| ac68c046f6 | |||
| 1cebcbc387 | |||
| 390f2bf6b0 | |||
| 32c4704b74 | |||
| b4832c4b55 | |||
| 35d0cc1d57 | |||
| 992b23297c | |||
| a5e114da73 | |||
| 392c0ad13c | |||
| faf38d20a4 | |||
| 8204c80881 | |||
| e10d561f92 | |||
| 5df524b771 | |||
| a65bea9533 | |||
| 13b5cd95a7 | |||
| eab6daf64b | |||
| 3232b4e8bf | |||
| 34273ff010 | |||
| 42011f0665 | |||
| ca6fad675b | |||
| c9baf00762 | |||
| 1f6c3c92af | |||
| 689c4d017d | |||
| 6df92c0618 | |||
| 460fbec776 | |||
| 1706757587 | |||
| b9db670ede | |||
| 5cb8d38ad1 | |||
| b94bdbb8f8 | |||
| 03b7c69ed7 | |||
| 4fc68b88e7 | |||
| ef09517061 | |||
| f15bfcfa27 | |||
| 9939867aba | |||
| 192768e109 | |||
| 758edbb4d7 |
+34
-7
@@ -1,18 +1,45 @@
|
||||
# This file is for unifying the coding style for different editors and IDEs
|
||||
# editorconfig.org
|
||||
# This project uses EditorConfig for setting code formatting options: http://EditorConfig.org
|
||||
|
||||
root = true
|
||||
|
||||
# Default settings for all files
|
||||
[*]
|
||||
end_of_line = lf
|
||||
charset = utf-8
|
||||
end_of_line = lf
|
||||
trim_trailing_whitespace = true
|
||||
insert_final_newline = true
|
||||
indent_style = tab
|
||||
indent_size = tab
|
||||
tab_width = 4
|
||||
max_line_length = 120
|
||||
|
||||
# Tabs in JS unless otherwise specified
|
||||
[**.js]
|
||||
spaces_around_operators = true
|
||||
spaces_around_brackets = none
|
||||
curly_bracket_next_line = true
|
||||
indent_brace_style = Allman
|
||||
continuation_indent_size = 4
|
||||
|
||||
[*.{css,less}]
|
||||
curly_bracket_next_line = false
|
||||
continuation_indent_size = 0
|
||||
|
||||
# Formats likely to be pasted into an REPL on a terminal should not use tabs to avoid triggering tab-completion.
|
||||
[*.{sh,bash,sql,psql,pgsql}]
|
||||
indent_style = space
|
||||
indent_size = 4
|
||||
|
||||
[*.yml]
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
|
||||
[*.md]
|
||||
trim_trailing_whitespace = false
|
||||
[*.{js,json}]
|
||||
indent_style = space
|
||||
indent_size = 4
|
||||
|
||||
# Special overrides for automatically-generated files
|
||||
[package.json]
|
||||
indent_size = 2
|
||||
|
||||
# For some formats, trailing whitespace is significant; don't strip it.
|
||||
[*.{md,diff,patch}]
|
||||
trim_trailing_whitespace = false
|
||||
|
||||
@@ -0,0 +1,76 @@
|
||||
{
|
||||
"env": {
|
||||
"browser": true,
|
||||
"es6": true
|
||||
},
|
||||
"rules": {
|
||||
"comma-dangle": 2,
|
||||
"no-cond-assign": 2,
|
||||
"no-control-regex": 2,
|
||||
"no-debugger": 2,
|
||||
"no-dupe-args": 2,
|
||||
"no-dupe-keys": 2,
|
||||
"no-duplicate-case": 2,
|
||||
"no-empty-character-class": 2,
|
||||
"no-empty": 2,
|
||||
"no-ex-assign": 2,
|
||||
"no-extra-boolean-cast": 2,
|
||||
"no-extra-parens": 2,
|
||||
"no-extra-semi": 2,
|
||||
"no-func-assign": 2,
|
||||
"no-inner-declarations": 2,
|
||||
"no-invalid-regexp": 2,
|
||||
"no-negated-in-lhs": 2,
|
||||
"no-regex-spaces": 2,
|
||||
"no-sparse-arrays": 2,
|
||||
"no-unexpected-multiline": 2,
|
||||
"no-unreachable": 2,
|
||||
"valid-typeof": 2,
|
||||
"accessor-pairs": 2,
|
||||
"block-scoped-var": 2,
|
||||
"complexity": 2,
|
||||
"curly": 2,
|
||||
"dot-notation": [2, {"allowKeywords": false}],
|
||||
"eqeqeq": 2,
|
||||
"guard-for-in": 2,
|
||||
"semi": 2,
|
||||
"no-alert": 2,
|
||||
"no-caller": 2,
|
||||
"no-case-declarations": 2,
|
||||
"no-div-regex": 2,
|
||||
"no-else-return": 2,
|
||||
"no-empty-label": 2,
|
||||
"no-empty-pattern": 2,
|
||||
"no-eq-null": 2,
|
||||
"no-eval": 2,
|
||||
"no-extend-native": 2,
|
||||
"no-extra-bind": 2,
|
||||
"no-floating-decimal": 2,
|
||||
"no-implied-eval": 2,
|
||||
"no-invalid-this": 2,
|
||||
"no-iterator": 2,
|
||||
"no-lone-blocks": 2,
|
||||
"no-loop-func": 2,
|
||||
"no-multi-spaces": 2,
|
||||
"no-native-reassign": 2,
|
||||
"no-new-func": 2,
|
||||
"no-new-wrappers": 2,
|
||||
"no-new": 2,
|
||||
"no-octal-escape": 2,
|
||||
"no-octal": 2,
|
||||
"no-proto": 2,
|
||||
"no-redeclare": 2,
|
||||
"no-script-url": 2,
|
||||
"no-self-compare": 2,
|
||||
"no-sequences": 2,
|
||||
"no-throw-literal": 2,
|
||||
"no-unused-expressions": 2,
|
||||
"no-useless-call": 2,
|
||||
"no-useless-concat": 2,
|
||||
"no-void": 2,
|
||||
"no-with": 2,
|
||||
"radix": 2,
|
||||
"wrap-iife": 2,
|
||||
"yoda": 2
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
The issues forum is __NOT__ for support requests. It is for bugs and feature requests only.
|
||||
Please read https://github.com/angular-ui/bootstrap/blob/master/CONTRIBUTING.md and search
|
||||
existing issues (both open and closed) prior to opening any new issue and ensure you follow the instructions therein.
|
||||
|
||||
### Bug description:
|
||||
|
||||
### Link to minimally-working plunker that reproduces the issue:
|
||||
|
||||
### Steps to reproduce the issue:
|
||||
|
||||
### Version of Angular, UIBS, and Bootstrap
|
||||
|
||||
Angular:
|
||||
|
||||
UIBS:
|
||||
|
||||
Bootstrap:
|
||||
+2
-1
@@ -9,13 +9,14 @@ lib-cov
|
||||
*.swp
|
||||
*.swo
|
||||
.DS_Store
|
||||
.idea
|
||||
|
||||
pids
|
||||
logs
|
||||
results
|
||||
dist
|
||||
# test coverage files
|
||||
coverage/
|
||||
.coverage/
|
||||
|
||||
node_modules
|
||||
npm-debug.log
|
||||
|
||||
@@ -8,7 +8,23 @@
|
||||
"eqnull": true,
|
||||
"quotmark": "single",
|
||||
"trailing": true,
|
||||
"undef": true,
|
||||
"browser": true,
|
||||
"jquery": true,
|
||||
"globals": {
|
||||
"angular": true
|
||||
"angular": false,
|
||||
|
||||
// For Jasmine
|
||||
"after" : false,
|
||||
"afterEach" : false,
|
||||
"before" : false,
|
||||
"beforeEach" : false,
|
||||
"describe" : false,
|
||||
"expect" : false,
|
||||
"jasmine" : false,
|
||||
"module" : false,
|
||||
"spyOn" : false,
|
||||
"inject" : false,
|
||||
"it" : false
|
||||
}
|
||||
}
|
||||
+38
@@ -0,0 +1,38 @@
|
||||
lib-cov
|
||||
*.seed
|
||||
*.log
|
||||
*.csv
|
||||
*.dat
|
||||
*.out
|
||||
*.pid
|
||||
*.gz
|
||||
*.swp
|
||||
*.swo
|
||||
.DS_Store
|
||||
|
||||
pids
|
||||
logs
|
||||
results
|
||||
# test coverage files
|
||||
.coverage/
|
||||
|
||||
node_modules
|
||||
npm-debug.log
|
||||
|
||||
.git
|
||||
docs
|
||||
misc
|
||||
.editorconfig
|
||||
.gitattributes
|
||||
.gitignore
|
||||
.jshintrc
|
||||
.travis.yml
|
||||
CONTRIBUTING.md
|
||||
Gruntfile.js
|
||||
karma.conf.js
|
||||
ROADMAP.md
|
||||
|
||||
dist/assets
|
||||
dist/index.html
|
||||
dist/versions-mapping.json
|
||||
dist/*-SNAPSHOT*
|
||||
+15
-7
@@ -1,11 +1,19 @@
|
||||
language: node_js
|
||||
node_js:
|
||||
- "0.10"
|
||||
language: node_js
|
||||
node_js:
|
||||
- "5.9"
|
||||
env:
|
||||
- CXX=g++-4.8
|
||||
addons:
|
||||
apt:
|
||||
sources:
|
||||
- ubuntu-toolchain-r-test
|
||||
packages:
|
||||
- g++-4.8
|
||||
|
||||
before_script:
|
||||
before_install:
|
||||
- export DISPLAY=:99.0
|
||||
- sh -e /etc/init.d/xvfb start
|
||||
- npm install --quiet -g grunt-cli karma
|
||||
- npm install
|
||||
- npm install --quiet -g karma
|
||||
|
||||
script: grunt
|
||||
script: grunt
|
||||
sudo: false
|
||||
|
||||
+1742
-382
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,22 @@
|
||||
# Contributor Code of Conduct
|
||||
|
||||
As contributors and maintainers of this project, and in the interest of fostering an open and welcoming community, we pledge to respect all people who contribute through reporting issues, posting feature requests, updating documentation, submitting pull requests or patches, and other activities.
|
||||
|
||||
We are committed to making participation in this project a harassment-free experience for everyone, regardless of level of experience, gender, gender identity and expression, sexual orientation, disability, personal appearance, body size, race, ethnicity, age, religion, or nationality.
|
||||
|
||||
Examples of unacceptable behavior by participants include:
|
||||
|
||||
* The use of sexualized language or imagery
|
||||
* Personal attacks
|
||||
* Trolling or insulting/derogatory comments
|
||||
* Public or private harassment
|
||||
* Publishing other's private information, such as physical or electronic addresses, without explicit permission
|
||||
* Other unethical or unprofessional conduct.
|
||||
|
||||
Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct. By adopting this Code of Conduct, project maintainers commit themselves to fairly and consistently applying these principles to every aspect of managing this project. Project maintainers who do not follow or enforce the Code of Conduct may be permanently removed from the project team.
|
||||
|
||||
This code of conduct applies both within project spaces and in public spaces when an individual is representing the project or its community.
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by opening an issue or contacting one or more of the project maintainers.
|
||||
|
||||
This Code of Conduct is adapted from the [Contributor Covenant](http://contributor-covenant.org), version 1.2.0, available at [http://contributor-covenant.org/version/1/2/0/](http://contributor-covenant.org/version/1/2/0/)
|
||||
+8
-5
@@ -1,13 +1,15 @@
|
||||
## Got a question or problem?
|
||||
|
||||
Please, do not open issues for the general support questions as we want to keep GitHub issues for bug reports and feature requests. You've got much better chances of getting your question answered on (StackOverflow)[http://stackoverflow.com/questions/tagged/angular-ui-bootstrap] where maintainers are looking at questions questions tagged with `angular-ui-bootstrap`.
|
||||
Firstly, please go over our FAQ: https://github.com/angular-ui/bootstrap/wiki/FAQ
|
||||
|
||||
Please, do not open issues for the general support questions as we want to keep GitHub issues for bug reports and feature requests. You've got much better chances of getting your question answered on [StackOverflow](http://stackoverflow.com/questions/tagged/angular-ui-bootstrap) where maintainers are looking at questions tagged with `angular-ui-bootstrap`.
|
||||
|
||||
StackOverflow is a much better place to ask questions since:
|
||||
* there are hundreds of people willing to help on StackOverflow
|
||||
* questions and answers stay available for public viewing so your question / answer might help someone else
|
||||
* SO voting system assures that the best answers are prominently visible.
|
||||
|
||||
To save your and our time we will be systematically closing all the issues that are request for general support and redirecting people to StackOverflow.
|
||||
To save your and our time we will be systematically closing all the issues that are requests for general support and redirecting people to StackOverflow.
|
||||
|
||||
## You think you've found a bug?
|
||||
|
||||
@@ -15,13 +17,13 @@ Oh, we are ashamed and want to fix it asap! But before fixing a bug we need to r
|
||||
* version of AngularJS used
|
||||
* version of this library that you are using
|
||||
* 3rd-party libraries used, if any
|
||||
* and most importantly - a use-case that fails
|
||||
* and most importantly - a use-case that fails
|
||||
|
||||
A minimal reproduce scenario using http://plnkr.co/ allows us to quickly confirm a bug (or point out coding problem) as well as confirm that we are fixing the right problem.
|
||||
A minimal reproduce scenario using http://plnkr.co/ allows us to quickly confirm a bug (or point out coding problem) as well as confirm that we are fixing the right problem.
|
||||
|
||||
We will be insisting on a minimal reproduce scenario in order to save maintainers time and ultimately be able to fix more bugs. Interestingly, from our experience users often find coding problems themselves while preparing a minimal plunk. We understand that sometimes it might be hard to extract essentials bits of code from a larger code-base but we really need to isolate the problem before we can fix it.
|
||||
|
||||
The best part is that you don't need to create plunks from scratch - you can for one from our [demo page](http://angular-ui.github.io/bootstrap/).
|
||||
The best part is that you don't need to create plunks from scratch - you can use one from our [demo page](http://angular-ui.github.io/bootstrap/).
|
||||
|
||||
Unfortunately we are not able to investigate / fix bugs without a minimal reproduce scenario using http://plnkr.co/, so if we don't hear back from you we are going to close an issue that don't have enough info to be reproduced.
|
||||
|
||||
@@ -40,3 +42,4 @@ We are always looking for the quality contributions and will be happy to accept
|
||||
* Please assure that you are submitting quality code, specifically make sure that:
|
||||
* your directive has accompanying tests and all the tests are passing; don't hesitate to contact us (angular-ui@googlegroups.com) if you need any help with unit testing
|
||||
* your PR doesn't break the build; check the Travis-CI build status after opening a PR and push corrective commits if anything goes wrong
|
||||
* your commits conform to the conventions established [here](https://github.com/stevemao/conventional-changelog-angular/blob/master/convention.md)
|
||||
|
||||
+536
-368
@@ -1,392 +1,560 @@
|
||||
var markdown = require('node-markdown').Markdown;
|
||||
const marked = require('marked');
|
||||
const fs = require('fs');
|
||||
const _ = require('lodash');
|
||||
|
||||
module.exports = function(grunt) {
|
||||
require('load-grunt-tasks')(grunt);
|
||||
|
||||
grunt.loadNpmTasks('grunt-contrib-watch');
|
||||
grunt.loadNpmTasks('grunt-contrib-concat');
|
||||
grunt.loadNpmTasks('grunt-contrib-copy');
|
||||
grunt.loadNpmTasks('grunt-contrib-jshint');
|
||||
grunt.loadNpmTasks('grunt-contrib-uglify');
|
||||
grunt.loadNpmTasks('grunt-html2js');
|
||||
grunt.loadNpmTasks('grunt-karma');
|
||||
grunt.loadNpmTasks('grunt-conventional-changelog');
|
||||
grunt.loadNpmTasks('grunt-ngdocs');
|
||||
grunt.loadNpmTasks('grunt-ddescribe-iit');
|
||||
// Project configuration.
|
||||
grunt.util.linefeed = '\n';
|
||||
|
||||
// Project configuration.
|
||||
grunt.util.linefeed = '\n';
|
||||
|
||||
grunt.initConfig({
|
||||
ngversion: '1.2.16',
|
||||
bsversion: '3.1.1',
|
||||
modules: [],//to be filled in by build task
|
||||
pkg: grunt.file.readJSON('package.json'),
|
||||
dist: 'dist',
|
||||
filename: 'ui-bootstrap',
|
||||
filenamecustom: '<%= filename %>-custom',
|
||||
meta: {
|
||||
modules: 'angular.module("ui.bootstrap", [<%= srcModules %>]);',
|
||||
tplmodules: 'angular.module("ui.bootstrap.tpls", [<%= tplModules %>]);',
|
||||
all: 'angular.module("ui.bootstrap", ["ui.bootstrap.tpls", <%= srcModules %>]);',
|
||||
banner: ['/*',
|
||||
' * <%= pkg.name %>',
|
||||
' * <%= pkg.homepage %>\n',
|
||||
' * Version: <%= pkg.version %> - <%= grunt.template.today("yyyy-mm-dd") %>',
|
||||
' * License: <%= pkg.license %>',
|
||||
' */\n'].join('\n')
|
||||
},
|
||||
delta: {
|
||||
docs: {
|
||||
files: ['misc/demo/index.html'],
|
||||
tasks: ['after-test']
|
||||
},
|
||||
html: {
|
||||
files: ['template/**/*.html'],
|
||||
tasks: ['html2js', 'karma:watch:run']
|
||||
},
|
||||
js: {
|
||||
files: ['src/**/*.js'],
|
||||
//we don't need to jshint here, it slows down everything else
|
||||
tasks: ['karma:watch:run']
|
||||
}
|
||||
},
|
||||
concat: {
|
||||
dist: {
|
||||
options: {
|
||||
banner: '<%= meta.banner %><%= meta.modules %>\n'
|
||||
grunt.initConfig({
|
||||
ngversion: '1.6.1',
|
||||
bsversion: '4.0.0',
|
||||
modules: [],//to be filled in by build task
|
||||
pkg: grunt.file.readJSON('package.json'),
|
||||
dist: 'dist',
|
||||
filename: 'ui-bootstrap',
|
||||
filenamecustom: '<%= filename %>-custom',
|
||||
meta: {
|
||||
modules: 'angular.module("ui.bootstrap", [<%= srcModules %>]);',
|
||||
tplmodules: 'angular.module("ui.bootstrap.tpls", [<%= tplModules %>]);',
|
||||
all: 'angular.module("ui.bootstrap", ["ui.bootstrap.tpls", <%= srcModules %>]);',
|
||||
cssInclude: '',
|
||||
cssFileBanner: '/* Include this file in your html if you are using the CSP mode. */\n\n',
|
||||
cssFileDest: '<%= dist %>/<%= filename %>-<%= pkg.version %>-csp.css',
|
||||
banner: [
|
||||
'/*',
|
||||
' * <%= pkg.name %>',
|
||||
' * <%= pkg.homepage %>\n',
|
||||
' * Version: <%= pkg.version %> - <%= grunt.template.today("yyyy-mm-dd") %>',
|
||||
' * License: <%= pkg.license %>',
|
||||
' */'
|
||||
].join('\n')
|
||||
},
|
||||
src: [], //src filled in by build task
|
||||
dest: '<%= dist %>/<%= filename %>-<%= pkg.version %>.js'
|
||||
},
|
||||
dist_tpls: {
|
||||
options: {
|
||||
banner: '<%= meta.banner %><%= meta.all %>\n<%= meta.tplmodules %>\n'
|
||||
delta: {
|
||||
docs: {
|
||||
files: ['misc/demo/index.html'],
|
||||
tasks: ['after-test']
|
||||
},
|
||||
html: {
|
||||
files: ['template/**/*.html'],
|
||||
tasks: ['html2js', 'karma:watch:run']
|
||||
},
|
||||
js: {
|
||||
files: ['src/**/*.js', '!src/**/index.js'],
|
||||
tasks: ['karma:watch:run']
|
||||
}
|
||||
},
|
||||
src: [], //src filled in by build task
|
||||
dest: '<%= dist %>/<%= filename %>-tpls-<%= pkg.version %>.js'
|
||||
}
|
||||
},
|
||||
copy: {
|
||||
demohtml: {
|
||||
options: {
|
||||
//process html files with gruntfile config
|
||||
processContent: grunt.template.process
|
||||
concat: {
|
||||
dist: {
|
||||
options: {
|
||||
banner: '<%= meta.banner %><%= meta.modules %>\n',
|
||||
footer: '<%= meta.cssInclude %>'
|
||||
},
|
||||
src: [], //src filled in by build task
|
||||
dest: '<%= dist %>/<%= filename %>-<%= pkg.version %>.js'
|
||||
},
|
||||
dist_tpls: {
|
||||
options: {
|
||||
banner: '<%= meta.banner %><%= meta.all %>\n<%= meta.tplmodules %>\n',
|
||||
footer: '<%= meta.cssInclude %>'
|
||||
},
|
||||
src: [], //src filled in by build task
|
||||
dest: '<%= dist %>/<%= filename %>-tpls-<%= pkg.version %>.js'
|
||||
}
|
||||
},
|
||||
files: [{
|
||||
expand: true,
|
||||
src: ['**/*.html'],
|
||||
cwd: 'misc/demo/',
|
||||
dest: 'dist/'
|
||||
}]
|
||||
},
|
||||
demoassets: {
|
||||
files: [{
|
||||
expand: true,
|
||||
//Don't re-copy html files, we process those
|
||||
src: ['**/**/*', '!**/*.html'],
|
||||
cwd: 'misc/demo',
|
||||
dest: 'dist/'
|
||||
}]
|
||||
}
|
||||
},
|
||||
uglify: {
|
||||
options: {
|
||||
banner: '<%= meta.banner %>'
|
||||
},
|
||||
dist:{
|
||||
src:['<%= concat.dist.dest %>'],
|
||||
dest:'<%= dist %>/<%= filename %>-<%= pkg.version %>.min.js'
|
||||
},
|
||||
dist_tpls:{
|
||||
src:['<%= concat.dist_tpls.dest %>'],
|
||||
dest:'<%= dist %>/<%= filename %>-tpls-<%= pkg.version %>.min.js'
|
||||
}
|
||||
},
|
||||
html2js: {
|
||||
dist: {
|
||||
options: {
|
||||
module: null, // no bundle module for all the html2js templates
|
||||
base: '.'
|
||||
copy: {
|
||||
demohtml: {
|
||||
options: {
|
||||
//process html files with gruntfile config
|
||||
processContent: grunt.template.process
|
||||
},
|
||||
files: [
|
||||
{
|
||||
expand: true,
|
||||
src: ['**/*.html'],
|
||||
cwd: 'misc/demo/',
|
||||
dest: 'dist/'
|
||||
},
|
||||
{
|
||||
expand: true,
|
||||
src: ['svg-icon.css'],
|
||||
cwd: 'src/',
|
||||
dest: 'dist/'
|
||||
}
|
||||
]
|
||||
},
|
||||
demoassets: {
|
||||
files: [
|
||||
{
|
||||
expand: true,
|
||||
//Don't re-copy html files, we process those
|
||||
src: ['**/**/*', '!**/*.html'],
|
||||
cwd: 'misc/demo',
|
||||
dest: 'dist/'
|
||||
}
|
||||
]
|
||||
},
|
||||
docs: {
|
||||
files: [
|
||||
{
|
||||
expand: true,
|
||||
src: ['**/*', '*/*'],
|
||||
cwd: 'dist/',
|
||||
dest: 'docs/'
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
files: [{
|
||||
expand: true,
|
||||
src: ['template/**/*.html'],
|
||||
ext: '.html.js'
|
||||
}]
|
||||
}
|
||||
},
|
||||
jshint: {
|
||||
files: ['Gruntfile.js','src/**/*.js'],
|
||||
options: {
|
||||
jshintrc: '.jshintrc'
|
||||
}
|
||||
},
|
||||
karma: {
|
||||
options: {
|
||||
configFile: 'karma.conf.js'
|
||||
},
|
||||
watch: {
|
||||
background: true
|
||||
},
|
||||
continuous: {
|
||||
singleRun: true
|
||||
},
|
||||
jenkins: {
|
||||
singleRun: true,
|
||||
colors: false,
|
||||
reporters: ['dots', 'junit'],
|
||||
browsers: ['Chrome', 'ChromeCanary', 'Firefox', 'Opera', '/Users/jenkins/bin/safari.sh']
|
||||
},
|
||||
travis: {
|
||||
singleRun: true,
|
||||
reporters: ['dots'],
|
||||
browsers: ['Firefox']
|
||||
},
|
||||
coverage: {
|
||||
preprocessors: {
|
||||
'src/*/*.js': 'coverage'
|
||||
uglify: {
|
||||
options: {
|
||||
banner: '<%= meta.banner %>'
|
||||
},
|
||||
dist: {
|
||||
src: ['<%= concat.dist.dest %>'],
|
||||
dest: '<%= dist %>/<%= filename %>-<%= pkg.version %>.min.js'
|
||||
},
|
||||
dist_tpls: {
|
||||
src: ['<%= concat.dist_tpls.dest %>'],
|
||||
dest: '<%= dist %>/<%= filename %>-tpls-<%= pkg.version %>.min.js'
|
||||
}
|
||||
},
|
||||
reporters: ['progress', 'coverage']
|
||||
}
|
||||
},
|
||||
changelog: {
|
||||
options: {
|
||||
dest: 'CHANGELOG.md',
|
||||
templateFile: 'misc/changelog.tpl.md',
|
||||
github: 'angular-ui/bootstrap'
|
||||
}
|
||||
},
|
||||
shell: {
|
||||
//We use %version% and evluate it at run-time, because <%= pkg.version %>
|
||||
//is only evaluated once
|
||||
'release-prepare': [
|
||||
'grunt before-test after-test',
|
||||
'grunt version', //remove "-SNAPSHOT"
|
||||
'grunt changelog'
|
||||
],
|
||||
'release-complete': [
|
||||
'git commit CHANGELOG.md package.json -m "chore(release): v%version%"',
|
||||
'git tag %version%'
|
||||
],
|
||||
'release-start': [
|
||||
'grunt version:minor:"SNAPSHOT"',
|
||||
'git commit package.json -m "chore(release): Starting v%version%"'
|
||||
]
|
||||
},
|
||||
ngdocs: {
|
||||
options: {
|
||||
dest: 'dist/docs',
|
||||
scripts: [
|
||||
'angular.js',
|
||||
'<%= concat.dist_tpls.dest %>'
|
||||
],
|
||||
styles: [
|
||||
'docs/css/style.css'
|
||||
],
|
||||
navTemplate: 'docs/nav.html',
|
||||
title: 'ui-bootstrap',
|
||||
html5Mode: false
|
||||
},
|
||||
api: {
|
||||
src: ['src/**/*.js', 'src/**/*.ngdoc'],
|
||||
title: 'API Documentation'
|
||||
}
|
||||
},
|
||||
'ddescribe-iit': {
|
||||
files: [
|
||||
'src/**/*.spec.js'
|
||||
]
|
||||
}
|
||||
});
|
||||
|
||||
//register before and after test tasks so we've don't have to change cli
|
||||
//options on the goole's CI server
|
||||
grunt.registerTask('before-test', ['enforce', 'ddescribe-iit', 'jshint', 'html2js']);
|
||||
grunt.registerTask('after-test', ['build', 'copy']);
|
||||
|
||||
//Rename our watch task to 'delta', then make actual 'watch'
|
||||
//task build things, then start test server
|
||||
grunt.renameTask('watch', 'delta');
|
||||
grunt.registerTask('watch', ['before-test', 'after-test', 'karma:watch', 'delta']);
|
||||
|
||||
// Default task.
|
||||
grunt.registerTask('default', ['before-test', 'test', 'after-test']);
|
||||
|
||||
grunt.registerTask('enforce', 'Install commit message enforce script if it doesn\'t exist', function() {
|
||||
if (!grunt.file.exists('.git/hooks/commit-msg')) {
|
||||
grunt.file.copy('misc/validate-commit-msg.js', '.git/hooks/commit-msg');
|
||||
require('fs').chmodSync('.git/hooks/commit-msg', '0755');
|
||||
}
|
||||
});
|
||||
|
||||
//Common ui.bootstrap module containing all modules for src and templates
|
||||
//findModule: Adds a given module to config
|
||||
var foundModules = {};
|
||||
function findModule(name) {
|
||||
if (foundModules[name]) { return; }
|
||||
foundModules[name] = true;
|
||||
|
||||
function breakup(text, separator) {
|
||||
return text.replace(/[A-Z]/g, function (match) {
|
||||
return separator + match;
|
||||
});
|
||||
}
|
||||
function ucwords(text) {
|
||||
return text.replace(/^([a-z])|\s+([a-z])/g, function ($1) {
|
||||
return $1.toUpperCase();
|
||||
});
|
||||
}
|
||||
function enquote(str) {
|
||||
return '"' + str + '"';
|
||||
}
|
||||
|
||||
var module = {
|
||||
name: name,
|
||||
moduleName: enquote('ui.bootstrap.' + name),
|
||||
displayName: ucwords(breakup(name, ' ')),
|
||||
srcFiles: grunt.file.expand('src/'+name+'/*.js'),
|
||||
tplFiles: grunt.file.expand('template/'+name+'/*.html'),
|
||||
tpljsFiles: grunt.file.expand('template/'+name+'/*.html.js'),
|
||||
tplModules: grunt.file.expand('template/'+name+'/*.html').map(enquote),
|
||||
dependencies: dependenciesForModule(name),
|
||||
docs: {
|
||||
md: grunt.file.expand('src/'+name+'/docs/*.md')
|
||||
.map(grunt.file.read).map(markdown).join('\n'),
|
||||
js: grunt.file.expand('src/'+name+'/docs/*.js')
|
||||
.map(grunt.file.read).join('\n'),
|
||||
html: grunt.file.expand('src/'+name+'/docs/*.html')
|
||||
.map(grunt.file.read).join('\n')
|
||||
}
|
||||
};
|
||||
module.dependencies.forEach(findModule);
|
||||
grunt.config('modules', grunt.config('modules').concat(module));
|
||||
}
|
||||
|
||||
function dependenciesForModule(name) {
|
||||
var deps = [];
|
||||
grunt.file.expand('src/' + name + '/*.js')
|
||||
.map(grunt.file.read)
|
||||
.forEach(function(contents) {
|
||||
//Strategy: find where module is declared,
|
||||
//and from there get everything inside the [] and split them by comma
|
||||
var moduleDeclIndex = contents.indexOf('angular.module(');
|
||||
var depArrayStart = contents.indexOf('[', moduleDeclIndex);
|
||||
var depArrayEnd = contents.indexOf(']', depArrayStart);
|
||||
var dependencies = contents.substring(depArrayStart + 1, depArrayEnd);
|
||||
dependencies.split(',').forEach(function(dep) {
|
||||
if (dep.indexOf('ui.bootstrap.') > -1) {
|
||||
var depName = dep.trim().replace('ui.bootstrap.','').replace(/['"]/g,'');
|
||||
if (deps.indexOf(depName) < 0) {
|
||||
deps.push(depName);
|
||||
//Get dependencies for this new dependency
|
||||
deps = deps.concat(dependenciesForModule(depName));
|
||||
}
|
||||
html2js: {
|
||||
dist: {
|
||||
options: {
|
||||
module: null, // no bundle module for all the html2js templates
|
||||
base: '.',
|
||||
rename: function(moduleName) {
|
||||
return `uib/${moduleName}`;
|
||||
}
|
||||
},
|
||||
files: [
|
||||
{
|
||||
expand: true,
|
||||
src: ['template/**/*.html'],
|
||||
ext: '.html.js'
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
eslint: {
|
||||
files: ['Gruntfile.js', 'src/**/*.js']
|
||||
},
|
||||
karma: {
|
||||
options: {
|
||||
configFile: 'karma.conf.js'
|
||||
},
|
||||
watch: {
|
||||
background: true
|
||||
},
|
||||
continuous: {
|
||||
singleRun: true
|
||||
},
|
||||
jenkins: {
|
||||
singleRun: true,
|
||||
autoWatch: false,
|
||||
colors: false,
|
||||
reporters: ['dots', 'junit'],
|
||||
browsers: ['Chrome', 'ChromeCanary', 'Firefox', 'Opera', '/Users/jenkins/bin/safari.sh']
|
||||
},
|
||||
travis: {
|
||||
singleRun: true,
|
||||
autoWatch: false,
|
||||
reporters: ['dots'],
|
||||
browsers: ['Firefox']
|
||||
},
|
||||
coverage: {
|
||||
preprocessors: {
|
||||
'src/*/*.js': 'coverage'
|
||||
},
|
||||
reporters: ['progress', 'coverage']
|
||||
}
|
||||
},
|
||||
conventionalChangelog: {
|
||||
options: {
|
||||
changelogOpts: {
|
||||
preset: 'angular'
|
||||
},
|
||||
templateFile: 'misc/changelog.tpl.md'
|
||||
},
|
||||
release: {
|
||||
src: 'CHANGELOG.md'
|
||||
}
|
||||
},
|
||||
shell: {
|
||||
//We use %version% and evaluate it at run-time, because <%= pkg.version %>
|
||||
//is only evaluated once
|
||||
'release-prepare': [
|
||||
'git add docs'
|
||||
],
|
||||
'release-complete': [
|
||||
'git commit -a -m "chore(release): v%version%"',
|
||||
'git tag v%version%',
|
||||
'git push --follow-tags'
|
||||
],
|
||||
'publish': [
|
||||
'rm -rf dist/*',
|
||||
'cp ./docs/ui-bootstrap-%version%.js ./dist/ui-bootstrap.js',
|
||||
'cp ./docs/ui-bootstrap-%version%-csp.css ./dist/ui-bootstrap-csp.css',
|
||||
'cp ./docs/ui-bootstrap-tpls-%version%.js ./dist/ui-bootstrap-tpls.js',
|
||||
'npm publish'
|
||||
]
|
||||
},
|
||||
'ddescribe-iit': {
|
||||
files: [
|
||||
'src/**/*.spec.js'
|
||||
]
|
||||
}
|
||||
});
|
||||
});
|
||||
return deps;
|
||||
}
|
||||
|
||||
grunt.registerTask('dist', 'Override dist directory', function() {
|
||||
var dir = this.args[0];
|
||||
if (dir) { grunt.config('dist', dir); }
|
||||
});
|
||||
//register before and after test tasks so we've don't have to change cli
|
||||
//options on the google's CI server
|
||||
grunt.registerTask('before-test', [/*'ddescribe-iit',*/ 'eslint', 'html2js']);
|
||||
grunt.registerTask('after-test', ['build', 'copy']);
|
||||
|
||||
grunt.registerTask('build', 'Create bootstrap build files', function() {
|
||||
var _ = grunt.util._;
|
||||
//Rename our watch task to 'delta', then make actual 'watch'
|
||||
//task build things, then start test server
|
||||
grunt.renameTask('watch', 'delta');
|
||||
grunt.registerTask('watch', ['before-test', 'after-test', 'karma:watch', 'delta']);
|
||||
|
||||
//If arguments define what modules to build, build those. Else, everything
|
||||
if (this.args.length) {
|
||||
this.args.forEach(findModule);
|
||||
grunt.config('filename', grunt.config('filenamecustom'));
|
||||
} else {
|
||||
grunt.file.expand({
|
||||
filter: 'isDirectory', cwd: '.'
|
||||
}, 'src/*').forEach(function(dir) {
|
||||
findModule(dir.split('/')[1]);
|
||||
});
|
||||
// Default task.
|
||||
grunt.registerTask('default', ['before-test', 'test', 'after-test']);
|
||||
|
||||
// Build docs
|
||||
grunt.registerTask('docs', ['before-test', 'after-test', 'copy:docs']);
|
||||
|
||||
//Common ui.bootstrap module containing all modules for src and templates
|
||||
//findModule: Adds a given module to config
|
||||
const foundModules = {};
|
||||
|
||||
function findModule(name)
|
||||
{
|
||||
if(foundModules[name])
|
||||
{ return; }
|
||||
foundModules[name] = true;
|
||||
|
||||
function breakup(text, separator)
|
||||
{
|
||||
return text.replace(/[A-Z]/g, function(match) {
|
||||
return separator + match;
|
||||
});
|
||||
}
|
||||
|
||||
function ucwords(text)
|
||||
{
|
||||
return text.replace(/^([a-z])|\s+([a-z])/g, function($1) {
|
||||
return $1.toUpperCase();
|
||||
});
|
||||
}
|
||||
|
||||
function enquote(str)
|
||||
{
|
||||
return `"${str}"`;
|
||||
}
|
||||
|
||||
function enquoteUibDir(str)
|
||||
{
|
||||
return enquote(`uib/${str}`);
|
||||
}
|
||||
|
||||
const module = {
|
||||
name: name,
|
||||
moduleName: enquote(`ui.bootstrap.${name}`),
|
||||
displayName: ucwords(breakup(name, ' ')),
|
||||
srcFiles: grunt.file.expand([`src/${name}/*.js`, `!src/${name}/index.js`, `!src/${name}/index-nocss.js`]),
|
||||
cssFiles: grunt.file.expand(`src/${name}/*.css`),
|
||||
tplFiles: grunt.file.expand(`template/${name}/*.html`),
|
||||
tpljsFiles: grunt.file.expand(`template/${name}/*.html.js`),
|
||||
tplModules: grunt.file.expand(`template/${name}/*.html`).map(enquoteUibDir),
|
||||
dependencies: dependenciesForModule(name),
|
||||
docs: {
|
||||
md: grunt.file.expand(`src/${name}/docs/*.md`)
|
||||
.map(grunt.file.read).map((str) => marked(str)).join('\n'),
|
||||
js: grunt.file.expand(`src/${name}/docs/*.js`)
|
||||
.map(grunt.file.read).join('\n'),
|
||||
html: grunt.file.expand(`src/${name}/docs/*.html`)
|
||||
.map(grunt.file.read).join('\n')
|
||||
}
|
||||
};
|
||||
|
||||
const styles = {
|
||||
css: [],
|
||||
js: []
|
||||
};
|
||||
module.cssFiles.forEach(processCSS.bind(null, module.name, styles, true));
|
||||
if(styles.css.length)
|
||||
{
|
||||
module.css = styles.css.join('\n');
|
||||
module.cssJs = styles.js.join('\n');
|
||||
}
|
||||
|
||||
module.dependencies.forEach(findModule);
|
||||
grunt.config('modules', grunt.config('modules').concat(module));
|
||||
}
|
||||
|
||||
var modules = grunt.config('modules');
|
||||
grunt.config('srcModules', _.pluck(modules, 'moduleName'));
|
||||
grunt.config('tplModules', _.pluck(modules, 'tplModules').filter(function(tpls) { return tpls.length > 0;} ));
|
||||
grunt.config('demoModules', modules
|
||||
.filter(function(module) {
|
||||
return module.docs.md && module.docs.js && module.docs.html;
|
||||
})
|
||||
.sort(function(a, b) {
|
||||
if (a.name < b.name) { return -1; }
|
||||
if (a.name > b.name) { return 1; }
|
||||
return 0;
|
||||
})
|
||||
);
|
||||
|
||||
var srcFiles = _.pluck(modules, 'srcFiles');
|
||||
var tpljsFiles = _.pluck(modules, 'tpljsFiles');
|
||||
//Set the concat task to concatenate the given src modules
|
||||
grunt.config('concat.dist.src', grunt.config('concat.dist.src')
|
||||
.concat(srcFiles));
|
||||
//Set the concat-with-templates task to concat the given src & tpl modules
|
||||
grunt.config('concat.dist_tpls.src', grunt.config('concat.dist_tpls.src')
|
||||
.concat(srcFiles).concat(tpljsFiles));
|
||||
|
||||
grunt.task.run(['concat', 'uglify']);
|
||||
});
|
||||
|
||||
grunt.registerTask('test', 'Run tests on singleRun karma server', function () {
|
||||
//this task can be executed in 3 different environments: local, Travis-CI and Jenkins-CI
|
||||
//we need to take settings for each one into account
|
||||
if (process.env.TRAVIS) {
|
||||
grunt.task.run('karma:travis');
|
||||
} else {
|
||||
var isToRunJenkinsTask = !!this.args.length;
|
||||
if(grunt.option('coverage')) {
|
||||
var karmaOptions = grunt.config.get('karma.options'),
|
||||
coverageOpts = grunt.config.get('karma.coverage');
|
||||
grunt.util._.extend(karmaOptions, coverageOpts);
|
||||
grunt.config.set('karma.options', karmaOptions);
|
||||
}
|
||||
grunt.task.run(this.args.length ? 'karma:jenkins' : 'karma:continuous');
|
||||
function dependenciesForModule(name)
|
||||
{
|
||||
let deps = [];
|
||||
grunt.file.expand([`src/${name}/*.js`, `!src/${name}/index.js`, `!src/${name}/index-nocss.js`])
|
||||
.map(grunt.file.read)
|
||||
.forEach(function(contents) {
|
||||
//Strategy: find where module is declared,
|
||||
//and from there get everything inside the [] and split them by comma
|
||||
const moduleDeclIndex = contents.indexOf('angular.module(');
|
||||
const depArrayStart = contents.indexOf('[', moduleDeclIndex);
|
||||
const depArrayEnd = contents.indexOf(']', depArrayStart);
|
||||
const dependencies = contents.substring(depArrayStart + 1, depArrayEnd);
|
||||
dependencies.split(',').forEach(function(dep) {
|
||||
if(dep.indexOf('ui.bootstrap.') > -1)
|
||||
{
|
||||
const depName = dep.trim().replace('ui.bootstrap.', '').replace(/['"]/g, '');
|
||||
if(deps.indexOf(depName) < 0)
|
||||
{
|
||||
deps.push(depName);
|
||||
//Get dependencies for this new dependency
|
||||
deps = deps.concat(dependenciesForModule(depName));
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
return deps;
|
||||
}
|
||||
});
|
||||
|
||||
function setVersion(type, suffix) {
|
||||
var file = 'package.json';
|
||||
var VERSION_REGEX = /([\'|\"]version[\'|\"][ ]*:[ ]*[\'|\"])([\d|.]*)(-\w+)*([\'|\"])/;
|
||||
var contents = grunt.file.read(file);
|
||||
var version;
|
||||
contents = contents.replace(VERSION_REGEX, function(match, left, center) {
|
||||
version = center;
|
||||
if (type) {
|
||||
version = require('semver').inc(version, type);
|
||||
}
|
||||
//semver.inc strips our suffix if it existed
|
||||
if (suffix) {
|
||||
version += '-' + suffix;
|
||||
}
|
||||
return left + version + '"';
|
||||
grunt.registerTask('dist', 'Override dist directory', function() {
|
||||
const dir = this.args[0];
|
||||
if(dir)
|
||||
{ grunt.config('dist', dir); }
|
||||
});
|
||||
grunt.log.ok('Version set to ' + version.cyan);
|
||||
grunt.file.write(file, contents);
|
||||
return version;
|
||||
}
|
||||
|
||||
grunt.registerTask('version', 'Set version. If no arguments, it just takes off suffix', function() {
|
||||
setVersion(this.args[0], this.args[1]);
|
||||
});
|
||||
grunt.registerTask('build', 'Create bootstrap build files', function() {
|
||||
const _ = grunt.util._;
|
||||
|
||||
grunt.registerMultiTask('shell', 'run shell commands', function() {
|
||||
var self = this;
|
||||
var sh = require('shelljs');
|
||||
self.data.forEach(function(cmd) {
|
||||
cmd = cmd.replace('%version%', grunt.file.readJSON('package.json').version);
|
||||
grunt.log.ok(cmd);
|
||||
var result = sh.exec(cmd,{silent:true});
|
||||
if (result.code !== 0) {
|
||||
grunt.fatal(result.output);
|
||||
}
|
||||
//If arguments define what modules to build, build those. Else, everything
|
||||
if(this.args.length)
|
||||
{
|
||||
this.args.forEach(findModule);
|
||||
grunt.config('filename', grunt.config('filenamecustom'));
|
||||
}
|
||||
else
|
||||
{
|
||||
grunt.file.expand({
|
||||
filter: 'isDirectory', cwd: '.'
|
||||
}, 'src/*').forEach((dir) => {
|
||||
findModule(dir.split('/')[1]);
|
||||
});
|
||||
}
|
||||
|
||||
const modules = grunt.config('modules');
|
||||
grunt.config('srcModules', _.pluck(modules, 'moduleName'));
|
||||
grunt.config('tplModules', _.pluck(modules, 'tplModules').filter((tpls) => tpls.length > 0));
|
||||
grunt.config('demoModules', modules
|
||||
.filter((module) => module.docs.md && module.docs.js && module.docs.html)
|
||||
.sort((a, b) => {
|
||||
if(a.name < b.name)
|
||||
{ return -1; }
|
||||
if(a.name > b.name)
|
||||
{ return 1; }
|
||||
return 0;
|
||||
})
|
||||
);
|
||||
|
||||
const cssStrings = _.flatten(_.compact(_.pluck(modules, 'css')));
|
||||
const cssJsStrings = _.flatten(_.compact(_.pluck(modules, 'cssJs')));
|
||||
if(cssStrings.length)
|
||||
{
|
||||
grunt.config('meta.cssInclude', cssJsStrings.join('\n'));
|
||||
|
||||
grunt.file.write(grunt.config('meta.cssFileDest'), grunt.config('meta.cssFileBanner') +
|
||||
cssStrings.join('\n'));
|
||||
|
||||
grunt.log.writeln('File ' + grunt.config('meta.cssFileDest') + ' created');
|
||||
}
|
||||
|
||||
const moduleFileMapping = _.clone(modules, true);
|
||||
moduleFileMapping.forEach((module) => delete module.docs);
|
||||
|
||||
grunt.config('moduleFileMapping', moduleFileMapping);
|
||||
|
||||
const srcFiles = _.pluck(modules, 'srcFiles');
|
||||
const tpljsFiles = _.pluck(modules, 'tpljsFiles');
|
||||
//Set the concat task to concatenate the given src modules
|
||||
grunt.config('concat.dist.src', grunt.config('concat.dist.src')
|
||||
.concat(srcFiles));
|
||||
//Set the concat-with-templates task to concat the given src & tpl modules
|
||||
grunt.config('concat.dist_tpls.src', grunt.config('concat.dist_tpls.src')
|
||||
.concat(srcFiles).concat(tpljsFiles));
|
||||
|
||||
grunt.task.run(['concat', 'uglify', 'makeModuleMappingFile', 'makeRawFilesJs', 'makeVersionsMappingFile']);
|
||||
});
|
||||
});
|
||||
|
||||
return grunt;
|
||||
grunt.registerTask('test', 'Run tests on singleRun karma server', function() {
|
||||
//this task can be executed in 3 different environments: local, Travis-CI and Jenkins-CI
|
||||
//we need to take settings for each one into account
|
||||
if(process.env.TRAVIS)
|
||||
{
|
||||
grunt.task.run('karma:travis');
|
||||
}
|
||||
else
|
||||
{
|
||||
const isToRunJenkinsTask = !!this.args.length;
|
||||
if(grunt.option('coverage'))
|
||||
{
|
||||
const karmaOptions = grunt.config.get('karma.options'),
|
||||
coverageOpts = grunt.config.get('karma.coverage');
|
||||
grunt.util._.extend(karmaOptions, coverageOpts);
|
||||
grunt.config.set('karma.options', karmaOptions);
|
||||
}
|
||||
grunt.task.run(this.args.length ? 'karma:jenkins' : 'karma:continuous');
|
||||
}
|
||||
});
|
||||
|
||||
grunt.registerTask('makeModuleMappingFile', function() {
|
||||
const _ = grunt.util._;
|
||||
const moduleMappingJs = 'dist/assets/module-mapping.json';
|
||||
const moduleMappings = grunt.config('moduleFileMapping');
|
||||
const moduleMappingsMap = _.object(_.pluck(moduleMappings, 'name'), moduleMappings);
|
||||
const jsContent = JSON.stringify(moduleMappingsMap);
|
||||
grunt.file.write(moduleMappingJs, jsContent);
|
||||
grunt.log.writeln('File ' + moduleMappingJs.cyan + ' created.');
|
||||
});
|
||||
|
||||
grunt.registerTask('makeRawFilesJs', function() {
|
||||
const _ = grunt.util._;
|
||||
const jsFilename = 'dist/assets/raw-files.json';
|
||||
const genRawFilesJs = require('./misc/raw-files-generator');
|
||||
|
||||
genRawFilesJs(grunt, jsFilename, _.flatten(grunt.config('concat.dist_tpls.src')),
|
||||
grunt.config('meta.banner'), grunt.config('meta.cssFileBanner')
|
||||
);
|
||||
});
|
||||
|
||||
grunt.registerTask('makeVersionsMappingFile', function() {
|
||||
const done = this.async();
|
||||
|
||||
const exec = require('child_process').exec;
|
||||
|
||||
const versionsMappingFile = 'dist/versions-mapping.json';
|
||||
|
||||
exec('git tag --sort -version:refname', function(error, stdout, stderr) {
|
||||
// Let's remove the oldest 14 versions.
|
||||
const versions = stdout.split('\n').slice(0, -14);
|
||||
let jsContent = versions.map(function(version) {
|
||||
version = version.replace(/^v/, '');
|
||||
return {
|
||||
version: version,
|
||||
url: `/angular-ui-bootstrap4/versioned-docs/${version}`
|
||||
};
|
||||
});
|
||||
jsContent = _.sortBy(jsContent, 'version').reverse();
|
||||
jsContent.unshift({
|
||||
version: 'Current',
|
||||
url: '/angular-ui-bootstrap4'
|
||||
});
|
||||
grunt.file.write(versionsMappingFile, JSON.stringify(jsContent));
|
||||
grunt.log.writeln(`File ${versionsMappingFile.cyan} created.`);
|
||||
done();
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
/**
|
||||
* Logic from AngularJS
|
||||
* https://github.com/angular/angular.js/blob/36831eccd1da37c089f2141a2c073a6db69f3e1d/lib/grunt/utils.js#L121-L145
|
||||
*/
|
||||
function processCSS(moduleName, state, minify, file)
|
||||
{
|
||||
let css = fs.readFileSync(file).toString(),
|
||||
js;
|
||||
state.css.push(css);
|
||||
|
||||
if(minify)
|
||||
{
|
||||
css = css
|
||||
.replace(/\r?\n/g, '')
|
||||
.replace(/\/\*.*?\*\//g, '')
|
||||
.replace(/:\s+/g, ':')
|
||||
.replace(/\s*\{\s*/g, '{')
|
||||
.replace(/\s*\}\s*/g, '}')
|
||||
.replace(/\s*\,\s*/g, ',')
|
||||
.replace(/\s*\;\s*/g, ';');
|
||||
}
|
||||
//escape for js
|
||||
css = css
|
||||
.replace(/\\/g, '\\\\')
|
||||
.replace(/'/g, "\\'")
|
||||
.replace(/\r?\n/g, '\\n');
|
||||
js = `angular.module('ui.bootstrap.${moduleName}').run(function() {!angular.$$csp().noInlineStyle && !angular.$$uib${_.capitalize(
|
||||
moduleName)}Css && angular.element(document).find('head').prepend('<style type="text/css">${css}</style>'); angular.$$uib${_.capitalize(
|
||||
moduleName)}Css = true; });`;
|
||||
state.js.push(js);
|
||||
|
||||
return state;
|
||||
}
|
||||
|
||||
function setVersion(type, suffix)
|
||||
{
|
||||
const file = 'package.json';
|
||||
const VERSION_REGEX = /([\'|\"]version[\'|\"][ ]*:[ ]*[\'|\"])([\d|.]*)(-\w+)*([\'|\"])/;
|
||||
let contents = grunt.file.read(file);
|
||||
let version;
|
||||
contents = contents.replace(VERSION_REGEX, function(match, left, center) {
|
||||
version = center;
|
||||
if(type)
|
||||
{
|
||||
version = require('semver').inc(version, type);
|
||||
}
|
||||
//semver.inc strips our suffix if it existed
|
||||
if(suffix)
|
||||
{
|
||||
version += '-' + suffix;
|
||||
}
|
||||
return left + version + '"';
|
||||
});
|
||||
grunt.log.ok('Version set to ' + version.cyan);
|
||||
grunt.file.write(file, contents);
|
||||
return version;
|
||||
}
|
||||
|
||||
grunt.registerTask('version', 'Set version. If no arguments, it just takes off suffix', function() {
|
||||
setVersion(this.args[0], this.args[1]);
|
||||
});
|
||||
|
||||
grunt.registerMultiTask('shell', 'run shell commands', function() {
|
||||
const self = this;
|
||||
const sh = require('shelljs');
|
||||
self.data.forEach(function(cmd) {
|
||||
cmd = cmd.replace('%version%', grunt.file.readJSON('package.json').version);
|
||||
grunt.log.ok(cmd);
|
||||
const result = sh.exec(cmd, { silent: true });
|
||||
if(result.code !== 0)
|
||||
{
|
||||
grunt.fatal(result.output);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
//------------------------------------------------------------------------------------------------------------------
|
||||
// New Release System
|
||||
//------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
grunt.registerTask('release', function(version) {
|
||||
// Step 1, we change package.json
|
||||
grunt.config.set('pkg.version', version);
|
||||
grunt.file.write('./package.json', JSON.stringify(grunt.config('pkg'), null, 2));
|
||||
|
||||
// Step 2, we queue up additional tasks
|
||||
grunt.task.run([
|
||||
'conventionalChangelog',
|
||||
'build',
|
||||
'copy',
|
||||
'shell:release-prepare',
|
||||
'shell:release-complete',
|
||||
'shell:publish'
|
||||
]);
|
||||
});
|
||||
|
||||
//------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
return grunt;
|
||||
};
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
The MIT License
|
||||
|
||||
Copyright (c) 2012-2014 the AngularUI Team, https://github.com/organizations/angular-ui/teams/291112
|
||||
Copyright (c) 2012-2017 the AngularUI Team, https://github.com/organizations/angular-ui/teams/291112
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
|
||||
@@ -1,32 +1,165 @@
|
||||
# bootstrap - [AngularJS](http://angularjs.org/) directives specific to [Bootstrap](http://getbootstrap.com)
|
||||
# UI Bootstrap 4
|
||||
|
||||
***
|
||||
_[AngularJS](http://angularjs.org/) directives specific to [Bootstrap](http://getbootstrap.com)_
|
||||
|
||||
[](https://gitter.im/ui-bootstrap4/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
||||
[](http://travis-ci.org/morgul/ui-bootstrap4)
|
||||
[](https://david-dm.org/morgul/ui-bootstrap4#info=devDependencies)
|
||||
|
||||
## Fork
|
||||
|
||||
This is a fork of the original [ui-bootstrap4][] project. It has been modified to work with Bootstrap 4. The reason this repository exists is because some applications are choosing (or are forced to chose) to stap with Angular 1, but would like to move to Bootstrap 4. (Especially considering the fact that [bootstrap 3 is EoL](https://github.com/twbs/bootstrap/issues/20631).)
|
||||
|
||||
This for makes as few changes as possible to the original source code, so that upstream changes can be merged in with minimal issues. Some work has been used from other attempts to do the same thing, such as the fork from [dietergeerts][].
|
||||
|
||||
[dietergeerts]: https://github.com/dietergeerts/bootstrap
|
||||
[ui-bootstrap4]: https://github.com/morgul/ui-bootstrap4
|
||||
|
||||
## Help Wanted
|
||||
|
||||
I did this for a work project, and, frankly, we've gotten what we needed out of it. I'd love to see this cleaned up and maybe even maintained... but I just don't have the time myself. I'll accept merge requests, and fight with the build system... but that's basically it. If someone would like to step in, just let me know and I'll add you to the project. Just open an issue, and I'll respond.
|
||||
|
||||
Wanting to contribute, but not take over the reigns? The things that are really holding this project back are, as I can see it:
|
||||
|
||||
* [ ] Undocumented/confusing build system.
|
||||
* [ ] The whole `SNAPSHOT` thing seems like it adds a lot of complexity, for very little gain.
|
||||
* [ ] Making a release should be a single `npm` command
|
||||
* [ ] Getting started with development should be very simple
|
||||
* [ ] Switch to ES2015
|
||||
* [ ] The code should be cleaned up, and better formatted
|
||||
|
||||
I'll add more as I think of them / have the time.
|
||||
|
||||
## Quick links
|
||||
- [Demo](#demo)
|
||||
- [Installation](#installation)
|
||||
- [NPM](#install-with-npm)
|
||||
- [Custom](#custom-build)
|
||||
- [Manual](#manual-download)
|
||||
- [Webpack / JSPM](#webpack--jspm)
|
||||
- [Support](#support)
|
||||
- [FAQ](#faq)
|
||||
- [Code of Conduct](#code-of-conduct)
|
||||
- [Supported browsers](#supported-browsers)
|
||||
- [Need help?](#need-help)
|
||||
- [Found a bug?](#found-a-bug)
|
||||
- [Contributing to the project](#contributing-to-the-project)
|
||||
- [Development, meeting minutes, roadmap and more.](#development-meeting-minutes-roadmap-and-more)
|
||||
|
||||
[](http://travis-ci.org/angular-ui/bootstrap)
|
||||
[](https://david-dm.org/angular-ui/bootstrap#info=devDependencies)
|
||||
|
||||
## Demo
|
||||
|
||||
Do you want to see directives in action? Visit http://angular-ui.github.io/bootstrap/!
|
||||
Do you want to see directives in action? Visit https://morgul.github.io/ui-bootstrap4/!
|
||||
|
||||
## Installation
|
||||
|
||||
Installation is easy as angular-ui-bootstrap has minimal dependencies - only the AngularJS and Bootstrap's CSS are required.
|
||||
After downloading dependencies (or better yet, referencing them from your favourite CDN) you need to download build version of this project. All the files and their purposes are described here:
|
||||
https://github.com/angular-ui/bootstrap/tree/gh-pages#build-files
|
||||
Installation is easy as UI Bootstrap has minimal dependencies - only the AngularJS and Twitter Bootstrap's CSS are required.
|
||||
*Notes:*
|
||||
* Since version 0.13.0, UI Bootstrap depends on [ngAnimate](https://docs.angularjs.org/api/ngAnimate) for transitions and animations, such as the accordion, carousel, etc. Include `ngAnimate` in the module dependencies for your app in order to enable animation.
|
||||
* UI Bootstrap depends on [ngTouch](https://docs.angularjs.org/api/ngTouch) for swipe actions. Include `ngTouch` in the module dependencies for your app in order to enable swiping.
|
||||
|
||||
### Angular Requirements
|
||||
* UI Bootstrap 1.0 and higher _requires_ Angular 1.4.x or higher and it has been tested with Angular 1.4.8.
|
||||
* UI Bootstrap 0.14.3 is the _last_ version that supports Angular 1.3.x.
|
||||
* UI Bootstrap 0.12.0 is the _last_ version that supports Angular 1.2.x.
|
||||
|
||||
### Bootstrap Requirements
|
||||
* UI Bootstrap 3.0 and higher requires Bootstrap CSS version 4.x or higher and it has been tested with Bootstrap CSS 4.0.0-beta.
|
||||
* UI Bootstrap 2.x requires Bootstrap CSS version 3.x or higher and it has been tested with Bootstrap CSS 3.3.6.
|
||||
* UI Bootstrap 0.8 is the _last_ version that supports Bootstrap CSS 2.3.x.
|
||||
|
||||
#### Install with NPM
|
||||
|
||||
```sh
|
||||
$ npm install ui-bootstrap4
|
||||
```
|
||||
|
||||
#### Install with Yarn
|
||||
|
||||
```sh
|
||||
$ yarn add ui-bootstrap4
|
||||
```
|
||||
|
||||
This will install AngularJS and Bootstrap NPM packages.
|
||||
|
||||
#### Custom build
|
||||
|
||||
Head over to https://morgul.github.io/ui-bootstrap4/ and hit the *Custom build* button to create your own custom UI Bootstrap build, just the way you like it.
|
||||
|
||||
#### Manual download
|
||||
|
||||
After downloading dependencies (or better yet, referencing them from your favorite CDN) you need to download build version of this project. All the files and their purposes are described here:
|
||||
https://github.com/morgul/ui-bootstrap4/tree/gh-pages#build-files
|
||||
Don't worry, if you are not sure which file to take, opt for `ui-bootstrap-tpls-[version].min.js`.
|
||||
|
||||
### Adding dependency to your project
|
||||
|
||||
When you are done downloading all the dependencies and project files the only remaining part is to add dependencies on the `ui.bootstrap` AngularJS module:
|
||||
|
||||
```javascript
|
||||
```js
|
||||
angular.module('myModule', ['ui.bootstrap']);
|
||||
```
|
||||
|
||||
Project files are also available through your favourite package manager:
|
||||
* **Bower**: `bower install angular-bootstrap`
|
||||
* **NuGet**: https://nuget.org/packages/Angular.UI.Bootstrap/
|
||||
## Webpack / JSPM
|
||||
|
||||
## Supported browsers
|
||||
To use this project with webpack, follow the [NPM](#install-with-npm) instructions.
|
||||
Now, if you want to use only the accordion, you can do:
|
||||
|
||||
```js
|
||||
import accordion from 'ui-bootstrap4/src/accordion';
|
||||
|
||||
angular.module('myModule', [accordion]);
|
||||
```
|
||||
|
||||
You can import all the pieces you need in the same way:
|
||||
|
||||
```js
|
||||
import accordion from 'ui-bootstrap4/src/accordion';
|
||||
import datepicker from 'ui-bootstrap4/src/datepicker';
|
||||
|
||||
angular.module('myModule', [accordion, datepicker]);
|
||||
```
|
||||
|
||||
This will load all the dependencies (if any) and also the templates (if any).
|
||||
|
||||
Be sure to have a loader able to process `css` files like `css-loader`.
|
||||
|
||||
If you would prefer not to load your css through your JavaScript file loader/bundler, you can choose to import the `index-nocss.js` file instead, which is available for the modules:
|
||||
* carousel
|
||||
* datepicker
|
||||
* datepickerPopup
|
||||
* dropdown
|
||||
* modal
|
||||
* popover
|
||||
* position
|
||||
* timepicker
|
||||
* tooltip
|
||||
* typeahead
|
||||
|
||||
The other modules, such as `accordion` in the example below, do not have CSS resources to load, so you should continue to import them as normal:
|
||||
|
||||
```js
|
||||
import accordion from 'ui-bootstrap4/src/accordion';
|
||||
import typeahead from 'ui-bootstrap4/src/typeahead/index-nocss.js';
|
||||
|
||||
angular.module('myModule', [accordion, typeahead]);
|
||||
```
|
||||
|
||||
## Versioning
|
||||
|
||||
Pre-2.0.0 does not follow a particular versioning system. 2.0.0 and onwards follows [semantic versioning](http://semver.org/). All release changes can be viewed on our [changelog](CHANGELOG.md).
|
||||
|
||||
## Support
|
||||
|
||||
### FAQ
|
||||
|
||||
https://github.com/morgul/ui-bootstrap4/wiki/FAQ
|
||||
|
||||
## Code of Conduct
|
||||
|
||||
Take a moment to read our [Code of Conduct](CODE_OF_CONDUCT.md)
|
||||
|
||||
### Supported browsers
|
||||
|
||||
Directives from this repository are automatically tested with the following browsers:
|
||||
* Chrome (stable and canary channel)
|
||||
@@ -37,143 +170,38 @@ Directives from this repository are automatically tested with the following brow
|
||||
|
||||
Modern mobile browsers should work without problems.
|
||||
|
||||
**IE 8 is not officially supported at the moment**. This project is run by volunteers and with the current number of commiters
|
||||
we are not in the position to guarantee IE8 support. If you need support for IE8 we would welcome a contributor who would like to take care about IE8.
|
||||
Alternatively you could sponsor this project to guarantee IE8 support.
|
||||
## Need help?
|
||||
Need help using UI Bootstrap?
|
||||
|
||||
We believe that most of the directives would work OK after:
|
||||
* including relevant shims (for ES5 we recommend https://github.com/kriskowal/es5-shim)
|
||||
* taking care of the steps described in http://docs.angularjs.org/guide/ie
|
||||
* ~~Live help in the IRC (`#angularjs` channel at the `freenode` network). Use this [webchat](https://webchat.freenode.net/) or your own IRC client.~~
|
||||
* ~~Ask a question in [StackOverflow](http://stackoverflow.com/) under the [ui-bootstrap4](http://stackoverflow.com/questions/tagged/ui-bootstrap4) tag.~~
|
||||
|
||||
We are simply not regularly testing against IE8.
|
||||
**For now, please create new issues in this repository to ask questions about using UI Bootstrap 4**
|
||||
|
||||
## Project philosophy
|
||||
## Found a bug?
|
||||
Please take a look at [CONTRIBUTING.md](CONTRIBUTING.md#you-think-youve-found-a-bug) and submit your issue [here](https://github.com/morgul/ui-bootstrap4/issues/new).
|
||||
|
||||
### Native, lightweight directives
|
||||
|
||||
We are aiming at providing a set of AngularJS directives based on Bootstrap's markup and CSS. The goal is to provide **native AngularJS directives** without any dependency on jQuery or Bootstrap's JavaScript.
|
||||
It is often better to rewrite an existing JavaScript code and create a new, pure AngularJS directive. Most of the time the resulting directive is smaller as compared to the original JavaScript code size and better integrated into the AngularJS ecosystem.
|
||||
----
|
||||
|
||||
### Customizability
|
||||
|
||||
All the directives in this repository should have their markup externalized as templates (loaded via `templateUrl`). In practice it means that you can **customize directive's markup at will**. One could even imagine providing a non-Bootstrap version of the templates!
|
||||
|
||||
### Take what you need and not more
|
||||
|
||||
Each directive has its own AngularJS module without any dependencies on other modules or third-party JavaScript code. In practice it means that you can **just grab the code for the directives you need** and you are not obliged to drag the whole repository.
|
||||
|
||||
### Quality and stability
|
||||
|
||||
Directives should work. All the time and in all browsers. This is why all the directives have a comprehensive suite of unit tests. All the automated tests are executed on each checkin in several browsers: Chrome, ChromeCanary, Firefox, Opera, Safari, IE9.
|
||||
In fact we are fortunate enough to **benefit from the same testing infrastructure as AngularJS**!
|
||||
|
||||
## Support
|
||||
|
||||
If you are having problems making some directives work, there are several ways to get help:
|
||||
|
||||
* Live help in the IRC (`#angularjs` channel at the `freenode` network). Use this [webchat](https://webchat.freenode.net/) or your own IRC client.
|
||||
* Ask a question in [stackoverflow](http://stackoverflow.com/) under the [angular-ui-bootstrap](http://stackoverflow.com/questions/tagged/angular-ui-bootstrap) tag.
|
||||
* Write your question in our [mailing list](https://groups.google.com/forum/#!categories/angular-ui/bootstrap).
|
||||
|
||||
Project's issue on GitHub should be used discuss bugs and features.
|
||||
|
||||
## Contributing to the project
|
||||
|
||||
We are always looking for the quality contributions! Please check the [CONTRIBUTING.md](CONTRIBUTING.md) for the contribution guidelines.
|
||||
|
||||
### Development
|
||||
#### Prepare your environment
|
||||
* Install [Node.js](http://nodejs.org/) and NPM (should come with)
|
||||
* Install global dev dependencies: `npm install -g grunt-cli karma`
|
||||
* Install local dev dependencies: `npm install` while current directory is bootstrap repo
|
||||
~~## Development, meeting minutes, roadmap and more.~~
|
||||
|
||||
#### Build
|
||||
* Build the whole project: `grunt` - this will run `lint`, `test`, and `concat` targets
|
||||
* To build modules, first run `grunt html2js` then `grunt build:module1:module2...:moduleN`
|
||||
~~Head over to the [Wiki](https://github.com/morgul/ui-bootstrap4/wiki) for notes on development for UI Bootstrap, meeting minutes from the UI Bootstrap team, roadmap plans, project philosophy and more.~~
|
||||
|
||||
You can generate a custom build, containing only needed modules, from the project's homepage.
|
||||
Alternatively you can run local Grunt build from the command line and list needed modules as shown below:
|
||||
----
|
||||
|
||||
```javascript
|
||||
grunt build:modal:tabs:alert:popover:dropdownToggle:buttons:progressbar
|
||||
## Building a Release
|
||||
|
||||
I've currently hacked out a solution, but the whole thing's very messy. For now, to build a release, just do:
|
||||
|
||||
```
|
||||
$ grunt release:3.0.0
|
||||
```
|
||||
|
||||
Check the Grunt build file for other tasks that are defined for this project.
|
||||
|
||||
#### TDD
|
||||
* Run test: `grunt watch`
|
||||
|
||||
This will start Karma server and will continuously watch files in the project, executing tests upon every change.
|
||||
|
||||
#### Test coverage
|
||||
Add the `--coverage` option (e.g. `grunt test --coverage`, `grunt watch --coverage`) to see reports on the test coverage. These coverage reports are found in the coverage folder.
|
||||
|
||||
### Customize templates
|
||||
|
||||
As mentioned directives from this repository have all the markup externalized in templates. You might want to customize default
|
||||
templates to match your desired look & feel, add new functionality etc.
|
||||
|
||||
The easiest way to override an individual template is to use the `<script>` directive:
|
||||
|
||||
```html
|
||||
<script id="template/alert/alert.html" type="text/ng-template">
|
||||
<div class='alert' ng-class='type && "alert-" + type'>
|
||||
<button ng-show='closeable' type='button' class='close' ng-click='close()'>Close</button>
|
||||
<div ng-transclude></div>
|
||||
</div>
|
||||
</script>
|
||||
```
|
||||
|
||||
If you want to override more templates it makes sense to store them as individual files and feed the `$templateCache` from those partials.
|
||||
For people using Grunt as the build tool it can be easily done using the `grunt-html2js` plugin. You can also configure your own template url.
|
||||
Let's have a look:
|
||||
|
||||
Your own template url is `views/partials/ui-bootstrap-tpls/alert/alert.html`.
|
||||
|
||||
Add "html2js" task to your Gruntfile
|
||||
```javascript
|
||||
html2js: {
|
||||
options: {
|
||||
base: '.',
|
||||
module: 'ui-templates',
|
||||
rename: function (modulePath) {
|
||||
var moduleName = modulePath.replace('app/views/partials/ui-bootstrap-tpls/', '').replace('.html', '');
|
||||
return 'template' + '/' + moduleName + '.html';
|
||||
}
|
||||
},
|
||||
main: {
|
||||
src: ['app/views/partials/ui-bootstrap-tpls/**/*.html'],
|
||||
dest: '.tmp/ui-templates.js'
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Make sure to load your template.js file
|
||||
`<script src="/ui-templates.js"></script>`
|
||||
|
||||
Inject the `ui-templates` module in your `app.js`
|
||||
```javascript
|
||||
angular.module('myApp', [
|
||||
'ui.bootstrap',
|
||||
'ui-templates'
|
||||
]);
|
||||
```
|
||||
|
||||
Then it will work fine!
|
||||
|
||||
For more information visit: https://github.com/karlgoldstein/grunt-html2js
|
||||
|
||||
### Release
|
||||
* Bump up version number in `package.json`
|
||||
* Commit the version change with the following message: `chore(release): [version number]`
|
||||
* tag
|
||||
* push changes and a tag (`git push --tags`)
|
||||
* switch to the `gh-pages` branch: `git checkout gh-pages`
|
||||
* copy content of the dist folder to the main folder
|
||||
* Commit the version change with the following message: `chore(release): [version number]`
|
||||
* push changes
|
||||
* switch back to the `main branch` and modify `package.json` to bump up version for the next iteration
|
||||
* commit (`chore(release): starting [version number]`) and push
|
||||
* publish Bower and NuGet packages
|
||||
|
||||
Well done! (If you don't like repeating yourself open a PR with a grunt task taking care of the above!)
|
||||
(Obviously, replace `3.0.0` with the version you're releasing.) That should build a correct release, and update the
|
||||
docs, and everything.
|
||||
|
||||
-90
@@ -1,90 +0,0 @@
|
||||
## Roadmap
|
||||
|
||||
#### Directive Maintainers
|
||||
|
||||
Who will take the lead regarding any pull requests or decisions for a a directive?
|
||||
|
||||
<table width="100%">
|
||||
<th>Component</th><th>Maintainer</th>
|
||||
<tr>
|
||||
<td>accordion</td><td>@ajoslin</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>alert</td><td>@pkozlowski</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>bindHtml</td><td>frozen, use $sce?</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>buttons</td><td> @pkozlowski</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>carousel</td><td>@ajoslin</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>collapse</td><td>$animate (@chrisirhc)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>datepicker</td><td>@bekos</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>dropdownToggle</td><td>@bekos</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>modal</td><td>@pkozlowski</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>pagination</td><td>@bekos</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>popover/tooltip</td><td>@chrisirhc</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>position</td><td>@ajoslin</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>progressbar</td><td>@bekos</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>rating</td><td>@bekos</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>tabs</td><td>@ajoslin</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>timepicker</td><td>@bekos</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>transition</td><td>@frozen, remove (@chrisirhc)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>typeahead</td><td>@pkozlowski, @chrisirhc</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
#### Attribute Prefix
|
||||
|
||||
Each directive should make its own two-letter prefix
|
||||
|
||||
`<tab tb-active=”true” tb-select=”doThis()”>`
|
||||
|
||||
#### Use $animate
|
||||
|
||||
* @chrisirhc is leading this
|
||||
|
||||
#### New Build system
|
||||
|
||||
* @ajoslin is leading this
|
||||
* Building everything on travis commit
|
||||
* Push to bower, nuget, cdnjs, etc
|
||||
|
||||
#### Switch to ngdocs
|
||||
|
||||
* http://github.com/petebacondarwin/angular-doc-gen
|
||||
|
||||
### Conventions for whether attributes/options should be watched/evaluated-once
|
||||
|
||||
- Boolean attributes
|
||||
- Stick AngularJS conventions rather than Bootstrap conventions
|
||||
|
||||
@@ -0,0 +1,337 @@
|
||||
/* global FastClick, smoothScroll */
|
||||
angular.module('ui.bootstrap.demo', ['ui.bootstrap', 'plunker', 'ngTouch', 'ngAnimate', 'ngSanitize'], function($httpProvider){
|
||||
if (!!window.FastClick) {
|
||||
FastClick.attach(document.body);
|
||||
}
|
||||
delete $httpProvider.defaults.headers.common['X-Requested-With'];
|
||||
}).run(['$location', function($location){
|
||||
//Allows us to navigate to the correct element on initialization
|
||||
if ($location.path() !== '' && $location.path() !== '/') {
|
||||
smoothScroll(document.getElementById($location.path().substring(1)), 500, function(el) {
|
||||
location.replace('#' + el.id);
|
||||
});
|
||||
}
|
||||
}]).factory('buildFilesService', function ($http, $q) {
|
||||
|
||||
var moduleMap;
|
||||
var rawFiles;
|
||||
|
||||
return {
|
||||
getModuleMap: getModuleMap,
|
||||
getRawFiles: getRawFiles,
|
||||
get: function () {
|
||||
return $q.all({
|
||||
moduleMap: getModuleMap(),
|
||||
rawFiles: getRawFiles()
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
function getModuleMap() {
|
||||
return moduleMap ? $q.when(moduleMap) : $http.get('assets/module-mapping.json')
|
||||
.then(function (result) {
|
||||
moduleMap = result.data;
|
||||
return moduleMap;
|
||||
});
|
||||
}
|
||||
|
||||
function getRawFiles() {
|
||||
return rawFiles ? $q.when(rawFiles) : $http.get('assets/raw-files.json')
|
||||
.then(function (result) {
|
||||
rawFiles = result.data;
|
||||
return rawFiles;
|
||||
});
|
||||
}
|
||||
|
||||
})
|
||||
.controller('MainCtrl', MainCtrl)
|
||||
.controller('SelectModulesCtrl', SelectModulesCtrl)
|
||||
.controller('DownloadCtrl', DownloadCtrl);
|
||||
|
||||
function MainCtrl($scope, $http, $document, $uibModal, orderByFilter) {
|
||||
$scope.isCollapsed = true;
|
||||
|
||||
// Grab old version docs
|
||||
$http.get('/ui-bootstrap4/versions-mapping.json')
|
||||
.then(function(result) {
|
||||
$scope.oldDocs = result.data;
|
||||
})
|
||||
.catch(function(response)
|
||||
{
|
||||
if(response.status === 404)
|
||||
{
|
||||
$http.get('/versions-mapping.json')
|
||||
.then(function(result) {
|
||||
$scope.oldDocs = result.data;
|
||||
})
|
||||
.catch(function(response)
|
||||
{
|
||||
console.log('failed to get versions mapping:', response);
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
console.log('failed to get versions mapping:', response);
|
||||
}
|
||||
});
|
||||
|
||||
$scope.showBuildModal = function() {
|
||||
var modalInstance = $uibModal.open({
|
||||
templateUrl: 'buildModal.html',
|
||||
controller: 'SelectModulesCtrl',
|
||||
resolve: {
|
||||
modules: function(buildFilesService) {
|
||||
return buildFilesService.getModuleMap()
|
||||
.then(function (moduleMap) {
|
||||
return Object.keys(moduleMap);
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
$scope.showDownloadModal = function() {
|
||||
var modalInstance = $uibModal.open({
|
||||
templateUrl: 'downloadModal.html',
|
||||
controller: 'DownloadCtrl'
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
function SelectModulesCtrl($scope, $uibModalInstance, modules, buildFilesService) {
|
||||
$scope.selectedModules = [];
|
||||
$scope.modules = modules;
|
||||
|
||||
$scope.selectedChanged = function(module, selected) {
|
||||
if (selected) {
|
||||
$scope.selectedModules.push(module);
|
||||
} else {
|
||||
$scope.selectedModules.splice($scope.selectedModules.indexOf(module), 1);
|
||||
}
|
||||
};
|
||||
|
||||
$scope.downloadBuild = function () {
|
||||
$uibModalInstance.close($scope.selectedModules);
|
||||
};
|
||||
|
||||
$scope.cancel = function () {
|
||||
$uibModalInstance.dismiss();
|
||||
};
|
||||
|
||||
$scope.isOldBrowser = function () {
|
||||
return isOldBrowser;
|
||||
};
|
||||
|
||||
$scope.build = function (selectedModules, version) {
|
||||
/* global JSZip, saveAs */
|
||||
var moduleMap, rawFiles;
|
||||
|
||||
buildFilesService.get().then(function (buildFiles) {
|
||||
moduleMap = buildFiles.moduleMap;
|
||||
rawFiles = buildFiles.rawFiles;
|
||||
|
||||
generateBuild();
|
||||
});
|
||||
|
||||
function generateBuild() {
|
||||
var srcModuleNames = selectedModules
|
||||
.map(function (module) {
|
||||
return moduleMap[module];
|
||||
})
|
||||
.reduce(function (toBuild, module) {
|
||||
addIfNotExists(toBuild, module.name);
|
||||
|
||||
module.dependencies.forEach(function (depName) {
|
||||
addIfNotExists(toBuild, depName);
|
||||
});
|
||||
return toBuild;
|
||||
}, []);
|
||||
|
||||
var srcModules = srcModuleNames
|
||||
.map(function (moduleName) {
|
||||
return moduleMap[moduleName];
|
||||
});
|
||||
|
||||
var srcModuleFullNames = srcModules
|
||||
.map(function (module) {
|
||||
return module.moduleName;
|
||||
});
|
||||
|
||||
var srcJsContent = srcModules
|
||||
.reduce(function (buildFiles, module) {
|
||||
return buildFiles.concat(module.srcFiles);
|
||||
}, [])
|
||||
.map(getFileContent)
|
||||
.join('\n')
|
||||
;
|
||||
|
||||
var jsFile = createNoTplFile(srcModuleFullNames, srcJsContent);
|
||||
|
||||
var tplModuleNames = srcModules
|
||||
.reduce(function (tplModuleNames, module) {
|
||||
return tplModuleNames.concat(module.tplModules);
|
||||
}, []);
|
||||
|
||||
var tplJsContent = srcModules
|
||||
.reduce(function (buildFiles, module) {
|
||||
return buildFiles.concat(module.tpljsFiles);
|
||||
}, [])
|
||||
.map(getFileContent)
|
||||
.join('\n')
|
||||
;
|
||||
|
||||
var jsTplFile = createWithTplFile(srcModuleFullNames, srcJsContent, tplModuleNames, tplJsContent);
|
||||
|
||||
var cssContent = srcModules
|
||||
.map(function (module) {
|
||||
return module.css;
|
||||
})
|
||||
.filter(function (css) {
|
||||
return css;
|
||||
})
|
||||
.join('\n')
|
||||
;
|
||||
|
||||
var cssJsContent = srcModules
|
||||
.map(function (module) {
|
||||
return module.cssJs;
|
||||
})
|
||||
.filter(function (cssJs) {
|
||||
return cssJs;
|
||||
})
|
||||
.join('\n')
|
||||
;
|
||||
|
||||
var footer = cssJsContent;
|
||||
|
||||
var zip = new JSZip();
|
||||
zip.file('ui-bootstrap-custom-' + version + '.js', rawFiles.banner + jsFile + footer);
|
||||
zip.file('ui-bootstrap-custom-' + version + '.min.js', rawFiles.banner + uglify(jsFile + footer));
|
||||
zip.file('ui-bootstrap-custom-tpls-' + version + '.js', rawFiles.banner + jsTplFile + footer);
|
||||
zip.file('ui-bootstrap-custom-tpls-' + version + '.min.js', rawFiles.banner + uglify(jsTplFile + footer));
|
||||
zip.file('ui-bootstrap-custom-tpls-' + version + '.min.js', rawFiles.banner + uglify(jsTplFile + footer));
|
||||
|
||||
if (cssContent) {
|
||||
zip.file('ui-bootstrap-custom-' + version + '-csp.css', rawFiles.cssBanner + cssContent);
|
||||
}
|
||||
|
||||
saveAs(zip.generate({type: 'blob'}), 'ui-bootstrap-custom-build.zip');
|
||||
}
|
||||
|
||||
function createNoTplFile(srcModuleNames, srcJsContent) {
|
||||
return 'angular.module("ui.bootstrap", [' + srcModuleNames.join(',') + ']);\n' +
|
||||
srcJsContent;
|
||||
}
|
||||
|
||||
function createWithTplFile(srcModuleNames, srcJsContent, tplModuleNames, tplJsContent) {
|
||||
var depModuleNames = srcModuleNames.slice();
|
||||
depModuleNames.unshift('"ui.bootstrap.tpls"');
|
||||
|
||||
return 'angular.module("ui.bootstrap", [' + depModuleNames.join(',') + ']);\n' +
|
||||
'angular.module("ui.bootstrap.tpls", [' + tplModuleNames.join(',') + ']);\n' +
|
||||
srcJsContent + '\n' + tplJsContent;
|
||||
|
||||
}
|
||||
|
||||
function addIfNotExists(array, element) {
|
||||
if (array.indexOf(element) == -1) {
|
||||
array.push(element);
|
||||
}
|
||||
}
|
||||
|
||||
function getFileContent(fileName) {
|
||||
return rawFiles.files[fileName];
|
||||
}
|
||||
|
||||
function uglify(js) {
|
||||
/* global UglifyJS */
|
||||
|
||||
var ast = UglifyJS.parse(js);
|
||||
ast.figure_out_scope();
|
||||
|
||||
var compressor = UglifyJS.Compressor();
|
||||
var compressedAst = ast.transform(compressor);
|
||||
|
||||
compressedAst.figure_out_scope();
|
||||
compressedAst.compute_char_frequency();
|
||||
compressedAst.mangle_names();
|
||||
|
||||
var stream = UglifyJS.OutputStream();
|
||||
compressedAst.print(stream);
|
||||
|
||||
return stream.toString();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
function DownloadCtrl($scope, $uibModalInstance) {
|
||||
$scope.options = {
|
||||
minified: true,
|
||||
tpls: true
|
||||
};
|
||||
|
||||
$scope.download = function (version) {
|
||||
var options = $scope.options;
|
||||
|
||||
var downloadUrl = ['ui-bootstrap-'];
|
||||
if (options.tpls) {
|
||||
downloadUrl.push('tpls-');
|
||||
}
|
||||
downloadUrl.push(version);
|
||||
if (options.minified) {
|
||||
downloadUrl.push('.min');
|
||||
}
|
||||
downloadUrl.push('.js');
|
||||
|
||||
return downloadUrl.join('');
|
||||
};
|
||||
|
||||
$scope.cancel = function () {
|
||||
$uibModalInstance.dismiss();
|
||||
};
|
||||
}
|
||||
|
||||
/*
|
||||
* The following compatibility check is from:
|
||||
*
|
||||
* Bootstrap Customizer (http://getbootstrap.com/customize/)
|
||||
* Copyright 2011-2014 Twitter, Inc.
|
||||
*
|
||||
* Licensed under the Creative Commons Attribution 3.0 Unported License. For
|
||||
* details, see http://creativecommons.org/licenses/by/3.0/.
|
||||
*/
|
||||
var isOldBrowser;
|
||||
(function () {
|
||||
|
||||
var supportsFile = (window.File && window.FileReader && window.FileList && window.Blob);
|
||||
function failback() {
|
||||
isOldBrowser = true;
|
||||
}
|
||||
/**
|
||||
* Based on:
|
||||
* Blob Feature Check v1.1.0
|
||||
* https://github.com/ssorallen/blob-feature-check/
|
||||
* License: Public domain (http://unlicense.org)
|
||||
*/
|
||||
var url = window.URL;
|
||||
var svg = new Blob(
|
||||
['<svg xmlns=\'http://www.w3.org/2000/svg\'></svg>'],
|
||||
{ type: 'image/svg+xml;charset=utf-8' }
|
||||
);
|
||||
var objectUrl = url.createObjectURL(svg);
|
||||
|
||||
if (/^blob:/.exec(objectUrl) === null || !supportsFile) {
|
||||
// `URL.createObjectURL` created a URL that started with something other
|
||||
// than "blob:", which means it has been polyfilled and is not supported by
|
||||
// this browser.
|
||||
failback();
|
||||
} else {
|
||||
angular.element('<img/>')
|
||||
.on('load', function () {
|
||||
isOldBrowser = false;
|
||||
})
|
||||
.on('error', failback)
|
||||
.attr('src', objectUrl);
|
||||
}
|
||||
|
||||
})();
|
||||
@@ -0,0 +1,317 @@
|
||||
body {
|
||||
opacity: 1;
|
||||
-webkit-transition: opacity 1s ease;
|
||||
-moz-transition: opacity 1s ease;
|
||||
transition: opacity 1s;
|
||||
}
|
||||
|
||||
.ng-cloak {
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
.ng-invalid {
|
||||
border: 1px solid red !important;
|
||||
}
|
||||
|
||||
section {
|
||||
padding-top: 30px;
|
||||
}
|
||||
|
||||
.page-header h1 > small > a {
|
||||
color: #999;
|
||||
}
|
||||
.page-header h1 > small > a:hover {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.footer {
|
||||
text-align: center;
|
||||
padding: 30px 0;
|
||||
margin-top: 70px;
|
||||
border-top: 1px solid #e5e5e5;
|
||||
background-color: #f5f5f5;
|
||||
}
|
||||
|
||||
.bs-social {
|
||||
margin-top: 20px;
|
||||
margin-bottom: 20px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
@media (min-width: 768px) {
|
||||
|
||||
.bs-social {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.nav, .pagination, .carousel, .panel-title a {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.bs-social-buttons {
|
||||
display: inline-block;
|
||||
margin-bottom: 0;
|
||||
padding-left: 0;
|
||||
list-style: none;
|
||||
}
|
||||
.bs-social-buttons li {
|
||||
display: inline-block;
|
||||
padding: 5px 8px;
|
||||
line-height: 1;
|
||||
}
|
||||
|
||||
@media (max-width: 767px) {
|
||||
|
||||
.visible-xs.collapse.in {
|
||||
display: block!important;
|
||||
}
|
||||
.visible-xs.collapse {
|
||||
display: none!important;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.navbar-fixed-top .collapse {
|
||||
border-top: 1px solid #e7e7e7;
|
||||
margin-left: -15px;
|
||||
margin-right: -15px;
|
||||
padding-right: 15px;
|
||||
padding-left: 15px;
|
||||
}
|
||||
|
||||
.show-grid {
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
/*
|
||||
* Container
|
||||
*
|
||||
* Tweak to width of container.
|
||||
*/
|
||||
|
||||
/*@media (min-width: 1200px) {
|
||||
.container{
|
||||
max-width: 970px;
|
||||
}
|
||||
}*/
|
||||
|
||||
/*
|
||||
* Tabs
|
||||
*
|
||||
* Tweaks to the Tabs.
|
||||
*/
|
||||
|
||||
.code .nav-tabs {
|
||||
border-bottom: 1px solid #ccc;
|
||||
}
|
||||
|
||||
.code pre, .code code {
|
||||
border-top: none;
|
||||
border-top-left-radius: 0;
|
||||
border-top-right-radius: 0;
|
||||
}
|
||||
|
||||
.code .nav-tabs>li.active>a, .code .nav-tabs>li.active>a:hover, .code .nav-tabs>li.active>a:focus {
|
||||
background-color: #f8f8f8;
|
||||
border: 1px solid #ccc;
|
||||
border-bottom-color: transparent;
|
||||
}
|
||||
|
||||
/*
|
||||
* Button Inverse
|
||||
*
|
||||
* Buttons in the masthead.
|
||||
*/
|
||||
|
||||
.btn-outline-inverse {
|
||||
color: #fff;
|
||||
background-color: transparent;
|
||||
border-color: #cdbfe3;
|
||||
margin: 10px;
|
||||
}
|
||||
|
||||
@media (min-width: 768px) {
|
||||
|
||||
.btn-outline-inverse {
|
||||
width: auto;
|
||||
margin: 20px 5px 20px 0;
|
||||
padding: 18px 24px;
|
||||
font-size: 21px;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.btn-outline-inverse:hover, .btn-outline-inverse:focus, .btn-outline-inverse:active {
|
||||
color: #563d7c;
|
||||
text-shadow: none;
|
||||
background-color: #fff;
|
||||
border-color: #fff;
|
||||
}
|
||||
|
||||
|
||||
/* Page headers */
|
||||
.bs-header {
|
||||
padding: 30px 15px 40px; /* side padding builds on .container 15px, so 30px */
|
||||
font-size: 16px;
|
||||
text-align: center;
|
||||
text-shadow: 0 1px 0 rgba(0,0,0,.15);
|
||||
color: #cdbfe3;
|
||||
background-color: #563d7c;
|
||||
background-image: url(header.png);
|
||||
}
|
||||
.bs-header a {
|
||||
color: #fff;
|
||||
font-weight: normal;
|
||||
}
|
||||
.bs-header h1 {
|
||||
color: #fff;
|
||||
}
|
||||
.bs-header p {
|
||||
font-weight: 200;
|
||||
line-height: 1.4;
|
||||
}
|
||||
.bs-header .container {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
@media (min-width: 768px) {
|
||||
.bs-header {
|
||||
font-size: 30px;
|
||||
text-align: left;
|
||||
}
|
||||
.bs-header h1 {
|
||||
font-size: 100px;
|
||||
line-height: 1;
|
||||
}
|
||||
}
|
||||
|
||||
.navbar-inner {
|
||||
-webkit-box-shadow: 0 3px 3px rgba(0,0,0,0.175);
|
||||
box-shadow: 0 3px 3px rgba(0,0,0,0.175);
|
||||
}
|
||||
|
||||
/*
|
||||
* Side navigation
|
||||
*
|
||||
* Scrollspy and affixed enhanced navigation to highlight sections and secondary
|
||||
* sections of docs content.
|
||||
*/
|
||||
|
||||
/* By default it's not affixed in mobile views, so undo that */
|
||||
.bs-sidebar.affix {
|
||||
position: static;
|
||||
}
|
||||
|
||||
/* First level of nav */
|
||||
.bs-sidenav {
|
||||
margin-top: 30px;
|
||||
margin-bottom: 30px;
|
||||
padding-top: 10px;
|
||||
padding-bottom: 10px;
|
||||
text-shadow: 0 1px 0 #fff;
|
||||
background-color: #f7f5fa;
|
||||
border-radius: 5px;
|
||||
}
|
||||
|
||||
/* All levels of nav */
|
||||
.bs-sidebar .nav > li > a {
|
||||
display: block;
|
||||
color: #716b7a;
|
||||
padding: 5px 20px;
|
||||
}
|
||||
.bs-sidebar .nav > li > a:hover,
|
||||
.bs-sidebar .nav > li > a:focus {
|
||||
text-decoration: none;
|
||||
background-color: #e5e3e9;
|
||||
border-right: 1px solid #dbd8e0;
|
||||
}
|
||||
.bs-sidebar .nav > .active > a,
|
||||
.bs-sidebar .nav > .active:hover > a,
|
||||
.bs-sidebar .nav > .active:focus > a {
|
||||
font-weight: bold;
|
||||
color: #563d7c;
|
||||
background-color: transparent;
|
||||
border-right: 1px solid #563d7c;
|
||||
}
|
||||
|
||||
/* Nav: second level (shown on .active) */
|
||||
.bs-sidebar .nav .nav {
|
||||
display: none; /* Hide by default, but at >768px, show it */
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
.bs-sidebar .nav .nav > li > a {
|
||||
padding-top: 3px;
|
||||
padding-bottom: 3px;
|
||||
padding-left: 30px;
|
||||
font-size: 90%;
|
||||
}
|
||||
|
||||
/* Show and affix the side nav when space allows it */
|
||||
@media (min-width: 992px) {
|
||||
.bs-sidebar .nav > .active > ul {
|
||||
display: block;
|
||||
}
|
||||
/* Widen the fixed sidebar */
|
||||
.bs-sidebar.affix,
|
||||
.bs-sidebar.affix-bottom {
|
||||
width: 213px;
|
||||
}
|
||||
.bs-sidebar.affix {
|
||||
position: fixed; /* Undo the static from mobile first approach */
|
||||
top: 80px;
|
||||
}
|
||||
.bs-sidebar.affix-bottom {
|
||||
position: absolute; /* Undo the static from mobile first approach */
|
||||
}
|
||||
.bs-sidebar.affix-bottom .bs-sidenav,
|
||||
.bs-sidebar.affix .bs-sidenav {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
}
|
||||
@media (min-width: 1200px) {
|
||||
/* Widen the fixed sidebar again */
|
||||
.bs-sidebar.affix-bottom,
|
||||
.bs-sidebar.affix {
|
||||
width: 263px;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Not enough room on mobile for markup tab, js tab, and plunk btn.
|
||||
And no one cares about plunk button on a phone anyway */
|
||||
@media only screen and (max-device-width: 480px) {
|
||||
#plunk-btn {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
.navbar-nav .dropdown .navbar-brand {
|
||||
max-width: 100%;
|
||||
margin-right: inherit;
|
||||
margin-left: inherit;
|
||||
}
|
||||
|
||||
.header-placeholder {
|
||||
height: 50px;
|
||||
}
|
||||
|
||||
@media screen and (min-width: 768px) {
|
||||
|
||||
.dropdown.open > .navbar-brand + .dropdown-menu {
|
||||
left: 10px;
|
||||
}
|
||||
|
||||
.header-placeholder {
|
||||
height: 50px;
|
||||
}
|
||||
|
||||
.navbar-nav .dropdown .navbar-brand {
|
||||
max-width: 200px;
|
||||
margin-right: 5px;
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
}
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 8.2 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 398 B |
Binary file not shown.
|
After Width: | Height: | Size: 37 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 8.6 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 12 KiB |
File diff suppressed because one or more lines are too long
@@ -0,0 +1,60 @@
|
||||
angular.module('plunker', [])
|
||||
|
||||
.factory('plunkGenerator', function ($document) {
|
||||
|
||||
return function (ngVersion, bsVersion, version, module, content) {
|
||||
|
||||
var form = angular.element('<form style="display: none;" method="post" action="https://plnkr.co/edit/?p=preview" target="_blank"></form>');
|
||||
var addField = function (name, value) {
|
||||
var input = angular.element('<input type="hidden" name="' + name + '">');
|
||||
input.attr('value', value);
|
||||
form.append(input);
|
||||
};
|
||||
|
||||
var indexContent = function (content, version) {
|
||||
return '<!doctype html>\n' +
|
||||
'<html ng-app="ui.bootstrap.demo">\n' +
|
||||
' <head>\n' +
|
||||
' <script src="//ajax.googleapis.com/ajax/libs/angularjs/'+ngVersion+'/angular.js"></script>\n' +
|
||||
' <script src="//ajax.googleapis.com/ajax/libs/angularjs/'+ngVersion+'/angular-animate.js"></script>\n' +
|
||||
' <script src="//ajax.googleapis.com/ajax/libs/angularjs/'+ngVersion+'/angular-sanitize.js"></script>\n' +
|
||||
' <script src="//angular-ui.github.io/bootstrap/ui-bootstrap-tpls-'+version+'.js"></script>\n' +
|
||||
' <script src="example.js"></script>\n' +
|
||||
' <link href="//netdna.bootstrapcdn.com/bootstrap/'+bsVersion+'/css/bootstrap.min.css" rel="stylesheet">\n' +
|
||||
' </head>\n' +
|
||||
' <body>\n\n' +
|
||||
content + '\n' +
|
||||
' </body>\n' +
|
||||
'</html>\n';
|
||||
};
|
||||
|
||||
var scriptContent = function(content) {
|
||||
return "angular.module('ui.bootstrap.demo', ['ngAnimate', 'ngSanitize', 'ui.bootstrap']);" + "\n" + content;
|
||||
};
|
||||
|
||||
addField('description', 'http://angular-ui.github.io/bootstrap/');
|
||||
addField('files[index.html]', indexContent(content.markup, version));
|
||||
addField('files[example.js]', scriptContent(content.javascript));
|
||||
|
||||
$document.find('body').append(form);
|
||||
form[0].submit();
|
||||
form.remove();
|
||||
};
|
||||
})
|
||||
|
||||
.controller('PlunkerCtrl', function ($scope, plunkGenerator) {
|
||||
|
||||
$scope.content = {};
|
||||
|
||||
$scope.edit = function (ngVersion, bsVersion, version, module) {
|
||||
plunkGenerator(ngVersion, bsVersion, version, module, $scope.content);
|
||||
};
|
||||
})
|
||||
|
||||
.directive('plunkerContent', function () {
|
||||
return {
|
||||
link:function (scope, element, attrs) {
|
||||
scope.content[attrs.plunkerContent] = element.text().trim();
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -0,0 +1,59 @@
|
||||
/**
|
||||
* Generic language patterns
|
||||
*
|
||||
* @author Craig Campbell
|
||||
* @version 1.0.9
|
||||
*/
|
||||
Rainbow.extend([
|
||||
{
|
||||
'matches': {
|
||||
1: {
|
||||
'name': 'keyword.operator',
|
||||
'pattern': /\=/g
|
||||
},
|
||||
2: {
|
||||
'name': 'string',
|
||||
'matches': {
|
||||
'name': 'constant.character.escape',
|
||||
'pattern': /\\('|"){1}/g
|
||||
}
|
||||
}
|
||||
},
|
||||
'pattern': /(\(|\s|\[|\=|:)(('|")([^\\\1]|\\.)*?(\3))/gm
|
||||
},
|
||||
{
|
||||
'name': 'comment',
|
||||
'pattern': /\/\*[\s\S]*?\*\/|(\/\/|\#)[\s\S]*?$/gm
|
||||
},
|
||||
{
|
||||
'name': 'constant.numeric',
|
||||
'pattern': /\b(\d+(\.\d+)?(e(\+|\-)?\d+)?(f|d)?|0x[\da-f]+)\b/gi
|
||||
},
|
||||
{
|
||||
'matches': {
|
||||
1: 'keyword'
|
||||
},
|
||||
'pattern': /\b(and|array|as|bool(ean)?|c(atch|har|lass|onst)|d(ef|elete|o(uble)?)|e(cho|lse(if)?|xit|xtends|xcept)|f(inally|loat|or(each)?|unction)|global|if|import|int(eger)?|long|new|object|or|pr(int|ivate|otected)|public|return|self|st(ring|ruct|atic)|switch|th(en|is|row)|try|(un)?signed|var|void|while)(?=\(|\b)/gi
|
||||
},
|
||||
{
|
||||
'name': 'constant.language',
|
||||
'pattern': /true|false|null/g
|
||||
},
|
||||
{
|
||||
'name': 'keyword.operator',
|
||||
'pattern': /\+|\!|\-|&(gt|lt|amp);|\||\*|\=/g
|
||||
},
|
||||
{
|
||||
'matches': {
|
||||
1: 'function.call'
|
||||
},
|
||||
'pattern': /(\w+?)(?=\()/g
|
||||
},
|
||||
{
|
||||
'matches': {
|
||||
1: 'storage.function',
|
||||
2: 'entity.name.function'
|
||||
},
|
||||
'pattern': /(function)\s(.*?)(?=\()/g
|
||||
}
|
||||
]);
|
||||
@@ -0,0 +1,83 @@
|
||||
/**
|
||||
* HTML patterns
|
||||
*
|
||||
* @author Craig Campbell
|
||||
* @version 1.0.7
|
||||
*/
|
||||
Rainbow.extend('html', [
|
||||
{
|
||||
'name': 'source.php.embedded',
|
||||
'matches': {
|
||||
2: {
|
||||
'language': 'php'
|
||||
}
|
||||
},
|
||||
'pattern': /<\?=?(?!xml)(php)?([\s\S]*?)(\?>)/gm
|
||||
},
|
||||
{
|
||||
'name': 'source.css.embedded',
|
||||
'matches': {
|
||||
0: {
|
||||
'language': 'css'
|
||||
}
|
||||
},
|
||||
'pattern': /<style(.*?)>([\s\S]*?)<\/style>/gm
|
||||
},
|
||||
{
|
||||
'name': 'source.js.embedded',
|
||||
'matches': {
|
||||
0: {
|
||||
'language': 'javascript'
|
||||
}
|
||||
},
|
||||
'pattern': /<script(?! src)(.*?)>([\s\S]*?)<\/script>/gm
|
||||
},
|
||||
{
|
||||
'name': 'comment.html',
|
||||
'pattern': /<\!--[\S\s]*?-->/g
|
||||
},
|
||||
{
|
||||
'matches': {
|
||||
1: 'support.tag.open',
|
||||
2: 'support.tag.cclose'
|
||||
},
|
||||
'pattern': /(<)|(\/?\??>)/g
|
||||
},
|
||||
{
|
||||
'name': 'support.tag',
|
||||
'matches': {
|
||||
1: 'support.tag',
|
||||
2: 'support.tag.special',
|
||||
3: 'support.tag-name'
|
||||
},
|
||||
'pattern': /(<\??)(\/|\!?)(\w+)/g
|
||||
},
|
||||
{
|
||||
'matches': {
|
||||
1: 'support.attribute'
|
||||
},
|
||||
'pattern': /([a-z-]+)(?=\=)/gi
|
||||
},
|
||||
{
|
||||
'matches': {
|
||||
1: 'support.operator',
|
||||
2: 'string.quote',
|
||||
3: 'string.value',
|
||||
4: 'string.quote'
|
||||
},
|
||||
'pattern': /(=)('|")(.*?)(\2)/g
|
||||
},
|
||||
{
|
||||
'matches': {
|
||||
1: 'support.operator',
|
||||
2: 'support.value'
|
||||
},
|
||||
'pattern': /(=)([a-zA-Z\-0-9]*)\b/g
|
||||
},
|
||||
{
|
||||
'matches': {
|
||||
1: 'support.attribute'
|
||||
},
|
||||
'pattern': /\s(\w+)(?=\s|>)(?![\s\S]*<)/g
|
||||
}
|
||||
], true);
|
||||
@@ -0,0 +1,110 @@
|
||||
/**
|
||||
* Javascript patterns
|
||||
*
|
||||
* @author Craig Campbell
|
||||
* @version 1.0.7
|
||||
*/
|
||||
Rainbow.extend('javascript', [
|
||||
|
||||
/**
|
||||
* matches $. or $(
|
||||
*/
|
||||
{
|
||||
'name': 'selector',
|
||||
'pattern': /(\s|^)\$(?=\.|\()/g
|
||||
},
|
||||
{
|
||||
'name': 'support',
|
||||
'pattern': /\b(window|document)\b/g
|
||||
},
|
||||
{
|
||||
'matches': {
|
||||
1: 'support.property'
|
||||
},
|
||||
'pattern': /\.(length|node(Name|Value))\b/g
|
||||
},
|
||||
{
|
||||
'matches': {
|
||||
1: 'support.function'
|
||||
},
|
||||
'pattern': /(setTimeout|setInterval)(?=\()/g
|
||||
|
||||
},
|
||||
{
|
||||
'matches': {
|
||||
1: 'support.method'
|
||||
},
|
||||
'pattern': /\.(getAttribute|push|getElementById|getElementsByClassName|log|setTimeout|setInterval)(?=\()/g
|
||||
},
|
||||
{
|
||||
'matches': {
|
||||
1: 'support.tag.script',
|
||||
2: [
|
||||
{
|
||||
'name': 'string',
|
||||
'pattern': /('|")(.*?)(\1)/g
|
||||
},
|
||||
{
|
||||
'name': 'entity.tag.script',
|
||||
'pattern': /(\w+)/g
|
||||
}
|
||||
],
|
||||
3: 'support.tag.script'
|
||||
},
|
||||
'pattern': /(<\/?)(script.*?)(>)/g
|
||||
},
|
||||
|
||||
/**
|
||||
* matches any escaped characters inside of a js regex pattern
|
||||
*
|
||||
* @see https://github.com/ccampbell/rainbow/issues/22
|
||||
*
|
||||
* this was causing single line comments to fail so it now makes sure
|
||||
* the opening / is not directly followed by a *
|
||||
*
|
||||
* @todo check that there is valid regex in match group 1
|
||||
*/
|
||||
{
|
||||
'name': 'string.regexp',
|
||||
'matches': {
|
||||
1: 'string.regexp.open',
|
||||
2: {
|
||||
'name': 'constant.regexp.escape',
|
||||
'pattern': /\\(.){1}/g
|
||||
},
|
||||
3: 'string.regexp.cclose',
|
||||
4: 'string.regexp.modifier'
|
||||
},
|
||||
'pattern': /(\/)(?!\*)(.+)(\/)([igm]{0,3})/g
|
||||
},
|
||||
|
||||
/**
|
||||
* matches runtime function declarations
|
||||
*/
|
||||
{
|
||||
'matches': {
|
||||
1: 'storage',
|
||||
3: 'entity.function'
|
||||
},
|
||||
'pattern': /(var)?(\s|^)(.*)(?=\s?=\s?function\()/g
|
||||
},
|
||||
|
||||
/**
|
||||
* matches constructor call
|
||||
*/
|
||||
{
|
||||
'matches': {
|
||||
1: 'keyword',
|
||||
2: 'entity.function'
|
||||
},
|
||||
'pattern': /(new)\s+(.*)(?=\()/g
|
||||
},
|
||||
|
||||
/**
|
||||
* matches any function call in the style functionName: function()
|
||||
*/
|
||||
{
|
||||
'name': 'entity.function',
|
||||
'pattern': /(\w+)(?=:\s{0,}function)/g
|
||||
}
|
||||
]);
|
||||
@@ -0,0 +1,88 @@
|
||||
/**
|
||||
* GitHub theme
|
||||
*
|
||||
* @author Craig Campbell
|
||||
* @version 1.0.4
|
||||
*/
|
||||
pre {
|
||||
border: 1px solid #ccc;
|
||||
word-wrap: break-word;
|
||||
padding: 6px 10px;
|
||||
line-height: 19px;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
code {
|
||||
border: 1px solid #eaeaea;
|
||||
margin: 0 2px;
|
||||
padding: 0 5px;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
pre code {
|
||||
border: 0;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
-moz-border-radius: 0;
|
||||
-webkit-border-radius: 0;
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
pre, code {
|
||||
font-family: Consolas, 'Liberation Mono', Courier, monospace;
|
||||
color: #333;
|
||||
background: #f8f8f8;
|
||||
-moz-border-radius: 3px;
|
||||
-webkit-border-radius: 3px;
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
pre, pre code {
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
pre .comment {
|
||||
color: #998;
|
||||
}
|
||||
|
||||
pre .support {
|
||||
color: #0086B3;
|
||||
}
|
||||
|
||||
pre .tag, pre .tag-name {
|
||||
color: navy;
|
||||
}
|
||||
|
||||
pre .keyword, pre .css-property, pre .vendor-prefix, pre .sass, pre .class, pre .id, pre .css-value, pre .entity.function, pre .storage.function {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
pre .css-property, pre .css-value, pre .vendor-prefix, pre .support.namespace {
|
||||
color: #333;
|
||||
}
|
||||
|
||||
pre .constant.numeric, pre .keyword.unit, pre .hex-color {
|
||||
font-weight: normal;
|
||||
color: #099;
|
||||
}
|
||||
|
||||
pre .entity.class {
|
||||
color: #458;
|
||||
}
|
||||
|
||||
pre .entity.id, pre .entity.function {
|
||||
color: #900;
|
||||
}
|
||||
|
||||
pre .attribute, pre .variable {
|
||||
color: teal;
|
||||
}
|
||||
|
||||
pre .string, pre .support.value {
|
||||
font-weight: normal;
|
||||
color: #d14;
|
||||
}
|
||||
|
||||
pre .regexp {
|
||||
color: #009926;
|
||||
}
|
||||
@@ -0,0 +1,773 @@
|
||||
/**
|
||||
* Copyright 2012 Craig Campbell
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
* Rainbow is a simple code syntax highlighter
|
||||
*
|
||||
* @preserve @version 1.1.8
|
||||
* @url rainbowco.de
|
||||
*/
|
||||
window['Rainbow'] = (function() {
|
||||
|
||||
/**
|
||||
* array of replacements to process at the end
|
||||
*
|
||||
* @type {Object}
|
||||
*/
|
||||
var replacements = {},
|
||||
|
||||
/**
|
||||
* an array of start and end positions of blocks to be replaced
|
||||
*
|
||||
* @type {Object}
|
||||
*/
|
||||
replacement_positions = {},
|
||||
|
||||
/**
|
||||
* an array of the language patterns specified for each language
|
||||
*
|
||||
* @type {Object}
|
||||
*/
|
||||
language_patterns = {},
|
||||
|
||||
/**
|
||||
* an array of languages and whether they should bypass the default patterns
|
||||
*
|
||||
* @type {Object}
|
||||
*/
|
||||
bypass_defaults = {},
|
||||
|
||||
/**
|
||||
* processing level
|
||||
*
|
||||
* replacements are stored at this level so if there is a sub block of code
|
||||
* (for example php inside of html) it runs at a different level
|
||||
*
|
||||
* @type {number}
|
||||
*/
|
||||
CURRENT_LEVEL = 0,
|
||||
|
||||
/**
|
||||
* constant used to refer to the default language
|
||||
*
|
||||
* @type {number}
|
||||
*/
|
||||
DEFAULT_LANGUAGE = 0,
|
||||
|
||||
/**
|
||||
* used as counters so we can selectively call setTimeout
|
||||
* after processing a certain number of matches/replacements
|
||||
*
|
||||
* @type {number}
|
||||
*/
|
||||
match_counter = 0,
|
||||
|
||||
/**
|
||||
* @type {number}
|
||||
*/
|
||||
replacement_counter = 0,
|
||||
|
||||
/**
|
||||
* @type {null|string}
|
||||
*/
|
||||
global_class,
|
||||
|
||||
/**
|
||||
* @type {null|Function}
|
||||
*/
|
||||
onHighlight;
|
||||
|
||||
/**
|
||||
* cross browser get attribute for an element
|
||||
*
|
||||
* @see http://stackoverflow.com/questions/3755227/cross-browser-javascript-getattribute-method
|
||||
*
|
||||
* @param {Node} el
|
||||
* @param {string} attr attribute you are trying to get
|
||||
* @returns {string|number}
|
||||
*/
|
||||
function _attr(el, attr, attrs, i) {
|
||||
var result = (el.getAttribute && el.getAttribute(attr)) || 0;
|
||||
|
||||
if (!result) {
|
||||
attrs = el.attributes;
|
||||
|
||||
for (i = 0; i < attrs.length; ++i) {
|
||||
if (attrs[i].nodeName === attr) {
|
||||
return attrs[i].nodeValue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* adds a class to a given code block
|
||||
*
|
||||
* @param {Element} el
|
||||
* @param {string} class_name class name to add
|
||||
* @returns void
|
||||
*/
|
||||
function _addClass(el, class_name) {
|
||||
el.className += el.className ? ' ' + class_name : class_name;
|
||||
}
|
||||
|
||||
/**
|
||||
* checks if a block has a given class
|
||||
*
|
||||
* @param {Element} el
|
||||
* @param {string} class_name class name to check for
|
||||
* @returns {boolean}
|
||||
*/
|
||||
function _hasClass(el, class_name) {
|
||||
return (' ' + el.className + ' ').indexOf(' ' + class_name + ' ') > -1;
|
||||
}
|
||||
|
||||
/**
|
||||
* gets the language for this block of code
|
||||
*
|
||||
* @param {Element} block
|
||||
* @returns {string|null}
|
||||
*/
|
||||
function _getLanguageForBlock(block) {
|
||||
|
||||
// if this doesn't have a language but the parent does then use that
|
||||
// this means if for example you have: <pre data-language="php">
|
||||
// with a bunch of <code> blocks inside then you do not have
|
||||
// to specify the language for each block
|
||||
var language = _attr(block, 'data-language') || _attr(block.parentNode, 'data-language');
|
||||
|
||||
// this adds support for specifying language via a css class
|
||||
// you can use the Google Code Prettify style: <pre class="lang-php">
|
||||
// or the HTML5 style: <pre><code class="language-php">
|
||||
if (!language) {
|
||||
var pattern = /\blang(?:uage)?-(\w+)/,
|
||||
match = block.className.match(pattern) || block.parentNode.className.match(pattern);
|
||||
|
||||
if (match) {
|
||||
language = match[1];
|
||||
}
|
||||
}
|
||||
|
||||
return language;
|
||||
}
|
||||
|
||||
/**
|
||||
* makes sure html entities are always used for tags
|
||||
*
|
||||
* @param {string} code
|
||||
* @returns {string}
|
||||
*/
|
||||
function _htmlEntities(code) {
|
||||
return code.replace(/</g, '<').replace(/>/g, '>').replace(/&(?![\w\#]+;)/g, '&');
|
||||
}
|
||||
|
||||
/**
|
||||
* determines if a new match intersects with an existing one
|
||||
*
|
||||
* @param {number} start1 start position of existing match
|
||||
* @param {number} end1 end position of existing match
|
||||
* @param {number} start2 start position of new match
|
||||
* @param {number} end2 end position of new match
|
||||
* @returns {boolean}
|
||||
*/
|
||||
function _intersects(start1, end1, start2, end2) {
|
||||
if (start2 >= start1 && start2 < end1) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return end2 > start1 && end2 < end1;
|
||||
}
|
||||
|
||||
/**
|
||||
* determines if two different matches have complete overlap with each other
|
||||
*
|
||||
* @param {number} start1 start position of existing match
|
||||
* @param {number} end1 end position of existing match
|
||||
* @param {number} start2 start position of new match
|
||||
* @param {number} end2 end position of new match
|
||||
* @returns {boolean}
|
||||
*/
|
||||
function _hasCompleteOverlap(start1, end1, start2, end2) {
|
||||
|
||||
// if the starting and end positions are exactly the same
|
||||
// then the first one should stay and this one should be ignored
|
||||
if (start2 == start1 && end2 == end1) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return start2 <= start1 && end2 >= end1;
|
||||
}
|
||||
|
||||
/**
|
||||
* determines if the match passed in falls inside of an existing match
|
||||
* this prevents a regex pattern from matching inside of a bigger pattern
|
||||
*
|
||||
* @param {number} start - start position of new match
|
||||
* @param {number} end - end position of new match
|
||||
* @returns {boolean}
|
||||
*/
|
||||
function _matchIsInsideOtherMatch(start, end) {
|
||||
for (var key in replacement_positions[CURRENT_LEVEL]) {
|
||||
key = parseInt(key, 10);
|
||||
|
||||
// if this block completely overlaps with another block
|
||||
// then we should remove the other block and return false
|
||||
if (_hasCompleteOverlap(key, replacement_positions[CURRENT_LEVEL][key], start, end)) {
|
||||
delete replacement_positions[CURRENT_LEVEL][key];
|
||||
delete replacements[CURRENT_LEVEL][key];
|
||||
}
|
||||
|
||||
if (_intersects(key, replacement_positions[CURRENT_LEVEL][key], start, end)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* takes a string of code and wraps it in a span tag based on the name
|
||||
*
|
||||
* @param {string} name name of the pattern (ie keyword.regex)
|
||||
* @param {string} code block of code to wrap
|
||||
* @returns {string}
|
||||
*/
|
||||
function _wrapCodeInSpan(name, code) {
|
||||
return '<span class="' + name.replace(/\./g, ' ') + (global_class ? ' ' + global_class : '') + '">' + code + '</span>';
|
||||
}
|
||||
|
||||
/**
|
||||
* finds out the position of group match for a regular expression
|
||||
*
|
||||
* @see http://stackoverflow.com/questions/1985594/how-to-find-index-of-groups-in-match
|
||||
*
|
||||
* @param {Object} match
|
||||
* @param {number} group_number
|
||||
* @returns {number}
|
||||
*/
|
||||
function _indexOfGroup(match, group_number) {
|
||||
var index = 0,
|
||||
i;
|
||||
|
||||
for (i = 1; i < group_number; ++i) {
|
||||
if (match[i]) {
|
||||
index += match[i].length;
|
||||
}
|
||||
}
|
||||
|
||||
return index;
|
||||
}
|
||||
|
||||
/**
|
||||
* matches a regex pattern against a block of code
|
||||
* finds all matches that should be processed and stores the positions
|
||||
* of where they should be replaced within the string
|
||||
*
|
||||
* this is where pretty much all the work is done but it should not
|
||||
* be called directly
|
||||
*
|
||||
* @param {RegExp} pattern
|
||||
* @param {string} code
|
||||
* @returns void
|
||||
*/
|
||||
function _processPattern(regex, pattern, code, callback)
|
||||
{
|
||||
var match = regex.exec(code);
|
||||
|
||||
if (!match) {
|
||||
return callback();
|
||||
}
|
||||
|
||||
++match_counter;
|
||||
|
||||
// treat match 0 the same way as name
|
||||
if (!pattern['name'] && typeof pattern['matches'][0] == 'string') {
|
||||
pattern['name'] = pattern['matches'][0];
|
||||
delete pattern['matches'][0];
|
||||
}
|
||||
|
||||
var replacement = match[0],
|
||||
start_pos = match.index,
|
||||
end_pos = match[0].length + start_pos,
|
||||
|
||||
/**
|
||||
* callback to process the next match of this pattern
|
||||
*/
|
||||
processNext = function() {
|
||||
var nextCall = function() {
|
||||
_processPattern(regex, pattern, code, callback);
|
||||
};
|
||||
|
||||
// every 50 items we process let's call set timeout
|
||||
// to let the ui breathe a little
|
||||
return match_counter % 50 > 0 ? nextCall() : setTimeout(nextCall, 0);
|
||||
};
|
||||
|
||||
// if this is not a child match and it falls inside of another
|
||||
// match that already happened we should skip it and continue processing
|
||||
if (_matchIsInsideOtherMatch(start_pos, end_pos)) {
|
||||
return processNext();
|
||||
}
|
||||
|
||||
/**
|
||||
* callback for when a match was successfully processed
|
||||
*
|
||||
* @param {string} replacement
|
||||
* @returns void
|
||||
*/
|
||||
var onMatchSuccess = function(replacement) {
|
||||
// if this match has a name then wrap it in a span tag
|
||||
if (pattern['name']) {
|
||||
replacement = _wrapCodeInSpan(pattern['name'], replacement);
|
||||
}
|
||||
|
||||
// console.log('LEVEL', CURRENT_LEVEL, 'replace', match[0], 'with', replacement, 'at position', start_pos, 'to', end_pos);
|
||||
|
||||
// store what needs to be replaced with what at this position
|
||||
if (!replacements[CURRENT_LEVEL]) {
|
||||
replacements[CURRENT_LEVEL] = {};
|
||||
replacement_positions[CURRENT_LEVEL] = {};
|
||||
}
|
||||
|
||||
replacements[CURRENT_LEVEL][start_pos] = {
|
||||
'replace': match[0],
|
||||
'with': replacement
|
||||
};
|
||||
|
||||
// store the range of this match so we can use it for comparisons
|
||||
// with other matches later
|
||||
replacement_positions[CURRENT_LEVEL][start_pos] = end_pos;
|
||||
|
||||
// process the next match
|
||||
processNext();
|
||||
},
|
||||
|
||||
// if this pattern has sub matches for different groups in the regex
|
||||
// then we should process them one at a time by rerunning them through
|
||||
// this function to generate the new replacement
|
||||
//
|
||||
// we run through them backwards because the match position of earlier
|
||||
// matches will not change depending on what gets replaced in later
|
||||
// matches
|
||||
group_keys = keys(pattern['matches']),
|
||||
|
||||
/**
|
||||
* callback for processing a sub group
|
||||
*
|
||||
* @param {number} i
|
||||
* @param {Array} group_keys
|
||||
* @param {Function} callback
|
||||
*/
|
||||
processGroup = function(i, group_keys, callback) {
|
||||
if (i >= group_keys.length) {
|
||||
return callback(replacement);
|
||||
}
|
||||
|
||||
var processNextGroup = function() {
|
||||
processGroup(++i, group_keys, callback);
|
||||
},
|
||||
block = match[group_keys[i]];
|
||||
|
||||
// if there is no match here then move on
|
||||
if (!block) {
|
||||
return processNextGroup();
|
||||
}
|
||||
|
||||
var group = pattern['matches'][group_keys[i]],
|
||||
language = group['language'],
|
||||
|
||||
/**
|
||||
* process group is what group we should use to actually process
|
||||
* this match group
|
||||
*
|
||||
* for example if the subgroup pattern looks like this
|
||||
* 2: {
|
||||
* 'name': 'keyword',
|
||||
* 'pattern': /true/g
|
||||
* }
|
||||
*
|
||||
* then we use that as is, but if it looks like this
|
||||
*
|
||||
* 2: {
|
||||
* 'name': 'keyword',
|
||||
* 'matches': {
|
||||
* 'name': 'special',
|
||||
* 'pattern': /whatever/g
|
||||
* }
|
||||
* }
|
||||
*
|
||||
* we treat the 'matches' part as the pattern and keep
|
||||
* the name around to wrap it with later
|
||||
*/
|
||||
process_group = group['name'] && group['matches'] ? group['matches'] : group,
|
||||
|
||||
/**
|
||||
* takes the code block matched at this group, replaces it
|
||||
* with the highlighted block, and optionally wraps it with
|
||||
* a span with a name
|
||||
*
|
||||
* @param {string} block
|
||||
* @param {string} replace_block
|
||||
* @param {string|null} match_name
|
||||
*/
|
||||
_replaceAndContinue = function(block, replace_block, match_name) {
|
||||
replacement = _replaceAtPosition(_indexOfGroup(match, group_keys[i]), block, match_name ? _wrapCodeInSpan(match_name, replace_block) : replace_block, replacement);
|
||||
processNextGroup();
|
||||
};
|
||||
|
||||
// if this is a sublanguage go and process the block using that language
|
||||
if (language) {
|
||||
return _highlightBlockForLanguage(block, language, function(code) {
|
||||
_replaceAndContinue(block, code);
|
||||
});
|
||||
}
|
||||
|
||||
// if this is a string then this match is directly mapped to selector
|
||||
// so all we have to do is wrap it in a span and continue
|
||||
if (typeof group === 'string') {
|
||||
return _replaceAndContinue(block, block, group);
|
||||
}
|
||||
|
||||
// the process group can be a single pattern or an array of patterns
|
||||
// _processCodeWithPatterns always expects an array so we convert it here
|
||||
_processCodeWithPatterns(block, process_group.length ? process_group : [process_group], function(code) {
|
||||
_replaceAndContinue(block, code, group['matches'] ? group['name'] : 0);
|
||||
});
|
||||
};
|
||||
|
||||
processGroup(0, group_keys, onMatchSuccess);
|
||||
}
|
||||
|
||||
/**
|
||||
* should a language bypass the default patterns?
|
||||
*
|
||||
* if you call Rainbow.extend() and pass true as the third argument
|
||||
* it will bypass the defaults
|
||||
*/
|
||||
function _bypassDefaultPatterns(language)
|
||||
{
|
||||
return bypass_defaults[language];
|
||||
}
|
||||
|
||||
/**
|
||||
* returns a list of regex patterns for this language
|
||||
*
|
||||
* @param {string} language
|
||||
* @returns {Array}
|
||||
*/
|
||||
function _getPatternsForLanguage(language) {
|
||||
var patterns = language_patterns[language] || [],
|
||||
default_patterns = language_patterns[DEFAULT_LANGUAGE] || [];
|
||||
|
||||
return _bypassDefaultPatterns(language) ? patterns : patterns.concat(default_patterns);
|
||||
}
|
||||
|
||||
/**
|
||||
* substring replace call to replace part of a string at a certain position
|
||||
*
|
||||
* @param {number} position the position where the replacement should happen
|
||||
* @param {string} replace the text we want to replace
|
||||
* @param {string} replace_with the text we want to replace it with
|
||||
* @param {string} code the code we are doing the replacing in
|
||||
* @returns {string}
|
||||
*/
|
||||
function _replaceAtPosition(position, replace, replace_with, code) {
|
||||
var sub_string = code.substr(position);
|
||||
return code.substr(0, position) + sub_string.replace(replace, replace_with);
|
||||
}
|
||||
|
||||
/**
|
||||
* sorts an object by index descending
|
||||
*
|
||||
* @param {Object} object
|
||||
* @return {Array}
|
||||
*/
|
||||
function keys(object) {
|
||||
var locations = [],
|
||||
replacement,
|
||||
pos;
|
||||
|
||||
for(var location in object) {
|
||||
if (object.hasOwnProperty(location)) {
|
||||
locations.push(location);
|
||||
}
|
||||
}
|
||||
|
||||
// numeric descending
|
||||
return locations.sort(function(a, b) {
|
||||
return b - a;
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* processes a block of code using specified patterns
|
||||
*
|
||||
* @param {string} code
|
||||
* @param {Array} patterns
|
||||
* @returns void
|
||||
*/
|
||||
function _processCodeWithPatterns(code, patterns, callback)
|
||||
{
|
||||
// we have to increase the level here so that the
|
||||
// replacements will not conflict with each other when
|
||||
// processing sub blocks of code
|
||||
++CURRENT_LEVEL;
|
||||
|
||||
// patterns are processed one at a time through this function
|
||||
function _workOnPatterns(patterns, i)
|
||||
{
|
||||
// still have patterns to process, keep going
|
||||
if (i < patterns.length) {
|
||||
return _processPattern(patterns[i]['pattern'], patterns[i], code, function() {
|
||||
_workOnPatterns(patterns, ++i);
|
||||
});
|
||||
}
|
||||
|
||||
// we are done processing the patterns
|
||||
// process the replacements and update the DOM
|
||||
_processReplacements(code, function(code) {
|
||||
|
||||
// when we are done processing replacements
|
||||
// we are done at this level so we can go back down
|
||||
delete replacements[CURRENT_LEVEL];
|
||||
delete replacement_positions[CURRENT_LEVEL];
|
||||
--CURRENT_LEVEL;
|
||||
callback(code);
|
||||
});
|
||||
}
|
||||
|
||||
_workOnPatterns(patterns, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* process replacements in the string of code to actually update the markup
|
||||
*
|
||||
* @param {string} code the code to process replacements in
|
||||
* @param {Function} onComplete what to do when we are done processing
|
||||
* @returns void
|
||||
*/
|
||||
function _processReplacements(code, onComplete) {
|
||||
|
||||
/**
|
||||
* processes a single replacement
|
||||
*
|
||||
* @param {string} code
|
||||
* @param {Array} positions
|
||||
* @param {number} i
|
||||
* @param {Function} onComplete
|
||||
* @returns void
|
||||
*/
|
||||
function _processReplacement(code, positions, i, onComplete) {
|
||||
if (i < positions.length) {
|
||||
++replacement_counter;
|
||||
var pos = positions[i],
|
||||
replacement = replacements[CURRENT_LEVEL][pos];
|
||||
code = _replaceAtPosition(pos, replacement['replace'], replacement['with'], code);
|
||||
|
||||
// process next function
|
||||
var next = function() {
|
||||
_processReplacement(code, positions, ++i, onComplete);
|
||||
};
|
||||
|
||||
// use a timeout every 250 to not freeze up the UI
|
||||
return replacement_counter % 250 > 0 ? next() : setTimeout(next, 0);
|
||||
}
|
||||
|
||||
onComplete(code);
|
||||
}
|
||||
|
||||
var string_positions = keys(replacements[CURRENT_LEVEL]);
|
||||
_processReplacement(code, string_positions, 0, onComplete);
|
||||
}
|
||||
|
||||
/**
|
||||
* takes a string of code and highlights it according to the language specified
|
||||
*
|
||||
* @param {string} code
|
||||
* @param {string} language
|
||||
* @param {Function} onComplete
|
||||
* @returns void
|
||||
*/
|
||||
function _highlightBlockForLanguage(code, language, onComplete) {
|
||||
var patterns = _getPatternsForLanguage(language);
|
||||
_processCodeWithPatterns(_htmlEntities(code), patterns, onComplete);
|
||||
}
|
||||
|
||||
/**
|
||||
* highlight an individual code block
|
||||
*
|
||||
* @param {Array} code_blocks
|
||||
* @param {number} i
|
||||
* @returns void
|
||||
*/
|
||||
function _highlightCodeBlock(code_blocks, i, onComplete) {
|
||||
if (i < code_blocks.length) {
|
||||
var block = code_blocks[i],
|
||||
language = _getLanguageForBlock(block);
|
||||
|
||||
if (!_hasClass(block, 'rainbow') && language) {
|
||||
language = language.toLowerCase();
|
||||
|
||||
_addClass(block, 'rainbow');
|
||||
|
||||
return _highlightBlockForLanguage(block.innerHTML, language, function(code) {
|
||||
block.innerHTML = code;
|
||||
|
||||
// reset the replacement arrays
|
||||
replacements = {};
|
||||
replacement_positions = {};
|
||||
|
||||
// if you have a listener attached tell it that this block is now highlighted
|
||||
if (onHighlight) {
|
||||
onHighlight(block, language);
|
||||
}
|
||||
|
||||
// process the next block
|
||||
setTimeout(function() {
|
||||
_highlightCodeBlock(code_blocks, ++i, onComplete);
|
||||
}, 0);
|
||||
});
|
||||
}
|
||||
return _highlightCodeBlock(code_blocks, ++i, onComplete);
|
||||
}
|
||||
|
||||
if (onComplete) {
|
||||
onComplete();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* start highlighting all the code blocks
|
||||
*
|
||||
* @returns void
|
||||
*/
|
||||
function _highlight(node, onComplete) {
|
||||
|
||||
// the first argument can be an Event or a DOM Element
|
||||
// I was originally checking instanceof Event but that makes it break
|
||||
// when using mootools
|
||||
//
|
||||
// @see https://github.com/ccampbell/rainbow/issues/32
|
||||
//
|
||||
node = node && typeof node.getElementsByTagName == 'function' ? node : document;
|
||||
|
||||
var pre_blocks = node.getElementsByTagName('pre'),
|
||||
code_blocks = node.getElementsByTagName('code'),
|
||||
i,
|
||||
final_blocks = [];
|
||||
|
||||
// @see http://stackoverflow.com/questions/2735067/how-to-convert-a-dom-node-list-to-an-array-in-javascript
|
||||
// we are going to process all <code> blocks
|
||||
for (i = 0; i < code_blocks.length; ++i) {
|
||||
final_blocks.push(code_blocks[i]);
|
||||
}
|
||||
|
||||
// loop through the pre blocks to see which ones we should add
|
||||
for (i = 0; i < pre_blocks.length; ++i) {
|
||||
|
||||
// if the pre block has no code blocks then process it directly
|
||||
if (!pre_blocks[i].getElementsByTagName('code').length) {
|
||||
final_blocks.push(pre_blocks[i]);
|
||||
}
|
||||
}
|
||||
|
||||
_highlightCodeBlock(final_blocks, 0, onComplete);
|
||||
}
|
||||
|
||||
/**
|
||||
* public methods
|
||||
*/
|
||||
return {
|
||||
|
||||
/**
|
||||
* extends the language pattern matches
|
||||
*
|
||||
* @param {*} language name of language
|
||||
* @param {*} patterns array of patterns to add on
|
||||
* @param {boolean|null} bypass if true this will bypass the default language patterns
|
||||
*/
|
||||
extend: function(language, patterns, bypass) {
|
||||
|
||||
// if there is only one argument then we assume that we want to
|
||||
// extend the default language rules
|
||||
if (arguments.length == 1) {
|
||||
patterns = language;
|
||||
language = DEFAULT_LANGUAGE;
|
||||
}
|
||||
|
||||
bypass_defaults[language] = bypass;
|
||||
language_patterns[language] = patterns.concat(language_patterns[language] || []);
|
||||
},
|
||||
|
||||
/**
|
||||
* call back to let you do stuff in your app after a piece of code has been highlighted
|
||||
*
|
||||
* @param {Function} callback
|
||||
*/
|
||||
onHighlight: function(callback) {
|
||||
onHighlight = callback;
|
||||
},
|
||||
|
||||
/**
|
||||
* method to set a global class that will be applied to all spans
|
||||
*
|
||||
* @param {string} class_name
|
||||
*/
|
||||
addClass: function(class_name) {
|
||||
global_class = class_name;
|
||||
},
|
||||
|
||||
/**
|
||||
* starts the magic rainbow
|
||||
*
|
||||
* @returns void
|
||||
*/
|
||||
color: function() {
|
||||
|
||||
// if you want to straight up highlight a string you can pass the string of code,
|
||||
// the language, and a callback function
|
||||
if (typeof arguments[0] == 'string') {
|
||||
return _highlightBlockForLanguage(arguments[0], arguments[1], arguments[2]);
|
||||
}
|
||||
|
||||
// if you pass a callback function then we rerun the color function
|
||||
// on all the code and call the callback function on complete
|
||||
if (typeof arguments[0] == 'function') {
|
||||
return _highlight(0, arguments[0]);
|
||||
}
|
||||
|
||||
// otherwise we use whatever node you passed in with an optional
|
||||
// callback function as the second parameter
|
||||
_highlight(arguments[0], arguments[1]);
|
||||
}
|
||||
};
|
||||
}) ();
|
||||
|
||||
/**
|
||||
* adds event listener to start highlighting
|
||||
*/
|
||||
(function() {
|
||||
if (window.addEventListener) {
|
||||
return window.addEventListener('load', Rainbow.color, false);
|
||||
}
|
||||
window.attachEvent('onload', Rainbow.color);
|
||||
}) ();
|
||||
|
||||
// When using Google closure compiler in advanced mode some methods
|
||||
// get renamed. This keeps a public reference to these methods so they can
|
||||
// still be referenced from outside this library.
|
||||
Rainbow["onHighlight"] = Rainbow.onHighlight;
|
||||
Rainbow["addClass"] = Rainbow.addClass;
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,97 @@
|
||||
/*
|
||||
* https://github.com/alicelieutier/smoothScroll/
|
||||
* A teeny tiny, standard compliant, smooth scroll script with ease-in-out effect and no jQuery (or any other dependancy, FWIW).
|
||||
* MIT License
|
||||
*/
|
||||
window.smoothScroll = (function(){
|
||||
// We do not want this script to be applied in browsers that do not support those
|
||||
// That means no smoothscroll on IE9 and below.
|
||||
if(document.querySelectorAll === void 0 || window.pageYOffset === void 0 || history.pushState === void 0) { return; }
|
||||
|
||||
// Get the top position of an element in the document
|
||||
var getTop = function(element) {
|
||||
// return value of html.getBoundingClientRect().top ... IE : 0, other browsers : -pageYOffset
|
||||
if(element.nodeName === 'HTML') return -window.pageYOffset
|
||||
return element.getBoundingClientRect().top + window.pageYOffset;
|
||||
}
|
||||
// ease in out function thanks to:
|
||||
// http://blog.greweb.fr/2012/02/bezier-curve-based-easing-functions-from-concept-to-implementation/
|
||||
var easeInOutCubic = function (t) { return t<.5 ? 4*t*t*t : (t-1)*(2*t-2)*(2*t-2)+1 }
|
||||
|
||||
// calculate the scroll position we should be in
|
||||
// given the start and end point of the scroll
|
||||
// the time elapsed from the beginning of the scroll
|
||||
// and the total duration of the scroll (default 500ms)
|
||||
var position = function(start, end, elapsed, duration) {
|
||||
if (elapsed > duration) return end;
|
||||
return start + (end - start) * easeInOutCubic(elapsed / duration); // <-- you can change the easing funtion there
|
||||
// return start + (end - start) * (elapsed / duration); // <-- this would give a linear scroll
|
||||
}
|
||||
|
||||
// we use requestAnimationFrame to be called by the browser before every repaint
|
||||
// if the first argument is an element then scroll to the top of this element
|
||||
// if the first argument is numeric then scroll to this location
|
||||
// if the callback exist, it is called when the scrolling is finished
|
||||
var smoothScroll = function(el, duration, callback){
|
||||
duration = duration || 500;
|
||||
var start = window.pageYOffset;
|
||||
|
||||
if (typeof el === 'number') {
|
||||
var end = parseInt(el);
|
||||
} else {
|
||||
var end = getTop(el);
|
||||
}
|
||||
|
||||
var clock = Date.now();
|
||||
var requestAnimationFrame = window.requestAnimationFrame ||
|
||||
window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame ||
|
||||
function(fn){window.setTimeout(fn, 15);};
|
||||
|
||||
var step = function(){
|
||||
var elapsed = Date.now() - clock;
|
||||
window.scroll(0, position(start, end, elapsed, duration));
|
||||
if (elapsed > duration) {
|
||||
if (typeof callback === 'function') {
|
||||
callback(el);
|
||||
}
|
||||
} else {
|
||||
requestAnimationFrame(step);
|
||||
}
|
||||
}
|
||||
step();
|
||||
}
|
||||
|
||||
var linkHandler = function(ev) {
|
||||
ev.preventDefault();
|
||||
|
||||
if (location.hash !== this.hash) {
|
||||
//NOTE(@ajoslin): Changed this line to stop $digest errors
|
||||
//window.history.pushState(null, null, this.hash)
|
||||
angular.element(document).injector().get('$location').hash(this.hash);
|
||||
}
|
||||
// using the history api to solve issue #1 - back doesn't work
|
||||
// most browser don't update :target when the history api is used:
|
||||
// THIS IS A BUG FROM THE BROWSERS.
|
||||
// change the scrolling duration in this call
|
||||
var targetEl = document.getElementById(this.hash.substring(1));
|
||||
if (targetEl) {
|
||||
smoothScroll(document.getElementById(this.hash.substring(1)), 500, function(el) {
|
||||
location.replace('#' + el.id)
|
||||
// this will cause the :target to be activated.
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// We look for all the internal links in the documents and attach the smoothscroll function
|
||||
document.addEventListener("DOMContentLoaded", function () {
|
||||
var internal = document.querySelectorAll('a[href^="#"]'), a;
|
||||
for(var i=internal.length; a=internal[--i];){
|
||||
a.addEventListener("click", linkHandler, false);
|
||||
}
|
||||
});
|
||||
|
||||
// return smoothscroll API
|
||||
return smoothScroll;
|
||||
|
||||
})();
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -1,21 +0,0 @@
|
||||
.bs-docs-social {
|
||||
margin-top: 1em;
|
||||
padding: 15px 0;
|
||||
text-align: center;
|
||||
background-color: rgba(245,245,245,0.3);
|
||||
border-top: 1px solid rgba(255,255,255,0.3);
|
||||
border-bottom: 1px solid rgba(221,221,221,0.3);
|
||||
}
|
||||
.bs-docs-social-buttons {
|
||||
position: absolute;
|
||||
top: 8px;
|
||||
margin-left: 0;
|
||||
margin-bottom: 0;
|
||||
padding-left: 0;
|
||||
list-style: none;
|
||||
}
|
||||
.bs-docs-social-buttons li {
|
||||
list-style: none;
|
||||
display: inline-block;
|
||||
line-height: 1;
|
||||
}
|
||||
+6563
File diff suppressed because one or more lines are too long
@@ -1,13 +0,0 @@
|
||||
<div class="btn-toolbar btn-group pull-right">
|
||||
<a class="btn btn-small btn-primary" href="https://github.com/angular-ui/bootstrap/tree/gh-pages">
|
||||
<i class="icon-download-alt icon-white"></i> Download <small>(<%= pkg.version%>)</small>
|
||||
</a>
|
||||
</div>
|
||||
<div class="margin: 10px;"></div>
|
||||
<ul class="nav pull-right bs-docs-social-buttons">
|
||||
<li>
|
||||
<iframe src="http://ghbtns.com/github-btn.html?user=angular-ui&repo=bootstrap&type=watch&count=true"
|
||||
allowtransparency="true" frameborder="0" scrolling="0" width="110" height="20"></iframe>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
.fa-svg-icon {
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
min-width: 1em;
|
||||
min-height: 1em;
|
||||
height: 100%;
|
||||
position: relative;
|
||||
top: -1px;
|
||||
}
|
||||
|
||||
.fa-svg-icon svg {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.fa-svg-icon svg g,
|
||||
.fa-svg-icon svg path {
|
||||
fill: currentColor;
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,6 @@
|
||||
/* Include this file in your html if you are using the CSP mode. */
|
||||
|
||||
.ng-animate.item:not(.left):not(.right) {
|
||||
-webkit-transition: 0s ease-in-out left;
|
||||
transition: 0s ease-in-out left
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,6 @@
|
||||
/* Include this file in your html if you are using the CSP mode. */
|
||||
|
||||
.ng-animate.item:not(.left):not(.right) {
|
||||
-webkit-transition: 0s ease-in-out left;
|
||||
transition: 0s ease-in-out left
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,6 @@
|
||||
/* Include this file in your html if you are using the CSP mode. */
|
||||
|
||||
.ng-animate.item:not(.left):not(.right) {
|
||||
-webkit-transition: 0s ease-in-out left;
|
||||
transition: 0s ease-in-out left
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,6 @@
|
||||
/* Include this file in your html if you are using the CSP mode. */
|
||||
|
||||
.ng-animate.item:not(.left):not(.right) {
|
||||
-webkit-transition: 0s ease-in-out left;
|
||||
transition: 0s ease-in-out left
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,6 @@
|
||||
/* Include this file in your html if you are using the CSP mode. */
|
||||
|
||||
.ng-animate.item:not(.left):not(.right) {
|
||||
-webkit-transition: 0s ease-in-out left;
|
||||
transition: 0s ease-in-out left
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,6 @@
|
||||
/* Include this file in your html if you are using the CSP mode. */
|
||||
|
||||
.ng-animate.item:not(.left):not(.right) {
|
||||
-webkit-transition: 0s ease-in-out left;
|
||||
transition: 0s ease-in-out left
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,6 @@
|
||||
/* Include this file in your html if you are using the CSP mode. */
|
||||
|
||||
.ng-animate.item:not(.left):not(.right) {
|
||||
-webkit-transition: 0s ease-in-out left;
|
||||
transition: 0s ease-in-out left
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,6 @@
|
||||
/* Include this file in your html if you are using the CSP mode. */
|
||||
|
||||
.ng-animate.item:not(.left):not(.right) {
|
||||
-webkit-transition: 0s ease-in-out left;
|
||||
transition: 0s ease-in-out left
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,6 @@
|
||||
/* Include this file in your html if you are using the CSP mode. */
|
||||
|
||||
.ng-animate.item:not(.left):not(.right) {
|
||||
-webkit-transition: 0s ease-in-out left;
|
||||
transition: 0s ease-in-out left
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,53 @@
|
||||
/* Include this file in your html if you are using the CSP mode. */
|
||||
|
||||
.ng-animate.item:not(.left):not(.right) {
|
||||
-webkit-transition: 0s ease-in-out left;
|
||||
transition: 0s ease-in-out left
|
||||
}
|
||||
.uib-tab > div {
|
||||
position: relative;
|
||||
display: block;
|
||||
padding: 10px 15px;
|
||||
outline: 0;
|
||||
color: #337ab7;
|
||||
}
|
||||
.uib-tab > div:focus,
|
||||
.uib-tab > div:hover {
|
||||
background-color: #eee;
|
||||
color: #23527c;
|
||||
}
|
||||
.uib-tab.disabled > div {
|
||||
color: #777;
|
||||
}
|
||||
.uib-tab.disabled > div:focus,
|
||||
.uib-tab.disabled > div:hover {
|
||||
color: #777;
|
||||
cursor: not-allowed;
|
||||
background-color: transparent;
|
||||
}
|
||||
.nav-tabs > .uib-tab > div {
|
||||
margin-right: 2px;
|
||||
line-height: 1.42857143;
|
||||
border: 1px solid transparent;
|
||||
border-radius: 4px 4px 0 0;
|
||||
}
|
||||
.nav-tabs > .uib-tab > div:hover {
|
||||
border-color: #eee #eee #ddd;
|
||||
}
|
||||
.nav-tabs > .uib-tab.active > div,
|
||||
.nav-tabs > .uib-tab.active > div:focus,
|
||||
.nav-tabs > .uib-tab.active > div:hover {
|
||||
color: #555;
|
||||
cursor: default;
|
||||
background-color: #fff;
|
||||
border-color: #ddd #ddd transparent #ddd;
|
||||
}
|
||||
.nav-pills > .uib-tab > div {
|
||||
border-radius: 4px;
|
||||
}
|
||||
.nav-pills > .uib-tab.active > div,
|
||||
.nav-pills > .uib-tab.active > div:focus,
|
||||
.nav-pills > .uib-tab.active > div:hover {
|
||||
color: #fff;
|
||||
background-color: #337ab7;
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,53 @@
|
||||
/* Include this file in your html if you are using the CSP mode. */
|
||||
|
||||
.ng-animate.item:not(.left):not(.right) {
|
||||
-webkit-transition: 0s ease-in-out left;
|
||||
transition: 0s ease-in-out left
|
||||
}
|
||||
.uib-tab > div {
|
||||
position: relative;
|
||||
display: block;
|
||||
padding: 10px 15px;
|
||||
outline: 0;
|
||||
color: #337ab7;
|
||||
}
|
||||
.uib-tab > div:focus,
|
||||
.uib-tab > div:hover {
|
||||
background-color: #eee;
|
||||
color: #23527c;
|
||||
}
|
||||
.uib-tab.disabled > div {
|
||||
color: #777;
|
||||
}
|
||||
.uib-tab.disabled > div:focus,
|
||||
.uib-tab.disabled > div:hover {
|
||||
color: #777;
|
||||
cursor: not-allowed;
|
||||
background-color: transparent;
|
||||
}
|
||||
.nav-tabs > .uib-tab > div {
|
||||
margin-right: 2px;
|
||||
line-height: 1.42857143;
|
||||
border: 1px solid transparent;
|
||||
border-radius: 4px 4px 0 0;
|
||||
}
|
||||
.nav-tabs > .uib-tab > div:hover {
|
||||
border-color: #eee #eee #ddd;
|
||||
}
|
||||
.nav-tabs > .uib-tab.active > div,
|
||||
.nav-tabs > .uib-tab.active > div:focus,
|
||||
.nav-tabs > .uib-tab.active > div:hover {
|
||||
color: #555;
|
||||
cursor: default;
|
||||
background-color: #fff;
|
||||
border-color: #ddd #ddd transparent #ddd;
|
||||
}
|
||||
.nav-pills > .uib-tab > div {
|
||||
border-radius: 4px;
|
||||
}
|
||||
.nav-pills > .uib-tab.active > div,
|
||||
.nav-pills > .uib-tab.active > div:focus,
|
||||
.nav-pills > .uib-tab.active > div:hover {
|
||||
color: #fff;
|
||||
background-color: #337ab7;
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,53 @@
|
||||
/* Include this file in your html if you are using the CSP mode. */
|
||||
|
||||
.ng-animate.item:not(.left):not(.right) {
|
||||
-webkit-transition: 0s ease-in-out left;
|
||||
transition: 0s ease-in-out left
|
||||
}
|
||||
.uib-tab > div {
|
||||
position: relative;
|
||||
display: block;
|
||||
padding: 10px 15px;
|
||||
outline: 0;
|
||||
color: #337ab7;
|
||||
}
|
||||
.uib-tab > div:focus,
|
||||
.uib-tab > div:hover {
|
||||
background-color: #eee;
|
||||
color: #23527c;
|
||||
}
|
||||
.uib-tab.disabled > div {
|
||||
color: #777;
|
||||
}
|
||||
.uib-tab.disabled > div:focus,
|
||||
.uib-tab.disabled > div:hover {
|
||||
color: #777;
|
||||
cursor: not-allowed;
|
||||
background-color: transparent;
|
||||
}
|
||||
.nav-tabs > .uib-tab > div {
|
||||
margin-right: 2px;
|
||||
line-height: 1.42857143;
|
||||
border: 1px solid transparent;
|
||||
border-radius: 4px 4px 0 0;
|
||||
}
|
||||
.nav-tabs > .uib-tab > div:hover {
|
||||
border-color: #eee #eee #ddd;
|
||||
}
|
||||
.nav-tabs > .uib-tab.active > div,
|
||||
.nav-tabs > .uib-tab.active > div:focus,
|
||||
.nav-tabs > .uib-tab.active > div:hover {
|
||||
color: #555;
|
||||
cursor: default;
|
||||
background-color: #fff;
|
||||
border-color: #ddd #ddd transparent #ddd;
|
||||
}
|
||||
.nav-pills > .uib-tab > div {
|
||||
border-radius: 4px;
|
||||
}
|
||||
.nav-pills > .uib-tab.active > div,
|
||||
.nav-pills > .uib-tab.active > div:focus,
|
||||
.nav-pills > .uib-tab.active > div:hover {
|
||||
color: #fff;
|
||||
background-color: #337ab7;
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,29 @@
|
||||
/* Include this file in your html if you are using the CSP mode. */
|
||||
|
||||
.ng-animate.item:not(.left):not(.right) {
|
||||
-webkit-transition: 0s ease-in-out left;
|
||||
transition: 0s ease-in-out left
|
||||
}
|
||||
.uib-datepicker .uib-title {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.uib-day button, .uib-month button, .uib-year button {
|
||||
min-width: 100%;
|
||||
}
|
||||
|
||||
.uib-datepicker-popup.dropdown-menu {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.uib-button-bar {
|
||||
padding: 10px 9px 2px;
|
||||
}
|
||||
|
||||
.uib-time input {
|
||||
width: 50px;
|
||||
}
|
||||
|
||||
[uib-typeahead-popup].dropdown-menu {
|
||||
display: block;
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,29 @@
|
||||
/* Include this file in your html if you are using the CSP mode. */
|
||||
|
||||
.ng-animate.item:not(.left):not(.right) {
|
||||
-webkit-transition: 0s ease-in-out left;
|
||||
transition: 0s ease-in-out left
|
||||
}
|
||||
.uib-datepicker .uib-title {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.uib-day button, .uib-month button, .uib-year button {
|
||||
min-width: 100%;
|
||||
}
|
||||
|
||||
.uib-datepicker-popup.dropdown-menu {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.uib-button-bar {
|
||||
padding: 10px 9px 2px;
|
||||
}
|
||||
|
||||
.uib-time input {
|
||||
width: 50px;
|
||||
}
|
||||
|
||||
[uib-typeahead-popup].dropdown-menu {
|
||||
display: block;
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,29 @@
|
||||
/* Include this file in your html if you are using the CSP mode. */
|
||||
|
||||
.ng-animate.item:not(.left):not(.right) {
|
||||
-webkit-transition: 0s ease-in-out left;
|
||||
transition: 0s ease-in-out left
|
||||
}
|
||||
.uib-datepicker .uib-title {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.uib-day button, .uib-month button, .uib-year button {
|
||||
min-width: 100%;
|
||||
}
|
||||
|
||||
.uib-datepicker-popup.dropdown-menu {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.uib-button-bar {
|
||||
padding: 10px 9px 2px;
|
||||
}
|
||||
|
||||
.uib-time input {
|
||||
width: 50px;
|
||||
}
|
||||
|
||||
[uib-typeahead-popup].dropdown-menu {
|
||||
display: block;
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,76 @@
|
||||
/* Include this file in your html if you are using the CSP mode. */
|
||||
|
||||
.ng-animate.item:not(.left):not(.right) {
|
||||
-webkit-transition: 0s ease-in-out left;
|
||||
transition: 0s ease-in-out left
|
||||
}
|
||||
.uib-position-measure {
|
||||
display: block !important;
|
||||
visibility: hidden !important;
|
||||
position: absolute !important;
|
||||
top: -9999px !important;
|
||||
left: -9999px !important;
|
||||
}
|
||||
|
||||
.uib-position-scrollbar-measure {
|
||||
position: absolute;
|
||||
top: -9999px;
|
||||
width: 50px;
|
||||
height: 50px;
|
||||
overflow: scroll;
|
||||
}
|
||||
.uib-datepicker .uib-title {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.uib-day button, .uib-month button, .uib-year button {
|
||||
min-width: 100%;
|
||||
}
|
||||
|
||||
.uib-datepicker-popup.dropdown-menu {
|
||||
display: block;
|
||||
float: none;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.uib-button-bar {
|
||||
padding: 10px 9px 2px;
|
||||
}
|
||||
|
||||
.uib-left, .uib-right {
|
||||
width: 100%
|
||||
}
|
||||
|
||||
[uib-tooltip-popup].tooltip.top-left > .tooltip-arrow,
|
||||
[uib-tooltip-popup].tooltip.top-right > .tooltip-arrow,
|
||||
[uib-tooltip-popup].tooltip.bottom-left > .tooltip-arrow,
|
||||
[uib-tooltip-popup].tooltip.bottom-right > .tooltip-arrow,
|
||||
[uib-tooltip-popup].tooltip.left-top > .tooltip-arrow,
|
||||
[uib-tooltip-popup].tooltip.left-bottom > .tooltip-arrow,
|
||||
[uib-tooltip-popup].tooltip.right-top > .tooltip-arrow,
|
||||
[uib-tooltip-popup].tooltip.right-bottom > .tooltip-arrow,
|
||||
[uib-popover-popup].popover.top-left > .arrow,
|
||||
[uib-popover-popup].popover.top-right > .arrow,
|
||||
[uib-popover-popup].popover.bottom-left > .arrow,
|
||||
[uib-popover-popup].popover.bottom-right > .arrow,
|
||||
[uib-popover-popup].popover.left-top > .arrow,
|
||||
[uib-popover-popup].popover.left-bottom > .arrow,
|
||||
[uib-popover-popup].popover.right-top > .arrow,
|
||||
[uib-popover-popup].popover.right-bottom > .arrow {
|
||||
top: auto;
|
||||
bottom: auto;
|
||||
left: auto;
|
||||
right: auto;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
[uib-popover-popup].popover {
|
||||
display: block !important;
|
||||
}
|
||||
.uib-time input {
|
||||
width: 50px;
|
||||
}
|
||||
|
||||
[uib-typeahead-popup].dropdown-menu {
|
||||
display: block;
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,77 @@
|
||||
/* Include this file in your html if you are using the CSP mode. */
|
||||
|
||||
.ng-animate.item:not(.left):not(.right) {
|
||||
-webkit-transition: 0s ease-in-out left;
|
||||
transition: 0s ease-in-out left
|
||||
}
|
||||
.uib-position-measure {
|
||||
display: block !important;
|
||||
visibility: hidden !important;
|
||||
position: absolute !important;
|
||||
top: -9999px !important;
|
||||
left: -9999px !important;
|
||||
}
|
||||
|
||||
.uib-position-scrollbar-measure {
|
||||
position: absolute;
|
||||
top: -9999px;
|
||||
width: 50px;
|
||||
height: 50px;
|
||||
overflow: scroll;
|
||||
}
|
||||
.uib-datepicker .uib-title {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.uib-day button, .uib-month button, .uib-year button {
|
||||
min-width: 100%;
|
||||
}
|
||||
|
||||
.uib-datepicker-popup.dropdown-menu {
|
||||
display: block;
|
||||
float: none;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.uib-button-bar {
|
||||
padding: 10px 9px 2px;
|
||||
}
|
||||
|
||||
.uib-left, .uib-right {
|
||||
width: 100%
|
||||
}
|
||||
|
||||
[uib-tooltip-popup].tooltip.top-left > .tooltip-arrow,
|
||||
[uib-tooltip-popup].tooltip.top-right > .tooltip-arrow,
|
||||
[uib-tooltip-popup].tooltip.bottom-left > .tooltip-arrow,
|
||||
[uib-tooltip-popup].tooltip.bottom-right > .tooltip-arrow,
|
||||
[uib-tooltip-popup].tooltip.left-top > .tooltip-arrow,
|
||||
[uib-tooltip-popup].tooltip.left-bottom > .tooltip-arrow,
|
||||
[uib-tooltip-popup].tooltip.right-top > .tooltip-arrow,
|
||||
[uib-tooltip-popup].tooltip.right-bottom > .tooltip-arrow,
|
||||
[uib-popover-popup].popover.top-left > .arrow,
|
||||
[uib-popover-popup].popover.top-right > .arrow,
|
||||
[uib-popover-popup].popover.bottom-left > .arrow,
|
||||
[uib-popover-popup].popover.bottom-right > .arrow,
|
||||
[uib-popover-popup].popover.left-top > .arrow,
|
||||
[uib-popover-popup].popover.left-bottom > .arrow,
|
||||
[uib-popover-popup].popover.right-top > .arrow,
|
||||
[uib-popover-popup].popover.right-bottom > .arrow {
|
||||
top: auto;
|
||||
bottom: auto;
|
||||
left: auto;
|
||||
right: auto;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
[uib-popover-popup].popover, [uib-popover-template-popup].popover {
|
||||
display: block !important;
|
||||
}
|
||||
|
||||
.uib-time input {
|
||||
width: 50px;
|
||||
}
|
||||
|
||||
[uib-typeahead-popup].dropdown-menu {
|
||||
display: block;
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,77 @@
|
||||
/* Include this file in your html if you are using the CSP mode. */
|
||||
|
||||
.ng-animate.item:not(.left):not(.right) {
|
||||
-webkit-transition: 0s ease-in-out left;
|
||||
transition: 0s ease-in-out left
|
||||
}
|
||||
.uib-position-measure {
|
||||
display: block !important;
|
||||
visibility: hidden !important;
|
||||
position: absolute !important;
|
||||
top: -9999px !important;
|
||||
left: -9999px !important;
|
||||
}
|
||||
|
||||
.uib-position-scrollbar-measure {
|
||||
position: absolute;
|
||||
top: -9999px;
|
||||
width: 50px;
|
||||
height: 50px;
|
||||
overflow: scroll;
|
||||
}
|
||||
.uib-datepicker .uib-title {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.uib-day button, .uib-month button, .uib-year button {
|
||||
min-width: 100%;
|
||||
}
|
||||
|
||||
.uib-datepicker-popup.dropdown-menu {
|
||||
display: block;
|
||||
float: none;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.uib-button-bar {
|
||||
padding: 10px 9px 2px;
|
||||
}
|
||||
|
||||
.uib-left, .uib-right {
|
||||
width: 100%
|
||||
}
|
||||
|
||||
[uib-tooltip-popup].tooltip.top-left > .tooltip-arrow,
|
||||
[uib-tooltip-popup].tooltip.top-right > .tooltip-arrow,
|
||||
[uib-tooltip-popup].tooltip.bottom-left > .tooltip-arrow,
|
||||
[uib-tooltip-popup].tooltip.bottom-right > .tooltip-arrow,
|
||||
[uib-tooltip-popup].tooltip.left-top > .tooltip-arrow,
|
||||
[uib-tooltip-popup].tooltip.left-bottom > .tooltip-arrow,
|
||||
[uib-tooltip-popup].tooltip.right-top > .tooltip-arrow,
|
||||
[uib-tooltip-popup].tooltip.right-bottom > .tooltip-arrow,
|
||||
[uib-popover-popup].popover.top-left > .arrow,
|
||||
[uib-popover-popup].popover.top-right > .arrow,
|
||||
[uib-popover-popup].popover.bottom-left > .arrow,
|
||||
[uib-popover-popup].popover.bottom-right > .arrow,
|
||||
[uib-popover-popup].popover.left-top > .arrow,
|
||||
[uib-popover-popup].popover.left-bottom > .arrow,
|
||||
[uib-popover-popup].popover.right-top > .arrow,
|
||||
[uib-popover-popup].popover.right-bottom > .arrow {
|
||||
top: auto;
|
||||
bottom: auto;
|
||||
left: auto;
|
||||
right: auto;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
[uib-popover-popup].popover, [uib-popover-template-popup].popover {
|
||||
display: block !important;
|
||||
}
|
||||
|
||||
.uib-time input {
|
||||
width: 50px;
|
||||
}
|
||||
|
||||
[uib-typeahead-popup].dropdown-menu {
|
||||
display: block;
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,77 @@
|
||||
/* Include this file in your html if you are using the CSP mode. */
|
||||
|
||||
.ng-animate.item:not(.left):not(.right) {
|
||||
-webkit-transition: 0s ease-in-out left;
|
||||
transition: 0s ease-in-out left
|
||||
}
|
||||
.uib-position-measure {
|
||||
display: block !important;
|
||||
visibility: hidden !important;
|
||||
position: absolute !important;
|
||||
top: -9999px !important;
|
||||
left: -9999px !important;
|
||||
}
|
||||
|
||||
.uib-position-scrollbar-measure {
|
||||
position: absolute;
|
||||
top: -9999px;
|
||||
width: 50px;
|
||||
height: 50px;
|
||||
overflow: scroll;
|
||||
}
|
||||
.uib-datepicker .uib-title {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.uib-day button, .uib-month button, .uib-year button {
|
||||
min-width: 100%;
|
||||
}
|
||||
|
||||
.uib-datepicker-popup.dropdown-menu {
|
||||
display: block;
|
||||
float: none;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.uib-button-bar {
|
||||
padding: 10px 9px 2px;
|
||||
}
|
||||
|
||||
.uib-left, .uib-right {
|
||||
width: 100%
|
||||
}
|
||||
|
||||
[uib-tooltip-popup].tooltip.top-left > .tooltip-arrow,
|
||||
[uib-tooltip-popup].tooltip.top-right > .tooltip-arrow,
|
||||
[uib-tooltip-popup].tooltip.bottom-left > .tooltip-arrow,
|
||||
[uib-tooltip-popup].tooltip.bottom-right > .tooltip-arrow,
|
||||
[uib-tooltip-popup].tooltip.left-top > .tooltip-arrow,
|
||||
[uib-tooltip-popup].tooltip.left-bottom > .tooltip-arrow,
|
||||
[uib-tooltip-popup].tooltip.right-top > .tooltip-arrow,
|
||||
[uib-tooltip-popup].tooltip.right-bottom > .tooltip-arrow,
|
||||
[uib-popover-popup].popover.top-left > .arrow,
|
||||
[uib-popover-popup].popover.top-right > .arrow,
|
||||
[uib-popover-popup].popover.bottom-left > .arrow,
|
||||
[uib-popover-popup].popover.bottom-right > .arrow,
|
||||
[uib-popover-popup].popover.left-top > .arrow,
|
||||
[uib-popover-popup].popover.left-bottom > .arrow,
|
||||
[uib-popover-popup].popover.right-top > .arrow,
|
||||
[uib-popover-popup].popover.right-bottom > .arrow {
|
||||
top: auto;
|
||||
bottom: auto;
|
||||
left: auto;
|
||||
right: auto;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
[uib-popover-popup].popover, [uib-popover-template-popup].popover {
|
||||
display: block !important;
|
||||
}
|
||||
|
||||
.uib-time input {
|
||||
width: 50px;
|
||||
}
|
||||
|
||||
[uib-typeahead-popup].dropdown-menu {
|
||||
display: block;
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,77 @@
|
||||
/* Include this file in your html if you are using the CSP mode. */
|
||||
|
||||
.ng-animate.item:not(.left):not(.right) {
|
||||
-webkit-transition: 0s ease-in-out left;
|
||||
transition: 0s ease-in-out left
|
||||
}
|
||||
.uib-position-measure {
|
||||
display: block !important;
|
||||
visibility: hidden !important;
|
||||
position: absolute !important;
|
||||
top: -9999px !important;
|
||||
left: -9999px !important;
|
||||
}
|
||||
|
||||
.uib-position-scrollbar-measure {
|
||||
position: absolute;
|
||||
top: -9999px;
|
||||
width: 50px;
|
||||
height: 50px;
|
||||
overflow: scroll;
|
||||
}
|
||||
.uib-datepicker .uib-title {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.uib-day button, .uib-month button, .uib-year button {
|
||||
min-width: 100%;
|
||||
}
|
||||
|
||||
.uib-datepicker-popup.dropdown-menu {
|
||||
display: block;
|
||||
float: none;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.uib-button-bar {
|
||||
padding: 10px 9px 2px;
|
||||
}
|
||||
|
||||
.uib-left, .uib-right {
|
||||
width: 100%
|
||||
}
|
||||
|
||||
[uib-tooltip-popup].tooltip.top-left > .tooltip-arrow,
|
||||
[uib-tooltip-popup].tooltip.top-right > .tooltip-arrow,
|
||||
[uib-tooltip-popup].tooltip.bottom-left > .tooltip-arrow,
|
||||
[uib-tooltip-popup].tooltip.bottom-right > .tooltip-arrow,
|
||||
[uib-tooltip-popup].tooltip.left-top > .tooltip-arrow,
|
||||
[uib-tooltip-popup].tooltip.left-bottom > .tooltip-arrow,
|
||||
[uib-tooltip-popup].tooltip.right-top > .tooltip-arrow,
|
||||
[uib-tooltip-popup].tooltip.right-bottom > .tooltip-arrow,
|
||||
[uib-popover-popup].popover.top-left > .arrow,
|
||||
[uib-popover-popup].popover.top-right > .arrow,
|
||||
[uib-popover-popup].popover.bottom-left > .arrow,
|
||||
[uib-popover-popup].popover.bottom-right > .arrow,
|
||||
[uib-popover-popup].popover.left-top > .arrow,
|
||||
[uib-popover-popup].popover.left-bottom > .arrow,
|
||||
[uib-popover-popup].popover.right-top > .arrow,
|
||||
[uib-popover-popup].popover.right-bottom > .arrow {
|
||||
top: auto;
|
||||
bottom: auto;
|
||||
left: auto;
|
||||
right: auto;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
[uib-popover-popup].popover, [uib-popover-template-popup].popover {
|
||||
display: block !important;
|
||||
}
|
||||
|
||||
.uib-time input {
|
||||
width: 50px;
|
||||
}
|
||||
|
||||
[uib-typeahead-popup].dropdown-menu {
|
||||
display: block;
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,111 @@
|
||||
/* Include this file in your html if you are using the CSP mode. */
|
||||
|
||||
.ng-animate.item:not(.left):not(.right) {
|
||||
-webkit-transition: 0s ease-in-out left;
|
||||
transition: 0s ease-in-out left
|
||||
}
|
||||
.uib-position-measure {
|
||||
display: block !important;
|
||||
visibility: hidden !important;
|
||||
position: absolute !important;
|
||||
top: -9999px !important;
|
||||
left: -9999px !important;
|
||||
}
|
||||
|
||||
.uib-position-scrollbar-measure {
|
||||
position: absolute;
|
||||
top: -9999px;
|
||||
width: 50px;
|
||||
height: 50px;
|
||||
overflow: scroll;
|
||||
}
|
||||
.uib-datepicker .uib-title {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.uib-day button, .uib-month button, .uib-year button {
|
||||
min-width: 100%;
|
||||
}
|
||||
|
||||
.uib-datepicker-popup.dropdown-menu {
|
||||
display: block;
|
||||
float: none;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.uib-button-bar {
|
||||
padding: 10px 9px 2px;
|
||||
}
|
||||
|
||||
.uib-left, .uib-right {
|
||||
width: 100%
|
||||
}
|
||||
|
||||
[uib-tooltip-popup].tooltip.top-left > .tooltip-arrow,
|
||||
[uib-tooltip-popup].tooltip.top-right > .tooltip-arrow,
|
||||
[uib-tooltip-popup].tooltip.bottom-left > .tooltip-arrow,
|
||||
[uib-tooltip-popup].tooltip.bottom-right > .tooltip-arrow,
|
||||
[uib-tooltip-popup].tooltip.left-top > .tooltip-arrow,
|
||||
[uib-tooltip-popup].tooltip.left-bottom > .tooltip-arrow,
|
||||
[uib-tooltip-popup].tooltip.right-top > .tooltip-arrow,
|
||||
[uib-tooltip-popup].tooltip.right-bottom > .tooltip-arrow,
|
||||
[uib-tooltip-html-popup].tooltip.top-left > .tooltip-arrow,
|
||||
[uib-tooltip-html-popup].tooltip.top-right > .tooltip-arrow,
|
||||
[uib-tooltip-html-popup].tooltip.bottom-left > .tooltip-arrow,
|
||||
[uib-tooltip-html-popup].tooltip.bottom-right > .tooltip-arrow,
|
||||
[uib-tooltip-html-popup].tooltip.left-top > .tooltip-arrow,
|
||||
[uib-tooltip-html-popup].tooltip.left-bottom > .tooltip-arrow,
|
||||
[uib-tooltip-html-popup].tooltip.right-top > .tooltip-arrow,
|
||||
[uib-tooltip-html-popup].tooltip.right-bottom > .tooltip-arrow,
|
||||
[uib-tooltip-template-popup].tooltip.top-left > .tooltip-arrow,
|
||||
[uib-tooltip-template-popup].tooltip.top-right > .tooltip-arrow,
|
||||
[uib-tooltip-template-popup].tooltip.bottom-left > .tooltip-arrow,
|
||||
[uib-tooltip-template-popup].tooltip.bottom-right > .tooltip-arrow,
|
||||
[uib-tooltip-template-popup].tooltip.left-top > .tooltip-arrow,
|
||||
[uib-tooltip-template-popup].tooltip.left-bottom > .tooltip-arrow,
|
||||
[uib-tooltip-template-popup].tooltip.right-top > .tooltip-arrow,
|
||||
[uib-tooltip-template-popup].tooltip.right-bottom > .tooltip-arrow,
|
||||
[uib-popover-popup].popover.top-left > .arrow,
|
||||
[uib-popover-popup].popover.top-right > .arrow,
|
||||
[uib-popover-popup].popover.bottom-left > .arrow,
|
||||
[uib-popover-popup].popover.bottom-right > .arrow,
|
||||
[uib-popover-popup].popover.left-top > .arrow,
|
||||
[uib-popover-popup].popover.left-bottom > .arrow,
|
||||
[uib-popover-popup].popover.right-top > .arrow,
|
||||
[uib-popover-popup].popover.right-bottom > .arrow,
|
||||
[uib-popover-html-popup].popover.top-left > .arrow,
|
||||
[uib-popover-html-popup].popover.top-right > .arrow,
|
||||
[uib-popover-html-popup].popover.bottom-left > .arrow,
|
||||
[uib-popover-html-popup].popover.bottom-right > .arrow,
|
||||
[uib-popover-html-popup].popover.left-top > .arrow,
|
||||
[uib-popover-html-popup].popover.left-bottom > .arrow,
|
||||
[uib-popover-html-popup].popover.right-top > .arrow,
|
||||
[uib-popover-html-popup].popover.right-bottom > .arrow,
|
||||
[uib-popover-template-popup].popover.top-left > .arrow,
|
||||
[uib-popover-template-popup].popover.top-right > .arrow,
|
||||
[uib-popover-template-popup].popover.bottom-left > .arrow,
|
||||
[uib-popover-template-popup].popover.bottom-right > .arrow,
|
||||
[uib-popover-template-popup].popover.left-top > .arrow,
|
||||
[uib-popover-template-popup].popover.left-bottom > .arrow,
|
||||
[uib-popover-template-popup].popover.right-top > .arrow,
|
||||
[uib-popover-template-popup].popover.right-bottom > .arrow {
|
||||
top: auto;
|
||||
bottom: auto;
|
||||
left: auto;
|
||||
right: auto;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
[uib-popover-popup].popover,
|
||||
[uib-popover-html-popup].popover,
|
||||
[uib-popover-template-popup].popover {
|
||||
display: block !important;
|
||||
}
|
||||
|
||||
.uib-time input {
|
||||
width: 50px;
|
||||
}
|
||||
|
||||
[uib-typeahead-popup].dropdown-menu {
|
||||
display: block;
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,115 @@
|
||||
/* Include this file in your html if you are using the CSP mode. */
|
||||
|
||||
.ng-animate.item:not(.left):not(.right) {
|
||||
-webkit-transition: 0s ease-in-out left;
|
||||
transition: 0s ease-in-out left
|
||||
}
|
||||
.uib-datepicker .uib-title {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.uib-day button, .uib-month button, .uib-year button {
|
||||
min-width: 100%;
|
||||
}
|
||||
|
||||
.uib-left, .uib-right {
|
||||
width: 100%
|
||||
}
|
||||
|
||||
.uib-position-measure {
|
||||
display: block !important;
|
||||
visibility: hidden !important;
|
||||
position: absolute !important;
|
||||
top: -9999px !important;
|
||||
left: -9999px !important;
|
||||
}
|
||||
|
||||
.uib-position-scrollbar-measure {
|
||||
position: absolute !important;
|
||||
top: -9999px !important;
|
||||
width: 50px !important;
|
||||
height: 50px !important;
|
||||
overflow: scroll !important;
|
||||
}
|
||||
|
||||
.uib-position-body-scrollbar-measure {
|
||||
overflow: scroll !important;
|
||||
}
|
||||
.uib-datepicker-popup.dropdown-menu {
|
||||
display: block;
|
||||
float: none;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.uib-button-bar {
|
||||
padding: 10px 9px 2px;
|
||||
}
|
||||
|
||||
[uib-tooltip-popup].tooltip.top-left > .tooltip-arrow,
|
||||
[uib-tooltip-popup].tooltip.top-right > .tooltip-arrow,
|
||||
[uib-tooltip-popup].tooltip.bottom-left > .tooltip-arrow,
|
||||
[uib-tooltip-popup].tooltip.bottom-right > .tooltip-arrow,
|
||||
[uib-tooltip-popup].tooltip.left-top > .tooltip-arrow,
|
||||
[uib-tooltip-popup].tooltip.left-bottom > .tooltip-arrow,
|
||||
[uib-tooltip-popup].tooltip.right-top > .tooltip-arrow,
|
||||
[uib-tooltip-popup].tooltip.right-bottom > .tooltip-arrow,
|
||||
[uib-tooltip-html-popup].tooltip.top-left > .tooltip-arrow,
|
||||
[uib-tooltip-html-popup].tooltip.top-right > .tooltip-arrow,
|
||||
[uib-tooltip-html-popup].tooltip.bottom-left > .tooltip-arrow,
|
||||
[uib-tooltip-html-popup].tooltip.bottom-right > .tooltip-arrow,
|
||||
[uib-tooltip-html-popup].tooltip.left-top > .tooltip-arrow,
|
||||
[uib-tooltip-html-popup].tooltip.left-bottom > .tooltip-arrow,
|
||||
[uib-tooltip-html-popup].tooltip.right-top > .tooltip-arrow,
|
||||
[uib-tooltip-html-popup].tooltip.right-bottom > .tooltip-arrow,
|
||||
[uib-tooltip-template-popup].tooltip.top-left > .tooltip-arrow,
|
||||
[uib-tooltip-template-popup].tooltip.top-right > .tooltip-arrow,
|
||||
[uib-tooltip-template-popup].tooltip.bottom-left > .tooltip-arrow,
|
||||
[uib-tooltip-template-popup].tooltip.bottom-right > .tooltip-arrow,
|
||||
[uib-tooltip-template-popup].tooltip.left-top > .tooltip-arrow,
|
||||
[uib-tooltip-template-popup].tooltip.left-bottom > .tooltip-arrow,
|
||||
[uib-tooltip-template-popup].tooltip.right-top > .tooltip-arrow,
|
||||
[uib-tooltip-template-popup].tooltip.right-bottom > .tooltip-arrow,
|
||||
[uib-popover-popup].popover.top-left > .arrow,
|
||||
[uib-popover-popup].popover.top-right > .arrow,
|
||||
[uib-popover-popup].popover.bottom-left > .arrow,
|
||||
[uib-popover-popup].popover.bottom-right > .arrow,
|
||||
[uib-popover-popup].popover.left-top > .arrow,
|
||||
[uib-popover-popup].popover.left-bottom > .arrow,
|
||||
[uib-popover-popup].popover.right-top > .arrow,
|
||||
[uib-popover-popup].popover.right-bottom > .arrow,
|
||||
[uib-popover-html-popup].popover.top-left > .arrow,
|
||||
[uib-popover-html-popup].popover.top-right > .arrow,
|
||||
[uib-popover-html-popup].popover.bottom-left > .arrow,
|
||||
[uib-popover-html-popup].popover.bottom-right > .arrow,
|
||||
[uib-popover-html-popup].popover.left-top > .arrow,
|
||||
[uib-popover-html-popup].popover.left-bottom > .arrow,
|
||||
[uib-popover-html-popup].popover.right-top > .arrow,
|
||||
[uib-popover-html-popup].popover.right-bottom > .arrow,
|
||||
[uib-popover-template-popup].popover.top-left > .arrow,
|
||||
[uib-popover-template-popup].popover.top-right > .arrow,
|
||||
[uib-popover-template-popup].popover.bottom-left > .arrow,
|
||||
[uib-popover-template-popup].popover.bottom-right > .arrow,
|
||||
[uib-popover-template-popup].popover.left-top > .arrow,
|
||||
[uib-popover-template-popup].popover.left-bottom > .arrow,
|
||||
[uib-popover-template-popup].popover.right-top > .arrow,
|
||||
[uib-popover-template-popup].popover.right-bottom > .arrow {
|
||||
top: auto;
|
||||
bottom: auto;
|
||||
left: auto;
|
||||
right: auto;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
[uib-popover-popup].popover,
|
||||
[uib-popover-html-popup].popover,
|
||||
[uib-popover-template-popup].popover {
|
||||
display: block !important;
|
||||
}
|
||||
|
||||
.uib-time input {
|
||||
width: 50px;
|
||||
}
|
||||
|
||||
[uib-typeahead-popup].dropdown-menu {
|
||||
display: block;
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,115 @@
|
||||
/* Include this file in your html if you are using the CSP mode. */
|
||||
|
||||
.ng-animate.item:not(.left):not(.right) {
|
||||
-webkit-transition: 0s ease-in-out left;
|
||||
transition: 0s ease-in-out left
|
||||
}
|
||||
.uib-datepicker .uib-title {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.uib-day button, .uib-month button, .uib-year button {
|
||||
min-width: 100%;
|
||||
}
|
||||
|
||||
.uib-left, .uib-right {
|
||||
width: 100%
|
||||
}
|
||||
|
||||
.uib-position-measure {
|
||||
display: block !important;
|
||||
visibility: hidden !important;
|
||||
position: absolute !important;
|
||||
top: -9999px !important;
|
||||
left: -9999px !important;
|
||||
}
|
||||
|
||||
.uib-position-scrollbar-measure {
|
||||
position: absolute !important;
|
||||
top: -9999px !important;
|
||||
width: 50px !important;
|
||||
height: 50px !important;
|
||||
overflow: scroll !important;
|
||||
}
|
||||
|
||||
.uib-position-body-scrollbar-measure {
|
||||
overflow: scroll !important;
|
||||
}
|
||||
.uib-datepicker-popup.dropdown-menu {
|
||||
display: block;
|
||||
float: none;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.uib-button-bar {
|
||||
padding: 10px 9px 2px;
|
||||
}
|
||||
|
||||
[uib-tooltip-popup].tooltip.top-left > .tooltip-arrow,
|
||||
[uib-tooltip-popup].tooltip.top-right > .tooltip-arrow,
|
||||
[uib-tooltip-popup].tooltip.bottom-left > .tooltip-arrow,
|
||||
[uib-tooltip-popup].tooltip.bottom-right > .tooltip-arrow,
|
||||
[uib-tooltip-popup].tooltip.left-top > .tooltip-arrow,
|
||||
[uib-tooltip-popup].tooltip.left-bottom > .tooltip-arrow,
|
||||
[uib-tooltip-popup].tooltip.right-top > .tooltip-arrow,
|
||||
[uib-tooltip-popup].tooltip.right-bottom > .tooltip-arrow,
|
||||
[uib-tooltip-html-popup].tooltip.top-left > .tooltip-arrow,
|
||||
[uib-tooltip-html-popup].tooltip.top-right > .tooltip-arrow,
|
||||
[uib-tooltip-html-popup].tooltip.bottom-left > .tooltip-arrow,
|
||||
[uib-tooltip-html-popup].tooltip.bottom-right > .tooltip-arrow,
|
||||
[uib-tooltip-html-popup].tooltip.left-top > .tooltip-arrow,
|
||||
[uib-tooltip-html-popup].tooltip.left-bottom > .tooltip-arrow,
|
||||
[uib-tooltip-html-popup].tooltip.right-top > .tooltip-arrow,
|
||||
[uib-tooltip-html-popup].tooltip.right-bottom > .tooltip-arrow,
|
||||
[uib-tooltip-template-popup].tooltip.top-left > .tooltip-arrow,
|
||||
[uib-tooltip-template-popup].tooltip.top-right > .tooltip-arrow,
|
||||
[uib-tooltip-template-popup].tooltip.bottom-left > .tooltip-arrow,
|
||||
[uib-tooltip-template-popup].tooltip.bottom-right > .tooltip-arrow,
|
||||
[uib-tooltip-template-popup].tooltip.left-top > .tooltip-arrow,
|
||||
[uib-tooltip-template-popup].tooltip.left-bottom > .tooltip-arrow,
|
||||
[uib-tooltip-template-popup].tooltip.right-top > .tooltip-arrow,
|
||||
[uib-tooltip-template-popup].tooltip.right-bottom > .tooltip-arrow,
|
||||
[uib-popover-popup].popover.top-left > .arrow,
|
||||
[uib-popover-popup].popover.top-right > .arrow,
|
||||
[uib-popover-popup].popover.bottom-left > .arrow,
|
||||
[uib-popover-popup].popover.bottom-right > .arrow,
|
||||
[uib-popover-popup].popover.left-top > .arrow,
|
||||
[uib-popover-popup].popover.left-bottom > .arrow,
|
||||
[uib-popover-popup].popover.right-top > .arrow,
|
||||
[uib-popover-popup].popover.right-bottom > .arrow,
|
||||
[uib-popover-html-popup].popover.top-left > .arrow,
|
||||
[uib-popover-html-popup].popover.top-right > .arrow,
|
||||
[uib-popover-html-popup].popover.bottom-left > .arrow,
|
||||
[uib-popover-html-popup].popover.bottom-right > .arrow,
|
||||
[uib-popover-html-popup].popover.left-top > .arrow,
|
||||
[uib-popover-html-popup].popover.left-bottom > .arrow,
|
||||
[uib-popover-html-popup].popover.right-top > .arrow,
|
||||
[uib-popover-html-popup].popover.right-bottom > .arrow,
|
||||
[uib-popover-template-popup].popover.top-left > .arrow,
|
||||
[uib-popover-template-popup].popover.top-right > .arrow,
|
||||
[uib-popover-template-popup].popover.bottom-left > .arrow,
|
||||
[uib-popover-template-popup].popover.bottom-right > .arrow,
|
||||
[uib-popover-template-popup].popover.left-top > .arrow,
|
||||
[uib-popover-template-popup].popover.left-bottom > .arrow,
|
||||
[uib-popover-template-popup].popover.right-top > .arrow,
|
||||
[uib-popover-template-popup].popover.right-bottom > .arrow {
|
||||
top: auto;
|
||||
bottom: auto;
|
||||
left: auto;
|
||||
right: auto;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
[uib-popover-popup].popover,
|
||||
[uib-popover-html-popup].popover,
|
||||
[uib-popover-template-popup].popover {
|
||||
display: block !important;
|
||||
}
|
||||
|
||||
.uib-time input {
|
||||
width: 50px;
|
||||
}
|
||||
|
||||
[uib-typeahead-popup].dropdown-menu {
|
||||
display: block;
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,115 @@
|
||||
/* Include this file in your html if you are using the CSP mode. */
|
||||
|
||||
.ng-animate.item:not(.left):not(.right) {
|
||||
-webkit-transition: 0s ease-in-out left;
|
||||
transition: 0s ease-in-out left
|
||||
}
|
||||
.uib-datepicker .uib-title {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.uib-day button, .uib-month button, .uib-year button {
|
||||
min-width: 100%;
|
||||
}
|
||||
|
||||
.uib-left, .uib-right {
|
||||
width: 100%
|
||||
}
|
||||
|
||||
.uib-position-measure {
|
||||
display: block !important;
|
||||
visibility: hidden !important;
|
||||
position: absolute !important;
|
||||
top: -9999px !important;
|
||||
left: -9999px !important;
|
||||
}
|
||||
|
||||
.uib-position-scrollbar-measure {
|
||||
position: absolute !important;
|
||||
top: -9999px !important;
|
||||
width: 50px !important;
|
||||
height: 50px !important;
|
||||
overflow: scroll !important;
|
||||
}
|
||||
|
||||
.uib-position-body-scrollbar-measure {
|
||||
overflow: scroll !important;
|
||||
}
|
||||
.uib-datepicker-popup.dropdown-menu {
|
||||
display: block;
|
||||
float: none;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.uib-button-bar {
|
||||
padding: 10px 9px 2px;
|
||||
}
|
||||
|
||||
[uib-tooltip-popup].tooltip.top-left > .tooltip-arrow,
|
||||
[uib-tooltip-popup].tooltip.top-right > .tooltip-arrow,
|
||||
[uib-tooltip-popup].tooltip.bottom-left > .tooltip-arrow,
|
||||
[uib-tooltip-popup].tooltip.bottom-right > .tooltip-arrow,
|
||||
[uib-tooltip-popup].tooltip.left-top > .tooltip-arrow,
|
||||
[uib-tooltip-popup].tooltip.left-bottom > .tooltip-arrow,
|
||||
[uib-tooltip-popup].tooltip.right-top > .tooltip-arrow,
|
||||
[uib-tooltip-popup].tooltip.right-bottom > .tooltip-arrow,
|
||||
[uib-tooltip-html-popup].tooltip.top-left > .tooltip-arrow,
|
||||
[uib-tooltip-html-popup].tooltip.top-right > .tooltip-arrow,
|
||||
[uib-tooltip-html-popup].tooltip.bottom-left > .tooltip-arrow,
|
||||
[uib-tooltip-html-popup].tooltip.bottom-right > .tooltip-arrow,
|
||||
[uib-tooltip-html-popup].tooltip.left-top > .tooltip-arrow,
|
||||
[uib-tooltip-html-popup].tooltip.left-bottom > .tooltip-arrow,
|
||||
[uib-tooltip-html-popup].tooltip.right-top > .tooltip-arrow,
|
||||
[uib-tooltip-html-popup].tooltip.right-bottom > .tooltip-arrow,
|
||||
[uib-tooltip-template-popup].tooltip.top-left > .tooltip-arrow,
|
||||
[uib-tooltip-template-popup].tooltip.top-right > .tooltip-arrow,
|
||||
[uib-tooltip-template-popup].tooltip.bottom-left > .tooltip-arrow,
|
||||
[uib-tooltip-template-popup].tooltip.bottom-right > .tooltip-arrow,
|
||||
[uib-tooltip-template-popup].tooltip.left-top > .tooltip-arrow,
|
||||
[uib-tooltip-template-popup].tooltip.left-bottom > .tooltip-arrow,
|
||||
[uib-tooltip-template-popup].tooltip.right-top > .tooltip-arrow,
|
||||
[uib-tooltip-template-popup].tooltip.right-bottom > .tooltip-arrow,
|
||||
[uib-popover-popup].popover.top-left > .arrow,
|
||||
[uib-popover-popup].popover.top-right > .arrow,
|
||||
[uib-popover-popup].popover.bottom-left > .arrow,
|
||||
[uib-popover-popup].popover.bottom-right > .arrow,
|
||||
[uib-popover-popup].popover.left-top > .arrow,
|
||||
[uib-popover-popup].popover.left-bottom > .arrow,
|
||||
[uib-popover-popup].popover.right-top > .arrow,
|
||||
[uib-popover-popup].popover.right-bottom > .arrow,
|
||||
[uib-popover-html-popup].popover.top-left > .arrow,
|
||||
[uib-popover-html-popup].popover.top-right > .arrow,
|
||||
[uib-popover-html-popup].popover.bottom-left > .arrow,
|
||||
[uib-popover-html-popup].popover.bottom-right > .arrow,
|
||||
[uib-popover-html-popup].popover.left-top > .arrow,
|
||||
[uib-popover-html-popup].popover.left-bottom > .arrow,
|
||||
[uib-popover-html-popup].popover.right-top > .arrow,
|
||||
[uib-popover-html-popup].popover.right-bottom > .arrow,
|
||||
[uib-popover-template-popup].popover.top-left > .arrow,
|
||||
[uib-popover-template-popup].popover.top-right > .arrow,
|
||||
[uib-popover-template-popup].popover.bottom-left > .arrow,
|
||||
[uib-popover-template-popup].popover.bottom-right > .arrow,
|
||||
[uib-popover-template-popup].popover.left-top > .arrow,
|
||||
[uib-popover-template-popup].popover.left-bottom > .arrow,
|
||||
[uib-popover-template-popup].popover.right-top > .arrow,
|
||||
[uib-popover-template-popup].popover.right-bottom > .arrow {
|
||||
top: auto;
|
||||
bottom: auto;
|
||||
left: auto;
|
||||
right: auto;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
[uib-popover-popup].popover,
|
||||
[uib-popover-html-popup].popover,
|
||||
[uib-popover-template-popup].popover {
|
||||
display: block !important;
|
||||
}
|
||||
|
||||
.uib-time input {
|
||||
width: 50px;
|
||||
}
|
||||
|
||||
[uib-typeahead-popup].dropdown-menu {
|
||||
display: block;
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user