Compare commits
1398 commits
4-0-stable
...
master
Author | SHA1 | Date | |
---|---|---|---|
|
7af16bbb0f | ||
|
b641cdd183 | ||
|
af657b0509 | ||
|
d3559e2556 | ||
|
08c6f5f604 | ||
|
8465238899 | ||
|
8cadeb6750 | ||
|
19ab03f461 | ||
|
0e9080e3dd | ||
|
65d9f8c16c | ||
|
76a4cbe464 | ||
|
8a6bf09ad0 | ||
|
f536c13355 | ||
|
3b88636d3c | ||
|
adccf3b499 | ||
|
f5dec306fd | ||
|
9a26e9a0d6 | ||
|
273741fbde | ||
|
541d899410 | ||
|
49b024f5f5 | ||
|
bb06e905ef | ||
|
51c167554c | ||
|
22817398e6 | ||
|
45c4804c8e | ||
|
7bb71bb088 | ||
|
458631c5ba | ||
|
bbfbff3add | ||
|
b53557aca6 | ||
|
da5b0c91dc | ||
|
685681e28a | ||
|
2a6b4f965e | ||
|
a0bca5b71d | ||
|
1ea385625b | ||
|
26323046fd | ||
|
9dc644635f | ||
|
154e54b46e | ||
|
d444a23ad6 | ||
|
676bce2ab9 | ||
|
71b0f8ea0b | ||
|
025e41576e | ||
|
a1b76c6c0a | ||
|
ddaedaef1a | ||
|
8fcdbaea71 | ||
|
15143a3b7b | ||
|
ea7e163660 | ||
|
abc47852a9 | ||
|
188e6a7a3f | ||
|
c918000bc2 | ||
|
6005ec894a | ||
|
4449ac3ad1 | ||
|
69e5a4bbeb | ||
|
1c5a393c95 | ||
|
52ae054447 | ||
|
11b89eb381 | ||
|
e998257dcf | ||
|
e29c9b7932 | ||
|
52b0ceb87a | ||
|
214768d3c5 | ||
|
66a1b88393 | ||
|
d8eefdccfc | ||
|
49f14f057d | ||
|
a18ce40943 | ||
|
4524ba20b8 | ||
|
f1b369b57d | ||
|
21191318ae | ||
|
583bfac5f5 | ||
|
5ad4be295f | ||
|
70947fedda | ||
|
618249734b | ||
|
63e6f055f1 | ||
|
2f585840db | ||
|
ecf3b2e471 | ||
|
c04120c1c5 | ||
|
f49a2ac0df | ||
|
9e616459e0 | ||
|
26bd6acadb | ||
|
11d52a1553 | ||
|
2b2d43ed2a | ||
|
9e24929f16 | ||
|
ed7a2136dd | ||
|
f230fe3dda | ||
|
0a044c7318 | ||
|
ba59912072 | ||
|
d55ade1686 | ||
|
5f14a6bcf8 | ||
|
3392f6c1f0 | ||
|
a31fe1a63f | ||
|
e3f1164248 | ||
|
5e6f45b07f | ||
|
3728c4904e | ||
|
ce0945efcd | ||
|
6abf58466f | ||
|
f93c4dc0d8 | ||
|
38ffb8220c | ||
|
b8502cbaee | ||
|
7ed0dc0185 | ||
|
58a1ed6dd3 | ||
|
da1cf5b9e7 | ||
|
c7bd99b040 | ||
|
5949e30243 | ||
|
e3e8b9fcb9 | ||
|
bfebf10850 | ||
|
4b3950456d | ||
|
cf6d4dc10c | ||
|
448152ab94 | ||
|
f7e630c452 | ||
|
83d3f7e052 | ||
|
7e93aaa6e6 | ||
|
77c802a4fe | ||
|
ec1a37875d | ||
|
242f6aa218 | ||
|
33e236c631 | ||
|
b49c1cb161 | ||
|
62ef763a80 | ||
|
90db28d6d0 | ||
|
7a4f70d79b | ||
|
8c9123943f | ||
|
795bb9cf65 | ||
|
9d92433a7c | ||
|
1496c01521 | ||
|
6752968bb5 | ||
|
6e78a1d7c8 | ||
|
53e54ddf8a | ||
|
d6ac38133c | ||
|
98bea4b1ff | ||
|
c610347cc1 | ||
|
d0df8a6ff8 | ||
|
e292d7c17b | ||
|
ff35b37fd2 | ||
|
1fb99264a9 | ||
|
850881a2ef | ||
|
6e15284844 | ||
|
afa9f6045a | ||
|
df46903dbe | ||
|
5f159d4bc0 | ||
|
4cc27fd9e1 | ||
|
38ea3939b2 | ||
|
29b0ac489b | ||
|
159cd0d742 | ||
|
b6641d6932 | ||
|
979dcdba95 | ||
|
0d56b1b07f | ||
|
c4f8d34b7d | ||
|
de3b181a69 | ||
|
77faffbda3 | ||
|
5cc5b74e8e | ||
|
e48fdde4f8 | ||
|
747706a83a | ||
|
78dd9a1481 | ||
|
c0da61c6d8 | ||
|
3869cfecc1 | ||
|
ccc8806758 | ||
|
ba1dbd39fb | ||
|
693dcce6bc | ||
|
de2c189ec1 | ||
|
84043e8e44 | ||
|
235605fc6d | ||
|
f5e001bd8c | ||
|
26606aa2ec | ||
|
5f9d654939 | ||
|
ad5ea14210 | ||
|
fec283889b | ||
|
c4299bb45a | ||
|
0103363191 | ||
|
d6338a8482 | ||
|
06c5389780 | ||
|
a1fe375e44 | ||
|
02f70851e4 | ||
|
f7ca6c5079 | ||
|
a19e3d898d | ||
|
916c61fc64 | ||
|
0df01283b0 | ||
|
f39d3b9a09 | ||
|
3cdac0b934 | ||
|
a163135cb5 | ||
|
a0cc38827f | ||
|
c71a7896b1 | ||
|
1f6b6b6c62 | ||
|
9d06074409 | ||
|
3d9bd6e3e7 | ||
|
51b1859e49 | ||
|
6347e9a60b | ||
|
72db22d385 | ||
|
316cf61965 | ||
|
d2ca549f41 | ||
|
67bda08cbe | ||
|
8300ae366c | ||
|
397c3da975 | ||
|
6880ace1fe | ||
|
a3cdaeef66 | ||
|
52d3fa191f | ||
|
fb4f171587 | ||
|
8ec01e0ba9 | ||
|
3b42c267a6 | ||
|
07a88d6699 | ||
|
0cbb235c3e | ||
|
4403f71f45 | ||
|
2465a4fdb2 | ||
|
70af962963 | ||
|
e6c2080214 | ||
|
063c4a069c | ||
|
ba4f0abf47 | ||
|
b1bd3f1252 | ||
|
124a5e270e | ||
|
e2ddf03c7e | ||
|
4d378f3c9a | ||
|
57f3409bcc | ||
|
f3dfd22993 | ||
|
5bf3a898ed | ||
|
175e09f167 | ||
|
351c952192 | ||
|
96a584211b | ||
|
1752c6dc8b | ||
|
e68955b4fc | ||
|
fb1c85061e | ||
|
54f40301ff | ||
|
306ea84e85 | ||
|
924643198c | ||
|
92de0faf6e | ||
|
a15fe61fb0 | ||
|
fc66c18349 | ||
|
e00e54b69c | ||
|
46fa92187d | ||
|
7587a3b2fc | ||
|
747292e2d3 | ||
|
b765a7958d | ||
|
112dc875ba | ||
|
ae06a0aab8 | ||
|
28e7d1a8bf | ||
|
6956f1f6e1 | ||
|
0c884498d2 | ||
|
0eccc08015 | ||
|
0f39610532 | ||
|
a0f2fbc250 | ||
|
aa5327a565 | ||
|
3513902396 | ||
|
d8ad01bb6e | ||
|
415bade302 | ||
|
77295b00b8 | ||
|
a96e0ec57e | ||
|
330fe4162e | ||
|
c367cc5ca6 | ||
|
cf848fd06d | ||
|
699c9cd499 | ||
|
9f3a593092 | ||
|
50c05b71b7 | ||
|
8403e99f28 | ||
|
fdfc408d87 | ||
|
d75cb57f9c | ||
|
3c050a29a7 | ||
|
94f0493999 | ||
|
71ab011a17 | ||
|
4f23c30ace | ||
|
86e23a584a | ||
|
2449bea2c4 | ||
|
21b1fee92c | ||
|
2a04341fba | ||
|
8cad1c9f4c | ||
|
7799b5bda6 | ||
|
35ad4fe7db | ||
|
39bbdc468f | ||
|
5bf88506ec | ||
|
2681a01bcf | ||
|
a685624d27 | ||
|
753ecbdcec | ||
|
38ecec4472 | ||
|
3df5253cc3 | ||
|
5c4e74acc3 | ||
|
d2b882fae5 | ||
|
da3bc14d80 | ||
|
a8b1f8c0e5 | ||
|
88d42c2e1c | ||
|
e84df44ea0 | ||
|
4673c85379 | ||
|
441d256188 | ||
|
f4f36f78dd | ||
|
cc1dd624aa | ||
|
2f6d289f32 | ||
|
0e57085795 | ||
|
ef05423f47 | ||
|
d69a37e0b7 | ||
|
6d25484417 | ||
|
7665b1de7e | ||
|
10f14136f5 | ||
|
bdcaf21ea7 | ||
|
7316055ac8 | ||
|
bf17d976a7 | ||
|
163908b393 | ||
|
1bba46d661 | ||
|
67e2cf8864 | ||
|
d1a5e370f3 | ||
|
963c212b68 | ||
|
496b7da7a0 | ||
|
1587caa3e4 | ||
|
fa9a8c3847 | ||
|
366bc32013 | ||
|
aecb37623e | ||
|
70fc1c5021 | ||
|
f1c24f40f9 | ||
|
6755d9908f | ||
|
fce22dfa2f | ||
|
147b93ee3e | ||
|
102695530b | ||
|
59b36f2032 | ||
|
804ae05c58 | ||
|
23f8f13ea4 | ||
|
072883fd08 | ||
|
b1e425511f | ||
|
7367f1cfd8 | ||
|
dc3590d619 | ||
|
197f9abedf | ||
|
11b57d979c | ||
|
b8f070f0d1 | ||
|
a29c883b5b | ||
|
f0aa54e0fb | ||
|
1479f17227 | ||
|
269a985948 | ||
|
96fbef60f9 | ||
|
473efc82b6 | ||
|
8812d9dee2 | ||
|
96c627edd8 | ||
|
ea9b3687db | ||
|
8e8372d5ce | ||
|
9c709be335 | ||
|
bc15713569 | ||
|
7fb2999c60 | ||
|
562de2a438 | ||
|
32f1eaaf0f | ||
|
a7055be1fd | ||
|
ecf53bb9e6 | ||
|
3374027e3a | ||
|
d2cec12632 | ||
|
c0d312bebe | ||
|
b7e5f4556b | ||
|
79cd1ca304 | ||
|
ccc712b198 | ||
|
9c2a6e2013 | ||
|
a32f85ac76 | ||
|
0d66fa89fc | ||
|
ca9098d898 | ||
|
8c5003cf75 | ||
|
e90277f9b5 | ||
|
7c408960ce | ||
|
52bf5b0e78 | ||
|
e03a018d28 | ||
|
1c2a7bc3cd | ||
|
784aa266bd | ||
|
2f7f46b256 | ||
|
3d662e5ccf | ||
|
39114d259c | ||
|
67a61c80d1 | ||
|
9dc46eee8e | ||
|
7b38a0de98 | ||
|
872cf404eb | ||
|
19e9c736e7 | ||
|
08f29c322e | ||
|
89ce02ea5d | ||
|
bcaf3c2c3e | ||
|
afee5303ff | ||
|
65d78253cb | ||
|
0384ef46b8 | ||
|
4c1538a946 | ||
|
4db5ec281e | ||
|
1dd712ddc2 | ||
|
40f1868194 | ||
|
e38e2ce29a | ||
|
83435e3d46 | ||
|
e7a67a5583 | ||
|
bb63459d53 | ||
|
6224ac0647 | ||
|
d03af842c5 | ||
|
47abdc10ca | ||
|
b5ef6d2268 | ||
|
cce35b6d05 | ||
|
61cfa2a7a6 | ||
|
f411772e33 | ||
|
61ffcab60f | ||
|
6beae84ea3 | ||
|
a99ad3d355 | ||
|
9ba21dd0c4 | ||
|
d5663e148f | ||
|
0c06b7fe20 | ||
|
3d45d300d8 | ||
|
2d2a235c06 | ||
|
da6b53a80e | ||
|
d5d9f1c515 | ||
|
c2ba868c9b | ||
|
f22488f726 | ||
|
f9200e118c | ||
|
c6d6bd6ab4 | ||
|
9bb35e7e59 | ||
|
3a09f02e11 | ||
|
a40541c42d | ||
|
bf06b3196d | ||
|
730e79e787 | ||
|
d54845a16a | ||
|
dc7507cfe7 | ||
|
533693ab41 | ||
|
24cc0faf2c | ||
|
c2082f4d78 | ||
|
0d9a6fe7b1 | ||
|
9a06dd4aa1 | ||
|
95b826071f | ||
|
152c6018b3 | ||
|
d199de0444 | ||
|
282b804556 | ||
|
512ab1b61a | ||
|
4635ad83e6 | ||
|
5a80a28a18 | ||
|
891dc550e0 | ||
|
06807885cf | ||
|
bb7490771e | ||
|
69159634d6 | ||
|
50620b7df8 | ||
|
6e908f1a36 | ||
|
5421f6b239 | ||
|
56d1cc5be5 | ||
|
5b4032d175 | ||
|
62562e4d0d | ||
|
bd3848c05b | ||
|
737a449795 | ||
|
907c334fe0 | ||
|
86da625f1d | ||
|
1c8c5c76b6 | ||
|
1c0c7bd6e3 | ||
|
dd653f62f3 | ||
|
1cfc2b6fc7 | ||
|
ef646928e4 | ||
|
c280c3ce6d | ||
|
87f555e1ef | ||
|
5c3cb47c16 | ||
|
a73e58f70b | ||
|
dbcf4144ee | ||
|
6aead7991f | ||
|
520f02259c | ||
|
153a4c142d | ||
|
5da7424f8d | ||
|
f8009a4858 | ||
|
22d6ce9873 | ||
|
0b52c461da | ||
|
7a0af60b51 | ||
|
547ae558d7 | ||
|
ed9543ff5d | ||
|
00ae65b108 | ||
|
1c517153a8 | ||
|
9a5c152c0e | ||
|
9c40002625 | ||
|
b1f58fcaea | ||
|
115454f3ed | ||
|
15b121d603 | ||
|
afed5cb614 | ||
|
e1f77b9be0 | ||
|
2f1f05d431 | ||
|
e8ff9ad2f2 | ||
|
d452ffc2d0 | ||
|
7ed0878654 | ||
|
6682689ab2 | ||
|
d3f042a6f2 | ||
|
6393ed6a41 | ||
|
dec15a4142 | ||
|
9c747fbb95 | ||
|
cf6d9a2222 | ||
|
9959669f1c | ||
|
3d4e32457b | ||
|
ba5373805a | ||
|
b4648c3b52 | ||
|
5f657203a1 | ||
|
9f45e01e84 | ||
|
1dab19d0d7 | ||
|
cff845784e | ||
|
8caccae454 | ||
|
b6d0f2852d | ||
|
ab98db73a3 | ||
|
bca72eac74 | ||
|
cf3cf3750e | ||
|
c6385e4135 | ||
|
c643b50dbd | ||
|
9b606ede00 | ||
|
9e8a818696 | ||
|
16c720fd96 | ||
|
f13600845d | ||
|
0afdf39dbc | ||
|
62de22c142 | ||
|
68a7ecdaaf | ||
|
999fc2391b | ||
|
e6d2e56961 | ||
|
8f621c9e06 | ||
|
fa6bf2c0f5 | ||
|
54d95f5897 | ||
|
e6b5f4ade9 | ||
|
51b547f842 | ||
|
aa3109b84a | ||
|
2a687dd562 | ||
|
00d0e57e85 | ||
|
14c2a37da2 | ||
|
38fce3deb0 | ||
|
c13f9adab8 | ||
|
46bbeabcde | ||
|
5f9bc743f5 | ||
|
70e1b3b1cb | ||
|
863d297ede | ||
|
2c71c2e1df | ||
|
60fdc04d03 | ||
|
b2a69262e1 | ||
|
aceb747bb8 | ||
|
92039dd677 | ||
|
d269d107d8 | ||
|
3bb342b961 | ||
|
7499f65014 | ||
|
33cd1ae9dc | ||
|
43d7596030 | ||
|
b3d648b4e8 | ||
|
3c5954b8c8 | ||
|
07f306d8af | ||
|
3b3add35fb | ||
|
e4b67d3b18 | ||
|
8d847b89d2 | ||
|
e96d77d3db | ||
|
f11e855bdb | ||
|
dffc2b8a8b | ||
|
873db06255 | ||
|
df63ab78a8 | ||
|
e119b0a0cb | ||
|
ac4a09e9cc | ||
|
4a55c69877 | ||
|
135418dcbf | ||
|
cba6e92436 | ||
|
0cf0487d65 | ||
|
4e5164338a | ||
|
2c5e4955c0 | ||
|
3b548d9251 | ||
|
aa36f07a02 | ||
|
d8a40d8c93 | ||
|
9c252a60c1 | ||
|
15c0e58a49 | ||
|
c08f19f275 | ||
|
f2cac135d5 | ||
|
5ac5510fd6 | ||
|
d7b667fee2 | ||
|
0cc95ef2f5 | ||
|
573942263a | ||
|
c9b1df1201 | ||
|
39fe9b644f | ||
|
8de19b259e | ||
|
5e69ad2cea | ||
|
db8baf2895 | ||
|
d0646babdb | ||
|
f17fe7fff2 | ||
|
7bab81b199 | ||
|
9611640e38 | ||
|
72d48376ab | ||
|
580a56b6ff | ||
|
262f80a68a | ||
|
3cf814ff9d | ||
|
e975ed836d | ||
|
c3659ef2e5 | ||
|
ed60b6fc90 | ||
|
3432c9aed7 | ||
|
46d353304a | ||
|
b0fb68c191 | ||
|
30180ed82e | ||
|
dbd9d8d4c3 | ||
|
9ee6c58acc | ||
|
ce9e35c295 | ||
|
292dffc228 | ||
|
99b6750e15 | ||
|
4a137651ec | ||
|
be817c53c6 | ||
|
cce14e0b01 | ||
|
5aeaf248f1 | ||
|
2d5096b678 | ||
|
37187336b1 | ||
|
c77730dd71 | ||
|
28da2a8bdc | ||
|
42ce2c1080 | ||
|
03f6a28ec0 | ||
|
9f722427e5 | ||
|
830da0c218 | ||
|
af3138e801 | ||
|
585259b837 | ||
|
4a60c377b8 | ||
|
4243105eb5 | ||
|
33c1463645 | ||
|
a3bbc5956b | ||
|
6d68923edc | ||
|
52e0df5c23 | ||
|
e2d94e0719 | ||
|
1b7b17d12a | ||
|
8ba27b7b46 | ||
|
f0e417091c | ||
|
ba1a453ef3 | ||
|
512d826cc3 | ||
|
dddf6eab2d | ||
|
eefb27f5ae | ||
|
33c513274d | ||
|
99760edc75 | ||
|
1b97a2eee8 | ||
|
aa1780d03c | ||
|
b7ac654b88 | ||
|
25e4c512d4 | ||
|
c56d32c73e | ||
|
36ea32162d | ||
|
e7a5ec3376 | ||
|
468c8c5f0a | ||
|
08f665cf28 | ||
|
c6f5b96ba8 | ||
|
bed500090e | ||
|
49a46d6ca9 | ||
|
3a45e6010f | ||
|
eb58529757 | ||
|
6bc9249b38 | ||
|
303fb06c96 | ||
|
401041cfd6 | ||
|
67465dc5ef | ||
|
fab586bc87 | ||
|
5d72a3e133 | ||
|
155703c613 | ||
|
6e333d5075 | ||
|
52028dcd2d | ||
|
bfc359ca61 | ||
|
d58eb62d68 | ||
|
f7ae1bce25 | ||
|
ba937b2b3d | ||
|
a29db26cc9 | ||
|
e9d8d074a1 | ||
|
655e68a0ad | ||
|
b87ef427e9 | ||
|
e049e18780 | ||
|
ea28519f57 | ||
|
e5f048f44d | ||
|
97de6f851b | ||
|
41e97a766b | ||
|
d27ed43daa | ||
|
557a9fa321 | ||
|
ff94f29be5 | ||
|
231d9e0426 | ||
|
1481d1cfe0 | ||
|
01a7250ba5 | ||
|
1734611181 | ||
|
6074896cbf | ||
|
69698aacbc | ||
|
b607c70e8f | ||
|
0b4f4fe157 | ||
|
1644117a1a | ||
|
0b512af803 | ||
|
29f70acc98 | ||
|
b45e9aefd3 | ||
|
f97296597c | ||
|
8db3920c01 | ||
|
26d4574ada | ||
|
da040fc134 | ||
|
020078663e | ||
|
c20be05a80 | ||
|
27f4cf7542 | ||
|
cfdf94fc27 | ||
|
0d3b75845a | ||
|
157b038661 | ||
|
1efeb1b562 | ||
|
32a5548c41 | ||
|
3ae7a45d5a | ||
|
9764ba6df2 | ||
|
42ffbea8e0 | ||
|
f45f033199 | ||
|
18a496142b | ||
|
a9c1b85e08 | ||
|
2a4ef0fe49 | ||
|
e9d3b96595 | ||
|
fa3cc1dd24 | ||
|
b729728536 | ||
|
e65cc4f849 | ||
|
d6394a00f3 | ||
|
c3a5aa159a | ||
|
a53f687fe6 | ||
|
b65e5b1e96 | ||
|
beb00af0c1 | ||
|
bbd1bfd155 | ||
|
20868acc96 | ||
|
a1d106110d | ||
|
99739a58c3 | ||
|
cdf95f1ce6 | ||
|
46f7b7c1f2 | ||
|
6178964929 | ||
|
6fd88b8cbb | ||
|
f6cc71bc36 | ||
|
4821aa6c25 | ||
|
f9dd547aa7 | ||
|
4bc7d98d65 | ||
|
08dfbc962b | ||
|
5417fbfecd | ||
|
12a1f73b61 | ||
|
428af5ea62 | ||
|
c8b92a4be2 | ||
|
ba65f2910b | ||
|
c305eb31aa | ||
|
1bf79f2443 | ||
|
6df02adc7a | ||
|
04186e9797 | ||
|
7fad4a9636 | ||
|
b6b6b640b1 | ||
|
c9ca15e8d6 | ||
|
49cf9badbc | ||
|
b698094d4d | ||
|
3025824415 | ||
|
7e45ba7004 | ||
|
1a01fc0c96 | ||
|
77a3bfe1de | ||
|
ed3f44085e | ||
|
6b24c375cb | ||
|
6fc3263e15 | ||
|
54ab9bb6df | ||
|
fd5dc597ed | ||
|
f4c8df897d | ||
|
2ea12ff663 | ||
|
95e4217a2b | ||
|
839957cf56 | ||
|
fd01f3aacd | ||
|
375caeefcf | ||
|
ae40e855ef | ||
|
82bd0904ff | ||
|
b9f8b40190 | ||
|
8353bd8ee3 | ||
|
6b96ca47e0 | ||
|
37a5ac4271 | ||
|
8f9c01feed | ||
|
452adb7bcc | ||
|
622dae76cc | ||
|
ddea7d1689 | ||
|
d6513b5153 | ||
|
7cc4339f71 | ||
|
4c0c908655 | ||
|
06dd530ede | ||
|
9f2041ad0e | ||
|
bf908989d0 | ||
|
806b76a168 | ||
|
449380265a | ||
|
4bf63212d7 | ||
|
644f8819af | ||
|
2d0c3e4c6d | ||
|
918e2213e7 | ||
|
b5db541338 | ||
|
9a22ac63ec | ||
|
d138b3de4b | ||
|
06d9ccf484 | ||
|
68aa88c9bd | ||
|
8bf8c70c4b | ||
|
a699ebdbcc | ||
|
ab0cfc0036 | ||
|
2a1fac9e4f | ||
|
ea0cb39d63 | ||
|
dd8d0a659d | ||
|
d64090b8a9 | ||
|
8e0b58d7e7 | ||
|
f6957f7658 | ||
|
483f720861 | ||
|
f339af858b | ||
|
ab19196391 | ||
|
2d83e43db0 | ||
|
7a88bf0978 | ||
|
fcfb6d8438 | ||
|
2bd955961c | ||
|
a404c43805 | ||
|
38737079b6 | ||
|
2f019b2b4c | ||
|
ff76e05271 | ||
|
38985390b0 | ||
|
152f87864c | ||
|
433f2dbcef | ||
|
56b3223945 | ||
|
40e7846f3e | ||
|
9544f90389 | ||
|
818caf0b5d | ||
|
8045a81bcf | ||
|
2f0a75ab77 | ||
|
4b58030207 | ||
|
d4c24b990f | ||
|
66121d6caa | ||
|
210e9cd489 | ||
|
4e1757bfda | ||
|
d09d87e3b0 | ||
|
cdcf69d0d9 | ||
|
8ae1d812dc | ||
|
48628d31d5 | ||
|
5d8a99f104 | ||
|
a534c9b72d | ||
|
bb24275f8d | ||
|
b9d40d2524 | ||
|
5be0265fe7 | ||
|
41e93bbfe2 | ||
|
f978a71f41 | ||
|
3f4e215c80 | ||
|
413952ff94 | ||
|
6474797d1c | ||
|
c9777518e3 | ||
|
4ce3ef41de | ||
|
1b4ba3eb99 | ||
|
4bfb98ddc9 | ||
|
18fc090052 | ||
|
bd3288e320 | ||
|
0a20f7e75e | ||
|
478570dc32 | ||
|
adfd36f26a | ||
|
867945d193 | ||
|
9dccecc9b5 | ||
|
70e3bffd95 | ||
|
df85c9c06a | ||
|
8ff5cf9cd5 | ||
|
39e37677f2 | ||
|
081c272b85 | ||
|
12198bee2f | ||
|
f385c7212e | ||
|
0d5a098c19 | ||
|
81cc1cb87b | ||
|
1e907498a9 | ||
|
7812cb77c8 | ||
|
c75fc9c7a6 | ||
|
935b6ae653 | ||
|
6f7ccea668 | ||
|
896c3a0a9d | ||
|
5c6492662e | ||
|
27d9ac0fe8 | ||
|
6b9a609044 | ||
|
d223cddc78 | ||
|
33c48ecd35 | ||
|
e0d62d9c5f | ||
|
e565be241f | ||
|
85de55a120 | ||
|
fac503877d | ||
|
42dd006dfc | ||
|
003c312104 | ||
|
6dba727cb2 | ||
|
0965aeb2ea | ||
|
e6002bdaff | ||
|
591e094e06 | ||
|
566de5ab06 | ||
|
149ccd5d91 | ||
|
fc0c692870 | ||
|
ce6436b98a | ||
|
d53befb0d1 | ||
|
8edc6b6a8c | ||
|
c72910a8bf | ||
|
61833bcb74 | ||
|
cc2484c3e6 | ||
|
5e28710692 | ||
|
7225c06934 | ||
|
5857a7a9ce | ||
|
dfe2a742c2 | ||
|
fd1b9fdc12 | ||
|
afdb09de80 | ||
|
56000aea22 | ||
|
2af323bbd1 | ||
|
2c7554e897 | ||
|
130f60d55b | ||
|
4133221200 | ||
|
315fd7d746 | ||
|
193a5624b2 | ||
|
563c55eb7e | ||
|
bcc0eed3e4 | ||
|
9da7b2e8d8 | ||
|
a037c9c249 | ||
|
6dff742b66 | ||
|
d46cb3fd1c | ||
|
8c50707dd4 | ||
|
ad33c39800 | ||
|
f8a2db5341 | ||
|
1fdeb9e030 | ||
|
bfd00caff3 | ||
|
560985b0f6 | ||
|
b096ee3275 | ||
|
b742f47e89 | ||
|
59b6de93ce | ||
|
e2fb18a3ec | ||
|
7d593c5446 | ||
|
1694dc8fe2 | ||
|
525a8cd3e9 | ||
|
7ba4f2dcfa | ||
|
fb617c61b9 | ||
|
033aa1a885 | ||
|
cdd5543173 | ||
|
2a669fc899 | ||
|
9fdbdc662a | ||
|
c84675ee06 | ||
|
7121a58eb9 | ||
|
f72dc7f779 | ||
|
e76215a395 | ||
|
1c931fb814 | ||
|
299a9a1040 | ||
|
944b2450b1 | ||
|
df6db81e2a | ||
|
f7ade3b682 | ||
|
a90d5c21b5 | ||
|
9ad5fbb416 | ||
|
8b54b7233e | ||
|
1c5876eb7b | ||
|
2ddaf00387 | ||
|
f9a48f72d4 | ||
|
b4f16faafd | ||
|
66ebf8d83f | ||
|
dc13af90b1 | ||
|
3c47e6248a | ||
|
bd94854929 | ||
|
e0b5e26035 | ||
|
e33debc214 | ||
|
558369731f | ||
|
552e42f634 | ||
|
ce0ec05c63 | ||
|
e3c3c67b25 | ||
|
d24fd32aa5 | ||
|
cd47e625f0 | ||
|
7175b6a769 | ||
|
070f49fdc5 | ||
|
6b01196fb2 | ||
|
bd3b677b86 | ||
|
596442f71f | ||
|
6ab6c55de5 | ||
|
b68bba441e | ||
|
0125b74b3c | ||
|
71e89df5e0 | ||
|
439229efa3 | ||
|
890e774ddc | ||
|
b280c2f361 | ||
|
45917935ef | ||
|
75a02e090a | ||
|
c5cbbea82e | ||
|
ef85202f71 | ||
|
916165dfc4 | ||
|
df64bdffdf | ||
|
e1679d20c7 | ||
|
f225ff8674 | ||
|
6efda51cc5 | ||
|
5ee8c132a5 | ||
|
561a0e3a4a | ||
|
8a65229b35 | ||
|
639b0a8715 | ||
|
5f3df89c64 | ||
|
74e329064a | ||
|
1c88fbb391 | ||
|
6743ecec59 | ||
|
6350b32a3d | ||
|
3ddd9f753c | ||
|
70e05801b1 | ||
|
8016a7bd33 | ||
|
5aca1d64e0 | ||
|
2812e6f1f5 | ||
|
20a4742efd | ||
|
00e4a479d3 | ||
|
585a53c415 | ||
|
aa1f1eb680 | ||
|
097e6053ef | ||
|
3ce79e0658 | ||
|
ac8247b46d | ||
|
d839f6c525 | ||
|
e52fec9cd9 | ||
|
6d713e84e1 | ||
|
7403afea97 | ||
|
b4967b3703 | ||
|
11b7b93cf7 | ||
|
b5dd9e6775 | ||
|
ca752e64fb | ||
|
ca105d0462 | ||
|
645f960475 | ||
|
1a917bc954 | ||
|
2befa8fe30 | ||
|
b695db4af4 | ||
|
9a604eb679 | ||
|
690db9693f | ||
|
eb99feb4a7 | ||
|
a5ce8696a6 | ||
|
d721863382 | ||
|
31d84d71d3 | ||
|
18bd1c9d30 | ||
|
7658f8c151 | ||
|
7534154b44 | ||
|
dcea52203d | ||
|
f87b76a805 | ||
|
f6f414ce3b | ||
|
ccf8fa4fa2 | ||
|
4ce715a360 | ||
|
1dd0feacc7 | ||
|
497f7ab5ba | ||
|
b8dadd6427 | ||
|
13fb3fdcf2 | ||
|
17a8ee57fe | ||
|
a7667ffc14 | ||
|
b7470440ff | ||
|
cca9935970 | ||
|
9804b7df68 | ||
|
9d318db48f | ||
|
2984716870 | ||
|
845f146518 | ||
|
6d1c566ec9 | ||
|
c5f427b0a4 | ||
|
a987f1469e | ||
|
17e9207dff | ||
|
3a0d4865f6 | ||
|
b6458ae3b3 | ||
|
c098ac6430 | ||
|
b9a7bcb6a4 | ||
|
3c6e144608 | ||
|
a96cf3ad09 | ||
|
ea6f46cb87 | ||
|
360aa1b407 | ||
|
911f6eb106 | ||
|
7d3efec7d1 | ||
|
695becc4cb | ||
|
82499a4cbf | ||
|
8a86fe7bb0 | ||
|
f6c482c06f | ||
|
d9027df5b5 | ||
|
aa99660fe1 | ||
|
62cb514070 | ||
|
50fb4d6a2c | ||
|
8ec36ca056 | ||
|
d3c34ef8af | ||
|
b614e3b5cb | ||
|
70687cd581 | ||
|
79b9249ff4 | ||
|
65737bd5bd | ||
|
621ca86b9e | ||
|
efe2f5f8c7 | ||
|
0ed7f32db3 | ||
|
96d97c4857 | ||
|
70690e1971 | ||
|
e0fb0703c4 | ||
|
2be107d0d9 | ||
|
e982a9512e | ||
|
745c0dfa57 | ||
|
69ec189ad2 | ||
|
f70f7d0709 | ||
|
0ab906d5de | ||
|
d770714578 | ||
|
68fa988219 | ||
|
ee43e9248c | ||
|
d1e63c7df2 | ||
|
96ba1708ac | ||
|
e78e067204 | ||
|
820e84662f | ||
|
cd8a302997 | ||
|
d9270337c1 | ||
|
607a38dd00 | ||
|
47e510e14f | ||
|
75447fb044 | ||
|
8a5b770c36 | ||
|
bba88e84a9 | ||
|
8db80f1f6d | ||
|
359703c696 | ||
|
7e6a5800b6 | ||
|
fa46fc94a7 | ||
|
cb96cc030a | ||
|
54a24608a2 | ||
|
cfe8983272 | ||
|
3a1022e381 | ||
|
569a88a456 | ||
|
5c3fdfaacb | ||
|
af7dcda1cb | ||
|
f4175219fb | ||
|
6f05ea4f6e | ||
|
232d61d598 | ||
|
c7c1a97c2f | ||
|
296cdd591f | ||
|
b07e1b3aed | ||
|
9db7c16a1e | ||
|
bf753e99e7 | ||
|
309e2ceaf8 | ||
|
4bb1664aae | ||
|
2e9c0e2b47 | ||
|
65c35466b6 | ||
|
b7457f39b4 | ||
|
bc59fd046f | ||
|
f65713dfa6 | ||
|
843ea5bf22 | ||
|
5c504ed863 | ||
|
48a5012b21 | ||
|
bddead9eff | ||
|
4d19a4fbeb | ||
|
b08bb20979 | ||
|
9115a4f92f | ||
|
b53ca0bcfe | ||
|
7e40684b47 | ||
|
6b78053d75 | ||
|
886cf2f5be | ||
|
9f1e9f11f1 | ||
|
9cab79cbe6 | ||
|
8f9dec2883 | ||
|
76329a46a3 | ||
|
eea43c9412 | ||
|
9bc829d397 | ||
|
2bc78739a7 | ||
|
16b5417842 | ||
|
7635afd0c4 | ||
|
640d51f4b6 | ||
|
592d626dad | ||
|
0dd8a26a3a | ||
|
3f252ed194 | ||
|
31e338b8fd | ||
|
729088a7af | ||
|
a39c910619 | ||
|
13978f33d8 | ||
|
4c93d77f24 | ||
|
08426d336d | ||
|
369dbaf396 | ||
|
c9e6818ab6 | ||
|
3d57755b70 | ||
|
fd522b3257 | ||
|
cc54c66fd0 | ||
|
cf353bd34f | ||
|
752eb2c11d | ||
|
b059de2ac7 | ||
|
2191efd8ec | ||
|
953db8477e | ||
|
211c06e419 | ||
|
6ddacaf9bf | ||
|
ac983319d3 | ||
|
f598cc7897 | ||
|
bda7fe38d0 | ||
|
d28176b132 | ||
|
f8e1f4a7c9 | ||
|
3022786948 | ||
|
8ee5fce9d6 | ||
|
74e48f070f | ||
|
d8e697ac68 | ||
|
a36926216f | ||
|
e98d478085 | ||
|
b6da734824 | ||
|
ba24e242d7 | ||
|
80b8921a9a | ||
|
471b5910a6 | ||
|
eff6d3c12b | ||
|
23e338852c | ||
|
f716c0a1dd | ||
|
8543313bf5 | ||
|
68bfcd0521 | ||
|
122acb2254 | ||
|
4c6224aad1 | ||
|
eb626edd3f | ||
|
4d0af232da | ||
|
a213d4b9e8 | ||
|
fd836f5490 | ||
|
b55ed840e6 | ||
|
b3bfb75252 | ||
|
167f26b90d | ||
|
5aada8cc2a | ||
|
e54246d310 | ||
|
f0c4e94d74 | ||
|
97a4e1b86a | ||
|
c913f40ca4 | ||
|
32dadb46fa | ||
|
f97ae2ff85 | ||
|
9152ab7955 | ||
|
0bd3c195a5 | ||
|
37771eb4cc | ||
|
eadad85561 | ||
|
50b172530c | ||
|
e25656d09b | ||
|
dd20da1bff | ||
|
abc2bdc3aa | ||
|
c2982c9a31 | ||
|
78698698dc | ||
|
2b38c8a156 | ||
|
8a3bbbdb88 | ||
|
7cd03836e5 | ||
|
4eac403e3b | ||
|
6ea7bc27e4 | ||
|
aca0caa8cc | ||
|
d7bc121474 | ||
|
e47104bd7a | ||
|
5133fe8efb | ||
|
3cc0458312 | ||
|
0d9f73fa1e | ||
|
f038057b9d | ||
|
97d17cf835 | ||
|
b255c3c44b | ||
|
2b93201533 | ||
|
d27cc91ee9 | ||
|
6869a56403 | ||
|
16b61590ab | ||
|
3aa5daf696 | ||
|
66ecfa77e5 | ||
|
ab344f31b6 | ||
|
0d5c6a48be | ||
|
31e3dc600a | ||
|
80e79f33af | ||
|
aa97ff7fde | ||
|
7bfd38eaa9 | ||
|
9b22f41e54 | ||
|
9773ccc451 | ||
|
71bd956866 | ||
|
2f6603e581 | ||
|
c7bb3a1f72 | ||
|
0a0d2ecf85 | ||
|
b6568db1bc | ||
|
f9528bfb86 | ||
|
92a619ad28 | ||
|
71c8801eef | ||
|
ea8cd13f79 | ||
|
b5f116f08b | ||
|
b7314a1687 | ||
|
11e28aff7d | ||
|
b6ac9b4334 | ||
|
cc64f2a814 | ||
|
0a16039924 | ||
|
9be4c5558f | ||
|
3e89244e08 | ||
|
fb470e8e2a | ||
|
a0bd09ab83 | ||
|
8d8c161a7f | ||
|
6c777ff823 | ||
|
676a9a7e28 | ||
|
1665a06fdd | ||
|
68eb394824 | ||
|
8c604c9d31 | ||
|
1883e0830c | ||
|
baf591cc27 | ||
|
031008648f | ||
|
2c8a46e0fe | ||
|
891bc414b1 | ||
|
fed9a3d5c8 | ||
|
47dd9e42f7 | ||
|
e142ebde5c | ||
|
eded4bfa95 | ||
|
eaa8cd28d0 | ||
|
d5642d3098 | ||
|
f33ada855c | ||
|
9f1a4acf62 | ||
|
546dd4c2b6 | ||
|
1724f45f46 | ||
|
de05a598b3 | ||
|
2f5a733346 | ||
|
5a214ee6f1 | ||
|
e3d7ce2cc4 | ||
|
a1566a9c86 | ||
|
0a94640e32 | ||
|
de6fa5dd52 | ||
|
9a88e4d184 | ||
|
e16cebac3e | ||
|
c6298678f5 | ||
|
14d0ef8f37 | ||
|
ef5b36eaaf | ||
|
afbdbb0c95 | ||
|
eab1e6cea1 | ||
|
29623d77e4 | ||
|
fd4bcd9f09 | ||
|
47bb945caf | ||
|
1b96ca348f | ||
|
90cba379a4 | ||
|
f04597d918 | ||
|
dccd8b6eaa | ||
|
39ba934c0a | ||
|
e6c0673ef1 | ||
|
6b9177ca02 | ||
|
2095780f24 | ||
|
d6036f08aa | ||
|
ce84e3f440 | ||
|
e65731bb7e | ||
|
a1999955eb | ||
|
da03a5c7e2 | ||
|
40a956eb68 | ||
|
cac7723451 | ||
|
1b25a8f437 | ||
|
6c724ed96c | ||
|
0f07922f19 | ||
|
e29687552e | ||
|
07a5cb2ef8 | ||
|
621c6b8533 | ||
|
7335f366dc | ||
|
642e64034c | ||
|
ce484fa9da | ||
|
67896ea9a2 | ||
|
6a9e7dc55b | ||
|
ccf0686b01 | ||
|
d431e43392 | ||
|
00a1f5bc2c | ||
|
91995909d9 | ||
|
0bda2d5d2b | ||
|
ff976bc86c | ||
|
ffe064a2c1 | ||
|
cf3f22cc99 | ||
|
22ec3fa14c | ||
|
e5ff5c2869 | ||
|
30d6370719 | ||
|
8392449599 | ||
|
9df17fa4c5 | ||
|
c816dcc105 | ||
|
29baadf0c7 | ||
|
0a2ac8371d | ||
|
a54b2e80f8 | ||
|
82ae973a99 | ||
|
64db5f808b | ||
|
d863fa6283 | ||
|
96d49bf04c | ||
|
d075df56d3 | ||
|
f45345edb3 | ||
|
a16533a04a | ||
|
e37a043df7 | ||
|
151ada7645 | ||
|
cfca11f2bc | ||
|
32be082055 | ||
|
21e55ca318 | ||
|
b822efb9d1 | ||
|
e9394c48ca | ||
|
d03964d6ec | ||
|
d991ce636b | ||
|
1f3bdd453e | ||
|
3de4271846 | ||
|
c29457a396 | ||
|
4cbb29cfad | ||
|
e56a47ab19 | ||
|
dae56806df | ||
|
655b836b2a | ||
|
c8bf5905bf | ||
|
98044f0f14 | ||
|
39e7a0eafe | ||
|
634783feb0 | ||
|
1e3d238910 | ||
|
2753cea75a | ||
|
25c5763780 | ||
|
9c574464a6 | ||
|
17ea019f4e | ||
|
c4536ae587 | ||
|
a934bafd9f | ||
|
70ebcf250a | ||
|
d803eed264 | ||
|
5cd823847b | ||
|
3b1519da47 | ||
|
103bb239e5 | ||
|
9ff1ec7d8e | ||
|
a1434ff50b | ||
|
4c800342af | ||
|
3c1022f9b1 | ||
|
1be3941f7d | ||
|
64db738f9d | ||
|
80f75b8174 | ||
|
d41aac629b | ||
|
c5eba169cd | ||
|
c8ba5c2d58 | ||
|
49e73f8ac1 | ||
|
6570843f84 | ||
|
0dbb369ace | ||
|
8419740778 | ||
|
4ba24596d3 | ||
|
a87fccc083 | ||
|
dea8628171 | ||
|
c49a3106ff | ||
|
efc4cae1b7 | ||
|
2937f35f9a | ||
|
d80d4cd92b | ||
|
aec1a84042 | ||
|
d62a8a4d50 | ||
|
2462949fd5 | ||
|
31e0fa6572 | ||
|
1b6c28b976 | ||
|
430d3ad45b | ||
|
224da71177 | ||
|
9655350c79 | ||
|
ece30f53ee | ||
|
2a390f5dc1 | ||
|
a5d7a95893 | ||
|
4ebee56acc | ||
|
db2c15369c | ||
|
e954438a1d | ||
|
5fd830f01c | ||
|
7d3ee2baa6 | ||
|
b47173da6a | ||
|
4ed8278870 | ||
|
7978f8dd2b | ||
|
c1ffee4e65 | ||
|
c20af32ae4 | ||
|
6fc10fa256 | ||
|
fbd345ea20 | ||
|
c4a7824a8c | ||
|
140652e9b0 | ||
|
5d3fb35cd1 | ||
|
918dc87376 | ||
|
fac4e3f2e5 | ||
|
d9b15fc17d | ||
|
494ae87840 | ||
|
1319373d58 | ||
|
e8f10f317f | ||
|
654f10102e | ||
|
06ea122840 | ||
|
39834ec640 | ||
|
4d2278e7c6 | ||
|
6d5c29dc2b | ||
|
3bc507e5c5 | ||
|
534bd5a268 | ||
|
bd60a4ed40 | ||
|
ae067ee322 | ||
|
6c6f415cae | ||
|
5c2f6d7f05 | ||
|
0b3df2f128 | ||
|
7971383d53 | ||
|
a048c955fd | ||
|
a58385247d | ||
|
9b919939a3 | ||
|
b91d680257 | ||
|
fc1c250d40 | ||
|
333f7372c5 | ||
|
93cb01ea9b | ||
|
cb2be3ce0a |
6
.gitignore
vendored
|
@ -2,7 +2,7 @@
|
||||||
.rbx/
|
.rbx/
|
||||||
db/*.sqlite3
|
db/*.sqlite3
|
||||||
db/*.sqlite3-journal
|
db/*.sqlite3-journal
|
||||||
log/*.log
|
log/*.log*
|
||||||
tmp/
|
tmp/
|
||||||
.sass-cache/
|
.sass-cache/
|
||||||
coverage/*
|
coverage/*
|
||||||
|
@ -19,8 +19,12 @@ config/gitlab.yml
|
||||||
config/database.yml
|
config/database.yml
|
||||||
config/initializers/omniauth.rb
|
config/initializers/omniauth.rb
|
||||||
config/unicorn.rb
|
config/unicorn.rb
|
||||||
|
config/resque.yml
|
||||||
|
config/aws.yml
|
||||||
db/data.yml
|
db/data.yml
|
||||||
.idea
|
.idea
|
||||||
.DS_Store
|
.DS_Store
|
||||||
.chef
|
.chef
|
||||||
vendor/bundle/*
|
vendor/bundle/*
|
||||||
|
rails_best_practices_output.html
|
||||||
|
doc/code/*
|
||||||
|
|
2
.rspec
|
@ -1 +1 @@
|
||||||
--colour
|
--colour --drb
|
||||||
|
|
4
.simplecov
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
# .simplecov
|
||||||
|
SimpleCov.start 'rails' do
|
||||||
|
merge_timeout 3600
|
||||||
|
end
|
10
.travis.yml
|
@ -1,18 +1,14 @@
|
||||||
|
language: ruby
|
||||||
env:
|
env:
|
||||||
- DB=postgresql
|
- DB=mysql TRAVIS=true
|
||||||
- DB=mysql
|
|
||||||
before_install:
|
before_install:
|
||||||
- sudo apt-get install libicu-dev -y
|
- sudo apt-get install libicu-dev -y
|
||||||
- wget -P /tmp http://phantomjs.googlecode.com/files/phantomjs-1.7.0-linux-i686.tar.bz2
|
|
||||||
- tar -xf /tmp/phantomjs-1.7.0-linux-i686.tar.bz2 -C /tmp/
|
|
||||||
- sudo rm -rf /usr/local/phantomjs
|
|
||||||
- sudo mv /tmp/phantomjs-1.7.0-linux-i686 /usr/local/phantomjs
|
|
||||||
- gem install charlock_holmes -v="0.6.9"
|
- gem install charlock_holmes -v="0.6.9"
|
||||||
branches:
|
branches:
|
||||||
only:
|
only:
|
||||||
- 'master'
|
- 'master'
|
||||||
rvm:
|
rvm:
|
||||||
- 1.9.3
|
- 1.9.3-p392
|
||||||
services:
|
services:
|
||||||
- mysql
|
- mysql
|
||||||
- postgresql
|
- postgresql
|
||||||
|
|
78
CHANGELOG
|
@ -1,7 +1,83 @@
|
||||||
|
v 5.1.0
|
||||||
|
- You can login with email or username now
|
||||||
|
- Corrected project transfer rollback when repository cannot be moved
|
||||||
|
- Move both repo and wiki when project transfer requrested
|
||||||
|
- Admin area: project editing was removed from admin namespace
|
||||||
|
- Access: admin user has now access to any project.
|
||||||
|
|
||||||
|
v 5.0.0
|
||||||
|
- Replaced gitolite with gitlab-shell
|
||||||
|
- Removed gitolite-related libraries
|
||||||
|
- State machine added
|
||||||
|
- Setup gitlab as git user
|
||||||
|
- Internal API
|
||||||
|
- Show team tab for empty projects
|
||||||
|
- Import repository feature
|
||||||
|
- Updated rails
|
||||||
|
- Use lambda for scopes
|
||||||
|
- Redesign admin area -> users
|
||||||
|
- Redesign admin area -> user
|
||||||
|
- Secure link to file attachments
|
||||||
|
- Add validations for Group and Team names
|
||||||
|
- Restyle team page for project
|
||||||
|
- Update capybara, rspec-rails, poltergeist to recent versions
|
||||||
|
- Wiki on git using Gollum
|
||||||
|
- Added Solarized Dark theme for code review
|
||||||
|
- Dont show user emails in autocomplete lists, profile pages
|
||||||
|
- Added settings tab for group, team, project
|
||||||
|
- Replace user popup with icons in header
|
||||||
|
- Handle project moving with gitlab-shell
|
||||||
|
- Added select2-rails for selectboxes with ajax data load
|
||||||
|
- Fixed search field on projects page
|
||||||
|
- Added teams to search autocomplete
|
||||||
|
- Move groups and teams on dashboard sidebar to sub-tabs
|
||||||
|
- API: improved return codes and docs. (Felix Gilcher, Sebastian Ziebell)
|
||||||
|
- Redesign wall to be more like chat
|
||||||
|
- Snippets, Wall features are disabled by default for new projects
|
||||||
|
|
||||||
|
v 4.2.0
|
||||||
|
- Teams
|
||||||
|
- User show page. Via /u/username
|
||||||
|
- Show help contents on pages for better navigation
|
||||||
|
- Async gitolite calls
|
||||||
|
- added satellites logs
|
||||||
|
- can_create_group, can_create_team booleans for User
|
||||||
|
- Process web hooks async
|
||||||
|
- GFM: Fix images escaped inside links
|
||||||
|
- Network graph improved
|
||||||
|
- Switchable branches for network graph
|
||||||
|
- API: Groups
|
||||||
|
- Fixed project download
|
||||||
|
|
||||||
|
v 4.1.0
|
||||||
|
- Optional Sign-Up
|
||||||
|
- Discussions
|
||||||
|
- Satellites outside of tmp
|
||||||
|
- Line numbers for blame
|
||||||
|
- Project public mode
|
||||||
|
- Public area with unauthorized access
|
||||||
|
- Load dashboard events with ajax
|
||||||
|
- remember dashboard filter in cookies
|
||||||
|
- replace resque with sidekiq
|
||||||
|
- fix routing issues
|
||||||
|
- cleanup rake tasks
|
||||||
|
- fix backup/restore
|
||||||
|
- scss cleanup
|
||||||
|
- show preview for note images
|
||||||
|
- improved network-graph
|
||||||
|
- get rid of app/roles/
|
||||||
|
- added new classes Team, Repository
|
||||||
|
- Reduce amount of gitolite calls
|
||||||
|
- Ability to add user in all group projects
|
||||||
|
- remove deprecated configs
|
||||||
|
- replaced Korolev font with open font
|
||||||
|
- restyled admin/dashboard page
|
||||||
|
- restyled admin/projects page
|
||||||
|
|
||||||
v 4.0.0
|
v 4.0.0
|
||||||
- Remove project code and path from API. Use id instead
|
- Remove project code and path from API. Use id instead
|
||||||
- Return valid clonable url to repo for web hook
|
- Return valid clonable url to repo for web hook
|
||||||
- Fixed backup issue
|
- Fixed backup issue
|
||||||
- Reorganized settings
|
- Reorganized settings
|
||||||
- Fixed commits compare
|
- Fixed commits compare
|
||||||
- Refactored scss
|
- Refactored scss
|
||||||
|
|
|
@ -1,26 +1,53 @@
|
||||||
# Contact & support
|
|
||||||
|
|
||||||
If you want quick help, head over to our [Support Forum](https://groups.google.com/forum/#!forum/gitlabhq).
|
|
||||||
Otherwise you can follow our [Issue Submission Guide](https://github.com/gitlabhq/gitlabhq/wiki/Issue-Submission-Guide) for a more systematic and thorough guide to solving your issues.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Contribute to GitLab
|
# Contribute to GitLab
|
||||||
|
|
||||||
## Recipes
|
This guide details how to use pull requests and the issues to improve GitLab.
|
||||||
|
|
||||||
We collect user submitted installation scripts and config file templates for platforms we don't support officially.
|
## Closing policy for pull requests and issues
|
||||||
We believe there is merit in allowing a certain amount of diversity.
|
|
||||||
You can get and submit your solution to running/configuring GitLab with your favorite OS/distro, database, web server, cloud hoster, configuration management tool, etc.
|
|
||||||
|
|
||||||
Help us improve the collection of [GitLab Recipes](https://github.com/gitlabhq/gitlab-recipes/)
|
Pull requests and issues not in line with the guidelines listed in this document will be closed with just a link to this paragraph. GitLab is a popular open source project and the capacity to deal with issues and pull requests is limited. To get support for your problems please use other channels as detailed in [the getting help section of the readme](https://github.com/gitlabhq/gitlabhq#getting-help). Professional [support subscriptions](http://www.gitlab.com/subscription/) and [consulting services](http://www.gitlab.com/consultancy/) are available from [GitLab.com](http://www.gitlab.com/).
|
||||||
|
|
||||||
|
## Pull requests
|
||||||
|
|
||||||
## Feature suggestions
|
We welcome pull request with improvements to GitLab code and/or documentation. The issues we would really like a pull request for are listed with the [status 'accepting merge/pull requests' on our feedback forum](http://feedback.gitlab.com/forums/176466-general/status/796455) but other improvements are also welcome.
|
||||||
|
|
||||||
Follow the [Issue Submission Guide](https://github.com/gitlabhq/gitlabhq/wiki/Issue-Submission-Guide) and support other peoples ideas or propose your own.
|
### Pull request guidelines
|
||||||
|
|
||||||
|
If you can please submit a pull request with the fix including tests. The workflow to make a pull request is as follows:
|
||||||
|
|
||||||
## Code
|
1. Fork the project on GitHub
|
||||||
|
1. Create a feature branch
|
||||||
|
1. Write tests and code
|
||||||
|
1. If you have multiple commits please combine them into one commit by [squashing them](http://git-scm.com/book/en/Git-Tools-Rewriting-History#Squashing-Commits)
|
||||||
|
1. Push the commit to your fork
|
||||||
|
1. Submit a pull request
|
||||||
|
|
||||||
Follow our [Developer Guide](https://github.com/gitlabhq/gitlabhq/wiki/Developer-Guide) to set you up for hacking on GitLab.
|
We will accept pull requests if:
|
||||||
|
|
||||||
|
* The code has proper tests and all tests pass
|
||||||
|
* It can be merged without problems (if not please use: git rebase master)
|
||||||
|
* It doesn't break any existing functionality
|
||||||
|
* It's quality code that conforms to the [Rails style guide](https://github.com/bbatsov/rails-style-guide) and best practices
|
||||||
|
* The description includes a motive for your change and the method you used to achieve it
|
||||||
|
* It keeps the GitLab code base clean and well structured
|
||||||
|
* We think other users will need the same functionality
|
||||||
|
* If it makes changes to the UI the pull request should include screenshots
|
||||||
|
|
||||||
|
For examples of feedback on pull requests please look at already [closed pull requests](https://github.com/gitlabhq/gitlabhq/pulls?direction=desc&page=1&sort=created&state=closed).
|
||||||
|
|
||||||
|
## Issue tracker
|
||||||
|
|
||||||
|
The [issue tracker](https://github.com/gitlabhq/gitlabhq/issues) is only for obvious bugs or misbehavior in the master branch of GitLab. When submitting an issue please conform to the issue submission guidelines listed below.
|
||||||
|
|
||||||
|
Please send a pull request with a tested solution or a pull request with a failing test instead of opening an issue if you can. If you're unsure where to post, post to the [Support Forum](https://groups.google.com/forum/#!forum/gitlabhq) first. There are a lot of helpful GitLab users there who may be able to help you quickly. If your particular issue turns out to be a bug, it will find its way from there.
|
||||||
|
|
||||||
|
### Issue tracker guidelines
|
||||||
|
|
||||||
|
**Search** for similar entries before submitting your own, there's a good chance somebody else had the same issue or idea. Show your support with `:+1:` and/or join the discussion.
|
||||||
|
|
||||||
|
* Summarize your issue in one sentence (what goes wrong, what did you expect to happen)
|
||||||
|
* Describe your issue in detail
|
||||||
|
* How can we reproduce the issue on the [GitLab Vagrant virtual machine](https://github.com/gitlabhq/gitlab-vagrant-vm) (start with: vagrant destroy && vagrant up && vagrant ssh)
|
||||||
|
* Add the last commit sha1 of the GitLab version you used to replicate the issue
|
||||||
|
* Add logs or screen shots when possible
|
||||||
|
* Link to the line of code that might be responsible for the problem
|
||||||
|
* Describe your setup (use relevant parts from `sudo -u gitlab -H bundle exec rake gitlab:env:info`)
|
||||||
|
|
4
Capfile.example
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
load 'deploy'
|
||||||
|
load 'deploy/assets'
|
||||||
|
require 'bundler/capistrano'
|
||||||
|
load 'config/deploy'
|
90
Gemfile
|
@ -1,4 +1,4 @@
|
||||||
source "http://rubygems.org"
|
source "https://rubygems.org"
|
||||||
|
|
||||||
def darwin_only(require_as)
|
def darwin_only(require_as)
|
||||||
RUBY_PLATFORM.include?('darwin') && require_as
|
RUBY_PLATFORM.include?('darwin') && require_as
|
||||||
|
@ -8,50 +8,58 @@ def linux_only(require_as)
|
||||||
RUBY_PLATFORM.include?('linux') && require_as
|
RUBY_PLATFORM.include?('linux') && require_as
|
||||||
end
|
end
|
||||||
|
|
||||||
gem "rails", "3.2.11"
|
gem "rails", "3.2.13"
|
||||||
|
|
||||||
# Supported DBs
|
# Supported DBs
|
||||||
gem "mysql2", group: :mysql
|
gem "mysql2", group: :mysql
|
||||||
gem "pg", group: :postgres
|
gem "pg", group: :postgres
|
||||||
|
|
||||||
# Auth
|
# Auth
|
||||||
gem "devise", "~> 2.1.0"
|
gem "devise"
|
||||||
gem 'omniauth', "~> 1.1.1"
|
gem 'omniauth', "~> 1.1.3"
|
||||||
gem 'omniauth-google-oauth2'
|
gem 'omniauth-google-oauth2'
|
||||||
gem 'omniauth-twitter'
|
gem 'omniauth-twitter'
|
||||||
gem 'omniauth-github'
|
gem 'omniauth-github'
|
||||||
|
|
||||||
# GITLAB patched libs
|
# Extracting information from a git repository
|
||||||
gem "grit", git: "https://github.com/gitlabhq/grit.git", ref: '7f35cb98ff17d534a07e3ce6ec3d580f67402837'
|
# Since gollum requires grit we cannot use gitlab-grit gem name any more. Use grit instead
|
||||||
gem "omniauth-ldap", git: "https://github.com/gitlabhq/omniauth-ldap.git", ref: 'f038dd852d7bd473a557e385d5d7c2fd5dc1dc2e'
|
gem "grit", '~> 2.5.0', git: 'https://github.com/gitlabhq/grit.git', ref: '42297cdcee16284d2e4eff23d41377f52fc28b9d'
|
||||||
gem 'yaml_db', git: "https://github.com/gitlabhq/yaml_db.git", ref: '98e9a5dca43e3fedd3268c76a73af40d1bdf1dfd'
|
gem 'grit_ext', '~> 0.8.1'
|
||||||
gem 'grack', git: "https://github.com/gitlabhq/grack.git", ref: 'ba46f3b0845c6a09d488ae6abdce6ede37e227e8'
|
|
||||||
gem 'grit_ext', git: "https://github.com/gitlabhq/grit_ext.git", ref: '8e6afc2da821354774aa4d1ee8a1aa2082f84a3e'
|
|
||||||
|
|
||||||
# Gitolite client (for work with gitolite-admin repo)
|
# Ruby/Rack Git Smart-HTTP Server Handler
|
||||||
gem "gitolite", '1.1.0'
|
gem 'gitlab-grack', '~> 1.0.0', require: 'grack'
|
||||||
|
|
||||||
|
# LDAP Auth
|
||||||
|
gem 'gitlab_omniauth-ldap', '1.0.2', require: "omniauth-ldap"
|
||||||
|
|
||||||
|
# Dump db to yml file. Mostly used to migrate from sqlite to mysql
|
||||||
|
gem 'gitlab_yaml_db', '1.0.0', require: "yaml_db"
|
||||||
|
|
||||||
# Syntax highlighter
|
# Syntax highlighter
|
||||||
gem "pygments.rb", git: "https://github.com/gitlabhq/pygments.rb.git", branch: "master"
|
gem "gitlab-pygments.rb", '~> 0.3.2', require: 'pygments.rb'
|
||||||
|
|
||||||
# Language detection
|
# Language detection
|
||||||
gem "github-linguist", "~> 2.3.4" , require: "linguist"
|
gem "github-linguist", "~> 2.3.4" , require: "linguist"
|
||||||
|
|
||||||
# API
|
# API
|
||||||
gem "grape", "~> 0.2.1"
|
gem "grape", "~> 0.3.1"
|
||||||
|
gem "grape-entity", "~> 0.2.0"
|
||||||
|
|
||||||
# Format dates and times
|
# Format dates and times
|
||||||
# based on human-friendly examples
|
# based on human-friendly examples
|
||||||
gem "stamp"
|
gem "stamp"
|
||||||
|
|
||||||
|
# Enumeration fields
|
||||||
|
gem 'enumerize'
|
||||||
|
|
||||||
# Pagination
|
# Pagination
|
||||||
gem "kaminari", "~> 0.14.1"
|
gem "kaminari", "~> 0.14.1"
|
||||||
|
|
||||||
# HAML
|
# HAML
|
||||||
gem "haml-rails", "~> 0.3.5"
|
gem "haml-rails"
|
||||||
|
|
||||||
# Files attachments
|
# Files attachments
|
||||||
gem "carrierwave", "~> 0.7.1"
|
gem "carrierwave"
|
||||||
|
|
||||||
# Authorization
|
# Authorization
|
||||||
gem "six"
|
gem "six"
|
||||||
|
@ -67,18 +75,21 @@ gem "redcarpet", "~> 2.2.2"
|
||||||
gem "github-markup", "~> 0.7.4", require: 'github/markup'
|
gem "github-markup", "~> 0.7.4", require: 'github/markup'
|
||||||
|
|
||||||
# Servers
|
# Servers
|
||||||
gem "thin", '~> 1.5.0'
|
gem "unicorn"
|
||||||
gem "unicorn", "~> 4.4.0"
|
|
||||||
|
# State machine
|
||||||
|
gem "state_machine"
|
||||||
|
|
||||||
# Issue tags
|
# Issue tags
|
||||||
gem "acts-as-taggable-on", "2.3.3"
|
gem "acts-as-taggable-on", "2.3.3"
|
||||||
|
|
||||||
# Decorators
|
# Decorators
|
||||||
gem "draper", "~> 0.18.0"
|
gem "draper"
|
||||||
|
|
||||||
# Background jobs
|
# Background jobs
|
||||||
gem "resque", "~> 1.23.0"
|
gem 'slim'
|
||||||
gem 'resque_mailer'
|
gem 'sinatra', require: nil
|
||||||
|
gem 'sidekiq'
|
||||||
|
|
||||||
# HTTP requests
|
# HTTP requests
|
||||||
gem "httparty"
|
gem "httparty"
|
||||||
|
@ -89,10 +100,20 @@ gem "colored"
|
||||||
# GitLab settings
|
# GitLab settings
|
||||||
gem 'settingslogic'
|
gem 'settingslogic'
|
||||||
|
|
||||||
|
# Wiki
|
||||||
|
# - Use latest master to resolve Gem dependency with Pygemnts
|
||||||
|
# github-linquist needs pygments 0.4.2 but Gollum 2.4.11
|
||||||
|
# requires pygments 0.3.2. The latest master Gollum has been updated
|
||||||
|
# to use pygments 0.4.2. Change this after next Gollum release.
|
||||||
|
gem "gollum", "~> 2.4.0", git: "https://github.com/gollum/gollum.git", ref: "5dcd3c8c8f"
|
||||||
|
|
||||||
# Misc
|
# Misc
|
||||||
gem "foreman"
|
gem "foreman"
|
||||||
gem "git"
|
gem "git"
|
||||||
|
|
||||||
|
# Cache
|
||||||
|
gem "redis-rails"
|
||||||
|
|
||||||
group :assets do
|
group :assets do
|
||||||
gem "sass-rails", "~> 3.2.5"
|
gem "sass-rails", "~> 3.2.5"
|
||||||
gem "coffee-rails", "~> 3.2.2"
|
gem "coffee-rails", "~> 3.2.2"
|
||||||
|
@ -100,14 +121,16 @@ group :assets do
|
||||||
gem "therubyracer"
|
gem "therubyracer"
|
||||||
|
|
||||||
gem 'chosen-rails', "0.9.8"
|
gem 'chosen-rails', "0.9.8"
|
||||||
|
gem 'select2-rails'
|
||||||
gem 'jquery-atwho-rails', "0.1.7"
|
gem 'jquery-atwho-rails', "0.1.7"
|
||||||
gem "jquery-rails", "2.1.3"
|
gem "jquery-rails", "2.1.3"
|
||||||
gem "jquery-ui-rails", "2.0.2"
|
gem "jquery-ui-rails", "2.0.2"
|
||||||
gem "modernizr", "2.6.2"
|
gem "modernizr", "2.6.2"
|
||||||
gem "raphael-rails", "1.5.2"
|
gem "raphael-rails", git: "https://github.com/gitlabhq/raphael-rails.git"
|
||||||
gem 'bootstrap-sass', "2.2.1.1"
|
gem 'bootstrap-sass', "2.2.1.1"
|
||||||
gem "font-awesome-sass-rails", "~> 2.0.0"
|
gem "font-awesome-sass-rails", "~> 3.0.0"
|
||||||
gem "gemoji", "~> 1.2.1", require: 'emoji/railtie'
|
gem "gemoji", "~> 1.2.1", require: 'emoji/railtie'
|
||||||
|
gem "gon"
|
||||||
end
|
end
|
||||||
|
|
||||||
group :development do
|
group :development do
|
||||||
|
@ -115,16 +138,28 @@ group :development do
|
||||||
gem "letter_opener"
|
gem "letter_opener"
|
||||||
gem 'quiet_assets', '~> 1.0.1'
|
gem 'quiet_assets', '~> 1.0.1'
|
||||||
gem 'rack-mini-profiler'
|
gem 'rack-mini-profiler'
|
||||||
|
# Better errors handler
|
||||||
|
gem 'better_errors'
|
||||||
|
gem 'binding_of_caller'
|
||||||
|
|
||||||
|
gem 'rails_best_practices'
|
||||||
|
|
||||||
|
# Docs generator
|
||||||
|
gem "sdoc"
|
||||||
|
|
||||||
|
# thin instead webrick
|
||||||
|
gem 'thin'
|
||||||
end
|
end
|
||||||
|
|
||||||
group :development, :test do
|
group :development, :test do
|
||||||
|
gem 'coveralls', require: false
|
||||||
gem 'rails-dev-tweaks'
|
gem 'rails-dev-tweaks'
|
||||||
gem 'spinach-rails'
|
gem 'spinach-rails'
|
||||||
gem "rspec-rails"
|
gem "rspec-rails"
|
||||||
gem "capybara"
|
gem "capybara"
|
||||||
gem "pry"
|
gem "pry"
|
||||||
gem "awesome_print"
|
gem "awesome_print"
|
||||||
gem "database_cleaner", ref: "f89c34300e114be99532f14c115b2799a3380ac6", git: "https://github.com/bmabey/database_cleaner.git"
|
gem "database_cleaner"
|
||||||
gem "launchy"
|
gem "launchy"
|
||||||
gem 'factory_girl_rails'
|
gem 'factory_girl_rails'
|
||||||
|
|
||||||
|
@ -138,18 +173,19 @@ group :development, :test do
|
||||||
gem 'rb-inotify', require: linux_only('rb-inotify')
|
gem 'rb-inotify', require: linux_only('rb-inotify')
|
||||||
|
|
||||||
# PhantomJS driver for Capybara
|
# PhantomJS driver for Capybara
|
||||||
gem 'poltergeist', git: 'https://github.com/jonleighton/poltergeist.git', ref: '5c2e092001074a8cf09f332d3714e9ba150bc8ca'
|
gem 'poltergeist', '1.1.0'
|
||||||
|
|
||||||
|
gem 'spork', '~> 1.0rc'
|
||||||
end
|
end
|
||||||
|
|
||||||
group :test do
|
group :test do
|
||||||
gem "simplecov", require: false
|
gem "simplecov", require: false
|
||||||
gem "shoulda-matchers", "1.3.0"
|
gem "shoulda-matchers", "1.3.0"
|
||||||
gem 'email_spec'
|
gem 'email_spec'
|
||||||
gem 'resque_spec'
|
|
||||||
gem "webmock"
|
gem "webmock"
|
||||||
gem 'test_after_commit'
|
gem 'test_after_commit'
|
||||||
end
|
end
|
||||||
|
|
||||||
group :production do
|
group :production do
|
||||||
gem "gitlab_meta", '4.0'
|
gem "gitlab_meta", '5.0'
|
||||||
end
|
end
|
||||||
|
|
497
Gemfile.lock
|
@ -1,10 +1,3 @@
|
||||||
GIT
|
|
||||||
remote: https://github.com/bmabey/database_cleaner.git
|
|
||||||
revision: f89c34300e114be99532f14c115b2799a3380ac6
|
|
||||||
ref: f89c34300e114be99532f14c115b2799a3380ac6
|
|
||||||
specs:
|
|
||||||
database_cleaner (0.9.1)
|
|
||||||
|
|
||||||
GIT
|
GIT
|
||||||
remote: https://github.com/ctran/annotate_models.git
|
remote: https://github.com/ctran/annotate_models.git
|
||||||
revision: be4e26825b521f0b2d86b181e2dff89901aa9b1e
|
revision: be4e26825b521f0b2d86b181e2dff89901aa9b1e
|
||||||
|
@ -13,18 +6,10 @@ GIT
|
||||||
activerecord (>= 2.3.0)
|
activerecord (>= 2.3.0)
|
||||||
rake (>= 0.8.7)
|
rake (>= 0.8.7)
|
||||||
|
|
||||||
GIT
|
|
||||||
remote: https://github.com/gitlabhq/grack.git
|
|
||||||
revision: ba46f3b0845c6a09d488ae6abdce6ede37e227e8
|
|
||||||
ref: ba46f3b0845c6a09d488ae6abdce6ede37e227e8
|
|
||||||
specs:
|
|
||||||
grack (1.0.0)
|
|
||||||
rack (~> 1.4.1)
|
|
||||||
|
|
||||||
GIT
|
GIT
|
||||||
remote: https://github.com/gitlabhq/grit.git
|
remote: https://github.com/gitlabhq/grit.git
|
||||||
revision: 7f35cb98ff17d534a07e3ce6ec3d580f67402837
|
revision: 42297cdcee16284d2e4eff23d41377f52fc28b9d
|
||||||
ref: 7f35cb98ff17d534a07e3ce6ec3d580f67402837
|
ref: 42297cdcee16284d2e4eff23d41377f52fc28b9d
|
||||||
specs:
|
specs:
|
||||||
grit (2.5.0)
|
grit (2.5.0)
|
||||||
diff-lcs (~> 1.1)
|
diff-lcs (~> 1.1)
|
||||||
|
@ -32,110 +17,95 @@ GIT
|
||||||
posix-spawn (~> 0.3.6)
|
posix-spawn (~> 0.3.6)
|
||||||
|
|
||||||
GIT
|
GIT
|
||||||
remote: https://github.com/gitlabhq/grit_ext.git
|
remote: https://github.com/gitlabhq/raphael-rails.git
|
||||||
revision: 8e6afc2da821354774aa4d1ee8a1aa2082f84a3e
|
revision: cb2c92a040b9b941a5f1aa1ea866cc26e944fe58
|
||||||
ref: 8e6afc2da821354774aa4d1ee8a1aa2082f84a3e
|
|
||||||
specs:
|
specs:
|
||||||
grit_ext (0.6.1)
|
raphael-rails (2.1.0)
|
||||||
charlock_holmes (~> 0.6.9)
|
|
||||||
|
|
||||||
GIT
|
GIT
|
||||||
remote: https://github.com/gitlabhq/omniauth-ldap.git
|
remote: https://github.com/gollum/gollum.git
|
||||||
revision: f038dd852d7bd473a557e385d5d7c2fd5dc1dc2e
|
revision: 5dcd3c8c8f68158e43ff79861279088ee56d0ebe
|
||||||
ref: f038dd852d7bd473a557e385d5d7c2fd5dc1dc2e
|
ref: 5dcd3c8c8f
|
||||||
specs:
|
specs:
|
||||||
omniauth-ldap (1.0.2)
|
gollum (2.4.11)
|
||||||
net-ldap (~> 0.2.2)
|
github-markdown (~> 0.5.3)
|
||||||
omniauth (~> 1.0)
|
github-markup (>= 0.7.5, < 1.0.0)
|
||||||
pyu-ruby-sasl (~> 0.0.3.1)
|
grit (~> 2.5.0)
|
||||||
rubyntlm (~> 0.1.1)
|
mustache (>= 0.99.4, < 1.0.0)
|
||||||
|
nokogiri (~> 1.5.6)
|
||||||
GIT
|
pygments.rb (~> 0.4.2)
|
||||||
remote: https://github.com/gitlabhq/pygments.rb.git
|
sanitize (~> 2.0.3)
|
||||||
revision: db1da0343adf86b49bdc3add04d02d2e80438d38
|
sinatra (~> 1.3.5)
|
||||||
branch: master
|
stringex (~> 1.5.1)
|
||||||
specs:
|
useragent (~> 0.4.16)
|
||||||
pygments.rb (0.3.2)
|
|
||||||
posix-spawn (~> 0.3.6)
|
|
||||||
yajl-ruby (~> 1.1.0)
|
|
||||||
|
|
||||||
GIT
|
|
||||||
remote: https://github.com/gitlabhq/yaml_db.git
|
|
||||||
revision: 98e9a5dca43e3fedd3268c76a73af40d1bdf1dfd
|
|
||||||
ref: 98e9a5dca43e3fedd3268c76a73af40d1bdf1dfd
|
|
||||||
specs:
|
|
||||||
yaml_db (0.2.2)
|
|
||||||
|
|
||||||
GIT
|
|
||||||
remote: https://github.com/jonleighton/poltergeist.git
|
|
||||||
revision: 5c2e092001074a8cf09f332d3714e9ba150bc8ca
|
|
||||||
ref: 5c2e092001074a8cf09f332d3714e9ba150bc8ca
|
|
||||||
specs:
|
|
||||||
poltergeist (1.0.2)
|
|
||||||
capybara (~> 1.1)
|
|
||||||
childprocess (~> 0.3)
|
|
||||||
faye-websocket (~> 0.4, >= 0.4.4)
|
|
||||||
http_parser.rb (~> 0.5.3)
|
|
||||||
multi_json (~> 1.0)
|
|
||||||
|
|
||||||
GEM
|
GEM
|
||||||
remote: http://rubygems.org/
|
remote: https://rubygems.org/
|
||||||
specs:
|
specs:
|
||||||
actionmailer (3.2.11)
|
actionmailer (3.2.13)
|
||||||
actionpack (= 3.2.11)
|
actionpack (= 3.2.13)
|
||||||
mail (~> 2.4.4)
|
mail (~> 2.5.3)
|
||||||
actionpack (3.2.11)
|
actionpack (3.2.13)
|
||||||
activemodel (= 3.2.11)
|
activemodel (= 3.2.13)
|
||||||
activesupport (= 3.2.11)
|
activesupport (= 3.2.13)
|
||||||
builder (~> 3.0.0)
|
builder (~> 3.0.0)
|
||||||
erubis (~> 2.7.0)
|
erubis (~> 2.7.0)
|
||||||
journey (~> 1.0.4)
|
journey (~> 1.0.4)
|
||||||
rack (~> 1.4.0)
|
rack (~> 1.4.5)
|
||||||
rack-cache (~> 1.2)
|
rack-cache (~> 1.2)
|
||||||
rack-test (~> 0.6.1)
|
rack-test (~> 0.6.1)
|
||||||
sprockets (~> 2.2.1)
|
sprockets (~> 2.2.1)
|
||||||
activemodel (3.2.11)
|
activemodel (3.2.13)
|
||||||
activesupport (= 3.2.11)
|
activesupport (= 3.2.13)
|
||||||
builder (~> 3.0.0)
|
builder (~> 3.0.0)
|
||||||
activerecord (3.2.11)
|
activerecord (3.2.13)
|
||||||
activemodel (= 3.2.11)
|
activemodel (= 3.2.13)
|
||||||
activesupport (= 3.2.11)
|
activesupport (= 3.2.13)
|
||||||
arel (~> 3.0.2)
|
arel (~> 3.0.2)
|
||||||
tzinfo (~> 0.3.29)
|
tzinfo (~> 0.3.29)
|
||||||
activeresource (3.2.11)
|
activeresource (3.2.13)
|
||||||
activemodel (= 3.2.11)
|
activemodel (= 3.2.13)
|
||||||
activesupport (= 3.2.11)
|
activesupport (= 3.2.13)
|
||||||
activesupport (3.2.11)
|
activesupport (3.2.13)
|
||||||
i18n (~> 0.6)
|
i18n (= 0.6.1)
|
||||||
multi_json (~> 1.0)
|
multi_json (~> 1.0)
|
||||||
acts-as-taggable-on (2.3.3)
|
acts-as-taggable-on (2.3.3)
|
||||||
rails (~> 3.0)
|
rails (~> 3.0)
|
||||||
addressable (2.3.2)
|
addressable (2.3.2)
|
||||||
arel (3.0.2)
|
arel (3.0.2)
|
||||||
awesome_print (1.1.0)
|
awesome_print (1.1.0)
|
||||||
backports (2.6.5)
|
backports (2.6.7)
|
||||||
bcrypt-ruby (3.0.1)
|
bcrypt-ruby (3.0.1)
|
||||||
blankslate (3.1.2)
|
better_errors (0.3.2)
|
||||||
|
coderay (>= 1.0.0)
|
||||||
|
erubis (>= 2.7.0)
|
||||||
|
binding_of_caller (0.7.1)
|
||||||
|
debug_inspector (>= 0.0.1)
|
||||||
bootstrap-sass (2.2.1.1)
|
bootstrap-sass (2.2.1.1)
|
||||||
sass (~> 3.2)
|
sass (~> 3.2)
|
||||||
builder (3.0.4)
|
builder (3.0.4)
|
||||||
capybara (1.1.3)
|
capybara (2.0.2)
|
||||||
mime-types (>= 1.16)
|
mime-types (>= 1.16)
|
||||||
nokogiri (>= 1.3.3)
|
nokogiri (>= 1.3.3)
|
||||||
rack (>= 1.0.0)
|
rack (>= 1.0.0)
|
||||||
rack-test (>= 0.5.4)
|
rack-test (>= 0.5.4)
|
||||||
selenium-webdriver (~> 2.0)
|
selenium-webdriver (~> 2.0)
|
||||||
xpath (~> 0.1.4)
|
xpath (~> 1.0.0)
|
||||||
carrierwave (0.7.1)
|
carrierwave (0.8.0)
|
||||||
activemodel (>= 3.2.0)
|
activemodel (>= 3.2.0)
|
||||||
activesupport (>= 3.2.0)
|
activesupport (>= 3.2.0)
|
||||||
|
celluloid (0.12.4)
|
||||||
|
facter (>= 1.6.12)
|
||||||
|
timers (>= 1.0.0)
|
||||||
charlock_holmes (0.6.9)
|
charlock_holmes (0.6.9)
|
||||||
childprocess (0.3.6)
|
childprocess (0.3.8)
|
||||||
ffi (~> 1.0, >= 1.0.6)
|
ffi (~> 1.0, >= 1.0.11)
|
||||||
chosen-rails (0.9.8)
|
chosen-rails (0.9.8)
|
||||||
railties (~> 3.0)
|
railties (~> 3.0)
|
||||||
thor (~> 0.14)
|
thor (~> 0.14)
|
||||||
coderay (1.0.8)
|
code_analyzer (0.3.1)
|
||||||
|
sexp_processor
|
||||||
|
coderay (1.0.9)
|
||||||
coffee-rails (3.2.2)
|
coffee-rails (3.2.2)
|
||||||
coffee-script (>= 2.2.0)
|
coffee-script (>= 2.2.0)
|
||||||
railties (~> 3.2.0)
|
railties (~> 3.2.0)
|
||||||
|
@ -145,40 +115,54 @@ GEM
|
||||||
coffee-script-source (1.4.0)
|
coffee-script-source (1.4.0)
|
||||||
colored (1.2)
|
colored (1.2)
|
||||||
colorize (0.5.8)
|
colorize (0.5.8)
|
||||||
crack (0.3.1)
|
connection_pool (1.0.0)
|
||||||
|
coveralls (0.6.2)
|
||||||
|
colorize
|
||||||
|
multi_json (~> 1.3)
|
||||||
|
rest-client
|
||||||
|
simplecov (>= 0.7)
|
||||||
|
thor
|
||||||
|
crack (0.3.2)
|
||||||
daemons (1.1.9)
|
daemons (1.1.9)
|
||||||
devise (2.1.2)
|
database_cleaner (0.9.1)
|
||||||
|
debug_inspector (0.0.2)
|
||||||
|
descendants_tracker (0.0.1)
|
||||||
|
devise (2.2.3)
|
||||||
bcrypt-ruby (~> 3.0)
|
bcrypt-ruby (~> 3.0)
|
||||||
orm_adapter (~> 0.1)
|
orm_adapter (~> 0.1)
|
||||||
railties (~> 3.1)
|
railties (~> 3.1)
|
||||||
warden (~> 1.2.1)
|
warden (~> 1.2.1)
|
||||||
diff-lcs (1.1.3)
|
diff-lcs (1.2.1)
|
||||||
draper (0.18.0)
|
draper (1.1.0)
|
||||||
actionpack (~> 3.2)
|
actionpack (>= 3.0)
|
||||||
activesupport (~> 3.2)
|
activesupport (>= 3.0)
|
||||||
|
request_store (~> 1.0.3)
|
||||||
email_spec (1.4.0)
|
email_spec (1.4.0)
|
||||||
launchy (~> 2.1)
|
launchy (~> 2.1)
|
||||||
mail (~> 2.2)
|
mail (~> 2.2)
|
||||||
|
enumerize (0.5.1)
|
||||||
|
activesupport (>= 3.2)
|
||||||
erubis (2.7.0)
|
erubis (2.7.0)
|
||||||
escape_utils (0.2.4)
|
escape_utils (0.2.4)
|
||||||
eventmachine (1.0.0)
|
eventmachine (1.0.0)
|
||||||
execjs (1.4.0)
|
execjs (1.4.0)
|
||||||
multi_json (~> 1.0)
|
multi_json (~> 1.0)
|
||||||
|
facter (1.6.18)
|
||||||
factory_girl (4.1.0)
|
factory_girl (4.1.0)
|
||||||
activesupport (>= 3.0.0)
|
activesupport (>= 3.0.0)
|
||||||
factory_girl_rails (4.1.0)
|
factory_girl_rails (4.1.0)
|
||||||
factory_girl (~> 4.1.0)
|
factory_girl (~> 4.1.0)
|
||||||
railties (>= 3.0.0)
|
railties (>= 3.0.0)
|
||||||
faraday (0.8.4)
|
faraday (0.8.6)
|
||||||
multipart-post (~> 1.1)
|
multipart-post (~> 1.1)
|
||||||
faye-websocket (0.4.6)
|
faye-websocket (0.4.7)
|
||||||
eventmachine (>= 0.12.0)
|
eventmachine (>= 0.12.0)
|
||||||
ffaker (1.15.0)
|
ffaker (1.15.0)
|
||||||
ffi (1.1.5)
|
ffi (1.4.0)
|
||||||
font-awesome-sass-rails (2.0.0.0)
|
font-awesome-sass-rails (3.0.0.1)
|
||||||
railties (>= 3.1.1)
|
railties (>= 3.1.1)
|
||||||
sass-rails (>= 3.1.1)
|
sass-rails (>= 3.1.1)
|
||||||
foreman (0.60.2)
|
foreman (0.61.0)
|
||||||
thor (>= 0.13.6)
|
thor (>= 0.13.6)
|
||||||
gemoji (1.2.1)
|
gemoji (1.2.1)
|
||||||
gherkin-ruby (0.2.1)
|
gherkin-ruby (0.2.1)
|
||||||
|
@ -188,48 +172,62 @@ GEM
|
||||||
escape_utils (~> 0.2.3)
|
escape_utils (~> 0.2.3)
|
||||||
mime-types (~> 1.19)
|
mime-types (~> 1.19)
|
||||||
pygments.rb (>= 0.2.13)
|
pygments.rb (>= 0.2.13)
|
||||||
github-markup (0.7.4)
|
github-markdown (0.5.3)
|
||||||
gitlab_meta (4.0)
|
github-markup (0.7.5)
|
||||||
gitolite (1.1.0)
|
gitlab-grack (1.0.0)
|
||||||
gratr19 (~> 0.4.4.1)
|
rack (~> 1.4.1)
|
||||||
grit (~> 2.5.0)
|
gitlab-pygments.rb (0.3.2)
|
||||||
hashery (~> 1.5.0)
|
posix-spawn (~> 0.3.6)
|
||||||
grape (0.2.2)
|
yajl-ruby (~> 1.1.0)
|
||||||
|
gitlab_meta (5.0)
|
||||||
|
gitlab_omniauth-ldap (1.0.2)
|
||||||
|
net-ldap (~> 0.2.2)
|
||||||
|
omniauth (~> 1.0)
|
||||||
|
pyu-ruby-sasl (~> 0.0.3.1)
|
||||||
|
rubyntlm (~> 0.1.1)
|
||||||
|
gitlab_yaml_db (1.0.0)
|
||||||
|
gon (4.0.2)
|
||||||
|
grape (0.3.2)
|
||||||
activesupport
|
activesupport
|
||||||
hashie (~> 1.2)
|
builder
|
||||||
|
hashie (>= 1.2.0)
|
||||||
multi_json (>= 1.3.2)
|
multi_json (>= 1.3.2)
|
||||||
multi_xml
|
multi_xml (>= 0.5.2)
|
||||||
rack
|
rack
|
||||||
rack-accept
|
rack-accept
|
||||||
rack-mount
|
rack-mount
|
||||||
virtus
|
virtus
|
||||||
gratr19 (0.4.4.1)
|
grape-entity (0.2.0)
|
||||||
|
activesupport
|
||||||
|
multi_json (>= 1.3.2)
|
||||||
|
grit_ext (0.8.1)
|
||||||
|
charlock_holmes (~> 0.6.9)
|
||||||
growl (1.0.3)
|
growl (1.0.3)
|
||||||
guard (1.5.4)
|
guard (1.6.2)
|
||||||
listen (>= 0.4.2)
|
listen (>= 0.6.0)
|
||||||
lumberjack (>= 1.0.2)
|
lumberjack (>= 1.0.2)
|
||||||
pry (>= 0.9.10)
|
pry (>= 0.9.10)
|
||||||
|
terminal-table (>= 1.4.3)
|
||||||
thor (>= 0.14.6)
|
thor (>= 0.14.6)
|
||||||
guard-rspec (2.1.2)
|
guard-rspec (2.5.1)
|
||||||
guard (>= 1.1)
|
guard (>= 1.1)
|
||||||
rspec (~> 2.11)
|
rspec (~> 2.11)
|
||||||
guard-spinach (0.0.2)
|
guard-spinach (0.0.2)
|
||||||
guard (>= 1.1)
|
guard (>= 1.1)
|
||||||
spinach
|
spinach
|
||||||
haml (3.1.7)
|
haml (4.0.0)
|
||||||
haml-rails (0.3.5)
|
tilt
|
||||||
|
haml-rails (0.4)
|
||||||
actionpack (>= 3.1, < 4.1)
|
actionpack (>= 3.1, < 4.1)
|
||||||
activesupport (>= 3.1, < 4.1)
|
activesupport (>= 3.1, < 4.1)
|
||||||
haml (~> 3.1)
|
haml (>= 3.1, < 4.1)
|
||||||
railties (>= 3.1, < 4.1)
|
railties (>= 3.1, < 4.1)
|
||||||
hashery (1.5.0)
|
|
||||||
blankslate
|
|
||||||
hashie (1.2.0)
|
hashie (1.2.0)
|
||||||
hike (1.2.1)
|
hike (1.2.1)
|
||||||
http_parser.rb (0.5.3)
|
http_parser.rb (0.5.3)
|
||||||
httparty (0.9.0)
|
httparty (0.10.2)
|
||||||
multi_json (~> 1.0)
|
multi_json (~> 1.0)
|
||||||
multi_xml
|
multi_xml (>= 0.5.2)
|
||||||
httpauth (0.2.0)
|
httpauth (0.2.0)
|
||||||
i18n (0.6.1)
|
i18n (0.6.1)
|
||||||
journey (1.0.4)
|
journey (1.0.4)
|
||||||
|
@ -240,47 +238,46 @@ GEM
|
||||||
jquery-ui-rails (2.0.2)
|
jquery-ui-rails (2.0.2)
|
||||||
jquery-rails
|
jquery-rails
|
||||||
railties (>= 3.1.0)
|
railties (>= 3.1.0)
|
||||||
json (1.7.6)
|
json (1.7.7)
|
||||||
jwt (0.1.5)
|
jwt (0.1.5)
|
||||||
multi_json (>= 1.0)
|
multi_json (>= 1.0)
|
||||||
kaminari (0.14.1)
|
kaminari (0.14.1)
|
||||||
actionpack (>= 3.0.0)
|
actionpack (>= 3.0.0)
|
||||||
activesupport (>= 3.0.0)
|
activesupport (>= 3.0.0)
|
||||||
kgio (2.7.4)
|
kgio (2.8.0)
|
||||||
launchy (2.1.2)
|
launchy (2.1.2)
|
||||||
addressable (~> 2.3)
|
addressable (~> 2.3)
|
||||||
letter_opener (1.0.0)
|
letter_opener (1.0.0)
|
||||||
launchy (>= 2.0.4)
|
launchy (>= 2.0.4)
|
||||||
libv8 (3.3.10.4)
|
libv8 (3.11.8.17)
|
||||||
libwebsocket (0.1.6)
|
listen (0.7.3)
|
||||||
websocket
|
lumberjack (1.0.3)
|
||||||
listen (0.5.3)
|
mail (2.5.3)
|
||||||
lumberjack (1.0.2)
|
|
||||||
mail (2.4.4)
|
|
||||||
i18n (>= 0.4.0)
|
i18n (>= 0.4.0)
|
||||||
mime-types (~> 1.16)
|
mime-types (~> 1.16)
|
||||||
treetop (~> 1.4.8)
|
treetop (~> 1.4.8)
|
||||||
method_source (0.8.1)
|
method_source (0.8.1)
|
||||||
mime-types (1.19)
|
mime-types (1.21)
|
||||||
modernizr (2.6.2)
|
modernizr (2.6.2)
|
||||||
sprockets (~> 2.0)
|
sprockets (~> 2.0)
|
||||||
multi_json (1.5.0)
|
multi_json (1.7.2)
|
||||||
multi_xml (0.5.1)
|
multi_xml (0.5.3)
|
||||||
multipart-post (1.1.5)
|
multipart-post (1.1.5)
|
||||||
|
mustache (0.99.4)
|
||||||
mysql2 (0.3.11)
|
mysql2 (0.3.11)
|
||||||
net-ldap (0.2.2)
|
net-ldap (0.2.2)
|
||||||
nokogiri (1.5.5)
|
nokogiri (1.5.6)
|
||||||
oauth (0.4.7)
|
oauth (0.4.7)
|
||||||
oauth2 (0.8.0)
|
oauth2 (0.8.1)
|
||||||
faraday (~> 0.8)
|
faraday (~> 0.8)
|
||||||
httpauth (~> 0.1)
|
httpauth (~> 0.1)
|
||||||
jwt (~> 0.1.4)
|
jwt (~> 0.1.4)
|
||||||
multi_json (~> 1.0)
|
multi_json (~> 1.0)
|
||||||
rack (~> 1.2)
|
rack (~> 1.2)
|
||||||
omniauth (1.1.1)
|
omniauth (1.1.3)
|
||||||
hashie (~> 1.2)
|
hashie (~> 1.2)
|
||||||
rack
|
rack
|
||||||
omniauth-github (1.0.3)
|
omniauth-github (1.1.0)
|
||||||
omniauth (~> 1.0)
|
omniauth (~> 1.0)
|
||||||
omniauth-oauth2 (~> 1.1)
|
omniauth-oauth2 (~> 1.1)
|
||||||
omniauth-google-oauth2 (0.1.13)
|
omniauth-google-oauth2 (0.1.13)
|
||||||
|
@ -297,16 +294,23 @@ GEM
|
||||||
omniauth-oauth (~> 1.0)
|
omniauth-oauth (~> 1.0)
|
||||||
orm_adapter (0.4.0)
|
orm_adapter (0.4.0)
|
||||||
pg (0.14.1)
|
pg (0.14.1)
|
||||||
|
poltergeist (1.1.0)
|
||||||
|
capybara (~> 2.0, >= 2.0.1)
|
||||||
|
faye-websocket (~> 0.4, >= 0.4.4)
|
||||||
|
http_parser.rb (~> 0.5.3)
|
||||||
polyglot (0.3.3)
|
polyglot (0.3.3)
|
||||||
posix-spawn (0.3.6)
|
posix-spawn (0.3.6)
|
||||||
pry (0.9.10)
|
pry (0.9.12)
|
||||||
coderay (~> 1.0.5)
|
coderay (~> 1.0.5)
|
||||||
method_source (~> 0.8)
|
method_source (~> 0.8)
|
||||||
slop (~> 3.3.1)
|
slop (~> 3.4)
|
||||||
|
pygments.rb (0.4.2)
|
||||||
|
posix-spawn (~> 0.3.6)
|
||||||
|
yajl-ruby (~> 1.1.0)
|
||||||
pyu-ruby-sasl (0.0.3.3)
|
pyu-ruby-sasl (0.0.3.3)
|
||||||
quiet_assets (1.0.1)
|
quiet_assets (1.0.1)
|
||||||
railties (~> 3.1)
|
railties (~> 3.1)
|
||||||
rack (1.4.3)
|
rack (1.4.5)
|
||||||
rack-accept (0.4.5)
|
rack-accept (0.4.5)
|
||||||
rack (>= 0.4)
|
rack (>= 0.4)
|
||||||
rack-cache (1.2)
|
rack-cache (1.2)
|
||||||
|
@ -315,139 +319,182 @@ GEM
|
||||||
rack (>= 1.1.3)
|
rack (>= 1.1.3)
|
||||||
rack-mount (0.8.3)
|
rack-mount (0.8.3)
|
||||||
rack (>= 1.0.0)
|
rack (>= 1.0.0)
|
||||||
rack-protection (1.2.0)
|
rack-protection (1.4.0)
|
||||||
rack
|
rack
|
||||||
rack-ssl (1.3.2)
|
rack-ssl (1.3.3)
|
||||||
rack
|
rack
|
||||||
rack-test (0.6.2)
|
rack-test (0.6.2)
|
||||||
rack (>= 1.0)
|
rack (>= 1.0)
|
||||||
rails (3.2.11)
|
rails (3.2.13)
|
||||||
actionmailer (= 3.2.11)
|
actionmailer (= 3.2.13)
|
||||||
actionpack (= 3.2.11)
|
actionpack (= 3.2.13)
|
||||||
activerecord (= 3.2.11)
|
activerecord (= 3.2.13)
|
||||||
activeresource (= 3.2.11)
|
activeresource (= 3.2.13)
|
||||||
activesupport (= 3.2.11)
|
activesupport (= 3.2.13)
|
||||||
bundler (~> 1.0)
|
bundler (~> 1.0)
|
||||||
railties (= 3.2.11)
|
railties (= 3.2.13)
|
||||||
rails-dev-tweaks (0.6.1)
|
rails-dev-tweaks (0.6.1)
|
||||||
actionpack (~> 3.1)
|
actionpack (~> 3.1)
|
||||||
railties (~> 3.1)
|
railties (~> 3.1)
|
||||||
railties (3.2.11)
|
rails_best_practices (1.13.4)
|
||||||
actionpack (= 3.2.11)
|
activesupport
|
||||||
activesupport (= 3.2.11)
|
awesome_print
|
||||||
|
code_analyzer
|
||||||
|
colored
|
||||||
|
erubis
|
||||||
|
i18n
|
||||||
|
ruby-progressbar
|
||||||
|
railties (3.2.13)
|
||||||
|
actionpack (= 3.2.13)
|
||||||
|
activesupport (= 3.2.13)
|
||||||
rack-ssl (~> 1.3.2)
|
rack-ssl (~> 1.3.2)
|
||||||
rake (>= 0.8.7)
|
rake (>= 0.8.7)
|
||||||
rdoc (~> 3.4)
|
rdoc (~> 3.4)
|
||||||
thor (>= 0.14.6, < 2.0)
|
thor (>= 0.14.6, < 2.0)
|
||||||
raindrops (0.10.0)
|
raindrops (0.10.0)
|
||||||
rake (10.0.3)
|
rake (10.0.4)
|
||||||
raphael-rails (1.5.2)
|
|
||||||
rb-fsevent (0.9.2)
|
rb-fsevent (0.9.2)
|
||||||
rb-inotify (0.8.8)
|
rb-inotify (0.8.8)
|
||||||
ffi (>= 0.5.0)
|
ffi (>= 0.5.0)
|
||||||
rdoc (3.12)
|
rdoc (3.12.2)
|
||||||
json (~> 1.4)
|
json (~> 1.4)
|
||||||
redcarpet (2.2.2)
|
redcarpet (2.2.2)
|
||||||
redis (3.0.2)
|
redis (3.0.3)
|
||||||
|
redis-actionpack (3.2.3)
|
||||||
|
actionpack (~> 3.2.3)
|
||||||
|
redis-rack (~> 1.4.0)
|
||||||
|
redis-store (~> 1.1.0)
|
||||||
|
redis-activesupport (3.2.3)
|
||||||
|
activesupport (~> 3.2.3)
|
||||||
|
redis-store (~> 1.1.0)
|
||||||
redis-namespace (1.2.1)
|
redis-namespace (1.2.1)
|
||||||
redis (~> 3.0.0)
|
redis (~> 3.0.0)
|
||||||
resque (1.23.0)
|
redis-rack (1.4.2)
|
||||||
multi_json (~> 1.0)
|
rack (~> 1.4.1)
|
||||||
redis-namespace (~> 1.0)
|
redis-store (~> 1.1.0)
|
||||||
sinatra (>= 0.9.2)
|
redis-rails (3.2.3)
|
||||||
vegas (~> 0.1.2)
|
redis-actionpack (~> 3.2.3)
|
||||||
resque_mailer (2.1.0)
|
redis-activesupport (~> 3.2.3)
|
||||||
actionmailer (~> 3.0)
|
redis-store (~> 1.1.0)
|
||||||
resque_spec (0.12.5)
|
redis-store (1.1.3)
|
||||||
resque (>= 1.19.0)
|
redis (>= 2.2.0)
|
||||||
rspec (>= 2.5.0)
|
ref (1.0.4)
|
||||||
rspec (2.12.0)
|
request_store (1.0.5)
|
||||||
rspec-core (~> 2.12.0)
|
rest-client (1.6.7)
|
||||||
rspec-expectations (~> 2.12.0)
|
mime-types (>= 1.16)
|
||||||
rspec-mocks (~> 2.12.0)
|
rspec (2.13.0)
|
||||||
rspec-core (2.12.0)
|
rspec-core (~> 2.13.0)
|
||||||
rspec-expectations (2.12.0)
|
rspec-expectations (~> 2.13.0)
|
||||||
diff-lcs (~> 1.1.3)
|
rspec-mocks (~> 2.13.0)
|
||||||
rspec-mocks (2.12.0)
|
rspec-core (2.13.1)
|
||||||
rspec-rails (2.12.0)
|
rspec-expectations (2.13.0)
|
||||||
|
diff-lcs (>= 1.1.3, < 2.0)
|
||||||
|
rspec-mocks (2.13.0)
|
||||||
|
rspec-rails (2.13.0)
|
||||||
actionpack (>= 3.0)
|
actionpack (>= 3.0)
|
||||||
activesupport (>= 3.0)
|
activesupport (>= 3.0)
|
||||||
railties (>= 3.0)
|
railties (>= 3.0)
|
||||||
rspec-core (~> 2.12.0)
|
rspec-core (~> 2.13.0)
|
||||||
rspec-expectations (~> 2.12.0)
|
rspec-expectations (~> 2.13.0)
|
||||||
rspec-mocks (~> 2.12.0)
|
rspec-mocks (~> 2.13.0)
|
||||||
|
ruby-progressbar (1.0.2)
|
||||||
rubyntlm (0.1.1)
|
rubyntlm (0.1.1)
|
||||||
rubyzip (0.9.9)
|
rubyzip (0.9.9)
|
||||||
sass (3.2.3)
|
sanitize (2.0.3)
|
||||||
sass-rails (3.2.5)
|
nokogiri (>= 1.4.4, < 1.6)
|
||||||
|
sass (3.2.7)
|
||||||
|
sass-rails (3.2.6)
|
||||||
railties (~> 3.2.0)
|
railties (~> 3.2.0)
|
||||||
sass (>= 3.1.10)
|
sass (>= 3.1.10)
|
||||||
tilt (~> 1.3)
|
tilt (~> 1.3)
|
||||||
|
sdoc (0.3.20)
|
||||||
|
json (>= 1.1.3)
|
||||||
|
rdoc (~> 3.10)
|
||||||
seed-fu (2.2.0)
|
seed-fu (2.2.0)
|
||||||
activerecord (~> 3.1)
|
activerecord (~> 3.1)
|
||||||
activesupport (~> 3.1)
|
activesupport (~> 3.1)
|
||||||
selenium-webdriver (2.26.0)
|
select2-rails (3.3.1)
|
||||||
|
sass-rails (>= 3.2)
|
||||||
|
thor (~> 0.14)
|
||||||
|
selenium-webdriver (2.30.0)
|
||||||
childprocess (>= 0.2.5)
|
childprocess (>= 0.2.5)
|
||||||
libwebsocket (~> 0.1.3)
|
|
||||||
multi_json (~> 1.0)
|
multi_json (~> 1.0)
|
||||||
rubyzip
|
rubyzip
|
||||||
settingslogic (2.0.8)
|
websocket (~> 1.0.4)
|
||||||
|
settingslogic (2.0.9)
|
||||||
|
sexp_processor (4.2.0)
|
||||||
shoulda-matchers (1.3.0)
|
shoulda-matchers (1.3.0)
|
||||||
activesupport (>= 3.0.0)
|
activesupport (>= 3.0.0)
|
||||||
|
sidekiq (2.8.0)
|
||||||
|
celluloid (~> 0.12.0)
|
||||||
|
connection_pool (~> 1.0)
|
||||||
|
multi_json (~> 1)
|
||||||
|
redis (~> 3)
|
||||||
|
redis-namespace
|
||||||
simplecov (0.7.1)
|
simplecov (0.7.1)
|
||||||
multi_json (~> 1.0)
|
multi_json (~> 1.0)
|
||||||
simplecov-html (~> 0.7.1)
|
simplecov-html (~> 0.7.1)
|
||||||
simplecov-html (0.7.1)
|
simplecov-html (0.7.1)
|
||||||
sinatra (1.3.3)
|
sinatra (1.3.5)
|
||||||
rack (~> 1.3, >= 1.3.6)
|
rack (~> 1.4)
|
||||||
rack-protection (~> 1.2)
|
rack-protection (~> 1.3)
|
||||||
tilt (~> 1.3, >= 1.3.3)
|
tilt (~> 1.3, >= 1.3.3)
|
||||||
six (0.2.0)
|
six (0.2.0)
|
||||||
slop (3.3.3)
|
slim (1.3.6)
|
||||||
spinach (0.5.2)
|
temple (~> 0.5.5)
|
||||||
|
tilt (~> 1.3.3)
|
||||||
|
slop (3.4.4)
|
||||||
|
spinach (0.7.0)
|
||||||
colorize
|
colorize
|
||||||
gherkin-ruby (~> 0.2.0)
|
gherkin-ruby (~> 0.2.0)
|
||||||
spinach-rails (0.1.8)
|
spinach-rails (0.2.0)
|
||||||
capybara (~> 1)
|
capybara (~> 2.0.0)
|
||||||
railties (>= 3)
|
railties (>= 3)
|
||||||
spinach (>= 0.4)
|
spinach (>= 0.4)
|
||||||
|
spork (1.0.0rc3)
|
||||||
sprockets (2.2.2)
|
sprockets (2.2.2)
|
||||||
hike (~> 1.2)
|
hike (~> 1.2)
|
||||||
multi_json (~> 1.0)
|
multi_json (~> 1.0)
|
||||||
rack (~> 1.0)
|
rack (~> 1.0)
|
||||||
tilt (~> 1.1, != 1.3.0)
|
tilt (~> 1.1, != 1.3.0)
|
||||||
stamp (0.3.0)
|
stamp (0.5.0)
|
||||||
|
state_machine (1.1.2)
|
||||||
|
stringex (1.5.1)
|
||||||
|
temple (0.5.5)
|
||||||
|
terminal-table (1.4.5)
|
||||||
test_after_commit (0.0.1)
|
test_after_commit (0.0.1)
|
||||||
therubyracer (0.10.2)
|
therubyracer (0.11.4)
|
||||||
libv8 (~> 3.3.10)
|
libv8 (~> 3.11.8.12)
|
||||||
|
ref
|
||||||
thin (1.5.0)
|
thin (1.5.0)
|
||||||
daemons (>= 1.0.9)
|
daemons (>= 1.0.9)
|
||||||
eventmachine (>= 0.12.6)
|
eventmachine (>= 0.12.6)
|
||||||
rack (>= 1.0.0)
|
rack (>= 1.0.0)
|
||||||
thor (0.16.0)
|
thor (0.18.0)
|
||||||
tilt (1.3.3)
|
tilt (1.3.6)
|
||||||
|
timers (1.1.0)
|
||||||
treetop (1.4.12)
|
treetop (1.4.12)
|
||||||
polyglot
|
polyglot
|
||||||
polyglot (>= 0.3.1)
|
polyglot (>= 0.3.1)
|
||||||
tzinfo (0.3.35)
|
tzinfo (0.3.37)
|
||||||
uglifier (1.3.0)
|
uglifier (1.3.0)
|
||||||
execjs (>= 0.3.0)
|
execjs (>= 0.3.0)
|
||||||
multi_json (~> 1.0, >= 1.0.2)
|
multi_json (~> 1.0, >= 1.0.2)
|
||||||
unicorn (4.4.0)
|
unicorn (4.6.2)
|
||||||
kgio (~> 2.6)
|
kgio (~> 2.6)
|
||||||
rack
|
rack
|
||||||
raindrops (~> 0.7)
|
raindrops (~> 0.7)
|
||||||
vegas (0.1.11)
|
useragent (0.4.16)
|
||||||
rack (>= 1.0.0)
|
virtus (0.5.4)
|
||||||
virtus (0.5.2)
|
|
||||||
backports (~> 2.6.1)
|
backports (~> 2.6.1)
|
||||||
|
descendants_tracker (~> 0.0.1)
|
||||||
warden (1.2.1)
|
warden (1.2.1)
|
||||||
rack (>= 1.0)
|
rack (>= 1.0)
|
||||||
webmock (1.9.0)
|
webmock (1.9.0)
|
||||||
addressable (>= 2.2.7)
|
addressable (>= 2.2.7)
|
||||||
crack (>= 0.1.7)
|
crack (>= 0.1.7)
|
||||||
websocket (1.0.2)
|
websocket (1.0.7)
|
||||||
xpath (0.1.4)
|
xpath (1.0.0)
|
||||||
nokogiri (~> 1.3)
|
nokogiri (~> 1.3)
|
||||||
yajl-ruby (1.1.0)
|
yajl-ruby (1.1.0)
|
||||||
|
|
||||||
|
@ -458,34 +505,43 @@ DEPENDENCIES
|
||||||
acts-as-taggable-on (= 2.3.3)
|
acts-as-taggable-on (= 2.3.3)
|
||||||
annotate!
|
annotate!
|
||||||
awesome_print
|
awesome_print
|
||||||
|
better_errors
|
||||||
|
binding_of_caller
|
||||||
bootstrap-sass (= 2.2.1.1)
|
bootstrap-sass (= 2.2.1.1)
|
||||||
capybara
|
capybara
|
||||||
carrierwave (~> 0.7.1)
|
carrierwave
|
||||||
chosen-rails (= 0.9.8)
|
chosen-rails (= 0.9.8)
|
||||||
coffee-rails (~> 3.2.2)
|
coffee-rails (~> 3.2.2)
|
||||||
colored
|
colored
|
||||||
database_cleaner!
|
coveralls
|
||||||
devise (~> 2.1.0)
|
database_cleaner
|
||||||
draper (~> 0.18.0)
|
devise
|
||||||
|
draper
|
||||||
email_spec
|
email_spec
|
||||||
|
enumerize
|
||||||
factory_girl_rails
|
factory_girl_rails
|
||||||
ffaker
|
ffaker
|
||||||
font-awesome-sass-rails (~> 2.0.0)
|
font-awesome-sass-rails (~> 3.0.0)
|
||||||
foreman
|
foreman
|
||||||
gemoji (~> 1.2.1)
|
gemoji (~> 1.2.1)
|
||||||
git
|
git
|
||||||
github-linguist (~> 2.3.4)
|
github-linguist (~> 2.3.4)
|
||||||
github-markup (~> 0.7.4)
|
github-markup (~> 0.7.4)
|
||||||
gitlab_meta (= 4.0)
|
gitlab-grack (~> 1.0.0)
|
||||||
gitolite (= 1.1.0)
|
gitlab-pygments.rb (~> 0.3.2)
|
||||||
grack!
|
gitlab_meta (= 5.0)
|
||||||
grape (~> 0.2.1)
|
gitlab_omniauth-ldap (= 1.0.2)
|
||||||
grit!
|
gitlab_yaml_db (= 1.0.0)
|
||||||
grit_ext!
|
gollum (~> 2.4.0)!
|
||||||
|
gon
|
||||||
|
grape (~> 0.3.1)
|
||||||
|
grape-entity (~> 0.2.0)
|
||||||
|
grit (~> 2.5.0)!
|
||||||
|
grit_ext (~> 0.8.1)
|
||||||
growl
|
growl
|
||||||
guard-rspec
|
guard-rspec
|
||||||
guard-spinach
|
guard-spinach
|
||||||
haml-rails (~> 0.3.5)
|
haml-rails
|
||||||
httparty
|
httparty
|
||||||
jquery-atwho-rails (= 0.1.7)
|
jquery-atwho-rails (= 0.1.7)
|
||||||
jquery-rails (= 2.1.3)
|
jquery-rails (= 2.1.3)
|
||||||
|
@ -495,39 +551,42 @@ DEPENDENCIES
|
||||||
letter_opener
|
letter_opener
|
||||||
modernizr (= 2.6.2)
|
modernizr (= 2.6.2)
|
||||||
mysql2
|
mysql2
|
||||||
omniauth (~> 1.1.1)
|
omniauth (~> 1.1.3)
|
||||||
omniauth-github
|
omniauth-github
|
||||||
omniauth-google-oauth2
|
omniauth-google-oauth2
|
||||||
omniauth-ldap!
|
|
||||||
omniauth-twitter
|
omniauth-twitter
|
||||||
pg
|
pg
|
||||||
poltergeist!
|
poltergeist (= 1.1.0)
|
||||||
pry
|
pry
|
||||||
pygments.rb!
|
|
||||||
quiet_assets (~> 1.0.1)
|
quiet_assets (~> 1.0.1)
|
||||||
rack-mini-profiler
|
rack-mini-profiler
|
||||||
rails (= 3.2.11)
|
rails (= 3.2.13)
|
||||||
rails-dev-tweaks
|
rails-dev-tweaks
|
||||||
raphael-rails (= 1.5.2)
|
rails_best_practices
|
||||||
|
raphael-rails!
|
||||||
rb-fsevent
|
rb-fsevent
|
||||||
rb-inotify
|
rb-inotify
|
||||||
redcarpet (~> 2.2.2)
|
redcarpet (~> 2.2.2)
|
||||||
resque (~> 1.23.0)
|
redis-rails
|
||||||
resque_mailer
|
|
||||||
resque_spec
|
|
||||||
rspec-rails
|
rspec-rails
|
||||||
sass-rails (~> 3.2.5)
|
sass-rails (~> 3.2.5)
|
||||||
|
sdoc
|
||||||
seed-fu
|
seed-fu
|
||||||
|
select2-rails
|
||||||
settingslogic
|
settingslogic
|
||||||
shoulda-matchers (= 1.3.0)
|
shoulda-matchers (= 1.3.0)
|
||||||
|
sidekiq
|
||||||
simplecov
|
simplecov
|
||||||
|
sinatra
|
||||||
six
|
six
|
||||||
|
slim
|
||||||
spinach-rails
|
spinach-rails
|
||||||
|
spork (~> 1.0rc)
|
||||||
stamp
|
stamp
|
||||||
|
state_machine
|
||||||
test_after_commit
|
test_after_commit
|
||||||
therubyracer
|
therubyracer
|
||||||
thin (~> 1.5.0)
|
thin
|
||||||
uglifier (~> 1.3.0)
|
uglifier (~> 1.3.0)
|
||||||
unicorn (~> 4.4.0)
|
unicorn
|
||||||
webmock
|
webmock
|
||||||
yaml_db!
|
|
||||||
|
|
4
Procfile
|
@ -1,2 +1,2 @@
|
||||||
web: bundle exec rails s -p $PORT
|
web: bundle exec unicorn_rails -p $PORT
|
||||||
worker: bundle exec rake environment resque:work QUEUE=* VVERBOSE=1
|
worker: bundle exec sidekiq -q post_receive,mailer,system_hook,project_web_hook,common,default,gitlab_shell
|
||||||
|
|
165
README.md
|
@ -1,44 +1,161 @@
|
||||||
# Welcome to GitLab [![build status](https://secure.travis-ci.org/gitlabhq/gitlabhq.png)](https://travis-ci.org/gitlabhq/gitlabhq) [![build status](https://secure.travis-ci.org/gitlabhq/grit.png)](https://travis-ci.org/gitlabhq/grit) [![Code Climate](https://codeclimate.com/badge.png)](https://codeclimate.com/github/gitlabhq/gitlabhq) [![Dependency Status](https://gemnasium.com/gitlabhq/gitlabhq.png)](https://gemnasium.com/gitlabhq/gitlabhq)
|
## GitLab: self hosted Git management software
|
||||||
|
|
||||||
GitLab is a free project and repository management application
|
![logo](https://raw.github.com/gitlabhq/gitlabhq/master/public/gitlab_logo.png)
|
||||||
|
|
||||||
|
### GitLab allows you to
|
||||||
|
* keep your code secure on your own server
|
||||||
|
* manage repositories, users and access permissions
|
||||||
|
* communicate through issues, line-comments and wiki pages
|
||||||
|
* perform code review with merge requests
|
||||||
|
|
||||||
## Application details
|
### GitLab is
|
||||||
|
|
||||||
* based on Ruby on Rails
|
* powered by Ruby on Rails
|
||||||
* distributed under the MIT License
|
* completely free and open source (MIT license)
|
||||||
* works with gitolite
|
* used by more than 10.000 organizations to keep their code secure
|
||||||
|
|
||||||
## Requirements
|
### Code status
|
||||||
|
|
||||||
* Ubuntu/Debian
|
* [![build status](http://ci.gitlab.org/projects/1/status?ref=master)](http://ci.gitlab.org/projects/1?ref=master) ci.gitlab.org (master branch)
|
||||||
* ruby 1.9.3+
|
|
||||||
|
* [![build status](https://secure.travis-ci.org/gitlabhq/gitlabhq.png)](https://travis-ci.org/gitlabhq/gitlabhq) travis-ci.org (master branch)
|
||||||
|
|
||||||
|
* [![Code Climate](https://codeclimate.com/github/gitlabhq/gitlabhq.png)](https://codeclimate.com/github/gitlabhq/gitlabhq)
|
||||||
|
|
||||||
|
* [![Dependency Status](https://gemnasium.com/gitlabhq/gitlabhq.png)](https://gemnasium.com/gitlabhq/gitlabhq)
|
||||||
|
|
||||||
|
* [![Coverage Status](https://coveralls.io/repos/gitlabhq/gitlabhq/badge.png?branch=master)](https://coveralls.io/r/gitlabhq/gitlabhq)
|
||||||
|
|
||||||
|
### Resources
|
||||||
|
|
||||||
|
* GitLab.org community site: [Homepage](http://gitlab.org) [Screenshots](http://gitlab.org/screenshots/) [Blog](http://blog.gitlab.org/) [Demo](http://demo.gitlabhq.com/users/sign_in)
|
||||||
|
|
||||||
|
* GitLab.com commercial services: [Homepage](http://www.gitlab.com/) [Subscription](http://www.gitlab.com/subscription/) [Consultancy](http://www.gitlab.com/consultancy/) [GitLab Cloud](http://www.gitlab.com/cloud/) [Blog](http://blog.gitlab.com/)
|
||||||
|
|
||||||
|
* GitLab CI: [Readme](https://github.com/gitlabhq/gitlab-ci/blob/master/README.md) of the GitLab open-source continuous integration server
|
||||||
|
|
||||||
|
### Requirements
|
||||||
|
|
||||||
|
* Ubuntu/Debian**
|
||||||
|
* ruby 1.9.3
|
||||||
* MySQL
|
* MySQL
|
||||||
* git
|
* git
|
||||||
* gitolite
|
* gitlab-shell
|
||||||
* redis
|
* redis
|
||||||
|
|
||||||
## Install
|
** More details are in the [requirements doc](https://github.com/gitlabhq/gitlabhq/blob/master/doc/install/requirements.md)
|
||||||
|
|
||||||
Checkout wiki pages for installation information, migration, etc.
|
### Installation
|
||||||
|
|
||||||
## Community
|
#### Official production installation
|
||||||
|
|
||||||
[Google Group](https://groups.google.com/group/gitlabhq)
|
Follow the installation guide for production server.
|
||||||
|
|
||||||
## Contacts
|
* [Installation guide for latest stable release (5.0)](https://github.com/gitlabhq/gitlabhq/blob/5-0-stable/doc/install/installation.md) - **Recommended**
|
||||||
|
|
||||||
Twitter:
|
* [Installation guide for the current master branch (5.1)](https://github.com/gitlabhq/gitlabhq/blob/master/doc/install/installation.md)
|
||||||
|
|
||||||
* @gitlabhq
|
|
||||||
* @dzaporozhets
|
|
||||||
|
|
||||||
Email
|
#### Official development installation
|
||||||
|
|
||||||
* m@gitlabhq.com
|
If you want to contribute, please first read our [Contributing Guidelines](https://github.com/gitlabhq/gitlabhq/blob/master/CONTRIBUTING.md) and then we suggest you to use the Vagrant virtual machine project to get an environment working with all dependencies.
|
||||||
|
|
||||||
## Contribute
|
* [Vagrant virtual machine](https://github.com/gitlabhq/gitlab-vagrant-vm)
|
||||||
|
|
||||||
[Development Tips](https://github.com/gitlabhq/gitlabhq/blob/master/doc/development.md)
|
|
||||||
Want to help - send a pull request.
|
#### Unsupported production installation
|
||||||
We'll accept good pull requests.
|
|
||||||
|
* [GitLab recipes](https://github.com/gitlabhq/gitlab-recipes) for setup on different platforms
|
||||||
|
|
||||||
|
* [Unofficial installation guides](https://github.com/gitlabhq/gitlab-public-wiki/wiki/Unofficial-Installation-Guides)
|
||||||
|
|
||||||
|
* [BitNami one-click installers](http://bitnami.com/stack/gitlab)
|
||||||
|
|
||||||
|
* [TurnKey Linux virtual appliance](http://www.turnkeylinux.org/gitlab)
|
||||||
|
|
||||||
|
|
||||||
|
### New versions and upgrading
|
||||||
|
|
||||||
|
Each month on the 22th a new version is released together with an upgrade guide.
|
||||||
|
|
||||||
|
* [Upgrade guides](https://github.com/gitlabhq/gitlabhq/wiki)
|
||||||
|
|
||||||
|
* [Changelog](https://github.com/gitlabhq/gitlabhq/blob/master/CHANGELOG)
|
||||||
|
|
||||||
|
* [Roadmap](https://github.com/gitlabhq/gitlabhq/blob/master/ROADMAP.md)
|
||||||
|
|
||||||
|
|
||||||
|
### Getting started
|
||||||
|
|
||||||
|
1. The Installation guide contains instructions to download an init script and run that on boot. With the init script you can also start GitLab
|
||||||
|
|
||||||
|
sudo service gitlab start
|
||||||
|
|
||||||
|
or
|
||||||
|
|
||||||
|
sudo /etc/init.d/gitlab restart
|
||||||
|
|
||||||
|
2. Start it with [Foreman](https://github.com/ddollar/foreman) in development mode
|
||||||
|
|
||||||
|
bundle exec foreman start -p 3000
|
||||||
|
|
||||||
|
or start it manually
|
||||||
|
|
||||||
|
bundle exec rails s
|
||||||
|
bundle exec rake sidekiq:start
|
||||||
|
|
||||||
|
### Running the tests
|
||||||
|
|
||||||
|
* Seed the database
|
||||||
|
|
||||||
|
bundle exec rake db:setup RAILS_ENV=test
|
||||||
|
bundle exec rake db:seed_fu RAILS_ENV=test
|
||||||
|
|
||||||
|
* Run all tests
|
||||||
|
|
||||||
|
bundle exec rake gitlab:test
|
||||||
|
|
||||||
|
* Rspec unit and functional tests
|
||||||
|
|
||||||
|
bundle exec rake spec
|
||||||
|
|
||||||
|
* Spinach integration tests
|
||||||
|
|
||||||
|
bundle exec rake spinach
|
||||||
|
|
||||||
|
|
||||||
|
### GitLab interfaces
|
||||||
|
|
||||||
|
* [GitLab API](https://github.com/gitlabhq/gitlabhq/blob/master/doc/api/README.md)
|
||||||
|
|
||||||
|
* [Rake tasks](https://github.com/gitlabhq/gitlabhq/tree/master/doc/raketasks)
|
||||||
|
|
||||||
|
* [Directory structure](https://github.com/gitlabhq/gitlabhq/blob/master/doc/install/structure.md)
|
||||||
|
|
||||||
|
* [Databases](https://github.com/gitlabhq/gitlabhq/blob/master/doc/install/databases.md)
|
||||||
|
|
||||||
|
|
||||||
|
### Getting help
|
||||||
|
|
||||||
|
* [Troubleshooting guide](https://github.com/gitlabhq/gitlab-public-wiki/wiki/Trouble-Shooting-Guide) contains solutions to common problems.
|
||||||
|
|
||||||
|
* [Support forum](https://groups.google.com/forum/#!forum/gitlabhq) is the best place to ask questions. For example you can use it if you have questions about: permission denied errors, invisible repos, can't clone/pull/push or with web hooks that don't fire. Please search for similar issues before posting your own, there's a good chance somebody else had the same issue you have now and had it resolved. There are a lot of helpful GitLab users there who may be able to help you quickly. If your particular issue turns out to be a bug, it will find its way from there to a fix.
|
||||||
|
|
||||||
|
* [Feedback and suggestions forum](http://gitlab.uservoice.com/forums/176466-general) is the place to propose and discuss new features for GitLab.
|
||||||
|
|
||||||
|
* [Support subscription](http://www.gitlab.com/subscription/) connect you to the knowledge of GitLab experts that will resolve your issues and answer your questions.
|
||||||
|
|
||||||
|
* [Consultancy](http://www.gitlab.com/consultancy/) allows you hire GitLab exports for installations, upgrades and customizations.
|
||||||
|
|
||||||
|
* [Contributing guide](https://github.com/gitlabhq/gitlabhq/blob/master/CONTRIBUTING.md) describes how to submit pull requests and issues. Pull requests and issues not in line with the guidelines in this document will be closed without comment.
|
||||||
|
|
||||||
|
|
||||||
|
### Getting in touch
|
||||||
|
|
||||||
|
* [Core team](https://github.com/gitlabhq?tab=members)
|
||||||
|
|
||||||
|
* [Contributors](https://github.com/gitlabhq/gitlabhq/graphs/contributors)
|
||||||
|
|
||||||
|
* [Leader](https://github.com/randx)
|
||||||
|
|
||||||
|
* [Contact page](http://gitlab.org/contact/)
|
||||||
|
|
24
ROADMAP.md
|
@ -1,25 +1,5 @@
|
||||||
## GitLab Roadmap
|
## GitLab Roadmap
|
||||||
|
|
||||||
### Common
|
### v5.1 April 22
|
||||||
|
|
||||||
* Help page for service tasks like repos import, backup etc
|
* Not decided yet.
|
||||||
* Hide last push widget after following link
|
|
||||||
* Add comment events
|
|
||||||
* gitolite namespaces for projects per user/group. It will allow us same project names for different users
|
|
||||||
|
|
||||||
### Issues
|
|
||||||
|
|
||||||
* labels autocomplete via jquery autocomplete
|
|
||||||
* Import/Export issues
|
|
||||||
* Form: Assign to me link right to the selectbox
|
|
||||||
|
|
||||||
### Merge Request
|
|
||||||
|
|
||||||
* Save code fragments with MR comments
|
|
||||||
|
|
||||||
### Services
|
|
||||||
|
|
||||||
* Campfire integration service
|
|
||||||
* Hipchat integration service
|
|
||||||
* Travis CI integration service
|
|
||||||
* Jenkins CI integration service
|
|
||||||
|
|
2
VERSION
|
@ -1 +1 @@
|
||||||
4.0.1
|
5.1.0pre
|
||||||
|
|
Before Width: | Height: | Size: 781 B |
Before Width: | Height: | Size: 177 B |
Before Width: | Height: | Size: 295 B |
Before Width: | Height: | Size: 749 B |
Before Width: | Height: | Size: 302 B |
BIN
app/assets/images/diff_note_add.png
Normal file
After Width: | Height: | Size: 691 B |
Before Width: | Height: | Size: 674 B |
Before Width: | Height: | Size: 750 B |
Before Width: | Height: | Size: 463 B |
Before Width: | Height: | Size: 632 B |
Before Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 463 B |
Before Width: | Height: | Size: 632 B |
Before Width: | Height: | Size: 596 B |
Before Width: | Height: | Size: 450 B |
Before Width: | Height: | Size: 357 B |
BIN
app/assets/images/logo-black.png
Normal file
After Width: | Height: | Size: 3 KiB |
BIN
app/assets/images/logo-white.png
Normal file
After Width: | Height: | Size: 4.3 KiB |
Before Width: | Height: | Size: 2.5 KiB |
Before Width: | Height: | Size: 1.9 KiB |
BIN
app/assets/images/onion_skin_sprites.gif
Normal file
After Width: | Height: | Size: 1.5 KiB |
BIN
app/assets/images/solarized_dark.png
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
app/assets/images/swipemode_sprites.gif
Normal file
After Width: | Height: | Size: 1.5 KiB |
53
app/assets/javascripts/api.js.coffee
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
@Api =
|
||||||
|
users_path: "/api/:version/users.json"
|
||||||
|
user_path: "/api/:version/users/:id.json"
|
||||||
|
notes_path: "/api/:version/projects/:id/notes.json"
|
||||||
|
|
||||||
|
# Get 20 (depends on api) recent notes
|
||||||
|
# and sort the ascending from oldest to newest
|
||||||
|
notes: (project_id, callback) ->
|
||||||
|
url = Api.buildUrl(Api.notes_path)
|
||||||
|
url = url.replace(':id', project_id)
|
||||||
|
|
||||||
|
$.ajax(
|
||||||
|
url: url,
|
||||||
|
data:
|
||||||
|
private_token: gon.api_token
|
||||||
|
gfm: true
|
||||||
|
recent: true
|
||||||
|
dataType: "json"
|
||||||
|
).done (notes) ->
|
||||||
|
notes.sort (a, b) ->
|
||||||
|
return a.id - b.id
|
||||||
|
callback(notes)
|
||||||
|
|
||||||
|
user: (user_id, callback) ->
|
||||||
|
url = Api.buildUrl(Api.user_path)
|
||||||
|
url = url.replace(':id', user_id)
|
||||||
|
|
||||||
|
$.ajax(
|
||||||
|
url: url
|
||||||
|
data:
|
||||||
|
private_token: gon.api_token
|
||||||
|
dataType: "json"
|
||||||
|
).done (user) ->
|
||||||
|
callback(user)
|
||||||
|
|
||||||
|
# Return users list. Filtered by query
|
||||||
|
# Only active users retrieved
|
||||||
|
users: (query, callback) ->
|
||||||
|
url = Api.buildUrl(Api.users_path)
|
||||||
|
|
||||||
|
$.ajax(
|
||||||
|
url: url
|
||||||
|
data:
|
||||||
|
private_token: gon.api_token
|
||||||
|
search: query
|
||||||
|
per_page: 20
|
||||||
|
active: true
|
||||||
|
dataType: "json"
|
||||||
|
).done (users) ->
|
||||||
|
callback(users)
|
||||||
|
|
||||||
|
buildUrl: (url) ->
|
||||||
|
return url.replace(':version', gon.api_version)
|
|
@ -17,6 +17,7 @@
|
||||||
//= require bootstrap
|
//= require bootstrap
|
||||||
//= require modernizr
|
//= require modernizr
|
||||||
//= require chosen-jquery
|
//= require chosen-jquery
|
||||||
|
//= require select2
|
||||||
//= require raphael
|
//= require raphael
|
||||||
//= require g.raphael-min
|
//= require g.raphael-min
|
||||||
//= require g.bar-min
|
//= require g.bar-min
|
||||||
|
|
5
app/assets/javascripts/behaviors/details_behavior.coffee
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
$ ->
|
||||||
|
$("body").on "click", ".js-details-target", ->
|
||||||
|
container = $(@).closest(".js-details-container")
|
||||||
|
|
||||||
|
container.toggleClass("open")
|
13
app/assets/javascripts/behaviors/toggler_behavior.coffee
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
$ ->
|
||||||
|
$("body").on "click", ".js-toggler-target", ->
|
||||||
|
container = $(@).closest(".js-toggler-container")
|
||||||
|
|
||||||
|
container.toggleClass("on")
|
||||||
|
|
||||||
|
$("body").on "click", ".js-toggle-visibility-link", (e) ->
|
||||||
|
$(@).find('i').
|
||||||
|
toggleClass('icon-chevron-down').
|
||||||
|
toggleClass('icon-chevron-up')
|
||||||
|
container = $(".js-toggle-visibility-container")
|
||||||
|
container.toggleClass("hide")
|
||||||
|
e.preventDefault()
|
309
app/assets/javascripts/branch-graph.js.coffee
Normal file
|
@ -0,0 +1,309 @@
|
||||||
|
class BranchGraph
|
||||||
|
constructor: (@element, @options) ->
|
||||||
|
@preparedCommits = {}
|
||||||
|
@mtime = 0
|
||||||
|
@mspace = 0
|
||||||
|
@parents = {}
|
||||||
|
@colors = ["#000"]
|
||||||
|
@offsetX = 120
|
||||||
|
@offsetY = 20
|
||||||
|
@unitTime = 30
|
||||||
|
@unitSpace = 10
|
||||||
|
@load()
|
||||||
|
|
||||||
|
load: ->
|
||||||
|
$.ajax
|
||||||
|
url: @options.url
|
||||||
|
method: "get"
|
||||||
|
dataType: "json"
|
||||||
|
success: $.proxy((data) ->
|
||||||
|
$(".loading", @element).hide()
|
||||||
|
@prepareData data.days, data.commits
|
||||||
|
@buildGraph()
|
||||||
|
, this)
|
||||||
|
|
||||||
|
prepareData: (@days, @commits) ->
|
||||||
|
@collectParents()
|
||||||
|
|
||||||
|
for c in @commits
|
||||||
|
c.isParent = true if c.id of @parents
|
||||||
|
@preparedCommits[c.id] = c
|
||||||
|
|
||||||
|
@collectColors()
|
||||||
|
|
||||||
|
collectParents: ->
|
||||||
|
for c in @commits
|
||||||
|
@mtime = Math.max(@mtime, c.time)
|
||||||
|
@mspace = Math.max(@mspace, c.space)
|
||||||
|
for p in c.parents
|
||||||
|
@parents[p[0]] = true
|
||||||
|
@mspace = Math.max(@mspace, p[1])
|
||||||
|
|
||||||
|
collectColors: ->
|
||||||
|
k = 0
|
||||||
|
while k < @mspace
|
||||||
|
@colors.push Raphael.getColor(.8)
|
||||||
|
# Skipping a few colors in the spectrum to get more contrast between colors
|
||||||
|
Raphael.getColor()
|
||||||
|
Raphael.getColor()
|
||||||
|
k++
|
||||||
|
|
||||||
|
buildGraph: ->
|
||||||
|
graphHeight = $(@element).height()
|
||||||
|
graphWidth = $(@element).width()
|
||||||
|
ch = Math.max(graphHeight, @offsetY + @unitTime * @mtime + 150)
|
||||||
|
cw = Math.max(graphWidth, @offsetX + @unitSpace * @mspace + 300)
|
||||||
|
@r = r = Raphael(@element.get(0), cw, ch)
|
||||||
|
top = r.set()
|
||||||
|
cuday = 0
|
||||||
|
cumonth = ""
|
||||||
|
barHeight = Math.max(graphHeight, @unitTime * @days.length + 320)
|
||||||
|
|
||||||
|
r.rect(0, 0, 26, barHeight).attr fill: "#222"
|
||||||
|
r.rect(26, 0, 20, barHeight).attr fill: "#444"
|
||||||
|
|
||||||
|
for day, mm in @days
|
||||||
|
if cuday isnt day[0]
|
||||||
|
# Dates
|
||||||
|
r.text(36, @offsetY + @unitTime * mm, day[0])
|
||||||
|
.attr(
|
||||||
|
font: "12px Monaco, monospace"
|
||||||
|
fill: "#DDD"
|
||||||
|
)
|
||||||
|
cuday = day[0]
|
||||||
|
|
||||||
|
if cumonth isnt day[1]
|
||||||
|
# Months
|
||||||
|
r.text(13, @offsetY + @unitTime * mm, day[1])
|
||||||
|
.attr(
|
||||||
|
font: "12px Monaco, monospace"
|
||||||
|
fill: "#EEE"
|
||||||
|
)
|
||||||
|
cumonth = day[1]
|
||||||
|
|
||||||
|
for commit in @commits
|
||||||
|
x = @offsetX + @unitSpace * (@mspace - commit.space)
|
||||||
|
y = @offsetY + @unitTime * commit.time
|
||||||
|
|
||||||
|
@drawDot(x, y, commit)
|
||||||
|
|
||||||
|
@drawLines(x, y, commit)
|
||||||
|
|
||||||
|
@appendLabel(x, y, commit.refs) if commit.refs
|
||||||
|
|
||||||
|
@appendAnchor(top, commit, x, y)
|
||||||
|
|
||||||
|
@markCommit(x, y, commit, graphHeight)
|
||||||
|
|
||||||
|
top.toFront()
|
||||||
|
@bindEvents()
|
||||||
|
|
||||||
|
bindEvents: ->
|
||||||
|
drag = {}
|
||||||
|
element = @element
|
||||||
|
dragger = (event) ->
|
||||||
|
element.scrollLeft drag.sl - (event.clientX - drag.x)
|
||||||
|
element.scrollTop drag.st - (event.clientY - drag.y)
|
||||||
|
|
||||||
|
element.on mousedown: (event) ->
|
||||||
|
drag =
|
||||||
|
x: event.clientX
|
||||||
|
y: event.clientY
|
||||||
|
st: element.scrollTop()
|
||||||
|
sl: element.scrollLeft()
|
||||||
|
$(window).on "mousemove", dragger
|
||||||
|
|
||||||
|
$(window).on
|
||||||
|
mouseup: ->
|
||||||
|
$(window).off "mousemove", dragger
|
||||||
|
keydown: (event) ->
|
||||||
|
# left
|
||||||
|
element.scrollLeft element.scrollLeft() - 50 if event.keyCode is 37
|
||||||
|
# top
|
||||||
|
element.scrollTop element.scrollTop() - 50 if event.keyCode is 38
|
||||||
|
# right
|
||||||
|
element.scrollLeft element.scrollLeft() + 50 if event.keyCode is 39
|
||||||
|
# bottom
|
||||||
|
element.scrollTop element.scrollTop() + 50 if event.keyCode is 40
|
||||||
|
|
||||||
|
appendLabel: (x, y, refs) ->
|
||||||
|
r = @r
|
||||||
|
shortrefs = refs
|
||||||
|
# Truncate if longer than 15 chars
|
||||||
|
shortrefs = shortrefs.substr(0, 15) + "…" if shortrefs.length > 17
|
||||||
|
text = r.text(x + 4, y, shortrefs).attr(
|
||||||
|
"text-anchor": "start"
|
||||||
|
font: "10px Monaco, monospace"
|
||||||
|
fill: "#FFF"
|
||||||
|
title: refs
|
||||||
|
)
|
||||||
|
textbox = text.getBBox()
|
||||||
|
# Create rectangle based on the size of the textbox
|
||||||
|
rect = r.rect(x, y - 7, textbox.width + 5, textbox.height + 5, 4).attr(
|
||||||
|
fill: "#000"
|
||||||
|
"fill-opacity": .5
|
||||||
|
stroke: "none"
|
||||||
|
)
|
||||||
|
triangle = r.path(["M", x - 5, y, "L", x - 15, y - 4, "L", x - 15, y + 4, "Z"]).attr(
|
||||||
|
fill: "#000"
|
||||||
|
"fill-opacity": .5
|
||||||
|
stroke: "none"
|
||||||
|
)
|
||||||
|
|
||||||
|
label = r.set(rect, text)
|
||||||
|
label.transform(["t", -rect.getBBox().width - 15, 0])
|
||||||
|
|
||||||
|
# Set text to front
|
||||||
|
text.toFront()
|
||||||
|
|
||||||
|
appendAnchor: (top, commit, x, y) ->
|
||||||
|
r = @r
|
||||||
|
options = @options
|
||||||
|
anchor = r.circle(x, y, 10).attr(
|
||||||
|
fill: "#000"
|
||||||
|
opacity: 0
|
||||||
|
cursor: "pointer"
|
||||||
|
).click(->
|
||||||
|
window.open options.commit_url.replace("%s", commit.id), "_blank"
|
||||||
|
).hover(->
|
||||||
|
@tooltip = r.commitTooltip(x + 5, y, commit)
|
||||||
|
top.push @tooltip.insertBefore(this)
|
||||||
|
, ->
|
||||||
|
@tooltip and @tooltip.remove() and delete @tooltip
|
||||||
|
)
|
||||||
|
top.push anchor
|
||||||
|
|
||||||
|
drawDot: (x, y, commit) ->
|
||||||
|
r = @r
|
||||||
|
r.circle(x, y, 3).attr(
|
||||||
|
fill: @colors[commit.space]
|
||||||
|
stroke: "none"
|
||||||
|
)
|
||||||
|
r.rect(@offsetX + @unitSpace * @mspace + 10, y - 10, 20, 20).attr(
|
||||||
|
fill: "url(#{commit.author.icon})"
|
||||||
|
stroke: @colors[commit.space]
|
||||||
|
"stroke-width": 2
|
||||||
|
)
|
||||||
|
r.text(@offsetX + @unitSpace * @mspace + 35, y, commit.message.split("\n")[0]).attr(
|
||||||
|
"text-anchor": "start"
|
||||||
|
font: "14px Monaco, monospace"
|
||||||
|
)
|
||||||
|
|
||||||
|
drawLines: (x, y, commit) ->
|
||||||
|
r = @r
|
||||||
|
for parent, i in commit.parents
|
||||||
|
parentCommit = @preparedCommits[parent[0]]
|
||||||
|
parentY = @offsetY + @unitTime * parentCommit.time
|
||||||
|
parentX1 = @offsetX + @unitSpace * (@mspace - parentCommit.space)
|
||||||
|
parentX2 = @offsetX + @unitSpace * (@mspace - parent[1])
|
||||||
|
|
||||||
|
# Set line color
|
||||||
|
if parentCommit.space <= commit.space
|
||||||
|
color = @colors[commit.space]
|
||||||
|
|
||||||
|
else
|
||||||
|
color = @colors[parentCommit.space]
|
||||||
|
|
||||||
|
# Build line shape
|
||||||
|
if parent[1] is commit.space
|
||||||
|
offset = [0, 5]
|
||||||
|
arrow = "l-2,5,4,0,-2,-5,0,5"
|
||||||
|
|
||||||
|
else if parent[1] < commit.space
|
||||||
|
offset = [3, 3]
|
||||||
|
arrow = "l5,0,-2,4,-3,-4,4,2"
|
||||||
|
|
||||||
|
else
|
||||||
|
offset = [-3, 3]
|
||||||
|
arrow = "l-5,0,2,4,3,-4,-4,2"
|
||||||
|
|
||||||
|
# Start point
|
||||||
|
route = ["M", x + offset[0], y + offset[1]]
|
||||||
|
|
||||||
|
# Add arrow if not first parent
|
||||||
|
if i > 0
|
||||||
|
route.push(arrow)
|
||||||
|
|
||||||
|
# Circumvent if overlap
|
||||||
|
if commit.space isnt parentCommit.space or commit.space isnt parent[1]
|
||||||
|
route.push(
|
||||||
|
"L", parentX2, y + 10,
|
||||||
|
"L", parentX2, parentY - 5,
|
||||||
|
)
|
||||||
|
|
||||||
|
# End point
|
||||||
|
route.push("L", parentX1, parentY)
|
||||||
|
|
||||||
|
r
|
||||||
|
.path(route)
|
||||||
|
.attr(
|
||||||
|
stroke: color
|
||||||
|
"stroke-width": 2)
|
||||||
|
|
||||||
|
markCommit: (x, y, commit, graphHeight) ->
|
||||||
|
if commit.id is @options.commit_id
|
||||||
|
r = @r
|
||||||
|
r.path(["M", x + 5, y, "L", x + 15, y + 4, "L", x + 15, y - 4, "Z"]).attr(
|
||||||
|
fill: "#000"
|
||||||
|
"fill-opacity": .5
|
||||||
|
stroke: "none"
|
||||||
|
)
|
||||||
|
# Displayed in the center
|
||||||
|
@element.scrollTop(y - graphHeight / 2)
|
||||||
|
|
||||||
|
Raphael::commitTooltip = (x, y, commit) ->
|
||||||
|
boxWidth = 300
|
||||||
|
boxHeight = 200
|
||||||
|
icon = @image(commit.author.icon, x, y, 20, 20)
|
||||||
|
nameText = @text(x + 25, y + 10, commit.author.name)
|
||||||
|
idText = @text(x, y + 35, commit.id)
|
||||||
|
messageText = @text(x, y + 50, commit.message)
|
||||||
|
textSet = @set(icon, nameText, idText, messageText).attr(
|
||||||
|
"text-anchor": "start"
|
||||||
|
font: "12px Monaco, monospace"
|
||||||
|
)
|
||||||
|
nameText.attr(
|
||||||
|
font: "14px Arial"
|
||||||
|
"font-weight": "bold"
|
||||||
|
)
|
||||||
|
|
||||||
|
idText.attr fill: "#AAA"
|
||||||
|
@textWrap messageText, boxWidth - 50
|
||||||
|
rect = @rect(x - 10, y - 10, boxWidth, 100, 4).attr(
|
||||||
|
fill: "#FFF"
|
||||||
|
stroke: "#000"
|
||||||
|
"stroke-linecap": "round"
|
||||||
|
"stroke-width": 2
|
||||||
|
)
|
||||||
|
tooltip = @set(rect, textSet)
|
||||||
|
rect.attr(
|
||||||
|
height: tooltip.getBBox().height + 10
|
||||||
|
width: tooltip.getBBox().width + 10
|
||||||
|
)
|
||||||
|
|
||||||
|
tooltip.transform ["t", 20, 20]
|
||||||
|
tooltip
|
||||||
|
|
||||||
|
Raphael::textWrap = (t, width) ->
|
||||||
|
content = t.attr("text")
|
||||||
|
abc = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
||||||
|
t.attr text: abc
|
||||||
|
letterWidth = t.getBBox().width / abc.length
|
||||||
|
t.attr text: content
|
||||||
|
words = content.split(" ")
|
||||||
|
x = 0
|
||||||
|
s = []
|
||||||
|
|
||||||
|
for word in words
|
||||||
|
if x + (word.length * letterWidth) > width
|
||||||
|
s.push "\n"
|
||||||
|
x = 0
|
||||||
|
x += word.length * letterWidth
|
||||||
|
s.push word + " "
|
||||||
|
|
||||||
|
t.attr text: s.join("")
|
||||||
|
b = t.getBBox()
|
||||||
|
h = Math.abs(b.y2) - Math.abs(b.y) + 1
|
||||||
|
t.attr y: b.y + h
|
||||||
|
|
||||||
|
@BranchGraph = BranchGraph
|
7
app/assets/javascripts/commit/file.js.coffee
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
class CommitFile
|
||||||
|
|
||||||
|
constructor: (file) ->
|
||||||
|
if $('.image', file).length
|
||||||
|
new ImageFile(file)
|
||||||
|
|
||||||
|
this.CommitFile = CommitFile
|
128
app/assets/javascripts/commit/image-file.js.coffee
Normal file
|
@ -0,0 +1,128 @@
|
||||||
|
class ImageFile
|
||||||
|
|
||||||
|
# Width where images must fits in, for 2-up this gets divided by 2
|
||||||
|
@availWidth = 900
|
||||||
|
@viewModes = ['two-up', 'swipe']
|
||||||
|
|
||||||
|
constructor: (@file) ->
|
||||||
|
# Determine if old and new file has same dimensions, if not show 'two-up' view
|
||||||
|
this.requestImageInfo $('.two-up.view .frame.deleted img', @file), (deletedWidth, deletedHeight) =>
|
||||||
|
this.requestImageInfo $('.two-up.view .frame.added img', @file), (width, height) =>
|
||||||
|
if width == deletedWidth && height == deletedHeight
|
||||||
|
this.initViewModes()
|
||||||
|
else
|
||||||
|
this.initView('two-up')
|
||||||
|
|
||||||
|
initViewModes: ->
|
||||||
|
viewMode = ImageFile.viewModes[0]
|
||||||
|
|
||||||
|
$('.view-modes', @file).removeClass 'hide'
|
||||||
|
$('.view-modes-menu', @file).on 'click', 'li', (event) =>
|
||||||
|
unless $(event.currentTarget).hasClass('active')
|
||||||
|
this.activateViewMode(event.currentTarget.className)
|
||||||
|
|
||||||
|
this.activateViewMode(viewMode)
|
||||||
|
|
||||||
|
activateViewMode: (viewMode) ->
|
||||||
|
$('.view-modes-menu li', @file)
|
||||||
|
.removeClass('active')
|
||||||
|
.filter(".#{viewMode}").addClass 'active'
|
||||||
|
$(".view:visible:not(.#{viewMode})", @file).fadeOut 200, =>
|
||||||
|
$(".view.#{viewMode}", @file).fadeIn(200)
|
||||||
|
this.initView viewMode
|
||||||
|
|
||||||
|
initView: (viewMode) ->
|
||||||
|
this.views[viewMode].call(this)
|
||||||
|
|
||||||
|
prepareFrames = (view) ->
|
||||||
|
maxWidth = 0
|
||||||
|
maxHeight = 0
|
||||||
|
$('.frame', view).each (index, frame) =>
|
||||||
|
width = $(frame).width()
|
||||||
|
height = $(frame).height()
|
||||||
|
maxWidth = if width > maxWidth then width else maxWidth
|
||||||
|
maxHeight = if height > maxHeight then height else maxHeight
|
||||||
|
.css
|
||||||
|
width: maxWidth
|
||||||
|
height: maxHeight
|
||||||
|
|
||||||
|
[maxWidth, maxHeight]
|
||||||
|
|
||||||
|
views:
|
||||||
|
'two-up': ->
|
||||||
|
$('.two-up.view .wrap', @file).each (index, wrap) =>
|
||||||
|
$('img', wrap).each ->
|
||||||
|
currentWidth = $(this).width()
|
||||||
|
if currentWidth > ImageFile.availWidth / 2
|
||||||
|
$(this).width ImageFile.availWidth / 2
|
||||||
|
|
||||||
|
this.requestImageInfo $('img', wrap), (width, height) ->
|
||||||
|
$('.image-info .meta-width', wrap).text "#{width}px"
|
||||||
|
$('.image-info .meta-height', wrap).text "#{height}px"
|
||||||
|
$('.image-info', wrap).removeClass('hide')
|
||||||
|
|
||||||
|
'swipe': ->
|
||||||
|
maxWidth = 0
|
||||||
|
maxHeight = 0
|
||||||
|
|
||||||
|
$('.swipe.view', @file).each (index, view) =>
|
||||||
|
|
||||||
|
[maxWidth, maxHeight] = prepareFrames(view)
|
||||||
|
|
||||||
|
$('.swipe-frame', view).css
|
||||||
|
width: maxWidth + 16
|
||||||
|
height: maxHeight + 28
|
||||||
|
|
||||||
|
$('.swipe-wrap', view).css
|
||||||
|
width: maxWidth + 1
|
||||||
|
height: maxHeight + 2
|
||||||
|
|
||||||
|
$('.swipe-bar', view).css
|
||||||
|
left: 0
|
||||||
|
.draggable
|
||||||
|
axis: 'x'
|
||||||
|
containment: 'parent'
|
||||||
|
drag: (event) ->
|
||||||
|
$('.swipe-wrap', view).width (maxWidth + 1) - $(this).position().left
|
||||||
|
stop: (event) ->
|
||||||
|
$('.swipe-wrap', view).width (maxWidth + 1) - $(this).position().left
|
||||||
|
|
||||||
|
'onion-skin': ->
|
||||||
|
maxWidth = 0
|
||||||
|
maxHeight = 0
|
||||||
|
|
||||||
|
dragTrackWidth = $('.drag-track', @file).width() - $('.dragger', @file).width()
|
||||||
|
|
||||||
|
$('.onion-skin.view', @file).each (index, view) =>
|
||||||
|
|
||||||
|
[maxWidth, maxHeight] = prepareFrames(view)
|
||||||
|
|
||||||
|
$('.onion-skin-frame', view).css
|
||||||
|
width: maxWidth + 16
|
||||||
|
height: maxHeight + 28
|
||||||
|
|
||||||
|
$('.swipe-wrap', view).css
|
||||||
|
width: maxWidth + 1
|
||||||
|
height: maxHeight + 2
|
||||||
|
|
||||||
|
$('.dragger', view).css
|
||||||
|
left: dragTrackWidth
|
||||||
|
.draggable
|
||||||
|
axis: 'x'
|
||||||
|
containment: 'parent'
|
||||||
|
drag: (event) ->
|
||||||
|
$('.frame.added', view).css('opacity', $(this).position().left / dragTrackWidth)
|
||||||
|
stop: (event) ->
|
||||||
|
$('.frame.added', view).css('opacity', $(this).position().left / dragTrackWidth)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
requestImageInfo: (img, callback) ->
|
||||||
|
domImg = img.get(0)
|
||||||
|
if domImg.complete
|
||||||
|
callback.call(this, domImg.naturalWidth, domImg.naturalHeight)
|
||||||
|
else
|
||||||
|
img.on 'load', =>
|
||||||
|
callback.call(this, domImg.naturalWidth, domImg.naturalHeight)
|
||||||
|
|
||||||
|
this.ImageFile = ImageFile
|
|
@ -1,59 +0,0 @@
|
||||||
var CommitsList = {
|
|
||||||
ref:null,
|
|
||||||
limit:0,
|
|
||||||
offset:0,
|
|
||||||
disable:false,
|
|
||||||
|
|
||||||
init:
|
|
||||||
function(ref, limit) {
|
|
||||||
$(".day-commits-table li.commit").live('click', function(e){
|
|
||||||
if(e.target.nodeName != "A") {
|
|
||||||
location.href = $(this).attr("url");
|
|
||||||
e.stopPropagation();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
this.ref=ref;
|
|
||||||
this.limit=limit;
|
|
||||||
this.offset=limit;
|
|
||||||
this.initLoadMore();
|
|
||||||
$('.loading').show();
|
|
||||||
},
|
|
||||||
|
|
||||||
getOld:
|
|
||||||
function() {
|
|
||||||
$('.loading').show();
|
|
||||||
$.ajax({
|
|
||||||
type: "GET",
|
|
||||||
url: location.href,
|
|
||||||
data: "limit=" + this.limit + "&offset=" + this.offset + "&ref=" + this.ref,
|
|
||||||
complete: function(){ $('.loading').hide()},
|
|
||||||
dataType: "script"});
|
|
||||||
},
|
|
||||||
|
|
||||||
append:
|
|
||||||
function(count, html) {
|
|
||||||
$("#commits_list").append(html);
|
|
||||||
if(count > 0) {
|
|
||||||
this.offset += count;
|
|
||||||
} else {
|
|
||||||
this.disable = true;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
initLoadMore:
|
|
||||||
function() {
|
|
||||||
$(document).endlessScroll({
|
|
||||||
bottomPixels: 400,
|
|
||||||
fireDelay: 1000,
|
|
||||||
fireOnce:true,
|
|
||||||
ceaseFire: function() {
|
|
||||||
return CommitsList.disable;
|
|
||||||
},
|
|
||||||
callback: function(i) {
|
|
||||||
CommitsList.getOld();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
54
app/assets/javascripts/commits.js.coffee
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
class CommitsList
|
||||||
|
@data =
|
||||||
|
ref: null
|
||||||
|
limit: 0
|
||||||
|
offset: 0
|
||||||
|
@disable = false
|
||||||
|
|
||||||
|
@showProgress: ->
|
||||||
|
$('.loading').show()
|
||||||
|
|
||||||
|
@hideProgress: ->
|
||||||
|
$('.loading').hide()
|
||||||
|
|
||||||
|
@init: (ref, limit) ->
|
||||||
|
$(".day-commits-table li.commit").live 'click', (event) ->
|
||||||
|
if event.target.nodeName != "A"
|
||||||
|
location.href = $(this).attr("url")
|
||||||
|
e.stopPropagation()
|
||||||
|
return false
|
||||||
|
|
||||||
|
@data.ref = ref
|
||||||
|
@data.limit = limit
|
||||||
|
@data.offset = limit
|
||||||
|
|
||||||
|
this.initLoadMore()
|
||||||
|
this.showProgress();
|
||||||
|
|
||||||
|
@getOld: ->
|
||||||
|
this.showProgress()
|
||||||
|
$.ajax
|
||||||
|
type: "GET"
|
||||||
|
url: location.href
|
||||||
|
data: @data
|
||||||
|
complete: this.hideProgress
|
||||||
|
dataType: "script"
|
||||||
|
|
||||||
|
@append: (count, html) ->
|
||||||
|
$("#commits-list").append(html)
|
||||||
|
if count > 0
|
||||||
|
@data.offset += count
|
||||||
|
else
|
||||||
|
@disable = true
|
||||||
|
|
||||||
|
@initLoadMore: ->
|
||||||
|
$(document).endlessScroll
|
||||||
|
bottomPixels: 400
|
||||||
|
fireDelay: 1000
|
||||||
|
fireOnce: true
|
||||||
|
ceaseFire: =>
|
||||||
|
@disable
|
||||||
|
callback: =>
|
||||||
|
this.getOld()
|
||||||
|
|
||||||
|
this.CommitsList = CommitsList
|
39
app/assets/javascripts/dashboard.js.coffee
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
window.dashboardPage = ->
|
||||||
|
Pager.init 20, true
|
||||||
|
initSidebarTab()
|
||||||
|
$(".event_filter_link").bind "click", (event) ->
|
||||||
|
event.preventDefault()
|
||||||
|
toggleFilter $(this)
|
||||||
|
reloadActivities()
|
||||||
|
|
||||||
|
reloadActivities = ->
|
||||||
|
$(".content_list").html ''
|
||||||
|
Pager.init 20, true
|
||||||
|
|
||||||
|
toggleFilter = (sender) ->
|
||||||
|
sender.parent().toggleClass "inactive"
|
||||||
|
event_filters = $.cookie("event_filter")
|
||||||
|
filter = sender.attr("id").split("_")[0]
|
||||||
|
if event_filters
|
||||||
|
event_filters = event_filters.split(",")
|
||||||
|
else
|
||||||
|
event_filters = new Array()
|
||||||
|
|
||||||
|
index = event_filters.indexOf(filter)
|
||||||
|
if index is -1
|
||||||
|
event_filters.push filter
|
||||||
|
else
|
||||||
|
event_filters.splice index, 1
|
||||||
|
|
||||||
|
$.cookie "event_filter", event_filters.join(",")
|
||||||
|
|
||||||
|
initSidebarTab = ->
|
||||||
|
key = "dashboard_sidebar_filter"
|
||||||
|
|
||||||
|
# store selection in cookie
|
||||||
|
$('.dash-sidebar-tabs a').on 'click', (e) ->
|
||||||
|
$.cookie(key, $(e.target).attr('id'))
|
||||||
|
|
||||||
|
# show tab from cookie
|
||||||
|
sidebar_filter = $.cookie(key)
|
||||||
|
$("#" + sidebar_filter).tab('show') if sidebar_filter
|
7
app/assets/javascripts/extensions/array.js
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
Array.prototype.first = function() {
|
||||||
|
return this[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
Array.prototype.last = function() {
|
||||||
|
return this[this.length-1];
|
||||||
|
}
|
9
app/assets/javascripts/extensions/jquery.js.coffee
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
$.fn.showAndHide = ->
|
||||||
|
$(@).show().
|
||||||
|
delay(3000).
|
||||||
|
fadeOut()
|
||||||
|
|
||||||
|
$.fn.enableButton = ->
|
||||||
|
$(@).removeAttr('disabled').
|
||||||
|
removeClass('disabled')
|
||||||
|
|
|
@ -11,7 +11,7 @@ function initIssuesSearch() {
|
||||||
last_terms = terms;
|
last_terms = terms;
|
||||||
|
|
||||||
if (terms.length >= 2 || terms.length == 0) {
|
if (terms.length >= 2 || terms.length == 0) {
|
||||||
$.get(href, { 'f': status, 'terms': terms, 'milestone_id': milestone_id }, function(response) {
|
$.get(href, { 'status': status, 'terms': terms, 'milestone_id': milestone_id }, function(response) {
|
||||||
$('#issues-table').html(response);
|
$('#issues-table').html(response);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
181
app/assets/javascripts/lib/jquery.timeago.js
Normal file
|
@ -0,0 +1,181 @@
|
||||||
|
/**
|
||||||
|
* Timeago is a jQuery plugin that makes it easy to support automatically
|
||||||
|
* updating fuzzy timestamps (e.g. "4 minutes ago" or "about 1 day ago").
|
||||||
|
*
|
||||||
|
* @name timeago
|
||||||
|
* @version 1.1.0
|
||||||
|
* @requires jQuery v1.2.3+
|
||||||
|
* @author Ryan McGeary
|
||||||
|
* @license MIT License - http://www.opensource.org/licenses/mit-license.php
|
||||||
|
*
|
||||||
|
* For usage and examples, visit:
|
||||||
|
* http://timeago.yarp.com/
|
||||||
|
*
|
||||||
|
* Copyright (c) 2008-2013, Ryan McGeary (ryan -[at]- mcgeary [*dot*] org)
|
||||||
|
*/
|
||||||
|
|
||||||
|
(function (factory) {
|
||||||
|
if (typeof define === 'function' && define.amd) {
|
||||||
|
// AMD. Register as an anonymous module.
|
||||||
|
define(['jquery'], factory);
|
||||||
|
} else {
|
||||||
|
// Browser globals
|
||||||
|
factory(jQuery);
|
||||||
|
}
|
||||||
|
}(function ($) {
|
||||||
|
$.timeago = function(timestamp) {
|
||||||
|
if (timestamp instanceof Date) {
|
||||||
|
return inWords(timestamp);
|
||||||
|
} else if (typeof timestamp === "string") {
|
||||||
|
return inWords($.timeago.parse(timestamp));
|
||||||
|
} else if (typeof timestamp === "number") {
|
||||||
|
return inWords(new Date(timestamp));
|
||||||
|
} else {
|
||||||
|
return inWords($.timeago.datetime(timestamp));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
var $t = $.timeago;
|
||||||
|
|
||||||
|
$.extend($.timeago, {
|
||||||
|
settings: {
|
||||||
|
refreshMillis: 60000,
|
||||||
|
allowFuture: false,
|
||||||
|
strings: {
|
||||||
|
prefixAgo: null,
|
||||||
|
prefixFromNow: null,
|
||||||
|
suffixAgo: "ago",
|
||||||
|
suffixFromNow: "from now",
|
||||||
|
seconds: "less than a minute",
|
||||||
|
minute: "about a minute",
|
||||||
|
minutes: "%d minutes",
|
||||||
|
hour: "about an hour",
|
||||||
|
hours: "about %d hours",
|
||||||
|
day: "a day",
|
||||||
|
days: "%d days",
|
||||||
|
month: "about a month",
|
||||||
|
months: "%d months",
|
||||||
|
year: "about a year",
|
||||||
|
years: "%d years",
|
||||||
|
wordSeparator: " ",
|
||||||
|
numbers: []
|
||||||
|
}
|
||||||
|
},
|
||||||
|
inWords: function(distanceMillis) {
|
||||||
|
var $l = this.settings.strings;
|
||||||
|
var prefix = $l.prefixAgo;
|
||||||
|
var suffix = $l.suffixAgo;
|
||||||
|
if (this.settings.allowFuture) {
|
||||||
|
if (distanceMillis < 0) {
|
||||||
|
prefix = $l.prefixFromNow;
|
||||||
|
suffix = $l.suffixFromNow;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var seconds = Math.abs(distanceMillis) / 1000;
|
||||||
|
var minutes = seconds / 60;
|
||||||
|
var hours = minutes / 60;
|
||||||
|
var days = hours / 24;
|
||||||
|
var years = days / 365;
|
||||||
|
|
||||||
|
function substitute(stringOrFunction, number) {
|
||||||
|
var string = $.isFunction(stringOrFunction) ? stringOrFunction(number, distanceMillis) : stringOrFunction;
|
||||||
|
var value = ($l.numbers && $l.numbers[number]) || number;
|
||||||
|
return string.replace(/%d/i, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
var words = seconds < 45 && substitute($l.seconds, Math.round(seconds)) ||
|
||||||
|
seconds < 90 && substitute($l.minute, 1) ||
|
||||||
|
minutes < 45 && substitute($l.minutes, Math.round(minutes)) ||
|
||||||
|
minutes < 90 && substitute($l.hour, 1) ||
|
||||||
|
hours < 24 && substitute($l.hours, Math.round(hours)) ||
|
||||||
|
hours < 42 && substitute($l.day, 1) ||
|
||||||
|
days < 30 && substitute($l.days, Math.round(days)) ||
|
||||||
|
days < 45 && substitute($l.month, 1) ||
|
||||||
|
days < 365 && substitute($l.months, Math.round(days / 30)) ||
|
||||||
|
years < 1.5 && substitute($l.year, 1) ||
|
||||||
|
substitute($l.years, Math.round(years));
|
||||||
|
|
||||||
|
var separator = $l.wordSeparator || "";
|
||||||
|
if ($l.wordSeparator === undefined) { separator = " "; }
|
||||||
|
return $.trim([prefix, words, suffix].join(separator));
|
||||||
|
},
|
||||||
|
parse: function(iso8601) {
|
||||||
|
var s = $.trim(iso8601);
|
||||||
|
s = s.replace(/\.\d+/,""); // remove milliseconds
|
||||||
|
s = s.replace(/-/,"/").replace(/-/,"/");
|
||||||
|
s = s.replace(/T/," ").replace(/Z/," UTC");
|
||||||
|
s = s.replace(/([\+\-]\d\d)\:?(\d\d)/," $1$2"); // -04:00 -> -0400
|
||||||
|
return new Date(s);
|
||||||
|
},
|
||||||
|
datetime: function(elem) {
|
||||||
|
var iso8601 = $t.isTime(elem) ? $(elem).attr("datetime") : $(elem).attr("title");
|
||||||
|
return $t.parse(iso8601);
|
||||||
|
},
|
||||||
|
isTime: function(elem) {
|
||||||
|
// jQuery's `is()` doesn't play well with HTML5 in IE
|
||||||
|
return $(elem).get(0).tagName.toLowerCase() === "time"; // $(elem).is("time");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// functions that can be called via $(el).timeago('action')
|
||||||
|
// init is default when no action is given
|
||||||
|
// functions are called with context of a single element
|
||||||
|
var functions = {
|
||||||
|
init: function(){
|
||||||
|
var refresh_el = $.proxy(refresh, this);
|
||||||
|
refresh_el();
|
||||||
|
var $s = $t.settings;
|
||||||
|
if ($s.refreshMillis > 0) {
|
||||||
|
setInterval(refresh_el, $s.refreshMillis);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
update: function(time){
|
||||||
|
$(this).data('timeago', { datetime: $t.parse(time) });
|
||||||
|
refresh.apply(this);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
$.fn.timeago = function(action, options) {
|
||||||
|
var fn = action ? functions[action] : functions.init;
|
||||||
|
if(!fn){
|
||||||
|
throw new Error("Unknown function name '"+ action +"' for timeago");
|
||||||
|
}
|
||||||
|
// each over objects here and call the requested function
|
||||||
|
this.each(function(){
|
||||||
|
fn.call(this, options);
|
||||||
|
});
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
|
||||||
|
function refresh() {
|
||||||
|
var data = prepareData(this);
|
||||||
|
if (!isNaN(data.datetime)) {
|
||||||
|
$(this).text(inWords(data.datetime));
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
function prepareData(element) {
|
||||||
|
element = $(element);
|
||||||
|
if (!element.data("timeago")) {
|
||||||
|
element.data("timeago", { datetime: $t.datetime(element) });
|
||||||
|
var text = $.trim(element.text());
|
||||||
|
if (text.length > 0 && !($t.isTime(element) && element.attr("title"))) {
|
||||||
|
element.attr("title", text);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return element.data("timeago");
|
||||||
|
}
|
||||||
|
|
||||||
|
function inWords(date) {
|
||||||
|
return $t.inWords(distance(date));
|
||||||
|
}
|
||||||
|
|
||||||
|
function distance(date) {
|
||||||
|
return (new Date().getTime() - date.getTime());
|
||||||
|
}
|
||||||
|
|
||||||
|
// fix for IE6 suckage
|
||||||
|
document.createElement("abbr");
|
||||||
|
document.createElement("time");
|
||||||
|
}));
|
211
app/assets/javascripts/lib/md5.js
Normal file
|
@ -0,0 +1,211 @@
|
||||||
|
function md5 (str) {
|
||||||
|
// http://kevin.vanzonneveld.net
|
||||||
|
// + original by: Webtoolkit.info (http://www.webtoolkit.info/)
|
||||||
|
// + namespaced by: Michael White (http://getsprink.com)
|
||||||
|
// + tweaked by: Jack
|
||||||
|
// + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
|
||||||
|
// + input by: Brett Zamir (http://brett-zamir.me)
|
||||||
|
// + bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
|
||||||
|
// - depends on: utf8_encode
|
||||||
|
// * example 1: md5('Kevin van Zonneveld');
|
||||||
|
// * returns 1: '6e658d4bfcb59cc13f96c14450ac40b9'
|
||||||
|
var xl;
|
||||||
|
|
||||||
|
var rotateLeft = function (lValue, iShiftBits) {
|
||||||
|
return (lValue << iShiftBits) | (lValue >>> (32 - iShiftBits));
|
||||||
|
};
|
||||||
|
|
||||||
|
var addUnsigned = function (lX, lY) {
|
||||||
|
var lX4, lY4, lX8, lY8, lResult;
|
||||||
|
lX8 = (lX & 0x80000000);
|
||||||
|
lY8 = (lY & 0x80000000);
|
||||||
|
lX4 = (lX & 0x40000000);
|
||||||
|
lY4 = (lY & 0x40000000);
|
||||||
|
lResult = (lX & 0x3FFFFFFF) + (lY & 0x3FFFFFFF);
|
||||||
|
if (lX4 & lY4) {
|
||||||
|
return (lResult ^ 0x80000000 ^ lX8 ^ lY8);
|
||||||
|
}
|
||||||
|
if (lX4 | lY4) {
|
||||||
|
if (lResult & 0x40000000) {
|
||||||
|
return (lResult ^ 0xC0000000 ^ lX8 ^ lY8);
|
||||||
|
} else {
|
||||||
|
return (lResult ^ 0x40000000 ^ lX8 ^ lY8);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return (lResult ^ lX8 ^ lY8);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
var _F = function (x, y, z) {
|
||||||
|
return (x & y) | ((~x) & z);
|
||||||
|
};
|
||||||
|
var _G = function (x, y, z) {
|
||||||
|
return (x & z) | (y & (~z));
|
||||||
|
};
|
||||||
|
var _H = function (x, y, z) {
|
||||||
|
return (x ^ y ^ z);
|
||||||
|
};
|
||||||
|
var _I = function (x, y, z) {
|
||||||
|
return (y ^ (x | (~z)));
|
||||||
|
};
|
||||||
|
|
||||||
|
var _FF = function (a, b, c, d, x, s, ac) {
|
||||||
|
a = addUnsigned(a, addUnsigned(addUnsigned(_F(b, c, d), x), ac));
|
||||||
|
return addUnsigned(rotateLeft(a, s), b);
|
||||||
|
};
|
||||||
|
|
||||||
|
var _GG = function (a, b, c, d, x, s, ac) {
|
||||||
|
a = addUnsigned(a, addUnsigned(addUnsigned(_G(b, c, d), x), ac));
|
||||||
|
return addUnsigned(rotateLeft(a, s), b);
|
||||||
|
};
|
||||||
|
|
||||||
|
var _HH = function (a, b, c, d, x, s, ac) {
|
||||||
|
a = addUnsigned(a, addUnsigned(addUnsigned(_H(b, c, d), x), ac));
|
||||||
|
return addUnsigned(rotateLeft(a, s), b);
|
||||||
|
};
|
||||||
|
|
||||||
|
var _II = function (a, b, c, d, x, s, ac) {
|
||||||
|
a = addUnsigned(a, addUnsigned(addUnsigned(_I(b, c, d), x), ac));
|
||||||
|
return addUnsigned(rotateLeft(a, s), b);
|
||||||
|
};
|
||||||
|
|
||||||
|
var convertToWordArray = function (str) {
|
||||||
|
var lWordCount;
|
||||||
|
var lMessageLength = str.length;
|
||||||
|
var lNumberOfWords_temp1 = lMessageLength + 8;
|
||||||
|
var lNumberOfWords_temp2 = (lNumberOfWords_temp1 - (lNumberOfWords_temp1 % 64)) / 64;
|
||||||
|
var lNumberOfWords = (lNumberOfWords_temp2 + 1) * 16;
|
||||||
|
var lWordArray = new Array(lNumberOfWords - 1);
|
||||||
|
var lBytePosition = 0;
|
||||||
|
var lByteCount = 0;
|
||||||
|
while (lByteCount < lMessageLength) {
|
||||||
|
lWordCount = (lByteCount - (lByteCount % 4)) / 4;
|
||||||
|
lBytePosition = (lByteCount % 4) * 8;
|
||||||
|
lWordArray[lWordCount] = (lWordArray[lWordCount] | (str.charCodeAt(lByteCount) << lBytePosition));
|
||||||
|
lByteCount++;
|
||||||
|
}
|
||||||
|
lWordCount = (lByteCount - (lByteCount % 4)) / 4;
|
||||||
|
lBytePosition = (lByteCount % 4) * 8;
|
||||||
|
lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80 << lBytePosition);
|
||||||
|
lWordArray[lNumberOfWords - 2] = lMessageLength << 3;
|
||||||
|
lWordArray[lNumberOfWords - 1] = lMessageLength >>> 29;
|
||||||
|
return lWordArray;
|
||||||
|
};
|
||||||
|
|
||||||
|
var wordToHex = function (lValue) {
|
||||||
|
var wordToHexValue = "",
|
||||||
|
wordToHexValue_temp = "",
|
||||||
|
lByte, lCount;
|
||||||
|
for (lCount = 0; lCount <= 3; lCount++) {
|
||||||
|
lByte = (lValue >>> (lCount * 8)) & 255;
|
||||||
|
wordToHexValue_temp = "0" + lByte.toString(16);
|
||||||
|
wordToHexValue = wordToHexValue + wordToHexValue_temp.substr(wordToHexValue_temp.length - 2, 2);
|
||||||
|
}
|
||||||
|
return wordToHexValue;
|
||||||
|
};
|
||||||
|
|
||||||
|
var x = [],
|
||||||
|
k, AA, BB, CC, DD, a, b, c, d, S11 = 7,
|
||||||
|
S12 = 12,
|
||||||
|
S13 = 17,
|
||||||
|
S14 = 22,
|
||||||
|
S21 = 5,
|
||||||
|
S22 = 9,
|
||||||
|
S23 = 14,
|
||||||
|
S24 = 20,
|
||||||
|
S31 = 4,
|
||||||
|
S32 = 11,
|
||||||
|
S33 = 16,
|
||||||
|
S34 = 23,
|
||||||
|
S41 = 6,
|
||||||
|
S42 = 10,
|
||||||
|
S43 = 15,
|
||||||
|
S44 = 21;
|
||||||
|
|
||||||
|
str = this.utf8_encode(str);
|
||||||
|
x = convertToWordArray(str);
|
||||||
|
a = 0x67452301;
|
||||||
|
b = 0xEFCDAB89;
|
||||||
|
c = 0x98BADCFE;
|
||||||
|
d = 0x10325476;
|
||||||
|
|
||||||
|
xl = x.length;
|
||||||
|
for (k = 0; k < xl; k += 16) {
|
||||||
|
AA = a;
|
||||||
|
BB = b;
|
||||||
|
CC = c;
|
||||||
|
DD = d;
|
||||||
|
a = _FF(a, b, c, d, x[k + 0], S11, 0xD76AA478);
|
||||||
|
d = _FF(d, a, b, c, x[k + 1], S12, 0xE8C7B756);
|
||||||
|
c = _FF(c, d, a, b, x[k + 2], S13, 0x242070DB);
|
||||||
|
b = _FF(b, c, d, a, x[k + 3], S14, 0xC1BDCEEE);
|
||||||
|
a = _FF(a, b, c, d, x[k + 4], S11, 0xF57C0FAF);
|
||||||
|
d = _FF(d, a, b, c, x[k + 5], S12, 0x4787C62A);
|
||||||
|
c = _FF(c, d, a, b, x[k + 6], S13, 0xA8304613);
|
||||||
|
b = _FF(b, c, d, a, x[k + 7], S14, 0xFD469501);
|
||||||
|
a = _FF(a, b, c, d, x[k + 8], S11, 0x698098D8);
|
||||||
|
d = _FF(d, a, b, c, x[k + 9], S12, 0x8B44F7AF);
|
||||||
|
c = _FF(c, d, a, b, x[k + 10], S13, 0xFFFF5BB1);
|
||||||
|
b = _FF(b, c, d, a, x[k + 11], S14, 0x895CD7BE);
|
||||||
|
a = _FF(a, b, c, d, x[k + 12], S11, 0x6B901122);
|
||||||
|
d = _FF(d, a, b, c, x[k + 13], S12, 0xFD987193);
|
||||||
|
c = _FF(c, d, a, b, x[k + 14], S13, 0xA679438E);
|
||||||
|
b = _FF(b, c, d, a, x[k + 15], S14, 0x49B40821);
|
||||||
|
a = _GG(a, b, c, d, x[k + 1], S21, 0xF61E2562);
|
||||||
|
d = _GG(d, a, b, c, x[k + 6], S22, 0xC040B340);
|
||||||
|
c = _GG(c, d, a, b, x[k + 11], S23, 0x265E5A51);
|
||||||
|
b = _GG(b, c, d, a, x[k + 0], S24, 0xE9B6C7AA);
|
||||||
|
a = _GG(a, b, c, d, x[k + 5], S21, 0xD62F105D);
|
||||||
|
d = _GG(d, a, b, c, x[k + 10], S22, 0x2441453);
|
||||||
|
c = _GG(c, d, a, b, x[k + 15], S23, 0xD8A1E681);
|
||||||
|
b = _GG(b, c, d, a, x[k + 4], S24, 0xE7D3FBC8);
|
||||||
|
a = _GG(a, b, c, d, x[k + 9], S21, 0x21E1CDE6);
|
||||||
|
d = _GG(d, a, b, c, x[k + 14], S22, 0xC33707D6);
|
||||||
|
c = _GG(c, d, a, b, x[k + 3], S23, 0xF4D50D87);
|
||||||
|
b = _GG(b, c, d, a, x[k + 8], S24, 0x455A14ED);
|
||||||
|
a = _GG(a, b, c, d, x[k + 13], S21, 0xA9E3E905);
|
||||||
|
d = _GG(d, a, b, c, x[k + 2], S22, 0xFCEFA3F8);
|
||||||
|
c = _GG(c, d, a, b, x[k + 7], S23, 0x676F02D9);
|
||||||
|
b = _GG(b, c, d, a, x[k + 12], S24, 0x8D2A4C8A);
|
||||||
|
a = _HH(a, b, c, d, x[k + 5], S31, 0xFFFA3942);
|
||||||
|
d = _HH(d, a, b, c, x[k + 8], S32, 0x8771F681);
|
||||||
|
c = _HH(c, d, a, b, x[k + 11], S33, 0x6D9D6122);
|
||||||
|
b = _HH(b, c, d, a, x[k + 14], S34, 0xFDE5380C);
|
||||||
|
a = _HH(a, b, c, d, x[k + 1], S31, 0xA4BEEA44);
|
||||||
|
d = _HH(d, a, b, c, x[k + 4], S32, 0x4BDECFA9);
|
||||||
|
c = _HH(c, d, a, b, x[k + 7], S33, 0xF6BB4B60);
|
||||||
|
b = _HH(b, c, d, a, x[k + 10], S34, 0xBEBFBC70);
|
||||||
|
a = _HH(a, b, c, d, x[k + 13], S31, 0x289B7EC6);
|
||||||
|
d = _HH(d, a, b, c, x[k + 0], S32, 0xEAA127FA);
|
||||||
|
c = _HH(c, d, a, b, x[k + 3], S33, 0xD4EF3085);
|
||||||
|
b = _HH(b, c, d, a, x[k + 6], S34, 0x4881D05);
|
||||||
|
a = _HH(a, b, c, d, x[k + 9], S31, 0xD9D4D039);
|
||||||
|
d = _HH(d, a, b, c, x[k + 12], S32, 0xE6DB99E5);
|
||||||
|
c = _HH(c, d, a, b, x[k + 15], S33, 0x1FA27CF8);
|
||||||
|
b = _HH(b, c, d, a, x[k + 2], S34, 0xC4AC5665);
|
||||||
|
a = _II(a, b, c, d, x[k + 0], S41, 0xF4292244);
|
||||||
|
d = _II(d, a, b, c, x[k + 7], S42, 0x432AFF97);
|
||||||
|
c = _II(c, d, a, b, x[k + 14], S43, 0xAB9423A7);
|
||||||
|
b = _II(b, c, d, a, x[k + 5], S44, 0xFC93A039);
|
||||||
|
a = _II(a, b, c, d, x[k + 12], S41, 0x655B59C3);
|
||||||
|
d = _II(d, a, b, c, x[k + 3], S42, 0x8F0CCC92);
|
||||||
|
c = _II(c, d, a, b, x[k + 10], S43, 0xFFEFF47D);
|
||||||
|
b = _II(b, c, d, a, x[k + 1], S44, 0x85845DD1);
|
||||||
|
a = _II(a, b, c, d, x[k + 8], S41, 0x6FA87E4F);
|
||||||
|
d = _II(d, a, b, c, x[k + 15], S42, 0xFE2CE6E0);
|
||||||
|
c = _II(c, d, a, b, x[k + 6], S43, 0xA3014314);
|
||||||
|
b = _II(b, c, d, a, x[k + 13], S44, 0x4E0811A1);
|
||||||
|
a = _II(a, b, c, d, x[k + 4], S41, 0xF7537E82);
|
||||||
|
d = _II(d, a, b, c, x[k + 11], S42, 0xBD3AF235);
|
||||||
|
c = _II(c, d, a, b, x[k + 2], S43, 0x2AD7D2BB);
|
||||||
|
b = _II(b, c, d, a, x[k + 9], S44, 0xEB86D391);
|
||||||
|
a = addUnsigned(a, AA);
|
||||||
|
b = addUnsigned(b, BB);
|
||||||
|
c = addUnsigned(c, CC);
|
||||||
|
d = addUnsigned(d, DD);
|
||||||
|
}
|
||||||
|
|
||||||
|
var temp = wordToHex(a) + wordToHex(b) + wordToHex(c) + wordToHex(d);
|
||||||
|
|
||||||
|
return temp.toLowerCase();
|
||||||
|
}
|
70
app/assets/javascripts/lib/utf8_encode.js
Normal file
|
@ -0,0 +1,70 @@
|
||||||
|
function utf8_encode (argString) {
|
||||||
|
// http://kevin.vanzonneveld.net
|
||||||
|
// + original by: Webtoolkit.info (http://www.webtoolkit.info/)
|
||||||
|
// + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
|
||||||
|
// + improved by: sowberry
|
||||||
|
// + tweaked by: Jack
|
||||||
|
// + bugfixed by: Onno Marsman
|
||||||
|
// + improved by: Yves Sucaet
|
||||||
|
// + bugfixed by: Onno Marsman
|
||||||
|
// + bugfixed by: Ulrich
|
||||||
|
// + bugfixed by: Rafal Kukawski
|
||||||
|
// + improved by: kirilloid
|
||||||
|
// + bugfixed by: kirilloid
|
||||||
|
// * example 1: utf8_encode('Kevin van Zonneveld');
|
||||||
|
// * returns 1: 'Kevin van Zonneveld'
|
||||||
|
|
||||||
|
if (argString === null || typeof argString === "undefined") {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
var string = (argString + ''); // .replace(/\r\n/g, "\n").replace(/\r/g, "\n");
|
||||||
|
var utftext = '',
|
||||||
|
start, end, stringl = 0;
|
||||||
|
|
||||||
|
start = end = 0;
|
||||||
|
stringl = string.length;
|
||||||
|
for (var n = 0; n < stringl; n++) {
|
||||||
|
var c1 = string.charCodeAt(n);
|
||||||
|
var enc = null;
|
||||||
|
|
||||||
|
if (c1 < 128) {
|
||||||
|
end++;
|
||||||
|
} else if (c1 > 127 && c1 < 2048) {
|
||||||
|
enc = String.fromCharCode(
|
||||||
|
(c1 >> 6) | 192,
|
||||||
|
( c1 & 63) | 128
|
||||||
|
);
|
||||||
|
} else if (c1 & 0xF800 != 0xD800) {
|
||||||
|
enc = String.fromCharCode(
|
||||||
|
(c1 >> 12) | 224,
|
||||||
|
((c1 >> 6) & 63) | 128,
|
||||||
|
( c1 & 63) | 128
|
||||||
|
);
|
||||||
|
} else { // surrogate pairs
|
||||||
|
if (c1 & 0xFC00 != 0xD800) { throw new RangeError("Unmatched trail surrogate at " + n); }
|
||||||
|
var c2 = string.charCodeAt(++n);
|
||||||
|
if (c2 & 0xFC00 != 0xDC00) { throw new RangeError("Unmatched lead surrogate at " + (n-1)); }
|
||||||
|
c1 = ((c1 & 0x3FF) << 10) + (c2 & 0x3FF) + 0x10000;
|
||||||
|
enc = String.fromCharCode(
|
||||||
|
(c1 >> 18) | 240,
|
||||||
|
((c1 >> 12) & 63) | 128,
|
||||||
|
((c1 >> 6) & 63) | 128,
|
||||||
|
( c1 & 63) | 128
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if (enc !== null) {
|
||||||
|
if (end > start) {
|
||||||
|
utftext += string.slice(start, end);
|
||||||
|
}
|
||||||
|
utftext += enc;
|
||||||
|
start = end = n + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (end > start) {
|
||||||
|
utftext += string.slice(start, stringl);
|
||||||
|
}
|
||||||
|
|
||||||
|
return utftext;
|
||||||
|
}
|
|
@ -7,6 +7,8 @@ window.slugify = (text) ->
|
||||||
window.ajaxGet = (url) ->
|
window.ajaxGet = (url) ->
|
||||||
$.ajax({type: "GET", url: url, dataType: "script"})
|
$.ajax({type: "GET", url: url, dataType: "script"})
|
||||||
|
|
||||||
|
window.showAndHide = (selector) ->
|
||||||
|
|
||||||
window.errorMessage = (message) ->
|
window.errorMessage = (message) ->
|
||||||
ehtml = $("<p>")
|
ehtml = $("<p>")
|
||||||
ehtml.addClass("error_message")
|
ehtml.addClass("error_message")
|
||||||
|
@ -32,10 +34,22 @@ window.disableButtonIfEmptyField = (field_selector, button_selector) ->
|
||||||
else
|
else
|
||||||
closest_submit.enable()
|
closest_submit.enable()
|
||||||
|
|
||||||
|
window.sanitize = (str) ->
|
||||||
|
return str.replace(/<(?:.|\n)*?>/gm, '')
|
||||||
|
|
||||||
|
window.linkify = (str) ->
|
||||||
|
exp = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig
|
||||||
|
return str.replace(exp,"<a href='$1'>$1</a>")
|
||||||
|
|
||||||
|
|
||||||
$ ->
|
$ ->
|
||||||
# Click a .one_click_select field, select the contents
|
# Click a .one_click_select field, select the contents
|
||||||
$(".one_click_select").on 'click', -> $(@).select()
|
$(".one_click_select").on 'click', -> $(@).select()
|
||||||
|
|
||||||
|
# Click a .appear-link, appear-data fadeout
|
||||||
|
$(".appear-link").on 'click', ->
|
||||||
|
$('.appear-data').fadeIn()
|
||||||
|
|
||||||
# Initialize chosen selects
|
# Initialize chosen selects
|
||||||
$('select.chosen').chosen()
|
$('select.chosen').chosen()
|
||||||
|
|
||||||
|
@ -45,11 +59,17 @@ $ ->
|
||||||
# Bottom tooltip
|
# Bottom tooltip
|
||||||
$('.has_bottom_tooltip').tooltip(placement: 'bottom')
|
$('.has_bottom_tooltip').tooltip(placement: 'bottom')
|
||||||
|
|
||||||
|
# Form submitter
|
||||||
|
$('.trigger-submit').on 'change', ->
|
||||||
|
$(@).parents('form').submit()
|
||||||
|
|
||||||
|
$("abbr.timeago").timeago()
|
||||||
|
|
||||||
# Flash
|
# Flash
|
||||||
if (flash = $("#flash-container")).length > 0
|
if (flash = $(".flash-container")).length > 0
|
||||||
flash.click -> $(@).slideUp("slow")
|
flash.click -> $(@).fadeOut()
|
||||||
flash.slideDown "slow"
|
flash.show()
|
||||||
setTimeout (-> flash.slideUp("slow")), 3000
|
setTimeout (-> flash.fadeOut()), 3000
|
||||||
|
|
||||||
# Disable form buttons while a form is submitting
|
# Disable form buttons while a form is submitting
|
||||||
$('body').on 'ajax:complete, ajax:beforeSend, submit', 'form', (e) ->
|
$('body').on 'ajax:complete, ajax:beforeSend, submit', 'form', (e) ->
|
||||||
|
|
|
@ -1,132 +0,0 @@
|
||||||
var MergeRequest = {
|
|
||||||
diffs_loaded: false,
|
|
||||||
commits_loaded: false,
|
|
||||||
opts: false,
|
|
||||||
|
|
||||||
init:
|
|
||||||
function(opts) {
|
|
||||||
var self = this;
|
|
||||||
self.opts = opts;
|
|
||||||
|
|
||||||
self.initTabs();
|
|
||||||
self.initMergeWidget();
|
|
||||||
|
|
||||||
$(".mr_show_all_commits").bind("click", function() {
|
|
||||||
self.showAllCommits();
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
initMergeWidget:
|
|
||||||
function() {
|
|
||||||
var self = this;
|
|
||||||
self.showState(self.opts.current_state);
|
|
||||||
|
|
||||||
if($(".automerge_widget").length && self.opts.check_enable){
|
|
||||||
$.get(self.opts.url_to_automerge_check, function(data){
|
|
||||||
self.showState(data.state);
|
|
||||||
}, "json");
|
|
||||||
}
|
|
||||||
|
|
||||||
if(self.opts.ci_enable){
|
|
||||||
$.get(self.opts.url_to_ci_check, function(data){
|
|
||||||
self.showCiState(data.status);
|
|
||||||
}, "json");
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
initTabs:
|
|
||||||
function() {
|
|
||||||
$(".mr_nav_tabs a").live("click", function() {
|
|
||||||
$(".mr_nav_tabs a").parent().removeClass("active");
|
|
||||||
$(this).parent().addClass("active");
|
|
||||||
});
|
|
||||||
|
|
||||||
var current_tab;
|
|
||||||
if(this.opts.action == "diffs") {
|
|
||||||
current_tab = $(".mr_nav_tabs .merge-diffs-tab");
|
|
||||||
} else {
|
|
||||||
current_tab = $(".mr_nav_tabs .merge-notes-tab");
|
|
||||||
}
|
|
||||||
current_tab.parent().addClass("active");
|
|
||||||
|
|
||||||
this.initNotesTab();
|
|
||||||
this.initDiffTab();
|
|
||||||
},
|
|
||||||
|
|
||||||
initNotesTab:
|
|
||||||
function() {
|
|
||||||
$(".mr_nav_tabs a.merge-notes-tab").live("click", function(e) {
|
|
||||||
$(".merge-request-diffs").hide();
|
|
||||||
$(".merge_request_notes").show();
|
|
||||||
var mr_path = $(".merge-notes-tab").attr("data-url");
|
|
||||||
history.pushState({ path: mr_path }, '', mr_path);
|
|
||||||
e.preventDefault();
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
initDiffTab:
|
|
||||||
function() {
|
|
||||||
$(".mr_nav_tabs a.merge-diffs-tab").live("click", function(e) {
|
|
||||||
if(!MergeRequest.diffs_loaded) {
|
|
||||||
MergeRequest.loadDiff();
|
|
||||||
}
|
|
||||||
$(".merge_request_notes").hide();
|
|
||||||
$(".merge-request-diffs").show();
|
|
||||||
var mr_diff_path = $(".merge-diffs-tab").attr("data-url");
|
|
||||||
history.pushState({ path: mr_diff_path }, '', mr_diff_path);
|
|
||||||
e.preventDefault();
|
|
||||||
});
|
|
||||||
|
|
||||||
},
|
|
||||||
|
|
||||||
showState:
|
|
||||||
function(state){
|
|
||||||
$(".automerge_widget").hide();
|
|
||||||
$(".automerge_widget." + state).show();
|
|
||||||
},
|
|
||||||
|
|
||||||
showCiState:
|
|
||||||
function(state){
|
|
||||||
$(".ci_widget").hide();
|
|
||||||
$(".ci_widget.ci-" + state).show();
|
|
||||||
},
|
|
||||||
|
|
||||||
loadDiff:
|
|
||||||
function() {
|
|
||||||
$(".dashboard-loader").show();
|
|
||||||
$.ajax({
|
|
||||||
type: "GET",
|
|
||||||
url: $(".merge-diffs-tab").attr("data-url"),
|
|
||||||
beforeSend: function(){ $('.status').addClass("loading")},
|
|
||||||
complete: function(){
|
|
||||||
MergeRequest.diffs_loaded = true;
|
|
||||||
$(".merge_request_notes").hide();
|
|
||||||
$('.status').removeClass("loading");
|
|
||||||
},
|
|
||||||
dataType: "script"});
|
|
||||||
},
|
|
||||||
|
|
||||||
showAllCommits:
|
|
||||||
function() {
|
|
||||||
$(".first_mr_commits").remove();
|
|
||||||
$(".all_mr_commits").removeClass("hide");
|
|
||||||
},
|
|
||||||
|
|
||||||
already_cannot_be_merged:
|
|
||||||
function(){
|
|
||||||
$(".automerge_widget").hide();
|
|
||||||
$(".merge_in_progress").hide();
|
|
||||||
$(".automerge_widget.already_cannot_be_merged").show();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Filter merge requests
|
|
||||||
*/
|
|
||||||
function merge_requestsPage() {
|
|
||||||
$("#assignee_id").chosen();
|
|
||||||
$("#milestone_id").chosen();
|
|
||||||
$("#milestone_id, #assignee_id").on("change", function(){
|
|
||||||
$(this).closest("form").submit();
|
|
||||||
});
|
|
||||||
}
|
|
101
app/assets/javascripts/merge_requests.js.coffee
Normal file
|
@ -0,0 +1,101 @@
|
||||||
|
#
|
||||||
|
# * Filter merge requests
|
||||||
|
#
|
||||||
|
@merge_requestsPage = ->
|
||||||
|
$('#assignee_id').chosen()
|
||||||
|
$('#milestone_id').chosen()
|
||||||
|
$('#milestone_id, #assignee_id').on 'change', ->
|
||||||
|
$(this).closest('form').submit()
|
||||||
|
|
||||||
|
class MergeRequest
|
||||||
|
|
||||||
|
constructor: (@opts) ->
|
||||||
|
this.$el = $('.merge-request')
|
||||||
|
@diffs_loaded = false
|
||||||
|
@commits_loaded = false
|
||||||
|
|
||||||
|
this.activateTab(@opts.action)
|
||||||
|
|
||||||
|
this.bindEvents()
|
||||||
|
|
||||||
|
this.initMergeWidget()
|
||||||
|
this.$('.show-all-commits').on 'click', =>
|
||||||
|
this.showAllCommits()
|
||||||
|
|
||||||
|
# Local jQuery finder
|
||||||
|
$: (selector) ->
|
||||||
|
this.$el.find(selector)
|
||||||
|
|
||||||
|
initMergeWidget: ->
|
||||||
|
this.showState( @opts.current_status )
|
||||||
|
|
||||||
|
if this.$('.automerge_widget').length and @opts.check_enable
|
||||||
|
$.get @opts.url_to_automerge_check, (data) =>
|
||||||
|
this.showState( data.merge_status )
|
||||||
|
, 'json'
|
||||||
|
|
||||||
|
if @opts.ci_enable
|
||||||
|
$.get @opts.url_to_ci_check, (data) =>
|
||||||
|
this.showCiState data.status
|
||||||
|
, 'json'
|
||||||
|
|
||||||
|
bindEvents: ->
|
||||||
|
this.$('.nav-tabs').on 'click', 'a', (event) =>
|
||||||
|
a = $(event.currentTarget)
|
||||||
|
|
||||||
|
href = a.attr('href')
|
||||||
|
History.replaceState {path: href}, document.title, href
|
||||||
|
|
||||||
|
event.preventDefault()
|
||||||
|
|
||||||
|
this.$('.nav-tabs').on 'click', 'li', (event) =>
|
||||||
|
this.activateTab($(event.currentTarget).data('action'))
|
||||||
|
|
||||||
|
this.$('.accept_merge_request').on 'click', ->
|
||||||
|
$('.automerge_widget.can_be_merged').hide()
|
||||||
|
$('.merge-in-progress').show()
|
||||||
|
|
||||||
|
activateTab: (action) ->
|
||||||
|
this.$('.nav-tabs li').removeClass 'active'
|
||||||
|
this.$('.tab-content').hide()
|
||||||
|
switch action
|
||||||
|
when 'diffs'
|
||||||
|
this.$('.nav-tabs .diffs-tab').addClass 'active'
|
||||||
|
this.loadDiff() unless @diffs_loaded
|
||||||
|
this.$('.diffs').show()
|
||||||
|
else
|
||||||
|
this.$('.nav-tabs .notes-tab').addClass 'active'
|
||||||
|
this.$('.notes').show()
|
||||||
|
|
||||||
|
showState: (state) ->
|
||||||
|
$('.automerge_widget').hide()
|
||||||
|
$('.automerge_widget.' + state).show()
|
||||||
|
|
||||||
|
showCiState: (state) ->
|
||||||
|
$('.ci_widget').hide()
|
||||||
|
$('.ci_widget.ci-' + state).show()
|
||||||
|
|
||||||
|
loadDiff: (event) ->
|
||||||
|
$('.dashboard-loader').show()
|
||||||
|
$.ajax
|
||||||
|
type: 'GET'
|
||||||
|
url: this.$('.nav-tabs .diffs-tab a').attr('href')
|
||||||
|
beforeSend: =>
|
||||||
|
this.$('.status').addClass 'loading'
|
||||||
|
|
||||||
|
complete: =>
|
||||||
|
@diffs_loaded = true
|
||||||
|
this.$('.status').removeClass 'loading'
|
||||||
|
|
||||||
|
dataType: 'script'
|
||||||
|
|
||||||
|
showAllCommits: ->
|
||||||
|
this.$('.first-commits').remove()
|
||||||
|
this.$('.all-commits').removeClass 'hide'
|
||||||
|
|
||||||
|
alreadyOrCannotBeMerged: ->
|
||||||
|
this.$('.automerge_widget').hide()
|
||||||
|
this.$('.merge-in-progress').hide()
|
||||||
|
this.$('.automerge_widget.already_cannot_be_merged').show()
|
||||||
|
|
||||||
|
this.MergeRequest = MergeRequest
|
|
@ -1,14 +1,14 @@
|
||||||
$ ->
|
$ ->
|
||||||
$('.milestone-issue-filter tr[data-closed]').addClass('hide')
|
$('.milestone-issue-filter li[data-closed]').addClass('hide')
|
||||||
|
|
||||||
$('.milestone-issue-filter ul.nav li a').click ->
|
$('.milestone-issue-filter ul.nav li a').click ->
|
||||||
$('.milestone-issue-filter li').toggleClass('active')
|
$('.milestone-issue-filter li').toggleClass('active')
|
||||||
$('.milestone-issue-filter tr[data-closed]').toggleClass('hide')
|
$('.milestone-issue-filter li[data-closed]').toggleClass('hide')
|
||||||
false
|
false
|
||||||
|
|
||||||
$('.milestone-merge-requests-filter tr[data-closed]').addClass('hide')
|
$('.milestone-merge-requests-filter li[data-closed]').addClass('hide')
|
||||||
|
|
||||||
$('.milestone-merge-requests-filter ul.nav li a').click ->
|
$('.milestone-merge-requests-filter ul.nav li a').click ->
|
||||||
$('.milestone-merge-requests-filter li').toggleClass('active')
|
$('.milestone-merge-requests-filter li').toggleClass('active')
|
||||||
$('.milestone-merge-requests-filter tr[data-closed]').toggleClass('hide')
|
$('.milestone-merge-requests-filter li[data-closed]').toggleClass('hide')
|
||||||
false
|
false
|
||||||
|
|
|
@ -4,77 +4,304 @@ var NoteList = {
|
||||||
target_params: null,
|
target_params: null,
|
||||||
target_id: 0,
|
target_id: 0,
|
||||||
target_type: null,
|
target_type: null,
|
||||||
top_id: 0,
|
|
||||||
bottom_id: 0,
|
|
||||||
loading_more_disabled: false,
|
|
||||||
reversed: false,
|
|
||||||
|
|
||||||
init:
|
init: function(tid, tt, path) {
|
||||||
function(tid, tt, path) {
|
NoteList.notes_path = path + ".js";
|
||||||
this.notes_path = path + ".js";
|
NoteList.target_id = tid;
|
||||||
this.target_id = tid;
|
NoteList.target_type = tt;
|
||||||
this.target_type = tt;
|
NoteList.target_params = "target_type=" + NoteList.target_type + "&target_id=" + NoteList.target_id;
|
||||||
this.reversed = $("#notes-list").is(".reversed");
|
|
||||||
this.target_params = "target_type=" + this.target_type + "&target_id=" + this.target_id;
|
|
||||||
|
|
||||||
// get initial set of notes
|
NoteList.setupMainTargetNoteForm();
|
||||||
this.getContent();
|
|
||||||
|
|
||||||
$("#notes-list, #new-notes-list").on("ajax:success", ".delete-note", function() {
|
// get initial set of notes
|
||||||
$(this).closest('li').fadeOut(function() {
|
NoteList.getContent();
|
||||||
$(this).remove();
|
|
||||||
NoteList.updateVotes();
|
// add a new diff note
|
||||||
|
$(document).on("click",
|
||||||
|
".js-add-diff-note-button",
|
||||||
|
NoteList.addDiffNote);
|
||||||
|
|
||||||
|
// reply to diff/discussion notes
|
||||||
|
$(document).on("click",
|
||||||
|
".js-discussion-reply-button",
|
||||||
|
NoteList.replyToDiscussionNote);
|
||||||
|
|
||||||
|
// setup note preview
|
||||||
|
$(document).on("click",
|
||||||
|
".js-note-preview-button",
|
||||||
|
NoteList.previewNote);
|
||||||
|
|
||||||
|
// update the file name when an attachment is selected
|
||||||
|
$(document).on("change",
|
||||||
|
".js-note-attachment-input",
|
||||||
|
NoteList.updateFormAttachment);
|
||||||
|
|
||||||
|
// hide diff note form
|
||||||
|
$(document).on("click",
|
||||||
|
".js-close-discussion-note-form",
|
||||||
|
NoteList.removeDiscussionNoteForm);
|
||||||
|
|
||||||
|
// remove a note (in general)
|
||||||
|
$(document).on("click",
|
||||||
|
".js-note-delete",
|
||||||
|
NoteList.removeNote);
|
||||||
|
|
||||||
|
// reset main target form after submit
|
||||||
|
$(document).on("ajax:complete",
|
||||||
|
".js-main-target-form",
|
||||||
|
NoteList.resetMainTargetForm);
|
||||||
|
|
||||||
|
|
||||||
|
$(document).on("click",
|
||||||
|
".js-choose-note-attachment-button",
|
||||||
|
NoteList.chooseNoteAttachment);
|
||||||
|
|
||||||
|
$(document).on("click",
|
||||||
|
".js-show-outdated-discussion",
|
||||||
|
function(e) { $(this).next('.outdated-discussion').show(); e.preventDefault() });
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* When clicking on buttons
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called when clicking on the "add a comment" button on the side of a diff line.
|
||||||
|
*
|
||||||
|
* Inserts a temporary row for the form below the line.
|
||||||
|
* Sets up the form and shows it.
|
||||||
|
*/
|
||||||
|
addDiffNote: function(e) {
|
||||||
|
e.preventDefault();
|
||||||
|
|
||||||
|
// find the form
|
||||||
|
var form = $(".js-new-note-form");
|
||||||
|
var row = $(this).closest("tr");
|
||||||
|
var nextRow = row.next();
|
||||||
|
|
||||||
|
// does it already have notes?
|
||||||
|
if (nextRow.is(".notes_holder")) {
|
||||||
|
$.proxy(NoteList.replyToDiscussionNote,
|
||||||
|
nextRow.find(".js-discussion-reply-button")
|
||||||
|
).call();
|
||||||
|
} else {
|
||||||
|
// add a notes row and insert the form
|
||||||
|
row.after('<tr class="notes_holder js-temp-notes-holder"><td class="notes_line" colspan="2"></td><td class="notes_content"></td></tr>');
|
||||||
|
form.clone().appendTo(row.next().find(".notes_content"));
|
||||||
|
|
||||||
|
// show the form
|
||||||
|
NoteList.setupDiscussionNoteForm($(this), row.next().find("form"));
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called when clicking the "Choose File" button.
|
||||||
|
*
|
||||||
|
* Opesn the file selection dialog.
|
||||||
|
*/
|
||||||
|
chooseNoteAttachment: function() {
|
||||||
|
var form = $(this).closest("form");
|
||||||
|
|
||||||
|
form.find(".js-note-attachment-input").click();
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Shows the note preview.
|
||||||
|
*
|
||||||
|
* Lets the server render GFM into Html and displays it.
|
||||||
|
*
|
||||||
|
* Note: uses the Toggler behavior to toggle preview/edit views/buttons
|
||||||
|
*/
|
||||||
|
previewNote: function(e) {
|
||||||
|
e.preventDefault();
|
||||||
|
|
||||||
|
var form = $(this).closest("form");
|
||||||
|
var preview = form.find('.js-note-preview');
|
||||||
|
var noteText = form.find('.js-note-text').val();
|
||||||
|
|
||||||
|
if(noteText.trim().length === 0) {
|
||||||
|
preview.text('Nothing to preview.');
|
||||||
|
} else {
|
||||||
|
preview.text('Loading...');
|
||||||
|
$.post($(this).data('url'), {note: noteText})
|
||||||
|
.success(function(previewData) {
|
||||||
|
preview.html(previewData);
|
||||||
});
|
});
|
||||||
});
|
}
|
||||||
|
},
|
||||||
|
|
||||||
$(".note-form-holder").on("ajax:before", function(){
|
/**
|
||||||
$(".submit_note").disable();
|
* Called in response to "cancel" on a diff note form.
|
||||||
})
|
*
|
||||||
|
* Shows the reply button again.
|
||||||
|
* Removes the form and if necessary it's temporary row.
|
||||||
|
*/
|
||||||
|
removeDiscussionNoteForm: function() {
|
||||||
|
var form = $(this).closest("form");
|
||||||
|
var row = form.closest("tr");
|
||||||
|
|
||||||
$(".note-form-holder").on("ajax:complete", function(){
|
// show the reply button (will only work for replys)
|
||||||
$(".submit_note").enable();
|
form.prev(".js-discussion-reply-button").show();
|
||||||
$('#preview-note').hide();
|
|
||||||
$('#note_note').show();
|
|
||||||
})
|
|
||||||
|
|
||||||
disableButtonIfEmptyField(".note-text", ".submit_note");
|
if (row.is(".js-temp-notes-holder")) {
|
||||||
|
// remove temporary row for diff lines
|
||||||
|
row.remove();
|
||||||
|
} else {
|
||||||
|
// only remove the form
|
||||||
|
form.remove();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
$("#note_attachment").change(function(e){
|
/**
|
||||||
var val = $('.input-file').val();
|
* Called in response to deleting a note of any kind.
|
||||||
var filename = val.replace(/^.*[\\\/]/, '');
|
*
|
||||||
$(".file_name").text(filename);
|
* Removes the actual note from view.
|
||||||
});
|
* Removes the whole discussion if the last note is being removed.
|
||||||
|
*/
|
||||||
|
removeNote: function() {
|
||||||
|
var note = $(this).closest(".note");
|
||||||
|
var notes = note.closest(".notes");
|
||||||
|
|
||||||
if(this.reversed) {
|
// check if this is the last note for this line
|
||||||
var textarea = $(".note-text");
|
if (notes.find(".note").length === 1) {
|
||||||
$('.note_advanced_opts').hide();
|
// for discussions
|
||||||
textarea.css("height", "40px");
|
notes.closest(".discussion").remove();
|
||||||
textarea.on("focus", function(){
|
|
||||||
$(this).css("height", "80px");
|
// for diff lines
|
||||||
$('.note_advanced_opts').show();
|
notes.closest("tr").remove();
|
||||||
});
|
}
|
||||||
|
|
||||||
|
note.remove();
|
||||||
|
NoteList.updateVotes();
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called when clicking on the "reply" button for a diff line.
|
||||||
|
*
|
||||||
|
* Shows the note form below the notes.
|
||||||
|
*/
|
||||||
|
replyToDiscussionNote: function() {
|
||||||
|
// find the form
|
||||||
|
var form = $(".js-new-note-form");
|
||||||
|
|
||||||
|
// hide reply button
|
||||||
|
$(this).hide();
|
||||||
|
// insert the form after the button
|
||||||
|
form.clone().insertAfter($(this));
|
||||||
|
|
||||||
|
// show the form
|
||||||
|
NoteList.setupDiscussionNoteForm($(this), $(this).next("form"));
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Helper for inserting and setting up note forms.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called in response to creating a note failing validation.
|
||||||
|
*
|
||||||
|
* Adds the rendered errors to the respective form.
|
||||||
|
* If "discussionId" is null or undefined, the main target form is assumed.
|
||||||
|
*/
|
||||||
|
errorsOnForm: function(errorsHtml, discussionId) {
|
||||||
|
// find the form
|
||||||
|
if (discussionId) {
|
||||||
|
var form = $("form[rel='"+discussionId+"']");
|
||||||
|
} else {
|
||||||
|
var form = $(".js-main-target-form");
|
||||||
|
}
|
||||||
|
|
||||||
|
form.find(".js-errors").remove();
|
||||||
|
form.prepend(errorsHtml);
|
||||||
|
|
||||||
|
form.find(".js-note-text").focus();
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Shows the diff/discussion form and does some setup on it.
|
||||||
|
*
|
||||||
|
* Sets some hidden fields in the form.
|
||||||
|
*
|
||||||
|
* Note: dataHolder must have the "discussionId", "lineCode", "noteableType"
|
||||||
|
* and "noteableId" data attributes set.
|
||||||
|
*/
|
||||||
|
setupDiscussionNoteForm: function(dataHolder, form) {
|
||||||
|
// setup note target
|
||||||
|
form.attr("rel", dataHolder.data("discussionId"));
|
||||||
|
form.find("#note_commit_id").val(dataHolder.data("commitId"));
|
||||||
|
form.find("#note_line_code").val(dataHolder.data("lineCode"));
|
||||||
|
form.find("#note_noteable_type").val(dataHolder.data("noteableType"));
|
||||||
|
form.find("#note_noteable_id").val(dataHolder.data("noteableId"));
|
||||||
|
|
||||||
|
NoteList.setupNoteForm(form);
|
||||||
|
|
||||||
|
form.find(".js-note-text").focus();
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Shows the main form and does some setup on it.
|
||||||
|
*
|
||||||
|
* Sets some hidden fields in the form.
|
||||||
|
*/
|
||||||
|
setupMainTargetNoteForm: function() {
|
||||||
|
// find the form
|
||||||
|
var form = $(".js-new-note-form");
|
||||||
|
// insert the form after the button
|
||||||
|
form.clone().replaceAll($(".js-main-target-form"));
|
||||||
|
|
||||||
|
form = form.prev("form");
|
||||||
|
|
||||||
|
// show the form
|
||||||
|
NoteList.setupNoteForm(form);
|
||||||
|
|
||||||
|
// fix classes
|
||||||
|
form.removeClass("js-new-note-form");
|
||||||
|
form.addClass("js-main-target-form");
|
||||||
|
|
||||||
|
// remove unnecessary fields and buttons
|
||||||
|
form.find("#note_line_code").remove();
|
||||||
|
form.find(".js-close-discussion-note-form").remove();
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* General note form setup.
|
||||||
|
*
|
||||||
|
* * deactivates the submit button when text is empty
|
||||||
|
* * hides the preview button when text is empty
|
||||||
|
* * setup GFM auto complete
|
||||||
|
* * show the form
|
||||||
|
*/
|
||||||
|
setupNoteForm: function(form) {
|
||||||
|
disableButtonIfEmptyField(form.find(".js-note-text"), form.find(".js-comment-button"));
|
||||||
|
|
||||||
|
form.removeClass("js-new-note-form");
|
||||||
|
|
||||||
|
// setup preview buttons
|
||||||
|
form.find(".js-note-edit-button, .js-note-preview-button")
|
||||||
|
.tooltip({ placement: 'left' });
|
||||||
|
|
||||||
|
previewButton = form.find(".js-note-preview-button");
|
||||||
|
form.find(".js-note-text").on("input", function() {
|
||||||
|
if ($(this).val().trim() !== "") {
|
||||||
|
previewButton.removeClass("turn-off").addClass("turn-on");
|
||||||
|
} else {
|
||||||
|
previewButton.removeClass("turn-on").addClass("turn-off");
|
||||||
}
|
}
|
||||||
|
});
|
||||||
|
|
||||||
// Setup note preview
|
// remove notify commit author checkbox for non-commit notes
|
||||||
$(document).on('click', '#preview-link', function(e) {
|
if (form.find("#note_noteable_type").val() !== "Commit") {
|
||||||
$('#preview-note').text('Loading...');
|
form.find(".js-notify-commit-author").remove();
|
||||||
|
}
|
||||||
|
|
||||||
$(this).text($(this).text() === "Edit" ? "Preview" : "Edit");
|
GitLab.GfmAutoComplete.setup();
|
||||||
|
|
||||||
var note_text = $('#note_note').val();
|
form.show();
|
||||||
|
},
|
||||||
if(note_text.trim().length === 0) {
|
|
||||||
$('#preview-note').text('Nothing to preview.');
|
|
||||||
} else {
|
|
||||||
$.post($(this).attr('href'), {note: note_text}).success(function(data) {
|
|
||||||
$('#preview-note').html(data);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
$('#preview-note, #note_note').toggle();
|
|
||||||
e.preventDefault();
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -84,162 +311,93 @@ var NoteList = {
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets an inital set of notes.
|
* Gets an initial set of notes.
|
||||||
*/
|
*/
|
||||||
getContent:
|
getContent: function() {
|
||||||
function() {
|
$.ajax({
|
||||||
$.ajax({
|
url: NoteList.notes_path,
|
||||||
type: "GET",
|
data: NoteList.target_params,
|
||||||
url: this.notes_path,
|
complete: function(){ $('.js-notes-busy').removeClass("loading")},
|
||||||
data: this.target_params,
|
beforeSend: function() { $('.js-notes-busy').addClass("loading") },
|
||||||
complete: function(){ $('.notes-status').removeClass("loading")},
|
dataType: "script"
|
||||||
beforeSend: function() { $('.notes-status').addClass("loading") },
|
});
|
||||||
dataType: "script"});
|
},
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called in response to getContent().
|
* Called in response to getContent().
|
||||||
* Replaces the content of #notes-list with the given html.
|
* Replaces the content of #notes-list with the given html.
|
||||||
*/
|
*/
|
||||||
setContent:
|
setContent: function(newNoteIds, html) {
|
||||||
function(first_id, last_id, html) {
|
$("#notes-list").html(html);
|
||||||
this.top_id = first_id;
|
},
|
||||||
this.bottom_id = last_id;
|
|
||||||
$("#notes-list").html(html);
|
|
||||||
|
|
||||||
// init infinite scrolling
|
|
||||||
this.initLoadMore();
|
|
||||||
|
|
||||||
// init getting new notes
|
|
||||||
if (this.reversed) {
|
|
||||||
this.initRefreshNew();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handle loading more notes when scrolling to the bottom of the page.
|
* Adds a single common note to #notes-list.
|
||||||
* The id of the last note in the list is in this.bottom_id.
|
*/
|
||||||
|
appendNewNote: function(id, html) {
|
||||||
|
$("#notes-list").append(html);
|
||||||
|
NoteList.updateVotes();
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a single discussion note to #notes-list.
|
||||||
*
|
*
|
||||||
* Set up refreshing only new notes after all notes have been loaded.
|
* Also removes the corresponding form.
|
||||||
*/
|
*/
|
||||||
|
appendNewDiscussionNote: function(discussionId, diffRowHtml, noteHtml) {
|
||||||
|
var form = $("form[rel='"+discussionId+"']");
|
||||||
|
var row = form.closest("tr");
|
||||||
|
|
||||||
|
// is this the first note of discussion?
|
||||||
|
if (row.is(".js-temp-notes-holder")) {
|
||||||
|
// insert the note and the reply button after the temp row
|
||||||
|
row.after(diffRowHtml);
|
||||||
|
// remove the note (will be added again below)
|
||||||
|
row.next().find(".note").remove();
|
||||||
|
}
|
||||||
|
|
||||||
|
// append new note to all matching discussions
|
||||||
|
$(".notes[rel='"+discussionId+"']").append(noteHtml);
|
||||||
|
|
||||||
|
// cleanup after successfully creating a diff/discussion note
|
||||||
|
$.proxy(NoteList.removeDiscussionNoteForm, form).call();
|
||||||
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initializes loading more notes when scrolling to the bottom of the page.
|
* Called in response the main target form has been successfully submitted.
|
||||||
*/
|
|
||||||
initLoadMore:
|
|
||||||
function() {
|
|
||||||
$(document).endlessScroll({
|
|
||||||
bottomPixels: 400,
|
|
||||||
fireDelay: 1000,
|
|
||||||
fireOnce:true,
|
|
||||||
ceaseFire: function() {
|
|
||||||
return NoteList.loading_more_disabled;
|
|
||||||
},
|
|
||||||
callback: function(i) {
|
|
||||||
NoteList.getMore();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets an additional set of notes.
|
|
||||||
*/
|
|
||||||
getMore:
|
|
||||||
function() {
|
|
||||||
// only load more notes if there are no "new" notes
|
|
||||||
$('.loading').show();
|
|
||||||
$.ajax({
|
|
||||||
type: "GET",
|
|
||||||
url: this.notes_path,
|
|
||||||
data: this.target_params + "&loading_more=1&" + (this.reversed ? "before_id" : "after_id") + "=" + this.bottom_id,
|
|
||||||
complete: function(){ $('.notes-status').removeClass("loading")},
|
|
||||||
beforeSend: function() { $('.notes-status').addClass("loading") },
|
|
||||||
dataType: "script"});
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Called in response to getMore().
|
|
||||||
* Append notes to #notes-list.
|
|
||||||
*/
|
|
||||||
appendMoreNotes:
|
|
||||||
function(id, html) {
|
|
||||||
if(id != this.bottom_id) {
|
|
||||||
this.bottom_id = id;
|
|
||||||
$("#notes-list").append(html);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Called in response to getMore().
|
|
||||||
* Disables loading more notes when scrolling to the bottom of the page.
|
|
||||||
* Initalizes refreshing new notes.
|
|
||||||
*/
|
|
||||||
finishedLoadingMore:
|
|
||||||
function() {
|
|
||||||
this.loading_more_disabled = true;
|
|
||||||
|
|
||||||
// from now on only get new notes
|
|
||||||
if (!this.reversed) {
|
|
||||||
this.initRefreshNew();
|
|
||||||
}
|
|
||||||
// make sure we are up to date
|
|
||||||
this.updateVotes();
|
|
||||||
},
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Handle refreshing and adding of new notes.
|
|
||||||
*
|
*
|
||||||
* New notes are all notes that are created after the site has been loaded.
|
* Removes any errors.
|
||||||
* The "old" notes are in #notes-list the "new" ones will be in #new-notes-list.
|
* Resets text and preview.
|
||||||
* The id of the last "old" note is in this.bottom_id.
|
* Resets buttons.
|
||||||
*/
|
*/
|
||||||
|
resetMainTargetForm: function(){
|
||||||
|
var form = $(this);
|
||||||
|
|
||||||
|
// remove validation errors
|
||||||
|
form.find(".js-errors").remove();
|
||||||
|
|
||||||
|
// reset text and preview
|
||||||
|
var previewContainer = form.find(".js-toggler-container.note_text_and_preview");
|
||||||
|
if (previewContainer.is(".on")) {
|
||||||
|
previewContainer.removeClass("on");
|
||||||
|
}
|
||||||
|
form.find(".js-note-text").val("").trigger("input");
|
||||||
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initializes getting new notes every n seconds.
|
* Called after an attachment file has been selected.
|
||||||
|
*
|
||||||
|
* Updates the file name for the selected attachment.
|
||||||
*/
|
*/
|
||||||
initRefreshNew:
|
updateFormAttachment: function() {
|
||||||
function() {
|
var form = $(this).closest("form");
|
||||||
setInterval("NoteList.getNew()", 10000);
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
// get only the basename
|
||||||
* Gets the new set of notes.
|
var filename = $(this).val().replace(/^.*[\\\/]/, '');
|
||||||
*/
|
|
||||||
getNew:
|
|
||||||
function() {
|
|
||||||
$.ajax({
|
|
||||||
type: "GET",
|
|
||||||
url: this.notes_path,
|
|
||||||
data: this.target_params + "&loading_new=1&after_id=" + (this.reversed ? this.top_id : this.bottom_id),
|
|
||||||
dataType: "script"});
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
form.find(".js-attachment-filename").text(filename);
|
||||||
* Called in response to getNew().
|
},
|
||||||
* Replaces the content of #new-notes-list with the given html.
|
|
||||||
*/
|
|
||||||
replaceNewNotes:
|
|
||||||
function(html) {
|
|
||||||
$("#new-notes-list").html(html);
|
|
||||||
this.updateVotes();
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Adds a single note to #new-notes-list.
|
|
||||||
*/
|
|
||||||
appendNewNote:
|
|
||||||
function(id, html) {
|
|
||||||
if (this.reversed) {
|
|
||||||
$("#new-notes-list").prepend(html);
|
|
||||||
} else {
|
|
||||||
$("#new-notes-list").append(html);
|
|
||||||
}
|
|
||||||
this.updateVotes();
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Recalculates the votes and updates them (if they are displayed at all).
|
* Recalculates the votes and updates them (if they are displayed at all).
|
||||||
|
@ -249,67 +407,24 @@ var NoteList = {
|
||||||
* Might produce inaccurate results when not all notes have been loaded and a
|
* Might produce inaccurate results when not all notes have been loaded and a
|
||||||
* recalculation is triggered (e.g. when deleting a note).
|
* recalculation is triggered (e.g. when deleting a note).
|
||||||
*/
|
*/
|
||||||
updateVotes:
|
updateVotes: function() {
|
||||||
function() {
|
var votes = $("#votes .votes");
|
||||||
var votes = $("#votes .votes");
|
var notes = $("#notes-list .note .vote");
|
||||||
var notes = $("#notes-list, #new-notes-list").find(".note .vote");
|
|
||||||
|
|
||||||
// only update if there is a vote display
|
// only update if there is a vote display
|
||||||
if (votes.size()) {
|
if (votes.size()) {
|
||||||
var upvotes = notes.filter(".upvote").size();
|
var upvotes = notes.filter(".upvote").size();
|
||||||
var downvotes = notes.filter(".downvote").size();
|
var downvotes = notes.filter(".downvote").size();
|
||||||
var votesCount = upvotes + downvotes;
|
var votesCount = upvotes + downvotes;
|
||||||
var upvotesPercent = votesCount ? (100.0 / votesCount * upvotes) : 0;
|
var upvotesPercent = votesCount ? (100.0 / votesCount * upvotes) : 0;
|
||||||
var downvotesPercent = votesCount ? (100.0 - upvotesPercent) : 0;
|
var downvotesPercent = votesCount ? (100.0 - upvotesPercent) : 0;
|
||||||
|
|
||||||
// change vote bar lengths
|
// change vote bar lengths
|
||||||
votes.find(".bar-success").css("width", upvotesPercent+"%");
|
votes.find(".bar-success").css("width", upvotesPercent+"%");
|
||||||
votes.find(".bar-danger").css("width", downvotesPercent+"%");
|
votes.find(".bar-danger").css("width", downvotesPercent+"%");
|
||||||
// replace vote numbers
|
// replace vote numbers
|
||||||
votes.find(".upvotes").text(votes.find(".upvotes").text().replace(/\d+/, upvotes));
|
votes.find(".upvotes").text(votes.find(".upvotes").text().replace(/\d+/, upvotes));
|
||||||
votes.find(".downvotes").text(votes.find(".downvotes").text().replace(/\d+/, downvotes));
|
votes.find(".downvotes").text(votes.find(".downvotes").text().replace(/\d+/, downvotes));
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
var PerLineNotes = {
|
|
||||||
init:
|
|
||||||
function() {
|
|
||||||
/**
|
|
||||||
* Called when clicking on the "add note" or "reply" button for a diff line.
|
|
||||||
*
|
|
||||||
* Shows the note form below the line.
|
|
||||||
* Sets some hidden fields in the form.
|
|
||||||
*/
|
|
||||||
$(".diff_file_content").on("click", ".line_note_link, .line_note_reply_link", function(e) {
|
|
||||||
var form = $(".per_line_form");
|
|
||||||
$(this).closest("tr").after(form);
|
|
||||||
form.find("#note_line_code").val($(this).data("lineCode"));
|
|
||||||
form.show();
|
|
||||||
e.preventDefault();
|
|
||||||
});
|
|
||||||
|
|
||||||
disableButtonIfEmptyField(".line-note-text", ".submit_inline_note");
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Called in response to successfully deleting a note on a diff line.
|
|
||||||
*
|
|
||||||
* Removes the actual note from view.
|
|
||||||
* Removes the reply button if the last note for that line has been removed.
|
|
||||||
*/
|
|
||||||
$(".diff_file_content").on("ajax:success", ".delete-note", function() {
|
|
||||||
var trNote = $(this).closest("tr");
|
|
||||||
trNote.fadeOut(function() {
|
|
||||||
$(this).remove();
|
|
||||||
});
|
|
||||||
|
|
||||||
// check if this is the last note for this line
|
|
||||||
// elements must really be removed for this to work reliably
|
|
||||||
var trLine = trNote.prev();
|
|
||||||
var trRpl = trNote.next();
|
|
||||||
if (trLine.is(".line_holder") && trRpl.is(".reply")) {
|
|
||||||
trRpl.fadeOut(function() { $(this).remove(); });
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,49 +0,0 @@
|
||||||
var Pager = {
|
|
||||||
limit:0,
|
|
||||||
offset:0,
|
|
||||||
disable:false,
|
|
||||||
|
|
||||||
init:
|
|
||||||
function(limit) {
|
|
||||||
this.limit=limit;
|
|
||||||
this.offset=limit;
|
|
||||||
this.initLoadMore();
|
|
||||||
},
|
|
||||||
|
|
||||||
getOld:
|
|
||||||
function() {
|
|
||||||
$('.loading').show();
|
|
||||||
$.ajax({
|
|
||||||
type: "GET",
|
|
||||||
url: location.href,
|
|
||||||
data: "limit=" + this.limit + "&offset=" + this.offset,
|
|
||||||
complete: function(){ $('.loading').hide()},
|
|
||||||
dataType: "script"});
|
|
||||||
},
|
|
||||||
|
|
||||||
append:
|
|
||||||
function(count, html) {
|
|
||||||
$(".content_list").append(html);
|
|
||||||
if(count > 0) {
|
|
||||||
this.offset += count;
|
|
||||||
} else {
|
|
||||||
this.disable = true;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
initLoadMore:
|
|
||||||
function() {
|
|
||||||
$(document).endlessScroll({
|
|
||||||
bottomPixels: 400,
|
|
||||||
fireDelay: 1000,
|
|
||||||
fireOnce:true,
|
|
||||||
ceaseFire: function() {
|
|
||||||
return Pager.disable;
|
|
||||||
},
|
|
||||||
callback: function(i) {
|
|
||||||
$('.loading').show();
|
|
||||||
Pager.getOld();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
42
app/assets/javascripts/pager.js.coffee
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
@Pager =
|
||||||
|
limit: 0
|
||||||
|
offset: 0
|
||||||
|
disable: false
|
||||||
|
init: (limit, preload) ->
|
||||||
|
@limit = limit
|
||||||
|
if preload
|
||||||
|
@offset = 0
|
||||||
|
@getOld()
|
||||||
|
else
|
||||||
|
@offset = limit
|
||||||
|
@initLoadMore()
|
||||||
|
|
||||||
|
getOld: ->
|
||||||
|
$(".loading").show()
|
||||||
|
$.ajax
|
||||||
|
type: "GET"
|
||||||
|
url: location.href
|
||||||
|
data: "limit=" + @limit + "&offset=" + @offset
|
||||||
|
complete: ->
|
||||||
|
$(".loading").hide()
|
||||||
|
|
||||||
|
dataType: "script"
|
||||||
|
|
||||||
|
append: (count, html) ->
|
||||||
|
$(".content_list").append html
|
||||||
|
if count > 0
|
||||||
|
@offset += count
|
||||||
|
else
|
||||||
|
@disable = true
|
||||||
|
|
||||||
|
initLoadMore: ->
|
||||||
|
$(document).endlessScroll
|
||||||
|
bottomPixels: 400
|
||||||
|
fireDelay: 1000
|
||||||
|
fireOnce: true
|
||||||
|
ceaseFire: ->
|
||||||
|
Pager.disable
|
||||||
|
|
||||||
|
callback: (i) ->
|
||||||
|
$(".loading").show()
|
||||||
|
Pager.getOld()
|
|
@ -15,6 +15,8 @@ $ ->
|
||||||
$(this).find('.update-failed').hide()
|
$(this).find('.update-failed').hide()
|
||||||
|
|
||||||
$('.update-username form').on 'ajax:complete', ->
|
$('.update-username form').on 'ajax:complete', ->
|
||||||
$(this).find('.save-btn').removeAttr('disabled')
|
$(this).find('.btn-save').enableButton()
|
||||||
$(this).find('.save-btn').removeClass('disabled')
|
|
||||||
$(this).find('.loading-gif').hide()
|
$(this).find('.loading-gif').hide()
|
||||||
|
|
||||||
|
$('.update-notifications').on 'ajax:complete', ->
|
||||||
|
$(this).find('.btn-save').enableButton()
|
||||||
|
|
|
@ -18,3 +18,18 @@ $ ->
|
||||||
# Ref switcher
|
# Ref switcher
|
||||||
$('.project-refs-select').on 'change', ->
|
$('.project-refs-select').on 'change', ->
|
||||||
$(@).parents('form').submit()
|
$(@).parents('form').submit()
|
||||||
|
|
||||||
|
$('#project_issues_enabled').change ->
|
||||||
|
if ($(this).is(':checked') == true)
|
||||||
|
$('#project_issues_tracker').removeAttr('disabled')
|
||||||
|
else
|
||||||
|
$('#project_issues_tracker').attr('disabled', 'disabled')
|
||||||
|
|
||||||
|
$('#project_issues_tracker').change()
|
||||||
|
|
||||||
|
$('#project_issues_tracker').change ->
|
||||||
|
if ($(this).val() == gon.default_issues_tracker || $(this).is(':disabled'))
|
||||||
|
$('#project_issues_tracker_id').attr('disabled', 'disabled')
|
||||||
|
else
|
||||||
|
$('#project_issues_tracker_id').removeAttr('disabled')
|
||||||
|
|
||||||
|
|
|
@ -6,17 +6,12 @@ $ ->
|
||||||
$('span.log_loading:first').removeClass('hide')
|
$('span.log_loading:first').removeClass('hide')
|
||||||
|
|
||||||
$('#tree-slider .tree-item-file-name a, .breadcrumb li > a').live "click", ->
|
$('#tree-slider .tree-item-file-name a, .breadcrumb li > a').live "click", ->
|
||||||
$("#tree-content-holder").hide("slide", { direction: "left" }, 150)
|
$("#tree-content-holder").hide("slide", { direction: "left" }, 400)
|
||||||
|
|
||||||
# Make the entire tree-item row clickable, but not if clicking another link (like a commit message)
|
# Make the entire tree-item row clickable, but not if clicking another link (like a commit message)
|
||||||
$("#tree-slider .tree-item").live 'click', (e) ->
|
$("#tree-slider .tree-item").live 'click', (e) ->
|
||||||
$('.tree-item-file-name a', this).trigger('click') if (e.target.nodeName != "A")
|
$('.tree-item-file-name a', this).trigger('click') if (e.target.nodeName != "A")
|
||||||
|
|
||||||
# Show/Hide the loading spinner
|
|
||||||
$('#tree-slider .tree-item-file-name a, .breadcrumb a, .project-refs-form').live
|
|
||||||
"ajax:beforeSend": -> $('.tree_progress').addClass("loading")
|
|
||||||
"ajax:complete": -> $('.tree_progress').removeClass("loading")
|
|
||||||
|
|
||||||
# Maintain forward/back history while browsing the file tree
|
# Maintain forward/back history while browsing the file tree
|
||||||
((window) ->
|
((window) ->
|
||||||
History = window.History
|
History = window.History
|
||||||
|
@ -33,7 +28,12 @@ $ ->
|
||||||
|
|
||||||
History.Adapter.bind window, 'statechange', ->
|
History.Adapter.bind window, 'statechange', ->
|
||||||
state = History.getState()
|
state = History.getState()
|
||||||
window.ajaxGet(state.url)
|
$.ajax({
|
||||||
|
url: state.url,
|
||||||
|
dataType: 'script',
|
||||||
|
beforeSend: -> $('.tree_progress').addClass("loading"),
|
||||||
|
complete: -> $('.tree_progress').removeClass("loading")
|
||||||
|
})
|
||||||
)(window)
|
)(window)
|
||||||
|
|
||||||
# See if there are lines selected
|
# See if there are lines selected
|
||||||
|
|
36
app/assets/javascripts/users_select.js.coffee
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
$ ->
|
||||||
|
userFormatResult = (user) ->
|
||||||
|
avatar = gon.gravatar_url
|
||||||
|
avatar = avatar.replace('%{hash}', md5(user.email))
|
||||||
|
avatar = avatar.replace('%{size}', '24')
|
||||||
|
|
||||||
|
markup = "<div class='user-result'>"
|
||||||
|
markup += "<div class='user-image'><img class='avatar s24' src='" + avatar + "'></div>"
|
||||||
|
markup += "<div class='user-name'>" + user.name + "</div>"
|
||||||
|
markup += "<div class='user-username'>" + user.username + "</div>"
|
||||||
|
markup += "</div>"
|
||||||
|
markup
|
||||||
|
|
||||||
|
userFormatSelection = (user) ->
|
||||||
|
user.name
|
||||||
|
|
||||||
|
$('.ajax-users-select').select2
|
||||||
|
placeholder: "Search for a user"
|
||||||
|
multiple: $('.ajax-users-select').hasClass('multiselect')
|
||||||
|
minimumInputLength: 0
|
||||||
|
query: (query) ->
|
||||||
|
Api.users query.term, (users) ->
|
||||||
|
data = { results: users }
|
||||||
|
query.callback(data)
|
||||||
|
|
||||||
|
initSelection: (element, callback) ->
|
||||||
|
id = $(element).val()
|
||||||
|
if id isnt ""
|
||||||
|
Api.user(id, callback)
|
||||||
|
|
||||||
|
|
||||||
|
formatResult: userFormatResult
|
||||||
|
formatSelection: userFormatSelection
|
||||||
|
dropdownCssClass: "ajax-users-dropdown"
|
||||||
|
escapeMarkup: (m) -> # we do not want to escape markup since we are displaying html in results
|
||||||
|
m
|
83
app/assets/javascripts/wall.js.coffee
Normal file
|
@ -0,0 +1,83 @@
|
||||||
|
@Wall =
|
||||||
|
note_ids: []
|
||||||
|
project_id: null
|
||||||
|
|
||||||
|
init: (project_id) ->
|
||||||
|
Wall.project_id = project_id
|
||||||
|
Wall.getContent()
|
||||||
|
Wall.initRefresh()
|
||||||
|
Wall.initForm()
|
||||||
|
|
||||||
|
#
|
||||||
|
# Gets an initial set of notes.
|
||||||
|
#
|
||||||
|
getContent: ->
|
||||||
|
Api.notes Wall.project_id, (notes) ->
|
||||||
|
$.each notes, (i, note) ->
|
||||||
|
# render note if it not present in loaded list
|
||||||
|
# or skip if rendered
|
||||||
|
if $.inArray(note.id, Wall.note_ids) == -1
|
||||||
|
Wall.note_ids.push(note.id)
|
||||||
|
Wall.renderNote(note)
|
||||||
|
Wall.scrollDown()
|
||||||
|
$("abbr.timeago").timeago()
|
||||||
|
|
||||||
|
initRefresh: ->
|
||||||
|
setInterval("Wall.refresh()", 10000)
|
||||||
|
|
||||||
|
refresh: ->
|
||||||
|
Wall.getContent()
|
||||||
|
|
||||||
|
scrollDown: ->
|
||||||
|
notes = $('ul.notes')
|
||||||
|
$('body, html').scrollTop(notes.height())
|
||||||
|
|
||||||
|
initForm: ->
|
||||||
|
form = $('.wall-note-form')
|
||||||
|
form.find("#target_type").val('wall')
|
||||||
|
|
||||||
|
form.on 'ajax:success', ->
|
||||||
|
Wall.refresh()
|
||||||
|
form.find(".js-note-text").val("").trigger("input")
|
||||||
|
|
||||||
|
form.on 'ajax:complete', ->
|
||||||
|
form.find(".js-comment-button").removeAttr('disabled')
|
||||||
|
form.find(".js-comment-button").removeClass('disabled')
|
||||||
|
|
||||||
|
form.on "click", ".js-choose-note-attachment-button", ->
|
||||||
|
form.find(".js-note-attachment-input").click()
|
||||||
|
|
||||||
|
form.on "change", ".js-note-attachment-input", ->
|
||||||
|
filename = $(this).val().replace(/^.*[\\\/]/, '')
|
||||||
|
form.find(".js-attachment-filename").text(filename)
|
||||||
|
|
||||||
|
form.find('.note_text').keydown (e) ->
|
||||||
|
if e.ctrlKey && e.keyCode == 13
|
||||||
|
form.find('.js-comment-button').submit()
|
||||||
|
|
||||||
|
form.show()
|
||||||
|
|
||||||
|
renderNote: (note) ->
|
||||||
|
template = Wall.noteTemplate()
|
||||||
|
template = template.replace('{{author_name}}', note.author.name)
|
||||||
|
template = template.replace('{{created_at}}', note.created_at)
|
||||||
|
template = template.replace('{{text}}', linkify(sanitize(note.body)))
|
||||||
|
|
||||||
|
if note.attachment
|
||||||
|
file = '<i class="icon-paper-clip"/><a href="/files/note/' + note.id + '/' + note.attachment + '">' + note.attachment + '</a>'
|
||||||
|
else
|
||||||
|
file = ''
|
||||||
|
template = template.replace('{{file}}', file)
|
||||||
|
|
||||||
|
|
||||||
|
$('ul.notes').append(template)
|
||||||
|
|
||||||
|
noteTemplate: ->
|
||||||
|
return '<li>
|
||||||
|
<strong class="wall-author">{{author_name}}</strong>
|
||||||
|
<span class="wall-text">
|
||||||
|
{{text}}
|
||||||
|
<span class="wall-file">{{file}}</span>
|
||||||
|
</span>
|
||||||
|
<abbr class="timeago" title="{{created_at}}">{{created_at}}</abbr>
|
||||||
|
</li>'
|
|
@ -5,6 +5,7 @@
|
||||||
*= require jquery.ui.gitlab
|
*= require jquery.ui.gitlab
|
||||||
*= require jquery.atwho
|
*= require jquery.atwho
|
||||||
*= require chosen
|
*= require chosen
|
||||||
|
*= require select2
|
||||||
*= require_self
|
*= require_self
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -14,7 +15,7 @@
|
||||||
@import "gitlab_bootstrap.scss";
|
@import "gitlab_bootstrap.scss";
|
||||||
|
|
||||||
@import "common.scss";
|
@import "common.scss";
|
||||||
@import "ref_select.scss";
|
@import "selects.scss";
|
||||||
|
|
||||||
@import "sections/header.scss";
|
@import "sections/header.scss";
|
||||||
@import "sections/nav.scss";
|
@import "sections/nav.scss";
|
||||||
|
@ -32,9 +33,13 @@
|
||||||
@import "sections/profile.scss";
|
@import "sections/profile.scss";
|
||||||
@import "sections/login.scss";
|
@import "sections/login.scss";
|
||||||
@import "sections/editor.scss";
|
@import "sections/editor.scss";
|
||||||
|
@import "sections/admin.scss";
|
||||||
|
@import "sections/wiki.scss";
|
||||||
|
@import "sections/wall.scss";
|
||||||
|
|
||||||
@import "highlight/white.scss";
|
@import "highlight/white.scss";
|
||||||
@import "highlight/dark.scss";
|
@import "highlight/dark.scss";
|
||||||
|
@import "highlight/solarized_dark.scss";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* UI themes:
|
* UI themes:
|
||||||
|
@ -45,3 +50,8 @@
|
||||||
@import "themes/ui_gray.scss";
|
@import "themes/ui_gray.scss";
|
||||||
@import "themes/ui_color.scss";
|
@import "themes/ui_color.scss";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Styles for JS behaviors.
|
||||||
|
*/
|
||||||
|
@import "behaviors.scss";
|
||||||
|
|
||||||
|
|
14
app/assets/stylesheets/behaviors.scss
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
// Details
|
||||||
|
//--------
|
||||||
|
.js-details-container .content { display: none; }
|
||||||
|
.js-details-container .content.hide { display: block; }
|
||||||
|
.js-details-container.open .content { display: block; }
|
||||||
|
.js-details-container.open .content.hide { display: none; }
|
||||||
|
|
||||||
|
|
||||||
|
// Toggler
|
||||||
|
//--------
|
||||||
|
.js-toggler-container .turn-on { display: inherit; }
|
||||||
|
.js-toggler-container .turn-off { display: none; }
|
||||||
|
.js-toggler-container.on .turn-on { display: none; }
|
||||||
|
.js-toggler-container.on .turn-off { display: inherit; }
|
|
@ -1,3 +1,7 @@
|
||||||
|
html {
|
||||||
|
overflow-y: scroll;
|
||||||
|
}
|
||||||
|
|
||||||
/** LAYOUT **/
|
/** LAYOUT **/
|
||||||
|
|
||||||
body {
|
body {
|
||||||
|
@ -63,27 +67,17 @@ table a code {
|
||||||
}
|
}
|
||||||
|
|
||||||
/** FLASH message **/
|
/** FLASH message **/
|
||||||
#flash-container {
|
.flash-container {
|
||||||
height: 50px;
|
|
||||||
position: fixed;
|
|
||||||
z-index: 10001;
|
|
||||||
top: 0px;
|
|
||||||
width: 100%;
|
|
||||||
margin-bottom: 15px;
|
|
||||||
overflow: hidden;
|
|
||||||
background: white;
|
|
||||||
cursor: pointer;
|
|
||||||
border-bottom: 1px solid #ccc;
|
|
||||||
text-align: center;
|
|
||||||
display: none;
|
display: none;
|
||||||
|
.alert {
|
||||||
|
cursor: pointer;
|
||||||
|
margin: 0;
|
||||||
|
text-align: center;
|
||||||
|
border-radius: 0;
|
||||||
|
|
||||||
h4 {
|
span {
|
||||||
color: #666;
|
font-size: 14px;
|
||||||
font-size: 18px;
|
}
|
||||||
line-height: 38px;
|
|
||||||
padding-top: 5px;
|
|
||||||
margin: 2px;
|
|
||||||
font-weight: normal;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -117,34 +111,10 @@ span.update-author {
|
||||||
}
|
}
|
||||||
|
|
||||||
.label {
|
.label {
|
||||||
background-color: #474D57;
|
padding: 0px 4px;
|
||||||
|
font-size: 10px;
|
||||||
&.label-tag {
|
font-style: normal;
|
||||||
background: none;
|
background-color: $link_color;
|
||||||
border: none;
|
|
||||||
padding: 4px 6px;
|
|
||||||
color: #444;
|
|
||||||
text-shadow: 0 0 1px #fff;
|
|
||||||
|
|
||||||
&.grouped {
|
|
||||||
float: left;
|
|
||||||
margin-right: 6px;
|
|
||||||
padding: 6px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
&.label-issue {
|
|
||||||
background-color: #eee;
|
|
||||||
border: 1px solid #ccc;
|
|
||||||
padding: 4px 6px;
|
|
||||||
color: #444;
|
|
||||||
text-shadow: 0 0 1px #fff;
|
|
||||||
|
|
||||||
&.grouped {
|
|
||||||
float: left;
|
|
||||||
margin-right: 6px;
|
|
||||||
padding: 6px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
&.label-success {
|
&.label-success {
|
||||||
background-color: #8D8;
|
background-color: #8D8;
|
||||||
|
@ -203,17 +173,6 @@ ul.breadcrumb {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.arrow {
|
|
||||||
background: url("images.png") no-repeat -85px -77px;
|
|
||||||
width: 19px;
|
|
||||||
height: 16px;
|
|
||||||
float: left;
|
|
||||||
position: relative;
|
|
||||||
left: -10px;
|
|
||||||
padding: 0;
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
input[type=text] {
|
input[type=text] {
|
||||||
|
@ -223,10 +182,6 @@ input[type=text] {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
input.git_clone_url {
|
|
||||||
width: 325px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.merge-request-form-holder {
|
.merge-request-form-holder {
|
||||||
select {
|
select {
|
||||||
width: 300px;
|
width: 300px;
|
||||||
|
@ -297,8 +252,20 @@ p.time {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.search-holder {
|
||||||
|
label, input {
|
||||||
|
height: 30px;
|
||||||
|
padding: 0;
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
label {
|
||||||
|
line-height: 30px;
|
||||||
|
color: #666;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.highlight_word {
|
.highlight_word {
|
||||||
background: #EEDC94;
|
border-bottom: 2px solid #F90;
|
||||||
}
|
}
|
||||||
|
|
||||||
.status_info {
|
.status_info {
|
||||||
|
@ -346,10 +313,6 @@ li.note {
|
||||||
li {
|
li {
|
||||||
border-bottom:none !important;
|
border-bottom:none !important;
|
||||||
}
|
}
|
||||||
.file {
|
|
||||||
padding-left: 20px;
|
|
||||||
background:url("icon-attachment.png") no-repeat left center;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -395,6 +358,7 @@ li.note {
|
||||||
font-size: 48px;
|
font-size: 48px;
|
||||||
padding: 20px;
|
padding: 20px;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
|
font-weight: normal;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -425,7 +389,7 @@ li.note {
|
||||||
|
|
||||||
|
|
||||||
.supp_diff_link,
|
.supp_diff_link,
|
||||||
.mr_show_all_commits {
|
.show-all-commits {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -469,6 +433,19 @@ li.note {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.warning_message {
|
||||||
|
border-left: 4px solid #ed9;
|
||||||
|
color: #b90;
|
||||||
|
padding: 10px;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
background: #ffffe6;
|
||||||
|
padding-left: 20px;
|
||||||
|
|
||||||
|
&.centered {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.oauth_select_holder {
|
.oauth_select_holder {
|
||||||
padding: 20px;
|
padding: 20px;
|
||||||
img {
|
img {
|
||||||
|
@ -556,3 +533,25 @@ h1.http_status_code {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
img.emoji {
|
||||||
|
height: 20px;
|
||||||
|
vertical-align: middle;
|
||||||
|
width: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.appear-data {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.label-branch {
|
||||||
|
@include border-radius(4px);
|
||||||
|
padding: 2px 4px;
|
||||||
|
border: none;
|
||||||
|
font-size: 14px;
|
||||||
|
background: #474D57;
|
||||||
|
color: #fff;
|
||||||
|
font-family: $monospace_font;
|
||||||
|
text-shadow: 0 1px 1px #111;
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
|
|
@ -17,6 +17,8 @@ $baseLineHeight: 18px !default;
|
||||||
@import "gitlab_bootstrap/variables.scss";
|
@import "gitlab_bootstrap/variables.scss";
|
||||||
@import "gitlab_bootstrap/fonts.scss";
|
@import "gitlab_bootstrap/fonts.scss";
|
||||||
@import "gitlab_bootstrap/mixins.scss";
|
@import "gitlab_bootstrap/mixins.scss";
|
||||||
|
@import "gitlab_bootstrap/avatar.scss";
|
||||||
|
@import "gitlab_bootstrap/nav.scss";
|
||||||
@import "gitlab_bootstrap/common.scss";
|
@import "gitlab_bootstrap/common.scss";
|
||||||
@import "gitlab_bootstrap/typography.scss";
|
@import "gitlab_bootstrap/typography.scss";
|
||||||
@import "gitlab_bootstrap/buttons.scss";
|
@import "gitlab_bootstrap/buttons.scss";
|
||||||
|
|
8
app/assets/stylesheets/gitlab_bootstrap/avatar.scss
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
/** AVATARS **/
|
||||||
|
img.avatar { float: left; margin-right: 12px; width: 40px; border: 1px solid #ddd; padding: 1px; }
|
||||||
|
img.avatar.s16 { width: 16px; height: 16px; margin-right: 6px; }
|
||||||
|
img.avatar.s24 { width: 24px; height: 24px; margin-right: 8px; }
|
||||||
|
img.avatar.s32 { width: 32px; height: 32px; margin-right: 10px; }
|
||||||
|
img.avatar.s90 { width: 90px; height: 90px; margin-right: 15px; }
|
||||||
|
img.lil_av { padding-left: 4px; padding-right: 3px; }
|
||||||
|
img.small { width: 80px; }
|
|
@ -1,23 +1,33 @@
|
||||||
/**
|
/**
|
||||||
* ===================================
|
* ===================================
|
||||||
* Contain 3 main UI block elements:
|
* Contain UI block elements:
|
||||||
* .main_box - for show pages
|
* .ui-box - for any block & widgets
|
||||||
* .ui-box - for simple block & widgets
|
|
||||||
* ===================================
|
* ===================================
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* UI box element
|
* UI Block
|
||||||
* contains top, middle, bottom blocks
|
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
.main_box {
|
.ui-box {
|
||||||
@extend .borders;
|
background: #F9F9F9;
|
||||||
@extend .prepend-top-20;
|
margin-bottom: 25px;
|
||||||
@extend .append-bottom-20;
|
border: 1px solid #CCC;
|
||||||
border-width: 1px;
|
|
||||||
@include solid-shade;
|
@include solid-shade;
|
||||||
|
|
||||||
|
&.ui-box-show {
|
||||||
|
margin:20px 0;
|
||||||
|
background: #FFF;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.ui-box-danger {
|
||||||
|
.title {
|
||||||
|
@include linear-gradient(#F26E5E, #bd362f);
|
||||||
|
color: #fff;
|
||||||
|
text-shadow: 0 1px 1px #900;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
img { max-width: 100%; }
|
img { max-width: 100%; }
|
||||||
|
|
||||||
|
@ -27,31 +37,30 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.top_box_content,
|
.ui-box-head,
|
||||||
.middle_box_content,
|
.ui-box-body,
|
||||||
.bottom_box_content {
|
.ui-box-bottom {
|
||||||
padding: 15px;
|
padding: 15px;
|
||||||
word-wrap: break-word;
|
word-wrap: break-word;
|
||||||
|
|
||||||
pre {
|
.clearfix {
|
||||||
background: none !important;
|
|
||||||
margin: 0;
|
margin: 0;
|
||||||
border: none;
|
|
||||||
padding: 0;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.top_box_content {
|
.ui-box-head {
|
||||||
.box-title {
|
.box-title {
|
||||||
color: $style_color;
|
color: $style_color;
|
||||||
font-size: 18px;
|
font-size: 18px;
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
line-height: 28px;
|
line-height: 28px;
|
||||||
}
|
}
|
||||||
|
h3 {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.middle_box_content {
|
.ui-box-body {
|
||||||
@include border-radius(0);
|
|
||||||
border: none;
|
border: none;
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
background-color: #f5f5f5;
|
background-color: #f5f5f5;
|
||||||
|
@ -59,24 +68,9 @@
|
||||||
border-top: 1px solid #eee;
|
border-top: 1px solid #eee;
|
||||||
}
|
}
|
||||||
|
|
||||||
.bottom_box_content {
|
.ui-box-bottom {
|
||||||
border-top: 1px solid #eee;
|
border-top: 1px solid #eee;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Big UI Block for show page content
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
.ui-box {
|
|
||||||
background: #F9F9F9;
|
|
||||||
margin-bottom: 25px;
|
|
||||||
|
|
||||||
border: 1px solid #eaeaea;
|
|
||||||
@include border-radius(4px);
|
|
||||||
|
|
||||||
border-color: #CCC;
|
|
||||||
@include solid-shade;
|
|
||||||
|
|
||||||
&.white {
|
&.white {
|
||||||
background: #fff;
|
background: #fff;
|
||||||
|
@ -86,47 +80,52 @@
|
||||||
margin: 0;
|
margin: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
h5, .title {
|
.title {
|
||||||
padding: 0 10px;
|
|
||||||
@include border-radius(4px 4px 0 0);
|
|
||||||
@include bg-gray-gradient;
|
@include bg-gray-gradient;
|
||||||
border-top: 1px solid #eaeaea;
|
border-bottom: 1px solid #CCC;
|
||||||
border-bottom: 1px solid #bbb;
|
color: #456;
|
||||||
|
font-size: 16px;
|
||||||
|
text-shadow: 0 1px 1px #fff;
|
||||||
|
padding: 0px 10px;
|
||||||
|
line-height: 36px;
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: normal;
|
||||||
|
|
||||||
> a {
|
> a {
|
||||||
text-shadow: 0 1px 1px #fff;
|
text-shadow: 0 1px 1px #fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
&.small {
|
form {
|
||||||
line-height: 28px;
|
margin-bottom: 0;
|
||||||
font-size: 14px;
|
margin-top: 0;
|
||||||
line-height: 28px;
|
|
||||||
text-shadow: 0 1px 1px white;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
form {
|
.btn {
|
||||||
padding: 9px 0;
|
position: relative;
|
||||||
margin: 0px;
|
top: -2px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.nav-pills {
|
.nav-pills {
|
||||||
li {
|
> li {
|
||||||
padding: 3px 0;
|
> a {
|
||||||
&.active a { background-color: $style_color; }
|
padding: 13px;
|
||||||
a {
|
margin: 0;
|
||||||
@include border-radius(7px);
|
font-size: 13px;
|
||||||
|
}
|
||||||
|
&.active {
|
||||||
|
> a {
|
||||||
|
background: #D5D5D5;
|
||||||
|
color: $style_color;
|
||||||
|
@include border-radius(0);
|
||||||
|
border-radius: 0;
|
||||||
|
border-left: 1px solid #CCC;
|
||||||
|
border-right: 1px solid #CCC;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.bottom {
|
|
||||||
@include bg-gray-gradient;
|
|
||||||
@include border-radius(0 0 4px 4px);
|
|
||||||
border-bottom: none;
|
|
||||||
border-top: 1px solid #bbb;
|
|
||||||
}
|
|
||||||
|
|
||||||
&.padded {
|
&.padded {
|
||||||
h5, .title {
|
h5, .title {
|
||||||
margin: -20px;
|
margin: -20px;
|
||||||
|
@ -143,6 +142,7 @@
|
||||||
color: #777;
|
color: #777;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.row_title {
|
.row_title {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
color: #444;
|
color: #444;
|
||||||
|
@ -152,7 +152,22 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.ui-box-body {
|
.form-holder {
|
||||||
padding: 10px;
|
padding-top: 20px;
|
||||||
|
form {
|
||||||
|
margin-bottom: 0;
|
||||||
|
legend {
|
||||||
|
text-indent: 10px;
|
||||||
|
}
|
||||||
|
.form-actions {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.tab-pane {
|
||||||
|
.ui-box {
|
||||||
|
margin: 3px 3px 25px 3px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,13 +1,16 @@
|
||||||
.btn {
|
.btn {
|
||||||
@include linear-gradient(#f7f7f7, #d5d5d5);
|
@include linear-gradient(#f1f1f1, #e1e1e1);
|
||||||
border-color: #aaa;
|
text-shadow: 0 1px 1px #FFF;
|
||||||
|
border-color: #BBB;
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
@include bg-gray-gradient;
|
background: #f1f1f1;
|
||||||
border-color: #bbb;
|
@include linear-gradient(#fAfAfA, #f1f1f1);
|
||||||
|
border-color: #AAA;
|
||||||
color: #333;
|
color: #333;
|
||||||
}
|
}
|
||||||
|
|
||||||
&.primary {
|
&.btn-primary {
|
||||||
background: #2a79A3;
|
background: #2a79A3;
|
||||||
@include linear-gradient(#47A7b7, #2585b5);
|
@include linear-gradient(#47A7b7, #2585b5);
|
||||||
border-color: #2A79A3;
|
border-color: #2A79A3;
|
||||||
|
@ -54,21 +57,18 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
&.save-btn {
|
&.btn-create {
|
||||||
@extend .wide;
|
@extend .wide;
|
||||||
@extend .primary;
|
@extend .success;
|
||||||
}
|
}
|
||||||
|
|
||||||
&.cancel-btn {
|
&.btn-save {
|
||||||
float: right;
|
@extend .wide;
|
||||||
|
@extend .btn-primary;
|
||||||
}
|
}
|
||||||
|
|
||||||
&.wide {
|
&.btn-close,
|
||||||
padding-left: 30px;
|
&.btn-remove {
|
||||||
padding-right: 30px;
|
|
||||||
}
|
|
||||||
|
|
||||||
&.danger {
|
|
||||||
@extend .btn-danger;
|
@extend .btn-danger;
|
||||||
border-color: #BD362F;
|
border-color: #BD362F;
|
||||||
|
|
||||||
|
@ -78,8 +78,13 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
&.danger {
|
&.btn-cancel {
|
||||||
@extend .btn-danger;
|
float: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.wide {
|
||||||
|
padding-left: 20px;
|
||||||
|
padding-right: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
&.small {
|
&.small {
|
||||||
|
@ -91,7 +96,7 @@
|
||||||
background-color: #ccc;
|
background-color: #ccc;
|
||||||
}
|
}
|
||||||
|
|
||||||
&.very_small {
|
&.btn-tiny {
|
||||||
font-size: 11px;
|
font-size: 11px;
|
||||||
padding: 2px 6px;
|
padding: 2px 6px;
|
||||||
line-height: 16px;
|
line-height: 16px;
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
.cgray { color:gray }
|
.cgray { color:gray }
|
||||||
.cred { color:#D12F19 }
|
.cred { color:#D12F19 }
|
||||||
.cgreen { color:#4a2 }
|
.cgreen { color:#4a2 }
|
||||||
|
.cblue { color:#29A }
|
||||||
.cblack { color:#111 }
|
.cblack { color:#111 }
|
||||||
.cdark { color:#444 }
|
.cdark { color:#444 }
|
||||||
.cwhite { color:#fff!important }
|
.cwhite { color:#fff!important }
|
||||||
|
@ -9,7 +10,6 @@
|
||||||
|
|
||||||
/** COMMON CLASSES **/
|
/** COMMON CLASSES **/
|
||||||
.left { float:left }
|
.left { float:left }
|
||||||
.right { float:right!important }
|
|
||||||
.append-bottom-10 { margin-bottom:10px }
|
.append-bottom-10 { margin-bottom:10px }
|
||||||
.append-bottom-20 { margin-bottom:20px }
|
.append-bottom-20 { margin-bottom:20px }
|
||||||
.prepend-top-10 { margin-top:10px }
|
.prepend-top-10 { margin-top:10px }
|
||||||
|
@ -17,61 +17,21 @@
|
||||||
.padded { padding:20px }
|
.padded { padding:20px }
|
||||||
.ipadded { padding:20px!important }
|
.ipadded { padding:20px!important }
|
||||||
.lborder { border-left:1px solid #eee }
|
.lborder { border-left:1px solid #eee }
|
||||||
.no-padding { padding:0 !important; }
|
|
||||||
.underlined { border-bottom: 1px solid #CCC; }
|
|
||||||
.no-borders { border: none; }
|
|
||||||
.vlink { color: $link_color !important; }
|
|
||||||
.underlined_link { text-decoration: underline; }
|
.underlined_link { text-decoration: underline; }
|
||||||
.borders { border: 1px solid #ccc; @include shade; }
|
|
||||||
.hint { font-style: italic; color: #999; }
|
.hint { font-style: italic; color: #999; }
|
||||||
.light { color: #888 }
|
.light { color: #888 }
|
||||||
.tiny { font-weight: normal }
|
.tiny { font-weight: normal }
|
||||||
|
.vtop { vertical-align: top; }
|
||||||
|
|
||||||
/** PILLS & TABS**/
|
|
||||||
.nav-pills a:hover { background-color: #888; }
|
|
||||||
.nav-pills .active a { background-color: $style_color; }
|
|
||||||
.nav-pills > .active > a > i[class^="icon-"] { background: inherit; }
|
|
||||||
.nav-tabs > li > a, .nav-pills > li > a { color: $style_color; }
|
|
||||||
.nav.nav-tabs {
|
|
||||||
li {
|
|
||||||
> a {
|
|
||||||
padding: 8px 20px;
|
|
||||||
margin-right: 7px;
|
|
||||||
line-height: 19px;
|
|
||||||
border-color: #EEE;
|
|
||||||
color: #888;
|
|
||||||
border-bottom: 1px solid #ddd;
|
|
||||||
.badge {
|
|
||||||
background-color: #eee;
|
|
||||||
color: #888;
|
|
||||||
text-shadow: 0 1px 1px #fff;
|
|
||||||
}
|
|
||||||
i[class^="icon-"] {
|
|
||||||
line-height: 14px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
&.active {
|
|
||||||
> a {
|
|
||||||
border-color: #CCC;
|
|
||||||
border-bottom: 1px solid #fff;
|
|
||||||
color: #333;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/** ALERT MESSAGES **/
|
/** ALERT MESSAGES **/
|
||||||
.alert-message { @extend .alert; }
|
.alert.alert-disabled {
|
||||||
.alert-messag.success { @extend .alert-success; }
|
background: #EEE;
|
||||||
.alert-message.error { @extend .alert-error; }
|
color: #777;
|
||||||
|
border-color: #DDD;
|
||||||
|
}
|
||||||
|
|
||||||
/** AVATARS **/
|
.well { padding: 15px; }
|
||||||
img.avatar { float: left; margin-right: 12px; width: 40px; border: 1px solid #ddd; padding: 1px; }
|
|
||||||
img.avatar.s16 { width: 16px; height: 16px; margin-right: 6px; }
|
|
||||||
img.avatar.s24 { width: 24px; height: 24px; margin-right: 8px; }
|
|
||||||
img.avatar.s32 { width: 32px; height: 32px; margin-right: 10px; }
|
|
||||||
img.lil_av { padding-left: 4px; padding-right: 3px; }
|
|
||||||
img.small { width: 80px; }
|
|
||||||
|
|
||||||
/** HELPERS **/
|
/** HELPERS **/
|
||||||
.nothing_here_message {
|
.nothing_here_message {
|
||||||
|
@ -113,3 +73,7 @@ fieldset legend { font-size: 17px; }
|
||||||
border-bottom: 2px solid $style_color;
|
border-bottom: 2px solid $style_color;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.tab-content {
|
||||||
|
overflow: visible;
|
||||||
|
}
|
||||||
|
|
|
@ -37,24 +37,6 @@
|
||||||
background: #fff;
|
background: #fff;
|
||||||
font-size: 11px;
|
font-size: 11px;
|
||||||
|
|
||||||
&.wiki {
|
|
||||||
font-size: 13px;
|
|
||||||
code {
|
|
||||||
padding: 0 4px;
|
|
||||||
}
|
|
||||||
padding: 20px;
|
|
||||||
|
|
||||||
h1 { font-size: 26px; line-height: 46px; }
|
|
||||||
h2 { font-size: 22px; line-height: 42px; }
|
|
||||||
h3 { font-size: 20px; line-height: 40px; }
|
|
||||||
h4 { font-size: 18px; line-height: 32px; }
|
|
||||||
h5 { font-size: 16px; line-height: 26px; }
|
|
||||||
|
|
||||||
.white .highlight pre {
|
|
||||||
background: #f5f5f5;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
&.image_file {
|
&.image_file {
|
||||||
background: #eee;
|
background: #eee;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
|
@ -64,6 +46,11 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
&.wiki {
|
||||||
|
padding: 20px;
|
||||||
|
font-size: 13px;
|
||||||
|
}
|
||||||
|
|
||||||
&.blob_file {
|
&.blob_file {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -148,7 +135,7 @@
|
||||||
pre {
|
pre {
|
||||||
border: none;
|
border: none;
|
||||||
border-radius: 0;
|
border-radius: 0;
|
||||||
font-family: 'Menlo', 'Liberation Mono', 'Consolas', 'Courier New', 'andale mono','lucida console',monospace;
|
font-family: $monospace_font;
|
||||||
font-size: 12px !important;
|
font-size: 12px !important;
|
||||||
line-height: 16px !important;
|
line-height: 16px !important;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
|
@ -175,6 +162,7 @@
|
||||||
color: #666;
|
color: #666;
|
||||||
padding: 10px 6px 10px 0;
|
padding: 10px 6px 10px 0;
|
||||||
text-align: right;
|
text-align: right;
|
||||||
|
background: #EEE;
|
||||||
|
|
||||||
a {
|
a {
|
||||||
color: #666;
|
color: #666;
|
||||||
|
|
|
@ -1,7 +1,2 @@
|
||||||
@font-face{
|
|
||||||
font-family: Korolev;
|
|
||||||
src: font-url('korolev-medium-compressed.otf');
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Typo **/
|
/** Typo **/
|
||||||
$monospace: 'Menlo', 'Liberation Mono', 'Consolas', 'Courier New', 'andale mono', 'lucida console', monospace;
|
$monospace_font: 'Menlo', 'Liberation Mono', 'Consolas', 'Courier New', 'andale mono', 'lucida console', monospace;
|
||||||
|
|
|
@ -23,14 +23,12 @@
|
||||||
border-bottom: 1px solid #ADF;
|
border-bottom: 1px solid #ADF;
|
||||||
}
|
}
|
||||||
|
|
||||||
&:first-child {
|
|
||||||
@include border-radius(4px 4px 0 0);
|
|
||||||
border-top: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
&:last-child {
|
&:last-child {
|
||||||
@include border-radius(0 0 4px 4px);
|
border-bottom: none;
|
||||||
border: none;
|
|
||||||
|
&.bottom {
|
||||||
|
background: #f5f5f5;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.author { color: #999; }
|
.author { color: #999; }
|
||||||
|
|
|
@ -24,6 +24,14 @@
|
||||||
background-image: -o-linear-gradient($from, $to);
|
background-image: -o-linear-gradient($from, $to);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@mixin transition($transition) {
|
||||||
|
-webkit-transition: $transition;
|
||||||
|
-moz-transition: $transition;
|
||||||
|
-ms-transition: $transition;
|
||||||
|
-o-transition: $transition;
|
||||||
|
transition: $transition;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Prefilled mixins
|
* Prefilled mixins
|
||||||
* Mixins with fixed values
|
* Mixins with fixed values
|
||||||
|
@ -62,8 +70,19 @@
|
||||||
@mixin header-font {
|
@mixin header-font {
|
||||||
color: $style_color;
|
color: $style_color;
|
||||||
text-shadow: 0 1px 1px #FFF;
|
text-shadow: 0 1px 1px #FFF;
|
||||||
font-family: 'Korolev', sans-serif;
|
font-size: 18px;
|
||||||
font-size: 28px;
|
line-height: 40px;
|
||||||
line-height: 48px;
|
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
|
letter-spacing: -1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
@mixin md-typography {
|
||||||
|
code { padding: 0 4px; }
|
||||||
|
p { font-size: 13px; }
|
||||||
|
h1 { font-size: 26px; line-height: 40px; margin: 10px 0;}
|
||||||
|
h2 { font-size: 22px; line-height: 40px; margin: 10px 0;}
|
||||||
|
h3 { font-size: 18px; line-height: 40px; margin: 10px 0;}
|
||||||
|
h4 { font-size: 16px; line-height: 20px; margin: 10px 0;}
|
||||||
|
h5 { font-size: 14px; line-height: 20px; margin: 10px 0;}
|
||||||
|
h6 { font-size: 12px; line-height: 20px; margin: 10px 0;}
|
||||||
}
|
}
|
||||||
|
|
65
app/assets/stylesheets/gitlab_bootstrap/nav.scss
Normal file
|
@ -0,0 +1,65 @@
|
||||||
|
/**
|
||||||
|
* nav-pills
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
.nav-pills {
|
||||||
|
.active a {
|
||||||
|
background: $primary_color;
|
||||||
|
}
|
||||||
|
|
||||||
|
> li > a {
|
||||||
|
@include border-radius(0);
|
||||||
|
}
|
||||||
|
&.nav-stacked {
|
||||||
|
> li > a {
|
||||||
|
border-left: 4px solid #EEE;
|
||||||
|
padding: 12px;
|
||||||
|
}
|
||||||
|
> .active > a {
|
||||||
|
border-color: #29B;
|
||||||
|
border-radius: 0;
|
||||||
|
background: #F1F1F1;
|
||||||
|
color: $style_color;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-pills > .active > a > i[class^="icon-"] { background: inherit; }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* nav-tabs
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
.nav-tabs > li > a, .nav-pills > li > a { color: $style_color; }
|
||||||
|
.nav.nav-tabs {
|
||||||
|
li {
|
||||||
|
> a {
|
||||||
|
padding: 8px 20px;
|
||||||
|
margin-right: 7px;
|
||||||
|
line-height: 20px;
|
||||||
|
border-color: #EEE;
|
||||||
|
color: #888;
|
||||||
|
border-bottom: 1px solid #ddd;
|
||||||
|
.badge {
|
||||||
|
background-color: #eee;
|
||||||
|
color: #888;
|
||||||
|
text-shadow: 0 1px 1px #fff;
|
||||||
|
}
|
||||||
|
i[class^="icon-"] {
|
||||||
|
line-height: 14px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&.active {
|
||||||
|
> a {
|
||||||
|
border-color: #CCC;
|
||||||
|
border-bottom: 1px solid #fff;
|
||||||
|
color: #333;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&.nav-small-tabs > li > a { padding: 6px 9px; }
|
||||||
|
}
|
|
@ -11,6 +11,12 @@ table {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
&.headless {
|
||||||
|
tr:first-child td{
|
||||||
|
border-top: 1px solid #CCC;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
th {
|
th {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
|
@ -25,7 +31,7 @@ table {
|
||||||
}
|
}
|
||||||
|
|
||||||
th, td {
|
th, td {
|
||||||
padding: 8px;
|
padding: 10px;
|
||||||
line-height: 18px;
|
line-height: 18px;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,7 +21,7 @@ h6 {
|
||||||
|
|
||||||
/** CODE **/
|
/** CODE **/
|
||||||
pre {
|
pre {
|
||||||
font-family:'Menlo', 'Liberation Mono', 'Consolas', 'Courier New', 'andale mono','lucida console',monospace;
|
font-family: $monospace_font;
|
||||||
|
|
||||||
&.dark {
|
&.dark {
|
||||||
background: #333;
|
background: #333;
|
||||||
|
@ -79,5 +79,23 @@ a:focus {
|
||||||
}
|
}
|
||||||
|
|
||||||
.monospace {
|
.monospace {
|
||||||
font-family: 'Menlo', 'Liberation Mono', 'Consolas', 'Courier New', 'andale mono','lucida console',monospace;
|
font-family: $monospace_font;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Wiki typography
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
.wiki {
|
||||||
|
@include md-typography;
|
||||||
|
|
||||||
|
font-size: 13px;
|
||||||
|
line-height: 20px;
|
||||||
|
|
||||||
|
.white .highlight pre { background: #f5f5f5; }
|
||||||
|
ul { margin: 0 0 9px 25px !important; }
|
||||||
|
}
|
||||||
|
|
||||||
|
.md {
|
||||||
|
@include md-typography;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,13 @@
|
||||||
/** Colors **/
|
/**
|
||||||
|
* General Colors
|
||||||
|
*/
|
||||||
$primary_color: #2FA0BB;
|
$primary_color: #2FA0BB;
|
||||||
$link_color: #3A89A3;
|
$link_color: #3A89A3;
|
||||||
$style_color: #474D57;
|
$style_color: #474D57;
|
||||||
$hover: #D9EDF7;
|
$hover: #D9EDF7;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Commit Diff Colors
|
||||||
|
*/
|
||||||
|
$added: #63c363;
|
||||||
|
$deleted: #f77;
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
.black .highlight {
|
.black .highlight {
|
||||||
background-color: #333;
|
|
||||||
pre {
|
pre {
|
||||||
|
background-color: #333;
|
||||||
color: #eee;
|
color: #eee;
|
||||||
background: inherit;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.hll { display: block; background-color: darken($hover, 65%) }
|
.hll { display: block; background-color: darken($hover, 65%) }
|
||||||
|
|
77
app/assets/stylesheets/highlight/solarized_dark.scss
Normal file
|
@ -0,0 +1,77 @@
|
||||||
|
.solarized-dark .highlight {
|
||||||
|
pre {
|
||||||
|
background-color: #002B36;
|
||||||
|
color: #eee;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hll { background-color: #073642 }
|
||||||
|
.c { color: #586E75 } /* Comment */
|
||||||
|
.err { color: #93A1A1 } /* Error */
|
||||||
|
.g { color: #93A1A1 } /* Generic */
|
||||||
|
.k { color: #859900 } /* Keyword */
|
||||||
|
.l { color: #93A1A1 } /* Literal */
|
||||||
|
.n { color: #93A1A1 } /* Name */
|
||||||
|
.o { color: #859900 } /* Operator */
|
||||||
|
.x { color: #CB4B16 } /* Other */
|
||||||
|
.p { color: #93A1A1 } /* Punctuation */
|
||||||
|
.cm { color: #586E75 } /* Comment.Multiline */
|
||||||
|
.cp { color: #859900 } /* Comment.Preproc */
|
||||||
|
.c1 { color: #586E75 } /* Comment.Single */
|
||||||
|
.cs { color: #859900 } /* Comment.Special */
|
||||||
|
.gd { color: #2AA198 } /* Generic.Deleted */
|
||||||
|
.ge { color: #93A1A1; font-style: italic } /* Generic.Emph */
|
||||||
|
.gr { color: #DC322F } /* Generic.Error */
|
||||||
|
.gh { color: #CB4B16 } /* Generic.Heading */
|
||||||
|
.gi { color: #859900 } /* Generic.Inserted */
|
||||||
|
.go { color: #93A1A1 } /* Generic.Output */
|
||||||
|
.gp { color: #93A1A1 } /* Generic.Prompt */
|
||||||
|
.gs { color: #93A1A1; font-weight: bold } /* Generic.Strong */
|
||||||
|
.gu { color: #CB4B16 } /* Generic.Subheading */
|
||||||
|
.gt { color: #93A1A1 } /* Generic.Traceback */
|
||||||
|
.kc { color: #CB4B16 } /* Keyword.Constant */
|
||||||
|
.kd { color: #268BD2 } /* Keyword.Declaration */
|
||||||
|
.kn { color: #859900 } /* Keyword.Namespace */
|
||||||
|
.kp { color: #859900 } /* Keyword.Pseudo */
|
||||||
|
.kr { color: #268BD2 } /* Keyword.Reserved */
|
||||||
|
.kt { color: #DC322F } /* Keyword.Type */
|
||||||
|
.ld { color: #93A1A1 } /* Literal.Date */
|
||||||
|
.m { color: #2AA198 } /* Literal.Number */
|
||||||
|
.s { color: #2AA198 } /* Literal.String */
|
||||||
|
.na { color: #93A1A1 } /* Name.Attribute */
|
||||||
|
.nb { color: #B58900 } /* Name.Builtin */
|
||||||
|
.nc { color: #268BD2 } /* Name.Class */
|
||||||
|
.no { color: #CB4B16 } /* Name.Constant */
|
||||||
|
.nd { color: #268BD2 } /* Name.Decorator */
|
||||||
|
.ni { color: #CB4B16 } /* Name.Entity */
|
||||||
|
.ne { color: #CB4B16 } /* Name.Exception */
|
||||||
|
.nf { color: #268BD2 } /* Name.Function */
|
||||||
|
.nl { color: #93A1A1 } /* Name.Label */
|
||||||
|
.nn { color: #93A1A1 } /* Name.Namespace */
|
||||||
|
.nx { color: #93A1A1 } /* Name.Other */
|
||||||
|
.py { color: #93A1A1 } /* Name.Property */
|
||||||
|
.nt { color: #268BD2 } /* Name.Tag */
|
||||||
|
.nv { color: #268BD2 } /* Name.Variable */
|
||||||
|
.ow { color: #859900 } /* Operator.Word */
|
||||||
|
.w { color: #93A1A1 } /* Text.Whitespace */
|
||||||
|
.mf { color: #2AA198 } /* Literal.Number.Float */
|
||||||
|
.mh { color: #2AA198 } /* Literal.Number.Hex */
|
||||||
|
.mi { color: #2AA198 } /* Literal.Number.Integer */
|
||||||
|
.mo { color: #2AA198 } /* Literal.Number.Oct */
|
||||||
|
.sb { color: #586E75 } /* Literal.String.Backtick */
|
||||||
|
.sc { color: #2AA198 } /* Literal.String.Char */
|
||||||
|
.sd { color: #93A1A1 } /* Literal.String.Doc */
|
||||||
|
.s2 { color: #2AA198 } /* Literal.String.Double */
|
||||||
|
.se { color: #CB4B16 } /* Literal.String.Escape */
|
||||||
|
.sh { color: #93A1A1 } /* Literal.String.Heredoc */
|
||||||
|
.si { color: #2AA198 } /* Literal.String.Interpol */
|
||||||
|
.sx { color: #2AA198 } /* Literal.String.Other */
|
||||||
|
.sr { color: #DC322F } /* Literal.String.Regex */
|
||||||
|
.s1 { color: #2AA198 } /* Literal.String.Single */
|
||||||
|
.ss { color: #2AA198 } /* Literal.String.Symbol */
|
||||||
|
.bp { color: #268BD2 } /* Name.Builtin.Pseudo */
|
||||||
|
.vc { color: #268BD2 } /* Name.Variable.Class */
|
||||||
|
.vg { color: #268BD2 } /* Name.Variable.Global */
|
||||||
|
.vi { color: #268BD2 } /* Name.Variable.Instance */
|
||||||
|
.il { color: #2AA198 } /* Literal.Number.Integer.Long */
|
||||||
|
}
|
||||||
|
|
5
app/assets/stylesheets/sections/admin.scss
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
.admin-filter form {
|
||||||
|
label { width: 110px; }
|
||||||
|
.controls { margin-left: 130px; }
|
||||||
|
.form-actions { padding-left: 130px; background: #fff }
|
||||||
|
}
|
|
@ -1,79 +1,20 @@
|
||||||
.commit-box {
|
/**
|
||||||
@extend .main_box;
|
* Commit file
|
||||||
|
*/
|
||||||
.commit-head {
|
.commit-committer-link,
|
||||||
@extend .top_box_content;
|
.commit-author-link {
|
||||||
|
font-size: 13px;
|
||||||
.commit-title {
|
color: #555;
|
||||||
line-height: 26px;
|
&:hover {
|
||||||
margin: 0;
|
color: #999;
|
||||||
}
|
|
||||||
|
|
||||||
.commit-description {
|
|
||||||
font-size: 14px;
|
|
||||||
border: none;
|
|
||||||
background-color: white;
|
|
||||||
padding-top: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.browse-button {
|
|
||||||
@extend .btn;
|
|
||||||
@extend .btn-small;
|
|
||||||
float: right;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.commit-info {
|
|
||||||
@extend .middle_box_content;
|
|
||||||
@extend .clearfix;
|
|
||||||
|
|
||||||
.sha-block {
|
|
||||||
text-align: right;
|
|
||||||
&:first-child {
|
|
||||||
padding-bottom: 6px;
|
|
||||||
}
|
|
||||||
|
|
||||||
a {
|
|
||||||
border-bottom: 1px solid #aaa;
|
|
||||||
margin-left: 9px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
&.merge-commit .sha-block {
|
|
||||||
clear: right;
|
|
||||||
}
|
|
||||||
|
|
||||||
.committer {
|
|
||||||
padding-left: 32px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.author a,
|
|
||||||
.committer a {
|
|
||||||
font-size: 14px;
|
|
||||||
line-height: 22px;
|
|
||||||
text-shadow: 0 1px 1px #fff;
|
|
||||||
color: #777;
|
|
||||||
&:hover {
|
|
||||||
color: #999;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.avatar {
|
|
||||||
margin-right: 10px;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
.file {
|
||||||
*
|
|
||||||
* COMMIT SHOw
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
.diff_file {
|
|
||||||
border: 1px solid #CCC;
|
border: 1px solid #CCC;
|
||||||
margin-bottom: 1em;
|
margin-bottom: 1em;
|
||||||
|
|
||||||
.diff_file_header {
|
.header {
|
||||||
@extend .clearfix;
|
@extend .clearfix;
|
||||||
padding: 5px 5px 5px 10px;
|
padding: 5px 5px 5px 10px;
|
||||||
color: #555;
|
color: #555;
|
||||||
|
@ -85,32 +26,35 @@
|
||||||
background-image: -moz-linear-gradient(#eee 6.6%, #dfdfdf);
|
background-image: -moz-linear-gradient(#eee 6.6%, #dfdfdf);
|
||||||
background-image: -o-linear-gradient(#eee 6.6%, #dfdfdf);
|
background-image: -o-linear-gradient(#eee 6.6%, #dfdfdf);
|
||||||
|
|
||||||
|
a{
|
||||||
|
color: $style_color;
|
||||||
|
}
|
||||||
|
|
||||||
> span {
|
> span {
|
||||||
font-family: $monospace;
|
font-family: $monospace_font;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
line-height: 30px;
|
line-height: 30px;
|
||||||
}
|
}
|
||||||
|
|
||||||
a.view-commit{
|
a.view-file{
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
.commit-short-id{
|
.commit-short-id{
|
||||||
font-family: $monospace;
|
font-family: $monospace_font;
|
||||||
font-size: smaller;
|
font-size: smaller;
|
||||||
}
|
}
|
||||||
|
|
||||||
.file-mode{
|
.file-mode{
|
||||||
font-family: $monospace;
|
font-family: $monospace_font;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.diff_file_content {
|
.content {
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
overflow-y: hidden;
|
overflow-y: hidden;
|
||||||
background: #fff;
|
background: #FFF;
|
||||||
color: #333;
|
color: #333;
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
font-family: $monospace;
|
|
||||||
.old{
|
.old{
|
||||||
span.idiff{
|
span.idiff{
|
||||||
background-color: #FAA;
|
background-color: #FAA;
|
||||||
|
@ -123,114 +67,277 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
table {
|
table {
|
||||||
|
font-family: $monospace_font;
|
||||||
|
border: none;
|
||||||
|
margin: 0px;
|
||||||
|
padding: 0px;
|
||||||
td {
|
td {
|
||||||
line-height: 18px;
|
line-height: 18px;
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.diff_file_content_image {
|
|
||||||
background: #eee;
|
|
||||||
text-align: center;
|
|
||||||
.image {
|
|
||||||
display: inline-block;
|
|
||||||
margin: 50px;
|
|
||||||
max-width: 400px;
|
|
||||||
|
|
||||||
img{
|
|
||||||
background: url('trans_bg.gif');
|
|
||||||
}
|
|
||||||
|
|
||||||
&.diff_removed {
|
|
||||||
img{
|
|
||||||
border: 1px solid #C00;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
&.diff_added {
|
|
||||||
img{
|
|
||||||
border: 1px solid #0C0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.image-info{
|
|
||||||
margin: 5px 0 0 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
&.img_compared {
|
|
||||||
.image {
|
|
||||||
max-width: 300px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.diff_file_content{
|
|
||||||
table {
|
|
||||||
border: none;
|
|
||||||
margin: 0px;
|
|
||||||
padding: 0px;
|
|
||||||
tr {
|
|
||||||
td {
|
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
.old_line, .new_line {
|
||||||
.old_line, .new_line {
|
margin: 0px;
|
||||||
margin: 0px;
|
padding: 0px;
|
||||||
padding: 0px;
|
border: none;
|
||||||
border: none;
|
background: #EEE;
|
||||||
background: #EEE;
|
|
||||||
color: #666;
|
|
||||||
padding: 0px 5px;
|
|
||||||
border-right: 1px solid #ccc;
|
|
||||||
text-align: right;
|
|
||||||
min-width: 35px;
|
|
||||||
max-width: 35px;
|
|
||||||
width: 35px;
|
|
||||||
moz-user-select: none;
|
|
||||||
-khtml-user-select: none;
|
|
||||||
user-select: none;
|
|
||||||
a {
|
|
||||||
float: left;
|
|
||||||
width: 35px;
|
|
||||||
font-weight: normal;
|
|
||||||
color: #666;
|
color: #666;
|
||||||
&:hover {
|
padding: 0px 5px;
|
||||||
text-decoration: underline;
|
border-right: 1px solid #ccc;
|
||||||
|
text-align: right;
|
||||||
|
min-width: 35px;
|
||||||
|
max-width: 35px;
|
||||||
|
width: 35px;
|
||||||
|
@include user-select(none);
|
||||||
|
a {
|
||||||
|
float: left;
|
||||||
|
width: 35px;
|
||||||
|
font-weight: normal;
|
||||||
|
color: #666;
|
||||||
|
&:hover {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.line_content {
|
||||||
|
display: block;
|
||||||
|
white-space: pre;
|
||||||
|
height: 18px;
|
||||||
|
margin: 0px;
|
||||||
|
padding: 0px;
|
||||||
|
border: none;
|
||||||
|
&.new {
|
||||||
|
background: #CFD;
|
||||||
|
}
|
||||||
|
&.old {
|
||||||
|
background: #FDD;
|
||||||
|
}
|
||||||
|
&.matched {
|
||||||
|
color: #ccc;
|
||||||
|
background: #fafafa;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.line_content {
|
.image {
|
||||||
white-space: pre;
|
background: #ddd;
|
||||||
height: 14px;
|
text-align: center;
|
||||||
margin: 0px;
|
padding: 30px;
|
||||||
padding: 0px;
|
.wrap{
|
||||||
border: none;
|
display: inline-block;
|
||||||
&.new {
|
|
||||||
background: #CFD;
|
|
||||||
}
|
}
|
||||||
&.old {
|
|
||||||
background: #FDD;
|
.frame {
|
||||||
|
display: inline-block;
|
||||||
|
background-color: #fff;
|
||||||
|
line-height: 0;
|
||||||
|
img{
|
||||||
|
border: 1px solid #FFF;
|
||||||
|
background: url('trans_bg.gif');
|
||||||
|
}
|
||||||
|
&.deleted {
|
||||||
|
border: 1px solid $deleted;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.added {
|
||||||
|
border: 1px solid $added;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
&.matched {
|
.image-info{
|
||||||
color: #ccc;
|
font-size: 12px;
|
||||||
background: #fafafa;
|
margin: 5px 0 0 0;
|
||||||
|
color: grey;
|
||||||
|
}
|
||||||
|
|
||||||
|
.view.swipe{
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
.swipe-frame{
|
||||||
|
display: block;
|
||||||
|
margin: auto;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
.swipe-wrap{
|
||||||
|
overflow: hidden;
|
||||||
|
border-left: 1px solid #999;
|
||||||
|
position: absolute;
|
||||||
|
display: block;
|
||||||
|
top: 13px;
|
||||||
|
right: 7px;
|
||||||
|
}
|
||||||
|
.frame{
|
||||||
|
top: 0;
|
||||||
|
right: 0;
|
||||||
|
position: absolute;
|
||||||
|
&.deleted{
|
||||||
|
margin: 0;
|
||||||
|
display: block;
|
||||||
|
top: 13px;
|
||||||
|
right: 7px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.swipe-bar{
|
||||||
|
display: block;
|
||||||
|
height: 100%;
|
||||||
|
width: 15px;
|
||||||
|
z-index: 100;
|
||||||
|
position: absolute;
|
||||||
|
cursor: pointer;
|
||||||
|
&:hover{
|
||||||
|
.top-handle{
|
||||||
|
background-position: -15px 3px;
|
||||||
|
}
|
||||||
|
.bottom-handle{
|
||||||
|
background-position: -15px -11px;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
.top-handle{
|
||||||
|
display: block;
|
||||||
|
height: 14px;
|
||||||
|
width: 15px;
|
||||||
|
position: absolute;
|
||||||
|
top: 0px;
|
||||||
|
background: url('swipemode_sprites.gif') 0 3px no-repeat;
|
||||||
|
}
|
||||||
|
.bottom-handle{
|
||||||
|
display: block;
|
||||||
|
height: 14px;
|
||||||
|
width: 15px;
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0px;
|
||||||
|
background: url('swipemode_sprites.gif') 0 -11px no-repeat;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} //.view.swipe
|
||||||
|
.view.onion-skin{
|
||||||
|
.onion-skin-frame{
|
||||||
|
display: block;
|
||||||
|
margin: auto;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
.frame.added, .frame.deleted {
|
||||||
|
position: absolute;
|
||||||
|
display: block;
|
||||||
|
top: 0px;
|
||||||
|
left: 0px;
|
||||||
|
}
|
||||||
|
.controls{
|
||||||
|
display: block;
|
||||||
|
height: 14px;
|
||||||
|
width: 300px;
|
||||||
|
z-index: 100;
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0px;
|
||||||
|
left: 50%;
|
||||||
|
margin-left: -150px;
|
||||||
|
|
||||||
|
.drag-track{
|
||||||
|
display: block;
|
||||||
|
position: absolute;
|
||||||
|
left: 12px;
|
||||||
|
height: 10px;
|
||||||
|
width: 276px;
|
||||||
|
background: url('onion_skin_sprites.gif') -4px -20px repeat-x;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dragger {
|
||||||
|
display: block;
|
||||||
|
position: absolute;
|
||||||
|
left: 0px;
|
||||||
|
top: 0px;
|
||||||
|
height: 14px;
|
||||||
|
width: 14px;
|
||||||
|
background: url('onion_skin_sprites.gif') 0px -34px repeat-x;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.transparent {
|
||||||
|
display: block;
|
||||||
|
position: absolute;
|
||||||
|
top: 2px;
|
||||||
|
right: 0px;
|
||||||
|
height: 10px;
|
||||||
|
width: 10px;
|
||||||
|
background: url('onion_skin_sprites.gif') -2px 0px no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
.opaque {
|
||||||
|
display: block;
|
||||||
|
position: absolute;
|
||||||
|
top: 2px;
|
||||||
|
left: 0px;
|
||||||
|
height: 10px;
|
||||||
|
width: 10px;
|
||||||
|
background: url('onion_skin_sprites.gif') -2px -10px no-repeat;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} //.view.onion-skin
|
||||||
|
}
|
||||||
|
.view-modes{
|
||||||
|
|
||||||
|
padding: 10px;
|
||||||
|
text-align: center;
|
||||||
|
|
||||||
|
background-image: -webkit-gradient(linear, 0 0, 0 30, color-stop(0.066, #eee), to(#dfdfdf));
|
||||||
|
background-image: -webkit-linear-gradient(#eee 6.6%, #dfdfdf);
|
||||||
|
background-image: -moz-linear-gradient(#eee 6.6%, #dfdfdf);
|
||||||
|
background-image: -o-linear-gradient(#eee 6.6%, #dfdfdf);
|
||||||
|
|
||||||
|
ul, li{
|
||||||
|
list-style: none;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
li{
|
||||||
|
color: grey;
|
||||||
|
border-left: 1px solid #c1c1c1;
|
||||||
|
padding: 0 12px 0 16px;
|
||||||
|
cursor: pointer;
|
||||||
|
&:first-child{
|
||||||
|
border-left: none;
|
||||||
|
}
|
||||||
|
&:hover{
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
&.active{
|
||||||
|
&:hover{
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
cursor: default;
|
||||||
|
color: #333;
|
||||||
|
}
|
||||||
|
&.disabled{
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** COMMIT BLOCK **/
|
/** COMMIT BLOCK **/
|
||||||
.commit-title{display: block;}
|
.commit-title{
|
||||||
.commit-title{margin-bottom: 10px}
|
display: block;
|
||||||
.commit-author, .commit-committer{display: block;color: #999; font-weight: normal; font-style: italic;}
|
}
|
||||||
.commit-author strong, .commit-committer strong{font-weight: bold; font-style: normal;}
|
.commit-title{
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
.commit-author, .commit-committer{
|
||||||
|
display: block;
|
||||||
|
color: #999;
|
||||||
|
font-weight: normal;
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
.commit-author strong, .commit-committer strong{
|
||||||
|
font-weight: bold;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/** COMMIT ROW **/
|
/**
|
||||||
|
* COMMIT ROW
|
||||||
|
*/
|
||||||
.commit {
|
.commit {
|
||||||
.browse_code_link_holder {
|
.browse_code_link_holder {
|
||||||
@extend .span2;
|
|
||||||
float: right;
|
float: right;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -253,18 +360,10 @@
|
||||||
float: left;
|
float: left;
|
||||||
@extend .lined;
|
@extend .lined;
|
||||||
min-width: 65px;
|
min-width: 65px;
|
||||||
font-family: $monospace;
|
font-family: $monospace_font;
|
||||||
}
|
|
||||||
|
|
||||||
.commit-author-name {
|
|
||||||
color: #777;
|
|
||||||
&:hover {
|
|
||||||
color: #999;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.diff_file_header a,
|
|
||||||
.file-stats a {
|
.file-stats a {
|
||||||
color: $style_color;
|
color: $style_color;
|
||||||
}
|
}
|
||||||
|
@ -298,7 +397,7 @@
|
||||||
font-size: 13px;
|
font-size: 13px;
|
||||||
background: #474D57;
|
background: #474D57;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
font-family: $monospace;
|
font-family: $monospace_font;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -314,3 +413,9 @@
|
||||||
padding: 4px;
|
padding: 4px;
|
||||||
background-color: #EEE;
|
background-color: #EEE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.commit-description {
|
||||||
|
background: none;
|
||||||
|
border: none;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
|
@ -40,13 +40,33 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.event-body {
|
.event-body {
|
||||||
p {
|
.commit p {
|
||||||
color: #555;
|
color: #555;
|
||||||
padding-top: 5px;
|
padding-top: 5px;
|
||||||
}
|
}
|
||||||
.event-info {
|
.event-info {
|
||||||
color: #666;
|
color: #666;
|
||||||
}
|
}
|
||||||
|
.event-note {
|
||||||
|
color: #555;
|
||||||
|
margin-top: 5px;
|
||||||
|
margin-left: 40px;
|
||||||
|
|
||||||
|
.note-file-attach {
|
||||||
|
.note-image-attach {
|
||||||
|
margin-top: 4px;
|
||||||
|
margin-left: 0px;
|
||||||
|
max-width: 200px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.event-note-icon {
|
||||||
|
color: #777;
|
||||||
|
float: left;
|
||||||
|
font-size: 16px;
|
||||||
|
line-height: 16px;
|
||||||
|
margin-right: 5px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
.avatar {
|
.avatar {
|
||||||
position: relative;
|
position: relative;
|
||||||
|
@ -114,7 +134,7 @@
|
||||||
.btn-new-mr {
|
.btn-new-mr {
|
||||||
@extend .btn-info;
|
@extend .btn-info;
|
||||||
@extend .small;
|
@extend .small;
|
||||||
@extend .right;
|
@extend .pull-right;
|
||||||
margin: -3px;
|
margin: -3px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -126,21 +146,25 @@
|
||||||
.event_filter {
|
.event_filter {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
width: 40px;
|
width: 40px;
|
||||||
margin-left: -50px;
|
margin-left: -55px;
|
||||||
|
|
||||||
.filter_icon {
|
.filter_icon {
|
||||||
float: left;
|
a {
|
||||||
border-left: 3px solid #4bc;
|
text-align:center;
|
||||||
padding: 7px;
|
border-left: 3px solid #29B;
|
||||||
background: #f9f9f9;
|
background: #f9f9f9;
|
||||||
margin-bottom: 10px;
|
margin-bottom: 10px;
|
||||||
img {
|
float: left;
|
||||||
width: 20px;
|
padding: 9px 7px;
|
||||||
|
font-size: 18px;
|
||||||
|
width: 26px;
|
||||||
}
|
}
|
||||||
|
|
||||||
&.inactive {
|
&.inactive {
|
||||||
border-left: 3px solid #EEE;
|
a {
|
||||||
opacity: 0.5;
|
color: #DDD;
|
||||||
|
border-left: 3px solid #EEE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
.graph {
|
.graph {
|
||||||
background: #f1f1f1;
|
background: #f1f1f1;
|
||||||
cursor: move;
|
cursor: move;
|
||||||
height: 70%;
|
height: 500px;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,15 +5,16 @@
|
||||||
header {
|
header {
|
||||||
&.navbar-gitlab {
|
&.navbar-gitlab {
|
||||||
.navbar-inner {
|
.navbar-inner {
|
||||||
height: 45px;
|
height: 40px;
|
||||||
padding: 5px;
|
padding: 3px;
|
||||||
background: #F1F1F1;
|
background: #F1F1F1;
|
||||||
|
filter: none;
|
||||||
|
|
||||||
.nav > li > a {
|
.nav > li > a {
|
||||||
color: $style_color;
|
color: $style_color;
|
||||||
text-shadow: 0 1px 0 #fff;
|
text-shadow: 0 1px 0 #fff;
|
||||||
font-size: 18px;
|
font-size: 16px;
|
||||||
padding: 11px;
|
padding: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** NAV block with links and profile **/
|
/** NAV block with links and profile **/
|
||||||
|
@ -25,7 +26,6 @@ header {
|
||||||
}
|
}
|
||||||
|
|
||||||
z-index: 10;
|
z-index: 10;
|
||||||
/*height: 60px;*/
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
|
@ -33,22 +33,30 @@ header {
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
.app_logo {
|
.app_logo {
|
||||||
width: 170px;
|
|
||||||
float: left;
|
float: left;
|
||||||
|
margin-right: 9px;
|
||||||
|
position: relative;
|
||||||
|
top: -5px;
|
||||||
|
padding-top: 5px;
|
||||||
|
|
||||||
a {
|
a {
|
||||||
float: left;
|
float: left;
|
||||||
padding: 0px;
|
padding: 0px;
|
||||||
|
margin: 0 6px;
|
||||||
|
|
||||||
h1 {
|
h1 {
|
||||||
width: 90px;
|
background: url('logo-black.png') no-repeat center 1px;
|
||||||
background: url('logo_dark.png') no-repeat 0px 2px;
|
background-size: 38px;
|
||||||
float: left;
|
float: left;
|
||||||
margin-left: 2px;
|
|
||||||
padding-left: 45px;
|
|
||||||
height: 40px;
|
height: 40px;
|
||||||
|
width: 40px;
|
||||||
@include header-font;
|
@include header-font;
|
||||||
|
text-indent: -9999px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
&:hover {
|
||||||
|
background-color: #EEE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -60,19 +68,27 @@ header {
|
||||||
position: relative;
|
position: relative;
|
||||||
float: left;
|
float: left;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
margin-right: 30px;
|
margin-left: 10px;
|
||||||
@include header-font;
|
@include header-font;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.profile-pic {
|
||||||
|
position: relative;
|
||||||
|
top: -4px;
|
||||||
|
img {
|
||||||
|
width: 26px;
|
||||||
|
@include border-radius(4px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* Search box
|
* Search box
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
.search {
|
.search {
|
||||||
margin-right: 45px;
|
margin-right: 10px;
|
||||||
margin-left: 10px;
|
margin-left: 10px;
|
||||||
margin-top: 2px;
|
|
||||||
|
|
||||||
.search-input {
|
.search-input {
|
||||||
@extend .span2;
|
@extend .span2;
|
||||||
|
@ -84,121 +100,13 @@ header {
|
||||||
@include border-radius(3px);
|
@include border-radius(3px);
|
||||||
border: 1px solid #c6c6c6;
|
border: 1px solid #c6c6c6;
|
||||||
box-shadow: none;
|
box-shadow: none;
|
||||||
|
@include transition(all 0.15s ease-in 0s);
|
||||||
&:focus {
|
&:focus {
|
||||||
@extend .span3;
|
@extend .span3;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* Account box
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
.account-box {
|
|
||||||
position: absolute;
|
|
||||||
right: 0;
|
|
||||||
top: 6px;
|
|
||||||
z-index: 10000;
|
|
||||||
width: 128px;
|
|
||||||
font-size: 11px;
|
|
||||||
float: right;
|
|
||||||
display: block;
|
|
||||||
cursor: pointer;
|
|
||||||
img {
|
|
||||||
@include border-radius(3px);
|
|
||||||
right: 5px;
|
|
||||||
position: absolute;
|
|
||||||
width: 28px;
|
|
||||||
height: 28px;
|
|
||||||
display: block;
|
|
||||||
top: 1px;
|
|
||||||
&:after {
|
|
||||||
content: " ";
|
|
||||||
display: block;
|
|
||||||
position: absolute;
|
|
||||||
top: 0;
|
|
||||||
right: 0;
|
|
||||||
left: 0;
|
|
||||||
bottom: 0;
|
|
||||||
float: right;
|
|
||||||
@include border-radius(5px);
|
|
||||||
border: 1px solid rgba(255, 255, 255, 0.1);
|
|
||||||
border-bottom: 0;
|
|
||||||
background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(255, 255, 255, 0.15)), to(rgba(0, 0, 0, 0.25))),
|
|
||||||
-webkit-gradient(linear, left top, right bottom, color-stop(0, rgba(255, 255, 255, 0)), color-stop(0.5, rgba(255, 255, 255, 0.1)), color-stop(0.501, rgba(255, 255, 255, 0)), color-stop(1, rgba(255, 255, 255, 0)));
|
|
||||||
background: -moz-linear-gradient(top, rgba(255, 255, 255, 0.15), rgba(0, 0, 0, 0.25)),
|
|
||||||
-moz-linear-gradient(left top, rgba(255, 255, 255, 0), rgba(255, 255, 255, 0.1) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0));
|
|
||||||
background: linear-gradient(top, rgba(255, 255, 255, 0.15), rgba(0, 0, 0, 0.25)),
|
|
||||||
linear-gradient(left top, rgba(255, 255, 255, 0), rgba(255, 255, 255, 0.1) 50%, rgba(255, 255, 255, 0) 50%, rgba(255, 255, 255, 0));
|
|
||||||
-webkit-background-origin: border-box;
|
|
||||||
-moz-background-origin: border;
|
|
||||||
background-origin: border-box; } } }
|
|
||||||
|
|
||||||
.account-box {
|
|
||||||
&.hover {
|
|
||||||
height: 138px; }
|
|
||||||
&:hover > .account-links {
|
|
||||||
display: block; } }
|
|
||||||
|
|
||||||
.account-links {
|
|
||||||
@include border-radius(5px);
|
|
||||||
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2);
|
|
||||||
position: relative;
|
|
||||||
&:before {
|
|
||||||
content: ".";
|
|
||||||
width: 0;
|
|
||||||
height: 0;
|
|
||||||
position: absolute;
|
|
||||||
border: 5px solid transparent;
|
|
||||||
border-color: rgba(255, 255, 255, 0);
|
|
||||||
border-bottom-color: #555;
|
|
||||||
text-indent: -9999px;
|
|
||||||
top: -10px;
|
|
||||||
line-height: 0;
|
|
||||||
right: 10px;
|
|
||||||
z-index: 10; }
|
|
||||||
background: #555;
|
|
||||||
display: none;
|
|
||||||
z-index: 100000;
|
|
||||||
@include border-radius(4px);
|
|
||||||
width: 130px;
|
|
||||||
position: absolute;
|
|
||||||
right: 5px;
|
|
||||||
top: 38px;
|
|
||||||
margin-top: 0;
|
|
||||||
float: right;
|
|
||||||
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2);
|
|
||||||
a {
|
|
||||||
color: #fff;
|
|
||||||
padding: 12px 15px;
|
|
||||||
display: block;
|
|
||||||
text-shadow: none;
|
|
||||||
border-bottom: 1px solid #666;
|
|
||||||
font-size: 12px;
|
|
||||||
&:hover {
|
|
||||||
color: #fff;
|
|
||||||
background: #333;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.account-box.hover .arrow-up {
|
|
||||||
top: 41px;
|
|
||||||
right: 6px;
|
|
||||||
position: absolute; }
|
|
||||||
|
|
||||||
.account-links a {
|
|
||||||
&:first-child {
|
|
||||||
@include border-radius(5px 5px 0 0);
|
|
||||||
}
|
|
||||||
&:last-child {
|
|
||||||
@include border-radius(0 0 5px 5px);
|
|
||||||
border-bottom: 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Dark header
|
* Dark header
|
||||||
|
@ -221,6 +129,7 @@ header {
|
||||||
.search-input {
|
.search-input {
|
||||||
background-color: #D2D5DA;
|
background-color: #D2D5DA;
|
||||||
background-color: rgba(255, 255, 255, 0.5);
|
background-color: rgba(255, 255, 255, 0.5);
|
||||||
|
border: 1px solid #AAA;
|
||||||
|
|
||||||
&:focus {
|
&:focus {
|
||||||
background-color: white;
|
background-color: white;
|
||||||
|
@ -233,16 +142,38 @@ header {
|
||||||
.app_logo {
|
.app_logo {
|
||||||
a {
|
a {
|
||||||
h1 {
|
h1 {
|
||||||
background: url('logo_white.png') no-repeat 0px 2px;
|
background: url('logo-white.png') no-repeat center 1px;
|
||||||
|
background-size: 38px;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
text-shadow: 0 1px 1px #111;
|
text-shadow: 0 1px 1px #111;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.project_name {
|
.project_name {
|
||||||
|
a {
|
||||||
|
color: #FFF;
|
||||||
|
}
|
||||||
color: #fff;
|
color: #fff;
|
||||||
text-shadow: 0 1px 1px #111;
|
text-shadow: 0 1px 1px #111;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.app_logo {
|
||||||
|
.separator {
|
||||||
|
margin-left: 0;
|
||||||
|
margin-right: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.separator {
|
||||||
|
float: left;
|
||||||
|
height: 46px;
|
||||||
|
width: 1px;
|
||||||
|
background: white;
|
||||||
|
border-left: 1px solid #DDD;
|
||||||
|
margin-top: -3px;
|
||||||
|
margin-left: 10px;
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,34 +1,6 @@
|
||||||
.issue_form_box {
|
|
||||||
@extend .main_box;
|
|
||||||
.issue_title {
|
|
||||||
@extend .top_box_content;
|
|
||||||
.clearfix {
|
|
||||||
margin-bottom: 0px;
|
|
||||||
input {
|
|
||||||
@extend .span8;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.issue_middle_block {
|
|
||||||
@extend .middle_box_content;
|
|
||||||
height: 30px;
|
|
||||||
.issue_assignee {
|
|
||||||
@extend .span6;
|
|
||||||
float: left;
|
|
||||||
}
|
|
||||||
.issue_milestone {
|
|
||||||
@extend .span4;
|
|
||||||
float: left;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.issue_description {
|
|
||||||
@extend .bottom_box_content;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.issues_table {
|
.issues_table {
|
||||||
.issue {
|
.issue {
|
||||||
padding: 7px 10px;
|
padding: 10px;
|
||||||
|
|
||||||
.issue_check {
|
.issue_check {
|
||||||
float: left;
|
float: left;
|
||||||
|
@ -82,38 +54,34 @@ input.check_all_issues {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@media (min-width: 800px) { .issues_filters select { width: 160px; } }
|
@media (min-width: 800px) { .issues_filters select { width: 160px; } }
|
||||||
@media (min-width: 1000px) { .issues_filters select { width: 200px; } }
|
|
||||||
@media (min-width: 1200px) { .issues_filters select { width: 220px; } }
|
@media (min-width: 1200px) { .issues_filters select { width: 220px; } }
|
||||||
|
|
||||||
|
@media (min-width: 800px) { .issues_bulk_update select { width: 120px; } }
|
||||||
|
@media (min-width: 1200px) { .issues_bulk_update select { width: 160px; } }
|
||||||
|
|
||||||
#issues-table-holder {
|
#issues-table-holder {
|
||||||
.issues_filters {
|
.issues_filters {
|
||||||
form {
|
|
||||||
padding: 0;
|
|
||||||
margin: 0;
|
|
||||||
margin-top:7px
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.issues_bulk_update {
|
.issues_bulk_update {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
form {
|
form {
|
||||||
padding: 0;
|
float:left;
|
||||||
margin: 0;
|
|
||||||
margin-top:7px
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.update_selected_issues {
|
.update_selected_issues {
|
||||||
position: relative;
|
position: relative;
|
||||||
top:-2px;
|
top:5px;
|
||||||
margin-left: 4px;
|
margin-left: 4px;
|
||||||
float: left;
|
float: left;
|
||||||
}
|
}
|
||||||
|
|
||||||
.update_issues_text {
|
.update_issues_text {
|
||||||
padding: 3px;
|
padding: 3px;
|
||||||
line-height: 18px;
|
line-height: 28px;
|
||||||
float: left;
|
float: left;
|
||||||
|
color: #479;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/* Login Page */
|
/* Login Page */
|
||||||
body.login-page{
|
body.login-page{
|
||||||
padding-top: 10%;
|
background: #EEE;
|
||||||
background: #f1f1f1;
|
.container .content { padding-top: 5%; }
|
||||||
}
|
}
|
||||||
|
|
||||||
.login-box{
|
.login-box{
|
||||||
|
@ -31,4 +31,9 @@ body.login-page{
|
||||||
margin-bottom: 20px;
|
margin-bottom: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.login-box input.text.middle{
|
||||||
|
border-top: 0;
|
||||||
|
margin-bottom:0px;
|
||||||
|
}
|
||||||
|
|
||||||
.login-box a.forgot{float: right; padding-top: 6px}
|
.login-box a.forgot{float: right; padding-top: 6px}
|
||||||
|
|
|
@ -1,17 +1,3 @@
|
||||||
/**
|
|
||||||
* MR form
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
.mr_branch_box {
|
|
||||||
@extend .ui-box;
|
|
||||||
margin-bottom: 20px;
|
|
||||||
|
|
||||||
.body {
|
|
||||||
background: #f1f1f1;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* MR -> show: Automerge widget
|
* MR -> show: Automerge widget
|
||||||
|
@ -47,6 +33,7 @@
|
||||||
}
|
}
|
||||||
label {
|
label {
|
||||||
color: #444;
|
color: #444;
|
||||||
|
text-align: left
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -56,7 +43,7 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.mr_nav_tabs {
|
.merge-request .nav-tabs{
|
||||||
li {
|
li {
|
||||||
a {
|
a {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
|
@ -67,7 +54,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
li.merge_request {
|
li.merge_request {
|
||||||
padding: 7px 10px;
|
padding: 10px;
|
||||||
img.avatar {
|
img.avatar {
|
||||||
width: 32px;
|
width: 32px;
|
||||||
margin-top: 1px;
|
margin-top: 1px;
|
||||||
|
@ -78,21 +65,11 @@ li.merge_request {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.merge_in_progress {
|
.merge-in-progress {
|
||||||
@extend .padded;
|
@extend .padded;
|
||||||
@extend .append-bottom-10;
|
@extend .append-bottom-10;
|
||||||
}
|
}
|
||||||
|
|
||||||
.label_branch {
|
|
||||||
@include border-radius(4px);
|
|
||||||
padding: 2px 4px;
|
|
||||||
border: none;
|
|
||||||
font-size: 14px;
|
|
||||||
background: #474D57;
|
|
||||||
color: #fff;
|
|
||||||
font-family: 'Menlo', 'Liberation Mono', 'Consolas', 'Courier New', 'andale mono','lucida console',monospace;
|
|
||||||
}
|
|
||||||
|
|
||||||
.mr_source_commit,
|
.mr_source_commit,
|
||||||
.mr_target_commit {
|
.mr_target_commit {
|
||||||
.commit {
|
.commit {
|
||||||
|
@ -120,19 +97,3 @@ li.merge_request {
|
||||||
.mr_direction_tip {
|
.mr_direction_tip {
|
||||||
margin-top:40px
|
margin-top:40px
|
||||||
}
|
}
|
||||||
|
|
||||||
.merge_requests_form_box {
|
|
||||||
@extend .main_box;
|
|
||||||
.merge_requests_middle_box {
|
|
||||||
@extend .middle_box_content;
|
|
||||||
height: 30px;
|
|
||||||
.merge_requests_assignee {
|
|
||||||
@extend .span6;
|
|
||||||
float: left;
|
|
||||||
}
|
|
||||||
.merge_requests_milestone {
|
|
||||||
@extend .span4;
|
|
||||||
float: left;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,70 +1,64 @@
|
||||||
/*
|
.main-nav {
|
||||||
* Main Menu of Application
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
ul.main_menu {
|
|
||||||
margin: auto;
|
|
||||||
margin: 30px 0;
|
margin: 30px 0;
|
||||||
margin-top: 10px;
|
margin-top: 10px;
|
||||||
border-bottom: 1px solid #DDD;
|
border-bottom: 1px solid #E1E1E1;
|
||||||
height: 37px;
|
|
||||||
position: relative;
|
|
||||||
overflow: hidden;
|
|
||||||
.count {
|
|
||||||
position: relative;
|
|
||||||
top: -1px;
|
|
||||||
display: inline-block;
|
|
||||||
height: 15px;
|
|
||||||
margin: 0 0 0 5px;
|
|
||||||
padding: 0 8px 1px 8px;
|
|
||||||
height: auto;
|
|
||||||
font-size: 0.82em;
|
|
||||||
line-height: 14px;
|
|
||||||
text-align: center;
|
|
||||||
color: #777;
|
|
||||||
}
|
|
||||||
.label {
|
|
||||||
background: $hover;
|
|
||||||
text-shadow: none;
|
|
||||||
color: $style_color;
|
|
||||||
}
|
|
||||||
li {
|
|
||||||
list-style-type: none;
|
|
||||||
margin: 0;
|
|
||||||
display: table-cell;
|
|
||||||
width: 1%;
|
|
||||||
&.active {
|
|
||||||
border-bottom: 2px solid #474D57;
|
|
||||||
a {
|
|
||||||
color: $style_color;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
&.home {
|
ul {
|
||||||
a {
|
margin: auto;
|
||||||
background: url(home_icon.PNG) no-repeat center center;
|
height: 39px;
|
||||||
text-indent:-9999px;
|
position: relative;
|
||||||
min-width: 20px;
|
top: 3px;
|
||||||
img {
|
overflow: hidden;
|
||||||
position: relative;
|
.count {
|
||||||
top: 4px;
|
position: relative;
|
||||||
|
top: -1px;
|
||||||
|
display: inline-block;
|
||||||
|
height: 15px;
|
||||||
|
margin: 0 0 0 5px;
|
||||||
|
padding: 0 8px 1px 8px;
|
||||||
|
height: auto;
|
||||||
|
font-size: 0.82em;
|
||||||
|
line-height: 14px;
|
||||||
|
text-align: center;
|
||||||
|
color: #777;
|
||||||
|
}
|
||||||
|
.label {
|
||||||
|
background: $hover;
|
||||||
|
text-shadow: none;
|
||||||
|
color: $style_color;
|
||||||
|
}
|
||||||
|
li {
|
||||||
|
list-style-type: none;
|
||||||
|
margin: 0;
|
||||||
|
display: table-cell;
|
||||||
|
width: 1%;
|
||||||
|
&.active {
|
||||||
|
border-bottom: 3px solid #777;
|
||||||
|
a {
|
||||||
|
color: $style_color;
|
||||||
|
font-weight: bolder;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&.home {
|
||||||
|
a {
|
||||||
|
i {
|
||||||
|
font-size: 20px;
|
||||||
|
position: relative;
|
||||||
|
top: 4px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
a {
|
||||||
a {
|
display: block;
|
||||||
display: block;
|
text-align: center;
|
||||||
text-align: center;
|
font-weight: normal;
|
||||||
font-weight: normal;
|
height: 36px;
|
||||||
height: 35px;
|
line-height: 34px;
|
||||||
line-height: 36px;
|
color: #777;
|
||||||
color: #777;
|
text-shadow: 0 1px 1px white;
|
||||||
text-shadow: 0 1px 1px white;
|
padding: 0 10px;
|
||||||
padding: 0 10px;
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
* End of Main Menu
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
|
@ -1,233 +1,301 @@
|
||||||
/**
|
/**
|
||||||
* Notes
|
* Notes
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
#notes-list,
|
ul.notes {
|
||||||
#new-notes-list {
|
|
||||||
display: block;
|
display: block;
|
||||||
list-style: none;
|
list-style: none;
|
||||||
margin: 0px;
|
margin: 0px;
|
||||||
padding: 0px;
|
padding: 0px;
|
||||||
}
|
|
||||||
|
|
||||||
.issue_notes,
|
.discussion-header,
|
||||||
.wiki_notes {
|
.note-header {
|
||||||
.note_content {
|
@extend .cgray;
|
||||||
float: left;
|
padding-top: 5px;
|
||||||
width: 400px;
|
padding-bottom: 15px;
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Note textare */
|
.avatar {
|
||||||
#note_note {
|
|
||||||
height: 80px;
|
|
||||||
width: 99%;
|
|
||||||
font-size: 14px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#new_note {
|
|
||||||
.attach_holder {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.preview_note {
|
|
||||||
margin: 2px;
|
|
||||||
border: 1px solid #ddd;
|
|
||||||
padding: 10px;
|
|
||||||
min-height: 60px;
|
|
||||||
background: #f5f5f5;
|
|
||||||
}
|
|
||||||
|
|
||||||
.note {
|
|
||||||
padding: 8px 0;
|
|
||||||
overflow: hidden;
|
|
||||||
display: block;
|
|
||||||
position: relative;
|
|
||||||
img {float: left; margin-right: 10px;}
|
|
||||||
img.emoji {float: none;margin: 0;}
|
|
||||||
.note-author cite{font-style: italic;}
|
|
||||||
p { color: $style_color; }
|
|
||||||
.note-author { color: $style_color;}
|
|
||||||
|
|
||||||
.note-title { margin-left: 45px; padding-top: 5px;}
|
|
||||||
.avatar {
|
|
||||||
margin-top: 3px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.delete-note {
|
|
||||||
display: none;
|
|
||||||
position: absolute;
|
|
||||||
right: 0;
|
|
||||||
top: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
&:hover {
|
|
||||||
.delete-note { display: block; }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#notes-list:not(.reversed) .note,
|
|
||||||
#new-notes-list:not(.reversed) .note {
|
|
||||||
border-bottom: 1px solid #eee;
|
|
||||||
}
|
|
||||||
#notes-list.reversed .note,
|
|
||||||
#new-notes-list.reversed .note {
|
|
||||||
border-top: 1px solid #eee;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* mark vote notes */
|
|
||||||
.voting_notes .note {
|
|
||||||
padding: 8px 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.notes-status {
|
|
||||||
margin: 18px;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
p.notify_controls input{
|
|
||||||
margin: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
p.notify_controls span{
|
|
||||||
font-weight: 700;
|
|
||||||
}
|
|
||||||
|
|
||||||
tr.line_notes_row {
|
|
||||||
border-bottom: 1px solid #DDD;
|
|
||||||
border-left: 7px solid #2A79A3;
|
|
||||||
|
|
||||||
&.reply {
|
|
||||||
background: #eee;
|
|
||||||
border-left: 7px solid #2A79A3;
|
|
||||||
border-top: 1px solid #ddd;
|
|
||||||
td {
|
|
||||||
padding: 7px 10px;
|
|
||||||
}
|
|
||||||
a.line_note_reply_link {
|
|
||||||
border: 1px solid #eaeaea;
|
|
||||||
@include border-radius(4px);
|
|
||||||
padding: 3px 10px;
|
|
||||||
margin-left: 5px;
|
|
||||||
color: white;
|
|
||||||
background: #2A79A3;
|
|
||||||
border-color: #2A79A3;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ul {
|
|
||||||
margin: 0;
|
|
||||||
li {
|
|
||||||
padding: 0;
|
|
||||||
border: none;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.line_notes_row, .per_line_form { font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; }
|
|
||||||
|
|
||||||
.per_line_form {
|
|
||||||
background: #f5f5f5;
|
|
||||||
border-top: 1px solid #eee;
|
|
||||||
form { margin: 0; }
|
|
||||||
td {
|
|
||||||
border-bottom: 1px solid #ddd;
|
|
||||||
}
|
|
||||||
.note_actions {
|
|
||||||
margin: 0;
|
|
||||||
padding-top: 10px;
|
|
||||||
|
|
||||||
.buttons {
|
|
||||||
float: left;
|
float: left;
|
||||||
width: 300px;
|
margin-right: 10px;
|
||||||
}
|
}
|
||||||
.options {
|
|
||||||
.labels {
|
.discussion-last-update,
|
||||||
float: left;
|
.note-last-update {
|
||||||
padding-left: 10px;
|
font-style: italic;
|
||||||
label {
|
}
|
||||||
padding: 6px 0;
|
.author {
|
||||||
margin: 0;
|
color: $style_color;
|
||||||
width: 120px;
|
font-weight: bold;
|
||||||
}
|
&:hover {
|
||||||
|
color: $primary_color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.discussion {
|
||||||
|
padding: 8px 0;
|
||||||
|
overflow: hidden;
|
||||||
|
display: block;
|
||||||
|
position:relative;
|
||||||
|
|
||||||
|
.discussion-body {
|
||||||
|
margin-left: 50px;
|
||||||
|
|
||||||
|
.file,
|
||||||
|
.discussion-hidden,
|
||||||
|
.notes {
|
||||||
|
@extend .borders;
|
||||||
|
background-color: #F9F9F9;
|
||||||
|
}
|
||||||
|
.file .notes {
|
||||||
|
/* reset */
|
||||||
|
background: inherit;
|
||||||
|
border: none;
|
||||||
|
@include box-shadow(none);
|
||||||
|
|
||||||
|
}
|
||||||
|
.discussion-hidden .note {
|
||||||
|
@extend .cgray;
|
||||||
|
padding: 8px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.notes .note {
|
||||||
|
border-color: #ddd;
|
||||||
|
padding: 8px;
|
||||||
|
}
|
||||||
|
.reply-btn {
|
||||||
|
margin-top: 8px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.note {
|
||||||
|
padding: 8px 0;
|
||||||
|
overflow: hidden;
|
||||||
|
display: block;
|
||||||
|
position:relative;
|
||||||
|
p { color: $style_color; }
|
||||||
|
|
||||||
|
.avatar {
|
||||||
|
margin-top: 3px;
|
||||||
|
}
|
||||||
|
.attachment {
|
||||||
|
font-size: 14px;
|
||||||
|
margin-top: -20px;
|
||||||
|
}
|
||||||
|
.note-body {
|
||||||
|
@include md-typography;
|
||||||
|
margin-left: 45px;
|
||||||
|
}
|
||||||
|
.note-header {
|
||||||
|
padding-bottom: 5px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// paint top or bottom borders depending on notes direction
|
||||||
|
&:not(.reversed) .note,
|
||||||
|
&:not(.reversed) .discussion {
|
||||||
|
border-bottom: 1px solid #eee;
|
||||||
|
}
|
||||||
|
&.reversed .note,
|
||||||
|
&.reversed .discussion {
|
||||||
|
border-top: 1px solid #eee;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.file .notes_holder {
|
||||||
|
font-family: $sansFontFamily;
|
||||||
|
font-size: 13px;
|
||||||
|
line-height: 18px;
|
||||||
|
|
||||||
|
td {
|
||||||
|
border: 1px solid #ddd;
|
||||||
|
border-left: none;
|
||||||
|
|
||||||
|
&.notes_line {
|
||||||
|
text-align: center;
|
||||||
|
padding: 10px 0;
|
||||||
|
}
|
||||||
|
&.notes_content {
|
||||||
|
background-color: $white;
|
||||||
|
border-width: 1px 0;
|
||||||
|
padding-top: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.reply-btn {
|
||||||
|
margin-top: 8px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Actions for Discussions/Notes
|
||||||
|
*/
|
||||||
|
|
||||||
|
.discussion,
|
||||||
|
.note {
|
||||||
|
&.note:hover {
|
||||||
|
.note-actions { display: block; }
|
||||||
|
}
|
||||||
|
.discussion-header:hover {
|
||||||
|
.discussion-actions { display: block; }
|
||||||
|
}
|
||||||
|
|
||||||
|
.discussion-actions,
|
||||||
|
.note-actions {
|
||||||
|
display: none;
|
||||||
|
float: right;
|
||||||
|
|
||||||
|
[class^="icon-"],
|
||||||
|
[class*="icon-"] {
|
||||||
|
font-size: 16px;
|
||||||
|
line-height: 16px;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
@extend .cgray;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
color: $primary_color;
|
||||||
|
&.danger { @extend .cred; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
.file .note .note-actions {
|
||||||
|
right: 0;
|
||||||
|
top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
td .line_note_link {
|
|
||||||
position: absolute;
|
|
||||||
margin-left:-70px;
|
|
||||||
margin-top:-10px;
|
|
||||||
z-index: 10;
|
|
||||||
background: url("comment_add.png") no-repeat left 0;
|
|
||||||
width: 32px;
|
|
||||||
height: 32px;
|
|
||||||
|
|
||||||
opacity: 0.0;
|
|
||||||
filter: alpha(opacity=0);
|
|
||||||
|
|
||||||
&:hover {
|
/**
|
||||||
opacity: 1.0;
|
* Line note button on the side of diffs
|
||||||
filter: alpha(opacity=100);
|
*/
|
||||||
|
|
||||||
|
.file tr.line_holder {
|
||||||
|
.add-diff-note {
|
||||||
|
background: url("diff_note_add.png") no-repeat left 0;
|
||||||
|
height: 22px;
|
||||||
|
margin-left: -65px;
|
||||||
|
position: absolute;
|
||||||
|
width: 22px;
|
||||||
|
z-index: 10;
|
||||||
|
|
||||||
|
// "hide" it by default
|
||||||
|
opacity: 0.0;
|
||||||
|
filter: alpha(opacity=0);
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
opacity: 1.0;
|
||||||
|
filter: alpha(opacity=100);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// "show" the icon also if we just hover somewhere over the line
|
||||||
|
&:hover > td {
|
||||||
|
background: $hover !important;
|
||||||
|
|
||||||
|
.add-diff-note {
|
||||||
|
opacity: 1.0;
|
||||||
|
filter: alpha(opacity=100);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.diff_file_content tr.line_holder:hover > td { background: $hover !important; }
|
/**
|
||||||
.diff_file_content tr.line_holder:hover > td .line_note_link {
|
* Note Form
|
||||||
|
*/
|
||||||
|
|
||||||
|
.comment-btn {
|
||||||
|
@extend .btn-create;
|
||||||
|
}
|
||||||
|
.reply-btn {
|
||||||
|
@extend .btn-primary;
|
||||||
|
}
|
||||||
|
.file .content tr.line_holder:hover > td { background: $hover !important; }
|
||||||
|
.file .content tr.line_holder:hover > td .line_note_link {
|
||||||
opacity: 1.0;
|
opacity: 1.0;
|
||||||
filter: alpha(opacity=100);
|
filter: alpha(opacity=100);
|
||||||
}
|
}
|
||||||
|
.file,
|
||||||
|
.discussion {
|
||||||
|
.new_note {
|
||||||
|
margin: 8px 5px 8px 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
.new_note {
|
.new_note {
|
||||||
.input-file {
|
display: none;
|
||||||
font: 500px monospace;
|
|
||||||
opacity: 0;
|
|
||||||
filter: alpha(opacity=0);
|
|
||||||
position: absolute;
|
|
||||||
z-index: 1;
|
|
||||||
top: 0;
|
|
||||||
right: 0;
|
|
||||||
padding: 0;
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.note_advanced_opts {
|
.buttons {
|
||||||
h6 {
|
float: left;
|
||||||
line-height: 32px;
|
margin-top: 8px;
|
||||||
padding-right: 15px;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
.clearfix {
|
||||||
.attachments {
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
.note_text_and_preview {
|
||||||
|
// makes the "absolute" position for links relative to this
|
||||||
position: relative;
|
position: relative;
|
||||||
width: 350px;
|
|
||||||
height: 50px;
|
|
||||||
overflow: hidden;
|
|
||||||
margin:0 0 5px !important;
|
|
||||||
|
|
||||||
.input_file {
|
// preview/edit buttons
|
||||||
.file_upload {
|
> a {
|
||||||
position: absolute;
|
font-size: 24px;
|
||||||
right: 14px;
|
padding: 4px;
|
||||||
top: 7px;
|
position: absolute;
|
||||||
}
|
right: 10px;
|
||||||
|
}
|
||||||
.file_name {
|
.note_preview {
|
||||||
line-height: 30px;
|
background: #f5f5f5;
|
||||||
width: 240px;
|
border: 1px solid #ddd;
|
||||||
height: 28px;
|
@include border-radius(4px);
|
||||||
overflow: hidden;
|
min-height: 80px;
|
||||||
}
|
padding: 4px 6px;
|
||||||
.input-file {
|
}
|
||||||
width: 260px;
|
.note_text {
|
||||||
height: 41px;
|
border: 1px solid #DDD;
|
||||||
float: right;
|
box-shadow: none;
|
||||||
}
|
font-size: 14px;
|
||||||
|
height: 80px;
|
||||||
|
width: 98.6%;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.note-text {
|
/* loading indicator */
|
||||||
border: 1px solid #aaa;
|
.notes-busy {
|
||||||
box-shadow: none;
|
margin: 18px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.note-image-attach {
|
||||||
|
@extend .span4;
|
||||||
|
@extend .thumbnail;
|
||||||
|
margin-left: 45px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.common-note-form {
|
||||||
|
margin: 0;
|
||||||
|
height: 140px;
|
||||||
|
background: #F9F9F9;
|
||||||
|
padding: 3px;
|
||||||
|
padding-bottom: 25px;
|
||||||
|
border: 1px solid #DDD;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.note-form-actions {
|
||||||
|
background: #F9F9F9;
|
||||||
|
height: 45px;
|
||||||
|
padding: 0 5px;
|
||||||
|
|
||||||
|
.note-form-option {
|
||||||
|
margin-top: 10px;
|
||||||
|
margin-left: 30px;
|
||||||
|
@extend .pull-left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.js-notify-commit-author {
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,20 +4,16 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.side {
|
.side {
|
||||||
@extend .right;
|
@extend .pull-right;
|
||||||
|
|
||||||
.groups_box,
|
.ui-box {
|
||||||
.projects_box {
|
margin: 3px;
|
||||||
> h5 {
|
> .title {
|
||||||
color: $style_color;
|
padding: 2px 15px;
|
||||||
font-size: 16px;
|
|
||||||
text-shadow: 0 1px 1px #fff;
|
|
||||||
padding: 2px 10px;
|
|
||||||
line-height: 32px;
|
|
||||||
font-size: 14px;
|
|
||||||
}
|
}
|
||||||
.nav-projects-tabs li { padding: 0; }
|
.nav-projects-tabs li { padding: 0; }
|
||||||
.well-list {
|
.well-list {
|
||||||
|
li { padding: 15px; }
|
||||||
.arrow {
|
.arrow {
|
||||||
float: right;
|
float: right;
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
|
@ -46,9 +42,6 @@
|
||||||
line-height: 20px;
|
line-height: 20px;
|
||||||
padding: 8px;
|
padding: 8px;
|
||||||
}
|
}
|
||||||
label {
|
|
||||||
color: #888;
|
|
||||||
}
|
|
||||||
.btn {
|
.btn {
|
||||||
padding: 6px 10px;
|
padding: 6px 10px;
|
||||||
margin-left: 10px;
|
margin-left: 10px;
|
||||||
|
@ -88,6 +81,7 @@
|
||||||
border: 1px solid #BBB;
|
border: 1px solid #BBB;
|
||||||
box-shadow: none;
|
box-shadow: none;
|
||||||
margin-left: -1px;
|
margin-left: -1px;
|
||||||
|
background: #FFF;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -109,7 +103,7 @@ ul.nav.nav-projects-tabs {
|
||||||
|
|
||||||
li {
|
li {
|
||||||
a {
|
a {
|
||||||
padding: 4px 20px;
|
padding: 6px 25px;
|
||||||
margin-top: 2px;
|
margin-top: 2px;
|
||||||
border-color: #DDD;
|
border-color: #DDD;
|
||||||
background-color: #EEE;
|
background-color: #EEE;
|
||||||
|
@ -123,3 +117,20 @@ ul.nav.nav-projects-tabs {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.team_member_row form {
|
||||||
|
margin: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.public-projects {
|
||||||
|
li {
|
||||||
|
margin-top: 8px;
|
||||||
|
margin-bottom: 5px;
|
||||||
|
border-bottom: 1px solid #eee;
|
||||||
|
|
||||||
|
.description {
|
||||||
|
margin-left: 22px;
|
||||||
|
color: #aaa;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -80,6 +80,18 @@
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
}
|
}
|
||||||
|
td.blame-commit {
|
||||||
|
background: #f9f9f9;
|
||||||
|
min-width: 350px;
|
||||||
|
}
|
||||||
|
td.blame-numbers {
|
||||||
|
pre {
|
||||||
|
color: #AAA;
|
||||||
|
white-space: pre;
|
||||||
|
}
|
||||||
|
background: #f1f1f1;
|
||||||
|
border-left: 1px solid #DDD;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -90,3 +102,7 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.tree-ref-holder {
|
||||||
|
float: left;
|
||||||
|
margin-top: 5px;
|
||||||
|
}
|
||||||
|
|
55
app/assets/stylesheets/sections/wall.scss
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
.wall-page {
|
||||||
|
.wall-note-form {
|
||||||
|
@extend .span12;
|
||||||
|
|
||||||
|
margin: 0;
|
||||||
|
height: 140px;
|
||||||
|
background: #F9F9F9;
|
||||||
|
position: fixed;
|
||||||
|
bottom: 0px;
|
||||||
|
padding: 3px;
|
||||||
|
padding-bottom: 25px;
|
||||||
|
border: 1px solid #DDD;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notes {
|
||||||
|
margin-bottom: 160px;
|
||||||
|
background: #FFE;
|
||||||
|
border: 1px solid #EED;
|
||||||
|
|
||||||
|
> li {
|
||||||
|
@extend .clearfix;
|
||||||
|
border-bottom: 1px solid #EED;
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.wall-author {
|
||||||
|
color: #666;
|
||||||
|
float: left;
|
||||||
|
font-size: 12px;
|
||||||
|
width: 120px;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
white-space: nowrap;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.wall-text {
|
||||||
|
border-left: 1px solid #CCC;
|
||||||
|
margin-left: 10px;
|
||||||
|
padding-left: 10px;
|
||||||
|
float: left;
|
||||||
|
width: 75%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.wall-file {
|
||||||
|
margin-left: 8px;
|
||||||
|
background: #EEE;
|
||||||
|
}
|
||||||
|
|
||||||
|
abbr {
|
||||||
|
float: right;
|
||||||
|
color: #AAA;
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
6
app/assets/stylesheets/sections/wiki.scss
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
h3.page_title .edit-wiki-header {
|
||||||
|
width: 780px;
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
padding-right: 7px;
|
||||||
|
}
|
|
@ -1,3 +1,18 @@
|
||||||
|
.ajax-users-select {
|
||||||
|
width: 400px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.user-result {
|
||||||
|
.user-image {
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
.user-name {
|
||||||
|
}
|
||||||
|
.user-username {
|
||||||
|
color: #999;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/** Branch/tag selector **/
|
/** Branch/tag selector **/
|
||||||
.project-refs-form {
|
.project-refs-form {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
|
@ -88,3 +103,26 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Select2 styling **/
|
||||||
|
.select2-container .select2-choice {
|
||||||
|
background: #f1f1f1;
|
||||||
|
background-image: -webkit-gradient(linear, 0 0, 0 30, color-stop(0.066, whitesmoke), to(#e1e1e1));
|
||||||
|
background-image: -webkit-linear-gradient(whitesmoke 6.6%, #e1e1e1);
|
||||||
|
background-image: -moz-linear-gradient(whitesmoke 6.6%, #e1e1e1);
|
||||||
|
background-image: -o-linear-gradient(whitesmoke 6.6%, #e1e1e1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container .select2-choice div {
|
||||||
|
border: none;
|
||||||
|
background: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-drop {
|
||||||
|
padding-top: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-no-results, .select2-searching {
|
||||||
|
padding: 7px;
|
||||||
|
color: #666;
|
||||||
|
}
|
|
@ -4,21 +4,8 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
.ui_basic {
|
.ui_basic {
|
||||||
.app_logo {
|
|
||||||
.separator {
|
|
||||||
margin-left: 0;
|
|
||||||
margin-right: 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.separator {
|
.separator {
|
||||||
float: left;
|
|
||||||
height: 60px;
|
|
||||||
width: 1px;
|
|
||||||
background: white;
|
background: white;
|
||||||
border-left: 1px solid #DDD;
|
border-left: 1px solid #DDD;
|
||||||
margin-top: -10px;
|
|
||||||
margin-left: 10px;
|
|
||||||
margin-right: 10px;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,6 +17,15 @@
|
||||||
&.navbar-gitlab {
|
&.navbar-gitlab {
|
||||||
.navbar-inner {
|
.navbar-inner {
|
||||||
background: #657;
|
background: #657;
|
||||||
|
.app_logo {
|
||||||
|
&:hover {
|
||||||
|
background-color: #6A5A7A;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.separator {
|
||||||
|
background: #546;
|
||||||
|
border-left: 1px solid #706080;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|