Compare commits
1897 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b9d80fcdc7 | ||
|
|
3f7d085f73 | ||
|
|
d57dd72780 | ||
|
|
a8d1d5cfcf | ||
|
|
8857e3d521 | ||
|
|
3b1a5be1be | ||
|
|
c9a63a8524 | ||
|
|
cd967d2551 | ||
|
|
92b5247f9f | ||
|
|
45a5b436c8 | ||
|
|
bfd385f969 | ||
|
|
f693fe6b2a | ||
|
|
b040159a9b | ||
|
|
f3af2a1999 | ||
|
|
f613a4cc99 | ||
|
|
e4a96125a6 | ||
|
|
e48074ff54 | ||
|
|
2ed122a534 | ||
|
|
65c0d9b18b | ||
|
|
6702694590 | ||
|
|
6f0d4d039e | ||
|
|
1325b0e48f | ||
|
|
7421eb8068 | ||
|
|
6c7a9a4030 | ||
|
|
ba0a143717 | ||
|
|
28bcb5ed6c | ||
|
|
44fd637a1f | ||
|
|
f13aed1a84 | ||
|
|
cb3de825f2 | ||
|
|
fd4c775710 | ||
|
|
3e550b3e97 | ||
|
|
7a543250f9 | ||
|
|
a071f07634 | ||
|
|
a078f860d2 | ||
|
|
2bfd7a2467 | ||
|
|
55c9392de4 | ||
|
|
7991b555ff | ||
|
|
eab7815c24 | ||
|
|
79c09de103 | ||
|
|
24daa335b6 | ||
|
|
812ba9d52b | ||
|
|
00fb3b56cc | ||
|
|
3644d081f6 | ||
|
|
f05c46b3f1 | ||
|
|
13e76fe278 | ||
|
|
0906ae28c1 | ||
|
|
04905adb89 | ||
|
|
9767109d4e | ||
|
|
a57919bc4d | ||
|
|
c7c94d1f8f | ||
|
|
817e6c3313 | ||
|
|
a23f4c5c88 | ||
|
|
eac9768549 | ||
|
|
a42fb6b558 | ||
|
|
879e825b61 | ||
|
|
07f4310153 | ||
|
|
10c67e5be3 | ||
|
|
1279d5ddaa | ||
|
|
2af15e4b27 | ||
|
|
3096fcf045 | ||
|
|
831492448a | ||
|
|
a5284e846c | ||
|
|
22accaced3 | ||
|
|
f92d97f36e | ||
|
|
4f0a16a24c | ||
|
|
72dade793a | ||
|
|
8addc54015 | ||
|
|
25ab6f9a07 | ||
|
|
b853f72e0c | ||
|
|
449a658521 | ||
|
|
7776a22533 | ||
|
|
554eccc14a | ||
|
|
8cd6928da3 | ||
|
|
8c28be1041 | ||
|
|
810aa8f4f3 | ||
|
|
8e5be952bf | ||
|
|
5a560fee8a | ||
|
|
21819ffc5d | ||
|
|
1f8bdd6061 | ||
|
|
523c813439 | ||
|
|
7ee638bc36 | ||
|
|
76c515d3af | ||
|
|
1c8ce00657 | ||
|
|
0f4bbecd2a | ||
|
|
e292f5a869 | ||
|
|
da25c6f843 | ||
|
|
5122fbe110 | ||
|
|
dee3a3b655 | ||
|
|
4e2bcd22d9 | ||
|
|
17890027a6 | ||
|
|
5e93804525 | ||
|
|
778070dd8a | ||
|
|
74ecc762f3 | ||
|
|
63f7b35cf8 | ||
|
|
0c3f4601cc | ||
|
|
9f0760c887 | ||
|
|
6d787d3e7e | ||
|
|
f79b04884c | ||
|
|
23af844d5b | ||
|
|
ea7d82acf9 | ||
|
|
f492148958 | ||
|
|
8414e638ec | ||
|
|
0193db35b6 | ||
|
|
b891723bab | ||
|
|
1d8aa5672e | ||
|
|
0def24381e | ||
|
|
b441e99e95 | ||
|
|
40ceb92195 | ||
|
|
38cac5dd58 | ||
|
|
b64bf54f3e | ||
|
|
5d9fc2e9af | ||
|
|
9c970632c5 | ||
|
|
58c32f5a05 | ||
|
|
8961060461 | ||
|
|
5f290544e0 | ||
|
|
7f4dc7ed42 | ||
|
|
101b74398f | ||
|
|
a36366ac61 | ||
|
|
55afa0f31d | ||
|
|
892471d8e5 | ||
|
|
4334ae38ed | ||
|
|
be2ef9b626 | ||
|
|
954e84db3c | ||
|
|
8e63c8f937 | ||
|
|
93f26540e6 | ||
|
|
08150f3a9d | ||
|
|
c9ad41288f | ||
|
|
46d3fd92c9 | ||
|
|
564f07e354 | ||
|
|
5618350c0b | ||
|
|
77808c958c | ||
|
|
c121589499 | ||
|
|
18d2cc4f12 | ||
|
|
50193471d6 | ||
|
|
7ef19ecf47 | ||
|
|
098da4124f | ||
|
|
b39788f883 | ||
|
|
ae803727e9 | ||
|
|
f2dca4698c | ||
|
|
b940837c51 | ||
|
|
481b6455f3 | ||
|
|
b5b3fda329 | ||
|
|
a634c055c4 | ||
|
|
6a4012bfcc | ||
|
|
befa55d0e1 | ||
|
|
e31a9005ba | ||
|
|
aaa379ead0 | ||
|
|
c31ac85bfa | ||
|
|
33ada924e8 | ||
|
|
211462ecbc | ||
|
|
ae12b74620 | ||
|
|
66c3855e23 | ||
|
|
343f295b6b | ||
|
|
f90dbb9321 | ||
|
|
5ab85ee20e | ||
|
|
0c0830c1df | ||
|
|
4a8a41de91 | ||
|
|
9afa21cd30 | ||
|
|
d1d3c171fd | ||
|
|
a7c6268d2c | ||
|
|
409495cc70 | ||
|
|
0460ffdb28 | ||
|
|
cbb9a1fdbe | ||
|
|
ba603528d7 | ||
|
|
9069f06857 | ||
|
|
8f76efeb2f | ||
|
|
4fb8333299 | ||
|
|
6b9d7af4ed | ||
|
|
7c1f6c2195 | ||
|
|
90f8f223b9 | ||
|
|
d06a1a68a0 | ||
|
|
af7a922cac | ||
|
|
a6d4e2340e | ||
|
|
ecdd7f6733 | ||
|
|
d407bdbbbc | ||
|
|
ef06262393 | ||
|
|
0328ed49b9 | ||
|
|
0719af011b | ||
|
|
14bd35e348 | ||
|
|
8740fea7c1 | ||
|
|
45969c7628 | ||
|
|
698286dbe0 | ||
|
|
d238b5e86d | ||
|
|
d16b5899e8 | ||
|
|
76b035b800 | ||
|
|
3bb8d5e235 | ||
|
|
8fe3934c6e | ||
|
|
ec7c8f0248 | ||
|
|
147b2d889d | ||
|
|
ca330a99e2 | ||
|
|
2eeb1e74b2 | ||
|
|
d4e68e6c18 | ||
|
|
356643d509 | ||
|
|
9a957c907a | ||
|
|
d97ef82bb7 | ||
|
|
a751c0e03a | ||
|
|
4c50c69fbb | ||
|
|
b1f77b9c4a | ||
|
|
2db2737e86 | ||
|
|
b7f2991246 | ||
|
|
c4483b4587 | ||
|
|
9c63b7c71b | ||
|
|
a443631f11 | ||
|
|
d15f13dcbd | ||
|
|
1518cbd16e | ||
|
|
65cd2233f3 | ||
|
|
8ac1a8cc05 | ||
|
|
d369310a5c | ||
|
|
1d15871a69 | ||
|
|
35e7f4265b | ||
|
|
bb0be8a523 | ||
|
|
6684754a47 | ||
|
|
c214999e27 | ||
|
|
9e1ce571e4 | ||
|
|
2b968814c5 | ||
|
|
8abff891c3 | ||
|
|
e8189636b3 | ||
|
|
795886d2f2 | ||
|
|
d17f3bedd3 | ||
|
|
9311e7c94f | ||
|
|
10193dd014 | ||
|
|
bc44bb0fe9 | ||
|
|
e980c5d762 | ||
|
|
6a497b3894 | ||
|
|
317d910cd3 | ||
|
|
6248fb89b3 | ||
|
|
51f5e40b37 | ||
|
|
ad048a8d5b | ||
|
|
7b4a0515be | ||
|
|
3d9d9448aa | ||
|
|
e90000545b | ||
|
|
dc248dbbde | ||
|
|
ea01ec0f0e | ||
|
|
cf0c62f0c4 | ||
|
|
ddc6da53b3 | ||
|
|
bb40239ed0 | ||
|
|
a2aa738f19 | ||
|
|
c2ae4776a2 | ||
|
|
c0e1987b66 | ||
|
|
344f7cc5df | ||
|
|
b7118a7d44 | ||
|
|
dea15ab6bd | ||
|
|
b1f74213c6 | ||
|
|
5b92d712f4 | ||
|
|
1122ad65ec | ||
|
|
ab410b6707 | ||
|
|
5f9094e7d1 | ||
|
|
fb4c749115 | ||
|
|
3a1c03894f | ||
|
|
b171a92449 | ||
|
|
e5a8319f0b | ||
|
|
8f79000d2d | ||
|
|
a4e926b637 | ||
|
|
8ffc89def2 | ||
|
|
92cef0b811 | ||
|
|
ad684bfdfc | ||
|
|
ccc1de2595 | ||
|
|
16b37b1061 | ||
|
|
10a39fd52c | ||
|
|
97385d3310 | ||
|
|
8a2c0c320e | ||
|
|
cea9145400 | ||
|
|
cf5f1c9c6e | ||
|
|
1c69eb4ce4 | ||
|
|
918971cab8 | ||
|
|
c1a534bee2 | ||
|
|
41f5dfaffc | ||
|
|
c60fffc34a | ||
|
|
d05aceb3f3 | ||
|
|
9dbf0bbbcd | ||
|
|
cb2c5aae48 | ||
|
|
10af0102f4 | ||
|
|
a2663fc8dd | ||
|
|
fb5e6e927f | ||
|
|
4bbe6ed195 | ||
|
|
69fa34b3c5 | ||
|
|
b49de3eccb | ||
|
|
b1f51c30a6 | ||
|
|
63a049d336 | ||
|
|
05fdf963af | ||
|
|
9b9b79ed58 | ||
|
|
97cf2475cf | ||
|
|
e363ee0994 | ||
|
|
473960a394 | ||
|
|
5ff925d583 | ||
|
|
ef60909d4c | ||
|
|
97b22438fa | ||
|
|
3eba79d6c5 | ||
|
|
b747ac27cb | ||
|
|
fcf7b1a025 | ||
|
|
f02735de81 | ||
|
|
4c15575194 | ||
|
|
bb6e130bfe | ||
|
|
e4526f4725 | ||
|
|
ec8d9a3714 | ||
|
|
96f4c944c1 | ||
|
|
cc66524e1f | ||
|
|
ea07c9dcd8 | ||
|
|
7c5c27f556 | ||
|
|
7a94b2dbd6 | ||
|
|
b8cfc9630f | ||
|
|
563239147f | ||
|
|
70d701db5b | ||
|
|
683f8ebdc7 | ||
|
|
b20d963f56 | ||
|
|
df653f9f78 | ||
|
|
7614955591 | ||
|
|
8a1b37e8ec | ||
|
|
8eadfe3d79 | ||
|
|
b9120ddce4 | ||
|
|
4bf840abf3 | ||
|
|
90dbf440c7 | ||
|
|
e46f920929 | ||
|
|
6ebed79500 | ||
|
|
9357a37509 | ||
|
|
f02676f264 | ||
|
|
cac8e89670 | ||
|
|
9e9fde2e8f | ||
|
|
a0b62b1392 | ||
|
|
db1a788082 | ||
|
|
5a93299fc3 | ||
|
|
f84ac09e31 | ||
|
|
c1cdb365f1 | ||
|
|
45e8e20eae | ||
|
|
0eefcd7d4f | ||
|
|
4ce3ebf1fd | ||
|
|
d454389356 | ||
|
|
65bc1062f5 | ||
|
|
6e347619f4 | ||
|
|
980aedf314 | ||
|
|
3a608f3fde | ||
|
|
4946ebf154 | ||
|
|
361700734f | ||
|
|
2d606e6836 | ||
|
|
1dfb6824a3 | ||
|
|
aba8d8f871 | ||
|
|
3788ec3f9a | ||
|
|
3b56ed3cfd | ||
|
|
62c4711f8e | ||
|
|
1b08152594 | ||
|
|
292a71e8bb | ||
|
|
ec21e81f19 | ||
|
|
5e18932429 | ||
|
|
2da5b2191f | ||
|
|
4369f2742b | ||
|
|
424ea22334 | ||
|
|
d22b93caf4 | ||
|
|
88d2216780 | ||
|
|
9e41d679c4 | ||
|
|
30e32c07b9 | ||
|
|
03a464efd9 | ||
|
|
bd485d37c9 | ||
|
|
e27f82b610 | ||
|
|
69d00a50a6 | ||
|
|
55afa4f2ea | ||
|
|
c625be0a4a | ||
|
|
4bd8b96dc9 | ||
|
|
46d5035437 | ||
|
|
ca87312c49 | ||
|
|
b3e791b4d4 | ||
|
|
4d0389db7b | ||
|
|
54866ecef5 | ||
|
|
9147929204 | ||
|
|
828a4d7a60 | ||
|
|
062de22fde | ||
|
|
91be7eb3dc | ||
|
|
0368d83484 | ||
|
|
532ddf1d9a | ||
|
|
8824742a4c | ||
|
|
dd3055836a | ||
|
|
9a5e9c5e69 | ||
|
|
ed42c3e489 | ||
|
|
1ceb587875 | ||
|
|
117a0b9849 | ||
|
|
af31e2e079 | ||
|
|
52c1ba67e3 | ||
|
|
b442f005a9 | ||
|
|
9557c46dcf | ||
|
|
e233a14eec | ||
|
|
60093e81b0 | ||
|
|
f8d012ac56 | ||
|
|
1fe2877a14 | ||
|
|
db4446b023 | ||
|
|
556de70f20 | ||
|
|
6026b5996c | ||
|
|
1d6de8e0a8 | ||
|
|
902f228565 | ||
|
|
e8a7c0257e | ||
|
|
53d251bed5 | ||
|
|
c8d4e03ead | ||
|
|
a4ba43f77b | ||
|
|
4ddb7dea28 | ||
|
|
997c5103a7 | ||
|
|
c8b0686c2f | ||
|
|
2365c34ce3 | ||
|
|
400f27ef55 | ||
|
|
cdedbaa1e9 | ||
|
|
16540936db | ||
|
|
adbeaffa39 | ||
|
|
c173beac43 | ||
|
|
e9e3906357 | ||
|
|
0d5e1ba1d3 | ||
|
|
83ed22f64e | ||
|
|
c573003167 | ||
|
|
6acb695660 | ||
|
|
cb87a32775 | ||
|
|
5d4ef568a1 | ||
|
|
ebda5cb2bc | ||
|
|
3710d43cfc | ||
|
|
9981ae4d5f | ||
|
|
56295371a4 | ||
|
|
9caea58a3c | ||
|
|
bd923806be | ||
|
|
6fc307cf7b | ||
|
|
a0a9e92fc1 | ||
|
|
2d5f558b54 | ||
|
|
ffdff5490a | ||
|
|
ea20769242 | ||
|
|
335f76665b | ||
|
|
1c410638da | ||
|
|
b8afb04de8 | ||
|
|
ee2c4f339a | ||
|
|
62a9c460e4 | ||
|
|
ba0e51ad02 | ||
|
|
5aa719daf5 | ||
|
|
a99014ad26 | ||
|
|
7ac570f4e9 | ||
|
|
6280ca5d36 | ||
|
|
96286844fb | ||
|
|
b39b6d9715 | ||
|
|
ff7b78bb6a | ||
|
|
728d634672 | ||
|
|
f500ea46d4 | ||
|
|
0cdfe3d57b | ||
|
|
a1d38d6633 | ||
|
|
7c906c8b89 | ||
|
|
bb7594f6c5 | ||
|
|
91045b918f | ||
|
|
7644b1693e | ||
|
|
95a5b2eea2 | ||
|
|
c75cd39282 | ||
|
|
76ad8258f5 | ||
|
|
b81810bb02 | ||
|
|
c1f47cdc44 | ||
|
|
27cfdb6ac4 | ||
|
|
64d6691e61 | ||
|
|
95b3ca839a | ||
|
|
9bf964b918 | ||
|
|
dcf0a7ccc9 | ||
|
|
dd9a3c8b7e | ||
|
|
3f8bf01b20 | ||
|
|
5a9b1a0a33 | ||
|
|
e342e68737 | ||
|
|
0ab37d9538 | ||
|
|
08ff08c4e6 | ||
|
|
02d488c458 | ||
|
|
267e891a9e | ||
|
|
af85a2cf25 | ||
|
|
536ca3ec34 | ||
|
|
ec28f5c494 | ||
|
|
4daada1142 | ||
|
|
a221e0cbee | ||
|
|
34f3220d1a | ||
|
|
e93c49fb8c | ||
|
|
aa3f671d86 | ||
|
|
515cc6b829 | ||
|
|
8d174225f7 | ||
|
|
3cd0b78edb | ||
|
|
5140564fc5 | ||
|
|
b465c9f9d5 | ||
|
|
4599dcd988 | ||
|
|
d115b4216c | ||
|
|
14bdfd3321 | ||
|
|
3dd857aa9f | ||
|
|
e7d14c028b | ||
|
|
c99d34aecc | ||
|
|
0207a17afa | ||
|
|
c03a7e2f90 | ||
|
|
73b049f361 | ||
|
|
1a5a974c06 | ||
|
|
5695fe34f0 | ||
|
|
9354417f76 | ||
|
|
6e7ad1d7b8 | ||
|
|
32d7efc55d | ||
|
|
fb93e83f96 | ||
|
|
fb03c15223 | ||
|
|
7185d4d8c1 | ||
|
|
ddbddf6c2f | ||
|
|
29c1874bc1 | ||
|
|
242dca7365 | ||
|
|
5ddd7f0a6f | ||
|
|
37acdc0cc6 | ||
|
|
380c78b758 | ||
|
|
06237a48c4 | ||
|
|
f6f82a1be1 | ||
|
|
6fafba0772 | ||
|
|
2cb2484cd0 | ||
|
|
8fa903f17a | ||
|
|
6d61f9d0ef | ||
|
|
7a85625743 | ||
|
|
21e2e5e2af | ||
|
|
5188b64704 | ||
|
|
128ff10ade | ||
|
|
a98f45f875 | ||
|
|
c02b79f0c3 | ||
|
|
8d6a19aeb2 | ||
|
|
fa08472392 | ||
|
|
22d872c7e5 | ||
|
|
c5a7c8d8f9 | ||
|
|
e08fdc42cf | ||
|
|
30ff19b271 | ||
|
|
42ff4aa0d8 | ||
|
|
fcd960149d | ||
|
|
f6dc70dd9b | ||
|
|
f5368f988e | ||
|
|
c86a4467d3 | ||
|
|
9c41f48786 | ||
|
|
9202be6fba | ||
|
|
73f2da5087 | ||
|
|
32823d8288 | ||
|
|
7e4c533357 | ||
|
|
d1e73c8f79 | ||
|
|
3cf2ca4347 | ||
|
|
a058a39976 | ||
|
|
c75eab9e73 | ||
|
|
d01750601b | ||
|
|
2b21c8ec8d | ||
|
|
b1b295f700 | ||
|
|
07afe71f37 | ||
|
|
5347bd03f1 | ||
|
|
d964970c9e | ||
|
|
bfcda54fa2 | ||
|
|
411ef4549e | ||
|
|
ca18d164e3 | ||
|
|
f6c1ae20c9 | ||
|
|
fdf7d5661d | ||
|
|
cabe9603c2 | ||
|
|
abca14d9ae | ||
|
|
ce0180a23a | ||
|
|
96de4348fa | ||
|
|
7aef84ae90 | ||
|
|
1bfd5bc20a | ||
|
|
7c8ecbe126 | ||
|
|
eda7e27394 | ||
|
|
b6947c5f25 | ||
|
|
792b313891 | ||
|
|
a56030b6c1 | ||
|
|
9291d38bb5 | ||
|
|
33271c8386 | ||
|
|
1a2d11560f | ||
|
|
fabc3a5db1 | ||
|
|
25f16b5315 | ||
|
|
c4ffbf4b2b | ||
|
|
24531b85c6 | ||
|
|
b8ca2a1e97 | ||
|
|
fe4713ad88 | ||
|
|
43c97bd8cc | ||
|
|
71fb544eaa | ||
|
|
2323b07d07 | ||
|
|
291e7ebb57 | ||
|
|
7794090bfe | ||
|
|
2f06fe4d2a | ||
|
|
b41e89586c | ||
|
|
bd13035a17 | ||
|
|
c6c54ad98d | ||
|
|
a9ec60e4b9 | ||
|
|
1deee02eff | ||
|
|
b27f2a59f4 | ||
|
|
d7a38b5350 | ||
|
|
db02948e08 | ||
|
|
7b1351daa3 | ||
|
|
a317c223c4 | ||
|
|
ffe118c45a | ||
|
|
e53a175740 | ||
|
|
2b05b92de8 | ||
|
|
80ba8c2992 | ||
|
|
18ca3bb1c1 | ||
|
|
851053e4ec | ||
|
|
5f1566db49 | ||
|
|
045f5b4578 | ||
|
|
a63b8ca9ca | ||
|
|
1425a46c00 | ||
|
|
1268d76ae8 | ||
|
|
0f2df1b46c | ||
|
|
f90d871fb6 | ||
|
|
019211cb80 | ||
|
|
bc9e3427a0 | ||
|
|
54dabd979b | ||
|
|
180c508d83 | ||
|
|
0001e35400 | ||
|
|
3ae5774404 | ||
|
|
bce7bd7fa7 | ||
|
|
ec429af686 | ||
|
|
e11aa24b7d | ||
|
|
c5ecf80b65 | ||
|
|
fc739f242d | ||
|
|
3f266a188a | ||
|
|
e1bcd86e5e | ||
|
|
b16fc6b19a | ||
|
|
ad2b332fa0 | ||
|
|
22e2b4864f | ||
|
|
7115c44cb8 | ||
|
|
d33871db98 | ||
|
|
9ced73cf1d | ||
|
|
0d9cb51021 | ||
|
|
3448db8e67 | ||
|
|
dec6afa0f1 | ||
|
|
755a860011 | ||
|
|
3173d75dad | ||
|
|
f52c981316 | ||
|
|
d16ad52a56 | ||
|
|
f02fe585c8 | ||
|
|
bb5a613ad2 | ||
|
|
15e5b1a2f0 | ||
|
|
863140fec9 | ||
|
|
16540d32ae | ||
|
|
6801ed07d8 | ||
|
|
783d049668 | ||
|
|
f62c8f6489 | ||
|
|
33ebb0ce84 | ||
|
|
3d1dfadc18 | ||
|
|
9f2e135e80 | ||
|
|
c404db4a08 | ||
|
|
5713ec1365 | ||
|
|
bd6b719c32 | ||
|
|
30ffb3492a | ||
|
|
23f34e0f80 | ||
|
|
d1ac7981dd | ||
|
|
28d320e5ac | ||
|
|
827ea1808a | ||
|
|
18d97c0609 | ||
|
|
094646d5ba | ||
|
|
2b0943b57d | ||
|
|
c6f3bda227 | ||
|
|
8e9a190fef | ||
|
|
db21f663fe | ||
|
|
554640b103 | ||
|
|
ba1a28f47a | ||
|
|
c58c6157e9 | ||
|
|
056ffa300a | ||
|
|
d450d48e99 | ||
|
|
0aa87fed63 | ||
|
|
70cc551bba | ||
|
|
78cf7e0622 | ||
|
|
b44f82c13c | ||
|
|
8fe14215e1 | ||
|
|
b87d3fb481 | ||
|
|
88cfa5ef2a | ||
|
|
913d6331c6 | ||
|
|
a1a6cd0d07 | ||
|
|
88e554fb7e | ||
|
|
6394953a17 | ||
|
|
c7019930fd | ||
|
|
1b15818ab6 | ||
|
|
a48b008f99 | ||
|
|
7ec816bf73 | ||
|
|
fd16eb767e | ||
|
|
90bcc9b08b | ||
|
|
3d6be9a383 | ||
|
|
d575d8053f | ||
|
|
50497b3c1f | ||
|
|
49b40a1cf3 | ||
|
|
36518ecbeb | ||
|
|
28e773f9a7 | ||
|
|
5247981fa8 | ||
|
|
ea6714e89b | ||
|
|
5a63fddf02 | ||
|
|
510e8d70d7 | ||
|
|
108aeb0ee1 | ||
|
|
46610d59ce | ||
|
|
b5603d6956 | ||
|
|
ccb976e233 | ||
|
|
f0efd80e44 | ||
|
|
d10774b3ae | ||
|
|
b7208616cd | ||
|
|
cdaf4f651b | ||
|
|
ce979d2945 | ||
|
|
a451796562 | ||
|
|
5aa27fc562 | ||
|
|
dc23087847 | ||
|
|
28084cf99a | ||
|
|
5d439bdc30 | ||
|
|
3f4330d9b1 | ||
|
|
b9a1056503 | ||
|
|
98353bc18a | ||
|
|
32a9d36934 | ||
|
|
295084976b | ||
|
|
d053900032 | ||
|
|
c7943b8977 | ||
|
|
6aa5edc7ff | ||
|
|
71ec15190b | ||
|
|
3a66f5e330 | ||
|
|
ea9ae52e10 | ||
|
|
ec0d7e6ecf | ||
|
|
8d5c82c531 | ||
|
|
3124fd90b9 | ||
|
|
255cb5e1de | ||
|
|
a2a011f007 | ||
|
|
1da32b81cf | ||
|
|
b1e5ed4018 | ||
|
|
5d2967abdf | ||
|
|
3ea3d1a5f8 | ||
|
|
6a8423bd88 | ||
|
|
7798e49d8a | ||
|
|
fd0f48f028 | ||
|
|
418e753684 | ||
|
|
03eb760cd7 | ||
|
|
90098648df | ||
|
|
00f1ab4393 | ||
|
|
7119d53a86 | ||
|
|
2afb8a5a96 | ||
|
|
efcc2cf249 | ||
|
|
bd5db6b48e | ||
|
|
44d81b897a | ||
|
|
5623db50fa | ||
|
|
647ac1f84b | ||
|
|
e24b644a09 | ||
|
|
c3a33c3795 | ||
|
|
4e4f515ef1 | ||
|
|
3f5bc60406 | ||
|
|
66fa7a1ea9 | ||
|
|
afa4d11c88 | ||
|
|
0cfb9681e6 | ||
|
|
321b9c5999 | ||
|
|
3d9024561c | ||
|
|
1d5e4d7090 | ||
|
|
484f53224d | ||
|
|
b49b8b4778 | ||
|
|
a03994d587 | ||
|
|
3c0b58322a | ||
|
|
6dd9af61fd | ||
|
|
48a4277ea2 | ||
|
|
7731b96bcf | ||
|
|
54a6dee35d | ||
|
|
efbe8bd857 | ||
|
|
5ae3d5afdc | ||
|
|
dca071cb6f | ||
|
|
238c04ff68 | ||
|
|
1702f9cb19 | ||
|
|
76d619fb34 | ||
|
|
66dd7d4337 | ||
|
|
344def2b3d | ||
|
|
40c09a5d80 | ||
|
|
0b0fddb886 | ||
|
|
d9f83927e1 | ||
|
|
d8d85815ad | ||
|
|
4d569d3f7d | ||
|
|
db699de008 | ||
|
|
10aa5d4c8c | ||
|
|
06eaf803b5 | ||
|
|
dc448f0033 | ||
|
|
63a5e953ba | ||
|
|
0f725d0d68 | ||
|
|
d61a4529f3 | ||
|
|
aadde5a791 | ||
|
|
ca5efcc032 | ||
|
|
a13c77d836 | ||
|
|
85edef0802 | ||
|
|
b3841e19d2 | ||
|
|
8d40ec9c1d | ||
|
|
eaadd12c0e | ||
|
|
1b780e3178 | ||
|
|
ae597dac7f | ||
|
|
83cd22077e | ||
|
|
6cd25ff346 | ||
|
|
1a1bb7abd7 | ||
|
|
66aeff12fc | ||
|
|
d5cdcf9285 | ||
|
|
48d2ea7424 | ||
|
|
4222430988 | ||
|
|
e95809a442 | ||
|
|
85ee2ca272 | ||
|
|
45dd57e49e | ||
|
|
e68ab9c746 | ||
|
|
c98aa8e5af | ||
|
|
89c4e562ee | ||
|
|
72f5d51ca4 | ||
|
|
3cab47a13d | ||
|
|
19e7871355 | ||
|
|
f99d5d6b34 | ||
|
|
90ed2b0c51 | ||
|
|
64c7fdf057 | ||
|
|
aa2ff6e3f2 | ||
|
|
5b19b606c4 | ||
|
|
700a639c8e | ||
|
|
ab987cd740 | ||
|
|
7cdef717d0 | ||
|
|
626baf5705 | ||
|
|
2841fbbf61 | ||
|
|
b142fa9f7e | ||
|
|
6ab5c9d116 | ||
|
|
80a77b256e | ||
|
|
de5546c713 | ||
|
|
1f07dc517e | ||
|
|
3841025ffc | ||
|
|
f7c364d34b | ||
|
|
669cb6547d | ||
|
|
9d4e854723 | ||
|
|
a9f4585a36 | ||
|
|
deaee3f6a8 | ||
|
|
7a35973bbf | ||
|
|
a0b0584be8 | ||
|
|
66d9ead746 | ||
|
|
8945dffb0c | ||
|
|
101aef7474 | ||
|
|
d026b39988 | ||
|
|
2b99fd0ba6 | ||
|
|
4ab78a096b | ||
|
|
9c5ba437de | ||
|
|
b41490a6f6 | ||
|
|
563934dcac | ||
|
|
e8702e757e | ||
|
|
f4595ced2d | ||
|
|
6cc29e4527 | ||
|
|
485719ca1f | ||
|
|
940024823e | ||
|
|
187140f083 | ||
|
|
89cbe815a7 | ||
|
|
3d28d1c2a7 | ||
|
|
8a638c6115 | ||
|
|
a71cd3058a | ||
|
|
720ce51dcd | ||
|
|
727993dd45 | ||
|
|
40a82aa2dd | ||
|
|
5e12803efa | ||
|
|
8ffa5bbbcb | ||
|
|
f502708f7a | ||
|
|
ec82c6b8af | ||
|
|
417c94470f | ||
|
|
396f4449d8 | ||
|
|
27e0f08ee9 | ||
|
|
c0ad842851 | ||
|
|
2348709622 | ||
|
|
5f727f6e6e | ||
|
|
d42dfeb268 | ||
|
|
610cef4bb9 | ||
|
|
812e2535c0 | ||
|
|
2ad2a6c77f | ||
|
|
f99a1406bb | ||
|
|
662261c590 | ||
|
|
fd1495effe | ||
|
|
6150be51b1 | ||
|
|
0c2d0178db | ||
|
|
0b4df40f60 | ||
|
|
b7ac9b8757 | ||
|
|
5e88150ee3 | ||
|
|
309b051dbb | ||
|
|
759de1e911 | ||
|
|
6a1a44b493 | ||
|
|
828aa493a6 | ||
|
|
6c5227b6b3 | ||
|
|
3ea23a97ed | ||
|
|
f7b5922fd9 | ||
|
|
8bee93c236 | ||
|
|
8e6e7ed4cc | ||
|
|
2c156e850a | ||
|
|
6fff0f5eee | ||
|
|
29201be7f0 | ||
|
|
f667c6224f | ||
|
|
ab6f0fd62d | ||
|
|
da23a195ab | ||
|
|
b1ec80793c | ||
|
|
55cd08865f | ||
|
|
4efd08a66f | ||
|
|
ded6b0579d | ||
|
|
534e8a629e | ||
|
|
b42436909f | ||
|
|
b30c1af78a | ||
|
|
d984652ab7 | ||
|
|
440885cee2 | ||
|
|
547ad1e9dc | ||
|
|
e7e875bb7b | ||
|
|
c41f9972c3 | ||
|
|
be76f61c96 | ||
|
|
ffca891f57 | ||
|
|
40d3ff40f6 | ||
|
|
b8b2eadf2e | ||
|
|
ec16dc8cec | ||
|
|
e8a2b3b10f | ||
|
|
bcb6e477cf | ||
|
|
823dbdfcc1 | ||
|
|
9cfffa8a78 | ||
|
|
862543a12c | ||
|
|
6e20017723 | ||
|
|
e7fd8ee0b7 | ||
|
|
554fe30288 | ||
|
|
3fbd80728d | ||
|
|
1fb81bec39 | ||
|
|
2e0e559c59 | ||
|
|
68f63dc89b | ||
|
|
d8417955b3 | ||
|
|
f4cc813740 | ||
|
|
39f5c04f94 | ||
|
|
f1fcb886a0 | ||
|
|
7b373ecb71 | ||
|
|
c9fc88e8de | ||
|
|
92ade120af | ||
|
|
613252f210 | ||
|
|
db99f6f34a | ||
|
|
768dbf5bd3 | ||
|
|
305e7906b9 | ||
|
|
0fc03982c8 | ||
|
|
dea823f575 | ||
|
|
44d0b21eb9 | ||
|
|
58cff21ced | ||
|
|
78cc80714d | ||
|
|
67ad20ce5a | ||
|
|
db116d0a07 | ||
|
|
5f7befcfbd | ||
|
|
dbcbc5eb95 | ||
|
|
2be3037ed3 | ||
|
|
eb1a3da363 | ||
|
|
fd9b100423 | ||
|
|
3c8c25d680 | ||
|
|
a0e26dfc2d | ||
|
|
49f7d6bab1 | ||
|
|
358ec48d8a | ||
|
|
afbbfd7e46 | ||
|
|
45391c7cc8 | ||
|
|
2fc2275495 | ||
|
|
b6bba49d47 | ||
|
|
887f02f859 | ||
|
|
a5ef1c8e3b | ||
|
|
cac6633bf7 | ||
|
|
738059f56a | ||
|
|
ef7b1c1454 | ||
|
|
cf30f1b255 | ||
|
|
4c4462987e | ||
|
|
d21af5b277 | ||
|
|
a72cdcfd90 | ||
|
|
0e3f7a0706 | ||
|
|
15622d2e92 | ||
|
|
554bb815c9 | ||
|
|
8c14e64909 | ||
|
|
b1d3e8faaa | ||
|
|
9784c198e3 | ||
|
|
642a9c5c94 | ||
|
|
c83bdbd14e | ||
|
|
6880727e4f | ||
|
|
db2ef362af | ||
|
|
233f0cfd0d | ||
|
|
3340398cd7 | ||
|
|
d2d07a3fc1 | ||
|
|
1b9e7daca5 | ||
|
|
68e8cd64f1 | ||
|
|
3b053b5d60 | ||
|
|
74284193dc | ||
|
|
c9a7b2394d | ||
|
|
6d79d3352c | ||
|
|
508b3e1db7 | ||
|
|
34a71b5e2d | ||
|
|
49fb0c90ad | ||
|
|
82bb245d43 | ||
|
|
fa480b0bc3 | ||
|
|
05d351cd68 | ||
|
|
60b6fd11f9 | ||
|
|
f5003bb07a | ||
|
|
3bc94b2794 | ||
|
|
8960f91c7b | ||
|
|
b52cf468af | ||
|
|
4031b49d77 | ||
|
|
7afb5072c7 | ||
|
|
0a2f810264 | ||
|
|
afcbfccdc4 | ||
|
|
037215da47 | ||
|
|
ac736c6deb | ||
|
|
9ada6555e4 | ||
|
|
0cd5e0869d | ||
|
|
e478e836a2 | ||
|
|
369681d76d | ||
|
|
d8cf6810b8 | ||
|
|
b6a00269af | ||
|
|
8f267a19c4 | ||
|
|
59d9645f33 | ||
|
|
ab985d90f7 | ||
|
|
1894c4b855 | ||
|
|
c2109e9744 | ||
|
|
7755a58bb3 | ||
|
|
1b0890ae6e | ||
|
|
78540624ae | ||
|
|
1db243e236 | ||
|
|
9cca0dcce8 | ||
|
|
c9f05b0299 | ||
|
|
9224e0c3f2 | ||
|
|
8fb24e5315 | ||
|
|
92557c8225 | ||
|
|
33e6975ac4 | ||
|
|
e02309bc44 | ||
|
|
a6269d77ae | ||
|
|
ad6ed03f0d | ||
|
|
e3a9044164 | ||
|
|
9a781c0f2b | ||
|
|
00eb0d8a85 | ||
|
|
722fb1fb91 | ||
|
|
9182e7a882 | ||
|
|
49c82bcd65 | ||
|
|
87a1a861b8 | ||
|
|
c17e191815 | ||
|
|
dbf7a3f72d | ||
|
|
fc3efaed3d | ||
|
|
314278ac69 | ||
|
|
7356c122de | ||
|
|
664a0bc812 | ||
|
|
bee9f00da8 | ||
|
|
c3d1d959b2 | ||
|
|
7bb465df07 | ||
|
|
25ca7fe6fe | ||
|
|
566f030902 | ||
|
|
37e3f95538 | ||
|
|
830b6f120d | ||
|
|
addb7dfd3a | ||
|
|
87d2b22446 | ||
|
|
a1559c5802 | ||
|
|
9453009de6 | ||
|
|
199aceefc1 | ||
|
|
f0aca3374f | ||
|
|
bb326e4030 | ||
|
|
23c46f150f | ||
|
|
2d990499d2 | ||
|
|
a15bed17d8 | ||
|
|
fd808a85df | ||
|
|
931eefd260 | ||
|
|
1d4d52c9c9 | ||
|
|
97bcdfd73a | ||
|
|
ebcd7a16a9 | ||
|
|
7002dcec0e | ||
|
|
d29d543e95 | ||
|
|
653b8826d4 | ||
|
|
57072adc57 | ||
|
|
d02035a1a1 | ||
|
|
7265736ce2 | ||
|
|
0534080b83 | ||
|
|
edfc09c755 | ||
|
|
b2c2762f06 | ||
|
|
c90a0592dd | ||
|
|
b85baefad9 | ||
|
|
f8fce42df7 | ||
|
|
1e6fa4159a | ||
|
|
a8bc251a94 | ||
|
|
d8ba67e2e3 | ||
|
|
141bf7f0a3 | ||
|
|
b464d5a5b7 | ||
|
|
1b496525b1 | ||
|
|
a70524bb74 | ||
|
|
fea2dec9f7 | ||
|
|
dd99652087 | ||
|
|
f42984612f | ||
|
|
22dca58c9a | ||
|
|
450101be8e | ||
|
|
fe14686586 | ||
|
|
0c3c90af6a | ||
|
|
3a9c8d9c0f | ||
|
|
c16f051e5b | ||
|
|
ec1608ba19 | ||
|
|
74fb16a758 | ||
|
|
6cf7b7b606 | ||
|
|
6dcec8a176 | ||
|
|
9c7786d06b | ||
|
|
52a796ef92 | ||
|
|
ae2eefc6bf | ||
|
|
148e099f58 | ||
|
|
d7f27b8ae7 | ||
|
|
0351f37e67 | ||
|
|
69bac57058 | ||
|
|
cbcac3af70 | ||
|
|
2b030a5e87 | ||
|
|
8eb15627bf | ||
|
|
9a5e8172d6 | ||
|
|
ae8bf7b60d | ||
|
|
c292b896e3 | ||
|
|
f35b7283c0 | ||
|
|
b746581d5a | ||
|
|
d93a8d41d2 | ||
|
|
e27466b8a6 | ||
|
|
90ca080b1e | ||
|
|
9a89a9beac | ||
|
|
0f94ac864b | ||
|
|
f6b345632f | ||
|
|
5db296c542 | ||
|
|
eb45052021 | ||
|
|
43cee04283 | ||
|
|
5cab46f2a1 | ||
|
|
08443a452d | ||
|
|
dcb934fb45 | ||
|
|
68c80d619d | ||
|
|
fa2d2ba91c | ||
|
|
58a4874632 | ||
|
|
a973276ad6 | ||
|
|
515e7f3dab | ||
|
|
07486b27a7 | ||
|
|
358301338c | ||
|
|
6ebac86632 | ||
|
|
bc176bfbf2 | ||
|
|
e46141adf9 | ||
|
|
61c33a7038 | ||
|
|
83cf74b71b | ||
|
|
0038f9d43e | ||
|
|
8e24ce9f30 | ||
|
|
529026f0f4 | ||
|
|
5b0ac94211 | ||
|
|
5ab33643c8 | ||
|
|
88e72ff62a | ||
|
|
2df3282840 | ||
|
|
171f94b9ea | ||
|
|
feb27b919b | ||
|
|
1641b10e79 | ||
|
|
98ff3b0677 | ||
|
|
15923fceaf | ||
|
|
0553e5b50e | ||
|
|
f83803ffad | ||
|
|
d5291b57ab | ||
|
|
3709dcedd2 | ||
|
|
2b83928cab | ||
|
|
e9dcabae7d | ||
|
|
4845237eba | ||
|
|
eb2c2ea0a0 | ||
|
|
be7390424a | ||
|
|
1ebc4dfad2 | ||
|
|
341a35410d | ||
|
|
7250e27ba1 | ||
|
|
d6c34a0142 | ||
|
|
00377325f0 | ||
|
|
34edf3e724 | ||
|
|
31a695f73f | ||
|
|
c6a22d237b | ||
|
|
9cb7fd0a00 | ||
|
|
f7bd69fad4 | ||
|
|
178925cd56 | ||
|
|
de88f3bde9 | ||
|
|
9c98db6fa6 | ||
|
|
e69a22748f | ||
|
|
a40b55d8d4 | ||
|
|
b5809db9eb | ||
|
|
fa9c91de83 | ||
|
|
ceb48bd472 | ||
|
|
9861a33c72 | ||
|
|
ddb61d75ca | ||
|
|
edeb237777 | ||
|
|
e5f9358cf9 | ||
|
|
a2d70980d8 | ||
|
|
5daf7e5a9b | ||
|
|
6b606aaa24 | ||
|
|
a001a10bac | ||
|
|
8860c9a1dd | ||
|
|
5af9fe0a3e | ||
|
|
e821955c97 | ||
|
|
3884878efb | ||
|
|
56716e7a20 | ||
|
|
cd58e034ca | ||
|
|
0ad9e3b707 | ||
|
|
9f8134a51b | ||
|
|
94096d0276 | ||
|
|
ad0b9a08c6 | ||
|
|
fa501eff6d | ||
|
|
6e8fbf5f8e | ||
|
|
869b430ba6 | ||
|
|
d7e100ac71 | ||
|
|
617aa3627a | ||
|
|
266208c13d | ||
|
|
632493f654 | ||
|
|
f9afeb51f8 | ||
|
|
eb33b3fd5c | ||
|
|
43fc70695d | ||
|
|
093ca1b506 | ||
|
|
d01bb00ca2 | ||
|
|
fb52fac9cc | ||
|
|
8a5c79d05b | ||
|
|
ce968db278 | ||
|
|
d241c9f7cb | ||
|
|
ecba8d44a9 | ||
|
|
ba385cf5b1 | ||
|
|
ab88eca645 | ||
|
|
ddf4465c00 | ||
|
|
1c3f113122 | ||
|
|
3ff4176e1f | ||
|
|
a3dfc9f621 | ||
|
|
222364e040 | ||
|
|
e5568aaa82 | ||
|
|
47dcc8badd | ||
|
|
6a0198aff5 | ||
|
|
b7c7a3468a | ||
|
|
118424d686 | ||
|
|
4e0cdaddf7 | ||
|
|
249f13f4bc | ||
|
|
030203effd | ||
|
|
334e150638 | ||
|
|
308f790f3c | ||
|
|
d47dbc604e | ||
|
|
96d193f7dd | ||
|
|
3e94ca4f45 | ||
|
|
d16033a417 | ||
|
|
cab9afee44 | ||
|
|
1041e42f8d | ||
|
|
6ed30dfbfe | ||
|
|
329f22f72c | ||
|
|
8ac8164b06 | ||
|
|
4e719c5858 | ||
|
|
6577c656be | ||
|
|
f76ec47fe3 | ||
|
|
50cd630127 | ||
|
|
7085e05388 | ||
|
|
3962a80192 | ||
|
|
4079288a51 | ||
|
|
6dfd16b62a | ||
|
|
4067c89260 | ||
|
|
dcce7fc39a | ||
|
|
0a95246cb0 | ||
|
|
eecaf85df6 | ||
|
|
13061671f8 | ||
|
|
c2900480d7 | ||
|
|
fb65fdf25e | ||
|
|
92e1213fe2 | ||
|
|
d21b3b4b8a | ||
|
|
c1945c9429 | ||
|
|
1d56e253d7 | ||
|
|
a3df5c465e | ||
|
|
5491456985 | ||
|
|
ca80e47f3d | ||
|
|
929a5289e2 | ||
|
|
814f5d9448 | ||
|
|
f5e6fb6fbd | ||
|
|
423f305fd0 | ||
|
|
9cc6c4ee3e | ||
|
|
ccb0d25939 | ||
|
|
8d5855c93a | ||
|
|
9724bfb20e | ||
|
|
611aa6391a | ||
|
|
001ca98855 | ||
|
|
0e84b4b269 | ||
|
|
3c51815d78 | ||
|
|
9969cd4c8c | ||
|
|
4ea9b1182f | ||
|
|
257501ce37 | ||
|
|
eb802838ee | ||
|
|
c309588ae4 | ||
|
|
e527f49d73 | ||
|
|
2bbe361783 | ||
|
|
6c7de5a0b0 | ||
|
|
113268b12a | ||
|
|
96d4de8277 | ||
|
|
10d5b48643 | ||
|
|
b3a8047ba3 | ||
|
|
9bd008021d | ||
|
|
2915dc75d3 | ||
|
|
e4d0e03078 | ||
|
|
3785a4b5db | ||
|
|
f7f9e23246 | ||
|
|
945437e04d | ||
|
|
4d25413229 | ||
|
|
dacff1fc09 | ||
|
|
4262511f91 | ||
|
|
57b7018a83 | ||
|
|
d2999307d8 | ||
|
|
a528df0b2e | ||
|
|
c4c9024ee0 | ||
|
|
6bdde2379e | ||
|
|
dac059e85e | ||
|
|
a3d20386fc | ||
|
|
9c3e4cf03a | ||
|
|
0630f4e298 | ||
|
|
dde46a4ee4 | ||
|
|
3b0d1ab410 | ||
|
|
3ae625077f | ||
|
|
e36a3f9e33 | ||
|
|
7e5726a247 | ||
|
|
8ec67ea190 | ||
|
|
9d793348e2 | ||
|
|
715daf6824 | ||
|
|
7db563066b | ||
|
|
b9fd6e5c68 | ||
|
|
68f2f0c400 | ||
|
|
c400743bc3 | ||
|
|
e1fe556abb | ||
|
|
ffe3faeb5f | ||
|
|
2f4f7711dc | ||
|
|
ecc6de6a02 | ||
|
|
8d94f99e4e | ||
|
|
1fedbd105e | ||
|
|
68e1b496f1 | ||
|
|
3283ce144c | ||
|
|
3843406ba9 | ||
|
|
fbb6efa5cf | ||
|
|
3812548447 | ||
|
|
a16e51ad7b | ||
|
|
a709e7ba56 | ||
|
|
f09ecfd458 | ||
|
|
c31193b45c | ||
|
|
1ef131354f | ||
|
|
70fd93ac8f | ||
|
|
e70f8e8c51 | ||
|
|
55349d8e2f | ||
|
|
8d923a5765 | ||
|
|
845effd5ed | ||
|
|
e5afc3ede8 | ||
|
|
22cfb6ddab | ||
|
|
5bcc8f750b | ||
|
|
608e3245e0 | ||
|
|
c7074d5e4d | ||
|
|
7898e4aac3 | ||
|
|
6673743406 | ||
|
|
c10584a068 | ||
|
|
c8e34a9c24 | ||
|
|
3ca4e928da | ||
|
|
8846dbf6a1 | ||
|
|
a90028441a | ||
|
|
5a4148b712 | ||
|
|
2c798909d7 | ||
|
|
b163ddca76 | ||
|
|
1fa2b5ad28 | ||
|
|
9f7f495961 | ||
|
|
0214613182 | ||
|
|
51dfb71063 | ||
|
|
ef8d8bf094 | ||
|
|
e5f974a390 | ||
|
|
56abad1f27 | ||
|
|
d4f1da3018 | ||
|
|
146f9584d9 | ||
|
|
9f2c0d52f1 | ||
|
|
e2c5647c26 | ||
|
|
e038c0afad | ||
|
|
3d1dcd063b | ||
|
|
49a5b3025b | ||
|
|
28f76bc9e3 | ||
|
|
f6867bc2d9 | ||
|
|
19d674b4e5 | ||
|
|
e6bed63344 | ||
|
|
85c721393e | ||
|
|
e57309770c | ||
|
|
911fb4e226 | ||
|
|
9d71ec6821 | ||
|
|
2475e42c16 | ||
|
|
7cb1d74aa8 | ||
|
|
a3f671544d | ||
|
|
7772fdc556 | ||
|
|
80fe196b5a | ||
|
|
e76bcf0ea9 | ||
|
|
f498421515 | ||
|
|
d05eb2aa6e | ||
|
|
d2bbc9adaf | ||
|
|
16ea8462c8 | ||
|
|
2095889eff | ||
|
|
aacfdb62bb | ||
|
|
64af8ae88f | ||
|
|
92a66c0d11 | ||
|
|
d9ef136111 | ||
|
|
def270c298 | ||
|
|
f25e92d443 | ||
|
|
91c88d56eb | ||
|
|
5145272415 | ||
|
|
f3d97a1107 | ||
|
|
360f778ade | ||
|
|
57aff944b3 | ||
|
|
f72056eff6 | ||
|
|
4d15bc4375 | ||
|
|
8939abb370 | ||
|
|
4dcadcf78f | ||
|
|
a1f2442d35 | ||
|
|
fcc9bc51f6 | ||
|
|
aab147ac3c | ||
|
|
560f049825 | ||
|
|
4b4fa2361b | ||
|
|
0b8328a876 | ||
|
|
b2fb74555c | ||
|
|
91c891b32f | ||
|
|
853c065e01 | ||
|
|
bd9c1e525a | ||
|
|
4e073be361 | ||
|
|
3c4336d25c | ||
|
|
990f1b1ea9 | ||
|
|
cd627963e6 | ||
|
|
e4421db04e | ||
|
|
c7b4060fa7 | ||
|
|
549f3f27dc | ||
|
|
7f97301e06 | ||
|
|
4911f3f2f1 | ||
|
|
802bb67324 | ||
|
|
d0a5bf7485 | ||
|
|
d1da96a46c | ||
|
|
2f36ee450c | ||
|
|
daa8707822 | ||
|
|
1c2ad3b331 | ||
|
|
c1ac4f4b8b | ||
|
|
084c22c282 | ||
|
|
084f19c212 | ||
|
|
d7c00f2240 | ||
|
|
fdc895a1db | ||
|
|
0b7eefd862 | ||
|
|
3849108cae | ||
|
|
ac04b183a6 | ||
|
|
b27a976712 | ||
|
|
7b01c196d1 | ||
|
|
4dd04a8a92 | ||
|
|
9be9b05d42 | ||
|
|
711a2573c0 | ||
|
|
e22f45c878 | ||
|
|
a28e32f78b | ||
|
|
228387bf4f | ||
|
|
176bf74d49 | ||
|
|
686ff2bfeb | ||
|
|
ef90f698d5 | ||
|
|
5885464341 | ||
|
|
e7c8b08a43 | ||
|
|
5ff910baa6 | ||
|
|
0d99d9fc9e | ||
|
|
15a3241437 | ||
|
|
b870074e5c | ||
|
|
8675b833ed | ||
|
|
9e5c6cc5be | ||
|
|
bc38d3c8f5 | ||
|
|
a244adfb4b | ||
|
|
b94b473736 | ||
|
|
4f97fb6310 | ||
|
|
c08d5773e8 | ||
|
|
06f6e83c3c | ||
|
|
3f1b2ec50f | ||
|
|
4ec117b943 | ||
|
|
1dc9c59768 | ||
|
|
ac8ac3a07e | ||
|
|
89cabf6006 | ||
|
|
50b9a3d230 | ||
|
|
aaa1bbddd2 | ||
|
|
cccd7c2d33 | ||
|
|
57447cb0cf | ||
|
|
8a7a723289 | ||
|
|
e7b92202f2 | ||
|
|
2b51006819 | ||
|
|
2fbec9ab8f | ||
|
|
4867235e02 | ||
|
|
796c8ff979 | ||
|
|
923857b957 | ||
|
|
071b39f39b | ||
|
|
1233eea690 | ||
|
|
ad3f34b8f1 | ||
|
|
8a06a98b18 | ||
|
|
75cf1f1844 | ||
|
|
0962d0b7fb | ||
|
|
fdce26f7a8 | ||
|
|
4ffb597954 | ||
|
|
d259939263 | ||
|
|
4ce0ab1800 | ||
|
|
2123e485d8 | ||
|
|
a26d8245ab | ||
|
|
8ff38c9669 | ||
|
|
29c15cde1d | ||
|
|
750f593f03 | ||
|
|
daab23eb6e | ||
|
|
40591357b4 | ||
|
|
275363de2b | ||
|
|
9c592383c7 | ||
|
|
462788f6c5 | ||
|
|
5a42b18325 | ||
|
|
23f2f23ac3 | ||
|
|
3446a85bca | ||
|
|
fc33fe8f44 | ||
|
|
4861f67f84 | ||
|
|
039f5c25c5 | ||
|
|
6bbd0c2736 | ||
|
|
d017aacf6d | ||
|
|
f2a8bad6fd | ||
|
|
297b4167e9 | ||
|
|
794c0c1b3e | ||
|
|
b3f67561b1 | ||
|
|
78c378522c | ||
|
|
c90779265a | ||
|
|
4da505ca1f | ||
|
|
eea0fc4b26 | ||
|
|
c7a7890148 | ||
|
|
1a20488a0d | ||
|
|
558b4ed4cd | ||
|
|
4141e2b5d6 | ||
|
|
3167e454e7 | ||
|
|
be93995a3b | ||
|
|
498774d47e | ||
|
|
32847ed4f7 | ||
|
|
7650e6de95 | ||
|
|
4350ddaec0 | ||
|
|
c7ac700355 | ||
|
|
4a2215793d | ||
|
|
4e50aee372 | ||
|
|
8120f75ace | ||
|
|
33ed6dd806 | ||
|
|
322202b7e7 | ||
|
|
c3f2868805 | ||
|
|
2b145f6e6b | ||
|
|
897c1f3766 | ||
|
|
b887c0cf0b | ||
|
|
b2990c8b1a | ||
|
|
7fafe4ae7f | ||
|
|
6036609a3e | ||
|
|
1528d5d67b | ||
|
|
155c2f4919 | ||
|
|
cf89cbbff4 | ||
|
|
8b66bf15f0 | ||
|
|
44e5fc96fc | ||
|
|
f0237e4ec8 | ||
|
|
ba80c083ab | ||
|
|
9e45d82049 | ||
|
|
d7f4e2cc7a | ||
|
|
671fb02434 | ||
|
|
3db78d41eb | ||
|
|
5e3ad2af44 | ||
|
|
2576690f63 | ||
|
|
3a2fd8e6c8 | ||
|
|
485d629fc2 | ||
|
|
cb2232bfbd | ||
|
|
ac08356843 | ||
|
|
a7dddda495 | ||
|
|
3b0935a68b | ||
|
|
903b33e511 | ||
|
|
f897882299 | ||
|
|
aec1cbc81f | ||
|
|
b16b8b6f7f | ||
|
|
2764926ea9 | ||
|
|
2f1cd20a16 | ||
|
|
8ba850fc3f | ||
|
|
6072fa2962 | ||
|
|
f905a6e9dc | ||
|
|
beccf647b7 | ||
|
|
21387a5b8b | ||
|
|
ff05f5d121 | ||
|
|
f01b61c4c9 | ||
|
|
f1337d563e | ||
|
|
b2dd147a2d | ||
|
|
11b5d7d9d0 | ||
|
|
1427dc976f | ||
|
|
05008158ee | ||
|
|
6a3ef83060 | ||
|
|
af7c29330d | ||
|
|
20ad8b8b71 | ||
|
|
3058edfb8f | ||
|
|
bafdf36bf3 | ||
|
|
0f952cfe5f | ||
|
|
0e3198a0a6 | ||
|
|
0881673037 | ||
|
|
a1aebca4d3 | ||
|
|
1e657f0121 | ||
|
|
9cfb1e8afd | ||
|
|
7b62588d7e | ||
|
|
d3925f371b | ||
|
|
192303adb1 | ||
|
|
258a645aa1 | ||
|
|
14b6cc5650 | ||
|
|
9d2ed04ed4 | ||
|
|
3c4080eb08 | ||
|
|
dd598d6c2f | ||
|
|
80965dd5e3 | ||
|
|
e3e9182293 | ||
|
|
81b8b4c775 | ||
|
|
8a2d4d5448 | ||
|
|
06509d79d2 | ||
|
|
b11ba2e870 | ||
|
|
6002dbe5d6 | ||
|
|
0991667c49 | ||
|
|
661b2b87a7 | ||
|
|
2384a5cb7f | ||
|
|
7872d38fb5 | ||
|
|
6577e4e851 | ||
|
|
a019949628 | ||
|
|
487fc8e4af | ||
|
|
ded1292495 | ||
|
|
2ae0ee0804 | ||
|
|
f308343fb0 | ||
|
|
c9fda71db5 | ||
|
|
651ba90c6f | ||
|
|
ef7034893d | ||
|
|
d5f5f5495b | ||
|
|
8412b4d0cc | ||
|
|
96c4d07c0d | ||
|
|
8a819785c5 | ||
|
|
3cba7e727e | ||
|
|
1b34f47ec9 | ||
|
|
709038cc0a | ||
|
|
071e84a2a5 | ||
|
|
d7d2bd2fe8 | ||
|
|
842fb69dde | ||
|
|
be3a091002 | ||
|
|
b2c0e1ee1d | ||
|
|
2780f6f032 | ||
|
|
0616d22aec | ||
|
|
5b7ecc5fb2 | ||
|
|
4b8e525003 | ||
|
|
ff1c10fcee | ||
|
|
8199074678 | ||
|
|
dece9f381e | ||
|
|
4e8f57cbd9 | ||
|
|
cdda1ee79e | ||
|
|
4d82cc86c1 | ||
|
|
74da553542 | ||
|
|
4a49bdf352 | ||
|
|
2f8ceb3bc5 | ||
|
|
4c5d8f84e7 | ||
|
|
0acbcc31cd | ||
|
|
3bfb2147f5 | ||
|
|
47b3b3d97c | ||
|
|
9350bd4849 | ||
|
|
d38f9bbe36 | ||
|
|
115101dc77 | ||
|
|
e976bbe66b | ||
|
|
748028a7f4 | ||
|
|
49be6a6c16 | ||
|
|
fff1d9e4a3 | ||
|
|
9fbdd6a05b | ||
|
|
64ac8fccbd | ||
|
|
e85608ae61 | ||
|
|
09d2499399 | ||
|
|
be8ba6603d | ||
|
|
092ef99b0d | ||
|
|
84900fa3c9 | ||
|
|
0e09f84ab6 | ||
|
|
fed9258070 | ||
|
|
a02644c39e | ||
|
|
d0463c05b2 | ||
|
|
1068e75902 | ||
|
|
4a93d6866a | ||
|
|
f7724c4f06 | ||
|
|
e33094a3d6 | ||
|
|
98295289f0 | ||
|
|
2905b1b40c | ||
|
|
56eee69ebf | ||
|
|
5e4283909b | ||
|
|
aeaf0447d5 | ||
|
|
bad7d9b960 | ||
|
|
e15e36566c | ||
|
|
901c2ebf32 | ||
|
|
fd3b52a7f8 | ||
|
|
60cf316e16 | ||
|
|
b6667e6da8 | ||
|
|
7377cef7ff | ||
|
|
b1a4ed556f | ||
|
|
e6ab9cb597 | ||
|
|
a0b585fc25 | ||
|
|
db1a42d5e5 | ||
|
|
db9c5bd369 | ||
|
|
bee3c154ef | ||
|
|
0d8d8817f4 | ||
|
|
6169e192f7 | ||
|
|
6864183739 | ||
|
|
2f84135dd9 | ||
|
|
b83f9fcfda | ||
|
|
de771e8117 | ||
|
|
cb5a993f41 | ||
|
|
ae83fe9ac4 | ||
|
|
3d6335ce7c | ||
|
|
31bbd7707e | ||
|
|
5e110aec52 | ||
|
|
8a4f96e619 | ||
|
|
4334488891 | ||
|
|
96893b2c26 | ||
|
|
91bbe402bb | ||
|
|
0e8111a19e | ||
|
|
95c978b705 | ||
|
|
366c11428e | ||
|
|
30b67b29df | ||
|
|
17487cd40d | ||
|
|
0e2b840837 | ||
|
|
0676afd6fd | ||
|
|
59b1f20926 | ||
|
|
dad67c761a | ||
|
|
0f8a29daeb | ||
|
|
1f7cdfc8eb | ||
|
|
c37ac11955 | ||
|
|
7a2acc2532 | ||
|
|
71fae9efce | ||
|
|
3a8a7c911e | ||
|
|
83f1be5670 | ||
|
|
ad55b3f1fd | ||
|
|
5e0dddffce | ||
|
|
9bc25ea9ff | ||
|
|
d8fd45d545 | ||
|
|
70b3d03235 | ||
|
|
27d0090d10 | ||
|
|
4830a6fbf2 | ||
|
|
71f43c0669 | ||
|
|
90883e5926 | ||
|
|
ecdc6088f4 | ||
|
|
f6a46cd5ff | ||
|
|
d5324315d5 | ||
|
|
5e23048a74 | ||
|
|
8eccb87375 | ||
|
|
0f506fc47c | ||
|
|
3143ee397b | ||
|
|
7b6f5dff48 | ||
|
|
2877daa369 | ||
|
|
d3c03601c9 | ||
|
|
5179224e6d | ||
|
|
b9aedb9bf5 | ||
|
|
5dd56a8d94 | ||
|
|
6db57e9cd2 | ||
|
|
de608f208f | ||
|
|
9f0be17b74 | ||
|
|
c8a8415ce8 | ||
|
|
9bcb669fda | ||
|
|
c38c7e6c4e | ||
|
|
0209b24bcf | ||
|
|
e5e1837ce8 | ||
|
|
9cdb9f1600 | ||
|
|
344c2e85c4 | ||
|
|
0c7f333ec1 | ||
|
|
01a2981ed4 | ||
|
|
4a06f92c32 | ||
|
|
3d71278d8a | ||
|
|
7452551877 | ||
|
|
0d95b7e6ee | ||
|
|
0c672d4024 | ||
|
|
c1dd059fa7 | ||
|
|
1e7d41df2b | ||
|
|
1ef2f4f1fd | ||
|
|
816e6b3e5f | ||
|
|
7102bc2126 | ||
|
|
35ca046916 | ||
|
|
9a7587ea68 | ||
|
|
52a138ed18 | ||
|
|
e2592a23b4 | ||
|
|
b94d758bf1 | ||
|
|
aa6339bc75 | ||
|
|
3f58332dc0 | ||
|
|
9b9c046e6d | ||
|
|
0d29ba9314 | ||
|
|
fb7f42f4ba | ||
|
|
760de8ed64 | ||
|
|
e1f4c1fb67 | ||
|
|
29b8979bdb | ||
|
|
560aef2a1d | ||
|
|
b45134512a | ||
|
|
95d01663a7 | ||
|
|
e6e542b14f | ||
|
|
b930458679 | ||
|
|
87870448c6 | ||
|
|
c562133e9f | ||
|
|
72cacb43d2 | ||
|
|
4fd95881dc | ||
|
|
5766476fa1 | ||
|
|
6675963f7b | ||
|
|
efdabad37e | ||
|
|
dbd7c8e065 | ||
|
|
800ea7d055 | ||
|
|
ffe21ee7a6 | ||
|
|
4e7c1ae48a | ||
|
|
fc7c6d5697 | ||
|
|
f479e0dd31 | ||
|
|
8869b0a650 | ||
|
|
c6c99eacc3 | ||
|
|
8436692e88 | ||
|
|
e4357d2988 | ||
|
|
3af2c7153f | ||
|
|
5c2bab1fb6 | ||
|
|
2d051d7ff4 | ||
|
|
26127e8fde | ||
|
|
b4453c6237 | ||
|
|
e61e595d21 | ||
|
|
b607ff2318 | ||
|
|
a256fe355f | ||
|
|
f424aef3c3 | ||
|
|
94e1de3cf8 | ||
|
|
5001a0d16f | ||
|
|
ac864ceaf4 | ||
|
|
8d954bbfc3 | ||
|
|
68b5581eb5 | ||
|
|
b48be44134 | ||
|
|
54c10e0f97 | ||
|
|
6411045b62 | ||
|
|
de07e0dfc1 | ||
|
|
2a4c4b86c8 | ||
|
|
8bf47a940b | ||
|
|
2819285076 | ||
|
|
400c038555 | ||
|
|
07e61fc00f | ||
|
|
093b3590e9 | ||
|
|
3582aa2023 | ||
|
|
28dffafd3d | ||
|
|
3a233f6cfa | ||
|
|
543f6b9606 | ||
|
|
837ed7fb5e | ||
|
|
9ee964165b | ||
|
|
2fa604df3a | ||
|
|
272c0a35e5 | ||
|
|
7447071cc4 | ||
|
|
e87f82f65c | ||
|
|
0ae599a94d | ||
|
|
9c26839d15 | ||
|
|
0206fa024b | ||
|
|
7e2fbfacac | ||
|
|
ec55c1573b | ||
|
|
5ce35c1726 | ||
|
|
667396904c | ||
|
|
1f265ee370 | ||
|
|
ed354d8646 | ||
|
|
672f093e15 | ||
|
|
16ff6cef08 | ||
|
|
b00eca75af | ||
|
|
60c4a912cd | ||
|
|
ce01842e2d | ||
|
|
bc929ce463 | ||
|
|
bc8eeb25e3 | ||
|
|
b10eca0dcb | ||
|
|
279d275c1c | ||
|
|
14d24f496e | ||
|
|
776f39922e | ||
|
|
3d86a99e55 | ||
|
|
bb946b34a8 | ||
|
|
632a8568bb | ||
|
|
29a2080772 | ||
|
|
bddb8ea651 | ||
|
|
327ea4e019 | ||
|
|
d788830df6 | ||
|
|
d73fddc481 | ||
|
|
1251313f9c | ||
|
|
d2c37b1d68 | ||
|
|
b60c4a3191 | ||
|
|
d777cde5fc | ||
|
|
3bd84e3698 | ||
|
|
8ee069be65 | ||
|
|
d85dce1708 | ||
|
|
b92c4653f1 | ||
|
|
f8b4e40d22 | ||
|
|
409ce3f51e | ||
|
|
827e7985d4 | ||
|
|
323c8ba98e | ||
|
|
c9570aab55 | ||
|
|
b5bf585f99 | ||
|
|
9fb7bc06de | ||
|
|
292c93658d | ||
|
|
6e583abbc2 | ||
|
|
533719efb9 | ||
|
|
c4fc83c179 | ||
|
|
46387d9dd6 | ||
|
|
d79a3d8705 | ||
|
|
95e91329a2 | ||
|
|
088bb60e17 | ||
|
|
55297ac68b | ||
|
|
ec09c58519 | ||
|
|
30eeee1e32 | ||
|
|
a836bc6ce6 | ||
|
|
0a826c5239 | ||
|
|
4fd41a4707 | ||
|
|
57e586575a | ||
|
|
be86c1e8ea | ||
|
|
712ef6499f | ||
|
|
838917c148 | ||
|
|
a609d93836 | ||
|
|
b452d0744a | ||
|
|
2d2fdb5743 | ||
|
|
3afeeeb7c5 | ||
|
|
089d76a613 | ||
|
|
bbccff76f8 | ||
|
|
d6178047eb | ||
|
|
2bd0f0d90d | ||
|
|
f50907f109 | ||
|
|
58f070949c | ||
|
|
eef199582a | ||
|
|
37e6826371 | ||
|
|
c9df8f007d | ||
|
|
92c374be8a | ||
|
|
f356063e90 | ||
|
|
3ca82dae7f | ||
|
|
0d04e5f68b | ||
|
|
62dff4c955 | ||
|
|
3a2c0f8b93 | ||
|
|
139845cf60 | ||
|
|
5aaa8bde77 | ||
|
|
67b05a140e | ||
|
|
abb0114f94 | ||
|
|
cc8a946e78 | ||
|
|
ba4565bae3 | ||
|
|
fb8da0f51c | ||
|
|
e574daa490 | ||
|
|
7bdb3895e2 | ||
|
|
ac44f2bd00 | ||
|
|
897e86c3bb | ||
|
|
f17d4303b5 | ||
|
|
11c0b934bf | ||
|
|
091a21f769 | ||
|
|
09db0843f7 | ||
|
|
1991189e71 | ||
|
|
0109ab141f | ||
|
|
f7ecbc2dab | ||
|
|
5a1cdb4e03 | ||
|
|
ea6a3b65fd | ||
|
|
6bdc56a351 | ||
|
|
da6bd89383 | ||
|
|
0da6403d86 | ||
|
|
05ba91cde5 | ||
|
|
04a82409fe | ||
|
|
ba64a96eba | ||
|
|
886ca03a18 | ||
|
|
97d733a25f | ||
|
|
acd9fa0951 | ||
|
|
9c46c107f3 | ||
|
|
e389f4ef9e | ||
|
|
73184a1efd | ||
|
|
21a659ef85 | ||
|
|
8e643026b2 | ||
|
|
c172a50d38 | ||
|
|
b973db10ca | ||
|
|
84b07ad923 | ||
|
|
f52268ba3c | ||
|
|
81c36b1d26 |
3
.gitignore
vendored
@@ -52,5 +52,4 @@ applications/*/*.py[oc]
|
||||
applications/examples/static/epydoc
|
||||
applications/examples/static/sphinx
|
||||
applications/admin/cron/cron.master
|
||||
|
||||
|
||||
HOWTO-web2py-devel
|
||||
|
||||
25
.travis.yml
Normal file
@@ -0,0 +1,25 @@
|
||||
language: python
|
||||
|
||||
python:
|
||||
- '2.5'
|
||||
- '2.6'
|
||||
- '2.7'
|
||||
env:
|
||||
- DB=sqlite:memory
|
||||
- DB=mysql://root:@localhost/test_w2p
|
||||
- DB=postgres://postgres:@localhost/test_w2p
|
||||
before_script:
|
||||
- pip install unittest2
|
||||
- if [[ $DB == postgres* ]]; then pip install --use-mirrors psycopg2; fi
|
||||
- if [[ $TRAVIS_PYTHON_VERSION == '2.5' ]]; then pip install --use-mirrors pysqlite; fi
|
||||
- if [[ $DB == mysql* ]]; then mysql -e 'create database test_w2p;'; fi
|
||||
- if [[ $DB == postgres* ]]; then psql -c 'create database test_w2p;' -U postgres; fi
|
||||
#Temporal solution to travis issue #155
|
||||
- sudo chmod 777 /dev/shm
|
||||
- sudo rm -rf /dev/shm && sudo ln -s /run/shm /dev/shm
|
||||
script: PYTHONPATH=. unit2 -v gluon.tests
|
||||
|
||||
notifications:
|
||||
email: false
|
||||
irc:
|
||||
channels: "irc.freenode.org#web2py"
|
||||
6
ABOUT
Normal file
@@ -0,0 +1,6 @@
|
||||
web2py is an open source full-stack framework for agile development
|
||||
of secure database-driven web-based applications, written and programmable in
|
||||
Python.
|
||||
|
||||
Created by Massimo Di Pierro <mdipierro@cs.depaul.edu>
|
||||
|
||||
40
CHANGELOG
@@ -1,4 +1,42 @@
|
||||
## 2.3.1
|
||||
## 2.4.5
|
||||
|
||||
- travis.ci integration (thanks Marc Abramowitz and Niphlod). Passes all tests (thanks Niplod).
|
||||
- IS_DATE and IS_DATETIME can specify timezone
|
||||
|
||||
## 2.4.1- 2.4.3
|
||||
|
||||
- 2D GEO API: geoPoint, getLine, geoPolygon
|
||||
- support for 'json' field type in DAL
|
||||
- schema export with db.as_json/as_xml, thanks Alan
|
||||
- graph representation of models
|
||||
- admin based on bootstrap, thanks Paolo
|
||||
- support for semantic versioning
|
||||
- new bootstrap based admin, thanks Paolo
|
||||
- improved scheduler (and change in scheduler field names), thanks Niphlod
|
||||
- graphiz support added to adm, thanks Jose
|
||||
- on_failure in grid
|
||||
- db.table.field.abs()
|
||||
- better wiki
|
||||
- geoPoint, getLine, geoPolygon
|
||||
- better reporting of 500 ajax errors
|
||||
- better grid
|
||||
- improved/fixed mongodb support
|
||||
- improved parse_as_rest(patterns=...), thanks Denes
|
||||
- improved IMAP DAL support, thanks Alan
|
||||
- improved security when cookies in sessions
|
||||
- Row.as_xml, as_json, as_dict, as_yaml thanks Alan
|
||||
- smarted custom_import
|
||||
- setup-ubuntu-12-04-redmine-unicorn-web2py-uwsgi-nginx.sh
|
||||
- added support for motor and pulsar servers, thanks Niphlod
|
||||
- added json-rpc2 support
|
||||
- added pypyodbc.py driver
|
||||
- allow auth.settings.ondelete='CASCADE'
|
||||
- new syntax IS_EXPR(lambda value: ...
|
||||
- using google for QR codes (although Graph API will be deprecated in 2015)
|
||||
- upgraded fpdf to 1.7.1
|
||||
- bug fixes (including issues with calendar.js and archive tables)
|
||||
|
||||
## 2.3.1 - 2.3.2
|
||||
|
||||
- new virtual fields syntax:
|
||||
``db.define_table('person',Field('name'),Field.Virtual('namey',lambda row: row.person.name+'y'))``
|
||||
|
||||
2
LICENSE
@@ -3,7 +3,7 @@
|
||||
Web2py is Licensed under the LGPL license version 3
|
||||
(http://www.gnu.org/licenses/lgpl.html)
|
||||
|
||||
Copyrighted (c) by Massimo Di Pierro (2007-2011)
|
||||
Copyrighted (c) by Massimo Di Pierro (2007-2013)
|
||||
|
||||
### On Commercial Redistribution
|
||||
|
||||
|
||||
16
Makefile
@@ -5,7 +5,7 @@ all:
|
||||
clean:
|
||||
rm -f httpserver.log
|
||||
rm -f parameters*.py
|
||||
rm -f -r applications/*/compiled
|
||||
rm -f -r applications/*/compiled
|
||||
find ./ -name '*~' -exec rm -f {} \;
|
||||
find ./ -name '*.orig' -exec rm -f {} \;
|
||||
find ./ -name '*.rej' -exec rm -f {} \;
|
||||
@@ -29,7 +29,8 @@ update:
|
||||
wget -O gluon/contrib/simplejsonrpc.py http://rad2py.googlecode.com/hg/ide2py/simplejsonrpc.py
|
||||
echo "remember that pymysql was tweaked"
|
||||
src:
|
||||
echo 'Version 2.3.1 ('`date +%Y-%m-%d\ %H:%M:%S`') stable' > VERSION
|
||||
### Use semantic versioning
|
||||
echo 'Version 2.4.5-stable+timestamp.'`date +%Y.%m.%d.%H.%M.%S` > VERSION
|
||||
### rm -f all junk files
|
||||
make clean
|
||||
### clean up baisc apps
|
||||
@@ -53,20 +54,19 @@ src:
|
||||
### build web2py_src.zip
|
||||
echo '' > NEWINSTALL
|
||||
mv web2py_src.zip web2py_src_old.zip | echo 'no old'
|
||||
cd ..; zip -r web2py/web2py_src.zip web2py/gluon/*.py web2py/gluon/contrib/* web2py/splashlogo.gif web2py/*.py web2py/README.markdown web2py/LICENSE web2py/CHANGELOG web2py/NEWINSTALL web2py/VERSION web2py/Makefile web2py/epydoc.css web2py/epydoc.conf web2py/app.example.yaml web2py/logging.example.conf web2py_exe.conf web2py/queue.example.yaml MANIFEST.in w2p_apps w2p_clone w2p_run startweb2py web2py/scripts/*.sh web2py/scripts/*.py web2py/applications/admin web2py/applications/examples/ web2py/applications/welcome web2py/applications/__init__.py web2py/site-packages/__init__.py web2py/gluon/tests/*.sh web2py/gluon/tests/*.py
|
||||
cd ..; zip -r web2py/web2py_src.zip web2py/gluon/*.py web2py/gluon/contrib/* web2py/splashlogo.gif web2py/*.py web2py/README.markdown web2py/LICENSE web2py/CHANGELOG web2py/NEWINSTALL web2py/VERSION web2py/Makefile web2py/epydoc.css web2py/epydoc.conf web2py/app.example.yaml web2py/logging.example.conf web2py/queue.example.yaml web2py/MANIFEST.in web2py/w2p_apps web2py/w2p_clone web2py/w2p_run web2py/web2py.cio web2py/web2py.gif web2py/scripts/*.sh web2py/scripts/*.py web2py/applications/admin web2py/applications/examples/ web2py/applications/welcome web2py/applications/__init__.py web2py/site-packages/__init__.py web2py/gluon/tests/*.sh web2py/gluon/tests/*.py
|
||||
|
||||
mdp:
|
||||
make src
|
||||
make app
|
||||
make win
|
||||
app:
|
||||
echo 'did you uncomment import_all in gluon/main.py?'
|
||||
python2.5 -c 'import compileall; compileall.compile_dir("gluon/")'
|
||||
python2.7 -c 'import compileall; compileall.compile_dir("gluon/")'
|
||||
#python web2py.py -S welcome -R __exit__.py
|
||||
#cd ../web2py_osx/site-packages/; unzip ../site-packages.zip
|
||||
find gluon -path '*.pyc' -exec cp {} ../web2py_osx/site-packages/{} \;
|
||||
cd ../web2py_osx/site-packages/; zip -r ../site-packages.zip *
|
||||
mv ../web2py_osx/site-packages.zip ../web2py_osx/web2py/web2py.app/Contents/Resources/lib/python2.5
|
||||
mv ../web2py_osx/site-packages.zip ../web2py_osx/web2py/web2py.app/Contents/Resources/lib/python2.7
|
||||
cp README.markdown ../web2py_osx/web2py/web2py.app/Contents/Resources
|
||||
cp NEWINSTALL ../web2py_osx/web2py/web2py.app/Contents/Resources
|
||||
cp LICENSE ../web2py_osx/web2py/web2py.app/Contents/Resources
|
||||
@@ -85,7 +85,6 @@ app:
|
||||
cd ../web2py_osx; zip -r web2py_osx.zip web2py
|
||||
mv ../web2py_osx/web2py_osx.zip .
|
||||
win:
|
||||
echo 'did you uncomment import_all in gluon/main.py?'
|
||||
python2.7 -c 'import compileall; compileall.compile_dir("gluon/")'
|
||||
#cd ../web2py_win/library/; unzip ../library.zip
|
||||
find gluon -path '*.pyc' -exec cp {} ../web2py_win/library/{} \;
|
||||
@@ -109,7 +108,7 @@ win:
|
||||
cd ../web2py_win; zip -r web2py_win.zip web2py
|
||||
mv ../web2py_win/web2py_win.zip .
|
||||
run:
|
||||
python2.5 web2py.py -a hello
|
||||
python2.7 web2py.py -a hello
|
||||
commit:
|
||||
python web2py.py --run_system_tests
|
||||
make src
|
||||
@@ -120,7 +119,6 @@ commit:
|
||||
push:
|
||||
hg push
|
||||
git push
|
||||
git push mdipierro
|
||||
tag:
|
||||
git tag -l '$(S)'
|
||||
hg tag -l '$(S)'
|
||||
|
||||
@@ -6,6 +6,11 @@ It is written and programmable in Python. LGPLv3 License
|
||||
|
||||
Learn more at http://web2py.com
|
||||
|
||||
|
||||
## Tests
|
||||
|
||||
[](https://travis-ci.org/web2py/web2py)
|
||||
|
||||
## Installation Instructions
|
||||
|
||||
To start web2py there is NO NEED to install it. Just unzip and do:
|
||||
@@ -28,7 +33,7 @@ That's it!!!
|
||||
contrib/ > third party libraries
|
||||
tests/ > unittests
|
||||
applications/ > are the apps
|
||||
admin/ > web based IDE
|
||||
admin/ > web based IDE
|
||||
...
|
||||
examples/ > examples, docs, links
|
||||
...
|
||||
|
||||
2
VERSION
@@ -1 +1 @@
|
||||
Version 2.3.1 (2012-12-14 09:21:31) stable
|
||||
Version 2.4.5-stable+timestamp.2013.03.18.17.37.19
|
||||
|
||||
28
anyserver.py
@@ -17,8 +17,6 @@ import urllib
|
||||
path = os.path.dirname(os.path.abspath(__file__))
|
||||
os.chdir(path)
|
||||
sys.path = [path] + [p for p in sys.path if not p == path]
|
||||
import gluon.main
|
||||
from gluon.fileutils import read_file, write_file
|
||||
|
||||
|
||||
class Servers:
|
||||
@@ -92,8 +90,6 @@ class Servers:
|
||||
|
||||
@staticmethod
|
||||
def gevent(app, address, **options):
|
||||
from gevent import monkey
|
||||
monkey.patch_all()
|
||||
from gevent import pywsgi
|
||||
from gevent.pool import Pool
|
||||
pywsgi.WSGIServer(address, app, spawn='workers' in options and Pool(
|
||||
@@ -163,8 +159,30 @@ class Servers:
|
||||
"tcp://127.0.0.1:9996")
|
||||
mongrel2_handler(app, conn, debug=False)
|
||||
|
||||
@staticmethod
|
||||
def motor(app, address, **options):
|
||||
#https://github.com/rpedroso/motor
|
||||
import motor
|
||||
app = motor.WSGIContainer(app)
|
||||
http_server = motor.HTTPServer(app)
|
||||
http_server.listen(address=address[0], port=address[1])
|
||||
#http_server.start(2)
|
||||
motor.IOLoop.instance().start()
|
||||
|
||||
@staticmethod
|
||||
def pulsar(app, address, **options):
|
||||
from pulsar.apps import wsgi
|
||||
sys.argv = ['anyserver.py']
|
||||
s = wsgi.WSGIServer(callable=app, bind="%s:%d" % address)
|
||||
s.start()
|
||||
|
||||
def run(servername, ip, port, softcron=True, logging=False, profiler=None):
|
||||
if servername == 'gevent':
|
||||
from gevent import monkey
|
||||
monkey.patch_all()
|
||||
|
||||
import gluon.main
|
||||
|
||||
if logging:
|
||||
application = gluon.main.appfactory(wsgiapp=gluon.main.wsgibase,
|
||||
logfilename='httpserver.log',
|
||||
@@ -285,7 +303,7 @@ def mongrel2_handler(application, conn, debug=False):
|
||||
def main():
|
||||
usage = "python anyserver.py -s tornado -i 127.0.0.1 -p 8000 -l -P"
|
||||
try:
|
||||
version = read_file('VERSION')
|
||||
version = open('VERSION','r')
|
||||
except IOError:
|
||||
version = ''
|
||||
parser = optparse.OptionParser(usage, None, optparse.Option, version)
|
||||
|
||||
@@ -11,6 +11,11 @@ import copy
|
||||
import gluon.contenttype
|
||||
import gluon.fileutils
|
||||
|
||||
try:
|
||||
import pygraphviz as pgv
|
||||
except ImportError:
|
||||
pgv = None
|
||||
|
||||
response.subtitle = 'Database Administration (appadmin)'
|
||||
|
||||
# ## critical --- make a copy of the environment
|
||||
@@ -314,6 +319,9 @@ def state():
|
||||
|
||||
|
||||
def ccache():
|
||||
cache.ram.initialize()
|
||||
cache.disk.initialize()
|
||||
|
||||
form = FORM(
|
||||
P(TAG.BUTTON(
|
||||
T("Clear CACHE?"), _type="submit", _name="yes", _value="yes")),
|
||||
@@ -380,7 +388,7 @@ def ccache():
|
||||
|
||||
return (hours, minutes, seconds)
|
||||
|
||||
for key, value in cache.ram.storage.items():
|
||||
for key, value in cache.ram.storage.iteritems():
|
||||
if isinstance(value, dict):
|
||||
ram['hits'] = value['hit_total'] - value['misses']
|
||||
ram['misses'] = value['misses']
|
||||
@@ -460,3 +468,103 @@ def ccache():
|
||||
|
||||
return dict(form=form, total=total,
|
||||
ram=ram, disk=disk, object_stats=hp != False)
|
||||
|
||||
|
||||
def table_template(table):
|
||||
from gluon.html import TR, TD, TABLE, TAG
|
||||
|
||||
def FONT(*args, **kwargs):
|
||||
return TAG.font(*args, **kwargs)
|
||||
|
||||
def types(field):
|
||||
f_type = field.type
|
||||
if not isinstance(f_type,str):
|
||||
return ' '
|
||||
elif f_type == 'string':
|
||||
return field.length
|
||||
elif f_type == 'id':
|
||||
return B('pk')
|
||||
elif f_type.startswith('reference') or \
|
||||
f_type.startswith('list:reference'):
|
||||
return B('fk')
|
||||
else:
|
||||
return ' '
|
||||
|
||||
# This is horribe HTML but the only one graphiz understands
|
||||
rows = []
|
||||
cellpadding = 4
|
||||
color = "#000000"
|
||||
bgcolor = "#FFFFFF"
|
||||
face = "Helvetica"
|
||||
face_bold = "Helvetica Bold"
|
||||
border = 0
|
||||
|
||||
rows.append(TR(TD(FONT(table, _face=face_bold, _color=bgcolor),
|
||||
_colspan=3, _cellpadding=cellpadding,
|
||||
_align="center", _bgcolor=color)))
|
||||
for row in db[table]:
|
||||
rows.append(TR(TD(FONT(row.name, _color=color, _face=face_bold),
|
||||
_align="left", _cellpadding=cellpadding,
|
||||
_border=border),
|
||||
TD(FONT(row.type, _color=color, _face=face),
|
||||
_align="left", _cellpadding=cellpadding,
|
||||
_border=border),
|
||||
TD(FONT(types(row), _color=color, _face=face),
|
||||
_align="center", _cellpadding=cellpadding,
|
||||
_border=border)))
|
||||
return "< %s >" % TABLE(*rows, **dict(_bgcolor=bgcolor, _border=1,
|
||||
_cellborder=0, _cellspacing=0)
|
||||
).xml()
|
||||
|
||||
|
||||
def bg_graph_model():
|
||||
graph = pgv.AGraph(layout='dot', directed=True, strict=False, rankdir='LR')
|
||||
|
||||
subgraphs = dict()
|
||||
for tablename in db.tables:
|
||||
if hasattr(db[tablename],'_meta_graphmodel'):
|
||||
meta_graphmodel = db[tablename]._meta_graphmodel
|
||||
else:
|
||||
meta_graphmodel = dict(group='Undefined', color='#ECECEC')
|
||||
|
||||
group = meta_graphmodel['group'].replace(' ', '')
|
||||
if not subgraphs.has_key(group):
|
||||
subgraphs[group] = dict(meta=meta_graphmodel, tables=[])
|
||||
subgraphs[group]['tables'].append(tablename)
|
||||
else:
|
||||
subgraphs[group]['tables'].append(tablename)
|
||||
|
||||
graph.add_node(tablename, name=tablename, shape='plaintext',
|
||||
label=table_template(tablename))
|
||||
|
||||
for n, key in enumerate(subgraphs.iterkeys()):
|
||||
graph.subgraph(nbunch=subgraphs[key]['tables'],
|
||||
name='cluster%d' % n,
|
||||
style='filled',
|
||||
color=subgraphs[key]['meta']['color'],
|
||||
label=subgraphs[key]['meta']['group'])
|
||||
|
||||
for tablename in db.tables:
|
||||
for field in db[tablename]:
|
||||
f_type = field.type
|
||||
if isinstance(f_type,str) and (
|
||||
f_type.startswith('reference') or
|
||||
f_type.startswith('list:reference')):
|
||||
referenced_table = f_type.split()[1].split('.')[0]
|
||||
n1 = graph.get_node(tablename)
|
||||
n2 = graph.get_node(referenced_table)
|
||||
graph.add_edge(n1, n2, color="#4C4C4C", label='')
|
||||
|
||||
graph.layout()
|
||||
#return graph.draw(format='png', prog='dot')
|
||||
if not request.args:
|
||||
return graph.draw(format='png', prog='dot')
|
||||
else:
|
||||
response.headers['Content-Disposition']='attachment;filename=graph.%s'%request.args(0)
|
||||
if request.args(0) == 'dot':
|
||||
return graph.string()
|
||||
else:
|
||||
return graph.draw(format=request.args(0), prog='dot')
|
||||
|
||||
def graph_model():
|
||||
return dict(databases=databases, pgv=pgv)
|
||||
|
||||
@@ -212,3 +212,26 @@ def toggle_breakpoint():
|
||||
except Exception, e:
|
||||
session.flash = str(e)
|
||||
return response.json({'ok': ok, 'lineno': lineno})
|
||||
|
||||
def list_breakpoints():
|
||||
"Return a list of linenumbers for current breakpoints"
|
||||
|
||||
breakpoints = []
|
||||
ok = None
|
||||
try:
|
||||
filename = os.path.join(request.env['applications_parent'],
|
||||
'applications', request.vars.filename)
|
||||
# normalize path name: replace slashes, references, etc...
|
||||
filename = os.path.normpath(os.path.normcase(filename))
|
||||
for bp in qdb_debugger.do_list_breakpoint():
|
||||
no, bp_filename, bp_lineno, temporary, enabled, hits, cond = bp
|
||||
# normalize path name: replace slashes, references, etc...
|
||||
bp_filename = os.path.normpath(os.path.normcase(bp_filename))
|
||||
if filename == bp_filename:
|
||||
breakpoints.append(bp_lineno)
|
||||
ok = True
|
||||
except Exception, e:
|
||||
session.flash = str(e)
|
||||
ok = False
|
||||
return response.json({'ok': ok, 'breakpoints': breakpoints})
|
||||
|
||||
|
||||
@@ -15,11 +15,13 @@ from glob import glob
|
||||
import shutil
|
||||
import platform
|
||||
try:
|
||||
from git import *
|
||||
import git
|
||||
if git.__version__ < '0.3.1':
|
||||
raise ImportError("Your version of git is %s. Upgrade to 0.3.1 or better." % git.__version__)
|
||||
have_git = True
|
||||
except ImportError:
|
||||
except ImportError, e:
|
||||
have_git = False
|
||||
GIT_MISSING = 'requires gitpython module, but not installed or incompatible version'
|
||||
GIT_MISSING = 'Requires gitpython module, but not installed or incompatible version: %s' % e
|
||||
|
||||
from gluon.languages import (read_possible_languages, read_dict, write_dict,
|
||||
read_plural_dict, write_plural_dict)
|
||||
@@ -146,9 +148,7 @@ def check_version():
|
||||
elif platform.system().lower() in ('windows', 'win32', 'win64') and os.path.exists("web2py.exe"):
|
||||
return SPAN('You should upgrade to version %s.%s.%s' % version_number[:3])
|
||||
else:
|
||||
return sp_button(URL('upgrade_web2py'), T('upgrade now')) \
|
||||
+ XML(' <strong class="upgrade_version">%s.%s.%s</strong>'
|
||||
% version_number[:3])
|
||||
return sp_button(URL('upgrade_web2py'), T('upgrade now to %s') % version_number.split('-')[0])
|
||||
|
||||
|
||||
def logout():
|
||||
@@ -168,7 +168,8 @@ def change_password():
|
||||
form = SQLFORM.factory(Field('current_admin_password', 'password'),
|
||||
Field('new_admin_password',
|
||||
'password', requires=IS_STRONG()),
|
||||
Field('new_admin_password_again', 'password'))
|
||||
Field('new_admin_password_again', 'password'),
|
||||
_class="span4 well")
|
||||
if form.accepts(request.vars):
|
||||
if not verify_password(request.vars.current_admin_password):
|
||||
form.errors.current_admin_password = T('invalid password')
|
||||
@@ -237,10 +238,10 @@ def site():
|
||||
redirect(URL(r=request))
|
||||
target = os.path.join(apath(r=request), form_update.vars.name)
|
||||
try:
|
||||
new_repo = Repo.clone_from(form_update.vars.url, target)
|
||||
new_repo = git.Repo.clone_from(form_update.vars.url, target)
|
||||
session.flash = T('new application "%s" imported',
|
||||
form_update.vars.name)
|
||||
except GitCommandError, err:
|
||||
except git.GitCommandError, err:
|
||||
session.flash = T('Invalid git repository specified.')
|
||||
redirect(URL(r=request))
|
||||
|
||||
@@ -374,6 +375,10 @@ def uninstall():
|
||||
|
||||
dialog = FORM.confirm(T('Uninstall'),
|
||||
{T('Cancel'): URL('site')})
|
||||
dialog['_id'] = 'confirm_form'
|
||||
dialog['_class'] = 'well'
|
||||
for component in dialog.components:
|
||||
component['_class'] = 'btn'
|
||||
|
||||
if dialog.accepted:
|
||||
if MULTI_USER_MODE:
|
||||
@@ -556,6 +561,7 @@ def edit():
|
||||
# Load json only if it is ajax edited...
|
||||
app = get_app(request.vars.app)
|
||||
filename = '/'.join(request.args)
|
||||
response.title = request.args[-1]
|
||||
if request.vars.app:
|
||||
path = abspath(filename)
|
||||
else:
|
||||
@@ -636,6 +642,7 @@ def edit():
|
||||
code = request.vars.data.rstrip().replace('\r\n', '\n') + '\n'
|
||||
compile(code, path, "exec", _ast.PyCF_ONLY_AST)
|
||||
except Exception, e:
|
||||
# offset calculation is only used for textarea (start/stop)
|
||||
start = sum([len(line) + 1 for l, line
|
||||
in enumerate(request.vars.data.split("\n"))
|
||||
if l < e.lineno - 1])
|
||||
@@ -645,7 +652,7 @@ def edit():
|
||||
else:
|
||||
offset = 0
|
||||
highlight = {'start': start, 'end': start +
|
||||
offset + 1, 'lineno': e.lineno}
|
||||
offset + 1, 'lineno': e.lineno, 'offset': offset}
|
||||
try:
|
||||
ex_name = e.__class__.__name__
|
||||
except:
|
||||
@@ -791,7 +798,8 @@ def resolve():
|
||||
diff = TABLE(*[TR(TD(gen_data(i, item)),
|
||||
TD(item[0]),
|
||||
TD(leading(item[2:]),
|
||||
TT(item[2:].rstrip())), _class=getclass(item))
|
||||
TT(item[2:].rstrip())),
|
||||
_class=getclass(item))
|
||||
for (i, item) in enumerate(d) if item[0] != '?'])
|
||||
|
||||
return dict(diff=diff, filename=filename)
|
||||
@@ -801,6 +809,7 @@ def edit_language():
|
||||
""" Edit language file """
|
||||
app = get_app()
|
||||
filename = '/'.join(request.args)
|
||||
response.title = request.args[-1]
|
||||
strings = read_dict(apath(filename, r=request))
|
||||
|
||||
if '__corrupted__' in strings:
|
||||
@@ -834,10 +843,14 @@ def edit_language():
|
||||
# Making the short circuit compatible with <= python2.4
|
||||
k = (s != k) and k or B(k)
|
||||
|
||||
rows.append(P(prefix, k, BR(), elem, TAG.BUTTON(T('delete'),
|
||||
_onclick='return delkey("%s")' % name), _id=name))
|
||||
new_row = DIV(LABEL(prefix, k, _style="font-weight:normal;"),
|
||||
CAT(elem, '\n', TAG.BUTTON(
|
||||
T('delete'),
|
||||
_onclick='return delkey("%s")' % name,
|
||||
_class='btn')), _id=name, _class='span6 well well-small')
|
||||
|
||||
rows.append(INPUT(_type='submit', _value=T('update')))
|
||||
rows.append(DIV(new_row,_class="row-fluid"))
|
||||
rows.append(DIV(INPUT(_type='submit', _value=T('update'), _class="btn btn-primary"), _class='controls'))
|
||||
form = FORM(*rows)
|
||||
if form.accepts(request.vars, keepvalues=True):
|
||||
strs = dict()
|
||||
@@ -868,29 +881,27 @@ def edit_plurals():
|
||||
|
||||
keys = sorted(plurals.keys(), lambda x, y: cmp(
|
||||
unicode(x, 'utf-8').lower(), unicode(y, 'utf-8').lower()))
|
||||
rows = []
|
||||
|
||||
row = [T("Singular Form")]
|
||||
row.extend([T("Plural Form #%s", n + 1) for n in xnplurals])
|
||||
table = TABLE(THEAD(TR(row)))
|
||||
|
||||
tab_rows = []
|
||||
for key in keys:
|
||||
name = md5_hash(key)
|
||||
forms = plurals[key]
|
||||
|
||||
if len(forms) < nplurals:
|
||||
forms.extend(None for i in xrange(nplurals - len(forms)))
|
||||
tab_col1 = DIV(CAT(LABEL(T("Singular Form")), B(key,
|
||||
_class='fake-input')))
|
||||
tab_inputs = [SPAN(LABEL(T("Plural Form #%s", n + 1)), INPUT(_type='text', _name=name + '_' + str(n), value=forms[n], _size=20), _class='span6') for n in xnplurals]
|
||||
tab_col2 = DIV(CAT(*tab_inputs))
|
||||
tab_col3 = DIV(CAT(LABEL(XML(' ')), TAG.BUTTON(T('delete'), _onclick='return delkey("%s")' % name, _class='btn'), _class='span6'))
|
||||
tab_row = DIV(DIV(tab_col1, '\n', tab_col2, '\n', tab_col3, _class='well well-small'), _id=name, _class='row-fluid tab_row')
|
||||
tab_rows.append(tab_row)
|
||||
|
||||
row = [B(key)]
|
||||
row.extend([INPUT(_type='text', _name=name + '_' + str(n),
|
||||
value=forms[n], _size=20) for n in xnplurals])
|
||||
row.append(TD(
|
||||
TAG.BUTTON(T('delete'), _onclick='return delkey("%s")' % name)))
|
||||
rows.append(TR(row, _id=name))
|
||||
if rows:
|
||||
table.append(TBODY(rows))
|
||||
rows = [table, INPUT(_type='submit', _value=T('update'))]
|
||||
form = FORM(*rows)
|
||||
tab_rows.append(DIV(TAG['button'](T('update'), _type='submit',
|
||||
_class='btn btn-primary'),
|
||||
_class='controls'))
|
||||
tab_container = DIV(*tab_rows, **dict(_class="row-fluid"))
|
||||
|
||||
form = FORM(tab_container)
|
||||
if form.accepts(request.vars, keepvalues=True):
|
||||
new_plurals = dict()
|
||||
for key in keys:
|
||||
@@ -1415,7 +1426,7 @@ def errors():
|
||||
hash2error[hash]['count'] += 1
|
||||
except KeyError:
|
||||
error_lines = error['traceback'].split("\n")
|
||||
last_line = error_lines[-2]
|
||||
last_line = error_lines[-2] if len(error_lines)>1 else 'unknown'
|
||||
error_causer = os.path.split(error['layer'])[1]
|
||||
hash2error[hash] = dict(count=1, pickel=error,
|
||||
causer=error_causer,
|
||||
@@ -1483,7 +1494,9 @@ def errors():
|
||||
|
||||
else:
|
||||
for item in request.vars:
|
||||
if item[:7] == 'delete_':
|
||||
# delete_all} rows doesn't contain any ticket
|
||||
# Remove anything else as requested
|
||||
if item[:7] == 'delete_' and (not item == "delete_all}"):
|
||||
os.unlink(apath('%s/errors/%s' % (app, item[7:]), r=request))
|
||||
func = lambda p: os.stat(apath('%s/errors/%s' %
|
||||
(app, p), r=request)).st_mtime
|
||||
@@ -1650,7 +1663,7 @@ def twitter():
|
||||
d = dict()
|
||||
for e in data:
|
||||
d[e["id"]] = e
|
||||
r = reversed(sorted(d))
|
||||
r = reversed(sorted(d))
|
||||
return dict(tweets=[d[k] for k in r])
|
||||
else:
|
||||
return 'disabled'
|
||||
@@ -1714,29 +1727,26 @@ def git_pull():
|
||||
{T('Cancel'): URL('site')})
|
||||
if dialog.accepted:
|
||||
try:
|
||||
repo = Repo(os.path.join(apath(r=request), app))
|
||||
repo = git.Repo(os.path.join(apath(r=request), app))
|
||||
origin = repo.remotes.origin
|
||||
origin.fetch()
|
||||
origin.pull()
|
||||
session.flash = T("Application updated via git pull")
|
||||
redirect(URL('site'))
|
||||
except CheckoutError, message:
|
||||
|
||||
except git.CheckoutError:
|
||||
session.flash = T("Pull failed, certain files could not be checked out. Check logs for details.")
|
||||
redirect(URL('site'))
|
||||
except UnmergedEntriesError:
|
||||
except git.UnmergedEntriesError:
|
||||
session.flash = T("Pull is not possible because you have unmerged files. Fix them up in the work tree, and then try again.")
|
||||
redirect(URL('site'))
|
||||
except git.GitCommandError:
|
||||
session.flash = T(
|
||||
"Pull failed, git exited abnormally. See logs for details.")
|
||||
redirect(URL('site'))
|
||||
except AssertionError:
|
||||
session.flash = T("Pull is not possible because you have unmerged files. Fix them up in the work tree, and then try again.")
|
||||
redirect(URL('site'))
|
||||
except GitCommandError, status:
|
||||
session.flash = T(
|
||||
"Pull failed, git exited abnormally. See logs for details.")
|
||||
redirect(URL('site'))
|
||||
except Exception, e:
|
||||
session.flash = T(
|
||||
"Pull failed, git exited abnormally. See logs for details.")
|
||||
redirect(URL('site'))
|
||||
elif 'cancel' in request.vars:
|
||||
redirect(URL('site'))
|
||||
return dict(app=app, dialog=dialog)
|
||||
@@ -1754,7 +1764,7 @@ def git_push():
|
||||
form.process()
|
||||
if form.accepted:
|
||||
try:
|
||||
repo = Repo(os.path.join(apath(r=request), app))
|
||||
repo = git.Repo(os.path.join(apath(r=request), app))
|
||||
index = repo.index
|
||||
index.add([apath(r=request) + app + '/*'])
|
||||
new_commit = index.commit(form.vars.changelog)
|
||||
@@ -1763,11 +1773,8 @@ def git_push():
|
||||
session.flash = T(
|
||||
"Git repo updated with latest application changes.")
|
||||
redirect(URL('site'))
|
||||
except UnmergedEntriesError:
|
||||
except git.UnmergedEntriesError:
|
||||
session.flash = T("Push failed, there are unmerged entries in the cache. Resolve merge issues manually and try again.")
|
||||
redirect(URL('site'))
|
||||
except Exception, e:
|
||||
session.flash = T(
|
||||
"Push failed, git exited abnormally. See logs for details.")
|
||||
redirect(URL('site'))
|
||||
return dict(app=app, form=form)
|
||||
|
||||
|
||||
@@ -55,7 +55,7 @@ def index():
|
||||
reset(session)
|
||||
apps = os.listdir(os.path.join(request.folder, '..'))
|
||||
form = SQLFORM.factory(Field('name', requires=[IS_NOT_EMPTY(),
|
||||
IS_ALPHANUMERIC()]))
|
||||
IS_ALPHANUMERIC()]), _class='span5 well well-small')
|
||||
if form.accepts(request.vars):
|
||||
app = form.vars.name
|
||||
session.app['name'] = app
|
||||
@@ -125,19 +125,20 @@ def step1():
|
||||
default=params.get('login_method', 'local')),
|
||||
Field(
|
||||
'login_config', default=params.get('login_config', None)),
|
||||
Field('plugins', 'list:string', requires=IS_IN_SET(plugins, multiple=True)))
|
||||
Field('plugins', 'list:string', requires=IS_IN_SET(plugins, multiple=True)),
|
||||
_class='span7 well well-small')
|
||||
|
||||
if form.accepts(request.vars):
|
||||
session.app['params'] = [(key, form.vars.get(key, None))
|
||||
for key, value in session.app['params']]
|
||||
redirect(URL('step2'))
|
||||
redirect(URL('step2') + '/#xwizard_form')
|
||||
return dict(step='1: Setting Parameters', form=form)
|
||||
|
||||
|
||||
def step2():
|
||||
response.view = 'wizard/step.html'
|
||||
form = SQLFORM.factory(Field('table_names', 'list:string',
|
||||
default=session.app['tables']))
|
||||
default=session.app['tables']), _class="span7 well well-small")
|
||||
if form.accepts(request.vars):
|
||||
table_names = [clean(t) for t in listify(form.vars.table_names)
|
||||
if t.strip()]
|
||||
@@ -157,21 +158,21 @@ def step2():
|
||||
session.app['page_' + name] = \
|
||||
'## Manage %s\n\n{{=form}}' % (table)
|
||||
if session.app['tables']:
|
||||
redirect(URL('step3', args=0))
|
||||
redirect(URL('step3', args=0) + '/#xwizard_form')
|
||||
else:
|
||||
redirect(URL('step4'))
|
||||
redirect(URL('step4') + '/#xwizard_form')
|
||||
return dict(step='2: Tables', form=form)
|
||||
|
||||
|
||||
def step3():
|
||||
response.view = 'wizard/step.html'
|
||||
n = int(request.args(0) or 0)
|
||||
n = int(request.args(-1) or 0)
|
||||
m = len(session.app['tables'])
|
||||
if n >= m:
|
||||
redirect(URL('step2'))
|
||||
table = session.app['tables'][n]
|
||||
form = SQLFORM.factory(Field('field_names', 'list:string',
|
||||
default=session.app.get('table_' + table, [])))
|
||||
default=session.app.get('table_' + table, [])), _class="span7 well well-small")
|
||||
if form.accepts(request.vars) and form.vars.field_names:
|
||||
fields = listify(form.vars.field_names)
|
||||
if table == 'auth_user':
|
||||
@@ -187,9 +188,9 @@ def step3():
|
||||
response.flash = T('invalid circular reference')
|
||||
else:
|
||||
if n < m - 1:
|
||||
redirect(URL('step3', args=n + 1))
|
||||
redirect(URL('step3', args=n + 1) + '/#xwizard_form')
|
||||
else:
|
||||
redirect(URL('step4'))
|
||||
redirect(URL('step4') + '/#xwizard_form')
|
||||
return dict(step='3: Fields for table "%s" (%s of %s)'
|
||||
% (table, n + 1, m), table=table, form=form)
|
||||
|
||||
@@ -197,21 +198,21 @@ def step3():
|
||||
def step4():
|
||||
response.view = 'wizard/step.html'
|
||||
form = SQLFORM.factory(Field('pages', 'list:string',
|
||||
default=session.app['pages']))
|
||||
default=session.app['pages']), _class="span7 well well-small")
|
||||
if form.accepts(request.vars):
|
||||
session.app['pages'] = [clean(t)
|
||||
for t in listify(form.vars.pages)
|
||||
if t.strip()]
|
||||
if session.app['pages']:
|
||||
redirect(URL('step5', args=0))
|
||||
redirect(URL('step5', args=0) + '/#xwizard_form')
|
||||
else:
|
||||
redirect(URL('step6'))
|
||||
redirect(URL('step6') + '/#xwizard_form')
|
||||
return dict(step='4: Pages', form=form)
|
||||
|
||||
|
||||
def step5():
|
||||
response.view = 'wizard/step.html'
|
||||
n = int(request.args(0) or 0)
|
||||
n = int(request.args(-1) or 0)
|
||||
m = len(session.app['pages'])
|
||||
if n >= m:
|
||||
redirect(URL('step4'))
|
||||
@@ -221,13 +222,13 @@ def step5():
|
||||
default=session.app.get('page_' + page, []),
|
||||
comment=A('use markmin',
|
||||
_href=markmin_url, _target='_blank')),
|
||||
formstyle='table2cols')
|
||||
formstyle='table2cols', _class="span7 well well-small")
|
||||
if form.accepts(request.vars):
|
||||
session.app['page_' + page] = form.vars.content
|
||||
if n < m - 1:
|
||||
redirect(URL('step5', args=n + 1))
|
||||
redirect(URL('step5', args=n + 1) + '/#xwizard_form')
|
||||
else:
|
||||
redirect(URL('step6'))
|
||||
redirect(URL('step6') + '/#xwizard_form')
|
||||
return dict(step='5: View for page "%s" (%s of %s)' % (page, n + 1, m), form=form)
|
||||
|
||||
|
||||
@@ -242,7 +243,8 @@ def step6():
|
||||
Field('generate_menu', 'boolean', default=True),
|
||||
Field('apply_layout', 'boolean', default=True),
|
||||
Field('erase_database', 'boolean', default=True),
|
||||
Field('populate_database', 'boolean', default=True))
|
||||
Field('populate_database', 'boolean', default=True),
|
||||
_id="generate_form", _class="form-horizontal span7 well well-small")
|
||||
if form.accepts(request.vars):
|
||||
if DEMO_MODE:
|
||||
session.flash = T('Application cannot be generated in demo mode')
|
||||
|
||||
390
applications/admin/languages/cs.py
Normal file
@@ -0,0 +1,390 @@
|
||||
# coding: utf8
|
||||
{
|
||||
'!langcode!': 'cs-cz',
|
||||
'!langname!': '?e?tina',
|
||||
'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': 'Kolonka "Upravit" je nepovinn? v?raz, nap??klad "pole1=\'nov?hodnota\'". V?sledky datab?zov?ho JOINu nem??ete mazat ani upravovat.',
|
||||
'%%{Row} in Table': '%%{??dek} v tabulce',
|
||||
'%%{Row} selected': 'ozna?en?ch %%{??dek}',
|
||||
'%s %%{row} deleted': '%s smazan?ch %%{z?znam}',
|
||||
'%s %%{row} updated': '%s upraven?ch %%{z?znam}',
|
||||
'%s selected': '%s ozna?en?ch',
|
||||
'%Y-%m-%d': '%d.%m.%Y',
|
||||
'%Y-%m-%d %H:%M:%S': '%d.%m.%Y %H:%M:%S',
|
||||
'(requires internet access)': '(vy?aduje p?ipojen? k internetu)',
|
||||
'(something like "it-it")': '(nap??klad "cs-cs")',
|
||||
'@markmin\x01(file **gluon/contrib/plural_rules/%s.py** is not found)': '(soubor **gluon/contrib/plural_rules/%s.py** nenalezen)',
|
||||
'@markmin\x01Searching: **%s** %%{file}': 'Hled?n?: **%s** %%{soubor}',
|
||||
'About': 'O programu',
|
||||
'About application': 'O aplikaci',
|
||||
'Access Control': '??zen? p??stupu',
|
||||
'Add breakpoint': 'P?idat bod p?eru?en?',
|
||||
'Additional code for your application': 'Dal?? k?d pro Va?i aplikaci',
|
||||
'Admin language': 'jazyk rozhran?',
|
||||
'Administrative interface': 'pro administr?torsk? rozhran? klikn?te sem',
|
||||
'Administrative Interface': 'Administr?torsk? rozhran?',
|
||||
'administrative interface': 'rozhran? pro spr?vu',
|
||||
'Administrator Password:': 'Administr?torsk? heslo:',
|
||||
'Ajax Recipes': 'Recepty s ajaxem',
|
||||
'and rename it:': 'a p?ejmenovat na:',
|
||||
'appadmin': 'appadmin',
|
||||
'appadmin is disabled because insecure channel': 'appadmin je zak?zan? bez zabezpe?en?ho spojen?',
|
||||
'application "%s" uninstalled': 'application "%s" odinstalov?na',
|
||||
'application compiled': 'aplikace zkompilov?na',
|
||||
'Application name:': 'N?zev aplikace:',
|
||||
'are not used': 'nepou?ita',
|
||||
'are not used yet': 'je?t? nepou?ita',
|
||||
'Are you sure you want to delete this object?': 'Opravdu chcete odstranit tento objekt?',
|
||||
'Are you sure you want to uninstall application "%s"?': 'Opravdu chcete odinstalovat aplikaci "%s"?',
|
||||
'Available Databases and Tables': 'Dostupn? datab?ze a tabulky',
|
||||
'back': 'zp?t',
|
||||
'Basics': 'Basics',
|
||||
'Begin': 'Za??t',
|
||||
'breakpoint': 'bod p?eru?en?',
|
||||
'Breakpoints': 'Body p?eru?en?',
|
||||
'breakpoints': 'body p?eru?en?',
|
||||
'Buy this book': 'Koupit web2py knihu',
|
||||
'Cache': 'Cache',
|
||||
'cache': 'cache',
|
||||
'Cache Keys': 'Kl??e cache',
|
||||
'cache, errors and sessions cleaned': 'cache, chyby a relace byly pro?i?t?ny',
|
||||
'can be a git repo': 'm??e to b?t git repo',
|
||||
'Cancel': 'Storno',
|
||||
'Cannot be empty': 'Nem??e b?t pr?zdn?',
|
||||
'Change admin password': 'Zm?nit heslo pro str?vu aplikac?',
|
||||
'Change password': 'Zm?na hesla',
|
||||
'check all': 'v?e ozna?it',
|
||||
'Check for upgrades': 'Zkusit aktualizovat',
|
||||
'Check to delete': 'Ozna?it ke smaz?n?',
|
||||
'Check to delete:': 'Ozna?it ke smaz?n?:',
|
||||
'Checking for upgrades...': 'Zji??uji, zda jsou k dispozici aktualizace...',
|
||||
'Clean': 'Pro?istit',
|
||||
'Clear CACHE?': 'Vymazat CACHE?',
|
||||
'Clear DISK': 'Vymazat DISK',
|
||||
'Clear RAM': 'Vymazat RAM',
|
||||
'Click row to expand traceback': 'Pro rozbalen? stopy, klikn?te na ??dek',
|
||||
'Click row to view a ticket': 'Pro zobrazen? chyby (ticketu), klikn?te na ??dku...',
|
||||
'Client IP': 'IP adresa klienta',
|
||||
'collapse/expand all': 'v?e sbalit/rozbalit',
|
||||
'Community': 'Komunita',
|
||||
'Compile': 'Zkompilovat',
|
||||
'compiled application removed': 'zkompilovan? aplikace smaz?na',
|
||||
'Components and Plugins': 'Komponenty a z?suvn? moduly',
|
||||
'Condition': 'Podm?nka',
|
||||
'Controller': 'Kontrol?r (Controller)',
|
||||
'Controllers': 'Kontrol?ry',
|
||||
'controllers': 'kontrol?ry',
|
||||
'Copyright': 'Copyright',
|
||||
'Count': 'Po?et',
|
||||
'Create': 'Vytvo?it',
|
||||
'create file with filename:': 'vytvo?it soubor s n?zvem:',
|
||||
'created by': 'vytvo?il',
|
||||
'Created By': 'Vytvo?eno - k?m',
|
||||
'Created On': 'Vytvo?eno - kdy',
|
||||
'crontab': 'crontab',
|
||||
'Current request': 'Aktu?ln? po?adavek',
|
||||
'Current response': 'Aktu?ln? odpov??',
|
||||
'Current session': 'Aktu?ln? relace',
|
||||
'currently running': 'pr?v? b???',
|
||||
'currently saved or': 'ulo?eno nebo',
|
||||
'customize me!': 'upravte m?!',
|
||||
'data uploaded': 'data nahr?na',
|
||||
'Database': 'Rozhran? datab?ze',
|
||||
'Database %s select': 'datab?ze %s v?b?r',
|
||||
'database administration': 'spr?va datab?ze',
|
||||
'Date and Time': 'Datum a ?as',
|
||||
'day': 'den',
|
||||
'db': 'db',
|
||||
'DB Model': 'Datab?zov? model',
|
||||
'Debug': 'Lad?n?',
|
||||
'Delete': 'Smazat',
|
||||
'delete': 'smazat',
|
||||
'delete all checked': 'smazat v?e ozna?en?',
|
||||
'Delete this file (you will be asked to confirm deletion)': 'Smazat tento soubor (budete po??d?n o potvrzen? maz?n?)',
|
||||
'Delete:': 'Smazat:',
|
||||
'deleted after first hit': 'smazat po prvn?m dosa?en?',
|
||||
'Demo': 'Demo',
|
||||
'Deploy': 'Nahr?t',
|
||||
'Deploy on Google App Engine': 'Nahr?t na Google App Engine',
|
||||
'Deploy to OpenShift': 'Nahr?t na OpenShift',
|
||||
'Deployment Recipes': 'Postupy pro deployment',
|
||||
'Description': 'Popis',
|
||||
'design': 'n?vrh',
|
||||
'direction: ltr': 'direction: ltr',
|
||||
'Disable': 'Zablokovat',
|
||||
'DISK': 'DISK',
|
||||
'Disk Cache Keys': 'Kl??e diskov? cache',
|
||||
'Disk Cleared': 'Disk smaz?n',
|
||||
'docs': 'dokumentace',
|
||||
'Documentation': 'Dokumentace',
|
||||
"Don't know what to do?": 'Nev?te kudy kam?',
|
||||
'done!': 'hotovo!',
|
||||
'Download': 'St?hnout',
|
||||
'download layouts': 'st?hnout moduly rozvr?en? str?nky',
|
||||
'download plugins': 'st?hnout z?suvn? moduly',
|
||||
'E-mail': 'E-mail',
|
||||
'Edit': 'Upravit',
|
||||
'edit all': 'edit all',
|
||||
'Edit application': 'Spr?va aplikace',
|
||||
'Edit current record': 'Upravit aktu?ln? z?znam',
|
||||
'Edit Profile': 'Upravit profil',
|
||||
'Editing file "%s"': '?prava souboru "%s"',
|
||||
'Editing Language file': '?prava jazykov?ho souboru',
|
||||
'Email and SMS': 'Email a SMS',
|
||||
'Enable': 'Odblokovat',
|
||||
'enter a number between %(min)g and %(max)g': 'zadejte ??slo mezi %(min)g a %(max)g',
|
||||
'enter an integer between %(min)g and %(max)g': 'zadejte cel? ??slo mezi %(min)g a %(max)g',
|
||||
'Error': 'Chyba',
|
||||
'Error logs for "%(app)s"': 'Seznam v?skytu chyb pro aplikaci "%(app)s"',
|
||||
'Errors': 'Chyby',
|
||||
'export as csv file': 'exportovat do .csv souboru',
|
||||
'exposes': 'vystavuje',
|
||||
'extends': 'roz?i?uje',
|
||||
'FAQ': '?asto kladen? dotazy',
|
||||
'File': 'Soubor',
|
||||
'file': 'soubor',
|
||||
'file saved on %(time)s': 'soubor ulo?en %(time)s',
|
||||
'Filename': 'N?zev souboru',
|
||||
'filter': 'filtr',
|
||||
'Find Next': 'Naj?t dal??',
|
||||
'Find Previous': 'Naj?t p?edchoz?',
|
||||
'First name': 'K?estn? jm?no',
|
||||
'Forgot username?': 'Zapomn?l jste svoje p?ihla?ovac? jm?no?',
|
||||
'forgot username?': 'zapomn?l jste svoje p?ihla?ovac? jm?no?',
|
||||
'Forms and Validators': 'Formul??e a valid?tory',
|
||||
'Free Applications': 'Aplikace zdarma',
|
||||
'Generate': 'Vytvo?it',
|
||||
'Get from URL:': 'St?hnout z internetu:',
|
||||
'Git Pull': 'Git Pull',
|
||||
'Git Push': 'Git Push',
|
||||
'Globals##debug': 'Glob?ln? prom?nn?',
|
||||
'go!': 'OK!',
|
||||
'Group %(group_id)s created': 'Skupina %(group_id)s vytvo?ena',
|
||||
'Group ID': 'ID skupiny',
|
||||
'Groups': 'Skupiny',
|
||||
'Hello World': 'Ahoj sv?te',
|
||||
'Help': 'N?pov?da',
|
||||
'Hide/Show Translated strings': 'Skr?t/Zobrazit p?elo?en? texty',
|
||||
'Hits': 'Kolikr?t dosa?eno',
|
||||
'Home': 'Domovsk? str?nka',
|
||||
'honored only if the expression evaluates to true': 'br?t v potaz jen kdy? se tato podm?nka vyhodnot? kladn?',
|
||||
'How did you get here?': 'Jak jste se sem vlastn? dostal?',
|
||||
'import': 'import',
|
||||
'Import/Export': 'Import/Export',
|
||||
'includes': 'zahrnuje',
|
||||
'Index': 'Index',
|
||||
'insert new': 'vlo?it nov? z?znam ',
|
||||
'insert new %s': 'vlo?it nov? z?znam %s',
|
||||
'Install': 'Instalovat',
|
||||
'Installed applications': 'Nainstalovan? aplikace',
|
||||
'Internal State': 'Vnit?n? stav',
|
||||
'Introduction': '?vod',
|
||||
'Invalid email': 'Neplatn? email',
|
||||
'Invalid password': 'Nespr?vn? heslo',
|
||||
'invalid password.': 'neplatn? heslo',
|
||||
'Invalid Query': 'Neplatn? dotaz',
|
||||
'invalid request': 'Neplatn? po?adavek',
|
||||
'Is Active': 'Je aktivn?',
|
||||
'It is %s %%{day} today.': 'Dnes je to %s %%{den}.',
|
||||
'Key': 'Kl??',
|
||||
'Key bindings': 'Vazby kl???',
|
||||
'languages': 'jazyky',
|
||||
'Languages': 'Jazyky',
|
||||
'Last name': 'P??jmen?',
|
||||
'Last saved on:': 'Naposledy ulo?eno:',
|
||||
'Layout': 'Rozvr?en? str?nky (layout)',
|
||||
'Layout Plugins': 'Moduly rozvr?en? str?nky (Layout Plugins)',
|
||||
'Layouts': 'Rozvr?en? str?nek',
|
||||
'License for': 'Licence pro',
|
||||
'Line number': '??slo ??dku',
|
||||
'LineNo': '?.??dku',
|
||||
'Live Chat': 'Online pokec',
|
||||
'loading...': 'nahr?v?m...',
|
||||
'Locals##debug': 'Lok?ln? prom?nn?',
|
||||
'Logged in': 'P?ihl??en? prob?hlo ?sp??n?',
|
||||
'Logged out': 'Odhl??en? prob?hlo ?sp??n?',
|
||||
'Login': 'P?ihl?sit se',
|
||||
'login': 'p?ihl?sit se',
|
||||
'Login to the Administrative Interface': 'P?ihl?sit se do Spr?vce aplikac?',
|
||||
'logout': 'odhl?sit se',
|
||||
'Logout': 'Odhl?sit se',
|
||||
'Lost Password': 'Zapomn?l jste heslo',
|
||||
'Lost password?': 'Zapomn?l jste heslo?',
|
||||
'lost password?': 'zapomn?l jste heslo?',
|
||||
'Manage Cache': 'Manage Cache',
|
||||
'Menu Model': 'Model rozbalovac? nab?dky',
|
||||
'Models': 'Modely',
|
||||
'models': 'modely',
|
||||
'Modified By': 'Zm?n?no - k?m',
|
||||
'Modified On': 'Zm?n?no - kdy',
|
||||
'Modules': 'Moduly',
|
||||
'modules': 'moduly',
|
||||
'My Sites': 'Spr?va aplikac?',
|
||||
'Name': 'Jm?no',
|
||||
'New Application Wizard': 'Nov? pr?vodce aplikac?',
|
||||
'New application wizard': 'Nov? pr?vodce aplikac?',
|
||||
'New password': 'Nov? heslo',
|
||||
'New Record': 'Nov? z?znam',
|
||||
'new record inserted': 'nov? z?znam byl zalo?en',
|
||||
'New simple application': 'Vytvo?it primitivn? aplikaci',
|
||||
'next 100 rows': 'dal??ch 100 ??dk?',
|
||||
'No databases in this application': 'V t?to aplik?ci nejsou ??dn? datab?ze',
|
||||
'No Interaction yet': 'Je?t? ??dn? interakce nenastala',
|
||||
'No ticket_storage.txt found under /private folder': 'Soubor ticket_storage.txt v adres??i /private nenalezen',
|
||||
'Object or table name': 'Objekt ?i tabulka',
|
||||
'Old password': 'P?vodn? heslo',
|
||||
'online designer': 'online n?vrh??',
|
||||
'Online examples': 'P??klady online',
|
||||
'or import from csv file': 'nebo importovat z .csv souboru',
|
||||
'Origin': 'P?vod',
|
||||
'Original/Translation': 'Origin?l/P?eklad',
|
||||
'Other Plugins': 'Ostatn? moduly',
|
||||
'Other Recipes': 'Ostatn? z?suvn? moduly',
|
||||
'Overview': 'P?ehled',
|
||||
'Overwrite installed app': 'P?epsat instalovanou aplikaci',
|
||||
'Pack all': 'Zabalit',
|
||||
'Pack compiled': 'Zabalit zkompilovan?',
|
||||
'password': 'heslo',
|
||||
'Password': 'Heslo',
|
||||
"Password fields don't match": 'Hesla se neshoduj?',
|
||||
'Please': 'Pros?m',
|
||||
'plugins': 'z?suvn? moduly',
|
||||
'Plugins': 'Z?suvn? moduly',
|
||||
'Plural-Forms:': 'Mno?n? ??sla:',
|
||||
'Powered by': 'Poh?n?no',
|
||||
'Preface': 'P?edmluva',
|
||||
'previous 100 rows': 'p?edchoz?ch 100 ??dk?',
|
||||
'Private files': 'Soukrom? soubory',
|
||||
'private files': 'soukrom? soubory',
|
||||
'profile': 'profil',
|
||||
'Project Progress': 'V?voj projektu',
|
||||
'Python': 'Python',
|
||||
'Query:': 'Dotaz:',
|
||||
'Quick Examples': 'Kr?tk? p??klady',
|
||||
'RAM': 'RAM',
|
||||
'RAM Cache Keys': 'Kl??e RAM Cache',
|
||||
'Ram Cleared': 'RAM smaz?na',
|
||||
'Readme': 'N?pov?da',
|
||||
'Recipes': 'Postupy jak na to',
|
||||
'Record': 'Z?znam',
|
||||
'record does not exist': 'z?znam neexistuje',
|
||||
'Record ID': 'ID z?znamu',
|
||||
'Record id': 'id z?znamu',
|
||||
'refresh': 'obnovte',
|
||||
'register': 'registrovat',
|
||||
'Register': 'Zaregistrovat se',
|
||||
'Registration identifier': 'Registra?n? identifik?tor',
|
||||
'Registration key': 'Registra?n? kl??',
|
||||
'Reload routes': 'Znovu nahr?t cesty',
|
||||
'Remember me (for 30 days)': 'Zapamatovat na 30 dn?',
|
||||
'Remove compiled': 'Odstranit zkompilovan?',
|
||||
'Removed Breakpoint on %s at line %s': 'Bod p?eru?en? smaz?n - soubor %s na ??dce %s',
|
||||
'Replace': 'Zam?nit',
|
||||
'Replace All': 'Zam?nit v?e',
|
||||
'Reset Password key': 'Reset registra?n?ho kl??e',
|
||||
'restart': 'restart',
|
||||
'restore': 'obnovit',
|
||||
'Retrieve username': 'Z?skat p?ihla?ovac? jm?no',
|
||||
'revert': 'vr?tit se k p?vodn?mu',
|
||||
'Role': 'Role',
|
||||
'Rows in Table': 'Z?znamy v tabulce',
|
||||
'Rows selected': 'Z?znam? zobrazeno',
|
||||
'rules are not defined': 'pravidla nejsou definov?na',
|
||||
"Run tests in this file (to run all files, you may also use the button labelled 'test')": "Spust? testy v tomto souboru (ke spu?t?n? v?ech test?, pou?ijte tla??tko 'test')",
|
||||
'Running on %s': 'B??? na %s',
|
||||
'Save': 'Ulo?it',
|
||||
'Save via Ajax': 'Ulo?it pomoc? Ajaxu',
|
||||
'Saved file hash:': 'hash ulo?en?ho souboru:',
|
||||
'Semantic': 'Modul semantic',
|
||||
'Services': 'Slu?by',
|
||||
'Set Breakpoint on %s at line %s: %s': 'Bod p?eru?en? nastaven v souboru %s na ??dce %s: %s',
|
||||
'shell': 'p??kazov? ??dka',
|
||||
'Site': 'Spr?va aplikac?',
|
||||
'Size of cache:': 'Velikost cache:',
|
||||
'skip to generate': 'skip to generate',
|
||||
'Sorry, could not find mercurial installed': 'Bohu?el mercurial nen? nainstalov?n.',
|
||||
'Start a new app': 'Vytvo?it novou aplikaci',
|
||||
'Start searching': 'Za??t hled?n?',
|
||||
'Start wizard': 'Spustit pr?vodce',
|
||||
'state': 'stav',
|
||||
'static': 'statick? soubory',
|
||||
'Static files': 'Statick? soubory',
|
||||
'Statistics': 'Statistika',
|
||||
'Step': 'Step',
|
||||
'Stylesheet': 'CSS styly',
|
||||
'submit': 'odeslat',
|
||||
'Submit': 'Odeslat',
|
||||
'successful': '?sp??n?',
|
||||
'Support': 'Podpora',
|
||||
'Sure you want to delete this object?': 'Opravdu chcete smazat tento objekt?',
|
||||
'Table': 'tabulka',
|
||||
'Table name': 'N?zev tabulky',
|
||||
'Temporary': 'Do?asn?',
|
||||
'test': 'test',
|
||||
'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.': '"Dotaz" je podm?nka, nap??klad "db.tabulka1.pole1==\'hodnota\'". Podm?nka "db.tabulka1.pole1==db.tabulka2.pole2" pak vytvo?? SQL JOIN.',
|
||||
'The application logic, each URL path is mapped in one exposed function in the controller': 'Logika aplikace: ka?d? URL je mapov?na na funkci vystavovanou kontrol?rem.',
|
||||
'The Core': 'J?dro (The Core)',
|
||||
'The data representation, define database tables and sets': 'Reprezentace dat: definovat tabulky datab?ze a z?znamy',
|
||||
'The output of the file is a dictionary that was rendered by the view %s': 'V?stup ze souboru je slovn?k, kter? se zobrazil v pohledu %s.',
|
||||
'The presentations layer, views are also known as templates': 'Prezenta?n? vrstva: pohledy ?i templaty (?ablony)',
|
||||
'The Views': 'Pohledy (The Views)',
|
||||
'There are no plugins': '??dn? moduly nejsou instalov?ny.',
|
||||
'There are no private files': '??dn? soukrom? soubory neexistuj?.',
|
||||
'These files are not served, they are only available from within your app': 'Tyto soubory jsou klient?m nep??stupn?. K dispozici jsou pouze v r?mci aplikace.',
|
||||
'These files are served without processing, your images go here': 'Tyto soubory jsou serv?rov?ny bez p??davn? logiky, sem pat?? nap?. obr?zky.',
|
||||
'This App': 'Tato aplikace',
|
||||
'This is a copy of the scaffolding application': 'Toto je kopie aplikace skelet.',
|
||||
'this page to see if a breakpoint was hit and debug interaction is required.': 'tuto str?nku, abyste uvid?li, zda se dos?hlo bodu p?eru?en?.',
|
||||
'Ticket': 'Ticket',
|
||||
'Time in Cache (h:m:s)': '?as v Cache (h:m:s)',
|
||||
'Timestamp': '?asov? raz?tko',
|
||||
'to previous version.': 'k p?edchoz? verzi.',
|
||||
'To create a plugin, name a file/folder plugin_[name]': 'Z?suvn? modul vytvo??te tak, ?e pojmenujete soubor/adres?? plugin_[jm?no modulu]',
|
||||
'To emulate a breakpoint programatically, write:': 'K nastaven? bodu p?eru?en? v k?du programu, napi?te:',
|
||||
'to use the debugger!': ', abyste mohli lad?c? program pou??vat!',
|
||||
'toggle breakpoint': 'vyp./zap. bod p?eru?en?',
|
||||
'Toggle Fullscreen': 'Na celou obrazovku a zp?t',
|
||||
'too short': 'P??li? kr?tk?',
|
||||
'Translation strings for the application': 'P?eklad text? pro aplikaci',
|
||||
'Try the mobile interface': 'Zkuste rozhran? pro mobiln? za??zen?',
|
||||
'Twitter': 'Twitter',
|
||||
'unable to parse csv file': 'csv soubor ned? sa zpracovat',
|
||||
'uncheck all': 'v?e odzna?it',
|
||||
'Uninstall': 'Odinstalovat',
|
||||
'update': 'aktualizovat',
|
||||
'update all languages': 'aktualizovat v?echny jazyky',
|
||||
'Update:': 'Upravit:',
|
||||
'upload': 'nahr?t',
|
||||
'Upload a package:': 'Nahr?t bal?k:',
|
||||
'Upload and install packed application': 'Nahr?t a instalovat zabalenou aplikaci',
|
||||
'upload file:': 'nahr?t soubor:',
|
||||
'upload plugin file:': 'nahr?t soubor modulu:',
|
||||
'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.': 'Pou?ijte (...)&(...) pro AND, (...)|(...) pro OR a ~(...) pro NOT pro sestaven? slo?it?j??ch dotaz?.',
|
||||
'User %(id)s Logged-in': 'U?ivatel %(id)s p?ihl??en',
|
||||
'User %(id)s Logged-out': 'U?ivatel %(id)s odhl??en',
|
||||
'User %(id)s Password changed': 'U?ivatel %(id)s zm?nil heslo',
|
||||
'User %(id)s Profile updated': 'U?ivatel %(id)s upravil profil',
|
||||
'User %(id)s Registered': 'U?ivatel %(id)s se zaregistroval',
|
||||
'User %(id)s Username retrieved': 'U?ivatel %(id)s si nachal zaslat p?ihla?ovac? jm?no',
|
||||
'User ID': 'ID u?ivatele',
|
||||
'Username': 'P?ihla?ovac? jm?no',
|
||||
'Verify Password': 'Zopakujte heslo',
|
||||
'Version %s.%s.%s (%s) %s': 'Verze %s.%s.%s (%s) %s',
|
||||
'Versioning': 'Verzov?n?',
|
||||
'Videos': 'Videa',
|
||||
'View': 'Pohled (View)',
|
||||
'Views': 'Pohledy',
|
||||
'views': 'pohledy',
|
||||
'Web Framework': 'Web Framework',
|
||||
'web2py is up to date': 'M?te aktu?ln? verzi web2py.',
|
||||
'web2py online debugger': 'Lad?c? online web2py program',
|
||||
'web2py Recent Tweets': '?t?bet?n? na Twitteru o web2py',
|
||||
'Welcome': 'V?tejte',
|
||||
'Welcome to web2py': 'Vitejte ve web2py',
|
||||
'Welcome to web2py!': 'V?tejte ve web2py!',
|
||||
'Which called the function %s located in the file %s': 'kter? zavolala funkci %s v souboru (kontrol?ru) %s.',
|
||||
'You are successfully running web2py': '?sp??n? jste spustili web2py.',
|
||||
'You can also set and remove breakpoint in the edit window, using the Toggle Breakpoint button': 'Nastavovat a mazat body p?eru?en? je t?? mo?no v r?mci editov?n? zdrojov?ho souboru p?es tla??tko Vyp./Zap. bod p?eru?en?',
|
||||
'You can modify this application and adapt it to your needs': 'Tuto aplikaci si m??ete upravit a p?izp?sobit ji sv?m pot?eb?m.',
|
||||
'You need to set up and reach a': 'Je t?eba nejprve nastavit a doj?t a? na',
|
||||
'You visited the url %s': 'Nav?t?vili jste str?nku %s,',
|
||||
}
|
||||
@@ -3,154 +3,28 @@
|
||||
'!langcode!': 'es',
|
||||
'!langname!': 'Español',
|
||||
'"update" is an optional expression like "field1=\'newvalue\'". You cannot update or delete the results of a JOIN': '"actualice" es una expresión opcional como "campo1=\'nuevo_valor\'". No se puede actualizar o eliminar resultados de un JOIN',
|
||||
'%Y-%m-%d': '%Y-%m-%d',
|
||||
'%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S',
|
||||
'%s %%{row} deleted': '%s filas eliminadas',
|
||||
'%s %%{row} updated': '%s filas actualizadas',
|
||||
'%Y-%m-%d': '%Y-%m-%d',
|
||||
'%Y-%m-%d %H:%M:%S': '%Y-%m-%d %H:%M:%S',
|
||||
'(something like "it-it")': '(algo como "it-it")',
|
||||
'@markmin\x01(file **gluon/contrib/plural_rules/%s.py** is not found)': '(file **gluon/contrib/plural_rules/%s.py** is not found)',
|
||||
'@markmin\x01Searching: **%s** %%{file}': 'Searching: **%s** files',
|
||||
'A new version of web2py is available': 'Hay una nueva versión de web2py disponible',
|
||||
'A new version of web2py is available: %s': 'Hay una nueva versión de web2py disponible: %s',
|
||||
'ATTENTION: Login requires a secure (HTTPS) connection or running on localhost.': 'ATENCION: Inicio de sesión requiere una conexión segura (HTTPS) o localhost.',
|
||||
'ATTENTION: TESTING IS NOT THREAD SAFE SO DO NOT PERFORM MULTIPLE TESTS CONCURRENTLY.': 'ATENCION: NO EJECUTE VARIAS PRUEBAS SIMULTANEAMENTE, NO SON THREAD SAFE.',
|
||||
'ATTENTION: you cannot edit the running application!': 'ATENCION: no puede modificar la aplicación que se ejecuta!',
|
||||
'About': 'acerca de',
|
||||
'About application': 'Acerca de la aplicación',
|
||||
'Admin is disabled because insecure channel': 'Admin deshabilitado, el canal no es seguro',
|
||||
'Admin is disabled because unsecure channel': 'Admin deshabilitado, el canal no es seguro',
|
||||
'Administrator Password:': 'Contraseña del Administrador:',
|
||||
'Are you sure you want to delete file "%s"?': '¿Está seguro que desea eliminar el archivo "%s"?',
|
||||
'Are you sure you want to delete plugin "%s"?': '¿Está seguro que quiere eliminar el plugin "%s"?',
|
||||
'Are you sure you want to uninstall application "%s"': '¿Está seguro que desea desinstalar la aplicación "%s"',
|
||||
'Are you sure you want to uninstall application "%s"?': '¿Está seguro que desea desinstalar la aplicación "%s"?',
|
||||
'Are you sure you want to upgrade web2py now?': '¿Está seguro que desea actualizar web2py ahora?',
|
||||
'Available databases and tables': 'Bases de datos y tablas disponibles',
|
||||
'Cannot be empty': 'No puede estar vacío',
|
||||
'Cannot compile: there are errors in your app. Debug it, correct errors and try again.': 'No se puede compilar: hay errores en su aplicación. Depure, corrija errores y vuelva a intentarlo.',
|
||||
'Cannot compile: there are errors in your app:': 'No se puede compilar: hay errores en su aplicación:',
|
||||
'Change Password': 'Cambie Contraseña',
|
||||
'Change admin password': 'cambie contraseña admin',
|
||||
'Check to delete': 'Marque para eliminar',
|
||||
'Checking for upgrades...': 'Buscando actulizaciones...',
|
||||
'Clean': 'limpiar',
|
||||
'Click row to expand traceback': 'Click row to expand traceback',
|
||||
'Client IP': 'IP del Cliente',
|
||||
'Compile': 'compilar',
|
||||
'Controllers': 'Controladores',
|
||||
'Count': 'Count',
|
||||
'Create': 'crear',
|
||||
'Create new application using the Wizard': 'Create new application using the Wizard',
|
||||
'Create new simple application': 'Cree una nueva aplicación',
|
||||
'Current request': 'Solicitud en curso',
|
||||
'Current response': 'Respuesta en curso',
|
||||
'Current session': 'Sesión en curso',
|
||||
'DESIGN': 'DISEÑO',
|
||||
'Date and Time': 'Fecha y Hora',
|
||||
'Delete': 'Elimine',
|
||||
'Delete:': 'Elimine:',
|
||||
'Deploy on Google App Engine': 'Instale en Google App Engine',
|
||||
'Description': 'Descripción',
|
||||
'Design for': 'Diseño para',
|
||||
'E-mail': 'Correo electrónico',
|
||||
'EDIT': 'EDITAR',
|
||||
'Edit': 'editar',
|
||||
'Edit Profile': 'Editar Perfil',
|
||||
'Edit application': 'Editar aplicación',
|
||||
'Edit current record': 'Edite el registro actual',
|
||||
'Editing Language file': 'Editando archivo de lenguaje',
|
||||
'Editing file': 'Editando archivo',
|
||||
'Editing file "%s"': 'Editando archivo "%s"',
|
||||
'Enterprise Web Framework': 'Armazón Empresarial para Internet',
|
||||
'Error': 'Error',
|
||||
'Error logs for "%(app)s"': 'Bitácora de errores en "%(app)s"',
|
||||
'Errors': 'errores',
|
||||
'Exception instance attributes': 'Atributos de la instancia de Excepción',
|
||||
'File': 'File',
|
||||
'First name': 'Nombre',
|
||||
'Functions with no doctests will result in [passed] tests.': 'Funciones sin doctests equivalen a pruebas [aceptadas].',
|
||||
'Group ID': 'ID de Grupo',
|
||||
'Hello World': 'Hola Mundo',
|
||||
'Help': 'ayuda',
|
||||
'If the report above contains a ticket number it indicates a failure in executing the controller, before any attempt to execute the doctests. This is usually due to an indentation error or an error outside function code.\nA green title indicates that all tests (if defined) passed. In this case test results are not shown.': 'Si el reporte anterior contiene un número de tiquete este indica un falla en la ejecución del controlador, antes de cualquier intento de ejecutat doctests. Esto generalmente se debe a un error en la indentación o un error por fuera del código de la función.\r\nUn titulo verde indica que todas las pruebas pasaron (si existen). En dicho caso los resultados no se muestran.',
|
||||
'Import/Export': 'Importar/Exportar',
|
||||
'Install': 'instalar',
|
||||
'Installed applications': 'Aplicaciones instaladas',
|
||||
'Internal State': 'Estado Interno',
|
||||
'Invalid Query': 'Consulta inválida',
|
||||
'Invalid action': 'Acción inválida',
|
||||
'Invalid email': 'Correo inválido',
|
||||
'Language files (static strings) updated': 'Archivos de lenguaje (cadenas estáticas) actualizados',
|
||||
'Languages': 'Lenguajes',
|
||||
'Last name': 'Apellido',
|
||||
'Last saved on:': 'Guardado en:',
|
||||
'License for': 'Licencia para',
|
||||
'Login': 'Inicio de sesión',
|
||||
'Login to the Administrative Interface': 'Inicio de sesión para la Interfaz Administrativa',
|
||||
'Logout': 'fin de sesión',
|
||||
'Lost Password': 'Contraseña perdida',
|
||||
'Models': 'Modelos',
|
||||
'Modules': 'Módulos',
|
||||
'NO': 'NO',
|
||||
'Name': 'Nombre',
|
||||
'New Record': 'Registro nuevo',
|
||||
'No databases in this application': 'No hay bases de datos en esta aplicación',
|
||||
'Origin': 'Origen',
|
||||
'Original/Translation': 'Original/Traducción',
|
||||
'Overwrite installed app': 'sobreescriba aplicación instalada',
|
||||
'PAM authenticated user, cannot change password here': 'usuario autenticado por PAM, no puede cambiar la contraseña aquí',
|
||||
'Pack all': 'empaquetar todo',
|
||||
'Pack compiled': 'empaquete compiladas',
|
||||
'Password': 'Contraseña',
|
||||
'Peeking at file': 'Visualizando archivo',
|
||||
'Plugin "%s" in application': 'Plugin "%s" en aplicación',
|
||||
'Plugins': 'Plugins',
|
||||
'Powered by': 'Este sitio usa',
|
||||
'Query:': 'Consulta:',
|
||||
'Record ID': 'ID de Registro',
|
||||
'Register': 'Registrese',
|
||||
'Registration key': 'Contraseña de Registro',
|
||||
'Remove compiled': 'eliminar compiladas',
|
||||
'Resolve Conflict file': 'archivo Resolución de Conflicto',
|
||||
'Role': 'Rol',
|
||||
'Rows in table': 'Filas en la tabla',
|
||||
'Rows selected': 'Filas seleccionadas',
|
||||
'Saved file hash:': 'Hash del archivo guardado:',
|
||||
'Site': 'sitio',
|
||||
'Static files': 'Archivos estáticos',
|
||||
'Sure you want to delete this object?': '¿Está seguro que desea eliminar este objeto?',
|
||||
'TM': 'MR',
|
||||
'Table name': 'Nombre de la tabla',
|
||||
'Testing application': 'Probando aplicación',
|
||||
'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.': 'La "consulta" es una condición como "db.tabla1.campo1==\'valor\'". Algo como "db.tabla1.campo1==db.tabla2.campo2" resulta en un JOIN SQL.',
|
||||
'There are no controllers': 'No hay controladores',
|
||||
'There are no models': 'No hay modelos',
|
||||
'There are no modules': 'No hay módulos',
|
||||
'There are no static files': 'No hay archivos estáticos',
|
||||
'There are no translators, only default language is supported': 'No hay traductores, sólo el lenguaje por defecto es soportado',
|
||||
'There are no views': 'No hay vistas',
|
||||
'This is the %(filename)s template': 'Esta es la plantilla %(filename)s',
|
||||
'Ticket': 'Tiquete',
|
||||
'Timestamp': 'Timestamp',
|
||||
'To create a plugin, name a file/folder plugin_[name]': 'Para crear un plugin, nombre un archivo/carpeta plugin_[nombre]',
|
||||
'Unable to check for upgrades': 'No es posible verificar la existencia de actualizaciones',
|
||||
'Unable to download': 'No es posible la descarga',
|
||||
'Unable to download app': 'No es posible descargar la aplicación',
|
||||
'Unable to download app because:': 'No es posible descargar la aplicación porque:',
|
||||
'Unable to download because': 'No es posible descargar porque',
|
||||
'Uninstall': 'desinstalar',
|
||||
'Update:': 'Actualice:',
|
||||
'Upload & install packed application': 'Suba e instale aplicación empaquetada',
|
||||
'Upload existing application': 'Suba esta aplicación',
|
||||
'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.': 'Use (...)&(...) para AND, (...)|(...) para OR, y ~(...) para NOT, para crear consultas más complejas.',
|
||||
'User ID': 'ID de Usuario',
|
||||
'Version': 'Versión',
|
||||
'Views': 'Vistas',
|
||||
'Welcome to web2py': 'Bienvenido a web2py',
|
||||
'YES': 'SI',
|
||||
'additional code for your application': 'código adicional para su aplicación',
|
||||
'Additional code for your application': 'Additional code for your application',
|
||||
'admin disabled because no admin password': ' por falta de contraseña',
|
||||
'admin disabled because not supported on google app engine': 'admin deshabilitado, no es soportado en GAE',
|
||||
'admin disabled because unable to access password file': 'admin deshabilitado, imposible acceder al archivo con la contraseña',
|
||||
'Admin is disabled because insecure channel': 'Admin deshabilitado, el canal no es seguro',
|
||||
'Admin is disabled because unsecure channel': 'Admin deshabilitado, el canal no es seguro',
|
||||
'Admin language': 'Admin language',
|
||||
'administrative interface': 'administrative interface',
|
||||
'Administrator Password:': 'Contraseña del Administrador:',
|
||||
'An error occured, please %s the page': 'An error occured, please %s the page',
|
||||
'and rename it (required):': 'y renombrela (requerido):',
|
||||
'and rename it:': ' y renombrelo:',
|
||||
'appadmin': 'appadmin',
|
||||
@@ -158,47 +32,115 @@
|
||||
'application "%s" uninstalled': 'aplicación "%s" desinstalada',
|
||||
'application compiled': 'aplicación compilada',
|
||||
'application is compiled and cannot be designed': 'la aplicación está compilada y no puede ser modificada',
|
||||
'are not used': 'are not used',
|
||||
'are not used yet': 'are not used yet',
|
||||
'Are you sure you want to delete file "%s"?': '¿Está seguro que desea eliminar el archivo "%s"?',
|
||||
'Are you sure you want to delete plugin "%s"?': '¿Está seguro que quiere eliminar el plugin "%s"?',
|
||||
'Are you sure you want to delete this object?': 'Are you sure you want to delete this object?',
|
||||
'Are you sure you want to uninstall application "%s"': '¿Está seguro que desea desinstalar la aplicación "%s"',
|
||||
'Are you sure you want to uninstall application "%s"?': '¿Está seguro que desea desinstalar la aplicación "%s"?',
|
||||
'Are you sure you want to upgrade web2py now?': '¿Está seguro que desea actualizar web2py ahora?',
|
||||
'arguments': 'argumentos',
|
||||
'at char %s': 'at char %s',
|
||||
'at line %s': 'at line %s',
|
||||
'ATTENTION: Login requires a secure (HTTPS) connection or running on localhost.': 'ATENCION: Inicio de sesión requiere una conexión segura (HTTPS) o localhost.',
|
||||
'ATTENTION: TESTING IS NOT THREAD SAFE SO DO NOT PERFORM MULTIPLE TESTS CONCURRENTLY.': 'ATENCION: NO EJECUTE VARIAS PRUEBAS SIMULTANEAMENTE, NO SON THREAD SAFE.',
|
||||
'ATTENTION: you cannot edit the running application!': 'ATENCION: no puede modificar la aplicación que se ejecuta!',
|
||||
'Autocomplete': 'Autocomplete',
|
||||
'Available databases and tables': 'Bases de datos y tablas disponibles',
|
||||
'back': 'atrás',
|
||||
'breakpoint': 'breakpoint',
|
||||
'breakpoints': 'breakpoints',
|
||||
'browse': 'buscar',
|
||||
'cache': 'cache',
|
||||
'cache, errors and sessions cleaned': 'cache, errores y sesiones eliminados',
|
||||
'Cannot be empty': 'No puede estar vacío',
|
||||
'Cannot compile: there are errors in your app. Debug it, correct errors and try again.': 'No se puede compilar: hay errores en su aplicación. Depure, corrija errores y vuelva a intentarlo.',
|
||||
'Cannot compile: there are errors in your app:': 'No se puede compilar: hay errores en su aplicación:',
|
||||
'cannot create file': 'no es posible crear archivo',
|
||||
'cannot upload file "%(filename)s"': 'no es posible subir archivo "%(filename)s"',
|
||||
'Change admin password': 'cambie contraseña admin',
|
||||
'Change Password': 'Cambie Contraseña',
|
||||
'check all': 'marcar todos',
|
||||
'Check to delete': 'Marque para eliminar',
|
||||
'Checking for upgrades...': 'Buscando actulizaciones...',
|
||||
'Clean': 'limpiar',
|
||||
'click here for online examples': 'haga clic aquí para ver ejemplos en línea',
|
||||
'click here for the administrative interface': 'haga clic aquí para usar la interfaz administrativa',
|
||||
'Click row to expand traceback': 'Click row to expand traceback',
|
||||
'click to check for upgrades': 'haga clic para buscar actualizaciones',
|
||||
'click to open': 'click to open',
|
||||
'Client IP': 'IP del Cliente',
|
||||
'code': 'código',
|
||||
'Code listing': 'Code listing',
|
||||
'collapse/expand all': 'collapse/expand all',
|
||||
'commit (mercurial)': 'commit (mercurial)',
|
||||
'Compile': 'compilar',
|
||||
'compiled application removed': 'aplicación compilada removida',
|
||||
'continue': 'continue',
|
||||
'Controllers': 'Controladores',
|
||||
'controllers': 'controladores',
|
||||
'Count': 'Count',
|
||||
'Create': 'crear',
|
||||
'create file with filename:': 'cree archivo con nombre:',
|
||||
'Create new application using the Wizard': 'Create new application using the Wizard',
|
||||
'create new application:': 'nombre de la nueva aplicación:',
|
||||
'Create new simple application': 'Cree una nueva aplicación',
|
||||
'created by': 'creado por',
|
||||
'crontab': 'crontab',
|
||||
'Current request': 'Solicitud en curso',
|
||||
'Current response': 'Respuesta en curso',
|
||||
'Current session': 'Sesión en curso',
|
||||
'currently saved or': 'actualmente guardado o',
|
||||
'customize me!': 'Adaptame!',
|
||||
'data uploaded': 'datos subidos',
|
||||
'database': 'base de datos',
|
||||
'database %s select': 'selección en base de datos %s',
|
||||
'database administration': 'administración base de datos',
|
||||
'Date and Time': 'Fecha y Hora',
|
||||
'db': 'db',
|
||||
'Debug': 'Debug',
|
||||
'defines tables': 'define tablas',
|
||||
'Delete': 'Elimine',
|
||||
'delete': 'eliminar',
|
||||
'delete all checked': 'eliminar marcados',
|
||||
'delete plugin': 'eliminar plugin',
|
||||
'Delete this file (you will be asked to confirm deletion)': 'Delete this file (you will be asked to confirm deletion)',
|
||||
'Delete:': 'Elimine:',
|
||||
'Deploy on Google App Engine': 'Instale en Google App Engine',
|
||||
'Description': 'Descripción',
|
||||
'design': 'modificar',
|
||||
'DESIGN': 'DISEÑO',
|
||||
'Design for': 'Diseño para',
|
||||
'direction: ltr': 'direction: ltr',
|
||||
'docs': 'docs',
|
||||
'done!': 'listo!',
|
||||
'download layouts': 'download layouts',
|
||||
'download plugins': 'download plugins',
|
||||
'E-mail': 'Correo electrónico',
|
||||
'EDIT': 'EDITAR',
|
||||
'Edit': 'editar',
|
||||
'Edit application': 'Editar aplicación',
|
||||
'edit controller': 'editar controlador',
|
||||
'Edit current record': 'Edite el registro actual',
|
||||
'Edit Profile': 'Editar Perfil',
|
||||
'edit views:': 'editar vistas:',
|
||||
'Editing file': 'Editando archivo',
|
||||
'Editing file "%s"': 'Editando archivo "%s"',
|
||||
'Editing Language file': 'Editando archivo de lenguaje',
|
||||
'Enterprise Web Framework': 'Armazón Empresarial para Internet',
|
||||
'Error': 'Error',
|
||||
'Error logs for "%(app)s"': 'Bitácora de errores en "%(app)s"',
|
||||
'Errors': 'errores',
|
||||
'Exception instance attributes': 'Atributos de la instancia de Excepción',
|
||||
'export as csv file': 'exportar como archivo CSV',
|
||||
'exposes': 'expone',
|
||||
'exposes:': 'exposes:',
|
||||
'extends': 'extiende',
|
||||
'failed to compile file because:': 'failed to compile file because:',
|
||||
'failed to reload module': 'recarga del módulo ha fallado',
|
||||
'failed to reload module because:': 'no es posible recargar el módulo por:',
|
||||
'File': 'File',
|
||||
'file "%(filename)s" created': 'archivo "%(filename)s" creado',
|
||||
'file "%(filename)s" deleted': 'archivo "%(filename)s" eliminado',
|
||||
'file "%(filename)s" uploaded': 'archivo "%(filename)s" subido',
|
||||
@@ -208,76 +150,211 @@
|
||||
'file does not exist': 'archivo no existe',
|
||||
'file saved on %(time)s': 'archivo guardado %(time)s',
|
||||
'file saved on %s': 'archivo guardado %s',
|
||||
'filter': 'filter',
|
||||
'Find Next': 'Find Next',
|
||||
'Find Previous': 'Find Previous',
|
||||
'First name': 'Nombre',
|
||||
'Functions with no doctests will result in [passed] tests.': 'Funciones sin doctests equivalen a pruebas [aceptadas].',
|
||||
'Globals##debug': 'Globals',
|
||||
'graph model': 'graph model',
|
||||
'Group ID': 'ID de Grupo',
|
||||
'Hello World': 'Hola Mundo',
|
||||
'Help': 'ayuda',
|
||||
'htmledit': 'htmledit',
|
||||
'If the report above contains a ticket number it indicates a failure in executing the controller, before any attempt to execute the doctests. This is usually due to an indentation error or an error outside function code.\nA green title indicates that all tests (if defined) passed. In this case test results are not shown.': 'Si el reporte anterior contiene un número de tiquete este indica un falla en la ejecución del controlador, antes de cualquier intento de ejecutat doctests. Esto generalmente se debe a un error en la indentación o un error por fuera del código de la función.\r\nUn titulo verde indica que todas las pruebas pasaron (si existen). En dicho caso los resultados no se muestran.',
|
||||
'Import/Export': 'Importar/Exportar',
|
||||
'includes': 'incluye',
|
||||
'insert new': 'inserte nuevo',
|
||||
'insert new %s': 'inserte nuevo %s',
|
||||
'Install': 'instalar',
|
||||
'Installed applications': 'Aplicaciones instaladas',
|
||||
'Interaction at %s line %s': 'Interaction at %s line %s',
|
||||
'Interactive console': 'Interactive console',
|
||||
'internal error': 'error interno',
|
||||
'Internal State': 'Estado Interno',
|
||||
'Invalid action': 'Acción inválida',
|
||||
'Invalid email': 'Correo inválido',
|
||||
'invalid password': 'contraseña inválida',
|
||||
'Invalid Query': 'Consulta inválida',
|
||||
'invalid request': 'solicitud inválida',
|
||||
'invalid ticket': 'tiquete inválido',
|
||||
'Key bindings': 'Key bindings',
|
||||
'language file "%(filename)s" created/updated': 'archivo de lenguaje "%(filename)s" creado/actualizado',
|
||||
'Language files (static strings) updated': 'Archivos de lenguaje (cadenas estáticas) actualizados',
|
||||
'languages': 'lenguajes',
|
||||
'Languages': 'Lenguajes',
|
||||
'languages updated': 'lenguajes actualizados',
|
||||
'Last name': 'Apellido',
|
||||
'Last saved on:': 'Guardado en:',
|
||||
'License for': 'Licencia para',
|
||||
'loading...': 'cargando...',
|
||||
'Locals##debug': 'Locals',
|
||||
'Login': 'Inicio de sesión',
|
||||
'login': 'inicio de sesión',
|
||||
'Login to the Administrative Interface': 'Inicio de sesión para la Interfaz Administrativa',
|
||||
'Logout': 'fin de sesión',
|
||||
'Lost Password': 'Contraseña perdida',
|
||||
'manage': 'manage',
|
||||
'merge': 'combinar',
|
||||
'Models': 'Modelos',
|
||||
'models': 'modelos',
|
||||
'Modules': 'Módulos',
|
||||
'modules': 'módulos',
|
||||
'Name': 'Nombre',
|
||||
'new application "%s" created': 'nueva aplicación "%s" creada',
|
||||
'new plugin installed': 'nuevo plugin instalado',
|
||||
'New Record': 'Registro nuevo',
|
||||
'new record inserted': 'nuevo registro insertado',
|
||||
'next': 'next',
|
||||
'next 100 rows': '100 filas siguientes',
|
||||
'NO': 'NO',
|
||||
'No databases in this application': 'No hay bases de datos en esta aplicación',
|
||||
'No Interaction yet': 'No Interaction yet',
|
||||
'no match': 'no encontrado',
|
||||
'or alternatively': 'or alternatively',
|
||||
'or import from csv file': 'o importar desde archivo CSV',
|
||||
'or provide app url:': 'o provea URL de la aplicación:',
|
||||
'or provide application url:': 'o provea URL de la aplicación:',
|
||||
'Origin': 'Origen',
|
||||
'Original/Translation': 'Original/Traducción',
|
||||
'Overwrite installed app': 'sobreescriba aplicación instalada',
|
||||
'Pack all': 'empaquetar todo',
|
||||
'Pack compiled': 'empaquete compiladas',
|
||||
'pack plugin': 'empaquetar plugin',
|
||||
'PAM authenticated user, cannot change password here': 'usuario autenticado por PAM, no puede cambiar la contraseña aquí',
|
||||
'Password': 'Contraseña',
|
||||
'password changed': 'contraseña cambiada',
|
||||
'Peeking at file': 'Visualizando archivo',
|
||||
'Please': 'Please',
|
||||
'plugin "%(plugin)s" deleted': 'plugin "%(plugin)s" eliminado',
|
||||
'Plugin "%s" in application': 'Plugin "%s" en aplicación',
|
||||
'plugins': 'plugins',
|
||||
'Plugins': 'Plugins',
|
||||
'Plural-Forms:': 'Plural-Forms:',
|
||||
'Powered by': 'Este sitio usa',
|
||||
'previous 100 rows': '100 filas anteriores',
|
||||
'Private files': 'Private files',
|
||||
'private files': 'private files',
|
||||
'Query:': 'Consulta:',
|
||||
'record': 'registro',
|
||||
'record does not exist': 'el registro no existe',
|
||||
'record id': 'id de registro',
|
||||
'Record ID': 'ID de Registro',
|
||||
'refresh': 'refresh',
|
||||
'Register': 'Registrese',
|
||||
'Registration key': 'Contraseña de Registro',
|
||||
'reload': 'reload',
|
||||
'Remove compiled': 'eliminar compiladas',
|
||||
'Removed Breakpoint on %s at line %s': 'Removed Breakpoint on %s at line %s',
|
||||
'Replace': 'Replace',
|
||||
'Replace All': 'Replace All',
|
||||
'Resolve Conflict file': 'archivo Resolución de Conflicto',
|
||||
'restore': 'restaurar',
|
||||
'return': 'return',
|
||||
'revert': 'revertir',
|
||||
'Role': 'Rol',
|
||||
'Rows in table': 'Filas en la tabla',
|
||||
'Rows selected': 'Filas seleccionadas',
|
||||
'rules are not defined': 'rules are not defined',
|
||||
"Run tests in this file (to run all files, you may also use the button labelled 'test')": "Run tests in this file (to run all files, you may also use the button labelled 'test')",
|
||||
'Save': 'Save',
|
||||
'save': 'guardar',
|
||||
'Save file:': 'Save file:',
|
||||
'Save via Ajax': 'Save via Ajax',
|
||||
'Saved file hash:': 'Hash del archivo guardado:',
|
||||
'selected': 'seleccionado(s)',
|
||||
'session expired': 'sesión expirada',
|
||||
'Set Breakpoint on %s at line %s: %s': 'Set Breakpoint on %s at line %s: %s',
|
||||
'shell': 'shell',
|
||||
'Site': 'sitio',
|
||||
'some files could not be removed': 'algunos archivos no pudieron ser removidos',
|
||||
'Start searching': 'Start searching',
|
||||
'state': 'estado',
|
||||
'static': 'estáticos',
|
||||
'Static': 'Static',
|
||||
'Static files': 'Archivos estáticos',
|
||||
'step': 'step',
|
||||
'stop': 'stop',
|
||||
'submit': 'enviar',
|
||||
'successful': 'successful',
|
||||
'Sure you want to delete this object?': '¿Está seguro que desea eliminar este objeto?',
|
||||
'table': 'tabla',
|
||||
'Table name': 'Nombre de la tabla',
|
||||
'test': 'probar',
|
||||
'Testing application': 'Probando aplicación',
|
||||
'The "query" is a condition like "db.table1.field1==\'value\'". Something like "db.table1.field1==db.table2.field2" results in a SQL JOIN.': 'La "consulta" es una condición como "db.tabla1.campo1==\'valor\'". Algo como "db.tabla1.campo1==db.tabla2.campo2" resulta en un JOIN SQL.',
|
||||
'the application logic, each URL path is mapped in one exposed function in the controller': 'la lógica de la aplicación, cada ruta URL se mapea en una función expuesta en el controlador',
|
||||
'The application logic, each URL path is mapped in one exposed function in the controller': 'The application logic, each URL path is mapped in one exposed function in the controller',
|
||||
'the data representation, define database tables and sets': 'la representación de datos, define tablas y conjuntos de base de datos',
|
||||
'The data representation, define database tables and sets': 'The data representation, define database tables and sets',
|
||||
'The presentations layer, views are also known as templates': 'The presentations layer, views are also known as templates',
|
||||
'the presentations layer, views are also known as templates': 'la capa de presentación, las vistas también son llamadas plantillas',
|
||||
'There are no controllers': 'No hay controladores',
|
||||
'There are no models': 'No hay modelos',
|
||||
'There are no modules': 'No hay módulos',
|
||||
'There are no plugins': 'There are no plugins',
|
||||
'There are no private files': 'There are no private files',
|
||||
'There are no static files': 'No hay archivos estáticos',
|
||||
'There are no translators, only default language is supported': 'No hay traductores, sólo el lenguaje por defecto es soportado',
|
||||
'There are no views': 'No hay vistas',
|
||||
'These files are not served, they are only available from within your app': 'These files are not served, they are only available from within your app',
|
||||
'These files are served without processing, your images go here': 'These files are served without processing, your images go here',
|
||||
'these files are served without processing, your images go here': 'estos archivos son servidos sin procesar, sus imágenes van aquí',
|
||||
'This is the %(filename)s template': 'Esta es la plantilla %(filename)s',
|
||||
'this page to see if a breakpoint was hit and debug interaction is required.': 'this page to see if a breakpoint was hit and debug interaction is required.',
|
||||
'Ticket': 'Tiquete',
|
||||
'Timestamp': 'Timestamp',
|
||||
'TM': 'MR',
|
||||
'to previous version.': 'a la versión previa.',
|
||||
'To create a plugin, name a file/folder plugin_[name]': 'Para crear un plugin, nombre un archivo/carpeta plugin_[nombre]',
|
||||
'To emulate a breakpoint programatically, write:': 'To emulate a breakpoint programatically, write:',
|
||||
'to use the debugger!': 'to use the debugger!',
|
||||
'toggle breakpoint': 'toggle breakpoint',
|
||||
'Toggle Fullscreen': 'Toggle Fullscreen',
|
||||
'translation strings for the application': 'cadenas de caracteres de traducción para la aplicación',
|
||||
'Translation strings for the application': 'Translation strings for the application',
|
||||
'try': 'intente',
|
||||
'try something like': 'intente algo como',
|
||||
'Type some Python code in here and hit Return (Enter) to execute it.': 'Type some Python code in here and hit Return (Enter) to execute it.',
|
||||
'Unable to check for upgrades': 'No es posible verificar la existencia de actualizaciones',
|
||||
'unable to create application "%s"': 'no es posible crear la aplicación "%s"',
|
||||
'unable to delete file "%(filename)s"': 'no es posible eliminar el archivo "%(filename)s"',
|
||||
'unable to delete file plugin "%(plugin)s"': 'no es posible eliminar plugin "%(plugin)s"',
|
||||
'Unable to download': 'No es posible la descarga',
|
||||
'Unable to download app': 'No es posible descargar la aplicación',
|
||||
'Unable to download app because:': 'No es posible descargar la aplicación porque:',
|
||||
'Unable to download because': 'No es posible descargar porque',
|
||||
'unable to parse csv file': 'no es posible analizar el archivo CSV',
|
||||
'unable to uninstall "%s"': 'no es posible instalar "%s"',
|
||||
'unable to upgrade because "%s"': 'no es posible actualizar porque "%s"',
|
||||
'uncheck all': 'desmarcar todos',
|
||||
'Uninstall': 'desinstalar',
|
||||
'update': 'actualizar',
|
||||
'update all languages': 'actualizar todos los lenguajes',
|
||||
'Update:': 'Actualice:',
|
||||
'upgrade web2py now': 'actualize web2py ahora',
|
||||
'Upload': 'Upload',
|
||||
'Upload & install packed application': 'Suba e instale aplicación empaquetada',
|
||||
'upload application:': 'subir aplicación:',
|
||||
'Upload existing application': 'Suba esta aplicación',
|
||||
'upload file:': 'suba archivo:',
|
||||
'upload plugin file:': 'suba archivo de plugin:',
|
||||
'Use (...)&(...) for AND, (...)|(...) for OR, and ~(...) for NOT to build more complex queries.': 'Use (...)&(...) para AND, (...)|(...) para OR, y ~(...) para NOT, para crear consultas más complejas.',
|
||||
'User ID': 'ID de Usuario',
|
||||
'variables': 'variables',
|
||||
'Version': 'Versión',
|
||||
'versioning': 'versiones',
|
||||
'Versioning': 'Versioning',
|
||||
'view': 'vista',
|
||||
'Views': 'Vistas',
|
||||
'views': 'vistas',
|
||||
'web2py Recent Tweets': 'Tweets Recientes de web2py',
|
||||
'web2py is up to date': 'web2py está actualizado',
|
||||
'web2py online debugger': 'web2py online debugger',
|
||||
'web2py Recent Tweets': 'Tweets Recientes de web2py',
|
||||
'web2py upgraded; please restart it': 'web2py actualizado; favor reiniciar',
|
||||
'Welcome to web2py': 'Bienvenido a web2py',
|
||||
'YES': 'SI',
|
||||
'You need to set up and reach a': 'You need to set up and reach a',
|
||||
'Your application will be blocked until you click an action button (next, step, continue, etc.)': 'Your application will be blocked until you click an action button (next, step, continue, etc.)',
|
||||
'Your can inspect variables using the console below': 'Your can inspect variables using the console below',
|
||||
}
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
'Admin language': 'Admin language',
|
||||
'administrative interface': 'administrative interface',
|
||||
'Administrator Password:': 'Password Amministratore:',
|
||||
'An error occured, please %s the page': 'An error occured, please %s the page',
|
||||
'and rename it (required):': 'e rinominala (obbligatorio):',
|
||||
'and rename it:': 'e rinominala:',
|
||||
'appadmin': 'appadmin ',
|
||||
@@ -144,8 +145,10 @@
|
||||
'Get from URL:': 'Get from URL:',
|
||||
'Git Pull': 'Git Pull',
|
||||
'Git Push': 'Git Push',
|
||||
'graph model': 'graph model',
|
||||
'Hello World': 'Salve Mondo',
|
||||
'Help': 'aiuto',
|
||||
'Hide/Show Translated strings': 'Hide/Show Translated strings',
|
||||
'htmledit': 'modifica come html',
|
||||
'If the report above contains a ticket number it indicates a failure in executing the controller, before any attempt to execute the doctests. This is usually due to an indentation error or an error outside function code.\nA green title indicates that all tests (if defined) passed. In this case test results are not shown.': 'If the report above contains a ticket number it indicates a failure in executing the controller, before any attempt to execute the doctests. This is usually due to an indentation error or an error outside function code.\nA green title indicates that all tests (if defined) passed. In this case test results are not shown.',
|
||||
'Import/Export': 'Importa/Esporta',
|
||||
@@ -195,6 +198,8 @@
|
||||
'NO': 'NO',
|
||||
'No databases in this application': 'Nessun database presente in questa applicazione',
|
||||
'no match': 'nessuna corrispondenza',
|
||||
'or alternatively': 'or alternatively',
|
||||
'Or Get from URL:': 'Or Get from URL:',
|
||||
'or import from csv file': 'oppure importa da file CSV',
|
||||
'or provide app url:': "oppure fornisci url dell'applicazione:",
|
||||
'Original/Translation': 'Originale/Traduzione',
|
||||
@@ -219,6 +224,7 @@
|
||||
'record does not exist': 'il record non esiste',
|
||||
'record id': 'ID del record',
|
||||
'register': 'registrazione',
|
||||
'reload': 'reload',
|
||||
'Remove compiled': 'rimozione codice compilato',
|
||||
'request': 'request',
|
||||
'Resolve Conflict file': 'File di risoluzione conflitto',
|
||||
@@ -242,6 +248,7 @@
|
||||
'Start wizard': 'start wizard',
|
||||
'state': 'stato',
|
||||
'static': 'statico',
|
||||
'Static': 'Static',
|
||||
'Static files': 'Files statici',
|
||||
'Stylesheet': 'Foglio di stile (stylesheet)',
|
||||
'submit': 'invia',
|
||||
@@ -261,6 +268,7 @@
|
||||
'There are no models': 'Non ci sono modelli',
|
||||
'There are no modules': 'Non ci sono moduli',
|
||||
'There are no plugins': 'There are no plugins',
|
||||
'There are no private files': 'There are no private files',
|
||||
'There are no static files': 'Non ci sono file statici',
|
||||
'There are no translators, only default language is supported': 'Non ci sono traduzioni, viene solo supportato il linguaggio di base',
|
||||
'There are no views': 'Non ci sono viste ("view")',
|
||||
@@ -280,6 +288,7 @@
|
||||
'Translation strings for the application': 'Translation strings for the application',
|
||||
'try': 'prova',
|
||||
'try something like': 'prova qualcosa come',
|
||||
'Try the mobile interface': 'Try the mobile interface',
|
||||
'try view': 'try view',
|
||||
'Unable to check for upgrades': 'Impossibile controllare presenza di aggiornamenti',
|
||||
'unable to create application "%s"': 'impossibile creare applicazione "%s"',
|
||||
@@ -298,6 +307,7 @@
|
||||
'Update:': 'Aggiorna:',
|
||||
'upgrade web2py now': 'upgrade web2py now',
|
||||
'upload': 'upload',
|
||||
'Upload': 'Upload',
|
||||
'Upload & install packed application': 'Carica ed installa pacchetto con applicazione',
|
||||
'Upload a package:': 'Upload a package:',
|
||||
'Upload and install packed application': 'Upload and install packed application',
|
||||
@@ -308,6 +318,7 @@
|
||||
'Use an url:': 'Use an url:',
|
||||
'variables': 'variables',
|
||||
'Version': 'Versione',
|
||||
'Version %s.%s.%s %s (%s)': 'Version %s.%s.%s %s (%s)',
|
||||
'Version %s.%s.%s (%s) %s': 'Version %s.%s.%s (%s) %s',
|
||||
'versioning': 'sistema di versioni',
|
||||
'Versioning': 'Versioning',
|
||||
|
||||
@@ -92,7 +92,7 @@
|
||||
'Database': 'База данных',
|
||||
'database': 'база данных',
|
||||
'database %s select': 'Выбор базы данных %s ',
|
||||
'database administration': 'администраторирование базы данных',
|
||||
'database administration': 'администрирование базы данных',
|
||||
'Date and Time': 'Дата и время',
|
||||
'db': 'бд',
|
||||
'DB Model': 'Модель БД',
|
||||
@@ -134,7 +134,7 @@
|
||||
'Editing Language file': 'Правка языкового файла',
|
||||
'Editing Plural Forms File': 'Editing Plural Forms File',
|
||||
'Enterprise Web Framework': 'Enterprise Web Framework',
|
||||
'Error logs for "%(app)s"': 'Журнал ошибок для "%(app)"',
|
||||
'Error logs for "%(app)s"': 'Журнал ошибок для "%(app)s"',
|
||||
'Error snapshot': 'Error snapshot',
|
||||
'Error ticket': 'Error ticket',
|
||||
'Errors': 'Ошибка',
|
||||
|
||||
212
applications/admin/languages/sr-cr.py
Normal file
@@ -0,0 +1,212 @@
|
||||
# coding: utf8
|
||||
{
|
||||
'!langcode!': 'sr-cr',
|
||||
'!langname!': 'Српски (Ћирилица)',
|
||||
'%Y-%m-%d': '%d-%m-%Y',
|
||||
'%Y-%m-%d %H:%M:%S': '%d-%m-%Y %H:%M:%S',
|
||||
'(requires internet access)': '(захтијева приступ интернету)',
|
||||
'(something like "it-it")': '(нешто као "it-it")',
|
||||
'@markmin\x01(file **gluon/contrib/plural_rules/%s.py** is not found)': '(датотека **gluon/contrib/plural_rules/%s.py** није пронађена)',
|
||||
'About': 'Информације',
|
||||
'About application': 'О апликацији',
|
||||
'Additional code for your application': 'Додатни код за апликацију',
|
||||
'admin disabled because unable to access password file': 'администрација онемогућена јер не могу приступити датотеци са лозинком',
|
||||
'Admin language': 'Језик администратора',
|
||||
'administrative interface': 'административни интерфејс',
|
||||
'Administrator Password:': 'Лозинка администратора:',
|
||||
'and rename it:': 'и преименуј у:',
|
||||
'Application name:': 'Назив апликације:',
|
||||
'are not used': 'није кориштено',
|
||||
'are not used yet': 'није још кориштено',
|
||||
'Are you sure you want to delete this object?': 'Да ли сте сигурни да желите обрисати?',
|
||||
'arguments': 'arguments',
|
||||
'at char %s': 'код слова %s',
|
||||
'at line %s': 'на линији %s',
|
||||
'ATTENTION: TESTING IS NOT THREAD SAFE SO DO NOT PERFORM MULTIPLE TESTS CONCURRENTLY.': 'ATTENTION: TESTING IS NOT THREAD SAFE SO DO NOT PERFORM MULTIPLE TESTS CONCURRENTLY.',
|
||||
'back': 'назад',
|
||||
'Basics': 'Основе',
|
||||
'Begin': 'Почетак',
|
||||
'cache, errors and sessions cleaned': 'кеш, грешке и сесије су обрисани',
|
||||
'can be a git repo': 'може бити git repo',
|
||||
'cannot upload file "%(filename)s"': 'не мофу отпремити датотеку "%(filename)s"',
|
||||
'Change admin password': 'Промијени лзинку администратора',
|
||||
'check all': 'check all',
|
||||
'Check for upgrades': 'Провјери могућност надоградње',
|
||||
'Checking for upgrades...': 'Провјеравам могућност надоградње...',
|
||||
'Clean': 'Прочисти',
|
||||
'Click row to expand traceback': 'Click row to expand traceback',
|
||||
'code': 'код',
|
||||
'collapse/expand all': 'сакрити/приказати све',
|
||||
'Compile': 'Компајлирај',
|
||||
'Controllers': 'Контролери',
|
||||
'controllers': 'контролери',
|
||||
'Count': 'Count',
|
||||
'Create': 'Креирај',
|
||||
'create file with filename:': 'Креирај датотеку под називом:',
|
||||
'Create rules': 'Креирај правила',
|
||||
'created by': 'израдио',
|
||||
'crontab': 'crontab',
|
||||
'currently running': 'тренутно покренут',
|
||||
'currently saved or': 'тренутно сачувано или',
|
||||
'database administration': 'администрација базе података',
|
||||
'Debug': 'Debug',
|
||||
'defines tables': 'дефинише табеле',
|
||||
'delete': 'обриши',
|
||||
'Delete': 'Обриши',
|
||||
'delete all checked': 'delete all checked',
|
||||
'Delete this file (you will be asked to confirm deletion)': 'Обриши ову даатотеку (бићете упитани за потврду брисања)',
|
||||
'Deploy': 'Постави',
|
||||
'Deploy on Google App Engine': 'Постави на Google App Engine',
|
||||
'Deploy to OpenShift': 'Постави на OpenShift',
|
||||
'Detailed traceback description': 'Detailed traceback description',
|
||||
'direction: ltr': 'direction: ltr',
|
||||
'Disable': 'Искључи',
|
||||
'docs': 'документација',
|
||||
'download layouts': 'преузми layouts',
|
||||
'download plugins': 'преузми plugins',
|
||||
'Edit': 'Уређивање',
|
||||
'edit all': 'уреди све',
|
||||
'Edit application': 'Уреди апликацију',
|
||||
'edit controller': 'уреди контролер',
|
||||
'edit views:': 'уреди views:',
|
||||
'Editing file "%s"': 'Уређивање датотеке "%s"',
|
||||
'Editing Language file': 'Уређивање језичке датотеке',
|
||||
'Error': 'Грешка',
|
||||
'Error logs for "%(app)s"': 'Преглед грешака за "%(app)s"',
|
||||
'Error snapshot': 'Error snapshot',
|
||||
'Error ticket': 'Error ticket',
|
||||
'Errors': 'Грешке',
|
||||
'Exception instance attributes': 'Exception instance attributes',
|
||||
'Expand Abbreviation': 'Expand Abbreviation',
|
||||
'exposes': 'exposes',
|
||||
'exposes:': 'exposes:',
|
||||
'extends': 'проширује',
|
||||
'failed to compile file because:': 'нисам могао да компајлирам због:',
|
||||
'File': 'Датотека',
|
||||
'file does not exist': 'датотека не постоји',
|
||||
'file saved on %s': 'датотека сачувана на %s',
|
||||
'filter': 'филтер',
|
||||
'Find Next': 'Пронађи сљедећи',
|
||||
'Find Previous': 'Пронађи претходни',
|
||||
'Frames': 'Frames',
|
||||
'Functions with no doctests will result in [passed] tests.': 'Functions with no doctests will result in [passed] tests.',
|
||||
'Generate': 'Generate',
|
||||
'Get from URL:': 'Преузми са странице:',
|
||||
'Git Pull': 'Git Pull',
|
||||
'Git Push': 'Git Push',
|
||||
'Go to Matching Pair': 'Go to Matching Pair',
|
||||
'go!': 'крени!',
|
||||
'Help': 'Помоћ',
|
||||
'Hide/Show Translated strings': 'Сакрити/Приказати преведене ријечи',
|
||||
'If the report above contains a ticket number it indicates a failure in executing the controller, before any attempt to execute the doctests. This is usually due to an indentation error or an error outside function code.\nA green title indicates that all tests (if defined) passed. In this case test results are not shown.': 'If the report above contains a ticket number it indicates a failure in executing the controller, before any attempt to execute the doctests. This is usually due to an indentation error or an error outside function code.\nA green title indicates that all tests (if defined) passed. In this case test results are not shown.',
|
||||
'includes': 'укључује',
|
||||
'inspect attributes': 'inspect attributes',
|
||||
'Install': 'Инсталирај',
|
||||
'Installed applications': 'Инсталиране апликације',
|
||||
'invalid password.': 'погрешна лозинка.',
|
||||
'Key bindings': 'Пречице',
|
||||
'Key bindings for ZenCoding Plugin': 'Пречице за ZenCoding Plugin',
|
||||
'Language files (static strings) updated': 'Језичке датотеке су ажуриране',
|
||||
'languages': 'језици',
|
||||
'Languages': 'Језици',
|
||||
'Last saved on:': 'Посљедња измјена:',
|
||||
'License for': 'Лиценца за',
|
||||
'loading...': 'преузимам...',
|
||||
'locals': 'locals',
|
||||
'Login': 'Пријава',
|
||||
'Login to the Administrative Interface': 'Пријава за административни интерфејс',
|
||||
'Logout': 'Излаз',
|
||||
'Match Pair': 'Match Pair',
|
||||
'Merge Lines': 'Споји линије',
|
||||
'models': 'models',
|
||||
'Models': 'Models',
|
||||
'Modules': 'Modules',
|
||||
'modules': 'modules',
|
||||
'New Application Wizard': 'Чаробњак за нове апликације',
|
||||
'New application wizard': 'Чаробњак за нове апликације',
|
||||
'New simple application': 'Нова једноставна апликација',
|
||||
'Next Edit Point': 'Next Edit Point',
|
||||
'No ticket_storage.txt found under /private folder': 'No ticket_storage.txt found under /private folder',
|
||||
'online designer': 'онлајн дизајнер',
|
||||
'Original/Translation': 'Оргинал/Превод',
|
||||
'Overwrite installed app': 'Пребриши постојећу апликацију',
|
||||
'Pack all': 'Запакуј све',
|
||||
'Peeking at file': 'Peeking at file',
|
||||
'Plugins': 'Plugins',
|
||||
'plugins': 'plugins',
|
||||
'Plural-Forms:': 'Plural-Forms:',
|
||||
'Powered by': 'Омогућио',
|
||||
'Previous Edit Point': 'Previous Edit Point',
|
||||
'Private files': 'Private files',
|
||||
'private files': 'private files',
|
||||
'Project Progress': 'Напредак пројекта',
|
||||
'Reload routes': 'Обнови преусмјерења',
|
||||
'Removed Breakpoint on %s at line %s': 'Removed Breakpoint on %s at line %s',
|
||||
'Replace': 'Замијени',
|
||||
'Replace All': 'Замијени све',
|
||||
'request': 'request',
|
||||
'response': 'response',
|
||||
'restart': 'restart',
|
||||
'restore': 'restore',
|
||||
'revert': 'revert',
|
||||
'rules are not defined': 'правила нису дефинисана',
|
||||
'rules:': 'правила:',
|
||||
"Run tests in this file (to run all files, you may also use the button labelled 'test')": "Run tests in this file (to run all files, you may also use the button labelled 'test')",
|
||||
'Running on %s': 'Покренути на %s',
|
||||
'Save': 'Сачувај',
|
||||
'Save via Ajax': 'сачувај via Ajax',
|
||||
'Saved file hash:': 'Сачувано као хаш:',
|
||||
'session': 'сесија',
|
||||
'session expired': 'сесија истекла',
|
||||
'Set Breakpoint on %s at line %s: %s': 'Set Breakpoint on %s at line %s: %s',
|
||||
'shell': 'shell',
|
||||
'Site': 'Сајт',
|
||||
'skip to generate': 'skip to generate',
|
||||
'Start a new app': 'Покрени нову апликацију',
|
||||
'Start searching': 'Покрени претрагу',
|
||||
'Start wizard': 'Покрени чаробњака',
|
||||
'static': 'static',
|
||||
'Static files': 'Static files',
|
||||
'Step': 'Корак',
|
||||
'Submit': 'Прихвати',
|
||||
'successful': 'успјешан',
|
||||
'test': 'тест',
|
||||
'Testing application': 'Тестирање апликације',
|
||||
'The application logic, each URL path is mapped in one exposed function in the controller': 'The application logic, each URL path is mapped in one exposed function in the controller',
|
||||
'The data representation, define database tables and sets': 'The data representation, define database tables and sets',
|
||||
'The presentations layer, views are also known as templates': 'The presentations layer, views are also known as templates',
|
||||
'There are no models': 'There are no models',
|
||||
'There are no plugins': 'There are no plugins',
|
||||
'There are no private files': 'There are no private files',
|
||||
'These files are not served, they are only available from within your app': 'These files are not served, they are only available from within your app',
|
||||
'These files are served without processing, your images go here': 'These files are served without processing, your images go here',
|
||||
'Ticket ID': 'Ticket ID',
|
||||
'Ticket Missing': 'Ticket nedostaje',
|
||||
'to previous version.': 'на претходну верзију.',
|
||||
'To create a plugin, name a file/folder plugin_[name]': 'To create a plugin, name a file/folder plugin_[name]',
|
||||
'toggle breakpoint': 'toggle breakpoint',
|
||||
'Toggle Fullscreen': 'Toggle Fullscreen',
|
||||
'Traceback': 'Traceback',
|
||||
'Translation strings for the application': 'Ријечи у апликацији које треба превести',
|
||||
'Try the mobile interface': 'Пробај мобилни интерфејс',
|
||||
'try view': 'try view',
|
||||
'uncheck all': 'uncheck all',
|
||||
'Uninstall': 'Деинсталирај',
|
||||
'update': 'ажурирај',
|
||||
'update all languages': 'ажурирај све језике',
|
||||
'upload': 'Отпреми',
|
||||
'Upload a package:': 'Преузми пакет:',
|
||||
'Upload and install packed application': 'Преузми и инсталирај запаковану апликацију',
|
||||
'upload file:': 'преузми датотеку:',
|
||||
'upload plugin file:': 'преузми плагин датотеку:',
|
||||
'variables': 'variables',
|
||||
'Version': 'Верзија',
|
||||
'Version %s.%s.%s (%s) %s': 'Верзија %s.%s.%s (%s) %s',
|
||||
'Versioning': 'Versioning',
|
||||
'views': 'views',
|
||||
'Views': 'Views',
|
||||
'Web Framework': 'Web Framework',
|
||||
'web2py is up to date': 'web2py је ажуран',
|
||||
'web2py Recent Tweets': 'web2py Recent Tweets',
|
||||
'Wrap with Abbreviation': 'Wrap with Abbreviation',
|
||||
}
|
||||
212
applications/admin/languages/sr-lt.py
Normal file
@@ -0,0 +1,212 @@
|
||||
# coding: utf8
|
||||
{
|
||||
'!langcode!': 'sr-lt',
|
||||
'!langname!': 'Srpski (Latinica)',
|
||||
'%Y-%m-%d': '%d-%m-%Y',
|
||||
'%Y-%m-%d %H:%M:%S': '%d-%m-%Y %H:%M:%S',
|
||||
'(requires internet access)': '(zahtijeva pristup internetu)',
|
||||
'(something like "it-it")': '(nešto kao "it-it")',
|
||||
'@markmin\x01(file **gluon/contrib/plural_rules/%s.py** is not found)': '(datoteka **gluon/contrib/plural_rules/%s.py** nije pronađena)',
|
||||
'About': 'Informacije',
|
||||
'About application': 'O aplikaciji',
|
||||
'Additional code for your application': 'Dodatni kod za aplikaciju',
|
||||
'admin disabled because unable to access password file': 'administracija onemogućena jer ne mogu pristupiti datoteci sa lozinkom',
|
||||
'Admin language': 'Jezik administratora',
|
||||
'administrative interface': 'administrativni interfejs',
|
||||
'Administrator Password:': 'Lozinka administratora:',
|
||||
'and rename it:': 'i preimenuj u:',
|
||||
'Application name:': 'Naziv aplikacije:',
|
||||
'are not used': 'nije korišteno',
|
||||
'are not used yet': 'nije još korišteno',
|
||||
'Are you sure you want to delete this object?': 'Da li ste sigurni da želite obrisati?',
|
||||
'arguments': 'arguments',
|
||||
'at char %s': 'kod slova %s',
|
||||
'at line %s': 'na liniji %s',
|
||||
'ATTENTION: TESTING IS NOT THREAD SAFE SO DO NOT PERFORM MULTIPLE TESTS CONCURRENTLY.': 'ATTENTION: TESTING IS NOT THREAD SAFE SO DO NOT PERFORM MULTIPLE TESTS CONCURRENTLY.',
|
||||
'back': 'nazad',
|
||||
'Basics': 'Osnove',
|
||||
'Begin': 'Početak',
|
||||
'cache, errors and sessions cleaned': 'keš, greške i sesije su obrisani',
|
||||
'can be a git repo': 'može biti git repo',
|
||||
'cannot upload file "%(filename)s"': 'ne mogu otpremiti datoteku "%(filename)s"',
|
||||
'Change admin password': 'Promijeni lozinku administratora',
|
||||
'check all': 'check all',
|
||||
'Check for upgrades': 'Provjeri mogućnost nadogradnje',
|
||||
'Checking for upgrades...': 'Provjeravam mogućnost nadogradnje...',
|
||||
'Clean': 'Pročisti',
|
||||
'Click row to expand traceback': 'Click row to expand traceback',
|
||||
'code': 'kod',
|
||||
'collapse/expand all': 'sakriti/prikazati sve',
|
||||
'Compile': 'Kompajliraj',
|
||||
'Controllers': 'Kontroleri',
|
||||
'controllers': 'kontroleri',
|
||||
'Count': 'Count',
|
||||
'Create': 'Kreiraj',
|
||||
'create file with filename:': 'Kreiraj datoteku pod nazivom:',
|
||||
'Create rules': 'Kreiraj pravila',
|
||||
'created by': 'izradio',
|
||||
'crontab': 'crontab',
|
||||
'currently running': 'trenutno pokrenut',
|
||||
'currently saved or': 'trenutno sačuvano ili',
|
||||
'database administration': 'administracija baze podataka',
|
||||
'Debug': 'Debug',
|
||||
'defines tables': 'definiše tabele',
|
||||
'delete': 'obriši',
|
||||
'Delete': 'Obriši',
|
||||
'delete all checked': 'delete all checked',
|
||||
'Delete this file (you will be asked to confirm deletion)': 'Obriši ovu datoteku (bićete upitani za potvrdu brisanja)',
|
||||
'Deploy': 'Postavi',
|
||||
'Deploy on Google App Engine': 'Postavi na Google App Engine',
|
||||
'Deploy to OpenShift': 'Postavi na OpenShift',
|
||||
'Detailed traceback description': 'Detailed traceback description',
|
||||
'direction: ltr': 'direction: ltr',
|
||||
'Disable': 'Isključi',
|
||||
'docs': 'dokumentacija',
|
||||
'download layouts': 'preuzmi layouts',
|
||||
'download plugins': 'preuzmi plugins',
|
||||
'Edit': 'Uređivanje',
|
||||
'edit all': 'uredi sve',
|
||||
'Edit application': 'Uredi aplikaciju',
|
||||
'edit controller': 'uredi controller',
|
||||
'edit views:': 'uredi views:',
|
||||
'Editing file "%s"': 'Uređivanje datoteke "%s"',
|
||||
'Editing Language file': 'Uređivanje jezičke datoteke',
|
||||
'Error': 'Greška',
|
||||
'Error logs for "%(app)s"': 'Pregled grešaka za "%(app)s"',
|
||||
'Error snapshot': 'Error snapshot',
|
||||
'Error ticket': 'Error ticket',
|
||||
'Errors': 'Greške',
|
||||
'Exception instance attributes': 'Exception instance attributes',
|
||||
'Expand Abbreviation': 'Expand Abbreviation',
|
||||
'exposes': 'exposes',
|
||||
'exposes:': 'exposes:',
|
||||
'extends': 'proširuje',
|
||||
'failed to compile file because:': 'nisam mogao da kompajliram zbog:',
|
||||
'File': 'Datoteka',
|
||||
'file does not exist': 'datoteka ne postoji',
|
||||
'file saved on %s': 'datoteka sačuvana na %s',
|
||||
'filter': 'filter',
|
||||
'Find Next': 'Pronađi sljedeći',
|
||||
'Find Previous': 'Pronađi prethodni',
|
||||
'Frames': 'Frames',
|
||||
'Functions with no doctests will result in [passed] tests.': 'Functions with no doctests will result in [passed] tests.',
|
||||
'Generate': 'Generate',
|
||||
'Get from URL:': 'Preuzmi sa stranice:',
|
||||
'Git Pull': 'Git Pull',
|
||||
'Git Push': 'Git Push',
|
||||
'Go to Matching Pair': 'Go to Matching Pair',
|
||||
'go!': 'kreni!',
|
||||
'Help': 'Pomoć',
|
||||
'Hide/Show Translated strings': 'Sakriti/Prikazati prevedene riječi',
|
||||
'If the report above contains a ticket number it indicates a failure in executing the controller, before any attempt to execute the doctests. This is usually due to an indentation error or an error outside function code.\nA green title indicates that all tests (if defined) passed. In this case test results are not shown.': 'If the report above contains a ticket number it indicates a failure in executing the controller, before any attempt to execute the doctests. This is usually due to an indentation error or an error outside function code.\nA green title indicates that all tests (if defined) passed. In this case test results are not shown.',
|
||||
'includes': 'uključuje',
|
||||
'inspect attributes': 'inspect attributes',
|
||||
'Install': 'Instaliraj',
|
||||
'Installed applications': 'Instalirane aplikacije',
|
||||
'invalid password.': 'pogrešna lozinka.',
|
||||
'Key bindings': 'Prečice',
|
||||
'Key bindings for ZenCoding Plugin': 'Prečice za for ZenCoding Plugin',
|
||||
'Language files (static strings) updated': 'Jezičke datoteke su ažurirane',
|
||||
'languages': 'jezici',
|
||||
'Languages': 'Jezici',
|
||||
'Last saved on:': 'Posljednja izmjena:',
|
||||
'License for': 'Licenca za',
|
||||
'loading...': 'preuzimam...',
|
||||
'locals': 'locals',
|
||||
'Login': 'Prijava',
|
||||
'Login to the Administrative Interface': 'Prijava za administrativni interfejs',
|
||||
'Logout': 'Izlaz',
|
||||
'Match Pair': 'Match Pair',
|
||||
'Merge Lines': 'Spoji linije',
|
||||
'models': 'models',
|
||||
'Models': 'Models',
|
||||
'Modules': 'Modules',
|
||||
'modules': 'modules',
|
||||
'New Application Wizard': 'Čarobnjak za nove aplikacije',
|
||||
'New application wizard': 'Čarobnjak za nove aplikacije',
|
||||
'New simple application': 'Nova jednostavna aplikacija',
|
||||
'Next Edit Point': 'Next Edit Point',
|
||||
'No ticket_storage.txt found under /private folder': 'No ticket_storage.txt found under /private folder',
|
||||
'online designer': 'onlajn dizajner',
|
||||
'Original/Translation': 'Original/Prevod',
|
||||
'Overwrite installed app': 'Prebriši postojeću aplikaciju',
|
||||
'Pack all': 'Zapakuj sve',
|
||||
'Peeking at file': 'Peeking at file',
|
||||
'Plugins': 'Plugins',
|
||||
'plugins': 'plugins',
|
||||
'Plural-Forms:': 'Plural-Forms:',
|
||||
'Powered by': 'Omogućio',
|
||||
'Previous Edit Point': 'Previous Edit Point',
|
||||
'Private files': 'Private files',
|
||||
'private files': 'private files',
|
||||
'Project Progress': 'Napredak projekta',
|
||||
'Reload routes': 'Obnovi preusmjerenja',
|
||||
'Removed Breakpoint on %s at line %s': 'Removed Breakpoint on %s at line %s',
|
||||
'Replace': 'Zamijeni',
|
||||
'Replace All': 'Zamijeni sve',
|
||||
'request': 'request',
|
||||
'response': 'response',
|
||||
'restart': 'restart',
|
||||
'restore': 'restore',
|
||||
'revert': 'revert',
|
||||
'rules are not defined': 'pravila nisu definisana',
|
||||
'rules:': 'pravila:',
|
||||
"Run tests in this file (to run all files, you may also use the button labelled 'test')": "Run tests in this file (to run all files, you may also use the button labelled 'test')",
|
||||
'Running on %s': 'Pokrenuto na %s',
|
||||
'Save': 'Sačuvaj',
|
||||
'Save via Ajax': 'Sačuvaj via Ajax',
|
||||
'Saved file hash:': 'Sačuvano kao haš:',
|
||||
'session': 'sesija',
|
||||
'session expired': 'sesija istekla',
|
||||
'Set Breakpoint on %s at line %s: %s': 'Set Breakpoint on %s at line %s: %s',
|
||||
'shell': 'shell',
|
||||
'Site': 'Sajt',
|
||||
'skip to generate': 'skip to generate',
|
||||
'Start a new app': 'Pokreni novu aplikaciju',
|
||||
'Start searching': 'Pokreni pretragu',
|
||||
'Start wizard': 'Pokreni čarobnjaka',
|
||||
'static': 'static',
|
||||
'Static files': 'Static files',
|
||||
'Step': 'Korak',
|
||||
'Submit': 'Prihvati',
|
||||
'successful': 'uspješan',
|
||||
'test': 'test',
|
||||
'Testing application': 'Testing application',
|
||||
'The application logic, each URL path is mapped in one exposed function in the controller': 'The application logic, each URL path is mapped in one exposed function in the controller',
|
||||
'The data representation, define database tables and sets': 'The data representation, define database tables and sets',
|
||||
'The presentations layer, views are also known as templates': 'The presentations layer, views are also known as templates',
|
||||
'There are no models': 'There are no models',
|
||||
'There are no plugins': 'There are no plugins',
|
||||
'There are no private files': 'There are no private files',
|
||||
'These files are not served, they are only available from within your app': 'These files are not served, they are only available from within your app',
|
||||
'These files are served without processing, your images go here': 'These files are served without processing, your images go here',
|
||||
'Ticket ID': 'Ticket ID',
|
||||
'Ticket Missing': 'Ticket nedostaje',
|
||||
'to previous version.': 'na prethodnu verziju.',
|
||||
'To create a plugin, name a file/folder plugin_[name]': 'To create a plugin, name a file/folder plugin_[name]',
|
||||
'toggle breakpoint': 'toggle breakpoint',
|
||||
'Toggle Fullscreen': 'Toggle Fullscreen',
|
||||
'Traceback': 'Traceback',
|
||||
'Translation strings for the application': 'Riječi u aplikaciji koje treba prevesti',
|
||||
'Try the mobile interface': 'Probaj mobilni interfejs',
|
||||
'try view': 'try view',
|
||||
'uncheck all': 'uncheck all',
|
||||
'Uninstall': 'Deinstaliraj',
|
||||
'update': 'ažuriraj',
|
||||
'update all languages': 'ažuriraj sve jezike',
|
||||
'upload': 'Otpremi',
|
||||
'Upload a package:': 'Preuzmi paket:',
|
||||
'Upload and install packed application': 'Preuzmi i instaliraj zapakovanu aplikaciju',
|
||||
'upload file:': 'preuzmi datoteku:',
|
||||
'upload plugin file:': 'preuzmi plugin datoteku:',
|
||||
'variables': 'variables',
|
||||
'Version': 'Verzija',
|
||||
'Version %s.%s.%s (%s) %s': 'Verzija %s.%s.%s (%s) %s',
|
||||
'Versioning': 'Versioning',
|
||||
'views': 'views',
|
||||
'Views': 'Views',
|
||||
'Web Framework': 'Web Framework',
|
||||
'web2py is up to date': 'web2py je ažuran',
|
||||
'web2py Recent Tweets': 'web2py Recent Tweets',
|
||||
'Wrap with Abbreviation': 'Wrap with Abbreviation',
|
||||
}
|
||||
@@ -8,35 +8,33 @@ def A_button(*a, **b):
|
||||
b['_data-inline'] = 'true'
|
||||
return A(*a, **b)
|
||||
|
||||
|
||||
def button(href, label):
|
||||
if is_mobile:
|
||||
ret = A_button(SPAN(label), _href=href)
|
||||
else:
|
||||
ret = A(SPAN(label), _class='button', _href=href)
|
||||
ret = A(SPAN(label), _class='button btn', _href=href)
|
||||
return ret
|
||||
|
||||
|
||||
def button_enable(href, app):
|
||||
if os.path.exists(os.path.join(apath(app, r=request), 'DISABLED')):
|
||||
label = SPAN(T('Enable'), _style='color:red')
|
||||
else:
|
||||
label = SPAN(T('Disable'), _style='color:green')
|
||||
id = 'enable_' + app
|
||||
return A(label, _class='button', _id=id, callback=href, target=id)
|
||||
|
||||
return A(label, _class='button btn', _id=id, callback=href, target=id)
|
||||
|
||||
def sp_button(href, label):
|
||||
if request.user_agent().is_mobile:
|
||||
ret = A_button(SPAN(label), _href=href)
|
||||
else:
|
||||
ret = A(SPAN(label), _class='button special', _href=href)
|
||||
ret = A(SPAN(label), _class='button special btn btn-inverse', _href=href)
|
||||
return ret
|
||||
|
||||
|
||||
def helpicon():
|
||||
return IMG(_src=URL('static', 'images/help.png'), _alt='help')
|
||||
|
||||
|
||||
def searchbox(elementid):
|
||||
return TAG[''](LABEL(IMG(_id="search_start", _src=URL('static', 'images/search.png'), _alt=T('filter')), _class='icon', _for=elementid), ' ', INPUT(_id=elementid, _type='text', _size=12))
|
||||
return SPAN(LABEL(IMG(_id="search_start", _src=URL('static', 'images/search.png'), _alt=T('filter')),
|
||||
_class='icon', _for=elementid), ' ',
|
||||
INPUT(_id=elementid, _type='text', _size=12, _class="input-medium"),
|
||||
_class="searchbox")
|
||||
@@ -21,6 +21,12 @@ if request.vars.app or request.args:
|
||||
_c == 'mercurial' and _f == 'commit',
|
||||
URL(_a, 'mercurial', 'commit', args=_t)))
|
||||
|
||||
if os.path.exists('applications/examples'):
|
||||
response.menu.append(
|
||||
(T('Help'), False, URL('examples', 'default', 'documentation')))
|
||||
else:
|
||||
response.menu.append((T('Help'), False, 'http://web2py.com/examples/default/documentation'))
|
||||
|
||||
if not session.authorized:
|
||||
response.menu = [(T('Login'), True, URL('site'))]
|
||||
else:
|
||||
@@ -29,8 +35,3 @@ else:
|
||||
response.menu.append((T('Debug'), False,
|
||||
URL(_a, 'debug', 'interact')))
|
||||
|
||||
if os.path.exists('applications/examples'):
|
||||
response.menu.append(
|
||||
(T('Help'), False, URL('examples', 'default', 'index')))
|
||||
else:
|
||||
response.menu.append((T('Help'), False, 'http://web2py.com/examples'))
|
||||
|
||||
0
applications/admin/private/hosts.deny
Normal file
9
applications/admin/static/css/bootstrap-responsive.min.css
vendored
Normal file
9
applications/admin/static/css/bootstrap.min.css
vendored
Normal file
579
applications/admin/static/css/bootstrap_adapters.css
vendored
Normal file
@@ -0,0 +1,579 @@
|
||||
/*=============================================================
|
||||
GENERAL
|
||||
==============================================================*/
|
||||
html,body{height:auto;background:transparent;}
|
||||
/*=============================================================
|
||||
CONTROLS
|
||||
==============================================================*/
|
||||
label,
|
||||
input,
|
||||
button,
|
||||
select,
|
||||
textarea,
|
||||
button.btn
|
||||
{
|
||||
font-size:13px;
|
||||
font-weight:normal;
|
||||
line-height:18px;
|
||||
}
|
||||
textarea,
|
||||
select
|
||||
{
|
||||
margin-bottom:9px;
|
||||
}
|
||||
select,
|
||||
/*textarea,*/
|
||||
input[type="text"],
|
||||
input[type="password"],
|
||||
input[type="datetime"],
|
||||
input[type="datetime-local"],
|
||||
input[type="date"],
|
||||
input[type="month"],
|
||||
input[type="time"],
|
||||
input[type="week"],
|
||||
input[type="number"],
|
||||
input[type="email"],
|
||||
input[type="url"],
|
||||
input[type="search"],
|
||||
input[type="tel"],
|
||||
input[type="color"],
|
||||
.uneditable-input,
|
||||
a.btn-lnk
|
||||
{
|
||||
height:18px;
|
||||
padding:4px;
|
||||
font-size:13px;
|
||||
line-height:18px;
|
||||
}
|
||||
.design h3,
|
||||
.plugin h3
|
||||
{
|
||||
background-position:0 2px;
|
||||
}
|
||||
|
||||
select,
|
||||
input[type="file"]
|
||||
{
|
||||
height:28px;
|
||||
line-height:28px;
|
||||
}
|
||||
input[type="submit"],
|
||||
input[type="button"]
|
||||
{
|
||||
font-size:13px;
|
||||
height:28px;
|
||||
line-height:18px;
|
||||
padding:4px 10px;
|
||||
}
|
||||
input[type="radio"],
|
||||
input[type="checkbox"]
|
||||
{
|
||||
margin-top:2px;
|
||||
}
|
||||
.button.btn
|
||||
{
|
||||
line-height:1.25em;
|
||||
font-size:inherit;
|
||||
border:none;
|
||||
text-shadow:none;
|
||||
margin-bottom:0px;
|
||||
-webkit-border-radius:0px;
|
||||
-moz-border-radius:0px;
|
||||
border-radius:0px;
|
||||
-webkit-box-shadow:none;
|
||||
-moz-box-shadow:none;
|
||||
box-shadow:none);
|
||||
}
|
||||
.button.btn:hover
|
||||
{
|
||||
background-color:transparent;
|
||||
-webkit-transition: background-position 0s linear;
|
||||
-moz-transition: background-position 0s linear;
|
||||
-o-transition: background-position 0s linear;
|
||||
transition: background-position 0s linear;
|
||||
}
|
||||
form label
|
||||
{
|
||||
font-weight:bold;
|
||||
}
|
||||
.help
|
||||
{
|
||||
border-color:transparent;
|
||||
}
|
||||
/* tree menu */
|
||||
.folder
|
||||
{
|
||||
border:none;
|
||||
}
|
||||
.folder>i
|
||||
{
|
||||
display:none;
|
||||
}
|
||||
.celled
|
||||
{
|
||||
padding-top: 2px;
|
||||
}
|
||||
.celled-one
|
||||
{
|
||||
padding-top: 1px;
|
||||
}
|
||||
|
||||
.test h3
|
||||
{
|
||||
border:0;
|
||||
padding-left:18px;
|
||||
}
|
||||
/*=============================================================
|
||||
FLASH MESSAGEBOX
|
||||
==============================================================*/
|
||||
.flash
|
||||
{
|
||||
position:fixed;
|
||||
width:50%;
|
||||
top:49px;
|
||||
left:25%;
|
||||
right:25%;
|
||||
cursor:default;
|
||||
text-align:center;
|
||||
padding:8px 35px 8px 14px;
|
||||
z-index:5620;
|
||||
}
|
||||
.flash>.close
|
||||
{
|
||||
color:inherit;
|
||||
opacity:0.7;
|
||||
}
|
||||
.flash>.close:hover
|
||||
{
|
||||
opacity:0.9;
|
||||
}
|
||||
/*=============================================================
|
||||
NAVBAR
|
||||
==============================================================*/
|
||||
.navbar-fixed-top .navbar-inner,
|
||||
.navbar-static-top .navbar-inner
|
||||
{
|
||||
/* in place of shadow image */
|
||||
-webkit-box-shadow:0px 10px 20px rgba(195,195,195,1.0);
|
||||
-moz-box-shadow: 0px 10px 20px rgba(195,195,195,1.0);
|
||||
box-shadow: 0px 10px 20px rgba(195,195,195,1.0);
|
||||
//zoom:1; /* IE6-9 */
|
||||
filter:progid:DXImageTransform.Microsoft.DropShadow(OffX=0, OffY=10, Color=#000000); /* IE6-9 */
|
||||
padding:0;
|
||||
}
|
||||
.navbar-inverse .navbar-inner
|
||||
{
|
||||
min-height:33px; /* required - override */
|
||||
height:33px;
|
||||
filter:progid:DXImageTransform.Microsoft.gradient(enabled=false); /* IE6-9 */
|
||||
background:#292929 url(../images/header_bg.png) repeat-x;
|
||||
border:none;
|
||||
}
|
||||
#header
|
||||
{
|
||||
background:transparent;
|
||||
}
|
||||
#header.navbar
|
||||
{
|
||||
overflow:visible;
|
||||
}
|
||||
.navbar-inverse .nav > li > a
|
||||
{
|
||||
padding:0;
|
||||
line-height:1.25;
|
||||
text-shadow:none;
|
||||
}
|
||||
.navbar .btn-navbar
|
||||
{
|
||||
padding:4px;
|
||||
margin:5px 5px 0 5px;
|
||||
}
|
||||
#menu{margin-right:-7px;}
|
||||
/*=============================================================
|
||||
FOOTER
|
||||
==============================================================*/
|
||||
#footer
|
||||
{
|
||||
padding-bottom:0;
|
||||
}
|
||||
/*=============================================================
|
||||
MAIN
|
||||
==============================================================*/
|
||||
#main
|
||||
{
|
||||
position:static;
|
||||
padding-top:0;
|
||||
padding-bottom:0;
|
||||
}
|
||||
/*=============================================================
|
||||
SIDEBAR
|
||||
==============================================================*/
|
||||
.sidebar_inner
|
||||
{
|
||||
background:transparent;
|
||||
padding:0;
|
||||
min-width:auto;
|
||||
}
|
||||
.sidebar .box {
|
||||
border-top:1px solid #EEE;
|
||||
}
|
||||
/*=============================================================
|
||||
WIZARD
|
||||
==============================================================*/
|
||||
.step div.help li
|
||||
{
|
||||
line-height:inherit;
|
||||
}
|
||||
.ms-container .ms-selectable li.ms-elem-selectable,
|
||||
.ms-container .ms-selection li.ms-elem-selected
|
||||
{
|
||||
font-size:13px;
|
||||
}
|
||||
.input-append a.btn
|
||||
{
|
||||
padding:4px;
|
||||
height:18px;
|
||||
font-size:13px;
|
||||
line-height:18px;
|
||||
}
|
||||
/*=============================================================
|
||||
ERRORS TABLE
|
||||
==============================================================*/
|
||||
.errors .table th
|
||||
{
|
||||
filter:progid:DXImageTransform.Microsoft.gradient(enabled=false); /* IE6-9 */
|
||||
}
|
||||
|
||||
.tablebar span.help
|
||||
{
|
||||
font-weight:normal;
|
||||
line-height:1.25em;
|
||||
text-shadow:none;
|
||||
width:auto;
|
||||
}
|
||||
/*=============================================================
|
||||
TOOLTIP
|
||||
==============================================================*/
|
||||
.tooltip.in
|
||||
{
|
||||
opacity:1;
|
||||
filter:alpha(opacity=100);
|
||||
}
|
||||
.tooltip-inner
|
||||
{
|
||||
opacity:1;
|
||||
text-align:left;
|
||||
background:#9fb364;
|
||||
color:#eef1d9;
|
||||
border:1px solid #eef1d9;
|
||||
font-style:italic;
|
||||
padding:0.3em;
|
||||
-moz-border-radius:0.5em;
|
||||
border-radius:0.5em;
|
||||
font-size:13px;
|
||||
text-transform:none;
|
||||
}
|
||||
.tooltip.right .tooltip-arrow,
|
||||
.tooltip.left .tooltip-arrow
|
||||
{
|
||||
border-color:transparent;
|
||||
}
|
||||
|
||||
/*=============================================================
|
||||
THE GRID
|
||||
==============================================================*/
|
||||
.w2p_grid_bottom_bar .w2p_export_menu
|
||||
{
|
||||
line-height:18px;
|
||||
margin-left:0;
|
||||
}
|
||||
.w2p_export_menu .dropdown-toggle
|
||||
{
|
||||
cursor:pointer;
|
||||
margin:0;
|
||||
padding:0;
|
||||
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(white), to(#E6E6E6));
|
||||
background-image: -webkit-linear-gradient(top, white, #E6E6E6);
|
||||
background-image: -o-linear-gradient(top, white, #E6E6E6);
|
||||
background-image: linear-gradient(to bottom, white, #E6E6E6);
|
||||
background-image: -moz-linear-gradient(top, white, #E6E6E6);
|
||||
}
|
||||
.w2p_export_menu ul
|
||||
{
|
||||
margin-top:2px;
|
||||
display:none;
|
||||
}
|
||||
.w2p_export_menu li
|
||||
{
|
||||
display:list-item;
|
||||
margin:0;
|
||||
}
|
||||
div.web2py_grid
|
||||
{
|
||||
font-size:13px;
|
||||
line-height:18px;
|
||||
}
|
||||
.web2py_grid a.btn
|
||||
{
|
||||
font-size:13px;
|
||||
line-height:18px;
|
||||
padding:4px 10px;
|
||||
margin-left:0;
|
||||
margin-right:4px;
|
||||
|
||||
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));
|
||||
background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6);
|
||||
background-image: -o-linear-gradient(top, #ffffff, #e6e6e6);
|
||||
background-image: linear-gradient(to bottom, #ffffff, #e6e6e6);
|
||||
background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6);
|
||||
}
|
||||
.web2py_grid .input-append .btn
|
||||
{
|
||||
padding:4px 10px;
|
||||
margin-right:0;
|
||||
font-family:inherit;
|
||||
color:#333;
|
||||
text-shadow:0 1px 1px rgba(255, 255, 255, 0.75);
|
||||
border:1px solid #c5c5c5;
|
||||
}
|
||||
.web2py_grid select:focus
|
||||
{
|
||||
border-color:rgba(232,149,60,0.8);
|
||||
outline:0;
|
||||
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 8px rgba(232, 149, 60, 0.6);
|
||||
-moz-box-shadow: inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(232,149,60,0.6);
|
||||
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 8px rgba(232, 149, 60, 0.6);
|
||||
}
|
||||
.web2py_console input[type="button"],
|
||||
.web2py_grid .row_buttons a.btn
|
||||
{
|
||||
color:#333;
|
||||
line-height:18px;
|
||||
padding:4px 10px;
|
||||
text-shadow:rgba(255, 255, 255, 0.74902) 0px 1px 1px;
|
||||
border-color:rgba(0, 0, 0, 0.15) rgba(0, 0, 0, 0.15) rgba(0, 0, 0, 0.25);
|
||||
-webkit-border-radius: 4px;
|
||||
-moz-border-radius: 4px;
|
||||
border-radius: 4px;
|
||||
}
|
||||
.web2py_console input[type="button"]:hover,
|
||||
.web2py_grid .row_buttons a.btn:hover
|
||||
{
|
||||
color:#333;
|
||||
border-color:rgba(0, 0, 0, 0.15) rgba(0, 0, 0, 0.15) rgba(0, 0, 0, 0.25);
|
||||
background:#E6E6E6;
|
||||
background-position: 0 -15px !important;
|
||||
-webkit-transition: background-position .1s linear;
|
||||
-moz-transition: background-position .1s linear;
|
||||
-o-transition: background-position .1s linear;
|
||||
transition: background-position .1s linear;
|
||||
}
|
||||
.web2py_table
|
||||
{
|
||||
border:none;
|
||||
}
|
||||
.web2py_table table
|
||||
{
|
||||
/*table-layout:fixed;*/
|
||||
margin-bottom:4px;
|
||||
}
|
||||
.web2py_table table td
|
||||
{
|
||||
/*word-wrap:break-word;*/ /*uncomment when "table-layout:fixed" is applied */
|
||||
}
|
||||
|
||||
.web2py_grid thead th
|
||||
{
|
||||
background-color:transparent;
|
||||
padding:4px 5px;
|
||||
line-height:18px;
|
||||
vertical-align:bottom;
|
||||
border-right:0;
|
||||
border-bottom:0;
|
||||
word-wrap:break-word;
|
||||
}
|
||||
.web2py_grid .btn-group > .dropdown-menu
|
||||
{
|
||||
font-size:13px;
|
||||
}
|
||||
.web2py_grid .dropdown-menu li > a:hover,
|
||||
.web2py_grid .dropdown-menu li > a:focus
|
||||
{
|
||||
filter:progid:DXImageTransform.Microsoft.gradient(enabled=false); /* IE6-9 */
|
||||
background-image:none;
|
||||
background-color:#E8953C;
|
||||
}
|
||||
.pagination
|
||||
{
|
||||
margin:0;
|
||||
height:30px;
|
||||
}
|
||||
.pagination ul > li > a
|
||||
{
|
||||
line-height:28px;
|
||||
}
|
||||
|
||||
#w2p_grid_addbtn:focus,
|
||||
#w2p_search-form :focus,
|
||||
.btn:focus
|
||||
{
|
||||
outline:none;
|
||||
}
|
||||
.web2py_console input[type="button"]:focus,
|
||||
.web2py_grid .row_buttons a.btn:focus
|
||||
{
|
||||
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.15) inset, 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
div.web2py_counter.span6
|
||||
{
|
||||
min-height:20px;
|
||||
}
|
||||
.web2py_paginator
|
||||
{
|
||||
border:0;
|
||||
margin:0;
|
||||
padding:0;
|
||||
background-color:transparent;
|
||||
}
|
||||
.web2py_paginator ul li a
|
||||
{
|
||||
margin-right:0;
|
||||
padding:0 14px;
|
||||
border:1px solid #DDD;
|
||||
border-left-width:0;
|
||||
color:#E8953C;
|
||||
}
|
||||
.web2py_paginator ul li a:hover
|
||||
{
|
||||
background: whiteSmoke;
|
||||
border: 1px solid #DDD;
|
||||
border-left-width:0;
|
||||
color:#e2821b;
|
||||
}
|
||||
.web2py_paginator ul li:first-child a,
|
||||
.web2py_paginator ul li:first-child a:hover
|
||||
{
|
||||
border-left-width:1px;
|
||||
}
|
||||
.web2py_paginator .current
|
||||
{
|
||||
font-weight:normal;
|
||||
}
|
||||
.web2py_paginator ul li.current a:hover
|
||||
{
|
||||
color:#999;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
.editor-bar-column a[name="save"]
|
||||
{
|
||||
background-color: whiteSmoke;
|
||||
background-image: -webkit-gradient(linear,0 0,0 100%,from(white),to(#E6E6E6));
|
||||
background-image: -webkit-linear-gradient(top,white,#E6E6E6);
|
||||
background-image: -o-linear-gradient(top,white,#E6E6E6);
|
||||
background-image: linear-gradient(to bottom,white,#E6E6E6);
|
||||
background-image: -moz-linear-gradient(top,white,#E6E6E6);
|
||||
background-repeat: repeat-x;
|
||||
padding:2px 6px;
|
||||
font-size:11px;
|
||||
line-height:17px;
|
||||
margin:0;
|
||||
}
|
||||
.editor-bar-column a[name="save"]:hover
|
||||
{
|
||||
background-color: #E6E6E6;
|
||||
background-position: 0 -15px;
|
||||
-webkit-transition: background-position .1s linear;
|
||||
-moz-transition: background-position .1s linear;
|
||||
-o-transition: background-position .1s linear;
|
||||
transition: background-position .1s linear;
|
||||
}
|
||||
.keybindings
|
||||
{
|
||||
padding:0 18px 10px;
|
||||
}
|
||||
.keybindings li
|
||||
{
|
||||
margin-bottom:0;
|
||||
}
|
||||
|
||||
/*----- translate page ---*/
|
||||
|
||||
.languageform input
|
||||
{
|
||||
margin-bottom:0;
|
||||
}
|
||||
.languageform div
|
||||
{
|
||||
margin-bottom:9px;
|
||||
}
|
||||
.languageform input.untranslated
|
||||
{
|
||||
background-color:#FC0;
|
||||
}
|
||||
|
||||
.step #wizard_nav .first-box
|
||||
{
|
||||
padding-top:0;
|
||||
}
|
||||
|
||||
/*=============================================================
|
||||
MEDIA QUERIES
|
||||
==============================================================*/
|
||||
@media (max-width: 979px)
|
||||
{
|
||||
/*-----------------------------------
|
||||
Navbar
|
||||
-------------------------------------*/
|
||||
#header .navbar-inner
|
||||
{
|
||||
padding:0;
|
||||
}
|
||||
/*collapsed menu*/
|
||||
.navbar .nav-collapse .nav
|
||||
{
|
||||
background:#222;
|
||||
padding:8px 2px 8px 8px;
|
||||
-webkit-border-bottom-right-radius:8px;
|
||||
-webkit-border-bottom-left-radius:8px;
|
||||
-moz-border-radius-bottomright:8px;
|
||||
-moz-border-radius-bottomleft:8px;
|
||||
border-bottom-right-radius:8px;
|
||||
border-bottom-left-radius:8px;
|
||||
}
|
||||
#menu
|
||||
{
|
||||
margin-right:0;
|
||||
}
|
||||
#menu li
|
||||
{
|
||||
float:none;
|
||||
}
|
||||
#menu a.button,
|
||||
#menu a.button span
|
||||
{
|
||||
background-image:url(../images/menu_responsive.png);
|
||||
}
|
||||
#menu a.button
|
||||
{
|
||||
padding:0 1em 0 0;
|
||||
}
|
||||
}
|
||||
@media(max-width:632px)
|
||||
{
|
||||
/*-----------------------------------
|
||||
footer
|
||||
-------------------------------------*/
|
||||
#footer
|
||||
{
|
||||
height:auto;
|
||||
}
|
||||
|
||||
#footer select
|
||||
{
|
||||
margin-top:8px;
|
||||
}
|
||||
}
|
||||
351
applications/admin/static/css/bootstrap_essentials.css
vendored
Normal file
@@ -0,0 +1,351 @@
|
||||
|
||||
/*=============================================================
|
||||
GENERAL
|
||||
==============================================================*/
|
||||
body { /*remember to account for the hidden area underneath
|
||||
fixed navbar by adding at least 40px padding to the <body>.
|
||||
Be sure to add this after the core Bootstrap CSS
|
||||
and before the optional responsive CSS.
|
||||
An alternative solution is to set top-margin to div#main padding-top:60px; comment this for alternative solution*/ height:auto; /*uncomment this for alternative solution*/ }
|
||||
|
||||
/*=============================================================
|
||||
BOOTSTRAP ICONS FOLDER FIX
|
||||
==============================================================*/
|
||||
[class^="icon-"], [class*=" icon-"] { /* right folder for bootstrap black images/icons*/ background-image:url("../images/glyphicons-halflings.png") }
|
||||
|
||||
.icon-white, .nav-tabs>.active >a>[class^="icon-"], .nav-tabs>.active>a>[class*=" icon-"], .nav-pills>.active>a>[class^="icon-"], .nav-pills>.active>a>[class*=" icon-"], .nav-list>.active>a>[class^="icon-"], .nav-list>.active>a>[class*=" icon-"], .navbar-inverse .nav>.active>a>[class^="icon-"], .navbar-inverse .nav>.active>a>[class*=" icon-"], .dropdown-menu>li>a:hover>[class^="icon-"], .dropdown-menu>li>a:hover>[class*=" icon-"], .dropdown-menu>.active>a>[class^="icon-"], .dropdown-menu>.active>a>[class*=" icon-"] { /* right folder for bootstrap white images/icons*/ background-image:url("../images/glyphicons-halflings-white.png"); }
|
||||
|
||||
/*=============================================================
|
||||
INPUT BORDER HIGHLIGHT WHEN INPUT IS FOCUSED
|
||||
==============================================================*/
|
||||
textarea:focus, input[type="text"]:focus, input[type="password"]:focus, input[type="datetime"]:focus, input[type="datetime-local"]:focus, input[type="date"]:focus, input[type="month"]:focus, input[type="time"]:focus, input[type="week"]:focus, input[type="number"]:focus, input[type="email"]:focus, input[type="url"]:focus, input[type="search"]:focus, input[type="tel"]:focus, input[type="color"]:focus, input[type="file"]:focus, select:focus, .uneditable-input:focus { /* outline color*/ border-color:rgba(232, 149, 60, 0.8); outline:0; /*outline:thin dotted \9;*/ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(232, 149, 60, 0.6); -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(232, 149, 60, 0.6); box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(232, 149, 60, 0.6); }
|
||||
|
||||
.web2py_grid .dropdown-menu li > a:hover, .web2py_grid .dropdown-menu li > a:focus { filter:progid:DXImageTransform.Microsoft.gradient(enabled=false); /* IE6-9*/ background-image:none; background-color:#E8953C; }
|
||||
|
||||
/*=============================================================
|
||||
COLOR OF LINKS
|
||||
==============================================================*/
|
||||
a, a:hover { color:#E8953C; text-decoration:none; }
|
||||
|
||||
a:hover { color:#e2821b; }
|
||||
|
||||
/*=============================================================
|
||||
CONTROLS and CONTAINERS
|
||||
==============================================================*/
|
||||
.row-buttons .btn { margin-bottom:7px; }
|
||||
|
||||
.sidebar .box { clear:right; margin-top:2em; border-top:1px solid #d1d1d1; padding:0 1em; }
|
||||
|
||||
.pwdchange>.button { margin-bottom:10px; }
|
||||
|
||||
input[type="file"] { margin-bottom:9px; }
|
||||
|
||||
.form-inline input[type="file"] { margin-bottom:0px; }
|
||||
|
||||
input + .help-block { margin-top:-5px; margin-bottom:4px; }
|
||||
|
||||
#confirm_form input.btn, .generatedbyw2p input { margin-right:4px; }
|
||||
|
||||
a[rel='tooltip'] span, div[rel='tooltip'] span { display:none; margin-left:-9999px; }
|
||||
|
||||
/*in-page browsing*/
|
||||
[rel="pagebookmark"] { position:relative; }
|
||||
|
||||
[rel="pagebookmark"]>.component { cursor:pointer; }
|
||||
|
||||
[rel="pagebookmark"]>.hashstick { position:absolute; top:-54px; left:-9999px; visibility:visible; }
|
||||
|
||||
/* following 2 rules set the style of a small button for going to top of page*/
|
||||
.tophashlink.btn { padding:2px 3px; visibility:hidden; }
|
||||
|
||||
.hashstick:target+.tophashlink.btn { visibility:visible; }
|
||||
|
||||
ul.act_edit { margin-top:4px; margin-left:20px; }
|
||||
|
||||
ul.act_edit .btn { margin-top:4px; margin-bottom:4px; }
|
||||
|
||||
ul.act_edit .file>a { white-space:pre; }
|
||||
|
||||
.right-full { text-align:right; }
|
||||
|
||||
.searchbox, .searchbox label, .searchbox input { display:inline-block; }
|
||||
|
||||
.buttons-row .btn { margin-bottom:9px; }
|
||||
|
||||
.li-controls { display:inline-block; width:180px; vertical-align:middle; }
|
||||
|
||||
.celled { display:inline-block; padding: 0 0 0 4px; vertical-align:top; margin-top:4px; width:700px; }
|
||||
|
||||
.folder { list-style-type:none; #border-left: 1px dotted #AAA; }
|
||||
|
||||
.folder li { list-style-type:none; }
|
||||
|
||||
.folder>i { display:inline-block; width:5px; height:5px; border:1px solid; background-color:#FAA732; margin-left:-4px; margin-top:-2px; border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); border-radius:1px; }
|
||||
|
||||
.folder>i+a { padding-left:0.5em; }
|
||||
|
||||
.folder ul { margin-top:0.5em; margin-bottom:0.5em; }
|
||||
|
||||
.controls-inline .btn { margin-right:5px; }
|
||||
|
||||
div.web2py_counter.span6 { min-height:24px; text-align:right; }
|
||||
|
||||
.pagination { margin:0; }
|
||||
|
||||
.table { margin-bottom:10px; }
|
||||
|
||||
.row_buttons .btn { margin-right:4px; }
|
||||
|
||||
.editor-bar-column { display:inline-block; vertical-align:top; margin-right:4px; }
|
||||
|
||||
.editor-bar-column .input-long { width:270px; }
|
||||
|
||||
.editor-bar-column .input-normal { width:206px; }
|
||||
|
||||
.keybindings li { margin-bottom:0.5em; }
|
||||
|
||||
.keybindings span { padding:0.3em; border:1px solid transparent; vertical-align:middle; }
|
||||
|
||||
.teletype-text { font-family:monospace; font-weight:bold; font-style:normal; border-color:#999; background:#333; color:#DDD; -moz-border-radius:0.3em; border-radius:0.3em; }
|
||||
|
||||
.edit_language .tab_row div { display:inline-block; vertical-align:top; margin-right:4px; }
|
||||
|
||||
.edit_language .fake-input { height:18px; padding:4px; font-size:13px; line-height:18px; overflow:hidden; white-space:nowrap; display:inline-block; margin-bottom:9px; }
|
||||
|
||||
.test h3 { padding-left:9px; margin:0; font-size:16px; line-height:1; border-left:9px solid transparent; }
|
||||
|
||||
.test h3.passed { border-color:#009900; }
|
||||
|
||||
.test h3.failed { border-color:#CC0000; }
|
||||
|
||||
.test h3.nodoctests { border-color:#CCCC99; }
|
||||
|
||||
.test .test_report { width:100%; overflow:auto; }
|
||||
|
||||
.test_report pre { white-space:pre; }
|
||||
|
||||
.test div[id^="output_"]>h2 { font-size:18px; line-height:1; color:grey; }
|
||||
|
||||
div.center { text-align:center; }
|
||||
|
||||
.delete h2 { word-wrap:break-word; }
|
||||
|
||||
/*=============================================================
|
||||
SHELL
|
||||
==============================================================*/
|
||||
.shell .output-wrapper { width:100%; height:30em; border:1px solid #333; }
|
||||
|
||||
.shell .prompt-wrapper { float:left; width:100%; overflow:hidden; height:auto; border:1px solid #333; }
|
||||
|
||||
.shell .prompt-container { margin-left:2.5em; }
|
||||
|
||||
.shell #caret { width:2.5em; float:left; margin-left:-100%; }
|
||||
|
||||
.shell #shellwrapper { background:white; color:#E8953C; width:100%; margin:1em 0; border:0; }
|
||||
|
||||
.shell #output, .shell .prompt { color:#E8953C; background:white; resize:none; border:none; width:100%; height:100%; cursor:default; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; }
|
||||
|
||||
.shell #output:focus, .shell .prompt:focus { border-color:transparent; outline:0; -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; }
|
||||
|
||||
.shell #output pre { color: #E8953C; }
|
||||
|
||||
.shell #autoscroll { cursor:pointer; float:right; }
|
||||
|
||||
.shell .prompt, .shell #output, .shell #caret { font-size: 11pt; padding: 6px; padding-right: 0em; }
|
||||
|
||||
.shell #caret { padding-top:9px; }
|
||||
|
||||
.shell .prompt, .shell #output, .shell pre, .shell #caret { font-family: monospace; }
|
||||
|
||||
.shell a[rel="tooltip"] { margin-left:8px; }
|
||||
|
||||
/*=============================================================
|
||||
PEEK
|
||||
==============================================================*/
|
||||
.peek .code-wrapper { width:100%; overflow:auto; white-space:pre; }
|
||||
|
||||
.peek table td pre { word-break:normal; white-space:pre; }
|
||||
|
||||
/*=============================================================
|
||||
FOOTER
|
||||
==============================================================*/
|
||||
#footer { border-top:1px solid; text-align:center; padding:1em 0; }
|
||||
|
||||
#footer span, #footer select { display:inline-block; margin-bottom:0; vertical-align:middle; }
|
||||
|
||||
#footer select { width:auto; }
|
||||
|
||||
/*=============================================================
|
||||
MAIN
|
||||
==============================================================*/
|
||||
#main { margin-top:60px; /*uncomment this for alternative solution to hidden area underneath fixed navbar issue*/ margin-bottom:60px; }
|
||||
|
||||
/*=============================================================
|
||||
WIZARD
|
||||
==============================================================*/
|
||||
#wizard_nav .box { border-bottom:1px dotted; }
|
||||
|
||||
#wizard_nav li { margin-left:1em; margin-top:0.5em; }
|
||||
|
||||
.step textarea { width:auto; }
|
||||
|
||||
select[name='layout_theme'] { vertical-align:top; }
|
||||
|
||||
img#preview { margin-bottom:9px; }
|
||||
|
||||
/* multiselect customization*/
|
||||
.ms-container { margin-bottom:5px; }
|
||||
|
||||
.ms-selectable, .step .ms-selection { text-align:center; }
|
||||
|
||||
.ms-list { text-align:left; background:white; }
|
||||
|
||||
.ms-container li.ms-elem-selectable:not(.disabled).ms-hover, .ms-container .ms-selection li:not(.disabled).ms-hover { background-color:#E8953C; }
|
||||
|
||||
.ms-container .ms-selectable { margin-right:25px; }
|
||||
|
||||
.ms-container .ms-selectable, .ms-container .ms-selection { background:transparent; }
|
||||
|
||||
.ms-container .ms-list.ms-focus { border-color:rgba(232, 149, 60, 0.8); -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(232, 149, 60, 0.6); -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(232, 149, 60, 0.6); box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(232, 149, 60, 0.6); }
|
||||
|
||||
/* grow_input*/
|
||||
ul[id$="_grow_input"] { margin-left:0; }
|
||||
|
||||
/* generate_form*/
|
||||
#generate_form .control-group { margin-bottom:0; }
|
||||
|
||||
#generate_form .control-label { text-align:left; }
|
||||
|
||||
#generate_form .controls { padding-left:18px; margin-left:0; }
|
||||
|
||||
#generate_form .control-label.empty { width:142px; }
|
||||
|
||||
.step [rel="pagebookmark"]>.hashstick { display:none; }
|
||||
|
||||
/*generated page*/
|
||||
.generated iframe { border:1px inset #e3e3e3; }
|
||||
|
||||
/*=============================================================
|
||||
ERRORS TABLE / TICKET PAGE
|
||||
==============================================================*/
|
||||
.tablebar { margin:7px 0 7px 0; }
|
||||
|
||||
.tablebar input { margin-right:27px; }
|
||||
|
||||
.tablebar span { vertical-align:bottom; }
|
||||
|
||||
.table th { background: #e9e9e9; background: -moz-linear-gradient(top, #FAFAFA 0%, #E9E9E9 100%); background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #FAFAFA), color-stop(100%, #E9E9E9)); background: -webkit-linear-gradient(top, #FAFAFA 0%, #E9E9E9 100%); background: -o-linear-gradient(top, #FAFAFA 0%, #E9E9E9 100%); background: -ms-linear-gradient(top, #FAFAFA 0%, #E9E9E9 100%); background: linear-gradient(top, #FAFAFA 0%, #E9E9E9 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FAFAFA', endColorstr='#E9E9E9'); -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#FAFAFA', endColorstr='#E9E9E9')"; /*font-size:10px; color:#444; text-transform:uppercase;*/ }
|
||||
|
||||
td.cbcentered, th.cbcentered { text-align:center; }
|
||||
|
||||
td.cbcentered>input, th.cbcentered>input { margin-top:-1px; }
|
||||
|
||||
.traceback div { }
|
||||
|
||||
.ticket_code>table td:first-child { border-left:0; }
|
||||
|
||||
#trck_errors table td pre { word-break:normal; white-space:pre; }
|
||||
|
||||
.inspect pre, .errorsource pre { word-break:normal; white-space:pre; }
|
||||
|
||||
.ticket_code { background-color:lightyellow; }
|
||||
|
||||
.ticket_code table, .ticket_code td { border-width:0px; border-collapse:collapse; width:100%; }
|
||||
|
||||
.ticket_code tbody tr:hover td { background-color:transparent; }
|
||||
|
||||
/*=============================================================
|
||||
FLOT GRAPHS
|
||||
==============================================================*/
|
||||
.about #placeholder { width:auto; max-width:600px; height:300px; position:relative; margin:0 auto; /* for centering*/ }
|
||||
|
||||
/*=============================================================
|
||||
THE GRID
|
||||
==============================================================*/
|
||||
#w2p_query_panel { min-width:20px; min-height:20px; padding:10px; margin-top:1em; background-color:#f5f5f5; border: 1px solid #e3e3e3; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); }
|
||||
|
||||
#w2p_query_panel select, #w2p_query_panel input { margin-bottom:0; margin-right:4px; }
|
||||
|
||||
.web2py_grid .hidden { visibility:visible; }
|
||||
|
||||
.qry_pnl_btns { display:inline-block; }
|
||||
|
||||
#w2p_grid_addbtn, #w2p_search-form { margin-top:9px; margin-bottom:9px; }
|
||||
|
||||
#w2p_search-form { margin-bottom:0; }
|
||||
|
||||
#w2p_search-form form { margin-bottom:0; }
|
||||
|
||||
/*----- translate page ---*/
|
||||
.languageform input { margin-bottom:0; }
|
||||
|
||||
.languageform input.untranslated { background-color:#FC0; }
|
||||
|
||||
/*=============================================================
|
||||
MEDIA QUERIES
|
||||
==============================================================*/
|
||||
@media (max-width: 800px) { .step [rel="pagebookmark"]>.hashstick { /*top:-54px;*/ display:block; }
|
||||
|
||||
}
|
||||
|
||||
@media (max-width: 767px) { [rel="pagebookmark"]>.hashstick { top:0; }
|
||||
|
||||
/*-----------------------------------
|
||||
main
|
||||
-------------------------------------*/
|
||||
#main { margin-top:0; }
|
||||
|
||||
/*-----------------------------------
|
||||
footer
|
||||
-------------------------------------*/
|
||||
#footer { margin-left: -20px; margin-right: -20px; padding-left: 20px; padding-right: 20px; }
|
||||
|
||||
/*-----------------------------------
|
||||
errors page
|
||||
-------------------------------------*/
|
||||
#trck_errors { table-layout:fixed; }
|
||||
|
||||
#trck_errors .column1 { width:20px; }
|
||||
|
||||
#trck_errors .column2 { width:45px; }
|
||||
|
||||
#trck_errors .column3 { width:150px; }
|
||||
|
||||
#trck_errors .columnN { width:55px; }
|
||||
|
||||
#trck_errors .columnN1 { width:138px; }
|
||||
|
||||
.ticket_code, .inspect.resp1, .inspect.controls pre, .errorsource { width:100%; overflow:auto; }
|
||||
|
||||
.ticket_code>table { width:100%; }
|
||||
|
||||
.celled { width:320px; }
|
||||
|
||||
}
|
||||
|
||||
@media (max-width: 480px) { .qry_pnl_btns { display:block; margin-top:4px; }
|
||||
|
||||
/*-----------------------------------
|
||||
wizard
|
||||
-------------------------------------*/
|
||||
#generate_form .control-label { float:left; width:160px; padding-top:5px; }
|
||||
|
||||
.inspect>code { display:block; white-space:normal; }
|
||||
|
||||
.li-controls { }
|
||||
|
||||
.celled { width:165px; }
|
||||
|
||||
}
|
||||
|
||||
h4.editableapp, h4.currentapp { padding: 5px 0 5px 54px; display: inline; }
|
||||
|
||||
h4.editableapp { background: #fff url(../images/folder.png) no-repeat; }
|
||||
|
||||
h4.currentapp { background: #fff url(../images/folder_locked.png) no-repeat; }
|
||||
|
||||
.flash { position:fixed; width:50%; top:49px; left:25%; right:25%; cursor:default; text-align:center; z-index:5620; }
|
||||
|
||||
table.twitter{ background-color: transparent; }
|
||||
table.twitter tr td {vertical-align: top; padding: 5px; }
|
||||
table.twitter tr { border-bottom: 1px solid #a0a0a0; }
|
||||
@@ -1166,7 +1166,7 @@ ul#snapshot > li {
|
||||
font-size: 1em;
|
||||
color: #3C3C3D;
|
||||
text-shadow: 1px 1px 0 #FFFFFF;
|
||||
background:#ECECEC;
|
||||
//background:#ECECEC;
|
||||
white-space: nowrap; overflow: visible;
|
||||
cursor: pointer; text-decoration: none;
|
||||
border: 1px solid #CACACA;
|
||||
@@ -1244,8 +1244,64 @@ color: #222;
|
||||
border-radius:2px;
|
||||
}
|
||||
.ie9 #query_panel {padding-bottom:2px;}
|
||||
|
||||
.error, .error a {color:red}
|
||||
.pluralsform thead td {font-weight:bold; font-size:1.2em; padding-bottom:5px}
|
||||
.pluralsform td {padding-left:5px}
|
||||
.tm_ftag {color:blue}
|
||||
|
||||
/*-----------------------------------*/
|
||||
/* due to bootstrap layout
|
||||
/*-----------------------------------*/
|
||||
.navbar .btn-navbar{display:none;}
|
||||
label{display:block;}
|
||||
input{margin-bottom:5px;}
|
||||
.login input{width:210px;}
|
||||
.change_password input{width:210px;}
|
||||
div.flash .close{color:inherit;float:right;}
|
||||
label.checkbox{margin-bottom:5px;}
|
||||
.control-group{margin-bottom:5px;}
|
||||
.step #menu li{margin-left:0;margin-top:0;}
|
||||
.step #wizard_nav{padding-top:0.5em;}
|
||||
.hashstick{visibility:hidden;}
|
||||
#generate_form .control-label{float:left;width:160px;padding-top:5px;text-align:left;}
|
||||
#generate_form .controls > .checkbox:first-child{padding-top:7px;}
|
||||
/* from default/errors.html */
|
||||
table.sortable{border-spacing:0px;}
|
||||
table.sortable td, table.sortable th{padding:2px 5px 2px 5px;}
|
||||
table.sortable thead{background-color:#eee;color:#666666;font-weight:bold;cursor:default;}
|
||||
tr.error_ticket:hover{background-color:#eee;}
|
||||
.controls a.button.unavailable{color:#ff0000;}
|
||||
/* end from default/errors.html */
|
||||
/* new errors table */
|
||||
.tablebar{margin:7px 0 7px 0;}
|
||||
.cbcentered{text-align:center;}
|
||||
/* new tooltip */
|
||||
a[rel='tooltip']:hover{background:transparent;text-decoration:none;}
|
||||
a[rel='tooltip'] span{display:none;padding:5px;margin-left:10px;width:150px;}
|
||||
a[rel='tooltip']:hover span{cursor:default;display:inline;position:absolute;}
|
||||
a[rel='tooltip'] span{background:#9fb364;color:#eef1d9;border:1px solid #eef1d9;font-style:italic;width:20%;padding:0.3em;-moz-border-radius:0.5em;border-radius:0.5em;font-size:13px;text-transform:none;}
|
||||
/* flot graph */
|
||||
.about #placeholder{width:600px;height:300px;margin:0 auto;}
|
||||
.tophashlink.btn{visibility:hidden;}
|
||||
.help-block{display:block;}
|
||||
.w2p_grid_bottom_bar .w2p_export_menu{float:left;line-height:39px;margin-left:10px;}
|
||||
.w2p_export_menu .dropdown-toggle{cursor:default;color:#333;margin:0;padding:0;background-image:none;}
|
||||
.w2p_export_menu ul{display:inline-block;margin:0;vertical-align:middle;}
|
||||
.w2p_export_menu li{list-style:none;display:inline-block;margin-right:4px;margin-left:2px;}
|
||||
.edit_language .tab_row div{display:inline-block;vertical-align:top;margin-right:4px;}
|
||||
.edit_language .tab_row>div{border:1px solid #e3e3e3;margin-bottom:20px;background-color:#f5f5f5;}
|
||||
/* shell*/
|
||||
.shell .output-wrapper{width:75%;height:30em;border:1px solid #333;}
|
||||
.shell .prompt-wrapper{float:left;width:100%;overflow:hidden;height:auto;border:1px solid #333;}
|
||||
.shell .prompt-container{margin-left:2.5em;}
|
||||
.shell #caret{width:2.5em;float:left;margin-left:-100%;}
|
||||
.shell #shellwrapper{background:white;color:#E8953C;width:75%;margin:1em 0;border:0;}
|
||||
.shell #output,.shell .prompt{color:#E8953C;background:white;resize:none;border:none;width:100%;height:100%;cursor:default;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;}
|
||||
.shell #output:focus,.shell .prompt:focus{border-color:transparent;outline:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;}
|
||||
.shell #output pre{color:#E8953C;}
|
||||
.shell #autoscroll{cursor:pointer;float:right;}
|
||||
.shell .prompt,.shell #output,.shell #caret{font-size:11pt;padding:6px;padding-right:0em;}
|
||||
.shell .prompt,.shell #output,.shell pre,.shell #caret{font-family:monospace;}
|
||||
.shell a[rel="tooltip"]{margin-left:8px;}
|
||||
.shell .clearfix{clear:both;}
|
||||
.shell #caret{padding-top:9px;}
|
||||
232
applications/admin/static/css/web2py_bootstrap.css
Normal file
@@ -0,0 +1,232 @@
|
||||
/*=============================================================
|
||||
CUSTOM RULES
|
||||
==============================================================*/
|
||||
|
||||
body{height:auto;} /* to avoid vertical scroll bar */
|
||||
div.flash.flash-center{left:25%;right:25%;}
|
||||
div.flash.flash-top,div.flash.flash-top:hover{
|
||||
position:relative;
|
||||
display:block;
|
||||
margin:0;
|
||||
padding:1em;
|
||||
top:0;
|
||||
left:0;
|
||||
width:100%;
|
||||
text-align:center;
|
||||
text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);
|
||||
color:#865100;
|
||||
background:#feea9a;
|
||||
border:1px solid;
|
||||
border-top:0px;
|
||||
border-left:0px;
|
||||
border-right:0px;
|
||||
border-radius:0;
|
||||
opacity:1;
|
||||
}
|
||||
#header{margin-top:60px;}
|
||||
.mastheader h1 {
|
||||
margin-bottom:9px;
|
||||
font-size:81px;
|
||||
font-weight:bold;
|
||||
letter-spacing:-1px;
|
||||
line-height:1;
|
||||
font-size:54px;
|
||||
}
|
||||
.mastheader small {
|
||||
font-size:20px;
|
||||
font-weight:300;
|
||||
}
|
||||
/* auth navbar - primitive style */
|
||||
.auth_navbar,.auth_navbar a{color:inherit;}
|
||||
.ie-lte7 .auth_navbar,.auth_navbar a{color:expression(this.parentNode.currentStyle['color']); /* ie7 doesn't support inherit */}
|
||||
.auth_navbar a{white-space:nowrap;} /* to avoid the nav split on more lines */
|
||||
.auth_navbar a:hover{color:white;text-decoration:none;}
|
||||
ul#navbar>.auth_navbar{
|
||||
display:inline-block;
|
||||
padding:5px;
|
||||
}
|
||||
/* form errors message box customization */
|
||||
div.error_wrapper{margin-bottom:9px;}
|
||||
div.error_wrapper .error{
|
||||
border-radius: 4px;
|
||||
-o-border-radius: 4px;
|
||||
-moz-border-radius: 4px;
|
||||
-webkit-border-radius: 4px;
|
||||
}
|
||||
/* below rules are only for formstyle = bootstrap
|
||||
trying to make errors look like bootstrap ones */
|
||||
div.controls .error_wrapper{
|
||||
display:inline-block;
|
||||
margin-bottom:0;
|
||||
vertical-align:middle;
|
||||
}
|
||||
div.controls .error{
|
||||
min-width:5px;
|
||||
background:inherit;
|
||||
color:#B94A48;
|
||||
border:none;
|
||||
padding:0;
|
||||
margin:0;
|
||||
/*display:inline;*/ /* uncommenting this, the animation effect is lost */
|
||||
}
|
||||
div.controls .help-inline{color:#3A87AD;}
|
||||
div.controls .error_wrapper +.help-inline {margin-left:-99999px;}
|
||||
div.controls select +.error_wrapper {margin-left:5px;}
|
||||
.ie-lte7 div.error{color:#fff;}
|
||||
|
||||
/* beautify brand */
|
||||
.navbar-inverse .brand{color:#c6cecc;}
|
||||
.navbar-inverse .brand b{display:inline-block;margin-top:-1px;}
|
||||
.navbar-inverse .brand b>span{font-size:22px;color:white}
|
||||
.navbar-inverse .brand:hover b>span{color:white}
|
||||
/* beautify web2py link in navbar */
|
||||
span.highlighted{color:#d8d800;}
|
||||
.open span.highlighted{color:#ffff00;}
|
||||
|
||||
/*=============================================================
|
||||
OVERRIDING WEB2PY.CSS RULES
|
||||
==============================================================*/
|
||||
|
||||
/* reset to default */
|
||||
a{white-space:normal;}
|
||||
li{margin-bottom:0;}
|
||||
textarea,button{display:block;}
|
||||
/*reset ul padding */
|
||||
ul#navbar{padding:0;}
|
||||
/* label aligned to related input */
|
||||
td.w2p_fl,td.w2p_fc {padding:0;}
|
||||
#web2py_user_form td{vertical-align:middle;}
|
||||
|
||||
/*=============================================================
|
||||
OVERRIDING BOOTSTRAP.CSS RULES
|
||||
==============================================================*/
|
||||
|
||||
/* because web2py handles this via js */
|
||||
textarea { width:90%}
|
||||
.hidden{visibility:visible;}
|
||||
/* right folder for bootstrap black images/icons */
|
||||
[class^="icon-"],[class*=" icon-"]{
|
||||
background-image:url("../images/glyphicons-halflings.png")
|
||||
}
|
||||
/* right folder for bootstrap white images/icons */
|
||||
.icon-white,
|
||||
.nav-tabs > .active > a > [class^="icon-"],
|
||||
.nav-tabs > .active > a > [class*=" icon-"],
|
||||
.nav-pills > .active > a > [class^="icon-"],
|
||||
.nav-pills > .active > a > [class*=" icon-"],
|
||||
.nav-list > .active > a > [class^="icon-"],
|
||||
.nav-list > .active > a > [class*=" icon-"],
|
||||
.navbar-inverse .nav > .active > a > [class^="icon-"],
|
||||
.navbar-inverse .nav > .active > a > [class*=" icon-"],
|
||||
.dropdown-menu > li > a:hover > [class^="icon-"],
|
||||
.dropdown-menu > li > a:hover > [class*=" icon-"],
|
||||
.dropdown-menu > .active > a > [class^="icon-"],
|
||||
.dropdown-menu > .active > a > [class*=" icon-"] {
|
||||
background-image:url("../images/glyphicons-halflings-white.png");
|
||||
}
|
||||
/* bootstrap has a label as input's wrapper while web2py has a div */
|
||||
div>input[type="radio"],div>input[type="checkbox"]{margin:0;}
|
||||
/* bootstrap has button instead of input */
|
||||
input[type="button"], input[type="submit"]{margin-right:8px;}
|
||||
|
||||
/*=============================================================
|
||||
RULES FOR SOLVING CONFLICTS BETWEEN WEB2PY.CSS AND BOOTSTRAP.CSS
|
||||
==============================================================*/
|
||||
|
||||
/*when formstyle=table3cols*/
|
||||
tr#auth_user_remember__row>td.w2p_fw>div{padding-bottom:8px;}
|
||||
td.w2p_fw div>label{vertical-align:middle;}
|
||||
td.w2p_fc {padding-bottom:5px;}
|
||||
/*when formstyle=divs*/
|
||||
div#auth_user_remember__row{margin-top:4px;}
|
||||
div#auth_user_remember__row>.w2p_fl{display:none;}
|
||||
div#auth_user_remember__row>.w2p_fw{min-height:39px;}
|
||||
div.w2p_fw,div.w2p_fc{
|
||||
display:inline-block;
|
||||
vertical-align:middle;
|
||||
margin-bottom:0;
|
||||
}
|
||||
div.w2p_fc{
|
||||
padding-left:5px;
|
||||
margin-top:-8px;
|
||||
}
|
||||
/*when formstyle=ul*/
|
||||
form>ul{
|
||||
list-style:none;
|
||||
margin:0;
|
||||
}
|
||||
li#auth_user_remember__row{margin-top:4px;}
|
||||
li#auth_user_remember__row>.w2p_fl{display:none;}
|
||||
li#auth_user_remember__row>.w2p_fw{min-height:39px;}
|
||||
/*when formstyle=bootstrap*/
|
||||
#auth_user_remember__row label.checkbox{display:block;}
|
||||
span.inline-help{display:inline-block;}
|
||||
input[type="text"].input-xlarge,input[type="password"].input-xlarge{width:270px;}
|
||||
/*when recaptcha is used*/
|
||||
#recaptcha{min-height:30px;display:inline-block;margin-bottom:0;line-height:30px;vertical-align:middle;}
|
||||
td>#recaptcha{margin-bottom:6px;}
|
||||
div>#recaptcha{margin-bottom:9px;}
|
||||
div.control-group.error{
|
||||
width:auto;
|
||||
background:transparent;
|
||||
border:0;
|
||||
color:inherit;
|
||||
padding:0;
|
||||
background-repeat:repeat;
|
||||
}
|
||||
|
||||
/*=============================================================
|
||||
OTHER RULES
|
||||
==============================================================*/
|
||||
|
||||
/* Massimo Di Pierro fixed alignment in forms with list:string */
|
||||
form table tr{margin-bottom:9px;}
|
||||
td.w2p_fw ul{margin-left:0px;}
|
||||
|
||||
/* web2py_console in grid and smartgrid */
|
||||
.hidden{visibility:visible;}
|
||||
.web2py_console input{
|
||||
display: inline-block;
|
||||
margin-bottom: 0;
|
||||
vertical-align: middle;
|
||||
}
|
||||
.web2py_console input[type="submit"],
|
||||
.web2py_console input[type="button"],
|
||||
.web2py_console button{
|
||||
padding-top:4px;
|
||||
padding-bottom:4px;
|
||||
margin:3px 0 0 2px;
|
||||
}
|
||||
.web2py_console a,
|
||||
.web2py_console select,
|
||||
.web2py_console input
|
||||
{
|
||||
margin:3px 0 0 2px;
|
||||
}
|
||||
.web2py_grid form table{width:auto;}
|
||||
/* auth_user_remember checkbox extrapadding in IE fix */
|
||||
.ie-lte9 input#auth_user_remember.checkbox {padding-left:0;}
|
||||
|
||||
/*=============================================================
|
||||
MEDIA QUERIES
|
||||
==============================================================*/
|
||||
|
||||
@media only screen and (max-width:979px){
|
||||
body{padding-top:0px;}
|
||||
#navbar{top:5px;}
|
||||
div.flash{right:5px;}
|
||||
.dropdown-menu ul{visibility:visible;}
|
||||
}
|
||||
@media only screen and (max-width:479px){
|
||||
body{
|
||||
padding-left:10px;
|
||||
padding-right:10px;
|
||||
}
|
||||
.navbar-fixed-top,.navbar-fixed-bottom {
|
||||
margin-left:-10px;
|
||||
margin-right:-10px;
|
||||
}
|
||||
input[type="text"],input[type="password"],select{
|
||||
width:95%;
|
||||
}
|
||||
}
|
||||
122
applications/admin/static/css/web2py_bootstrap_nojs.css
Normal file
@@ -0,0 +1,122 @@
|
||||
/*=============================================================
|
||||
BOOTSTRAP DROPDOWN MENU
|
||||
==============================================================*/
|
||||
|
||||
.dropdown-menu ul{
|
||||
left:100%;
|
||||
position:absolute;
|
||||
top:0;
|
||||
visibility:hidden;
|
||||
margin-top:-1px;
|
||||
}
|
||||
.dropdown-menu li:hover ul{visibility:visible;}
|
||||
.navbar .dropdown-menu ul:before{
|
||||
border-bottom:7px solid transparent;
|
||||
border-left:none;
|
||||
border-right:7px solid rgba(0, 0, 0, 0.2);
|
||||
border-top:7px solid transparent;
|
||||
left:-7px;
|
||||
top:5px;
|
||||
}
|
||||
.nav > li.dropdown > a:after {
|
||||
border-left: 4px solid transparent;
|
||||
border-right: 4px solid transparent;
|
||||
border-top: 4px solid #000000;
|
||||
content: "";
|
||||
display: inline-block;
|
||||
height: 0;
|
||||
opacity: 0.7;
|
||||
vertical-align: top;
|
||||
width: 0;
|
||||
|
||||
margin-left: 2px;
|
||||
margin-top: 8px;
|
||||
|
||||
border-bottom-color: #FFFFFF;
|
||||
border-top-color: #FFFFFF;
|
||||
}
|
||||
.dropdown-menu span{display:inline-block;}
|
||||
ul.dropdown-menu li.dropdown > a:after {
|
||||
border-left: 4px solid #000;
|
||||
border-right: 4px solid transparent;
|
||||
border-bottom: 4px solid transparent;
|
||||
border-top: 4px solid transparent;
|
||||
content: "";
|
||||
display: inline-block;
|
||||
height: 0;
|
||||
opacity: 0.7;
|
||||
vertical-align: top;
|
||||
width: 0;
|
||||
|
||||
margin-left: 8px;
|
||||
margin-top: 6px;
|
||||
}
|
||||
|
||||
ul.nav li.dropdown:hover ul.dropdown-menu {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.open >.dropdown-menu ul{display:block;} /* fix menu issue when BS2.0.4 is applied */
|
||||
|
||||
/*=============================================================
|
||||
BOOTSTRAP SUBMIT BUTTON
|
||||
==============================================================*/
|
||||
|
||||
input[type='submit']:not(.btn) {
|
||||
display: inline-block;
|
||||
padding: 4px 14px;
|
||||
margin-bottom: 0;
|
||||
font-size: 14px;
|
||||
line-height: 20px;
|
||||
color: #333;
|
||||
text-align: center;
|
||||
text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75);
|
||||
vertical-align: middle;
|
||||
cursor: pointer;
|
||||
background-color: whiteSmoke;
|
||||
background-image: -webkit-gradient(linear,0 0,0 100%,from(white),to(#E6E6E6));
|
||||
background-image: -webkit-linear-gradient(top,white,#E6E6E6);
|
||||
background-image: -o-linear-gradient(top,white,#E6E6E6);
|
||||
background-image: linear-gradient(to bottom,white,#E6E6E6);
|
||||
background-image: -moz-linear-gradient(top,white,#E6E6E6);
|
||||
background-repeat: repeat-x;
|
||||
border: 1px solid #BBB;
|
||||
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
|
||||
border-bottom-color: #A2A2A2;
|
||||
-webkit-border-radius: 4px;
|
||||
-moz-border-radius: 4px;
|
||||
border-radius: 4px;
|
||||
filter: progid:dximagetransform.microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0);
|
||||
filter: progid:dximagetransform.microsoft.gradient(enabled=false);
|
||||
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
-moz-box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);
|
||||
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
|
||||
input[type='submit']:not(.btn):hover {
|
||||
color: #333;
|
||||
text-decoration: none;
|
||||
background-color: #E6E6E6;
|
||||
background-position: 0 -15px;
|
||||
-webkit-transition: background-position .1s linear;
|
||||
-moz-transition: background-position .1s linear;
|
||||
-o-transition: background-position .1s linear;
|
||||
transition: background-position .1s linear;
|
||||
}
|
||||
|
||||
input[type='submit']:not(.btn).active, input[type='submit']:not(.btn):active {
|
||||
background-color: #E6E6E6;
|
||||
background-color: #D9D9D9 9;
|
||||
background-image: none;
|
||||
outline: 0;
|
||||
-webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
-moz-box-shadow: inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);
|
||||
box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
|
||||
/*=============================================================
|
||||
OTHER
|
||||
==============================================================*/
|
||||
|
||||
.ie-lte8 .navbar-fixed-top {position:static;}
|
||||
|
||||
BIN
applications/admin/static/images/chat.png
Normal file
|
After Width: | Height: | Size: 4.6 KiB |
BIN
applications/admin/static/images/glyphicons-halflings-white.png
Normal file
|
After Width: | Height: | Size: 8.6 KiB |
BIN
applications/admin/static/images/glyphicons-halflings.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
applications/admin/static/images/menu_responsive.png
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
applications/admin/static/images/questions.png
Normal file
|
After Width: | Height: | Size: 4.9 KiB |
@@ -11,7 +11,7 @@ function prepareMultiPartPOST(data) {
|
||||
var reqdata = '--' + boundary + '\r\n';
|
||||
//console.log(data.length);
|
||||
for (var i=0;i < data.length;i++) {
|
||||
reqdata += 'content-disposition: form-data; name="';
|
||||
reqdata += 'content-disposition: form-data; name="';
|
||||
reqdata += data[i].Name + '"';
|
||||
reqdata += "\r\n\r\n" ;
|
||||
reqdata += data[i].Data;
|
||||
@@ -43,8 +43,9 @@ function doHighlight(highlight) {
|
||||
if (window.ace_editor) {
|
||||
window.ace_editor.gotoLine(highlight.lineno);
|
||||
} else if (window.mirror) {
|
||||
window.mirror.setSelection({line:highlight.lineno,ch:0},
|
||||
{line:highlight.end,ch:0});
|
||||
// Put the cursor at the offending line:
|
||||
window.mirror.setCursor({line:highlight.lineno-1,
|
||||
ch:highlight.offset+1});
|
||||
} else if (window.eamy) {
|
||||
// not implemented
|
||||
} else if (window.textarea) {
|
||||
@@ -56,11 +57,11 @@ function doClickSave() {
|
||||
var data = getData();
|
||||
var dataForPost = prepareMultiPartPOST(new Array(
|
||||
prepareDataForSave('data', data),
|
||||
prepareDataForSave('file_hash',
|
||||
prepareDataForSave('file_hash',
|
||||
jQuery("input[name='file_hash']").val()),
|
||||
prepareDataForSave('saved_on',
|
||||
prepareDataForSave('saved_on',
|
||||
jQuery("input[name='saved_on']").val()),
|
||||
prepareDataForSave('saved_on',
|
||||
prepareDataForSave('saved_on',
|
||||
jQuery("input[name='saved_on']").val()),
|
||||
prepareDataForSave('from_ajax','true')));
|
||||
// console.info(area.textarea.value);
|
||||
@@ -69,7 +70,7 @@ function doClickSave() {
|
||||
jQuery("input[name='saved_on']").val('saving now...')
|
||||
jQuery.ajax({
|
||||
type: "POST",
|
||||
contentType: 'multipart/form-data;boundary="'
|
||||
contentType: 'multipart/form-data;boundary="'
|
||||
+ dataForPost[1] + '"',
|
||||
url: self.location.href,
|
||||
dataType: "json",
|
||||
@@ -105,7 +106,7 @@ function doClickSave() {
|
||||
doHighlight(json.highlight);
|
||||
} else {
|
||||
jQuery("input[name='saved_on']").attr('style','background-color:#99FF99');
|
||||
jQuery(".flash").delay(1000).fadeOut('slow');
|
||||
//jQuery(".flash").delay(1000).fadeOut('slow');
|
||||
}
|
||||
// console.info(jQuery("input[name='file_hash']").val());
|
||||
var output = '<b>exposes:</b> ';
|
||||
@@ -148,8 +149,12 @@ function getSelectionRange() {
|
||||
return sel;
|
||||
}
|
||||
|
||||
function doToggleBreakpoint(filename, url) {
|
||||
var sel = getSelectionRange();
|
||||
function doToggleBreakpoint(filename, url, sel) {
|
||||
if (sel==null) {
|
||||
// use cursor position to determine the breakpoint line
|
||||
// (gutter already tell us the selected line)
|
||||
sel = getSelectionRange();
|
||||
}
|
||||
var dataForPost = prepareMultiPartPOST(new Array(
|
||||
prepareDataForSave('filename', filename),
|
||||
prepareDataForSave('sel_start', sel["start"]),
|
||||
@@ -170,15 +175,26 @@ function doToggleBreakpoint(filename, url) {
|
||||
success: function(json,text,xhr){
|
||||
// show flash message (if any)
|
||||
var flash=xhr.getResponseHeader('web2py-component-flash');
|
||||
if (flash) jQuery('.flash').html(decodeURIComponent(flash)).slideDown();
|
||||
if (flash) {
|
||||
jQuery('.flash').html(decodeURIComponent(flash))
|
||||
.append('<a href="#" class="close">×</a>')
|
||||
.slideDown();
|
||||
}
|
||||
else jQuery('.flash').hide();
|
||||
try {
|
||||
if (json.error) {
|
||||
window.location.href=json.redirect;
|
||||
} else {
|
||||
// mark the breakpoint if ok=True
|
||||
// remove mark if ok=False
|
||||
// do nothing if ok = null
|
||||
if (json.ok==true && window.mirror) {
|
||||
// mark the breakpoint if ok=True
|
||||
editor.setMarker(json.lineno-1,
|
||||
"<span style='color: red'>●</span> %N%")
|
||||
} else if (json.ok==false && window.mirror) {
|
||||
// remove mark if ok=False
|
||||
editor.setMarker(json.lineno-1, "%N%")
|
||||
} else {
|
||||
// do nothing if ok = null
|
||||
}
|
||||
// alert(json.ok + json.lineno);
|
||||
}
|
||||
} catch(e) { on_error(); }
|
||||
@@ -188,6 +204,43 @@ function doToggleBreakpoint(filename, url) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// on load, update all breakpoints markers:
|
||||
function doListBreakpoints(filename, url) {
|
||||
var dataForPost = prepareMultiPartPOST(new Array(
|
||||
prepareDataForSave('filename', filename)
|
||||
));
|
||||
jQuery.ajax({
|
||||
type: "POST",
|
||||
contentType: 'multipart/form-data;boundary="'+dataForPost[1]+'"',
|
||||
url: url,
|
||||
dataType: "json",
|
||||
data: dataForPost[0],
|
||||
timeout: 5000,
|
||||
beforeSend: function(xhr) {
|
||||
xhr.setRequestHeader('web2py-component-location',
|
||||
document.location);
|
||||
xhr.setRequestHeader('web2py-component-element',
|
||||
'doListBreakpoints');},
|
||||
success: function(json,text,xhr){
|
||||
try {
|
||||
if (json.error) {
|
||||
window.location.href=json.redirect;
|
||||
} else {
|
||||
if (window.mirror) {
|
||||
for (i in json.breakpoints) {
|
||||
lineno = json.breakpoints[i];
|
||||
// mark the breakpoint if ok=True
|
||||
editor.setMarker(lineno-1,
|
||||
"<span style='color: red'>●</span> %N%");
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch(e) { on_error(); }
|
||||
},
|
||||
error: function(json) { on_error(); }
|
||||
});
|
||||
return false;
|
||||
}
|
||||
|
||||
function keepalive(url) {
|
||||
jQuery.ajax({
|
||||
@@ -197,4 +250,3 @@ function keepalive(url) {
|
||||
success: function(){},
|
||||
error: function(x) { on_error(); } });
|
||||
}
|
||||
|
||||
|
||||
4
applications/admin/static/js/analytics.min.js
vendored
Normal file
6
applications/admin/static/js/bootstrap.min.js
vendored
Normal file
13
applications/admin/static/js/dd_belatedpng.js
Normal file
60
applications/admin/static/js/jquery.flot.resize.js
Normal file
@@ -0,0 +1,60 @@
|
||||
/*
|
||||
Flot plugin for automatically redrawing plots when the placeholder
|
||||
size changes, e.g. on window resizes.
|
||||
|
||||
It works by listening for changes on the placeholder div (through the
|
||||
jQuery resize event plugin) - if the size changes, it will redraw the
|
||||
plot.
|
||||
|
||||
There are no options. If you need to disable the plugin for some
|
||||
plots, you can just fix the size of their placeholders.
|
||||
*/
|
||||
|
||||
|
||||
/* Inline dependency:
|
||||
* jQuery resize event - v1.1 - 3/14/2010
|
||||
* http://benalman.com/projects/jquery-resize-plugin/
|
||||
*
|
||||
* Copyright (c) 2010 "Cowboy" Ben Alman
|
||||
* Dual licensed under the MIT and GPL licenses.
|
||||
* http://benalman.com/about/license/
|
||||
*/
|
||||
(function($,h,c){var a=$([]),e=$.resize=$.extend($.resize,{}),i,k="setTimeout",j="resize",d=j+"-special-event",b="delay",f="throttleWindow";e[b]=250;e[f]=true;$.event.special[j]={setup:function(){if(!e[f]&&this[k]){return false}var l=$(this);a=a.add(l);$.data(this,d,{w:l.width(),h:l.height()});if(a.length===1){g()}},teardown:function(){if(!e[f]&&this[k]){return false}var l=$(this);a=a.not(l);l.removeData(d);if(!a.length){clearTimeout(i)}},add:function(l){if(!e[f]&&this[k]){return false}var n;function m(s,o,p){var q=$(this),r=$.data(this,d);r.w=o!==c?o:q.width();r.h=p!==c?p:q.height();n.apply(this,arguments)}if($.isFunction(l)){n=l;return m}else{n=l.handler;l.handler=m}}};function g(){i=h[k](function(){a.each(function(){var n=$(this),m=n.width(),l=n.height(),o=$.data(this,d);if(m!==o.w||l!==o.h){n.trigger(j,[o.w=m,o.h=l])}});g()},e[b])}})(jQuery,this);
|
||||
|
||||
|
||||
(function ($) {
|
||||
var options = { }; // no options
|
||||
|
||||
function init(plot) {
|
||||
function onResize() {
|
||||
var placeholder = plot.getPlaceholder();
|
||||
|
||||
// somebody might have hidden us and we can't plot
|
||||
// when we don't have the dimensions
|
||||
if (placeholder.width() == 0 || placeholder.height() == 0)
|
||||
return;
|
||||
|
||||
plot.resize();
|
||||
plot.setupGrid();
|
||||
plot.draw();
|
||||
}
|
||||
|
||||
function bindEvents(plot, eventHolder) {
|
||||
plot.getPlaceholder().resize(onResize);
|
||||
}
|
||||
|
||||
function shutdown(plot, eventHolder) {
|
||||
plot.getPlaceholder().unbind("resize", onResize);
|
||||
}
|
||||
|
||||
plot.hooks.bindEvents.push(bindEvents);
|
||||
plot.hooks.shutdown.push(shutdown);
|
||||
}
|
||||
|
||||
$.plot.plugins.push({
|
||||
init: init,
|
||||
options: options,
|
||||
name: 'resize',
|
||||
version: '1.0'
|
||||
});
|
||||
})(jQuery);
|
||||
44
applications/admin/static/js/share.js
Normal file
@@ -0,0 +1,44 @@
|
||||
/**
|
||||
|
||||
Created and copyrighted by Massimo Di Pierro <massimo.dipierro@gmail.com>
|
||||
(MIT license)
|
||||
|
||||
Example:
|
||||
|
||||
<script src="share.js"></script>
|
||||
|
||||
**/
|
||||
|
||||
jQuery(function(){
|
||||
var script_source = jQuery('script[src*="share.js"]').attr('src');
|
||||
var params = function(name,default_value) {
|
||||
var match = RegExp('[?&]' + name + '=([^&]*)').exec(script_source);
|
||||
return match && decodeURIComponent(match[1].replace(/\+/g, ' '))||default_value;
|
||||
}
|
||||
var path = params('static','social');
|
||||
var url = encodeURIComponent(window.location.href);
|
||||
var host = window.location.hostname;
|
||||
var title = escape(jQuery('title').text());
|
||||
var twit = 'http://twitter.com/home?status='+title+'%20'+url;
|
||||
var facebook = 'http://www.facebook.com/sharer.php?u='+url;
|
||||
var gplus = 'https://plus.google.com/share?url='+url;
|
||||
var tbar = '<div id="socialdrawer"><span>Share<br/></span><div id="sicons"><a href="'+twit+'" id="twit" title="Share on twitter"><img src="'+path+'/twitter.png" alt="Share on Twitter" width="32" height="32" /></a><a href="'+facebook+'" id="facebook" title="Share on Facebook"><img src="'+path+'/facebook.png" alt="Share on facebook" width="32" height="32" /></a><a href="'+gplus+'" id="gplus" title="Share on Google Plus"><img src="'+path+'/gplus-32.png" alt="Share on Google Plus" width="32" height="32" /></a></div></div>';
|
||||
// Add the share tool bar.
|
||||
jQuery('body').append(tbar);
|
||||
var st = jQuery('#socialdrawer');
|
||||
st.css({'opacity':'.7','z-index':'3000','background':'#FFF','border':'solid 1px #666','border-width':' 1px 0 0 1px','height':'20px','width':'40px','position':'fixed','bottom':'0','right':'0','padding':'2px 5px','overflow':'hidden','-webkit-border-top-left-radius':' 12px','-moz-border-radius-topleft':' 12px','border-top-left-radius':' 12px','-moz-box-shadow':' -3px -3px 3px rgba(0,0,0,0.5)','-webkit-box-shadow':' -3px -3px 3px rgba(0,0,0,0.5)','box-shadow':' -3px -3px 3px rgba(0,0,0,0.5)'});
|
||||
jQuery('#socialdrawer a').css({'float':'left','width':'32px','margin':'3px 2px 2px 2px','padding':'0','cursor':'pointer'});
|
||||
jQuery('#socialdrawer span').css({'float':'left','margin':'2px 3px','text-shadow':' 1px 1px 1px #FFF','color':'#444','font-size':'12px','line-height':'1em'});
|
||||
jQuery('#socialdrawer img').hide();
|
||||
// hover
|
||||
st.click(function(){
|
||||
jQuery(this).animate({height:'40px', width:'160px', opacity: 0.95}, 300);
|
||||
jQuery('#socialdrawer img').show();
|
||||
});
|
||||
//leave
|
||||
st.mouseleave(function(){
|
||||
st.animate({height:'20px', width: '40px', opacity: .7}, 300);
|
||||
jQuery('#socialdrawer img').hide();
|
||||
return false;
|
||||
} );
|
||||
});
|
||||
@@ -44,11 +44,31 @@ function web2py_event_handlers() {
|
||||
doc.on('keyup', 'input.double, input.decimal', function(){this.value=this.value.reverse().replace(/[^0-9\-\.,]|[\-](?=.)|[\.,](?=[0-9]*[\.,])/g,'').reverse();});
|
||||
var confirm_message = (typeof w2p_ajax_confirm_message != 'undefined') ? w2p_ajax_confirm_message : "Are you sure you want to delete this object?";
|
||||
doc.on('click', "input[type='checkbox'].delete", function(){if(this.checked) if(!confirm(confirm_message)) this.checked=false;});
|
||||
|
||||
doc.ajaxSuccess(function(e, xhr) {
|
||||
var redirect=xhr.getResponseHeader('web2py-redirect-location');
|
||||
if (redirect != null) {
|
||||
var command=xhr.getResponseHeader('web2py-component-command');
|
||||
var flash=xhr.getResponseHeader('web2py-component-flash');
|
||||
if (redirect !== null) {
|
||||
window.location = redirect;
|
||||
};
|
||||
if(command !== null){
|
||||
eval(decodeURIComponent(command));
|
||||
}
|
||||
if(flash) {
|
||||
jQuery('.flash')
|
||||
.html(decodeURIComponent(flash))
|
||||
.append('<span id="closeflash">×</span>')
|
||||
.slideDown();
|
||||
}
|
||||
});
|
||||
|
||||
doc.ajaxError(function(e, xhr, settings, exception) {
|
||||
doc.off('click', '.flash')
|
||||
switch(xhr.status){
|
||||
case 500:
|
||||
$('.flash').html(ajax_error_500).slideDown();
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
@@ -91,8 +111,6 @@ function web2py_ajax_page(method, action, data, target) {
|
||||
'complete':function(xhr,text){
|
||||
var html=xhr.responseText;
|
||||
var content=xhr.getResponseHeader('web2py-component-content');
|
||||
var command=xhr.getResponseHeader('web2py-component-command');
|
||||
var flash=xhr.getResponseHeader('web2py-component-flash');
|
||||
var t = jQuery('#'+target);
|
||||
if(content=='prepend') t.prepend(html);
|
||||
else if(content=='append') t.append(html);
|
||||
@@ -100,14 +118,6 @@ function web2py_ajax_page(method, action, data, target) {
|
||||
web2py_trap_form(action,target);
|
||||
web2py_trap_link(target);
|
||||
web2py_ajax_init('#'+target);
|
||||
if(command)
|
||||
eval(decodeURIComponent(command));
|
||||
if(flash) {
|
||||
jQuery('.flash')
|
||||
.html(decodeURIComponent(flash))
|
||||
.append('<span id="closeflash">×</span>')
|
||||
.slideDown();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -124,7 +134,7 @@ function web2py_component(action, target, timeout, times){
|
||||
web2py_ajax_page('get', action, null, target);} }; // reload
|
||||
// Method to check timing limit
|
||||
element.reload_check = function (){
|
||||
if (jelement.hasClass('w2p_component_stop')) {return false;}
|
||||
if (jelement.hasClass('w2p_component_stop')) {clearInterval(this.timing);return false;}
|
||||
if (this.reload_counter == Infinity){return true;}
|
||||
else {
|
||||
if (!isNaN(this.reload_counter)){
|
||||
|
||||
28
applications/admin/static/js/web2py_bootstrap.js
Normal file
@@ -0,0 +1,28 @@
|
||||
// this code improves bootstrap menus and adds dropdown support
|
||||
jQuery(function(){
|
||||
jQuery('.nav>li>a').each(function(){
|
||||
if(jQuery(this).parent().find('ul').length)
|
||||
jQuery(this).attr({'class':'dropdown-toggle','data-toggle':'dropdown'}).append('<b class="caret"></b>');
|
||||
});
|
||||
jQuery('.nav li li').each(function(){
|
||||
if(jQuery(this).find('ul').length)
|
||||
jQuery(this).addClass('dropdown-submenu');
|
||||
});
|
||||
function hoverMenu(){
|
||||
var wid = document.documentElement.clientWidth; //faster than $(window).width() and cross browser
|
||||
if (wid>=980){
|
||||
jQuery('ul.nav a.dropdown-toggle').parent().hover(function(){
|
||||
mi = jQuery(this).addClass('open');
|
||||
mi.children('.dropdown-menu').stop(true, true).delay(200).fadeIn(400);
|
||||
}, function(){
|
||||
mi = jQuery(this);
|
||||
mi.children('.dropdown-menu').stop(true, true).delay(200).fadeOut(function(){mi.removeClass('open')});
|
||||
});
|
||||
};
|
||||
}
|
||||
hoverMenu(); // first page load
|
||||
jQuery(window).resize(hoverMenu); // on resize event
|
||||
jQuery('ul.nav li.dropdown a').click(function(){window.location=jQuery(this).attr('href');});
|
||||
// make all buttons bootstrap buttons
|
||||
jQuery('button, form input[type="submit"], form input[type="button"]').addClass('btn');
|
||||
});
|
||||
@@ -2,7 +2,7 @@
|
||||
<script><!--
|
||||
jQuery(document).ready(function(){
|
||||
jQuery("table.sortable tbody tr").mouseover( function() {
|
||||
jQuery(this).addClass("highlight"); }).mouseout( function() {
|
||||
jQuery(this).addClass("highlight"); }).mouseout( function() {
|
||||
jQuery(this).removeClass("highlight"); });
|
||||
jQuery('table.sortable tbody tr:odd').addClass('odd');
|
||||
jQuery('table.sortable tbody tr:even').addClass('even');
|
||||
@@ -63,11 +63,11 @@
|
||||
<br/><br/>
|
||||
<h4>{{=T("%s selected", nrows)}}</h4>
|
||||
{{if start>0:}}{{=A(T('previous 100 rows'),_href=URL('select',args=request.args[0],vars=dict(start=start-100)),_class="btn")}}{{pass}}
|
||||
{{if stop<nrows:}}{{=A(T('next 100 rows'),_href=URL('select',args=request.args[0],vars=dict(start=start+100)),_class="btn")}}{{pass}}
|
||||
{{if stop<nrows:}}{{=A(T('next 100 rows'),_href=URL('select',args=request.args[0],vars=dict(start=start+100)),_class="btn")}}{{pass}}
|
||||
{{if rows:}}
|
||||
<div style="overflow: auto;" width="80%">
|
||||
{{linkto=URL('update',args=request.args[0])}}
|
||||
{{upload=URL('download',args=request.args[0])}}
|
||||
{{upload=URL('download',args=request.args[0])}}
|
||||
{{=SQLTABLE(rows,linkto,upload,orderby=True,_class='sortable')}}
|
||||
</div>
|
||||
{{pass}}
|
||||
@@ -75,7 +75,7 @@
|
||||
<a href="{{=URL('csv',args=request.args[0],vars=dict(query=query))}}" class="btn">{{=T("export as csv file")}}</a>
|
||||
{{=formcsv or ''}}
|
||||
|
||||
{{elif request.function=='insert':}}
|
||||
{{elif request.function=='insert':}}
|
||||
<h2>{{=T("Database")}} {{=A(request.args[0],_href=URL('index'))}}
|
||||
{{if hasattr(table,'_primarykey'):}}
|
||||
{{fieldname=table._primarykey[0]}}
|
||||
@@ -83,7 +83,7 @@
|
||||
{{tablename=request.args[1]}}
|
||||
{{cond = table[fieldname].type in ['string','text'] and '!=""' or '>0'}}
|
||||
{{=T("Table")}} {{=A(tablename,_href=URL('select',args=dbname,vars=dict(query='%s.%s.%s%s'%(dbname,tablename,fieldname,cond))))}}
|
||||
{{else:}}
|
||||
{{else:}}
|
||||
{{=T("Table")}} {{=A(request.args[1],_href=URL('select',args=request.args[0],vars=dict(query='%s.%s.id>0'%tuple(request.args[:2]))))}}
|
||||
{{pass}}
|
||||
</h2>
|
||||
@@ -95,7 +95,7 @@
|
||||
{{fieldname=request.vars.keys()[0]}}
|
||||
{{dbname=request.args[0]}}
|
||||
{{tablename=request.args[1]}}
|
||||
{{cond = table[fieldname].type in ['string','text'] and '!=""' or '>0'}}
|
||||
{{cond = table[fieldname].type in ['string','text'] and '!=""' or '>0'}}
|
||||
{{=T("Table")}} {{=A(tablename,_href=URL('select',args=dbname,vars=dict(query='%s.%s.%s%s'%(dbname,tablename,fieldname,cond))))}}
|
||||
{{=T("Record")}} {{=A('%s=%s'%request.vars.items()[0],_href=URL('update',args=request.args[:2],vars=request.vars))}}
|
||||
{{else:}}
|
||||
@@ -131,7 +131,7 @@
|
||||
dict(ratio=total['ratio'], hits=total['hits'], misses=total['misses']))}}
|
||||
</p>
|
||||
<p>
|
||||
{{=T("Size of cache:")}}
|
||||
{{=T("Size of cache:")}}
|
||||
{{if object_stats:}}
|
||||
{{=T.M("**%(items)s** %%{item(items)}, **%(bytes)s** %%{byte(bytes)}", dict(items=total['objects'], bytes=total['bytes']))}}
|
||||
{{if total['bytes'] > 524287:}}
|
||||
@@ -151,7 +151,7 @@
|
||||
</div>
|
||||
<br />
|
||||
{{pass}}
|
||||
|
||||
|
||||
<h4>{{=T("RAM")}}</h4>
|
||||
<p>{{=T.M("Number of entries: **%s**", ram['entries'])}}</p>
|
||||
{{if ram['entries'] > 0:}}
|
||||
@@ -179,16 +179,16 @@
|
||||
</div>
|
||||
<br />
|
||||
{{pass}}
|
||||
|
||||
|
||||
<h4>{{=T("DISK")}}</h4>
|
||||
<p>{{=T.M("Number of entries: **%s**", disk['entries'])}}</p>
|
||||
{{if disk['entries'] > 0:}}
|
||||
<p>
|
||||
{{=T.M("Hit Ratio: **%(ratio)s%%** (**%(hits)s** %%{hit(hits)} and **%(misses)s** %%{miss(misses)})",
|
||||
dict(ratio=disk['ratio'], hits=disk['hits'], misses=disk['misses']))}}
|
||||
dict(ratio=disk['ratio'], hits=disk['hits'], misses=disk['misses']))}}
|
||||
</p>
|
||||
<p>
|
||||
{{=T("Size of cache:")}}
|
||||
{{=T("Size of cache:")}}
|
||||
{{if object_stats:}}
|
||||
{{=T.M("**%(items)s** %%{item(items)}, **%(bytes)s** %%{byte(bytes)}", dict( items=disk['objects'], bytes=disk['bytes']))}}
|
||||
{{if disk['bytes'] > 524287:}}
|
||||
@@ -209,11 +209,11 @@
|
||||
<br />
|
||||
{{pass}}
|
||||
</div>
|
||||
|
||||
|
||||
<div class="list-header">
|
||||
<h3>{{=T("Manage Cache")}}</h3>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="content">
|
||||
<p>
|
||||
{{=form}}
|
||||
@@ -222,3 +222,28 @@
|
||||
</div>
|
||||
<div class="clear"></div>
|
||||
{{pass}}
|
||||
|
||||
{{if request.function=='graph_model':}}
|
||||
<h2>{{=T("Graph Model")}}</h2>
|
||||
{{if not pgv:}}
|
||||
{{=T('pygraphviz library not found')}}
|
||||
{{elif not databases:}}
|
||||
{{=T("No databases in this application")}}
|
||||
{{else:}}
|
||||
<div class="btn-group">
|
||||
<a class="btn dropdown-toggle" data-toggle="dropdown" href="#">
|
||||
<i class="icon-download"></i> {{=T('Save model as...')}}
|
||||
<span class="caret"></span>
|
||||
</a>
|
||||
<ul class="dropdown-menu">
|
||||
<li><a href="{{=URL('appadmin', 'bg_graph_model', args=['png'])}}">png</a></li>
|
||||
<li><a href="{{=URL('appadmin', 'bg_graph_model', args=['svg'])}}">svg</a></li>
|
||||
<li><a href="{{=URL('appadmin', 'bg_graph_model', args=['pdf'])}}">pdf</a></li>
|
||||
<li><a href="{{=URL('appadmin', 'bg_graph_model', args=['ps'])}}">ps</a></li>
|
||||
<li><a href="{{=URL('appadmin', 'bg_graph_model', args=['dot'])}}">dot</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<br />
|
||||
{{=IMG(_src=URL('appadmin', 'bg_graph_model'))}}
|
||||
{{pass}}
|
||||
{{pass}}
|
||||
|
||||
137
applications/admin/views/debug/breakpoints.html
Normal file
@@ -0,0 +1,137 @@
|
||||
{{extend 'layout.html'}}
|
||||
{{block sectionclass}}debug{{end}}
|
||||
{{
|
||||
frm_trs = form.elements('tr')
|
||||
tbl_rows = []
|
||||
for frm_tr in frm_trs:
|
||||
if frm_tr['_id'] != 'submit_record__row':
|
||||
fld_label = frm_tr.element('td.w2p_fl')
|
||||
fld_widget = frm_tr.element('td.w2p_fw')[0]
|
||||
fld_comment = frm_tr.element('td.w2p_fc')[0]
|
||||
lbls = fld_label.elements('label')
|
||||
lbl = ''
|
||||
if len(lbls) > 0:
|
||||
lbl = fld_label.elements('label')[0]
|
||||
lbl['_class'] = 'control-label'
|
||||
pass
|
||||
if fld_widget['_type'] == 'checkbox':
|
||||
fld_widget = LABEL(fld_widget, _class='checkbox')
|
||||
else:
|
||||
fld_widget = CAT(fld_widget, SPAN('', _class='help-inline'))
|
||||
pass
|
||||
if isinstance(fld_widget, SPAN):
|
||||
fld_widget['_role'] = 'asinput'
|
||||
pass
|
||||
tbl_row = DIV(lbl, DIV(fld_widget,
|
||||
TAG['SMALL'](fld_comment,
|
||||
_class='help-block'),
|
||||
_class='controls'), _class='control-group')
|
||||
tbl_rows.append(tbl_row)
|
||||
else:
|
||||
smt_btn = frm_tr.element('td.w2p_fw')
|
||||
btn = smt_btn.elements('input')[0]
|
||||
btn['_class'] = 'btn btn-primary'
|
||||
tbl_rows.append(DIV(btn, _class='controls'))
|
||||
pass
|
||||
pass
|
||||
form.element('table', replace=CAT(*tbl_rows))
|
||||
form['_class'] = 'form-horizontal well well-small'
|
||||
import re
|
||||
if form.errors:
|
||||
for key, value in form.errors.iteritems():
|
||||
inpt = form.element(_name=key)
|
||||
inpt_wrapper = inpt.parent
|
||||
if inpt_wrapper['_class'] == None or \
|
||||
not "controls" in inpt_wrapper['_class']:
|
||||
inpt_wrapper = inpt_wrapper.parent
|
||||
pass
|
||||
inpt_wrapper.parent['_class'] += ' error'
|
||||
inpt_wrapper.element(_class=re.compile('help-inline'),
|
||||
replace=lambda me:SPAN(value, _class=me['_class']))
|
||||
pass
|
||||
form.errors.clear()
|
||||
pass
|
||||
}}
|
||||
<!-- begin "debug" block -->
|
||||
<div class="row-fluid">
|
||||
<div class="applist f60 span7" style="padding-bottom:20px;">
|
||||
<div class="applist_inner">
|
||||
<h2>{{=T("Breakpoints")}}</h2>
|
||||
<div class="errorform">
|
||||
<form name="myform" method="post">
|
||||
<div class="tablebar">
|
||||
<input value="{{=T('delete all checked')}}" type="submit" class="btn"/>
|
||||
</div>
|
||||
<div class="row-fluid">
|
||||
<div class="span12 errors">
|
||||
<table id="trck_breakpoints" class="sortable table table-hover table-condensed">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="column1 cbcentered"><input type="checkbox" name="delete_all}" /></th>
|
||||
<th class="column2">{{=T("Filename")}}</th>
|
||||
<th class="column3">{{=T("Line Nr")}}</th>
|
||||
<th>{{=T("Temporary")}}</th>
|
||||
<th>{{=T("Condition")}}</th>
|
||||
<th class="columnN">{{=T("Hits")}}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{{for bp in breakpoints:}}
|
||||
<tr class="breakpoint">
|
||||
<td class="cbcentered"><input type="checkbox" name="delete_{{=bp['number']}}" /></td>
|
||||
<td>{{=bp['filename']}}</td>
|
||||
<td>{{=A(bp['lineno'],_href="#",_onclick="collapse('%s');" % bp['number'])}}</td>
|
||||
<td>{{=bp['temporary']}}</td>
|
||||
<td>{{=bp['condition']}}</td>
|
||||
<td>{{=bp['hits']}}</td>
|
||||
</tr>
|
||||
<tr id="{{=bp['number']}}" class="sourcecode traceback">
|
||||
<td colspan="6">
|
||||
<div class="ticket_code">
|
||||
{{=CODE(open(bp['path']).read(), language='python',
|
||||
link=None, highlight_line=bp['lineno'], context_lines=10)}}
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
{{pass}}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</form><!-- /errorform -->
|
||||
</div>
|
||||
</div>
|
||||
</div><!-- /applist -->
|
||||
<div class="sidebar fl60 span5">
|
||||
<div class="sidebar_inner controls" style="margin:0;">
|
||||
<div class="box">
|
||||
<h3>{{=T("Add breakpoint")}}</h3>
|
||||
{{=form}}
|
||||
<div class="row-fluid">
|
||||
<div class="help span12 alert alert-block alert-info">
|
||||
<ul class="unstyled">
|
||||
<li>{{=T("You can also set and remove breakpoint in the edit window, using the Toggle Breakpoint button")}}</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script type="text/javascript">
|
||||
jQuery(document).ready(function() {
|
||||
jQuery('.sourcecode').hide();
|
||||
jQuery("#trck_breakpoints thead tr th:first input[type=checkbox]").click(function() {
|
||||
var checkedStatus = this.checked;
|
||||
jQuery("#trck_breakpoints tbody tr td:first-child input[type=checkbox]").each(function() {
|
||||
this.checked = checkedStatus;
|
||||
});
|
||||
});
|
||||
jQuery("#trck_breakpoints tbody tr td:first-child input[type=checkbox]").change(function() {
|
||||
var allchecked = jQuery("#trck_breakpoints tbody tr td:first-child input[type=checkbox]:checked").length == jQuery("#trck_breakpoints tbody tr td:first-child input[type=checkbox]").length;
|
||||
jQuery("#trck_breakpoints thead tr th:first input[type=checkbox]").prop('checked', allchecked);
|
||||
});
|
||||
});
|
||||
</script>
|
||||
<!-- end "debug" block -->
|
||||
@@ -1,246 +1,191 @@
|
||||
{{extend 'layout.html'}}
|
||||
|
||||
{{block sectionclass}}debug{{end}}
|
||||
<style type="text/css">
|
||||
|
||||
.prompt, #output {
|
||||
width: 45em;
|
||||
height: 1em;
|
||||
border: 1px solid #CCCCCC;
|
||||
font-size: 10pt;
|
||||
margin: 0.5em;
|
||||
padding: 0.5em;
|
||||
padding-right: 0em;
|
||||
overflow: auto;
|
||||
wrap: hard;
|
||||
}
|
||||
|
||||
#output {
|
||||
height:150px;overflow:auto;
|
||||
}
|
||||
|
||||
#toolbar {
|
||||
margin-left: 0.5em;
|
||||
padding-left: 0.5em;
|
||||
}
|
||||
|
||||
#caret {
|
||||
width: 2.5em;
|
||||
margin-right: 0px;
|
||||
padding-right: 0px;
|
||||
border-right: 0px;
|
||||
float: left;
|
||||
}
|
||||
|
||||
#statement {
|
||||
width: 43em;
|
||||
margin-left: 1em;
|
||||
padding-left: 0px;
|
||||
border-left: 0px;
|
||||
background-position: top right;
|
||||
background-repeat: no-repeat;
|
||||
}
|
||||
|
||||
.processing {
|
||||
background-image: url("{{=URL('static','images/spinner.gif')}}");
|
||||
}
|
||||
|
||||
#ajax-status {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.message {
|
||||
color: #8AD;
|
||||
font-weight: bold;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.error {
|
||||
color: #F44;
|
||||
}
|
||||
|
||||
.username {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
</style>
|
||||
<script src="{{=URL('static', 'js/autoscroll.js')}}"></script>
|
||||
|
||||
<div class="applist f60">
|
||||
<div class="applist_inner">
|
||||
<h2>{{=T("web2py online debugger")}}</h2>
|
||||
|
||||
{{if filename:}}
|
||||
<h3>{{=T("Interaction at %s line %s") % (filename, lineno)}}</h3>
|
||||
<!-- begin "debug" block -->
|
||||
<div class="row-fluid">
|
||||
<div class="applist f60 span7" style="padding-bottom:20px;">
|
||||
<div class="applist_inner">
|
||||
<h2>{{=T("web2py online debugger")}}</h2>
|
||||
{{if filename:}}
|
||||
<h3 style="word-wrap:break-word;">{{=T("Interaction at %s line %s") % (filename, lineno)}}</h3>
|
||||
{{if exception:}}
|
||||
<h3 class="exception">{{=T("Exception %s", exception['title'])}}</h3>
|
||||
{{pass}}
|
||||
<h5>{{=T("Code listing")}}</h5>
|
||||
{{if lines:}}<div class="inspect" style="width:100%;overflow:auto;background-color:whiteSmoke;margin-bottom:20px;">
|
||||
<pre>{{=CODE('\n'.join([x[1] for x in sorted(lines.items(),key=lambda x: x[0])]),
|
||||
language='python', link=None, counter=min(lines.keys()),
|
||||
highlight_line=lineno, context_lines=10)}}</pre></div>
|
||||
{{pass}}
|
||||
<div class="row-fluid">
|
||||
<div class="help span7 alert alert-block alert-info">
|
||||
<ul class="unstyled">
|
||||
<li>{{=T("Your application will be blocked until you click an action button (next, step, continue, etc.)")}}</li>
|
||||
<li>{{=T("Your can inspect variables using the console below")}}</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<h3>{{=T("Interactive console")}}</h3>
|
||||
<div class="shell"><div id="wrapper">
|
||||
<div class="row-fluid">
|
||||
<div class="output-wrapper span11">
|
||||
<textarea id="output" readonly="readonly">{{=data}}</textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row-fluid">
|
||||
<form id="form" action="{{=URL(r=request, f='callback', args=app)}}" method="get" class="span11">
|
||||
<div id="shellwrapper">
|
||||
<div class="prompt-wrapper">
|
||||
<div class="prompt-container">
|
||||
<textarea class="prompt" name="statement" id="statement"></textarea>
|
||||
</div>
|
||||
<a href="#" rel="tooltip" data-placement="right" data-original-title="{{=T('Type some Python code in here and hit Return (Enter) to execute it.')}}">
|
||||
{{=helpicon()}}
|
||||
<span>Type some Python code in here and hit Return (Enter) to execute it.</span>
|
||||
</a>
|
||||
</div>
|
||||
<div id="caret"><span>>>></span></div>
|
||||
<div id="autoscroll">autoscroll</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div></div>
|
||||
{{elif request.env.get('wsgi_multiprocess') or not request.env.get('wsgi_multithread'):}}
|
||||
<h3 class="not_paused">{{=T("Unsupported webserver working mode: %s", request.env.get('server_software', ''))}}</h3>
|
||||
<div class="help span7 alert alert-block alert-info">
|
||||
<ul class="unstyled">
|
||||
<li><b>{{=T("WARNING:")}} </b>{{=T("This debugger may not work properly if you don't have a threaded webserver or you're using multiple daemon processes.")}}</li>
|
||||
<li>{{=T("In development, use the default Rocket webserver that is currently supported by this debugger.")}}</li>
|
||||
<li>{{=T("On production, you'll have to configure your webserver to use one process and multiple threads to use this debugger.")}}</li>
|
||||
</ul>
|
||||
</div>
|
||||
{{#=BEAUTIFY(request.env)}}
|
||||
{{else:}}
|
||||
<h3 class="not_paused">{{=T("No Interaction yet")}}</h3>
|
||||
<div class="help span7 alert alert-block alert-info">
|
||||
<ul class="unstyled">
|
||||
<li>{{=T("You need to set up and reach a")}} {{=A(T("breakpoint"), _href=URL('breakpoints'))}} {{=T('to use the debugger!')}}</li>
|
||||
<li>{{=T('To emulate a breakpoint programatically, write:')}}
|
||||
{{=CODE("from gluon.debug import dbg\n"
|
||||
"dbg.set_trace() # stop here!\n",
|
||||
counter=None)}}</li>
|
||||
<li>{{=T('Please')}} {{=A(T("refresh"), _href=URL('interact'))}} {{=T('this page to see if a breakpoint was hit and debug interaction is required.')}}</li>
|
||||
</ul>
|
||||
</div>
|
||||
{{pass}}
|
||||
</div>
|
||||
</div> <!-- /applist -->
|
||||
<div class="sidebar fl60 span5">
|
||||
<div class="sidebar_inner controls" style="margin:0;">
|
||||
<span class="pwdchange pull-right">
|
||||
{{if filename:}}
|
||||
{{=sp_button(URL('step'), T("step"))}}
|
||||
{{=sp_button(URL('next'), T("next"))}}
|
||||
{{=sp_button(URL('ret'), T("return"))}}
|
||||
{{=sp_button(URL('cont'), T("continue"))}}
|
||||
{{=sp_button(URL('stop'), T("stop"))}}
|
||||
{{pass}}
|
||||
{{=button(URL('breakpoints'), T("breakpoints"))}}
|
||||
</span>
|
||||
|
||||
{{if exception:}}
|
||||
<h3 class="exception">{{=T("Exception %s", exception['title'])}}</h3>
|
||||
{{pass}}
|
||||
|
||||
<h5>{{=T("Code listing")}}</h5>
|
||||
{{if lines:}}
|
||||
<pre>{{=CODE('\n'.join([x[1] for x in sorted(lines.items(),key=lambda x: x[0])]),
|
||||
language='python', link=None, counter=min(lines.keys()),
|
||||
highlight_line=lineno, context_lines=10)}}</pre>
|
||||
{{pass}}
|
||||
|
||||
<div class="help">
|
||||
<ul>
|
||||
<li>{{=T("Your application will be blocked until you click an action button (next, step, continue, etc.)")}}</li>
|
||||
<li>{{=T("Your can inspect variables using the console bellow")}}</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
|
||||
<h3>{{=T("Interactive console")}}</h3>
|
||||
<textarea id="output" readonly="readonly">{{=data}}</textarea>
|
||||
|
||||
<form id="form" action="{{=URL(r=request,f='execute',args=app)}}" method="get">
|
||||
<div id="shellwrapper">
|
||||
<div id="caret">>>></div>
|
||||
<div id="autoscroll" style="cursor:pointer;float:right;">autoscroll</div>
|
||||
<div class="tooltip">
|
||||
<textarea class="prompt" name="statement" id="statement"></textarea>
|
||||
<span>{{=T("Type python statement in here and hit Return (Enter) to execute it.")}}</span>
|
||||
<div class="box">
|
||||
<h3>{{=T('Exception %(extype)s: %(exvalue)s', dict(extype=exception['extype'], exvalue=exception['exvalue']))}}</h3>
|
||||
<div class="formfield">
|
||||
{{=CODE((exception['request']), counter=None)}}
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
{{elif request.env.get('wsgi_multiprocess') or not request.env.get('wsgi_multithread'):}}
|
||||
<h3 class="not_paused">{{=T("Unsupported webserver working mode: %s", request.env.get('server_software', ''))}}</h3>
|
||||
<div class="help">
|
||||
<li><b>{{=T("WARNING:")}} </b>{{=T("This debugger may not work properly if you don't have a threaded webserver or you're using multiple daemon processes.")}}</li>
|
||||
<li>{{=T("In development, use the default Rocket webserver that is currently supported by this debugger.")}}</li>
|
||||
<li>{{=T("On production, you'll have to configure your webserver to use one process and multiple threads to use this debugger.")}}</li>
|
||||
</ul>
|
||||
</div>
|
||||
{{#=BEAUTIFY(request.env)}}
|
||||
{{else:}}
|
||||
<h3 class="not_paused">{{=T("No Interaction yet")}}</h3>
|
||||
<div class="help">
|
||||
<ul>
|
||||
<li>{{=T("You need to set up and reach a")}} {{=A(T("breakpoint"), _href=URL('breakpoints'))}} {{=T('to use the debugger!')}}</li>
|
||||
<li>{{=T('To emulate a breakpoint programatically, write:')}}
|
||||
{{=CODE("from gluon.debug import dbg\n"
|
||||
"dbg.set_trace() # stop here!\n",
|
||||
counter=None)}}</li>
|
||||
<li>{{=T('Please')}} {{=A(T("refresh"), _href=URL('interact'))}} {{=T('this page to see if a breakpoint was hit and debug interaction is required.')}}</li>
|
||||
</ul>
|
||||
</div>
|
||||
{{pass}}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="sidebar fl60">
|
||||
<div class="sidebar_inner controls">
|
||||
<span class="pwdchange">
|
||||
{{if filename:}}
|
||||
{{=sp_button(URL('step'), T("step"))}}
|
||||
{{=sp_button(URL('next'), T("next"))}}
|
||||
{{=sp_button(URL('ret'), T("return"))}}
|
||||
{{=sp_button(URL('cont'), T("continue"))}}
|
||||
{{=sp_button(URL('stop'), T("stop"))}}
|
||||
{{pass}}
|
||||
{{=button(URL('breakpoints'), T("breakpoints"))}}
|
||||
</span>
|
||||
|
||||
{{if exception:}}
|
||||
<div class="box">
|
||||
<h3>{{=T('Exception %(extype)s: %(exvalue)s', dict(extype=exception['extype'], exvalue=exception['exvalue']))}}</h3>
|
||||
<h3>{{=T('Locals##debug')}}</h3>
|
||||
<div class="formfield">
|
||||
{{=CODE((exception['request']), counter=None)}}
|
||||
{{=BEAUTIFY(f_locals)}}
|
||||
</div>
|
||||
</div>
|
||||
{{pass}}
|
||||
<div class="box">
|
||||
<h3>{{=T('Globals##debug')}}</h3>
|
||||
<div class="formfield">
|
||||
{{=BEAUTIFY(f_globals)}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="box">
|
||||
<h3>{{=T('Locals##debug')}}</h3>
|
||||
<div class="formfield">
|
||||
{{=BEAUTIFY(f_locals)}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="box">
|
||||
<h3>{{=T('Globals##debug')}}</h3>
|
||||
<div class="formfield">
|
||||
{{=BEAUTIFY(f_globals)}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script src="{{=URL('static', 'js/autoscroll.js')}}"></script>
|
||||
|
||||
<script type="text/javascript">
|
||||
var bShellScrolling=0
|
||||
jQuery(document).ready(function(){
|
||||
// jQuery('#statement').focus(); // not usefull most times...
|
||||
|
||||
jQuery('#statement').keyup(function(event){
|
||||
var t=jQuery(this),
|
||||
s=t.val(),
|
||||
o=jQuery('#output'),
|
||||
RETURN = 38;
|
||||
if(s=='\n') t.val('');
|
||||
if(s.length>1 && s.substr(s.length-1,1)=='\n' && s.substr(s.length-2,1)!=':' &&
|
||||
(s.indexOf(':\n ')<0 || s.substr(s.length-2,1)=='\n')) {
|
||||
t.val('');
|
||||
jQuery.post("{{=URL(r=request,f='execute',args=app)}}",
|
||||
{statement:s},function(data){o.html(o.html()+data).attr('scrollTop',o.attr('scrollHeight'));});
|
||||
} else { };
|
||||
if(event.keyCode==RETURN){
|
||||
var i=s.length
|
||||
if(i==0){
|
||||
var s=o.find('table:last pre:first').text();
|
||||
bShellScrolling=o.find('table').length;
|
||||
}else if(bShellScrolling){
|
||||
var i=bShellScrolling
|
||||
if(i<1){
|
||||
return
|
||||
}else{
|
||||
i--
|
||||
var s=o.find('table:nth-child('+(i)+') pre:first').text();
|
||||
bShellScrolling=i
|
||||
}
|
||||
}else if(s.indexOf('\n')<0){
|
||||
var oo=o.find('tr:first-child pre:contains("'+s+'")')
|
||||
if(oo.length==0){
|
||||
return
|
||||
}else if(oo.length==1){
|
||||
s=oo.text();
|
||||
}else{
|
||||
sVar=oo.text();
|
||||
o.html(o.html()+'<dd>'+s+' ?</dd><dt>'+sVar+'</dt>').attr('scrollTop',o.attr('scrollHeight'))
|
||||
return
|
||||
}
|
||||
}else{
|
||||
//multistring expr
|
||||
return;
|
||||
}
|
||||
// if(s.slice(s.length-1)=='\n'){
|
||||
s=s.slice(0,s.length-1)
|
||||
// }
|
||||
t.val(s);
|
||||
}
|
||||
if(bShellScrolling && event.keyCode==40){
|
||||
var i=bShellScrolling
|
||||
i++
|
||||
var s=o.find('table:nth-child('+i+') tr:first-child pre').text();
|
||||
if(s){
|
||||
s=s.slice(0,s.length-1)
|
||||
t.val(s);
|
||||
bShellScrolling=i
|
||||
}else{
|
||||
bShellScrolling=0
|
||||
t.val('')
|
||||
}
|
||||
};
|
||||
if(bShellScrolling && (event.keyCode==37 || event.keyCode==39)){
|
||||
bShellScrolling=0;
|
||||
};
|
||||
if(event.keyCode==27){
|
||||
bShellScrolling=0;
|
||||
t.val('');
|
||||
};
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</div>
|
||||
|
||||
|
||||
<script type="text/javascript">
|
||||
var bShellScrolling=0
|
||||
jQuery(document).ready(function(){
|
||||
jQuery('#statement').focus();
|
||||
|
||||
jQuery('#statement').keyup(function(event){
|
||||
var t=jQuery(this),
|
||||
s=t.val(),
|
||||
o=jQuery('#output'),
|
||||
RETURN = 38;
|
||||
if(s=='\n') t.val('');
|
||||
if(s.length>1 && s.substr(s.length-1,1)=='\n' && s.substr(s.length-2,1)!=':' &&
|
||||
(s.indexOf(':\n ')<0 || s.substr(s.length-2,1)=='\n')) {
|
||||
t.val('');
|
||||
jQuery.post("{{=URL(r=request,f='execute',args=app)}}",
|
||||
{statement:s},function(data){o.html(o.html()+data).attr('scrollTop',o.attr('scrollHeight'));});
|
||||
} else { };
|
||||
if(event.keyCode==RETURN){
|
||||
var i=s.length
|
||||
if(i==0){
|
||||
var s=o.find('table:last pre:first').text();
|
||||
bShellScrolling=o.find('table').length;
|
||||
}else if(bShellScrolling){
|
||||
var i=bShellScrolling
|
||||
if(i<1){
|
||||
return
|
||||
}else{
|
||||
i--
|
||||
var s=o.find('table:nth-child('+(i)+') pre:first').text();
|
||||
bShellScrolling=i
|
||||
}
|
||||
}else if(s.indexOf('\n')<0){
|
||||
var oo=o.find('tr:first-child pre:contains("'+s+'")')
|
||||
if(oo.length==0){
|
||||
return
|
||||
}else if(oo.length==1){
|
||||
s=oo.text();
|
||||
}else{
|
||||
sVar=oo.text();
|
||||
o.html(o.html()+'<dd>'+s+' ?</dd><dt>'+sVar+'</dt>').attr('scrollTop',o.attr('scrollHeight'))
|
||||
return
|
||||
}
|
||||
}else{
|
||||
//multistring expr
|
||||
return;
|
||||
}
|
||||
// if(s.slice(s.length-1)=='\n'){
|
||||
s=s.slice(0,s.length-1)
|
||||
// }
|
||||
t.val(s);
|
||||
}
|
||||
if(bShellScrolling && event.keyCode==40){
|
||||
var i=bShellScrolling
|
||||
i++
|
||||
var s=o.find('table:nth-child('+i+') tr:first-child pre').text();
|
||||
if(s){
|
||||
s=s.slice(0,s.length-1)
|
||||
t.val(s);
|
||||
bShellScrolling=i
|
||||
}else{
|
||||
bShellScrolling=0
|
||||
t.val('')
|
||||
}
|
||||
};
|
||||
if(bShellScrolling && (event.keyCode==37 || event.keyCode==39)){
|
||||
bShellScrolling=0;
|
||||
};
|
||||
if(event.keyCode==27){
|
||||
bShellScrolling=0;
|
||||
t.val('');
|
||||
};
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
<!-- end "debug" block -->
|
||||
|
||||
@@ -1,24 +1,26 @@
|
||||
{{extend 'layout.html'}}
|
||||
|
||||
{{block sectionclass}}about{{end}}
|
||||
|
||||
<!-- begin "about" block -->
|
||||
<h2>{{=T("About application")}} "{{=app}}"</h2>
|
||||
<h3>{{=T("About")}} {{=app}}</h3>
|
||||
<p class="controls">{{=button(URL('edit/%s/ABOUT' % (app)), T('Edit'))}}</p>
|
||||
<div class="about_text legalese">{{=about}}</div>
|
||||
<div class="about_text legalese well well-small">{{=about}}</div>
|
||||
<h3>{{=T('License for')}} {{=app}}</h3>
|
||||
<p class="controls">{{=button(URL('edit/%s/LICENSE' % (app)), T('Edit'))}}</p>
|
||||
<div class="license_text legalese">{{=license}}</div>
|
||||
</ul>
|
||||
|
||||
<script language="javascript" type="text/javascript" src="{{=URL('static','js/jquery.flot.js')}}"></script>
|
||||
|
||||
<div class="license_text legalese well well-small">{{=license}}</div>
|
||||
<h3>{{=T('Project Progress')}}</h3>
|
||||
<p>
|
||||
<center>
|
||||
<div id="placeholder" style="width:600px;height:300px;"></div>
|
||||
</center>
|
||||
<script language="javascript" type="text/javascript" src="{{=URL('static','js/jquery.flot.js')}}"></script>
|
||||
<script language="javascript" type="text/javascript" src="{{=URL('static','js/jquery.flot.resize.js')}}"></script>
|
||||
<div class="row-fluid">
|
||||
<div class="span2"> </div>
|
||||
<div class="span8 center">
|
||||
<div id="placeholder"></div>
|
||||
</div>
|
||||
<div class="span2"> </div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
jQuery(function () { jQuery.plot(jQuery("#placeholder"), [ {{=progress}} ]); });
|
||||
jQuery(document).ready(function() {
|
||||
jQuery.plot(jQuery("#placeholder"), [ {{=progress}} ]);
|
||||
})
|
||||
</script>
|
||||
</p>
|
||||
<!-- end "about" block -->
|
||||
@@ -1,5 +1,20 @@
|
||||
{{extend 'layout.html'}}
|
||||
|
||||
<h1>{{=T('Bulk Student Registration')}}</h1>
|
||||
|
||||
{{=form}}
|
||||
{{
|
||||
# add bootstrap class to form
|
||||
form['_class']='span4 well well-small'
|
||||
# change form.custom.begin
|
||||
form.custom.begin=XML("<%s %s>" % (form.tag,form._xml()[0]))
|
||||
# new form buttons
|
||||
smt = form.element('input',_type='submit')
|
||||
smt['_class']='btn'
|
||||
form.element('input[type=submit]',replace=lambda button: DIV(button,_class="controls-inline"))
|
||||
}}
|
||||
<h2>{{=T('Bulk Student Registration').capitalize()}}</h2>
|
||||
<div id="web2py_user_form">
|
||||
{{=form.custom.begin}}
|
||||
{{for e in form.components[0]:}}
|
||||
{{= e[0][0]}}
|
||||
{{= e[1][0]}}
|
||||
{{pass}}
|
||||
{{=form.custom.end}}
|
||||
</div>
|
||||
@@ -1,10 +1,22 @@
|
||||
{{extend 'layout.html'}}
|
||||
|
||||
{{block sectionclass}}change_password{{end}}
|
||||
|
||||
<h2>Change Admin Password</h2>
|
||||
|
||||
<!-- begin "change_password" block -->
|
||||
<h2>web2py™ {{=T('Web Framework')}}</h2>
|
||||
<h3>{{=T('Change Admin Password')}}</h3>
|
||||
<div class="pwform">
|
||||
{{=form}}
|
||||
{{=form.custom.begin}}
|
||||
{{ for fieldname in form.table.fields: }}
|
||||
{{if fieldname is not 'id':}}
|
||||
<label>{{=form.custom.label[fieldname]}}</label>
|
||||
{{=form.custom.widget[fieldname]}}
|
||||
{{pass}}
|
||||
{{pass}}
|
||||
<div class="controls"><button type="submit" class="btn">{{=T('Submit')}}</button></div>
|
||||
{{=form.custom.end}}
|
||||
</div>
|
||||
|
||||
<script type="text/javascript">
|
||||
jQuery(document).ready(function() {
|
||||
jQuery(":input:visible:enabled:first").focus();
|
||||
});
|
||||
</script>
|
||||
<!-- end "change_password" block -->
|
||||
@@ -1,9 +1,16 @@
|
||||
{{extend 'layout.html'}}
|
||||
|
||||
{{
|
||||
dlg = dialog
|
||||
smt_button = dlg.element(_type="submit")
|
||||
smt_button['_class'] = 'btn'
|
||||
smt_button['_style'] = 'margin-right:4px;'
|
||||
ccl_button = dlg.element(_type="button")
|
||||
ccl_button['_class'] = 'btn'
|
||||
}}
|
||||
{{block sectionclass}}delete{{end}}
|
||||
|
||||
<!-- begin "delete" block -->
|
||||
<h2>{{=T('Are you sure you want to delete file "%s"?', filename)}}</h2>
|
||||
<div class="center">
|
||||
{{=dialog}}
|
||||
</div>
|
||||
|
||||
<!-- end "delete" block -->
|
||||
@@ -1,9 +1,16 @@
|
||||
{{extend 'layout.html'}}
|
||||
|
||||
{{
|
||||
dlg = dialog
|
||||
smt_button = dlg.element(_type="submit")
|
||||
smt_button['_class'] = 'btn'
|
||||
smt_button['_style'] = 'margin-right:4px;'
|
||||
ccl_button = dlg.element(_type="button")
|
||||
ccl_button['_class'] = 'btn'
|
||||
}}
|
||||
{{block sectionclass}}delete_plugin{{end}}
|
||||
|
||||
<!-- begin "delete_plugin" block -->
|
||||
<h2>{{=T('Are you sure you want to delete plugin "%s"?', plugin)}}</h2>
|
||||
<div class="center">
|
||||
{{=dialog}}
|
||||
</div>
|
||||
|
||||
<!-- end "delete_plugin" block -->
|
||||
@@ -7,52 +7,75 @@ def peekfile(path,file,vars={},title=None):
|
||||
return A(file.replace('\\\\','/'),_title=title,_href=URL('peek', args=args, vars=vars))
|
||||
def editfile(path,file,vars={}):
|
||||
args=(path,file) if 'app' in vars else (app,path,file)
|
||||
return A(SPAN(T('Edit')),_class='button editbutton',_href=URL('edit', args=args, vars=vars))
|
||||
return A(SPAN(T('Edit')),_class='button editbutton btn btn-mini',_href=URL('edit', args=args, vars=vars))
|
||||
def testfile(path,file):
|
||||
return A(TAG[''](IMG(_src=URL('static', 'images/test_icon.png'), _alt=T('test')), SPAN(T("Run tests in this file (to run all files, you may also use the button labelled 'test')"))), _class='icon test tooltip',_href=URL('test', args=(app, file)))
|
||||
return A(TAG[''](IMG(_src=URL('static', 'images/test_icon.png'), _alt=T('test')),
|
||||
SPAN(T("Run tests in this file (to run all files, you may also use the button labelled 'test')"))),
|
||||
_class='icon test',
|
||||
_href=URL('test', args=(app, file)),
|
||||
_rel="tooltip",
|
||||
**{'_data-placement':'right',
|
||||
'_data-original-title':T("Run tests in this file (to run all files, you may also use the button labelled 'test')")})
|
||||
def editlanguagefile(path,file,vars={}):
|
||||
return A(SPAN(T('Edit')),_class='button editbutton',_href=URL('edit_language', args=(app, path, file), vars=vars))
|
||||
return A(SPAN(T('Edit')),_class='button editbutton btn btn-mini',_href=URL('edit_language', args=(app, path, file), vars=vars))
|
||||
def editpluralsfile(path,file,vars={}):
|
||||
return A(SPAN(T('Edit')),_class='button editbutton',_href=URL('edit_plurals', args=(app, path, file), vars=vars))
|
||||
return A(SPAN(T('Edit')),_class='button editbutton btn btn-mini',_href=URL('edit_plurals', args=(app, path, file), vars=vars))
|
||||
def file_upload_form(location, anchor=None):
|
||||
form=FORM(T("upload file:")," ",
|
||||
INPUT(_type="file",_name="file")," ",T("and rename it:")," ",
|
||||
INPUT(_type="text",_name="filename",requires=IS_NOT_EMPTY),
|
||||
INPUT(_type="hidden",_name="location",_value=location),
|
||||
INPUT(_type="hidden",_name="token",_value=session.token),
|
||||
INPUT(_type="hidden",_name="sender",_value=URL('design',args=app, anchor=anchor)),
|
||||
INPUT(_type="submit",_value=T("upload")),_action=URL('upload_file'))
|
||||
form=FORM(
|
||||
LABEL(T("upload file:")),
|
||||
INPUT(_type="file",_name="file"),
|
||||
LABEL(T("and rename it:")),
|
||||
INPUT(_type="text",_name="filename",requires=IS_NOT_EMPTY,_class=""),
|
||||
DIV(TAG['BUTTON'](T("Upload"),_type="submit",_class="btn"),_class="controls"),
|
||||
INPUT(_type="hidden",_name="location",_value=location),
|
||||
INPUT(_type="hidden",_name="token",_value=session.token),
|
||||
INPUT(_type="hidden",_name="sender",_value=URL('design',args=app, anchor=anchor)),
|
||||
_action=URL('upload_file'),
|
||||
_class="generatedbyw2p well well-small")
|
||||
return form
|
||||
def file_create_form(location, anchor=None):
|
||||
form=FORM(T("create file with filename:")," ",
|
||||
INPUT(_type="text",_name="filename",requires=IS_NOT_EMPTY),
|
||||
INPUT(_type="hidden",_name="location",_value=location),
|
||||
INPUT(_type="hidden",_name="sender",_value=URL('design',args=app)),
|
||||
INPUT(_type="hidden",_name="token",_value=session.token),
|
||||
INPUT(_type="hidden",_name="id",_value=anchor),
|
||||
INPUT(_type="submit",_value=T("Create")),_action=URL('create_file'))
|
||||
def file_create_form(location, anchor=None, helptext=""):
|
||||
form=FORM(
|
||||
LABEL(T("create file with filename:")),
|
||||
INPUT(_type="text",_name="filename",requires=IS_NOT_EMPTY,_class=''),
|
||||
TAG['SMALL'](helptext,_class="help-block"),
|
||||
DIV(TAG['BUTTON'](T("Create"),_type="submit",_class="btn"),_class="controls"),
|
||||
INPUT(_type="hidden",_name="location",_value=location),
|
||||
INPUT(_type="hidden",_name="sender",_value=URL('design',args=app)),
|
||||
INPUT(_type="hidden",_name="token",_value=session.token),
|
||||
INPUT(_type="hidden",_name="id",_value=anchor),
|
||||
_action=URL('create_file'),
|
||||
_class="generatedbyw2p well well-small")
|
||||
return form
|
||||
def upload_plugin_form(app, anchor=None):
|
||||
form=FORM(T("upload plugin file:")," ",
|
||||
INPUT(_type="file",_name="pluginfile"),
|
||||
INPUT(_type="hidden",_name="id",_value=anchor),
|
||||
INPUT(_type="hidden",_name="token",_value=session.token),
|
||||
INPUT(_type="submit",_value=T("upload")))
|
||||
form=FORM(
|
||||
LABEL(T("upload plugin file:")),
|
||||
INPUT(_type="file",_name="pluginfile"),
|
||||
INPUT(_type="hidden",_name="id",_value=anchor),
|
||||
INPUT(_type="hidden",_name="token",_value=session.token),
|
||||
DIV(TAG['BUTTON'](T("Upload"),_type="submit",_class="btn"),_class="controls"),
|
||||
_class="generatedbyw2p well well-small")
|
||||
return form
|
||||
def deletefile(arglist, vars={}):
|
||||
vars.update({'sender':request.function+'/'+app})
|
||||
return A(TAG[''](IMG(_src=URL('static', 'images/delete_icon.png')), SPAN(T('Delete this file (you will be asked to confirm deletion)'))), _class='icon delete tooltip', _href=URL('delete',args=arglist,vars=vars))
|
||||
vars.update({'sender':request.function+'/'+app})
|
||||
return A(TAG[''](IMG(_src=URL('static', 'images/delete_icon.png')),
|
||||
SPAN(T('Delete this file (you will be asked to confirm deletion)'))),
|
||||
_href=URL('delete',args=arglist,vars=vars),
|
||||
_class='icon delete',
|
||||
_rel="tooltip",
|
||||
**{'_data-placement':'right',
|
||||
'_data-original-title':T('Delete this file (you will be asked to confirm deletion)')})
|
||||
}}
|
||||
|
||||
{{block sectionclass}}design{{end}}
|
||||
<!-- begin "design" block -->
|
||||
|
||||
<h2>{{=T("Edit application")}} "{{=A(app,_href=URL(app,'default','index'),_target="_blank")}}"</h2>
|
||||
|
||||
<!-- COLLAPSE/JUMP-TO BUTTONS -->
|
||||
<div class="right-full controls">
|
||||
<p>
|
||||
<p class="buttons-row">
|
||||
{{=searchbox('search')}}
|
||||
<a class="button special" href="#" onclick="jQuery('h3').click();return false"><span>{{=T("collapse/expand all")}}</span></a>
|
||||
<a class="button special btn btn-inverse" href="#" onclick="jQuery('h3>span').click();return false"><span>{{=T("collapse/expand all")}}</span></a>
|
||||
<span class="buttongroup">
|
||||
{{=button('#models', T("models"))}}
|
||||
{{=button('#controllers', T("controllers"))}}
|
||||
@@ -63,43 +86,50 @@ def deletefile(arglist, vars={}):
|
||||
{{=button('#private', T("private files"))}}
|
||||
{{=button('#plugins', T("plugins"))}}
|
||||
</span>
|
||||
</p>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<!-- MODELS -->
|
||||
|
||||
<h3 id="models" onclick="collapse('models_inner');" class="component">
|
||||
{{=T("Models")}}
|
||||
<span class="tooltip">{{=helpicon()}} <span>{{=T("The data representation, define database tables and sets")}}</span></span>
|
||||
<h3 id="_models" rel="pagebookmark">
|
||||
<span class="component" onclick="collapse('models_inner');">{{=T("Models")}}</span>
|
||||
<a href="#models" rel="tooltip" data-placement="right" data-original-title="{{=T('The data representation, define database tables and sets')}}">
|
||||
{{=helpicon()}}
|
||||
<span>{{=T("The data representation, define database tables and sets")}}</span>
|
||||
</a><span id="models" class="hashstick"> </span><a href="#" class="tophashlink btn btn-mini btn-warning"><span>top</span></a>
|
||||
</h3>
|
||||
<div id="models_inner" class="component_contents">
|
||||
{{if not models:}}<p><strong>{{=T("There are no models")}}</strong></p>{{else:}}
|
||||
<div class="controls comptools">
|
||||
{{=button(URL(a=app,c='appadmin',f='index'), T('database administration'))}}
|
||||
{{if os.access(os.path.join(request.folder,'..',app,'databases','sql.log'),os.R_OK):}}
|
||||
{{=button(URL('peek/%s/databases/sql.log'%app), 'sql.log')}}
|
||||
{{if not models:}}<p><strong>{{=T("There are no models")}}</strong></p>{{else:}}
|
||||
<div class="controls comptools">
|
||||
{{=button(URL(a=app,c='appadmin',f='index'), T('database administration'))}}
|
||||
{{if os.access(os.path.join(request.folder,'..',app,'databases','sql.log'),os.R_OK):}}
|
||||
{{=button(URL('peek/%s/databases/sql.log'%app), 'sql.log')}}
|
||||
{{pass}}
|
||||
{{=button(URL(a=app, c='appadmin',f='graph_model'), T('graph model'))}}
|
||||
</div>
|
||||
<ul class="unstyled act_edit">
|
||||
{{for m in models:}}
|
||||
{{id="models__"+m.replace('.','__')}}
|
||||
<li id="{{='_'+id}}" rel="pagebookmark"><span id="{{=id}}" class="hashstick"> </span>
|
||||
<span class="filetools controls">
|
||||
{{=editfile('models',m, dict(id=id))}}
|
||||
{{=deletefile([app, 'models', m], dict(id=id, id2='models'))}}
|
||||
</span>
|
||||
<span class="file">
|
||||
{{=peekfile('models',m, dict(id=id))}}
|
||||
</span>
|
||||
<span class="extras">
|
||||
{{if len(defines[m]):}}{{=T("defines tables")}} {{pass}}{{=XML(', '.join([B(table).xml() for table in defines[m]]))}}
|
||||
</span>
|
||||
</li>
|
||||
{{pass}}
|
||||
</ul>
|
||||
{{pass}}
|
||||
</div>
|
||||
{{pass}}
|
||||
|
||||
<ul>
|
||||
{{for m in models:}}
|
||||
{{id="models__"+m.replace('.','__')}}
|
||||
<li id="{{=id}}">
|
||||
<span class="filetools controls">
|
||||
{{=editfile('models',m, dict(id=id))}}
|
||||
{{=deletefile([app, 'models', m], dict(id=id, id2='models'))}}
|
||||
</span>
|
||||
<span class="file">
|
||||
{{=peekfile('models',m, dict(id=id))}}
|
||||
</span>
|
||||
<span class="extras">
|
||||
{{if len(defines[m]):}}{{=T("defines tables")}} {{pass}}{{=XML(', '.join([B(table).xml() for table in defines[m]]))}}
|
||||
</span>
|
||||
</li>
|
||||
{{pass}}
|
||||
</ul>
|
||||
<div class="controls formfield">{{=file_create_form('%s/models/' % app, 'models')}}</div>
|
||||
<div class="controls formfield">
|
||||
<button onclick="jQuery('#form1').slideToggle()" class="btn btn-mini">Create</button>
|
||||
<div id="form1" class="row-fluid" style="display:none">
|
||||
<div class="span3">{{=file_create_form('%s/models/' % app, 'models')}}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- FIND CONTROLLER FUNCTIONS -->
|
||||
@@ -109,289 +139,333 @@ for c in controllers: controller_functions+=[c[:-3]+'/%s.html'%x for x in functi
|
||||
}}
|
||||
|
||||
<!-- CONTROLLERS -->
|
||||
|
||||
<h3 id="controllers" onclick="collapse('controllers_inner');" class="component">
|
||||
{{=T("Controllers")}}
|
||||
<span class="tooltip">{{=helpicon()}} <span>{{=T("The application logic, each URL path is mapped in one exposed function in the controller")}}</span></span>
|
||||
<h3 id="_controllers" rel="pagebookmark">
|
||||
<span class="component" onclick="collapse('controllers_inner');">{{=T("Controllers")}}</span>
|
||||
<a href="#controllers" rel="tooltip" data-placement="right" data-original-title="{{=T('The application logic, each URL path is mapped in one exposed function in the controller')}}">
|
||||
{{=helpicon()}}
|
||||
<span>{{=T("The application logic, each URL path is mapped in one exposed function in the controller")}}</span>
|
||||
</a><span id="controllers" class="hashstick"> </span><a href="#" class="tophashlink btn btn-mini btn-warning"><span>top</span></a>
|
||||
</h3>
|
||||
<div id="controllers_inner" class="component_contents">
|
||||
{{if not controllers:}}<p><strong>{{=T("There are no controllers")}}</strong></p>{{else:}}
|
||||
<div class="controls comptools">
|
||||
{{=button(URL(r=request,c='shell',f='index',args=app), T("shell"))}}
|
||||
{{=button(URL('test',args=app), T("test"))}}
|
||||
{{=button(URL('edit',args=[app,'cron','crontab']), T("crontab"))}}
|
||||
</div>
|
||||
{{pass}}
|
||||
<ul>
|
||||
{{for c in controllers:}}
|
||||
{{id="controllers__"+c.replace('.','__')}}
|
||||
<li id="{{=id}}">
|
||||
<span class="filetools controls">
|
||||
{{=editfile('controllers',c, dict(id=id))}}
|
||||
{{=deletefile([app, 'controllers', c], dict(id=id, id2='controllers'))}}
|
||||
{{=testfile('controllers',c)}}
|
||||
</span>
|
||||
<span class="file">
|
||||
{{=peekfile('controllers',c, dict(id=id))}}
|
||||
</span>
|
||||
<span class="extras">
|
||||
{{if functions[c]:}}{{=T("exposes")}} {{pass}}{{=XML(', '.join([A(f,_href=URL(a=app,c=c[:-3],f=f)).xml() for f in functions[c]]))}}
|
||||
</span>
|
||||
</li>
|
||||
{{if not controllers:}}<p><strong>{{=T("There are no controllers")}}</strong></p>{{else:}}
|
||||
<div class="controls comptools">
|
||||
{{=button(URL(r=request,c='shell',f='index',args=app), T("shell"))}}
|
||||
{{=button(URL('test',args=app), T("test"))}}
|
||||
{{=button(URL('edit',args=[app,'cron','crontab']), T("crontab"))}}
|
||||
</div>
|
||||
<ul class="unstyled act_edit">
|
||||
{{for c in controllers:}}
|
||||
{{id="controllers__"+c.replace('.','__')}}
|
||||
<li id="{{='_'+id}}" rel="pagebookmark"><span id="{{=id}}" class="hashstick"> </span>
|
||||
<span class="filetools controls">
|
||||
{{=editfile('controllers',c, dict(id=id))}}
|
||||
{{=deletefile([app, 'controllers', c], dict(id=id, id2='controllers'))}}
|
||||
{{=testfile('controllers',c)}}
|
||||
</span>
|
||||
<span class="file">
|
||||
{{=peekfile('controllers',c, dict(id=id))}}
|
||||
</span>
|
||||
<span class="extras celled">
|
||||
{{if functions[c]:}}{{=T("exposes")}}{{pass}} {{=XML(', '.join([A(f,_href=URL(a=app,c=c[:-3],f=f)).xml() for f in functions[c]]))}}
|
||||
</span>
|
||||
</li>
|
||||
{{pass}}
|
||||
</ul>
|
||||
{{pass}}
|
||||
</ul>
|
||||
<div class="controls formfield">{{=file_create_form('%s/controllers/' % app, 'controllers')}}</div>
|
||||
<div class="controls formfield">
|
||||
<button onclick="jQuery('#form2').slideToggle()" class="btn btn-mini">Create</button>
|
||||
<div id="form2" class="row-fluid" style="display:none">
|
||||
<div class="span3">{{=file_create_form('%s/controllers/' % app, 'controllers')}}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- VIEWS -->
|
||||
|
||||
<h3 id="views" onclick="collapse('views_inner');" class="component">
|
||||
{{=T("Views")}}
|
||||
<span class="tooltip">{{=helpicon()}} <span>{{=T("The presentations layer, views are also known as templates")}}</span></span>
|
||||
<h3 id="_views" rel="pagebookmark">
|
||||
<span class="component" onclick="collapse('views_inner');">{{=T("Views")}}</span>
|
||||
<a href="#views" rel="tooltip" data-placement="right" data-original-title="{{=T('The presentations layer, views are also known as templates')}}">
|
||||
{{=helpicon()}}
|
||||
<span>{{=T("The presentations layer, views are also known as templates")}}</span>
|
||||
</a><span id="views" class="hashstick"> </span><a href="#" class="tophashlink btn btn-mini btn-warning"><span>top</span></a>
|
||||
</h3>
|
||||
<div id="views_inner" class="component_contents">
|
||||
<div class="controls comptools">
|
||||
{{=button(LAYOUTS_APP, T("download layouts"))}}
|
||||
</div>
|
||||
{{if not views:}}<p><strong>{{=T("There are no views")}}</strong></p>{{pass}}
|
||||
<ul>
|
||||
{{for c in views:}}
|
||||
{{id="views__"+c.replace('/','__').replace('.','__')}}
|
||||
<li id="{{=id}}">
|
||||
<span class="filetools controls">
|
||||
{{=editfile('views',c, dict(id=id))}}
|
||||
{{=deletefile([app, 'views', c], dict(id=id, id2='views'))}}
|
||||
</span>
|
||||
<span class="file">
|
||||
{{=peekfile('views',c, dict(id=id))}}
|
||||
</span>
|
||||
<span class="extras">
|
||||
{{if extend.has_key(c):}}{{=T("extends")}} <b>{{=extend[c]}}</b> {{pass}}
|
||||
{{if include[c]:}}{{=T("includes")}} {{pass}}{{=XML(', '.join([B(f).xml() for f in include[c]]))}}
|
||||
</span>
|
||||
</li>
|
||||
{{if not views:}}<p><strong>{{=T("There are no views")}}</strong></p>{{else:}}
|
||||
<div class="controls comptools">
|
||||
{{=button(LAYOUTS_APP, T("download layouts"))}}
|
||||
</div>
|
||||
<ul class="unstyled act_edit">
|
||||
{{for c in views:}}
|
||||
{{id="views__"+c.replace('/','__').replace('.','__')}}
|
||||
<li id="{{='_'+id}}" rel="pagebookmark"><span id="{{=id}}" class="hashstick"> </span>
|
||||
<span class="filetools controls">
|
||||
{{=editfile('views',c, dict(id=id))}}
|
||||
{{=deletefile([app, 'views', c], dict(id=id, id2='views'))}}
|
||||
</span>
|
||||
<span class="file">
|
||||
{{=peekfile('views',c, dict(id=id))}}
|
||||
</span>
|
||||
<span class="extras celled celled-one">
|
||||
{{if extend.has_key(c):}}{{=T("extends")}} <b>{{=extend[c]}}</b> {{pass}}
|
||||
{{if include[c]:}}{{=T("includes")}} {{pass}}{{=XML(', '.join([B(f).xml() for f in include[c]]))}}
|
||||
</span>
|
||||
</li>
|
||||
{{pass}}
|
||||
</ul>
|
||||
{{pass}}
|
||||
</ul>
|
||||
<div class="controls formfield">{{=file_create_form('%s/views/' % app, 'views')}}</div>
|
||||
<div class="controls formfield">
|
||||
<button onclick="jQuery('#form3').slideToggle()" class="btn btn-mini">Create</button>
|
||||
<div id="form3" class="row-fluid" style="display:none">
|
||||
<div class="span3">{{=file_create_form('%s/views/' % app, 'views')}}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- LANGUAGES -->
|
||||
|
||||
<h3 id="languages" onclick="collapse('languages_inner');" class="component">
|
||||
{{=T("Languages")}}
|
||||
<span class="tooltip">{{=helpicon()}} <span>{{=T("Translation strings for the application")}}</span></span>
|
||||
<h3 id="_languages" rel="pagebookmark">
|
||||
<span class="component" onclick="collapse('languages_inner');">{{=T("Languages")}}</span>
|
||||
<a href="#languages" rel="tooltip" data-placement="right" data-original-title="{{=T('Translation strings for the application')}}">
|
||||
{{=helpicon()}}
|
||||
<span>{{=T("Translation strings for the application")}}</span>
|
||||
</a><span id="languages" class="hashstick"> </span><a href="#" class="tophashlink btn btn-mini btn-warning"><span>top</span></a>
|
||||
</h3>
|
||||
<div id="languages_inner" class="component_contents">
|
||||
<div class="controls comptools">
|
||||
{{=button(URL('update_languages/'+app), T('update all languages'))}}
|
||||
</div>
|
||||
{{if not languages:}}<p><strong>{{=T("There are no translators, only default language is supported")}}</strong></p>{{pass}}
|
||||
<table>
|
||||
{{for lang in sorted(languages):
|
||||
file = lang+'.py'
|
||||
id = "languages__"+file.replace('.','__')}}
|
||||
<tr id="{{=id}}">
|
||||
<td>
|
||||
<span class="filetools controls">
|
||||
{{=editlanguagefile('languages',file)}}
|
||||
{{=deletefile([app, 'languages', file], dict(id=id, id2='languages'))}}
|
||||
</span>
|
||||
<span class="file">
|
||||
{{=peekfile('languages',file, dict(id=id))}}
|
||||
</span>
|
||||
</td>
|
||||
<td>
|
||||
|
||||
(
|
||||
{{=T("Plural-Forms:")}}
|
||||
{{p=languages[lang][3:7]}}
|
||||
{{if p[2] == 'default':}}
|
||||
<span class='error'>{{=T("rules are not defined")}}</span> {{=T.M("(file **gluon/contrib/plural_rules/%s.py** is not found)",lang[:2])}}
|
||||
{{else:}}
|
||||
{{if p[3] == 1:}}
|
||||
{{=B(T("are not used"))}}
|
||||
{{else:}}
|
||||
{{pfile=p[0]}}
|
||||
{{if p[1]!=0:}}
|
||||
<span class="filetools controls">
|
||||
{{=editpluralsfile('languages',pfile,dict(nplurals=p[3]))}}
|
||||
</span>
|
||||
<span class="file">
|
||||
{{=peekfile('languages',pfile,dict(id=id))}}
|
||||
</span>
|
||||
{{else:}}
|
||||
<b>{{=T("are not used yet")}}</b>
|
||||
{{if not languages:}}<p><strong>{{=T("There are no translators, only default language is supported")}}</strong></p>{{else:}}
|
||||
<div class="controls comptools">
|
||||
{{=button(URL('update_languages/'+app), T('update all languages'))}}
|
||||
</div>
|
||||
<ul class="unstyled act_edit">
|
||||
{{for lang in sorted(languages):
|
||||
file = lang+'.py'
|
||||
id = "languages__"+file.replace('.','__')}}
|
||||
<li id="{{='_'+id}}" rel="pagebookmark" class="li-row"><span id="{{=id}}" class="hashstick"> </span>
|
||||
<span class="li-controls">
|
||||
<span class="filetools controls">
|
||||
{{=editlanguagefile('languages',file)}}
|
||||
{{=deletefile([app, 'languages', file], dict(id=id, id2='languages'))}}
|
||||
</span>
|
||||
<span class="">
|
||||
{{=peekfile('languages',file, dict(id=id))}}
|
||||
</span>
|
||||
</span> <!-- /li-row -->
|
||||
<span class="extras celled">
|
||||
(
|
||||
{{=T("Plural-Forms:")}}
|
||||
{{p=languages[lang][3:7]}}
|
||||
{{if p[2] == 'default':}}
|
||||
<span class='error text-error'>{{=T("rules are not defined")}}</span> {{=T.M("(file **gluon/contrib/plural_rules/%s.py** is not found)",lang[:2])}}
|
||||
{{else:}}
|
||||
{{if p[3] == 1:}}
|
||||
{{=B(T("are not used"))}}
|
||||
{{else:}}
|
||||
{{pfile=p[0]}}
|
||||
{{if p[1]!=0:}}<span style="display:inline-block;margin-top:-10px;">
|
||||
<span class="filetools controls">
|
||||
{{=editpluralsfile('languages',pfile,dict(nplurals=p[3]))}}
|
||||
</span>
|
||||
<span class="file">
|
||||
{{=peekfile('languages',pfile,dict(id=id))}}
|
||||
</span></span>
|
||||
{{else:}}
|
||||
<b>{{=T("are not used yet")}}</b>
|
||||
{{pass}}
|
||||
{{pass}}
|
||||
{{pass}}
|
||||
)
|
||||
</span>
|
||||
</li>
|
||||
{{pass}}
|
||||
{{pass}}
|
||||
</ul>
|
||||
{{pass}}
|
||||
)
|
||||
</td>
|
||||
</tr>
|
||||
{{pass}}
|
||||
</table>
|
||||
{{pass}}
|
||||
<div class="controls formfield">{{=file_create_form('%s/languages/' % app, 'languages')}}{{=T('(something like "it-it")')}}</div>
|
||||
<div class="controls formfield">
|
||||
<button onclick="jQuery('#form4').slideToggle()" class="btn btn-mini">Create</button>
|
||||
<div id="form4" class="row-fluid" style="display:none">
|
||||
<div class="span3">{{=file_create_form('%s/languages/' % app, 'languages', T('(something like "it-it")'))}}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- STATIC -->
|
||||
|
||||
<h3 id="static" onclick="collapse('static_inner');" class="component">
|
||||
{{=T("Static files")}}
|
||||
<span class="tooltip">{{=helpicon()}} <span>{{=T("These files are served without processing, your images go here")}}</span></span>
|
||||
<h3 id="_static" rel="pagebookmark">
|
||||
<span class="component" onclick="collapse('static_inner');">{{=T("Static")}}</span>
|
||||
<a href="#static" rel="tooltip" data-placement="right" data-original-title="{{=T('These files are served without processing, your images go here')}}">
|
||||
{{=helpicon()}}
|
||||
<span>{{=T("These files are served without processing, your images go here")}}</span>
|
||||
</a><span id="static" class="hashstick"> </span><a href="#" class="tophashlink btn btn-mini btn-warning"><span>top</span></a>
|
||||
</h3>
|
||||
<div id="static_inner" class="component_contents">
|
||||
<div class="controls comptools">
|
||||
</div>
|
||||
{{if not statics:}}<p><strong>{{=T("There are no static files")}}</strong></p>{{pass}}
|
||||
<ul>
|
||||
{{if not statics:}}<p><strong>{{=T("There are no static files")}}</strong></p>{{else:}}
|
||||
<ul class="unstyled act_edit">
|
||||
{{
|
||||
path=[]
|
||||
for file in statics+['']:
|
||||
items=file.split('/')
|
||||
file_path=items[:-1]
|
||||
filename=items[-1]
|
||||
while path!=file_path:
|
||||
if len(file_path)>=len(path) and all([v==file_path[k] for k,v in enumerate(path)]):
|
||||
path.append(file_path[len(path)])
|
||||
thispath='static__'+'__'.join(path)
|
||||
path=[]
|
||||
for file in statics+['']:
|
||||
items=file.split('/')
|
||||
file_path=items[:-1]
|
||||
filename=items[-1]
|
||||
while path!=file_path:
|
||||
if len(file_path)>=len(path) and all([v==file_path[k] for k,v in enumerate(path)]):
|
||||
path.append(file_path[len(path)])
|
||||
thispath='static__'+'__'.join(path)
|
||||
}}
|
||||
<li class="folder">
|
||||
<a href="javascript:collapse('{{=thispath}}');" class="file">{{=path[-1]}}/</a>
|
||||
<ul id="{{=thispath}}" style="display: none;" class="sublist">{{
|
||||
else:
|
||||
path = path[:-1]
|
||||
}}
|
||||
</ul></li>
|
||||
<li class="folder"><i> </i>
|
||||
<a href="javascript:collapse('{{=thispath}}');" class="file">{{=path[-1]}}/</a>
|
||||
<ul id="{{=thispath}}" style="display: none;" class="sublist">{{
|
||||
else:
|
||||
path = path[:-1]
|
||||
}}
|
||||
</ul></li>
|
||||
{{
|
||||
pass
|
||||
pass
|
||||
if filename:
|
||||
}}<li>
|
||||
<span class="filetools controls">
|
||||
{{=editfile('static',file, dict(id="static"))}} {{=deletefile([app,'static',file], dict(id="static",id2="static"))}}
|
||||
</span>
|
||||
<span class="file">
|
||||
<a href="{{=URL(a=app,c='static',f=file)}}">{{=filename}}</a>
|
||||
</span>
|
||||
</li>{{
|
||||
pass
|
||||
pass
|
||||
pass
|
||||
pass
|
||||
if filename:
|
||||
}}
|
||||
<li>
|
||||
<span class="filetools controls">
|
||||
{{=editfile('static',file, dict(id="static"))}} {{=deletefile([app,'static',file], dict(id="static",id2="static"))}}
|
||||
</span>
|
||||
<span class="file">
|
||||
<a href="{{=URL(a=app,c='static',f=file)}}">{{=filename}}</a>
|
||||
</span>
|
||||
</li>{{
|
||||
pass
|
||||
pass
|
||||
}}
|
||||
</ul>
|
||||
{{pass}}
|
||||
</ul>
|
||||
<div class="controls formfield">{{=file_create_form('%s/static/' % app, 'static')}}
|
||||
{{=file_upload_form('%s/static/' % app, 'static')}}</div>
|
||||
<div class="controls formfield">
|
||||
<button onclick="jQuery('#form5').slideToggle()" class="btn btn-mini">Create/Upload</button>
|
||||
<div id="form5" class="row-fluid" style="display:none">
|
||||
<div class="span3">{{=file_create_form('%s/static/' % app, 'static')}}<em>{{=T('or alternatively')}}</em></div>
|
||||
<div class="span3">{{=file_upload_form('%s/static/' % app, 'static')}}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- MODULES -->
|
||||
|
||||
<h3 id="modules" onclick="collapse('modules_inner');" class="component">
|
||||
{{=T("Modules")}}
|
||||
<span class="tooltip">{{=helpicon()}} <span>{{=T("Additional code for your application")}}</span></span>
|
||||
<h3 id="_modules" rel="pagebookmark">
|
||||
<span class="component" onclick="collapse('modules_inner');">{{=T("Modules")}}</span>
|
||||
<a href="#modules" rel="tooltip" data-placement="right" data-original-title="{{=T('Additional code for your application')}}">
|
||||
{{=helpicon()}}
|
||||
<span>{{=T("Additional code for your application")}}</span>
|
||||
</a><span id="modules" class="hashstick"> </span><a href="#" class="tophashlink btn btn-mini btn-warning"><span>top</span></a>
|
||||
</h3>
|
||||
<div id="modules_inner" class="component_contents">
|
||||
<div class="controls comptools">
|
||||
</div>
|
||||
{{if not modules:}}<p><strong>{{=T("There are no modules")}}</strong></p>{{pass}}
|
||||
<ul>
|
||||
{{for m in modules:}}
|
||||
{{id="modules__"+m.replace('/','__').replace('.','__')}}
|
||||
<li id="{{=id}}">
|
||||
<span class="filetols controls">
|
||||
{{=editfile('modules',m,dict(id=id))}}
|
||||
{{if m!='__init__.py':}}
|
||||
{{=deletefile([app, 'modules', m], dict(id=id, id2='modules'))}}
|
||||
{{pass}}
|
||||
</span>
|
||||
<span class="file">
|
||||
{{=peekfile('modules',m, dict(id=id))}}
|
||||
</span>
|
||||
</li>
|
||||
{{if not modules:}}<p><strong>{{=T("There are no modules")}}</strong></p>{{else:}}
|
||||
<ul class="unstyled act_edit">
|
||||
{{for m in modules:}}
|
||||
{{id="modules__"+m.replace('/','__').replace('.','__')}}
|
||||
<li id="{{='_'+id}}" rel="pagebookmark"><span id="{{=id}}" class="hashstick"> </span>
|
||||
<span class="filetols controls">
|
||||
{{=editfile('modules',m,dict(id=id))}}
|
||||
{{if m!='__init__.py':}}
|
||||
{{=deletefile([app, 'modules', m], dict(id=id, id2='modules'))}}
|
||||
{{pass}}
|
||||
</span>
|
||||
<span class="file">
|
||||
{{=peekfile('modules',m, dict(id=id))}}
|
||||
</span>
|
||||
</li>
|
||||
{{pass}}
|
||||
</ul>
|
||||
{{pass}}
|
||||
</ul>
|
||||
<div class="controls formfield">{{=file_create_form('%s/modules/' % app, 'modules')}}
|
||||
{{=file_upload_form('%s/modules/' % app, 'modules')}}</div>
|
||||
<div class="controls formfield">
|
||||
<button onclick="jQuery('#form6').slideToggle()" class="btn btn-mini">Create/Upload</button>
|
||||
<div id="form6" class="row-fluid" style="display:none">
|
||||
<div class="span3">{{=file_create_form('%s/modules/' % app, 'modules')}}<em>{{=T('or alternatively')}}</em></div>
|
||||
<div class="span3">{{=file_upload_form('%s/modules/' % app, 'modules')}}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- PRIVATE -->
|
||||
|
||||
<h3 id="private" onclick="collapse('private_inner');" class="component">
|
||||
{{=T("Private files")}}
|
||||
<span class="tooltip">{{=helpicon()}} <span>{{=T("These files are not served, they are only available from within your app")}}</span></span>
|
||||
<h3 id="_private" rel="pagebookmark">
|
||||
<span class="component" onclick="collapse('private_inner');">{{=T("Private files")}}</span>
|
||||
<a href="#private" rel="tooltip" data-placement="right" data-original-title="{{=T('These files are not served, they are only available from within your app')}}">
|
||||
{{=helpicon()}}
|
||||
<span>{{=T("These files are not served, they are only available from within your app")}}</span>
|
||||
</a><span id="private" class="hashstick"> </span><a href="#" class="tophashlink btn btn-mini btn-warning"><span>top</span></a>
|
||||
</h3>
|
||||
<div id="private_inner" class="component_contents">
|
||||
<div class="controls comptools">
|
||||
</div>
|
||||
{{if not privates:}}<p><strong>{{=T("There are no private files")}}</strong></p>{{pass}}
|
||||
<ul>
|
||||
{{
|
||||
path=[]
|
||||
for file in privates+['']:
|
||||
items=file.split('/')
|
||||
file_path=items[:-1]
|
||||
filename=items[-1]
|
||||
while path!=file_path:
|
||||
if len(file_path)>=len(path) and all([v==file_path[k] for k,v in enumerate(path)]):
|
||||
path.append(file_path[len(path)])
|
||||
thispath='private__'+'__'.join(path)
|
||||
}}
|
||||
<li class="folder">
|
||||
<a href="javascript:collapse('{{=thispath}}');" class="file">{{=path[-1]}}/</a>
|
||||
<ul id="{{=thispath}}" style="display: none;" class="sublist">{{
|
||||
else:
|
||||
path = path[:-1]
|
||||
}}
|
||||
</ul></li>
|
||||
{{
|
||||
pass
|
||||
pass
|
||||
if filename:
|
||||
}}<li>
|
||||
<span class="filetools controls">
|
||||
{{=editfile('private',file, dict(id="private"))}} {{=deletefile([app,'private',file], dict(id="private",id2="private"))}}
|
||||
</span>
|
||||
<span class="file">
|
||||
{{=peekfile('private',file, dict(id="private"))}}
|
||||
</span>
|
||||
</li>{{
|
||||
pass
|
||||
pass
|
||||
}}
|
||||
{{if not privates:}}<p><strong>{{=T("There are no private files")}}</strong></p>{{else:}}
|
||||
<ul class="unstyled act_edit">
|
||||
{{
|
||||
path=[]
|
||||
for file in privates+['']:
|
||||
items=file.split('/')
|
||||
file_path=items[:-1]
|
||||
filename=items[-1]
|
||||
while path!=file_path:
|
||||
if len(file_path)>=len(path) and all([v==file_path[k] for k,v in enumerate(path)]):
|
||||
path.append(file_path[len(path)])
|
||||
thispath='private__'+'__'.join(path)
|
||||
}}
|
||||
<li class="folder">
|
||||
<a href="javascript:collapse('{{=thispath}}');" class="file">{{=path[-1]}}/</a>
|
||||
<ul id="{{=thispath}}" style="display: none;" class="sublist">{{
|
||||
else:
|
||||
path = path[:-1]
|
||||
}}
|
||||
</ul>
|
||||
</li>
|
||||
{{
|
||||
pass
|
||||
pass
|
||||
if filename:
|
||||
}}
|
||||
<li>
|
||||
<span class="filetools controls">
|
||||
{{=editfile('private',file, dict(id="private"))}} {{=deletefile([app,'private',file], dict(id="private",id2="private"))}}
|
||||
</span>
|
||||
<span class="file">
|
||||
{{=peekfile('private',file, dict(id="private"))}}
|
||||
</span>
|
||||
</li>{{
|
||||
pass
|
||||
pass
|
||||
}}
|
||||
{{pass}}
|
||||
</ul>
|
||||
<div class="controls formfield">{{=file_create_form('%s/private/' % app, 'private')}}
|
||||
{{=file_upload_form('%s/private/' % app, 'private')}}</div>
|
||||
</ul>
|
||||
<div class="controls formfield">
|
||||
<button onclick="jQuery('#form7').slideToggle()" class="btn btn-mini">Create/Upload</button>
|
||||
<div id="form7" class="row-fluid" style="display:none">
|
||||
<div class="span3">{{=file_create_form('%s/private/' % app, 'private')}}<em>{{=T('or alternatively')}}</em></div>
|
||||
<div class="span3">{{=file_upload_form('%s/private/' % app, 'private')}}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<!-- PLUGINS -->
|
||||
|
||||
<h3 id="plugins" onclick="collapse('plugins_inner');" class="component">
|
||||
{{=T("Plugins")}}
|
||||
<span class="tooltip">{{=helpicon()}} <span>{{=T("To create a plugin, name a file/folder plugin_[name]")}}</span></span>
|
||||
<h3 id="_plugins" rel="pagebookmark">
|
||||
<span class="component" onclick="collapse('plugins_inner');">{{=T("Plugins")}}</span>
|
||||
<a href="#plugins" rel="tooltip" data-placement="right" data-original-title="{{=T('To create a plugin, name a file/folder plugin_[name]')}}">
|
||||
{{=helpicon()}}
|
||||
<span>{{=T("To create a plugin, name a file/folder plugin_[name]")}}</span>
|
||||
</a><span id="plugins" class="hashstick"> </span><a href="#" class="tophashlink btn btn-mini btn-warning"><span>top</span></a>
|
||||
</h3>
|
||||
<div id="plugins_inner" class="component_contents">
|
||||
<div class="controls comptools">
|
||||
{{=button(PLUGINS_APP, T('download plugins'))}}
|
||||
</div>
|
||||
<div class="controls">
|
||||
</div>
|
||||
{{if plugins:}}
|
||||
<ul>
|
||||
{{for plugin in plugins:}}
|
||||
{{id="plugins__"+plugin.replace('/','__').replace('.','__')}}
|
||||
<li id="{{=id}}">
|
||||
{{=A('plugin_%s' % plugin, _class='file', _href=URL('plugin', args=[app, plugin], vars=dict(id=id, id2='plugins')))}}
|
||||
</li>
|
||||
{{pass}}
|
||||
</ul>
|
||||
{{else:}}
|
||||
<p><strong>{{=T('There are no plugins')}}</strong></p>
|
||||
{{pass}}
|
||||
<div class="controls formfield">{{=upload_plugin_form(app, 'plugins')}}</div>
|
||||
<div class="controls comptools">
|
||||
{{=button(PLUGINS_APP, T('download plugins'))}}
|
||||
</div>
|
||||
{{if plugins:}}
|
||||
<ul class="unstyled act_edit">
|
||||
{{for plugin in plugins:}}
|
||||
{{id="plugins__"+plugin.replace('/','__').replace('.','__')}}
|
||||
<li id="{{=id}}">
|
||||
{{=A('plugin_%s' % plugin, _class='file', _href=URL('plugin', args=[app, plugin], vars=dict(id=id, id2='plugins')))}}
|
||||
</li>
|
||||
{{pass}}
|
||||
</ul>
|
||||
{{else:}}
|
||||
<p><strong>{{=T('There are no plugins')}}</strong></p>
|
||||
{{pass}}
|
||||
<div class="controls formfield">
|
||||
<button onclick="jQuery('#form8').slideToggle()" class="btn btn-mini">Upload</button>
|
||||
<div id="form8" class="row-fluid" style="display:none">
|
||||
<div class="row-fluid">
|
||||
<div class="span3">{{=upload_plugin_form(app, 'plugins')}}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<script>
|
||||
function filter_files() {
|
||||
if(jQuery('#search').val()){
|
||||
@@ -400,7 +474,7 @@ function filter_files() {
|
||||
files=data['files'];
|
||||
message=data['message'];
|
||||
for(var i=0; i<files.length; i++)
|
||||
jQuery('li#'+files[i].replace(/\//g,'__').replace('.','__')).slideDown();
|
||||
jQuery('li#_'+files[i].replace(/\//g,'__').replace('.','__')).slideDown();
|
||||
jQuery('.flash').html(message).slideDown();
|
||||
});
|
||||
} else {
|
||||
@@ -416,4 +490,4 @@ jQuery(document).ready(function(){
|
||||
jQuery('#search_start').click(function(e){ filter_files(); });
|
||||
});
|
||||
</script>
|
||||
|
||||
<!-- end "design" block -->
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
{{extend 'layout.html'}}
|
||||
|
||||
<!-- begin "edit" block -->
|
||||
{{
|
||||
def shortcut(combo, description):
|
||||
return XML('<li><tt>%s</tt> %s</li>' % (combo, description))
|
||||
return XML('<li><span class="teletype-text">%s</span><span>%s</span></li>' % (combo, description))
|
||||
}}
|
||||
{{if TEXT_EDITOR == 'amy':}}
|
||||
{{include 'default/amy_ajax.html'}}
|
||||
@@ -25,6 +25,13 @@
|
||||
<link rel="stylesheet" href="{{=cm}}/lib/util/dialog.css">
|
||||
<script src="{{=cm}}/emmet.min.js"></script>
|
||||
<script language="Javascript" type="text/javascript" src="{{=URL('static','js/ajax_editor.js')}}"></script>
|
||||
<script language="Javascript" type="text/javascript">
|
||||
jQuery(document).ready(function(){
|
||||
doListBreakpoints({{=XML("'%s','%s://%s%s'" % (filename,
|
||||
request.env['wsgi_url_scheme'], request.env['http_host'],
|
||||
URL(c='debug', f='list_breakpoints')))}});
|
||||
});
|
||||
</script>
|
||||
{{elif TEXT_EDITOR == 'ace':}}
|
||||
<script src="{{=URL(r=request,c='static',f='ace/src/ace.js')}}" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="{{=URL(r=request,c='static',f='ace/src/theme-%s.js' % TEXT_EDITOR_THEME)}}" type="text/javascript" charset="utf-8"></script>
|
||||
@@ -88,7 +95,7 @@ jQuery(document).ready(function(){
|
||||
<h2>{{=T('Editing file "%s"',filename)}}</h2>
|
||||
|
||||
{{if functions:}}
|
||||
<p class="formfield">
|
||||
<p class="formfield well well-small">
|
||||
<span style="text-align:left;" id="exposed">
|
||||
{{=B(T('exposes:'))}} {{=XML(', '.join([A(f,_href=URL(a=app,c=controller,f=f)).xml() for f in functions]))}}
|
||||
</span>
|
||||
@@ -98,15 +105,15 @@ jQuery(document).ready(function(){
|
||||
{{pass}}
|
||||
</p>
|
||||
{{pass}}
|
||||
|
||||
<p class="right controls">
|
||||
<div class='row-fluid'>
|
||||
<p class="right controls pull-right">
|
||||
{{if filetype=='python':}}
|
||||
{{=A(SPAN(T('toggle breakpoint')),
|
||||
_value="breakpoint", _name="breakpoint",
|
||||
_onclick="return doToggleBreakpoint('%s','%s://%s%s');" % (filename,
|
||||
_onclick="return doToggleBreakpoint('%s','%s://%s%s',null);" % (filename,
|
||||
request.env['wsgi_url_scheme'], request.env['http_host'],
|
||||
URL(c='debug', f='toggle_breakpoint')),
|
||||
_class="button special")}}
|
||||
_class="button special btn btn-inverse")}}
|
||||
{{pass}}
|
||||
{{=button(URL('design',args=request.vars.app if request.vars.app else request.args[0], anchor=request.vars.id), T('back'))}}
|
||||
{{if edit_controller:}}
|
||||
@@ -116,20 +123,31 @@ jQuery(document).ready(function(){
|
||||
{{=button(view_link, T('try view'))}}
|
||||
{{pass}}
|
||||
{{if request.args[1]=='models':}}
|
||||
<a class="button" href="http://www.web2py.com/sqldesigner" target="_blank"><span>{{=T('online designer')}}</span></a>
|
||||
<a class="button btn" href="http://www.web2py.com/sqldesigner" target="_blank"><span>{{=T('online designer')}}</span></a>
|
||||
{{pass}}
|
||||
<a class="button" href="http://www.web2py.com/examples/static/epydoc/index.html" target="_blank"><span>{{=T('docs')}}</span></a>
|
||||
<a class="button btn" href="http://www.web2py.com/examples/static/epydoc/index.html" target="_blank"><span>{{=T('docs')}}</span></a>
|
||||
</p>
|
||||
|
||||
</div>
|
||||
<div id="editor_area">
|
||||
<form action="{{=URL('edit',args=filename)}}" method="post" name="editform" id="editform">
|
||||
<a value="save" name="save" onclick="return doClickSave();" class="icon saveicon">
|
||||
{{=IMG(_src=URL('static', 'images/save_icon.png'), _alt=T('Save'))}}
|
||||
</a>
|
||||
{{=T('Saved file hash:')}}
|
||||
<input type="input" name="file_hash" value="{{=file_hash}}" readonly="readonly"/>
|
||||
{{=T('Last saved on:')}} <input type="input" name="saved_on" value="{{=saved_on}}" readonly="readonly"/>
|
||||
<br><hr>
|
||||
<div class="editor-bar-column">
|
||||
<label>{{=T('Save file:')}}</label>
|
||||
<a value="save" name="save" onclick="return doClickSave();" class="icon saveicon" style="background-image: -webkit-linear-gradient(top,white,#E6E6E6);">
|
||||
{{=IMG(_src=URL('static', 'images/save_icon.png'), _alt=T('Save'))}}
|
||||
</a>
|
||||
</div>
|
||||
<div class="editor-bar-column">
|
||||
<div class="row-fluid">
|
||||
<div class="span7">
|
||||
<label>{{=T('Saved file hash:')}}</label>
|
||||
<input type="input" name="file_hash" value="{{=file_hash}}" class="input-long uneditable-input" readonly="readonly"/>
|
||||
</div>
|
||||
<div class="span5">
|
||||
<label>{{=T('Last saved on:')}}</label>
|
||||
<input type="input" name="saved_on" value="{{=saved_on}}" class="input-normal uneditable-input" readonly="readonly"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{if TEXT_EDITOR == 'amy':}}
|
||||
<textarea style="width: auto; height:400px;direction:ltr;" rows="58" cols="100" -amy-enabled="true" id="body" name="data">{{=data}}</textarea>
|
||||
<script>window.eamy = eamy;</script>
|
||||
@@ -191,7 +209,13 @@ jQuery(document).ready(function(){
|
||||
autofocus: true,
|
||||
onCursorActivity: function() {
|
||||
editor.setLineClass(hlLine, null, null);
|
||||
hlLine = editor.setLineClass(editor.getCursor().line, null, "activeline");}
|
||||
hlLine = editor.setLineClass(editor.getCursor().line, null, "activeline");},
|
||||
onGutterClick: function(cm, n) {
|
||||
sel = {start: n, end: n, data: ''};
|
||||
doToggleBreakpoint({{=XML("'%s','%s://%s%s',sel" % (filename,
|
||||
request.env['wsgi_url_scheme'], request.env['http_host'],
|
||||
URL(c='debug', f='toggle_breakpoint')))}});
|
||||
}
|
||||
};
|
||||
var editor = CodeMirror.fromTextArea(
|
||||
document.getElementById("body"),cm_opts);
|
||||
@@ -227,52 +251,59 @@ window.onload = function() {
|
||||
<textarea cols="80" rows="25" id="body" style="direction:ltr;" name="data">{{=data}}</textarea>
|
||||
<script>window.textarea = area.textarea;</script>
|
||||
{{pass}}
|
||||
<button class="editbutton" onclick="window.location.reload(); return false">{{=T('restore')}}</button> {{=T('currently saved or')}} <button class="editbutton" type="submit" name="revert">{{=T('revert')}}</button>
|
||||
{{=T('to previous version.')}}
|
||||
<div class="editor-bar-bottom" style="margin-top:9px;">
|
||||
<button class="editbutton btn" onclick="window.location.reload(); return false">{{=T('restore')}}</button>
|
||||
{{=T('currently saved or')}}
|
||||
<button class="editbutton btn" type="submit" name="revert">{{=T('revert')}}</button>
|
||||
{{=T('to previous version.')}}
|
||||
</div>
|
||||
<br/>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div class="help">
|
||||
{{if TEXT_EDITOR=='edit_area' and filetype=='html':}}
|
||||
<h3>{{=T('Key bindings for ZenCoding Plugin')}}</h3>
|
||||
<ul>
|
||||
{{=shortcut('Ctrl+S', T('Save via Ajax'))}}
|
||||
{{=shortcut('Ctrl+,', T('Expand Abbreviation'))}}
|
||||
{{=shortcut('Ctrl+M', T('Match Pair'))}}
|
||||
{{=shortcut('Ctrl+H', T('Wrap with Abbreviation'))}}
|
||||
{{=shortcut('Shift+Ctrl+M', T('Merge Lines'))}}
|
||||
{{=shortcut('Ctrl+Shift+←', T('Previous Edit Point'))}}
|
||||
{{=shortcut('Ctrl+Shift+→', T('Next Edit Point'))}}
|
||||
{{=shortcut('Ctrl+Shift+↑', T('Go to Matching Pair'))}}
|
||||
</ul>
|
||||
{{elif TEXT_EDITOR == 'codemirror' and filetype=='html':}}
|
||||
<h3>{{=T('Key bindings for ZenCoding Plugin')}}</h3>
|
||||
<ul>
|
||||
{{=shortcut('Ctrl+S', T('Save via Ajax'))}}
|
||||
{{=shortcut('Ctrl+F11', T('Toggle Fullscreen'))}}
|
||||
{{=shortcut('Ctrl-F / Cmd-F', T('Start searching'))}}
|
||||
{{=shortcut('Ctrl-G / Cmd-G', T('Find Next'))}}
|
||||
{{=shortcut('Shift-Ctrl-G / Shift-Cmd-G', T('Find Previous'))}}
|
||||
{{=shortcut('Shift-Ctrl-F / Cmd-Option-F', T('Replace'))}}
|
||||
{{=shortcut('Shift-Ctrl-R / Shift-Cmd-Option-F', T('Replace All'))}}
|
||||
{{=shortcut('Tab', T('Expand Abbreviation'))}}
|
||||
</ul>
|
||||
{{elif TEXT_EDITOR == 'codemirror':}}
|
||||
<h3>{{=T("Key bindings")}}</h3>
|
||||
<ul>
|
||||
{{=shortcut('Ctrl+S', T('Save via Ajax'))}}
|
||||
{{=shortcut('Ctrl+F11', T('Toggle Fullscreen'))}}
|
||||
{{=shortcut('Ctrl-F / Cmd-F', T('Start searching'))}}
|
||||
{{=shortcut('Ctrl-G / Cmd-G', T('Find Next'))}}
|
||||
{{=shortcut('Shift-Ctrl-G / Shift-Cmd-G', T('Find Previous'))}}
|
||||
{{=shortcut('Shift-Ctrl-F / Cmd-Option-F', T('Replace'))}}
|
||||
{{=shortcut('Shift-Ctrl-R / Shift-Cmd-Option-F', T('Replace All'))}}
|
||||
</ul>
|
||||
{{else:}}
|
||||
<h3>{{=T("Key bindings")}}</h3>
|
||||
<ul>
|
||||
{{=shortcut('Ctrl+S', T('Save via Ajax'))}}
|
||||
</ul>
|
||||
{{pass}}
|
||||
<div class="row-fluid">
|
||||
<div class="help span4 alert alert-block alert-info">
|
||||
{{if TEXT_EDITOR=='edit_area' and filetype=='html':}}
|
||||
<h3>{{=T('Key bindings for ZenCoding Plugin')}}</h3>
|
||||
<ul class="keybindings unstyled">
|
||||
{{=shortcut('Ctrl+S', T('Save via Ajax'))}}
|
||||
{{=shortcut('Ctrl+,', T('Expand Abbreviation'))}}
|
||||
{{=shortcut('Ctrl+M', T('Match Pair'))}}
|
||||
{{=shortcut('Ctrl+H', T('Wrap with Abbreviation'))}}
|
||||
{{=shortcut('Shift+Ctrl+M', T('Merge Lines'))}}
|
||||
{{=shortcut('Ctrl+Shift+←', T('Previous Edit Point'))}}
|
||||
{{=shortcut('Ctrl+Shift+→', T('Next Edit Point'))}}
|
||||
{{=shortcut('Ctrl+Shift+↑', T('Go to Matching Pair'))}}
|
||||
</ul>
|
||||
{{elif TEXT_EDITOR == 'codemirror' and filetype=='html':}}
|
||||
<h3>{{=T('Key bindings for ZenCoding Plugin')}}</h3>
|
||||
<ul class="keybindings unstyled">
|
||||
{{=shortcut('Ctrl+S', T('Save via Ajax'))}}
|
||||
{{=shortcut('Ctrl+F11', T('Toggle Fullscreen'))}}
|
||||
{{=shortcut('Ctrl-F / Cmd-F', T('Start searching'))}}
|
||||
{{=shortcut('Ctrl-G / Cmd-G', T('Find Next'))}}
|
||||
{{=shortcut('Shift-Ctrl-G / Shift-Cmd-G', T('Find Previous'))}}
|
||||
{{=shortcut('Shift-Ctrl-F / Cmd-Option-F', T('Replace'))}}
|
||||
{{=shortcut('Shift-Ctrl-R / Shift-Cmd-Option-F', T('Replace All'))}}
|
||||
{{=shortcut('Tab', T('Expand Abbreviation'))}}
|
||||
</ul>
|
||||
{{elif TEXT_EDITOR == 'codemirror':}}
|
||||
<h3>{{=T("Key bindings")}}</h3>
|
||||
<ul class="keybindings unstyled">
|
||||
{{=shortcut('Ctrl+S', T('Save via Ajax'))}}
|
||||
{{=shortcut('Ctrl+F11', T('Toggle Fullscreen'))}}
|
||||
{{=shortcut('Ctrl-F / Cmd-F', T('Start searching'))}}
|
||||
{{=shortcut('Ctrl-G / Cmd-G', T('Find Next'))}}
|
||||
{{=shortcut('Shift-Ctrl-G / Shift-Cmd-G', T('Find Previous'))}}
|
||||
{{=shortcut('Shift-Ctrl-F / Cmd-Option-F', T('Replace'))}}
|
||||
{{=shortcut('Shift-Ctrl-R / Shift-Cmd-Option-F', T('Replace All'))}}
|
||||
</ul>
|
||||
{{else:}}
|
||||
<h3>{{=T("Key bindings")}}</h3>
|
||||
<ul class="keybindings unstyled">
|
||||
{{=shortcut('Ctrl+S', T('Save via Ajax'))}}
|
||||
</ul>
|
||||
{{pass}}
|
||||
</div>
|
||||
</div>
|
||||
<!-- end "edit" block -->
|
||||
|
||||
@@ -7,18 +7,20 @@ function delkey(id) {
|
||||
return false;
|
||||
}
|
||||
function hideShowTranslated(){
|
||||
jQuery(".translated").closest("p").toggle();
|
||||
jQuery(".translated").closest("div.row-fluid").toggle();
|
||||
}
|
||||
</script>
|
||||
|
||||
{{block sectionclass}}edit_language{{end}}
|
||||
|
||||
<!-- begin "edit_language" block -->
|
||||
<h2>{{=T('Editing Language file')}} "{{=filename}}"</h2>
|
||||
<a class="button" href="#" onclick="hideShowTranslated(this);">
|
||||
<div class="controls">
|
||||
<a class="button btn" href="#" onclick="hideShowTranslated(this);">
|
||||
<span>{{=T('Hide/Show Translated strings')}}</span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="languageform">
|
||||
{{=form}}
|
||||
</div>
|
||||
|
||||
|
||||
<button class="btn" style="position:fixed; right:10px; bottom: 10px;" onclick="jQuery('form input[type=submit]').click()">Save Changes</button>
|
||||
<!-- end "edit_language" block -->
|
||||
|
||||
@@ -6,11 +6,10 @@ function delkey(id) {
|
||||
return false;
|
||||
}
|
||||
</script>
|
||||
|
||||
{{block sectionclass}}edit_language{{end}}
|
||||
|
||||
<!-- begin "edit_language(plurals)" block -->
|
||||
<h2>{{=T("Editing Plural Forms File")}} "{{=filename}}"</h2>
|
||||
<div class="pluralsform">
|
||||
{{=form}}
|
||||
</div>
|
||||
|
||||
<!-- end "edit_language(plurals)" block -->
|
||||
@@ -1,142 +1,124 @@
|
||||
{{extend 'layout.html'}}
|
||||
{{import os, stat, time}}
|
||||
|
||||
{{block sectionclass}}errors{{end}}
|
||||
|
||||
<style>
|
||||
table.sortable {
|
||||
border-spacing:0px;
|
||||
}
|
||||
table.sortable td, table.sortable th {
|
||||
padding: 2px 5px 2px 5px;
|
||||
}
|
||||
table.sortable thead {
|
||||
background-color:#eee;
|
||||
color:#666666;
|
||||
font-weight: bold;
|
||||
cursor: default;
|
||||
}
|
||||
tr.error_ticket:hover {
|
||||
background-color: #eee;
|
||||
}
|
||||
.controls a.button.unavailable {
|
||||
color: #ff0000;
|
||||
}
|
||||
</style>
|
||||
|
||||
<script language="JavaScript">
|
||||
function check(){
|
||||
for (var i = 0; i < document.myform.elements.length; i++) {
|
||||
var e = document.myform.elements[i];
|
||||
if (e.type == 'checkbox') e.checked = true;
|
||||
}
|
||||
}
|
||||
function uncheck(){
|
||||
for (var i = 0; i < document.myform.elements.length; i++) {
|
||||
var e = document.myform.elements[i];
|
||||
if (e.type == 'checkbox') e.checked = false;
|
||||
}
|
||||
}
|
||||
jQuery(document).ready(function() { jQuery('.traceback').hide(); });
|
||||
</script>
|
||||
<!-- begin "errors" block -->
|
||||
{{if db_ready['status'] == False:
|
||||
switchbutton = A(SPAN("switch to : db"), _href=db_ready['errlink'], _class="button unavailable", _title="%s" % (db_ready['errmessage']))
|
||||
switchbutton = A(SPAN("switch to : db"), _href=db_ready['errlink'], _class="button unavailable btn btn-danger", _title="%s" % (db_ready['errmessage']))
|
||||
else:
|
||||
switchbutton = A(SPAN("switch to : db"), _href=URL(args=[app, 'dbnew']), _class="button")
|
||||
switchbutton = A(SPAN("switch to : db"), _href=URL(args=[app, 'dbnew']), _class="button btn")
|
||||
pass}}
|
||||
|
||||
<h2>{{=T('Error logs for "%(app)s"',dict(app=app))}}</h2>
|
||||
|
||||
<div class="errorform">
|
||||
<form name="myform" method="post">
|
||||
<input name="CheckAll" value="{{=T('check all')}}"
|
||||
onclick="check()" type="button">
|
||||
<input name="CheckAll" value="{{=T('uncheck all')}}"
|
||||
onclick="uncheck()" type="button">
|
||||
<input value="{{=T('delete all checked')}}" type="submit"><br><br>
|
||||
|
||||
{{ if 'new' in method: }}
|
||||
{{base_url = 'db' in method and 'ticketdb' or 'ticket' }}
|
||||
<h3>{{=T('Click row to expand traceback')}}</h3>
|
||||
<p class="controls">
|
||||
{{if 'db' in method:}}
|
||||
source : db
|
||||
<a class="button" href="{{=URL(args=[app, 'new'])}}"><span>switch to : filesystem</span></a>
|
||||
<a class="button" href="{{=URL(args=[app, 'dbold'])}}"><span>lists by ticket</span></a>
|
||||
{{else:}}
|
||||
source : filesystem
|
||||
{{=switchbutton}}
|
||||
<a class="button" href="{{=URL(args=[app, 'old'])}}"><span>lists by ticket</span></a>
|
||||
{{pass}}
|
||||
</p>
|
||||
<table id="trck_errors" class="sortable">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{{=T("Delete")}}</th>
|
||||
<th>{{=T("Count")}}</th>
|
||||
<th>{{=T("File")}}</th>
|
||||
<th>{{=T("Error")}}</th>
|
||||
<th></th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{{for e in errors:}}
|
||||
<tr class="error_ticket">
|
||||
<td><input type="checkbox" name="delete_{{=e['hash']}}" /></td>
|
||||
<td>{{=e['count']}}</td>
|
||||
<td>{{=e['causer']}}</td>
|
||||
<td>{{=A(e['last_line'],_href="#",_onclick="collapse('%s');"%e['hash'])}}</td>
|
||||
<td>+</td>
|
||||
<td>{{=A(T('details'),_href=URL(base_url,args=[app,e['ticket']]))}}</td>
|
||||
</tr>
|
||||
<tr id="{{=e['hash']}}" class="traceback">
|
||||
<td colspan="6">
|
||||
<div>
|
||||
{{=CODE(e['pickel']['traceback'])}}
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
{{pass}}
|
||||
</tbody>
|
||||
</table>
|
||||
{{ else: }}
|
||||
<h3>{{=T('Click row to view a ticket')}}</h3>
|
||||
<p class="controls">
|
||||
{{if 'db' in method:}}
|
||||
source : db
|
||||
<a class="button" href="{{=URL(args=[app, 'old'])}}"><span>switch to : filesystem</span></a>
|
||||
<a class="button" href="{{=URL(args=[app, 'dbnew'])}}"><span>lists by exception</span></a>
|
||||
{{else:}}
|
||||
source : filesystem
|
||||
{{=switchbutton}}
|
||||
<a class="button" href="{{=URL(args=[app, 'new'])}}"><span>lists by exception</span></a>
|
||||
{{pass}}
|
||||
</p>
|
||||
<table class="sortable">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{{=T("Delete")}}</th>
|
||||
<th>{{=T("Ticket")}}</th>
|
||||
<th>{{=T("Date and Time")}}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{{for ticket in tickets:}}
|
||||
<tr>
|
||||
<td><input type="checkbox" name="delete_{{=ticket}}"/></td>
|
||||
{{if 'db' in method:}}
|
||||
<td><a href="{{=URL('ticketdb',args=[app,ticket])}}">{{=ticket}}</a></td>
|
||||
<td>{{=time.strftime('%Y-%m-%d %H:%M:%S',times[ticket].timetuple())}}</td>
|
||||
{{else:}}
|
||||
<td><a href="{{=URL('ticket',args=[app,ticket])}}">{{=ticket}}</a></td>
|
||||
<td>{{=time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(os.stat(os.path.join(request.folder,'../%s/errors/%s' % (app,ticket)))[stat.ST_CTIME]))}}</td>
|
||||
{{pass}}
|
||||
</tr>
|
||||
{{pass}}
|
||||
</tbody>
|
||||
</table>
|
||||
{{ pass }}
|
||||
</form>
|
||||
<form name="myform" method="post">
|
||||
{{ if 'new' in method: }}
|
||||
{{base_url = 'db' in method and 'ticketdb' or 'ticket' }}
|
||||
<p class="controls row-fluid">
|
||||
<div class="controls controls-row">
|
||||
{{if 'db' in method:}}
|
||||
<span class="uneditable-input">source : db</span>
|
||||
<a class="button btn" href="{{=URL(args=[app, 'new'])}}"><span>switch to : filesystem</span></a>
|
||||
<a class="button btn" href="{{=URL(args=[app, 'dbold'])}}"><span>lists by ticket</span></a>
|
||||
{{else:}}
|
||||
<span class="uneditable-input">source : filesystem</span>
|
||||
{{=switchbutton}}
|
||||
<a class="button btn" href="{{=URL(args=[app, 'old'])}}"><span>lists by ticket</span></a>
|
||||
{{pass}}
|
||||
</div>
|
||||
</p>
|
||||
<div class="tablebar">
|
||||
<input value="{{=T('delete all checked')}}" type="submit" class="btn"/>
|
||||
<span class="help label label-info">{{=T('Click row to expand traceback')}}</span>
|
||||
</div>
|
||||
<div class="row-fluid">
|
||||
<div class="span6">
|
||||
<table id="trck_errors" class="sortable table table-hover table-condensed">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="column1 cbcentered"><input type="checkbox" name="delete_all}" /></th>
|
||||
<th class="column2">{{=T("Count")}}</th>
|
||||
<th class="column3">{{=T("File")}}</th>
|
||||
<th>{{=T("Error")}}</th>
|
||||
<th class="columnN"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{{for e in errors:}}
|
||||
<tr class="error_ticket">
|
||||
<td class="cbcentered"><input type="checkbox" name="delete_{{=e['hash']}}" /></td>
|
||||
<td>{{=e['count']}}</td>
|
||||
<td>{{=e['causer']}}</td>
|
||||
<td>{{=A(e['last_line'],_href="#",_onclick="collapse('%s');return false;"%e['hash'])}}</td>
|
||||
<td>+ {{=A(T('details'),_href=URL(base_url,args=[app,e['ticket']]))}}</td>
|
||||
</tr>
|
||||
<tr id="{{=e['hash']}}" class="traceback">
|
||||
<td colspan="5">
|
||||
<div class="ticket_code">
|
||||
{{=CODE(e['pickel']['traceback'])}}
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
{{pass}}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
{{ else: }}
|
||||
<p class="controls row-fluid">
|
||||
<div class="controls controls-row">
|
||||
{{if 'db' in method:}}
|
||||
<span class="uneditable-input">source : db</span>
|
||||
<a class="button btn" href="{{=URL(args=[app, 'old'])}}"><span>switch to : filesystem</span></a>
|
||||
<a class="button btn" href="{{=URL(args=[app, 'dbnew'])}}"><span>lists by exception</span></a>
|
||||
{{else:}}
|
||||
<span class="uneditable-input">source : filesystem</span>
|
||||
{{=switchbutton}}
|
||||
<a class="button btn" href="{{=URL(args=[app, 'new'])}}"><span>lists by exception</span></a>
|
||||
{{pass}}
|
||||
</div>
|
||||
</p>
|
||||
<div class="tablebar">
|
||||
<input value="{{=T('delete all checked')}}" type="submit" class="btn"/>
|
||||
<span class="help label label-info">{{=T('Click row to expand traceback')}}</span>
|
||||
</div>
|
||||
<div class="row-fluid">
|
||||
<div class="span6">
|
||||
<table id="trck_errors" class="sortable table table-hover table-condensed">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="column1 cbcentered"><input type="checkbox" name="delete_all}" /></th>
|
||||
<th>{{=T("Ticket")}}</th>
|
||||
<th class="columnN1">{{=T("Date and Time")}}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{{for ticket in tickets:}}
|
||||
<tr>
|
||||
<td class="cbcentered"><input type="checkbox" name="delete_{{=ticket}}"/></td>
|
||||
{{if 'db' in method:}}
|
||||
<td><a href="{{=URL('ticketdb',args=[app,ticket])}}">{{=ticket}}</a></td>
|
||||
<td>{{=time.strftime('%Y-%m-%d %H:%M:%S',times[ticket].timetuple())}}</td>
|
||||
{{else:}}
|
||||
<td><a href="{{=URL('ticket',args=[app,ticket])}}">{{=ticket}}</a></td>
|
||||
<td>{{=time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(os.stat(os.path.join(request.folder,'../%s/errors/%s' % (app,ticket)))[stat.ST_CTIME]))}}</td>
|
||||
{{pass}}
|
||||
</tr>
|
||||
{{pass}}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
{{ pass }}
|
||||
</form><!-- /errorform -->
|
||||
</div>
|
||||
|
||||
<script type="text/javascript">
|
||||
jQuery(document).ready(function() {
|
||||
jQuery('.traceback').hide();
|
||||
jQuery("#trck_errors thead tr th:first input[type=checkbox]").click(function() {
|
||||
var checkedStatus = this.checked;
|
||||
jQuery("#trck_errors tbody tr td:first-child input[type=checkbox]").each(function() {
|
||||
this.checked = checkedStatus;
|
||||
});
|
||||
});
|
||||
});
|
||||
</script>
|
||||
<!-- end "errors" block -->
|
||||
@@ -1,5 +1,15 @@
|
||||
{{extend 'layout.html'}}
|
||||
|
||||
{{
|
||||
dlg = dialog
|
||||
smt_button = dlg.element(_type="submit")
|
||||
smt_button['_class'] = 'btn'
|
||||
smt_button['_style'] = 'margin-right:4px;'
|
||||
ccl_button = dlg.element(_type="button")
|
||||
ccl_button['_class'] = 'btn'
|
||||
}}
|
||||
<!-- begin "git_pull" block -->
|
||||
<div class="center">
|
||||
<h2>{{=T('This will pull changes from the remote repo for application "%s"?', app)}}</h2>
|
||||
{{=dialog}}
|
||||
</div>
|
||||
<!-- end "git_pull" block -->
|
||||
@@ -1,6 +1,15 @@
|
||||
{{extend 'layout.html'}}
|
||||
|
||||
{{
|
||||
frm = form
|
||||
smt_button = frm.element(_type="submit")
|
||||
smt_button['_class'] = 'btn'
|
||||
smt_button['_style'] = 'margin-right:4px;'
|
||||
ccl_button = frm.element(_type="button")
|
||||
ccl_button['_class'] = 'btn'
|
||||
}}
|
||||
<!-- begin "git_push" block -->
|
||||
<h2>{{=T('This will push changes to the remote repo for application "%s".', app)}}</h2>
|
||||
<center>
|
||||
{{=form}}
|
||||
</center>
|
||||
<!-- end "git_push" block -->
|
||||
@@ -1,26 +1,23 @@
|
||||
{{extend 'layout.html'}}
|
||||
<script type="text/javascript">
|
||||
jQuery(function() {
|
||||
jQuery("#password").focus();
|
||||
});
|
||||
</script>
|
||||
|
||||
{{block sectionclass}}login{{end}}
|
||||
|
||||
<!-- begin "index" block -->
|
||||
<h2>web2py™ {{=T('Web Framework')}}</h2>
|
||||
<h3>{{=T('Login to the Administrative Interface')}}</h3>
|
||||
<div class="form row-fluid">
|
||||
{{if request.is_https or request.is_local:}}
|
||||
<div class="form">
|
||||
<form action="{{=URL(r=request)}}" method="post">
|
||||
<div><input type="hidden" name="send" value="{{=send}}"/></div>
|
||||
<table>
|
||||
<tr><td>{{=T('Administrator Password:')}}</td><td><input type="password" name="password" id="password"/></td></tr>
|
||||
<tr><td></td><td><input type="submit" name="login" value="{{=T('Login')}}"/></td></tr>
|
||||
</table>
|
||||
</form>
|
||||
</div>
|
||||
<form action="{{=URL(r=request)}}" method="post" class="span4 well">
|
||||
<label for="password">{{=T('Administrator Password:')}}</label>
|
||||
<input type="password" name="password" id="password"/>
|
||||
<input type="hidden" name="send" value="{{=send}}"/>
|
||||
<div class="controls"><button type="submit" name="login" class="btn">{{=T('Login')}}</button></div>
|
||||
</form>
|
||||
{{else:}}
|
||||
<p class="help">{{=T('ATTENTION: Login requires a secure (HTTPS) connection or running on localhost.')}}</p>
|
||||
<p class="help span7 alert alert-block alert-warning">{{=T('ATTENTION: Login requires a secure (HTTPS) connection or running on localhost.')}}</p>
|
||||
{{pass}}
|
||||
|
||||
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
jQuery(document).ready(function(){
|
||||
jQuery("#password").focus();
|
||||
});
|
||||
</script>
|
||||
<!-- end "index" block -->
|
||||
@@ -1,5 +1,163 @@
|
||||
{{extend 'layout.html'}}
|
||||
{{
|
||||
#grid['_class'] = 'web2py_grid'
|
||||
if not request.args:
|
||||
add_btn = grid.elements('div.web2py_console a.w2p_trap',replace=None)[0]
|
||||
add_btn['_id'] = 'w2p_grid_addbtn'
|
||||
add_btn['_class'] = 'w2p_trap btn'
|
||||
qry_pnl_rows = grid.elements('div',_class="w2p_query_row hidden")
|
||||
for qry_pnl_row in qry_pnl_rows:
|
||||
qry_pnl_btn1 = qry_pnl_row.elements('input',_value="New",replace=None)[0]
|
||||
qry_pnl_btn2 = qry_pnl_row.elements('input',_value="And",replace=None)[0]
|
||||
qry_pnl_btn3 = qry_pnl_row.elements('input',_value="Or",replace=None)[0]
|
||||
qry_pnl_btngrp = qry_pnl_row.elements('input',_value="Close",replace=lambda me:DIV(qry_pnl_btn1,qry_pnl_btn2,qry_pnl_btn3,me,_class="qry_pnl_btns"))
|
||||
pass
|
||||
qry_pnl = grid.elements('div#w2p_query_panel',replace=None)
|
||||
csl_frm = grid.elements('div.web2py_console form')[0]
|
||||
csl_frm['_class'] = 'form-inline'
|
||||
csl_frm_search = grid.elements('#web2py_keywords',replace=lambda me:DIV(me,TAG['button'](T('Search'),_class='btn',_type='submit'),TAG['button'](T('Clear'),_class='btn',_type='button',_onclick='jQuery("#web2py_keywords").val("");'),_class="input-append"))
|
||||
csl_frm_search_btn1 = grid.elements('input',_value="Search",replace=None)
|
||||
csl_frm_search_btn2 = grid.elements('input',_value="Clear",replace=None)
|
||||
new_console = grid.elements('div.web2py_console form',replace=lambda frm_csl:DIV(SPAN(add_btn,_class='span1'),SPAN(DIV(frm_csl,qry_pnl[0],_id='w2p_search-form'),_class='span5'),_class='row-fluid'))
|
||||
w2p_grid_tbl = grid.element('table')
|
||||
if w2p_grid_tbl:
|
||||
w2p_grid_tbl['_class'] = 'table table-condensed table-hover table-bordered'
|
||||
tbl_button_rows = grid.elements('td',_class="row_buttons")
|
||||
for tbl_button_row in tbl_button_rows:
|
||||
buttons = tbl_button_row.elements('a.w2p_trap')
|
||||
for button in buttons:
|
||||
button['_class'] = 'w2p_trap btn'
|
||||
pass
|
||||
pass
|
||||
export_menu = grid.element('div.w2p_export_menu')
|
||||
export_menu_links = export_menu.elements('a')
|
||||
export_menu_items = []
|
||||
for link in export_menu_links:
|
||||
item = LI(link)
|
||||
export_menu_items.append(item)
|
||||
pass
|
||||
new_export_menu = DIV(A(T('Exports:'),SPAN(_class='caret'),_href='#',_class='btn dropdown-toggle',**{'_data-toggle':"dropdown"}),UL(*export_menu_items,_class='dropdown-menu'),_class='w2p_export_menu btn-group pull-left')
|
||||
grid_pagination = grid.element('div.web2py_paginator')
|
||||
if grid_pagination:
|
||||
export_menu = grid.element('div.w2p_export_menu',replace=None)
|
||||
new_grid_pagination = grid.element('div.web2py_paginator',replace=lambda me:DIV(new_export_menu,me,_class='w2p_grid_bottom_bar'))
|
||||
grid_pagination['_class'] = 'web2py_paginator pagination pagination-right'
|
||||
grid_page_active = grid.element('li.current')
|
||||
grid_page_active['_class'] = 'current active'
|
||||
else:
|
||||
new_grid_pagination = grid.element('div.w2p_export_menu',replace=DIV(new_export_menu))
|
||||
pass
|
||||
records_counter = grid.element('div.web2py_counter')
|
||||
records_found = int(records_counter[0].partition('records')[0].strip())
|
||||
paginate = 5 # TODO: get it from the controller
|
||||
pages = records_found/paginate
|
||||
tot_pages = pages if records_found%paginate == 0 else pages+1
|
||||
current_page = int(request.vars.page) if request.vars.page else 1
|
||||
end_record = paginate*current_page if current_page < tot_pages else records_found
|
||||
begin_record = 1 if current_page == 1 else (paginate*(current_page-1))+1
|
||||
rec = "records" if records_found>1 else "record"
|
||||
record_shown_in_the_page = T("Showing %s to %s of %s %s found")%(begin_record,end_record,records_found,rec)
|
||||
new_record_counter = grid.element('div.web2py_counter',replace=DIV(record_shown_in_the_page,_class="web2py_counter span6 pull-right"))
|
||||
pass
|
||||
elif request.args(0)=='new':
|
||||
bck_btn = grid.element('div.web2py_grid span.leftarrow').parent
|
||||
bck_btn['_id'] = 'w2p_grid_bckbtn'
|
||||
bck_btn['_class'] = 'w2p_trap btn'
|
||||
frm = grid.element('div.web2py_grid form')
|
||||
frm['_class'] = 'web2py_form span4 well well-small'
|
||||
|
||||
checkbox_lbl = frm.element('label',_for='auth_user_is_manager')
|
||||
checkbox_inp = frm.element(_name='is_manager',replace=CAT())
|
||||
checkbox_lbl[0] = checkbox_inp
|
||||
checkbox_lbl[1] = 'Is Manager'
|
||||
checkbox_lbl['_class'] = "checkbox"
|
||||
|
||||
inp_smt = frm.element('input',_type='submit',replace=TAG['button'](T('Submit'),_type='submit',_class='btn'))
|
||||
|
||||
new_form_flds = []
|
||||
frm_trs = frm.elements('tr')
|
||||
for tr in frm_trs:
|
||||
label = tr[0][0]
|
||||
input = tr[1][0]
|
||||
help = tr[2][0]
|
||||
new_form_flds.append(label)
|
||||
new_form_flds.append(input)
|
||||
new_form_flds.append(help)
|
||||
pass
|
||||
new_frm_content = frm.element('table',replace=CAT(*new_form_flds))
|
||||
new_frm = grid.element('div.web2py_grid form',replace=lambda me:DIV(me,_class='row-fluid'))
|
||||
elif request.args(0)=='view':
|
||||
bck_btn = grid.element('div.web2py_grid span.leftarrow').parent
|
||||
bck_btn['_id'] = 'w2p_grid_bckbtn'
|
||||
bck_btn['_class'] = 'w2p_trap btn'
|
||||
pen_btn = grid.element('div.web2py_grid span.pen').parent
|
||||
pen_btn['_id'] = 'w2p_grid_penbtn'
|
||||
pen_btn['_class'] = 'w2p_trap btn'
|
||||
frm = grid.element('div.web2py_grid form')
|
||||
frm['_class'] = 'web2py_form span4 well well-small'
|
||||
|
||||
checkbox_lbl = frm.element('label',_for='auth_user_is_manager')
|
||||
checkbox_inp = frm.element(_name='is_manager',replace=CAT())
|
||||
checkbox_lbl[0] = checkbox_inp
|
||||
checkbox_lbl[1] = 'Is Manager'
|
||||
checkbox_lbl['_class'] = "checkbox"
|
||||
|
||||
new_form_flds = []
|
||||
frm_trs = frm.elements('tr')
|
||||
for tr in frm_trs:
|
||||
label = tr[0][0]
|
||||
input = tr[1][0]
|
||||
help = tr[2][0]
|
||||
new_form_flds.append(label)
|
||||
if len(input) > 0 :
|
||||
new_form_flds.append(SPAN(input,_class='uneditable-input'))
|
||||
pass
|
||||
new_form_flds.append(help)
|
||||
pass
|
||||
new_frm_content = frm.element('table',replace=CAT(*new_form_flds))
|
||||
new_frm = grid.element('div.web2py_grid form',replace=lambda me:DIV(me,_class='row-fluid'))
|
||||
elif request.args(0)=='edit':
|
||||
bck_btn = grid.element('div.web2py_grid span.leftarrow').parent
|
||||
bck_btn['_id'] = 'w2p_grid_bckbtn'
|
||||
bck_btn['_class'] = 'w2p_trap btn'
|
||||
viw_btn = grid.element('div.web2py_grid span.magnifier').parent
|
||||
viw_btn['_id'] = 'w2p_grid_viwbtn'
|
||||
viw_btn['_class'] = 'w2p_trap btn'
|
||||
frm = grid.element('div.web2py_grid form')
|
||||
frm['_class'] = 'web2py_form span4 well well-small'
|
||||
|
||||
checkbox_lbl = frm.element('label',_for='auth_user_is_manager')
|
||||
checkbox_inp = frm.element(_name='is_manager',replace=CAT())
|
||||
checkbox_lbl[0] = checkbox_inp
|
||||
checkbox_lbl[1] = 'Is Manager'
|
||||
checkbox_lbl['_class'] = "checkbox"
|
||||
|
||||
checkbox1_lbl = frm.element('label',_for='delete_record')
|
||||
checkbox1_inp = frm.element(_id='delete_record',replace=CAT())
|
||||
checkbox1_lbl[0] = checkbox1_inp
|
||||
checkbox1_lbl[1] = T('Check to delete')
|
||||
checkbox1_lbl['_class'] = "checkbox"
|
||||
|
||||
inp_smt = frm.element('input',_type='submit',replace=TAG['button'](T('Submit'),_type='submit',_class='btn'))
|
||||
|
||||
id_input = frm.element(_id='auth_user_id')
|
||||
id_input['_class'] = 'uneditable-input'
|
||||
|
||||
new_form_flds = []
|
||||
frm_trs = frm.elements('tr')
|
||||
for tr in frm_trs:
|
||||
label = tr[0][0]
|
||||
input = tr[1][0]
|
||||
help = tr[2][0]
|
||||
new_form_flds.append(label)
|
||||
print label
|
||||
new_form_flds.append(input)
|
||||
new_form_flds.append(help)
|
||||
pass
|
||||
new_frm_content = frm.element('table',replace=CAT(*new_form_flds))
|
||||
new_frm = grid.element('div.web2py_grid form',replace=lambda me:DIV(me,_class='row-fluid'))
|
||||
pass
|
||||
}}
|
||||
|
||||
<h1>{{=T('Manage Admin Users/Students')}}</h1>
|
||||
|
||||
{{=grid}}
|
||||
<h2>{{=T('Manage Admin Users/Students')}}</h2>
|
||||
{{=grid}}
|
||||
@@ -1,17 +1,16 @@
|
||||
{{extend 'layout.html'}}
|
||||
|
||||
{{block sectionclass}}peek{{end}}
|
||||
|
||||
<!-- begin "peek" block -->
|
||||
<h2>{{=T("Peeking at file")}} "{{=filename}}"</h2>
|
||||
|
||||
<p class="controls">
|
||||
{{=button(URL('design',args=request.vars.app if request.vars.app else request.args[0], anchor=request.vars.id), T('back'))}}
|
||||
{{=button(URL('edit',args=request.args, vars=request.vars), T('Edit'))}}
|
||||
</p>
|
||||
|
||||
<div class="code-wrapper">
|
||||
{{
|
||||
if filename[-3:]=='.py': language='python'
|
||||
else: language='html'
|
||||
}}
|
||||
{{=CODE(data,language=language,link='/examples/global/vars/')}}
|
||||
|
||||
</div>
|
||||
<!-- end "peek" block -->
|
||||
@@ -6,11 +6,17 @@ def all(items):
|
||||
def peekfile(path,file):
|
||||
return A(file.replace('\\\\','/'),_href=URL('peek', args=(app, path, file)))
|
||||
def editfile(path,file):
|
||||
return A(SPAN(T('Edit')),_class='button editbutton',_href=URL('edit', args=(app, path, file)))
|
||||
return A(SPAN(T('Edit')),_class='button editbutton btn btn-mini',_href=URL('edit', args=(app, path, file)))
|
||||
def testfile(path,file):
|
||||
return A(TAG[''](IMG(_src=URL('static', 'images/test_icon.png'), _alt=T('test')), SPAN(T("Run tests in this file"))), _class='icon test tooltip',_href=URL('test', args=(app, file)))
|
||||
return A(TAG[''](IMG(_src=URL('static', 'images/test_icon.png'), _alt=T('test')),
|
||||
SPAN(T("Run tests in this file"))),
|
||||
_class='icon test',
|
||||
_href=URL('test', args=(app, file)),
|
||||
_rel="tooltip",
|
||||
**{'_data-placement':'right',
|
||||
'_data-original-title':T("Run tests in this file")})
|
||||
def editlanguagefile(path,file):
|
||||
return A(SPAN(T('Edit')),_class='button editbutton',_href=URL('edit_language', args=(app, path, file)))
|
||||
return A(SPAN(T('Edit')),_class='button editbutton btn-mini',_href=URL('edit_language', args=(app, path, file)))
|
||||
def file_upload_form(location):
|
||||
form=FORM(T("upload file:")," ",
|
||||
INPUT(_type="file",_name="file")," ",T("and rename it:")," ",
|
||||
@@ -29,57 +35,62 @@ def file_create_form(location):
|
||||
INPUT(_type="submit",_value=T("submit")),_action=URL('create_file'))
|
||||
return form
|
||||
def deletefile(arglist):
|
||||
return A(TAG[''](IMG(_src=URL('static', 'images/delete_icon.png')), SPAN(T('Delete this file (you will be asked to confirm deletion)'))), _class='icon delete tooltip', _href=URL('delete',args=arglist,vars=dict(sender=request.function+'/'+app+'/'+request.args[1])))
|
||||
return A(TAG[''](IMG(_src=URL('static', 'images/delete_icon.png')),
|
||||
SPAN(T('Delete this file (you will be asked to confirm deletion)'))),
|
||||
_href=URL('delete',args=arglist,vars=dict(sender=request.function+'/'+app+'/'+request.args[1])),
|
||||
_class='icon delete',
|
||||
_rel="tooltip",
|
||||
**{'_data-placement':'right',
|
||||
'_data-original-title':T('Delete this file (you will be asked to confirm deletion)')})
|
||||
}}
|
||||
|
||||
{{block sectionclass}}plugin{{end}}
|
||||
<!-- begin "plugin" block -->
|
||||
<h2>{{=T('Plugin "%s" in application', request.args(1))}} "{{=app}}"</h2>
|
||||
|
||||
<h2>
|
||||
{{=T('Plugin "%s" in application', request.args(1))}} "{{=app}}"
|
||||
</h2>
|
||||
<!-- COLLAPSE/JUMP-TO BUTTONS -->
|
||||
<div class="right-full controls">
|
||||
<a class="button special" href="#" onclick="jQuery('h3').click();return false"><span>{{=T("collapse/expand all")}}</span></a>
|
||||
<span class="buttongroup">
|
||||
{{=button("#models", T("models"))}}
|
||||
{{=button("#controllers", T("controllers"))}}
|
||||
{{=button("#views", T("views"))}}
|
||||
{{=button("#static", T("static"))}}
|
||||
{{=button("#modules", T("modules"))}}
|
||||
</span>
|
||||
<span class="buttongroup">
|
||||
{{=sp_button(URL('design',args=request.args, anchor=request.vars.id), T("back"))}}
|
||||
{{=sp_button(URL('delete_plugin',args=request.args, vars=request.vars), T("delete plugin"))}}
|
||||
{{=sp_button(URL('pack_plugin',args=request.args), T("pack plugin"))}}
|
||||
</span>
|
||||
<p class="buttons-row">
|
||||
<a class="button special btn btn-inverse" href="#" onclick="jQuery('h3>span').click();return false"><span>{{=T("collapse/expand all")}}</span></a>
|
||||
<span class="buttongroup">
|
||||
{{=button('#models', T("models"))}}
|
||||
{{=button('#controllers', T("controllers"))}}
|
||||
{{=button('#views', T("views"))}}
|
||||
{{=button('#static', T("static"))}}
|
||||
{{=button('#modules', T("modules"))}}
|
||||
</span>
|
||||
<span class="buttongroup">
|
||||
{{=sp_button(URL('design',args=request.args, anchor=request.vars.id), T("back"))}}
|
||||
{{=sp_button(URL('delete_plugin',args=request.args, vars=request.vars), T("delete plugin"))}}
|
||||
{{=sp_button(URL('pack_plugin',args=request.args), T("pack plugin"))}}
|
||||
</span>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<!-- MODELS -->
|
||||
|
||||
<h3 id="models" onclick="collapse('models_inner');" class="component">
|
||||
{{=T("Models")}}
|
||||
<h3 id="_models" rel="pagebookmark">
|
||||
<span class="component" onclick="collapse('models_inner');">{{=T("Models")}}</span>
|
||||
<span id="models" class="hashstick"> </span><a href="#" class="tophashlink btn btn-mini btn-warning"><span>top</span></a>
|
||||
</h3>
|
||||
<div id="models_inner" class="component_contents">
|
||||
{{if not models:}}
|
||||
<p><strong>{{=T("There are no models")}}</strong></p>
|
||||
{{pass}}
|
||||
<div class="controls comptools">
|
||||
</div>
|
||||
<ul>
|
||||
{{for m in models:}}
|
||||
<li>
|
||||
<span class="filetools controls">
|
||||
{{=editfile('models',m)}}
|
||||
{{=deletefile([app, 'models', m])}}
|
||||
</span>
|
||||
<span class="file">
|
||||
{{=peekfile('models',m)}}
|
||||
</span>
|
||||
<span class="extras">
|
||||
{{if len(defines[m]):}}{{=T("defines tables")}} {{pass}}{{=XML(', '.join([B(table).xml() for table in defines[m]]))}}
|
||||
</span>
|
||||
</li>
|
||||
{{pass}}
|
||||
</ul>
|
||||
{{if not models:}}<p><strong>{{=T("There are no models")}}</strong></p>{{else:}}
|
||||
<ul class="unstyled act-edit">
|
||||
{{for m in models:}}
|
||||
<li>
|
||||
<span class="filetools controls">
|
||||
{{=editfile('models',m)}}
|
||||
{{=deletefile([app, 'models', m])}}
|
||||
</span>
|
||||
<span class="file">
|
||||
{{=peekfile('models',m)}}
|
||||
</span>
|
||||
<span class="extras">
|
||||
{{if len(defines[m]):}}{{=T("defines tables")}} {{pass}}{{=XML(', '.join([B(table).xml() for table in defines[m]]))}}
|
||||
</span>
|
||||
</li>
|
||||
{{pass}}
|
||||
</ul>
|
||||
{{pass}}
|
||||
</div>
|
||||
|
||||
<!-- FIND CONTROLLER FUNCTIONS -->
|
||||
@@ -89,131 +100,124 @@ for c in controllers: controller_functions+=[c[:-3]+'/%s.html'%x for x in functi
|
||||
}}
|
||||
|
||||
<!-- CONTROLLERS -->
|
||||
|
||||
<h3 id="controllers" onclick="collapse('controllers_inner');" class="component">
|
||||
{{=T("Controllers")}}
|
||||
<h3 id="_controllers" rel="pagebookmark">
|
||||
<span class="component" onclick="collapse('controllers_inner');">{{=T("Controllers")}}</span>
|
||||
<span id="controllers" class="hashstick"> </span><a href="#" class="tophashlink btn btn-mini btn-warning"><span>top</span></a>
|
||||
</h3>
|
||||
<div id="controllers_inner" class="component_contents">
|
||||
{{if not controllers:}}
|
||||
<p><strong>{{=T("There are no controllers")}}</strong></p>
|
||||
{{pass}}
|
||||
<div class="controls comptools">
|
||||
</div>
|
||||
<ul>
|
||||
{{for c in controllers:}}
|
||||
<li>
|
||||
<span class="filetools controls">
|
||||
{{=editfile('controllers',c)}}
|
||||
{{=deletefile([app,'controllers',c])}}
|
||||
{{=testfile('controllers',c)}}
|
||||
</span>
|
||||
<span class="file">
|
||||
{{=peekfile('controllers',c)}}
|
||||
</span>
|
||||
<span class="extras">
|
||||
{{if functions[c]:}}{{=T("exposes")}} {{pass}}{{=XML(', '.join([A(f,_href=URL(a=app,c=c[:-3],f=f)).xml() for f in functions[c]]))}}
|
||||
</span>
|
||||
</li>
|
||||
{{pass}}
|
||||
</ul>
|
||||
{{if not controllers:}}<p><strong>{{=T("There are no controllers")}}</strong></p>{{else:}}
|
||||
<ul class="unstyled act_edit">
|
||||
{{for c in controllers:}}
|
||||
<li>
|
||||
<span class="filetools controls">
|
||||
{{=editfile('controllers',c)}}
|
||||
{{=deletefile([app,'controllers',c])}}
|
||||
{{=testfile('controllers',c)}}
|
||||
</span>
|
||||
<span class="file">
|
||||
{{=peekfile('controllers',c)}}
|
||||
</span>
|
||||
<span class="extras celled">
|
||||
{{if functions[c]:}}{{=T("exposes")}} {{pass}}{{=XML(', '.join([A(f,_href=URL(a=app,c=c[:-3],f=f)).xml() for f in functions[c]]))}}
|
||||
</span>
|
||||
</li>
|
||||
{{pass}}
|
||||
</ul>
|
||||
{{pass}}
|
||||
</div>
|
||||
|
||||
<!-- VIEWS -->
|
||||
|
||||
<h3 id="views" onclick="collapse('views_inner');" class="component">
|
||||
{{=T("Views")}}
|
||||
<h3 id="_views" rel="pagebookmark">
|
||||
<span class="component" onclick="collapse('views_inner');">{{=T("Views")}}</span>
|
||||
<span id="views" class="hashstick"> </span><a href="#" class="tophashlink btn btn-mini btn-warning"><span>top</span></a>
|
||||
</h3>
|
||||
<div id="views_inner" class="component_contents">
|
||||
{{if not views:}}
|
||||
<p><strong>{{=T("There are no views")}}</strong></p>
|
||||
{{pass}}
|
||||
<div class="controls comptools">
|
||||
</div>
|
||||
<ul>
|
||||
{{for c in views:}}
|
||||
<li>
|
||||
<span class="filetools controls">
|
||||
{{=editfile('views',c)}}
|
||||
{{=deletefile([app,'views',c])}}
|
||||
</span>
|
||||
<span class="file">
|
||||
{{=peekfile('views',c)}}
|
||||
</span>
|
||||
<span class="extras">
|
||||
{{if extend.has_key(c):}}{{=T("extends")}} <b>{{=extend[c]}}</b> {{pass}}
|
||||
{{if include[c]:}}{{=T("includes")}} {{pass}}{{=XML(', '.join([B(f).xml() for f in include[c]]))}}
|
||||
</span>
|
||||
</li>
|
||||
{{pass}}
|
||||
</ul>
|
||||
{{if not views:}}<p><strong>{{=T("There are no views")}}</strong></p>{{else:}}
|
||||
<ul class="unstyled act_edit">
|
||||
{{for c in views:}}
|
||||
<li>
|
||||
<span class="filetools controls">
|
||||
{{=editfile('views',c)}}
|
||||
{{=deletefile([app, 'views', c])}}
|
||||
</span>
|
||||
<span class="file">
|
||||
{{=peekfile('views',c)}}
|
||||
</span>
|
||||
<span class="extras celled">
|
||||
{{if extend.has_key(c):}}{{=T("extends")}} <b>{{=extend[c]}}</b> {{pass}}
|
||||
{{if include[c]:}}{{=T("includes")}} {{pass}}{{=XML(', '.join([B(f).xml() for f in include[c]]))}}
|
||||
</span>
|
||||
</li>
|
||||
{{pass}}
|
||||
</ul>
|
||||
{{pass}}
|
||||
</div>
|
||||
|
||||
<!-- STATIC -->
|
||||
|
||||
<h3 id="static" onclick="collapse('static_inner');" class="component">
|
||||
{{=T("Static files")}}
|
||||
<h3 id="_static" rel="pagebookmark">
|
||||
<span class="component" onclick="collapse('static_inner');">{{=T("Static files")}}</span>
|
||||
<span id="static" class="hashstick"> </span><a href="#" class="tophashlink btn btn-mini btn-warning"><span>top</span></a>
|
||||
</h3>
|
||||
<div id="static_inner" class="component_contents">
|
||||
{{if not statics:}}<p><strong>{{=T("There are no static files")}}</strong></p>{{pass}}
|
||||
<ul>
|
||||
{{
|
||||
path=[]
|
||||
for file in statics+['']:
|
||||
items=file.split('/')
|
||||
file_path=items[:-1]
|
||||
filename=items[-1]
|
||||
while path!=file_path:
|
||||
if len(file_path)>=len(path) and all([v==file_path[k] for k,v in enumerate(path)]):
|
||||
path.append(file_path[len(path)])
|
||||
thispath='static__'+'__'.join(path)
|
||||
}}
|
||||
<li class="folder">
|
||||
<a href="javascript:collapse('{{=thispath}}');" class="file">{{=path[-1]}}/</a>
|
||||
<ul id="{{=thispath}}" style="display: none;" class="sublist">{{
|
||||
else:
|
||||
path = path[:-1]
|
||||
}}
|
||||
</ul></li>
|
||||
{{
|
||||
pass
|
||||
pass
|
||||
if filename:
|
||||
}}<li>
|
||||
<span class="filetools controls">
|
||||
{{=editfile('static',file)}} {{=deletefile([app,'static',file])}}
|
||||
</span>
|
||||
<span class="file">
|
||||
<a href="{{=URL(a=app,c='static',f=file)}}">{{=filename}}</a>
|
||||
</span>
|
||||
</li>{{
|
||||
pass
|
||||
pass
|
||||
}}
|
||||
{{pass}}
|
||||
</ul>
|
||||
{{if not statics:}}<p><strong>{{=T("There are no static files")}}</strong></p>{{else:}}
|
||||
<ul class="unstyled act_edit">
|
||||
{{
|
||||
path=[]
|
||||
for file in statics+['']:
|
||||
items=file.split('/')
|
||||
file_path=items[:-1]
|
||||
filename=items[-1]
|
||||
while path!=file_path:
|
||||
if len(file_path)>=len(path) and all([v==file_path[k] for k,v in enumerate(path)]):
|
||||
path.append(file_path[len(path)])
|
||||
thispath='static__'+'__'.join(path)
|
||||
}}
|
||||
<li class="folder"><i> </i>
|
||||
<a href="javascript:collapse('{{=thispath}}');" class="file">{{=path[-1]}}/</a>
|
||||
<ul id="{{=thispath}}" style="display: none;" class="sublist">
|
||||
{{
|
||||
else:
|
||||
path = path[:-1]
|
||||
}}
|
||||
</ul>
|
||||
</li>
|
||||
{{
|
||||
pass
|
||||
pass
|
||||
if filename:
|
||||
}}
|
||||
<li>
|
||||
<span class="filetools controls">
|
||||
{{=editfile('static',file)}} {{=deletefile([app,'static',file])}}
|
||||
</span>
|
||||
<span class="file">
|
||||
<a href="{{=URL(a=app,c='static',f=file)}}">{{=filename}}</a>
|
||||
</span>
|
||||
</li>
|
||||
{{
|
||||
pass
|
||||
pass
|
||||
}}
|
||||
</ul>
|
||||
{{pass}}
|
||||
</div>
|
||||
|
||||
<!-- MODULES -->
|
||||
|
||||
<h3 id="modules" onclick="collapse('modules_inner');" class="component">
|
||||
{{=T("Modules")}}
|
||||
<h3 id="_modules" rel="pagebookmark">
|
||||
<span class="component" onclick="collapse('modules_inner');">{{=T("Modules")}}</span>
|
||||
<span id="modules" class="hashstick"> </span><a href="#" class="tophashlink btn btn-mini btn-warning"><span>top</span></a>
|
||||
</h3>
|
||||
<div id="modules_inner" class="component_contents">
|
||||
{{if not modules:}}
|
||||
<p><strong>{{=T("There are no modules")}}</strong></p>
|
||||
{{pass}}
|
||||
<div class="controls comptools">
|
||||
</div>
|
||||
<ul>
|
||||
{{for m in modules:}}
|
||||
<li>
|
||||
{{=editfile('modules',m)}}
|
||||
{{if m!='__init__.py':}}<a class="button" href="{{=URL('delete',args=[app,'modules',m],vars=dict(sender=request.function+'/'+app))}}">{{=T("delete")}}</a>{{pass}}
|
||||
{{=peekfile('modules',m)}}
|
||||
</li>
|
||||
{{pass}}
|
||||
</ul>
|
||||
{{if not modules:}}<p><strong>{{=T("There are no modules")}}</strong></p>{{else:}}
|
||||
<ul class="unstyled act_edit">
|
||||
{{for m in modules:}}
|
||||
<li>
|
||||
{{=editfile('modules',m)}}
|
||||
{{if m!='__init__.py':}}<a class="button btn" href="{{=URL('delete',args=[app,'modules',m],vars=dict(sender=request.function+'/'+app))}}">{{=T("delete")}}</a>{{pass}}
|
||||
{{=peekfile('modules',m)}}
|
||||
</li>
|
||||
{{pass}}
|
||||
</ul>
|
||||
{{pass}}
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<!-- end "plugin" block -->
|
||||
|
||||
@@ -1,25 +1,21 @@
|
||||
{{extend 'layout.html'}}
|
||||
|
||||
{{block sectionclass}}resolve{{end}}
|
||||
|
||||
<!-- begin "resolve" block -->
|
||||
<h2>{{=T('Resolve Conflict file')}} "{{=filename}}"</h2>
|
||||
|
||||
<script>
|
||||
function plus() {jQuery('.plus').show(); jQuery('.minus').hide(); }
|
||||
function minus() {jQuery('.plus').hide(); jQuery('.minus').show(); }
|
||||
function all() {jQuery('.plus').show(); jQuery('.minus').show(); }
|
||||
</script>
|
||||
|
||||
<div class="controls">
|
||||
<button onclick="plus()">new</button>
|
||||
<button onclick="minus()">old</button>
|
||||
<button onclick="all()">all</button>
|
||||
<button class="btn" onclick="plus()">new</button>
|
||||
<button class="btn" onclick="minus()">old</button>
|
||||
<button class="btn" onclick="all()">all</button>
|
||||
</div>
|
||||
|
||||
<div class="form">
|
||||
<form action="{{=URL(r=request,args=request.args)}}" method="post">
|
||||
{{=diff}}
|
||||
<input type="submit" name="merge" value="{{=T('merge')}}" /><br/>
|
||||
<input class="btn" type="submit" name="merge" value="{{=T('merge')}}" /><br/>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<!-- end "resolve" block -->
|
||||
@@ -1,158 +1,159 @@
|
||||
{{extend 'layout.html'}}
|
||||
{{import os, glob}}
|
||||
|
||||
{{block sectionclass}}site{{end}}
|
||||
|
||||
<div class="applist f60">
|
||||
<div class="applist_inner">
|
||||
<h2>{{=T("Installed applications")}}</h2>
|
||||
<ul>
|
||||
{{for a in apps:}}
|
||||
<li class="application"> <!-- onmouseover="jQuery(this).children('p').show()" onmouseout="jQuery(this).children('p').hide()"-->
|
||||
{{if a==request.application:}}
|
||||
<h3 class="currentapp">{{=a}} ({{=T('currently running')}})</h3>
|
||||
<p class="controls">
|
||||
{{else:}}
|
||||
<h3 class="editableapp">{{=A(a,_href=URL(a,'default','index'))}}</h3>
|
||||
{{if MULTI_USER_MODE and db.app(name=a):}}(created by {{="%(first_name)s %(last_name)s" % db.auth_user[db.app(name=a).owner]}}){{pass}}
|
||||
<p class="controls">
|
||||
{{if not os.path.exists('applications/%s/compiled' % a):}}
|
||||
{{=sp_button(URL('design',args=a), T("Edit"))}}
|
||||
{{else:}}
|
||||
{{=button(URL(a,'appadmin','index'), T("appadmin"))}}
|
||||
{{pass}}
|
||||
{{=button(URL('about',args=a), T("About"))}}
|
||||
{{pass}}
|
||||
{{=button(URL('errors',args=a), T("Errors"))}}
|
||||
{{=button(URL('cleanup',args=a), T("Clean"))}}
|
||||
{{=button(URL('pack',args=a), T("Pack all"))}}
|
||||
{{if not os.path.exists('applications/%s/compiled' % a):}}
|
||||
{{=button(URL('compile_app',args=a), T("Compile"))}}
|
||||
{{else:}}
|
||||
{{=button(URL('pack',args=(a, 'compiled')), T("Pack compiled"))}}
|
||||
{{if glob.glob('applications/%s/controllers/*.py' % a):}}
|
||||
{{=button(URL('remove_compiled_app',args=a), T("Remove compiled"))}}
|
||||
{{pass}}
|
||||
{{pass}}
|
||||
{{if os.path.exists(os.path.join(apath(r=request),a,'.git')): }}
|
||||
{{=button(URL('git_pull',args=a), T("Git Pull"))}}
|
||||
{{=button(URL('git_push',args=a), T("Git Push"))}}
|
||||
{{pass}}
|
||||
{{if a!=request.application:}}
|
||||
{{=button(URL('uninstall',args=a), T("Uninstall"))}}
|
||||
{{=button_enable(URL('enable',args=a), a)}}
|
||||
{{pass}}
|
||||
</p>
|
||||
</li>
|
||||
{{pass}}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="sidebar fl60">
|
||||
<div class="sidebar_inner controls">
|
||||
<div class="pwdchange">
|
||||
<!-- begin "site" block -->
|
||||
<div class="row-fluid">
|
||||
<div class="applist f60 span7">
|
||||
<div class="applist_inner">
|
||||
<h2>{{=T("Installed applications")}}</h2>
|
||||
<table width="100%" class="table">
|
||||
{{for a in apps:}}
|
||||
<tr>{{buttons = []}}
|
||||
<td>
|
||||
{{if a==request.application:}}
|
||||
<h4 class="currentapp">{{=a}} ({{=T('currently running')}})</h4>
|
||||
{{else:}}
|
||||
<h4 class="editableapp">{{=A(a,_href=URL(a,'default','index'))}}</h4>
|
||||
{{if MULTI_USER_MODE and db.app(name=a):}}(created by {{="%(first_name)s %(last_name)s" % db.auth_user[db.app(name=a).owner]}}){{pass}}
|
||||
{{if not os.path.exists('applications/%s/compiled' % a):}}
|
||||
{{buttons.append((URL('design',args=a), T("Edit")))}}
|
||||
{{else:}}
|
||||
{{buttons.append((URL(a,'appadmin','index'), T("appadmin")))}}
|
||||
{{pass}}
|
||||
{{buttons.append((URL('about',args=a), T("About")))}}
|
||||
{{pass}}
|
||||
{{buttons.append((URL('errors',args=a), T("Errors")))}}
|
||||
{{buttons.append((URL('cleanup',args=a), T("Clean")))}}
|
||||
{{buttons.append((URL('pack',args=a), T("Pack all")))}}
|
||||
{{if not os.path.exists('applications/%s/compiled' % a):}}
|
||||
{{buttons.append((URL('compile_app',args=a), T("Compile")))}}
|
||||
{{else:}}
|
||||
{{buttons.append((URL('pack',args=(a, 'compiled')), T("Pack compiled")))}}
|
||||
{{if glob.glob('applications/%s/controllers/*.py' % a):}}
|
||||
{{buttons.append((URL('remove_compiled_app',args=a), T("Remove compiled")))}}
|
||||
{{pass}}
|
||||
{{pass}}
|
||||
{{if os.path.exists(os.path.join(apath(r=request),a,'.git')): }}
|
||||
{{buttons.append((URL('git_pull',args=a), T("Git Pull")))}}
|
||||
{{buttons.append((URL('git_push',args=a), T("Git Push")))}}
|
||||
{{pass}}
|
||||
{{if a!=request.application:}}
|
||||
{{buttons.append((URL('uninstall',args=a), T("Uninstall")))}}
|
||||
{{pass}}
|
||||
</td>
|
||||
<td>
|
||||
<div class="btn-group">
|
||||
<a class="btn dropdown-toggle" data-toggle="dropdown" href="#">
|
||||
{{=T('Manage')}}
|
||||
<span class="caret"></span>
|
||||
</a>
|
||||
<ul class="dropdown-menu">
|
||||
{{for link,name in buttons:}}
|
||||
{{=LI(A(name,_href=link))}}
|
||||
{{pass}}
|
||||
</ul>
|
||||
</div>
|
||||
{{=button_enable(URL('enable',args=a), a)}}
|
||||
</td>
|
||||
</tr>
|
||||
{{pass}}
|
||||
</table>
|
||||
</div>
|
||||
</div> <!-- /applist -->
|
||||
<div class="sidebar fl60 span5">
|
||||
<div class="sidebar_inner controls well well-small">
|
||||
<!-- CHANGE ADMIN PWD -->
|
||||
{{if MULTI_USER_MODE:}}
|
||||
{{=auth.navbar()}}
|
||||
{{else:}}
|
||||
{{=sp_button(URL('change_password'), T('Change admin password'))}}
|
||||
{{pass}}
|
||||
</div>
|
||||
<!-- VERSION -->
|
||||
{{if is_manager():}}
|
||||
<div class="box">
|
||||
<h3>{{=T("Version %s.%s.%s (%s) %s", myversion)}}</h3>
|
||||
{{if session.check_version:}}
|
||||
<p id="check_version">
|
||||
{{=T('Checking for upgrades...')}}
|
||||
<script>ajax('{{=URL('check_version')}}',[],'check_version');</script>{{session.check_version=False}}
|
||||
{{else:}}
|
||||
<p id="check_version">
|
||||
{{=button("javascript:ajax('"+URL('check_version')+"',[],'check_version')", T('Check for upgrades'))}}
|
||||
<div class="pwdchange pull-right">
|
||||
{{if MULTI_USER_MODE:}}
|
||||
{{=auth.navbar()}}
|
||||
{{else:}}
|
||||
{{=sp_button(URL('change_password'), T('Change admin password'))}}
|
||||
{{=button(URL('default','reload_routes'), T('Reload routes'))}}
|
||||
</p>
|
||||
{{pass}}
|
||||
</div> <!-- /CHANGE ADMIN PWD -->
|
||||
{{if is_manager():}}
|
||||
<!-- VERSION -->
|
||||
<div class="box">
|
||||
<h4>{{=T("Version")}}</h4>
|
||||
<p>
|
||||
<tt>{{=myversion}}</tt><br/>
|
||||
({{=T("Running on %s", request.env.server_software)}})
|
||||
</p>
|
||||
<p id="check_version" class="row-buttons">
|
||||
{{if session.check_version:}}
|
||||
{{=T('Checking for upgrades...')}}
|
||||
<script>ajax('{{=URL('check_version')}}',[],'check_version');</script>
|
||||
{{session.check_version=False}}
|
||||
{{else:}}
|
||||
{{=button("javascript:ajax('"+URL('check_version')+"',[],'check_version')", T('Check for upgrades'))}}
|
||||
{{pass}}
|
||||
</p>
|
||||
{{if session.is_mobile=='auto':}}
|
||||
<p>{{=A(T('Try the mobile interface'),_href=URL('plugin_jqmobile','about'))}}</p>
|
||||
{{pass}}
|
||||
</div> <!-- /VERSION -->
|
||||
{{pass}}
|
||||
<p>
|
||||
{{=T("Running on %s", request.env.server_software)}}
|
||||
</p>
|
||||
{{if session.is_mobile=='auto':}}<p>
|
||||
{{=A(T('Try the mobile interface'),_href=URL('plugin_jqmobile','about'))}}</p>
|
||||
{{if MULTI_USER_MODE and is_manager():}}
|
||||
<!-- MULTI_USER_INTERFACE -->
|
||||
<div class="box">
|
||||
<h4>{{=T("Multi User Mode")}}</h4>
|
||||
<p class="row-buttons">
|
||||
{{=button(URL('bulk_register'),T('Bulk Register'))}}
|
||||
{{=button(URL('manage_students',vars={'order':'auth_user.id'}),T('Manage Students'))}}
|
||||
</p>
|
||||
</div> <!-- /MULTI_USER_INTERFACE -->
|
||||
{{pass}}
|
||||
<!-- SCAFFOLD APP -->
|
||||
<div class="box">
|
||||
<h4>{{=T("New simple application")}}</h4>
|
||||
{{=form_create.custom.begin}}
|
||||
{{=LABEL(T("Application name:"))}}
|
||||
{{=form_create.custom.widget.name}}
|
||||
<div class="controls"><button type="submit" class="btn">{{=T('Create')}}</button></div>
|
||||
{{=form_create.custom.end}}
|
||||
</div> <!-- /SCAFFOLD APP -->
|
||||
<!-- UPLOAD PACKAGE -->
|
||||
<div class="box">
|
||||
<h4>{{=T("Upload and install packed application")}}</h4>
|
||||
{{=form_update.custom.begin}}
|
||||
<label for="appupdate_name">{{=T("Application name:")}}</label>
|
||||
{{=form_update.custom.widget.name}}
|
||||
<label for="appupdate_file">{{=T("Upload a package:")}}</label>
|
||||
{{=form_update.custom.widget.file}}
|
||||
<label for="appupdate_url">{{=T("Or Get from URL:")}}</label>
|
||||
{{=form_update.custom.widget.url}}<small class="help-block">({{=T('can be a git repo')}})</small>
|
||||
<div class="controls">
|
||||
<label class="checkbox">
|
||||
{{=form_update.custom.widget.overwrite}} {{=T("Overwrite installed app")}}
|
||||
</label>
|
||||
<button type="submit" class='btn'>{{=T('Install')}}</button>
|
||||
</div>
|
||||
{{=form_update.custom.end}}
|
||||
</div> <!-- /UPLOAD PACKAGE -->
|
||||
<!-- DEPLOY ON GAE -->
|
||||
<div class="box">
|
||||
<h4>{{=T("Deploy")}}</h4>
|
||||
<p class="row-buttons">
|
||||
{{=button(URL('gae','deploy'), T('Deploy on Google App Engine'))}}
|
||||
{{=button(URL('openshift','deploy'),T('Deploy to OpenShift'))}}
|
||||
</p>
|
||||
</div> <!-- /DEPLOY ON GAE -->
|
||||
<!-- APP WIZARD -->
|
||||
<div class="box">
|
||||
<h4>{{=T("New application wizard")}}</h4>
|
||||
<p>{{=button(URL('wizard','index'), T('Start wizard'))}}<br/>
|
||||
{{=T("(requires internet access, experimental)")}}</p>
|
||||
</div> <!-- /APP WIZARD -->
|
||||
{{if TWITTER_HASH:}}
|
||||
<!-- TWITTER -->
|
||||
<div class="box">
|
||||
<h4>{{=T("%s Recent Tweets"%TWITTER_HASH)}}</h4>
|
||||
<div id="tweets">{{=T('loading...')}}</div>
|
||||
<script>jQuery(document).ready(function(){jQuery('#tweets').load('{{=URL('twitter.load')}}');});</script>
|
||||
</div> <!-- /TWITTER -->
|
||||
{{pass}}
|
||||
</div>
|
||||
{{pass}}
|
||||
<!-- MULTI_USER_INTERFACE -->
|
||||
{{if MULTI_USER_MODE and is_manager():}}
|
||||
<div class="box">
|
||||
<h3>{{=T("Multi User Mode")}}</h3>
|
||||
<p>
|
||||
{{=button(URL('bulk_register'),T('Bulk Register'))}}
|
||||
{{=button(URL('manage_students'),T('Manage Students'))}}
|
||||
</p>
|
||||
</div>
|
||||
{{pass}}
|
||||
<!-- APP WIZARD -->
|
||||
<div class="box">
|
||||
<h3>{{=T("New application wizard")}}</h3>
|
||||
<p>{{=button(URL('wizard','index'), T('Start wizard'))}}
|
||||
{{=T("(requires internet access)")}}</p>
|
||||
</div>
|
||||
<!-- SCAFFOLD APP -->
|
||||
<div class="box">
|
||||
<h3>{{=T("New simple application")}}</h3>
|
||||
{{=form_create.custom.begin}}
|
||||
<table><tr><td>
|
||||
{{=LABEL(T("Application name:"))}}
|
||||
</td><td>
|
||||
{{=form_create.custom.widget.name}}
|
||||
</td><td>
|
||||
<button type="submit">{{=T('Create')}}</button>
|
||||
</td></tr></table>
|
||||
{{=form_create.custom.end}}
|
||||
</div>
|
||||
<!-- UPLOAD PACKAGE -->
|
||||
<div class="box">
|
||||
<h3>{{=T("Upload and install packed application")}}</h3>
|
||||
{{=form_update.custom.begin}}
|
||||
<table><tr><td>
|
||||
{{=LABEL(T("Application name:"))}}
|
||||
</td><td>
|
||||
{{=form_update.custom.widget.name}}
|
||||
</td></tr><tr><td>
|
||||
{{=LABEL(T("Upload a package:"))}}
|
||||
</td><td>
|
||||
{{=form_update.custom.widget.file}}
|
||||
</td></tr><tr><td>
|
||||
{{=LABEL('Or ',T("Get from URL:"))}}
|
||||
</td><td>
|
||||
{{=form_update.custom.widget.url}}
|
||||
</td></tr><tr><td>
|
||||
({{=T('can be a git repo')}})
|
||||
</td><td>
|
||||
{{=form_update.custom.widget.overwrite}}
|
||||
{{=LABEL(T("Overwrite installed app"))}}
|
||||
</td></tr><tr><td>
|
||||
</td><td>
|
||||
<button type="submit">{{=T('Install')}}</button>
|
||||
</td></tr></table>
|
||||
{{=form_update.custom.end}}
|
||||
</div>
|
||||
<!-- DEPLOY ON GAE -->
|
||||
<div class="box">
|
||||
<h3>{{=T("Deploy")}}</h3>
|
||||
<p>
|
||||
{{=button(URL('gae','deploy'), T('Deploy on Google App Engine'))}}
|
||||
{{=button(URL('openshift','deploy'),T('Deploy to OpenShift'))}}
|
||||
</p>
|
||||
</div><br/>
|
||||
{{if TWITTER_HASH:}}
|
||||
<div class="box">
|
||||
<h3>{{=T("%s Recent Tweets"%TWITTER_HASH)}}</h3>
|
||||
<div id="tweets">{{=T('loading...')}}</div>
|
||||
<script>
|
||||
jQuery(document).ready(function(){jQuery('#tweets').load('{{=URL('twitter.load')}}');});
|
||||
</script>
|
||||
</div>
|
||||
{{pass}}
|
||||
</div>
|
||||
</div>
|
||||
</div> <!-- /sidebar -->
|
||||
</div> <!-- /row-fluid
|
||||
<!-- end "site" block -->
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{{extend 'layout.html'}}
|
||||
|
||||
{{block sectionclass}}test{{end}}
|
||||
|
||||
<!-- begin "test" block -->
|
||||
<h2>{{=T('Testing application')}} "{{=app}}"</h2>
|
||||
|
||||
{{for controller in sorted(controllers):}}
|
||||
@@ -14,8 +14,14 @@ ajax('{{=URL(a=app,c=controller[:-3],f='_TEST')}}',[],'output_{{=controller[:-3]
|
||||
//--></script>
|
||||
{{pass}}
|
||||
|
||||
<p class="help">{{=T("""If the report above contains a ticket number it indicates a failure in executing the controller, before any attempt to execute the doctests. This is usually due to an indentation error or an error outside function code.
|
||||
A green title indicates that all tests (if defined) passed. In this case test results are not shown.""")}}</p>
|
||||
<p class="help">{{=T('Functions with no doctests will result in [passed] tests.')}}</p>
|
||||
<p class="help">{{=T('ATTENTION: TESTING IS NOT THREAD SAFE SO DO NOT PERFORM MULTIPLE TESTS CONCURRENTLY.')}}</p>
|
||||
|
||||
<div class="row-fluid">
|
||||
<p class="help alert alert-info span6">{{=T("""If the report above contains a ticket number it indicates a failure in executing the controller, before any attempt to execute the doctests. This is usually due to an indentation error or an error outside function code.
|
||||
A green title indicates that all tests (if defined) passed. In this case test results are not shown.""")}}</p>
|
||||
</div>
|
||||
<div class="row-fluid">
|
||||
<p class="help alert alert-info span6">{{=T('Functions with no doctests will result in [passed] tests.')}}</p>
|
||||
</div>
|
||||
<div class="row-fluid">
|
||||
<p class="help alert alert-info span6">{{=T('ATTENTION: TESTING IS NOT THREAD SAFE SO DO NOT PERFORM MULTIPLE TESTS CONCURRENTLY.')}}</p>
|
||||
</div>
|
||||
<!--end "test" block -->
|
||||
@@ -1,7 +1,6 @@
|
||||
{{extend 'layout.html'}}
|
||||
|
||||
{{block sectionclass}}ticket{{end}}
|
||||
|
||||
<!-- begin "ticket" block -->
|
||||
<h2>{{=T('Error ticket')}} for "{{=app}}"</h2>
|
||||
<h3>{{=T('Ticket ID')}}</h3>
|
||||
<p>{{=ticket}}</p>
|
||||
@@ -11,122 +10,122 @@
|
||||
<tbody>
|
||||
<tr>
|
||||
<th>web2py™</th>
|
||||
<td>{{=myversion}}</td>
|
||||
<td>Version {{=myversion}}</td>
|
||||
</tr>
|
||||
{{if snapshot:}}
|
||||
<tr>
|
||||
<th>Python</th>
|
||||
<td>{{=snapshot.get('pyver','')}}</td>
|
||||
</tr>
|
||||
</tr>
|
||||
{{pass}}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
{{if traceback or code or layer:}}
|
||||
<h3>{{=T('Traceback')}}</h3>
|
||||
<div class="inspect">
|
||||
{{=traceback}}
|
||||
</div>
|
||||
|
||||
<div class="inspect resp1">{{=traceback}}</div>
|
||||
{{if snapshot:}}
|
||||
{{try:}}
|
||||
|
||||
<!-- ERROR SNAPSHOT -->
|
||||
|
||||
<h3>
|
||||
{{=T('Error snapshot')}}
|
||||
<span class="tooltip">{{=helpicon()}} <span>{{=T('Detailed traceback description')}}</span></span>
|
||||
</h3>
|
||||
|
||||
<!-- SNAPSHOT LIST -->
|
||||
|
||||
<div id="snapshot">
|
||||
<!-- Exception details -->
|
||||
<p class="exception_object inspect">
|
||||
<code>{{=snapshot['etype']}}({{=snapshot['evalue']}})</code>
|
||||
</p>
|
||||
<p class="controls">
|
||||
<a class="button" onclick="collapse('exception_inner');"><span>{{=T('inspect attributes')}}</span></a>
|
||||
</p>
|
||||
<div id="exception_inner" class="hide">
|
||||
<div class="inspect">
|
||||
<h5>{{=T("Exception instance attributes")}}</h5>
|
||||
<table>
|
||||
<tbody>
|
||||
{{for k,v in snapshot['exception'].items():}}
|
||||
<tr>
|
||||
<th>{{=k}}</th>
|
||||
<td>{{=v}}</td>
|
||||
</tr>
|
||||
{{pass}}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- ERROR SNAPSHOT -->
|
||||
<h3>{{=T('Error snapshot')}}
|
||||
<a href="#" rel="tooltip" data-placement="right" data-original-title="{{=T('Detailed traceback description')}}">
|
||||
{{=helpicon()}}
|
||||
<span>{{=T("Detailed traceback description")}}</span>
|
||||
</a>
|
||||
</h3>
|
||||
<!-- SNAPSHOT LIST -->
|
||||
<div id="snapshot">
|
||||
<!-- Exception details -->
|
||||
<p class="exception_object inspect">
|
||||
<code>{{=snapshot['etype']}}({{=snapshot['evalue']}})</code>
|
||||
</p>
|
||||
<p class="controls">
|
||||
<a class="button btn" onclick="collapse('exception_inner');"><span>{{=T('inspect attributes')}}</span></a>
|
||||
</p>
|
||||
<div id="exception_inner" class="hide">
|
||||
<div class="inspect">
|
||||
<h4>{{=T("Exception instance attributes")}}</h4>
|
||||
<table>
|
||||
<tbody>
|
||||
{{for k,v in snapshot['exception'].items():}}
|
||||
<tr>
|
||||
<th>{{=k}}</th>
|
||||
<td>{{=v}}</td>
|
||||
</tr>
|
||||
{{pass}}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- FRAMES -->
|
||||
<div id="frames">
|
||||
<h4>{{=T('Frames')}}</h4>
|
||||
<ul class="unstyled">
|
||||
{{for i, frame in enumerate(snapshot['frames']):}}
|
||||
<li>
|
||||
{{is_hidden = (i != len(snapshot['frames'])-1 and 'hide' or 'inspect')}}
|
||||
<div class="framefile inspect controls">
|
||||
<p>
|
||||
<strong>File {{="%s in %s at line %s" % (frame['file'], frame['func'], frame['lnum'])}}</strong>
|
||||
<a class="button tbbutton btn" onclick="collapse('{{='%s_code_inner' % i}}');"><span>{{=T("code")}}</span></a>
|
||||
<a class="button tbbutton btn" onclick="collapse('{{='%s_args_inner' % i}}');"><span>{{=T("arguments")}}</span></a>
|
||||
<a class="button tbbutton btn" onclick="collapse('{{='%s_vars_inner' % i}}');"><span>{{=T("variables")}}</span></a>
|
||||
</p>
|
||||
<div id="{{='%s_args_inner' % i}}" class="{{=is_hidden}}" style="width:100%;overflow:auto">
|
||||
<h5>Function argument list</h5>
|
||||
<p>{{=frame['call']}}</p>
|
||||
</div>
|
||||
<div id="{{='%s_code_inner' % i}}" class="{{=is_hidden}}" style="width:100%;overflow:auto">
|
||||
<h5>Code listing</h5>
|
||||
{{if frame['lines']:}}
|
||||
<pre>{{=CODE('\n'.join([x[1] for x in sorted(frame['lines'].items(),key=lambda x: x[0])]),
|
||||
language='python', link=None, counter=min(frame['lines'].keys()), highlight_line=frame['lnum'])}}</pre>
|
||||
{{pass}}
|
||||
</div>
|
||||
<div id="{{='%s_vars_inner' % i}}" class="{{=is_hidden}}" style="width:100%;overflow:auto">
|
||||
<h5>Variables</h5>
|
||||
<table>
|
||||
<tbody>
|
||||
{{for k,v in frame['dump'].items():}}
|
||||
<tr>
|
||||
<th>{{=k}}</th>
|
||||
<td>{{=v}}</td>
|
||||
</tr>
|
||||
{{pass}}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- FRAMES -->
|
||||
<div id="frames">
|
||||
<h4>{{=T('Frames')}}</h4>
|
||||
<ul>
|
||||
{{for i, frame in enumerate(snapshot['frames']):}}
|
||||
<li>
|
||||
{{is_hidden = (i != len(snapshot['frames'])-1 and 'hide' or 'inspect')}}
|
||||
<div class="framefile inspect controls">
|
||||
<p>
|
||||
<strong>File {{="%s in %s at line %s" % (frame['file'], frame['func'], frame['lnum'])}}</strong>
|
||||
<a class="button tbbutton" onclick="collapse('{{="%s_code_inner" % i}}');"><span>{{=T("code")}}</span></a>
|
||||
<a class="button tbbutton" onclick="collapse('{{="%s_args_inner" % i}}');"><span>{{=T("arguments")}}</span></a>
|
||||
<a class="button tbbutton" onclick="collapse('{{="%s_vars_inner" % i}}');"><span>{{=T("variables")}}</span></a>
|
||||
</p>
|
||||
<div id="{{="%s_args_inner" % i}}" class="{{=is_hidden}}">
|
||||
<h5>Function argument list</h5>
|
||||
<p>{{=frame['call']}}</p>
|
||||
</div>
|
||||
<div id="{{="%s_code_inner" % i}}" class="{{=is_hidden}}">
|
||||
<h5>Code listing</h5>
|
||||
{{if frame['lines']:}}
|
||||
<pre>{{=CODE('\n'.join([x[1] for x in sorted(frame['lines'].items(),key=lambda x: x[0])]),
|
||||
language='python', link=None, counter=min(frame['lines'].keys()), highlight_line=frame['lnum'])}}</pre>
|
||||
{{pass}}
|
||||
</div>
|
||||
<div id="{{="%s_vars_inner" % i}}" class="{{=is_hidden}}">
|
||||
<h5>Variables</h5>
|
||||
<table>
|
||||
<tbody>
|
||||
{{for k,v in frame['dump'].items():}}
|
||||
<tr>
|
||||
<th>{{=k}}</th>
|
||||
<td>{{=v}}</td>
|
||||
</tr>
|
||||
{{pass}}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
</li>
|
||||
{{pass}}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<!-- VIEW ENVIRONMENT -->
|
||||
<div class="viewenv">
|
||||
<h4>Context</h4>
|
||||
<p class="controls">
|
||||
<a class="button" onclick="jQuery('#locals').slideToggle()"><span>{{=T('locals')}}</span></a>
|
||||
<a class="button" onclick="jQuery('#request').slideToggle()"><span>{{=T('request')}}</span></a>
|
||||
<a class="button" onclick="jQuery('#session').slideToggle()"><span>{{=T('session')}}</span></a>
|
||||
<a class="button" onclick="jQuery('#response').slideToggle()"><span>{{=T('response')}}</span></a>
|
||||
</p>
|
||||
<div class="hide inspect" id="locals"><h6>locals</h6>{{=BEAUTIFY(snapshot['locals'])}}</div>
|
||||
<div class="hide inspect" id="request"><h6>request</h6>{{=BEAUTIFY(snapshot['request'])}}</div>
|
||||
<div class="hide inspect" id="session"><h6>session</h6>{{=BEAUTIFY(snapshot['session'])}}</div>
|
||||
<div class="hide inspect" id="response"><h6>response</h6>{{=BEAUTIFY(snapshot['response'])}}</div>
|
||||
</div>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- VIEW ENVIRONMENT -->
|
||||
<div class="viewenv">
|
||||
<h4><span>Context</span></h4>
|
||||
<p class="controls">
|
||||
<a class="button btn" onclick="jQuery('#locals').slideToggle()"><span>{{=T('locals')}}</span></a>
|
||||
<a class="button btn" onclick="jQuery('#request').slideToggle()"><span>{{=T('request')}}</span></a>
|
||||
<a class="button btn" onclick="jQuery('#session').slideToggle()"><span>{{=T('session')}}</span></a>
|
||||
<a class="button btn" onclick="jQuery('#response').slideToggle()"><span>{{=T('response')}}</span></a>
|
||||
</p>
|
||||
<div class="hide inspect resp1" id="locals"><h4>locals</h4>
|
||||
{{=BEAUTIFY(snapshot.get('locals','no locals available in snapshot'))}}
|
||||
</div>
|
||||
<div class="hide inspect" id="request"><h4>request</h4>
|
||||
{{=XML(snapshot.get('request','no request available in snapshot'))}}
|
||||
</div>
|
||||
<div class="hide inspect" id="session"><h4>session</h4>
|
||||
{{=XML(snapshot.get('session','no session available in snapshot'))}}
|
||||
</div>
|
||||
<div class="hide inspect" id="response"><h4>response</h4>
|
||||
{{=XML(snapshot.get('response','no response available in snapshot'))}}
|
||||
</div>
|
||||
</div>
|
||||
{{except Exception, e:}}
|
||||
<!-- this should not happen, just in case... (cannot output normal hmtl as we don't know current open tags) -->
|
||||
{{import traceback;tb=traceback.format_exc().replace("\n","\\n") }}
|
||||
<script language='javascript'>alert("Exception during snapshot rendering: {{=tb}} ");</script>
|
||||
<!-- this should not happen, just in case... (cannot output normal hmtl as we don't know current open tags) -->
|
||||
{{import traceback;tb=traceback.format_exc().replace("\n","\\n") }}
|
||||
<script language='javascript'>alert("Exception during snapshot rendering: {{=tb}} ");</script>
|
||||
{{pass}}
|
||||
{{pass}}
|
||||
|
||||
@@ -137,3 +136,4 @@
|
||||
{{else:}}
|
||||
<h3>{{=T('Ticket Missing')}}</h3>
|
||||
{{pass}}
|
||||
<!-- end "ticket" block -->
|
||||
|
||||
@@ -27,8 +27,17 @@ Tweet attributes
|
||||
"""
|
||||
}}
|
||||
|
||||
{{import re}}
|
||||
{{hashtag = re.compile('([#@])(\w+)')}}
|
||||
{{link = re.compile('(?!<")https?\:\/\/[\w\./?&]+')}}
|
||||
<table class="twitter">
|
||||
{{ for t in tweets: }}
|
||||
{{ =DIV(H5(t["from_user_name"])) }}
|
||||
{{ =DIV(t["text"]) }}
|
||||
{{ =BR() }}
|
||||
<tr class="tweet">
|
||||
<td><img src="{{=t['profile_image_url_https']}}"/></td>
|
||||
<td>
|
||||
<a href="http://twitter.com/{{=t['from_user']}}">{{=t["from_user_name"]}}</a>:
|
||||
{{=XML(hashtag.sub('<a href="http://twitter.com/\\g<2>">\\g<1>\\g<2></a>',link.sub('<a href="\\g<0>">\\g<0></a>',t["text"].encode('utf8'))),sanitize=True)}}
|
||||
</td>
|
||||
</tr>
|
||||
{{ pass }}
|
||||
</table>
|
||||
@@ -1,7 +1,7 @@
|
||||
{{extend 'layout.html'}}
|
||||
|
||||
<!-- begin "uninstall" block -->
|
||||
<h2>{{=T('Are you sure you want to uninstall application "%s"?', app)}}</h2>
|
||||
<div class="center">
|
||||
{{=dialog}}
|
||||
</div>
|
||||
|
||||
<!-- end "uninstall" block -->
|
||||
@@ -1,13 +1,17 @@
|
||||
{{extend 'layout.html'}}
|
||||
|
||||
{{
|
||||
dlg = dialog
|
||||
smt_button = dlg.element(_type="submit")
|
||||
smt_button['_class'] = 'btn'
|
||||
smt_button['_style'] = 'margin-right:4px;'
|
||||
ccl_button = dlg.element(_type="button")
|
||||
ccl_button['_class'] = 'btn'
|
||||
}}
|
||||
{{block sectionclass}}upgrade{{end}}
|
||||
|
||||
<!-- begin "shell" block -->
|
||||
<h2>{{=T('web2py upgrade')}}</h2>
|
||||
|
||||
<p class="center"><strong class="att">{{=T('ATTENTION:')}}</strong> {{=T('This is an experimental feature and it needs more testing. If you decide to upgrade you do it at your own risk')}}<br />
|
||||
{{=T('If start the upgrade, be patient, it may take a while to download')}}</p>
|
||||
|
||||
<p class="center"><div class="alert"><strong class="att">{{=T('ATTENTION:')}}</strong> {{=T('This is an experimental feature and it needs more testing. If you decide to upgrade you do it at your own risk')}}<br />
|
||||
{{=T('If start the upgrade, be patient, it may take a while to download')}}</p></div>
|
||||
<div class="center">
|
||||
{{=dialog}}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
@@ -1,20 +1,67 @@
|
||||
{{extend 'layout.html'}}
|
||||
<!-- begin "user" block -->
|
||||
<h2>{{=T( request.args(0).replace('_',' ').capitalize() )}}</h2>
|
||||
<div id="web2py_user_form">
|
||||
{{if 'auth' in globals():}}
|
||||
{{
|
||||
# add bootstrap class to form
|
||||
form['_class']='span4 well well-small'
|
||||
# change form.custom.begin
|
||||
form.custom.begin=XML("<%s %s>" % (form.tag,form._xml()[0]))
|
||||
if request.args(0)=='login':
|
||||
# delete empty label
|
||||
d = form.elements("tr#auth_user_remember__row")
|
||||
d[0][0] = " "
|
||||
# remake remember checkbox
|
||||
cbx_inp=form.element(_name='remember')
|
||||
cbx_inp['_class']=""
|
||||
cbx_lbl=form.element(_for='auth_user_remember')[0]
|
||||
form.element('div',replace=LABEL(cbx_inp,cbx_lbl,_class="checkbox"))
|
||||
# new form buttons
|
||||
smt = form.element('input',_type='submit')
|
||||
smt['_class']='btn'
|
||||
btns = [smt]
|
||||
if not 'register' in auth.settings.actions_disabled:
|
||||
btns.append(A(T('register'),_href=URL(r=request,args='register'),_class='btn btn-lnk'))
|
||||
pass
|
||||
if not 'request_reset_password' in auth.settings.actions_disabled:
|
||||
btns.append(A(T('lost password'),_href=URL(r=request,args='request_reset_password'),_class='btn btn-lnk'))
|
||||
pass
|
||||
form.element('input[type=submit]',replace=DIV(*btns,_class="controls-inline"))
|
||||
pass
|
||||
if request.args(0)in['register','profile']:
|
||||
# remake is_manager checkbox
|
||||
cbx_inp=form.element(_name='is_manager')
|
||||
cbx_lbl=form.element(_for='auth_user_is_manager')[0]
|
||||
form.element(_name='is_manager',replace=lambda cbx_inp : LABEL(cbx_inp,cbx_lbl,_class="checkbox"))
|
||||
# delete is manager label
|
||||
d = form.elements("tr#auth_user_is_manager__row")
|
||||
d[0][0][0] = " "
|
||||
# new form buttons
|
||||
smt = form.element('input',_type='submit')
|
||||
smt['_class']='btn'
|
||||
form.element('input[type=submit]',replace=lambda button: DIV(button,_class="controls-inline"))
|
||||
pass
|
||||
if request.args(0)in ['request_reset_password','change_password']:
|
||||
# new form buttons
|
||||
smt = form.element('input',_type='submit')
|
||||
smt['_class']='btn'
|
||||
form.element('input[type=submit]',replace=lambda button: DIV(button,_class="controls-inline"))
|
||||
pass
|
||||
}}
|
||||
{{=form.custom.begin}}
|
||||
{{for e in form.components[0]:}}
|
||||
{{= e[0][0]}}
|
||||
{{= e[1][0]}}
|
||||
{{pass}}
|
||||
{{=form.custom.end}}
|
||||
{{else:}}
|
||||
{{=form}}
|
||||
{{if request.args(0)=='login':}}
|
||||
{{if not 'register' in auth.settings.actions_disabled:}}
|
||||
<br/><a href="{{=URL(r=request,args='register')}}">register</a>
|
||||
{{pass}}
|
||||
{{if not 'request_reset_password' in auth.settings.actions_disabled:}}
|
||||
<br/><a href="{{=URL(r=request,args='request_reset_password')}}">lost password</a>
|
||||
{{pass}}
|
||||
{{pass}}
|
||||
</div>
|
||||
|
||||
<script language="javascript">
|
||||
<!--
|
||||
//<!--
|
||||
jQuery("#web2py_user_form input:visible:enabled:first").focus();
|
||||
//-->
|
||||
</script>
|
||||
|
||||
<!-- end "user" block -->
|
||||
|
||||
@@ -1,44 +1,90 @@
|
||||
<!doctype html>
|
||||
<!DOCTYPE html>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
|
||||
<meta http-equiv="P3P" content="CP=\"IDC DSP COR CURa ADMa OUR IND PHY ONL COM STA\"" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>{{=response.title or URL()}}</title>
|
||||
{{response.files.append(URL('static','css/styles.css'))}}
|
||||
{{
|
||||
response.files.append(URL('static','css/bootstrap.min.css'))
|
||||
#response.files.append(URL('static','css/styles.css'))
|
||||
response.files.append(URL('static','css/bootstrap_essentials.css'))
|
||||
# response.files.append(URL('static','css/bootstrap_adapters.css'))
|
||||
response.files.append(URL('static','css/bootstrap-responsive.min.css'))
|
||||
}}
|
||||
{{include 'web2py_ajax.html'}}
|
||||
<script>jQuery.noConflict();</script>
|
||||
</head>
|
||||
|
||||
<body class="{{=T('direction: ltr') == 'direction: rtl' and 'RTLbody' or ''}} {{block sectionclass}}home{{end}}">
|
||||
<div id="header">
|
||||
<h1 id="start">
|
||||
<a href="{{=URL('default', 'index')}}" class="button"><span>web2py™ {{=T('administrative interface')}}</span></a>
|
||||
</h1>
|
||||
{{if response.menu is not None:}}
|
||||
<ul id="menu">
|
||||
{{for _name,_active,_link in response.menu:}}
|
||||
<li>{{=A(SPAN(_name), _href=_link, _class=_active and 'button select' or 'button')}}</li>
|
||||
{{pass}}
|
||||
</ul>
|
||||
{{pass}}
|
||||
</div>
|
||||
<div id="main">
|
||||
<div id="main_inner">
|
||||
<div class="flash">{{=response.flash or ''}}</div>
|
||||
{{include}}
|
||||
</div>
|
||||
</div>
|
||||
<div id="footer" class="fixed">
|
||||
{{=T('Powered by')}} {{=A('web2py', _href='http://www.web2py.com')}}™ {{=T('created by')}} Massimo Di Pierro ©2007-{{=request.now.year}} -
|
||||
{{if hasattr(T,'get_possible_languages_info'):}}
|
||||
<span>
|
||||
{{=T('Admin language')}}
|
||||
<select name="adminlanguage" onchange="var date = new Date();cookieDate=date.setTime(date.getTime()+(100*24*60*60*1000));document.cookie='adminLanguage='+this.options[this.selectedIndex].id+'; expires='+cookieDate+'; path=/';window.location.reload()">
|
||||
{{for langinfo in sorted([(code,info[1]) for code,info in T.get_possible_languages_info().iteritems() if code != 'default']):}}
|
||||
<option {{=T.accepted_language==langinfo[0] and 'selected' or ''}} {{='id='+langinfo[0]}} >{{=langinfo[1]}}</option>
|
||||
{{pass}}
|
||||
</select>
|
||||
</span>
|
||||
{{pass}}
|
||||
</div>
|
||||
|
||||
<!-- NAVBAR
|
||||
============== -->
|
||||
<div id="header" class="navbar navbar-inverse navbar-fixed-top">
|
||||
<div class="navbar-inner">
|
||||
<div class="container-fluid">
|
||||
<button type="button" class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
</button>
|
||||
<div id="start" class="brand_wrapper">
|
||||
<a href="{{=URL('default', 'index')}}" class="button brand" ><span>web2py™ {{=T('administrative interface')}}</span></a>
|
||||
</div>
|
||||
<div class="nav-collapse">
|
||||
{{if response.menu is not None:}}
|
||||
<ul id="menu" class="nav pull-right">
|
||||
{{for _name,_active,_link in response.menu:}}
|
||||
<li>{{=A(SPAN(_name), _href=_link, _class=_active and 'button select' or 'button')}}</li>
|
||||
{{pass}}
|
||||
</ul>
|
||||
{{pass}}
|
||||
</div><!--/.nav-collapse -->
|
||||
</div><!-- /container-fluid -->
|
||||
</div><!-- /navbar-inner -->
|
||||
</div><!-- /#header -->
|
||||
|
||||
<!-- MAIN
|
||||
=========== -->
|
||||
<div id="main" class="container-fluid">
|
||||
<div id="main_inner" class="row-fluid">
|
||||
<div class="span12">
|
||||
<div class="flash alert">{{=response.flash or ''}}</div>
|
||||
{{include}}
|
||||
</div><!-- /main span12 -->
|
||||
</div><!-- /main row-fluid -->
|
||||
</div><!-- /#main -->
|
||||
|
||||
<!-- FOOTER
|
||||
============== -->
|
||||
<footer id="footer" class="fixed">
|
||||
<p><span>{{=T('Powered by')}} {{=A('web2py', _href='http://www.web2py.com')}}™ {{=T('created by')}} Massimo Di Pierro ©2007-{{=request.now.year}}
|
||||
{{if hasattr(T,'get_possible_languages_info'):}}
|
||||
- {{=T('Admin language')}}</span>
|
||||
<select name="adminlanguage" onchange="var date = new Date();cookieDate=date.setTime(date.getTime()+(100*24*60*60*1000));document.cookie='adminLanguage='+this.options[this.selectedIndex].id+'; expires='+cookieDate+'; path=/';window.location.reload()">
|
||||
{{for langinfo in sorted([(code,info[1]) for code,info in T.get_possible_languages_info().iteritems() if code != 'default']):}}
|
||||
<option {{=T.accepted_language==langinfo[0] and 'selected' or ''}} {{='id='+langinfo[0]}} >{{=langinfo[1]}}</option>
|
||||
{{pass}}
|
||||
</select>
|
||||
{{else:}}
|
||||
</span>{{pass}}
|
||||
</p>
|
||||
</footer><!-- /#footer -->
|
||||
|
||||
<!-- BS JAVASCRIPT
|
||||
====================== -->
|
||||
<script src="{{=URL('static','js/bootstrap.min.js')}}"></script>
|
||||
<script type="text/javascript">
|
||||
jQuery(document).ready(function(){
|
||||
jQuery("[rel=tooltip]").tooltip();
|
||||
});
|
||||
</script>
|
||||
{{if request.function in ('index','site'):}}
|
||||
<a style="position:fixed;bottom:0;left:0;z-index:1000" href="https://groups.google.com/forum/?fromgroups#!forum/web2py" target="_blank">
|
||||
<!-- http://webchat.freenode.net/?channels=web2py" //-->
|
||||
<img src="{{=URL('static','images/questions.png')}}" />
|
||||
</a>
|
||||
{{pass}}
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -7,7 +7,6 @@ for application "{{=request.args[0]}}"</h2>
|
||||
<h3>Commit form</h3>
|
||||
{{=form}}
|
||||
|
||||
|
||||
{{if repo['.'].rev()>=0:}}
|
||||
<h3>Last Revision</h3>
|
||||
<table>
|
||||
|
||||
@@ -1,92 +1,42 @@
|
||||
{{extend 'layout.html'}}
|
||||
|
||||
{{block sectionclass}}shell{{end}}
|
||||
<!--style type="text/css">
|
||||
|
||||
.prompt, #output {
|
||||
width: 45em;
|
||||
border: 1px solid #CCCCCC;
|
||||
font-size: 10pt;
|
||||
margin: 0.5em;
|
||||
padding: 0.5em;
|
||||
padding-right: 0em;
|
||||
overflow: auto;
|
||||
wrap: hard;
|
||||
}
|
||||
|
||||
#output {
|
||||
height:250px;overflow:auto;
|
||||
}
|
||||
|
||||
#toolbar {
|
||||
margin-left: 0.5em;
|
||||
padding-left: 0.5em;
|
||||
}
|
||||
|
||||
#caret {
|
||||
width: 2.5em;
|
||||
margin-right: 0px;
|
||||
padding-right: 0px;
|
||||
border-right: 0px;
|
||||
}
|
||||
|
||||
#statement {
|
||||
width: 43em;
|
||||
margin-left: -1em;
|
||||
padding-left: 0px;
|
||||
border-left: 0px;
|
||||
background-position: top right;
|
||||
background-repeat: no-repeat;
|
||||
}
|
||||
|
||||
.processing {
|
||||
background-image: url("{{=URL('static','images/spinner.gif')}}");
|
||||
}
|
||||
|
||||
#ajax-status {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.message {
|
||||
color: #8AD;
|
||||
font-weight: bold;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.error {
|
||||
color: #F44;
|
||||
}
|
||||
|
||||
.username {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
</style-->
|
||||
|
||||
<!-- begin "shell" block -->
|
||||
<div id="wrapper">
|
||||
<textarea id="output" readonly="readonly">web2py Shell {{=request.env.web2py_version}}</textarea>
|
||||
<div class="row-fluid">
|
||||
<div class="output-wrapper span8">
|
||||
<textarea id="output" readonly="readonly">web2py Shell {{=request.env.web2py_version}}</textarea>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<form id="form" action="{{=URL('callback',args=app)}}" method="get">
|
||||
<div id="shellwrapper">
|
||||
<div id="caret">>>></div>
|
||||
<div class="tooltip">
|
||||
<textarea class="prompt" name="statement" id="statement"></textarea>
|
||||
<span>Type some Python code in here and hit Return (Enter) to execute it.</span>
|
||||
</div>
|
||||
<div id="autoscroll" style="cursor:pointer;float:right;">autoscroll</div>
|
||||
</div>
|
||||
</form>
|
||||
<div class="row-fluid">
|
||||
<form id="form" action="{{=URL(r=request,f='callback',args=app)}}" method="get" class="span8">
|
||||
<div id="shellwrapper">
|
||||
<div class="prompt-wrapper">
|
||||
<div class="prompt-container">
|
||||
<textarea class="prompt" name="statement" id="statement"></textarea>
|
||||
</div>
|
||||
<a href="#" rel="tooltip" data-placement="right" data-original-title="{{=T('Type some Python code in here and hit Return (Enter) to execute it.')}}">
|
||||
{{=helpicon()}}
|
||||
<span>Type some Python code in here and hit Return (Enter) to execute it.</span>
|
||||
</a>
|
||||
</div>
|
||||
<div id="caret"><span>>>></span></div>
|
||||
<div id="autoscroll">autoscroll</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div class="row-fluid clearfix">
|
||||
<div class="help alert alert-info span6">
|
||||
<ul>
|
||||
<li>Using the shell may lock the database to other users of this app.</li>
|
||||
<li>Each db statement is automatically committed.</li>
|
||||
<li>Creating new tables dynamically is not allowed.</li>
|
||||
<li>Models are automatically imported in the shell.</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="help">
|
||||
<ul>
|
||||
<li>Using the shell may lock the database to other users of this app.</li>
|
||||
<li>Each db statement is automatically committed.</li>
|
||||
<li>Creating new tables dynamically is not allowed.</li>
|
||||
<li>Models are automatically imported in the shell.</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<script type="text/javascript" src="{{=URL('static', 'js/autoscroll.js')}}"></script>
|
||||
|
||||
<script type="text/javascript">
|
||||
@@ -103,7 +53,7 @@ jQuery(document).ready(function(){
|
||||
if(s.length>1 && s.substr(s.length-1,1)=='\n' && s.substr(s.length-2,1)!=':' &&
|
||||
(s.indexOf(':\n ')<0 || s.substr(s.length-2,1)=='\n')) {
|
||||
t.val('');
|
||||
jQuery.post("{{=URL('callback',args=app)}}",
|
||||
jQuery.post("{{=URL(r=request,f='callback',args=app)}}",
|
||||
{statement:s},function(data){o.html(o.html()+data).attr('scrollTop',o.attr('scrollHeight'));});
|
||||
} else { };
|
||||
if(event.keyCode==RETURN){
|
||||
@@ -163,4 +113,4 @@ jQuery(document).ready(function(){
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
<!-- end "shell" block -->
|
||||
@@ -3,6 +3,7 @@
|
||||
var w2p_ajax_confirm_message = "{{=T('Are you sure you want to delete this object?')}}";
|
||||
var w2p_ajax_date_format = "{{=T('%Y-%m-%d')}}";
|
||||
var w2p_ajax_datetime_format = "{{=T('%Y-%m-%d %H:%M:%S')}}";
|
||||
var ajax_error_500 = '{{=XML(T('An error occured, please %s the page') % A(T('reload'), _href=URL(args=request.args, vars=request.vars))) }}'
|
||||
//--></script>
|
||||
{{
|
||||
response.files.insert(0,URL('static','js/jquery.js'))
|
||||
|
||||
@@ -1,14 +1,15 @@
|
||||
{{extend 'layout.html'}}
|
||||
|
||||
{{block sectionclass}}generated{{end}}
|
||||
|
||||
<a class="button" href="{{=URL(app,'default','index')}}">Open new app in new window</a>
|
||||
<a class="button" href="{{=URL('step1')}}">Back to wizard</a>
|
||||
<a class="button" href="{{=URL('default','design',args=app)}}">Admin design page</a>
|
||||
{{if have_mercurial:}}
|
||||
<a class="button" href="{{=URL('mercurial','commit',args=app)}}">Admin versioning page</a>
|
||||
{{pass}}
|
||||
<a class="button" href="{{=URL(app,'appadmin','index')}}">Database administration</a>
|
||||
<!-- begin "generated" block -->
|
||||
<div class="controls row-buttons">
|
||||
{{=button(URL(app,'default','index'), T('Open new app in new window'))}}
|
||||
{{=button(URL('step1'), T('Back to wizard'))}}
|
||||
{{=button(URL('default','design',args=app), T('Admin design page'))}}
|
||||
{{if have_mercurial:}}
|
||||
{{=button(URL('mercurial','commit',args=app), T('Admin versioning page'))}}
|
||||
{{pass}}
|
||||
{{=button(URL(app,'appadmin','index'), T('Database administration'))}}
|
||||
</div>
|
||||
<br/><br/>
|
||||
<iframe style="width: 100%; height: 100%; min-height:600px" src="{{=URL(app,'default','index')}}"></iframe>
|
||||
|
||||
<!-- end "generated" block -->
|
||||
@@ -1,141 +1,183 @@
|
||||
{{extend 'layout.html'}}
|
||||
|
||||
{{block sectionclass}}step{{end}}
|
||||
|
||||
<!-- begin "step" block -->
|
||||
<h2>{{=T('New Application Wizard')}}</h2>
|
||||
|
||||
<div id="wizard_nav" class="f20 controls">
|
||||
{{if request.function=='index':}}
|
||||
<h3>{{=T('Start a new app')}}</h3>
|
||||
{{else:}}
|
||||
<div class="box">
|
||||
<h3>{{=T('Basics')}}</h3>
|
||||
<p>{{=button(URL('index'), T('restart'))}}</p>
|
||||
<p><strong>App Name:</strong> {{=session.app['name']}}</p>
|
||||
</div>
|
||||
<div class="box">
|
||||
<h3>Current settings</h3>
|
||||
<p>{{=button(URL('step1'), T('Edit'))}}</p>
|
||||
<ul id="current_settings">
|
||||
{{for key,value in session.app['params']:}}
|
||||
<li><b>{{=key}}:</b> {{=value}}</li>
|
||||
{{pass}}
|
||||
</ul>
|
||||
</div>
|
||||
<div class="box">
|
||||
<h3>Tables</h3>
|
||||
<p>{{=button(URL('step2'), T('edit all'))}}</p>
|
||||
<ul>
|
||||
{{for i,table in enumerate(session.app['tables']):}}
|
||||
<li>{{=button(URL('step3',args=i), T('Edit'))}} <strong>{{=table}}</strong></li>
|
||||
{{pass}}
|
||||
</ul>
|
||||
</div>
|
||||
<div class="box">
|
||||
<h3>Pages</h3>
|
||||
<p>{{=button(URL('step4'), T('edit all'))}}</p>
|
||||
<ul>
|
||||
{{for i,page in enumerate(session.app['pages']):}}
|
||||
<li>{{=button(URL('step5',args=i), T('Edit'))}} <strong>{{=page}}</strong></li>
|
||||
{{pass}}
|
||||
</ul>
|
||||
</div>
|
||||
<div class="box">
|
||||
<h3>{{=T('Generate')}}</h3>
|
||||
<p>{{=button(URL('step6'), T('go!'))}}</p>
|
||||
</div>
|
||||
{{pass}}
|
||||
<div class='row-fluid'>
|
||||
<div id="wizard_nav" class="f20 controls span3">
|
||||
{{if request.function=='index':}}
|
||||
<h3>{{=T('Start a new app')}}</h3>
|
||||
{{else:}}
|
||||
<div class="box first-box">
|
||||
<h3>{{=T('Basics')}}</h3>
|
||||
<p>{{=button(URL('index'), T('restart'))}}</p>
|
||||
<p><strong>App Name:</strong> {{=session.app['name']}}</p>
|
||||
</div>
|
||||
<div class="box">
|
||||
<h3>Current settings</h3>
|
||||
<p>{{=button(URL('step1')+'/#xwizard_form', T('Edit'))}}</p>
|
||||
<ul id="current_settings" class="unstyled">
|
||||
{{for key,value in session.app['params']:}}
|
||||
<li><b>{{=key}}:</b> {{=value}}</li>
|
||||
{{pass}}
|
||||
</ul>
|
||||
</div>
|
||||
<div class="box">
|
||||
<h3>Tables</h3>
|
||||
<p>{{=button(URL('step2')+'/#xwizard_form', T('edit all'))}}</p>
|
||||
<ul class="unstyled">
|
||||
{{for i,table in enumerate(session.app['tables']):}}
|
||||
<li>{{=button(URL('step3',args=[i])+'/#xwizard_form', T('Edit'))}} <strong>{{=table}}</strong></li>
|
||||
{{pass}}
|
||||
</ul>
|
||||
</div>
|
||||
<div class="box">
|
||||
<h3>Pages</h3>
|
||||
<p>{{=button(URL('step4')+'/#xwizard_form', T('edit all'))}}</p>
|
||||
<ul class="unstyled">
|
||||
{{for i,page in enumerate(session.app['pages']):}}
|
||||
<li>{{=button(URL('step5',args=i)+'/#xwizard_form', T('Edit'))}} <strong>{{=page}}</strong></li>
|
||||
{{pass}}
|
||||
</ul>
|
||||
</div>
|
||||
<div class="box">
|
||||
<h3>{{=T('Generate')}}</h3>
|
||||
<p>{{=button(URL('step6')+'/#xwizard_form', T('go!'))}}</p>
|
||||
</div>
|
||||
{{pass}}
|
||||
</div> <!-- /wizard nav -->
|
||||
<div id="wizard_form" class="fl20 controls span9" rel="pagebookmark"><span id="xwizard_form" class="hashstick"> </span>
|
||||
<!-- FORM -->
|
||||
{{if 'step' in request.function:}}
|
||||
<h3>{{=T('Step')}} {{=step}}</h3>
|
||||
{{if request.function!='step1':}}
|
||||
{{=button(URL('step' + str(int(request.function[-1])-1)) + '/#xwizard_form', T('back'))}}
|
||||
{{pass}}
|
||||
{{else:}}
|
||||
<h3>{{=T('Begin')}}</h3>
|
||||
{{pass}}
|
||||
{{if request.function in ('step1','step2','step3','step4','step5'):}}
|
||||
{{=button(URL('step6') + '/#xwizard_form', T('skip to generate'))}}
|
||||
{{pass}}
|
||||
<br /><br />
|
||||
{{if request.function in ('step1','step6'):}}
|
||||
{{pass}}
|
||||
{{if request.function!='step6':}}
|
||||
<div class="form row-fluid">
|
||||
{{=form.custom.begin}}
|
||||
{{ for fieldname in form.table.fields: }}
|
||||
{{if fieldname is not 'id':}}
|
||||
<label>{{=form.custom.label[fieldname]}}:</label>
|
||||
{{=form.custom.widget[fieldname]}}
|
||||
{{if fieldname=='layout_theme':}}
|
||||
<span class="help-inline">
|
||||
<img src="{{=LAYOUTS_APP}}/static/plugin_layouts/layouts/{{=dict(session.app['params'])['layout_theme']}}/preview.png" alt="" align="right" id="preview" class="img-polaroid"/>
|
||||
</span>
|
||||
{{pass}}
|
||||
{{pass}}
|
||||
{{pass}}
|
||||
<div class="controls"><button type="submit" class="btn">{{=T('Submit')}}</button></div>
|
||||
{{=form.custom.end}}
|
||||
</div>
|
||||
<script>
|
||||
jQuery(function(){
|
||||
var t=jQuery('#no_table_layout_theme');
|
||||
t.change(function(){
|
||||
jQuery('#preview').attr('src','{{=LAYOUTS_APP}}/static/plugin_layouts/layouts/'+t.val()+'/preview.png');
|
||||
});
|
||||
jQuery("#preview").error(function (){
|
||||
jQuery('#preview').attr('src','http://placehold.it/190x141&text=no+preview+available');
|
||||
});
|
||||
jQuery('ul[id$="_grow_input"] li').addClass('input-append');
|
||||
jQuery('ul[id$="_grow_input"] li a').addClass('btn');
|
||||
});
|
||||
</script>
|
||||
{{else:}}
|
||||
<div class="form row-fluid">
|
||||
{{=form.custom.begin}}
|
||||
{{ for fieldname in form.table.fields: }}
|
||||
{{if fieldname is not 'id':}}
|
||||
<div class="control-group">
|
||||
<label class="control-label">{{=form.custom.label[fieldname]}}:</label>
|
||||
<div class="controls">
|
||||
<label class="checkbox">{{=form.custom.widget[fieldname]}}</label>
|
||||
</div>
|
||||
</div>
|
||||
{{pass}}
|
||||
{{pass}}
|
||||
<div class="control-group">
|
||||
<label class="control-label empty"> </label>
|
||||
<div class="controls">
|
||||
<button type="submit" class="btn">{{=T('Submit')}}</button>
|
||||
</div>
|
||||
</div>
|
||||
{{=form.custom.end}}
|
||||
</div>
|
||||
{{pass}}
|
||||
<!-- INSTRUCTIONS -->
|
||||
<div class="box">
|
||||
<h4>Instructions</h4>
|
||||
<div class="row-fluid">
|
||||
<div class="help span7 alert alert-block alert-info">
|
||||
{{if request.function=='index':}}
|
||||
<ul class="unstyled">
|
||||
<li>Insert the name of a new app.</li>
|
||||
<li>If the app exists and was created with the wizard, you will be able to edit it, but any manual editing to the app <b>will be lost</b>.</li>
|
||||
</ul>
|
||||
{{elif request.function=='step1':}}
|
||||
<ul class="unstyled">
|
||||
<li>This Wizard will help you build a new web2py app.</li>
|
||||
<li>You can create an app with a name that already exists.</li>
|
||||
<li>If you do not have an email server set email server to "logging".</li>
|
||||
<li>If you want to use Janrain Engage for login: 1) Sign up for a <a href="http://www.janrain.com/products/engage">Janrain Engage</a> account; 2) Register you hostname, domain, and obtain an api key; 3) Set Login Config above to "domain:api_key".</li>
|
||||
<li>ATTENTION: you can use the wizard to download plugins BUT we cannot guarantee the stability or backward compatibility of plugins. Moreover plugins may conflict with each other. Anyway, we do recommend installing plugin "wiki" with adds CMS like capabilities to your app.</li>
|
||||
</ul>
|
||||
{{elif request.function=='step2':}}
|
||||
<ul class="unstyled">
|
||||
<li>List the names of table that you need.</li>
|
||||
<li>If you do not need authentication remove the table "auth_user".</li>
|
||||
<li>Press enter to create a new input row.</li>
|
||||
<li>Empty rows are ignored.</li>
|
||||
<li>Other tables for role based access control will be created automatically, and do not need to be listed.</li>
|
||||
<li>You will be able to add fields later.</li>
|
||||
</ul>
|
||||
{{elif request.function=='step3':}}
|
||||
<ul class="unstyled">
|
||||
<li>List the fields for this table (do not include an id field, it is automatic), for example "name unique" or "birthday date" or "image upload" or "comments multiple" or "description wiki required"</li>
|
||||
<li>The first keyword(s) for each entry will be used to generate a name for the table field and its label. You can use spaces an other unicode characters.</li>
|
||||
<li>Keywords "string" (default), "text", "integer", "boolean", "float", "double", "file", "date", "time", "datetime", "file", "upload" will be used to determine the field type and they will not be made part of the field name.</ li>
|
||||
<li>For a reference field use a field name, followed by the name of the referenced table.</li>
|
||||
<li>Other special keywords are "required", "notnull" or "notempty", "unique". They map into equivalent validators but (at this time) should only be used with string and text types.</li>
|
||||
<li>The keywords "html" and "wiki" force a text type and set a representation for the field value as sanitized HTML and MARKMIN resepectively.</li>
|
||||
<li>string, integer and reference fields can be "multiple", i.e. multiple values will be allowed</li>
|
||||
<li>For the "auth_user" table do not add attributes to the default fields (username, first_name, last_name, password and email). They are handled automatically.</li>
|
||||
<li>Some fields will be added automatically upon creation and handled automatically: "created_by", "created_on", "modified_by", "modified_on", "active" (only active fields can be selected).</li>
|
||||
<li>For every table "table" another table "table_archive" is created and it contains the previous versions of each record. This is only accessible via appadmin or programmatically.</li>
|
||||
</ul>
|
||||
{{elif request.function=='step4':}}
|
||||
<ul class="unstyled">
|
||||
<li>List the names of the pages you want to create.</li>
|
||||
<li>Some pages are listed automatically because they expose Create/Read/Update/Delete for each tables you have created.</li>
|
||||
<li>All pages, except "error" and those with name starting in underscore willbe listed in the menu. You will be able to edit the menu later.</li>
|
||||
<li>You should have page "index", the starting point of your app, and page "error", where web2py will redirect to in case of error.</li>
|
||||
</ul>
|
||||
{{elif request.function=='step5':}}
|
||||
<ul class="unstyled">
|
||||
<li>Use the markmin syntax to add text to your pages.</li>
|
||||
</ul>
|
||||
{{elif request.function=='step6':}}
|
||||
<ul class="unstyled">
|
||||
<li>Almost done. Click on the button above to create your new app.</li>
|
||||
<li>Once done you will be able to edit it as any normal web2py app.</li>
|
||||
</ul>
|
||||
{{pass}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div> <!-- /wizard form -->
|
||||
</div>
|
||||
|
||||
<div id="wizard_form" class="fl20 controls">
|
||||
|
||||
<!-- FORM -->
|
||||
|
||||
{{if 'step' in request.function:}}
|
||||
<h3>{{=T('Step')}} {{=step}}</h3>
|
||||
{{if request.function!='step1':}}
|
||||
{{=button(URL('step' + str(int(request.function[-1])-1)), T('back'))}}
|
||||
{{pass}}
|
||||
{{else:}}
|
||||
<h3>{{=T('Begin')}}</h3>
|
||||
{{pass}}
|
||||
{{if request.function in ('step1','step2','step3','step4','step5'):}}
|
||||
{{=button(URL('step6'), T('skip to generate'))}}
|
||||
{{pass}}
|
||||
<br /><br />
|
||||
{{if request.function in ('step1','step6'):}}
|
||||
<img src="{{=LAYOUTS_APP}}/static/plugin_layouts/layouts/{{=dict(session.app['params'])['layout_theme']}}/preview.png" alt="" align="right" id="preview"/>
|
||||
{{pass}}
|
||||
<div class="form">
|
||||
{{=form}}
|
||||
</div>
|
||||
<script>
|
||||
jQuery(function(){
|
||||
var t=jQuery('#no_table_layout_theme');
|
||||
t.change(function(){
|
||||
jQuery('#preview').attr('src','{{=LAYOUTS_APP}}/static/plugin_layouts/layouts/'+t.val()+'/preview.png');
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
<!-- INSTRUCTIONS -->
|
||||
<div class="box">
|
||||
<h4>Instructions</h4>
|
||||
<div class="help">
|
||||
{{if request.function=='index':}}
|
||||
<ul>
|
||||
<li>Insert the name of a new app.</li>
|
||||
<li>If the app exists and was created with the wizard, you will be able to edit it, but any manual editing to the app <b>will be lost</b>.</li>
|
||||
</ul>
|
||||
{{elif request.function=='step1':}}
|
||||
<ul>
|
||||
<li>This Wizard will help you build a new web2py app.</li>
|
||||
<li>You can create an app with a name that already exists.</li>
|
||||
<li>If you do not have an email server set email server to "logging".</li>
|
||||
<li>If you want to use Janrain Engage for login: 1) Sign up for a <a href="http://www.janrain.com/products/engage">Janrain Engage</a> account; 2) Register you hostname, domain, and obtain an api key; 3) Set Login Config above to "domain:api_key".</li>
|
||||
<li>ATTENTION: you can use the wizard to download plugins BUT we cannot guarantee the stability or backward compatibility of plugins. Moreover plugins may conflict with each other. Anyway, we do recommend installing plugin "wiki" with adds CMS like capabilities to your app.</li>
|
||||
</ul>
|
||||
{{elif request.function=='step2':}}
|
||||
<ul>
|
||||
<li>List the names of table that you need.</li>
|
||||
<li>If you do not need authentication remove the table "auth_user".</li>
|
||||
<li>Press enter to create a new input row.</li>
|
||||
<li>Empty rows are ignored.</li>
|
||||
<li>Other tables for role based access control will be created automatically, and do not need to be listed.</li>
|
||||
<li>You will be able to add fields later.</li>
|
||||
</ul>
|
||||
{{elif request.function=='step3':}}
|
||||
<ul>
|
||||
<li>List the fields for this table (do not include an id field, it is automatic), for example "name unique" or "birthday date" or "image upload" or "comments multiple" or "description wiki required"</li>
|
||||
<li>The first keyword(s) for each entry will be used to generate a name for the table field and its label. You can use spaces an other unicode characters.</li>
|
||||
<li>Keywords "string" (default), "text", "integer", "boolean", "float", "double", "file", "date", "time", "datetime", "file", "upload" will be used to determine the field type and they will not be made part of the field name.</ li>
|
||||
<li>For a reference field use a field name, followed by the name of the referenced table.</li>
|
||||
<li>Other special keywords are "required", "notnull" or "notempty", "unique". They map into equivalent validators but (at this time) should only be used with string and text types.</li>
|
||||
<li>The keywords "html" and "wiki" force a text type and set a representation for the field value as sanitized HTML and MARKMIN resepectively.</li>
|
||||
<li>string, integer and reference fields can be "multiple", i.e. multiple values will be allowed</li>
|
||||
<li>For the "auth_user" table do not add attributes to the default fields (username, first_name, last_name, password and email). They are handled automatically.</li>
|
||||
<li>Some fields will be added automatically upon creation and handled automatically: "created_by", "created_on", "modified_by", "modified_on", "active" (only active fields can be selected).</li>
|
||||
<li>For every table "table" another table "table_archive" is created and it contains the previous versions of each record. This is only accessible via appadmin or programmatically.</li>
|
||||
</ul>
|
||||
{{elif request.function=='step4':}}
|
||||
<ul>
|
||||
<li>List the names of the pages you want to create.</li>
|
||||
<li>Some pages are listed automatically because they expose Create/Read/Update/Delete for each tables you have created.</li>
|
||||
<li>All pages, except "error" and those with name starting in underscore willbe listed in the menu. You will be able to edit the menu later.</li>
|
||||
<li>You should have page "index", the starting point of your app, and page "error", where web2py will redirect to in case of error.</li>
|
||||
</ul>
|
||||
{{elif request.function=='step5':}}
|
||||
<ul>
|
||||
<li>Use the markmin syntax to add text to your pages.</li>
|
||||
</ul>
|
||||
{{elif request.function=='step6':}}
|
||||
<ul>
|
||||
<li>Almost done. Click on the button above to create your new app.</li>
|
||||
<li>Once done you will be able to edit it as any normal web2py app.</li>
|
||||
</ul>
|
||||
{{pass}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<script type="text/javascript">
|
||||
//jQuery(document).ready(function() {
|
||||
//jQuery(":input:visible:enabled:first").focus();
|
||||
//});
|
||||
</script>
|
||||
<!-- end "step" block -->
|
||||
@@ -11,6 +11,11 @@ import copy
|
||||
import gluon.contenttype
|
||||
import gluon.fileutils
|
||||
|
||||
try:
|
||||
import pygraphviz as pgv
|
||||
except ImportError:
|
||||
pgv = None
|
||||
|
||||
response.subtitle = 'Database Administration (appadmin)'
|
||||
|
||||
# ## critical --- make a copy of the environment
|
||||
@@ -314,6 +319,9 @@ def state():
|
||||
|
||||
|
||||
def ccache():
|
||||
cache.ram.initialize()
|
||||
cache.disk.initialize()
|
||||
|
||||
form = FORM(
|
||||
P(TAG.BUTTON(
|
||||
T("Clear CACHE?"), _type="submit", _name="yes", _value="yes")),
|
||||
@@ -380,7 +388,7 @@ def ccache():
|
||||
|
||||
return (hours, minutes, seconds)
|
||||
|
||||
for key, value in cache.ram.storage.items():
|
||||
for key, value in cache.ram.storage.iteritems():
|
||||
if isinstance(value, dict):
|
||||
ram['hits'] = value['hit_total'] - value['misses']
|
||||
ram['misses'] = value['misses']
|
||||
@@ -460,3 +468,103 @@ def ccache():
|
||||
|
||||
return dict(form=form, total=total,
|
||||
ram=ram, disk=disk, object_stats=hp != False)
|
||||
|
||||
|
||||
def table_template(table):
|
||||
from gluon.html import TR, TD, TABLE, TAG
|
||||
|
||||
def FONT(*args, **kwargs):
|
||||
return TAG.font(*args, **kwargs)
|
||||
|
||||
def types(field):
|
||||
f_type = field.type
|
||||
if not isinstance(f_type,str):
|
||||
return ' '
|
||||
elif f_type == 'string':
|
||||
return field.length
|
||||
elif f_type == 'id':
|
||||
return B('pk')
|
||||
elif f_type.startswith('reference') or \
|
||||
f_type.startswith('list:reference'):
|
||||
return B('fk')
|
||||
else:
|
||||
return ' '
|
||||
|
||||
# This is horribe HTML but the only one graphiz understands
|
||||
rows = []
|
||||
cellpadding = 4
|
||||
color = "#000000"
|
||||
bgcolor = "#FFFFFF"
|
||||
face = "Helvetica"
|
||||
face_bold = "Helvetica Bold"
|
||||
border = 0
|
||||
|
||||
rows.append(TR(TD(FONT(table, _face=face_bold, _color=bgcolor),
|
||||
_colspan=3, _cellpadding=cellpadding,
|
||||
_align="center", _bgcolor=color)))
|
||||
for row in db[table]:
|
||||
rows.append(TR(TD(FONT(row.name, _color=color, _face=face_bold),
|
||||
_align="left", _cellpadding=cellpadding,
|
||||
_border=border),
|
||||
TD(FONT(row.type, _color=color, _face=face),
|
||||
_align="left", _cellpadding=cellpadding,
|
||||
_border=border),
|
||||
TD(FONT(types(row), _color=color, _face=face),
|
||||
_align="center", _cellpadding=cellpadding,
|
||||
_border=border)))
|
||||
return "< %s >" % TABLE(*rows, **dict(_bgcolor=bgcolor, _border=1,
|
||||
_cellborder=0, _cellspacing=0)
|
||||
).xml()
|
||||
|
||||
|
||||
def bg_graph_model():
|
||||
graph = pgv.AGraph(layout='dot', directed=True, strict=False, rankdir='LR')
|
||||
|
||||
subgraphs = dict()
|
||||
for tablename in db.tables:
|
||||
if hasattr(db[tablename],'_meta_graphmodel'):
|
||||
meta_graphmodel = db[tablename]._meta_graphmodel
|
||||
else:
|
||||
meta_graphmodel = dict(group='Undefined', color='#ECECEC')
|
||||
|
||||
group = meta_graphmodel['group'].replace(' ', '')
|
||||
if not subgraphs.has_key(group):
|
||||
subgraphs[group] = dict(meta=meta_graphmodel, tables=[])
|
||||
subgraphs[group]['tables'].append(tablename)
|
||||
else:
|
||||
subgraphs[group]['tables'].append(tablename)
|
||||
|
||||
graph.add_node(tablename, name=tablename, shape='plaintext',
|
||||
label=table_template(tablename))
|
||||
|
||||
for n, key in enumerate(subgraphs.iterkeys()):
|
||||
graph.subgraph(nbunch=subgraphs[key]['tables'],
|
||||
name='cluster%d' % n,
|
||||
style='filled',
|
||||
color=subgraphs[key]['meta']['color'],
|
||||
label=subgraphs[key]['meta']['group'])
|
||||
|
||||
for tablename in db.tables:
|
||||
for field in db[tablename]:
|
||||
f_type = field.type
|
||||
if isinstance(f_type,str) and (
|
||||
f_type.startswith('reference') or
|
||||
f_type.startswith('list:reference')):
|
||||
referenced_table = f_type.split()[1].split('.')[0]
|
||||
n1 = graph.get_node(tablename)
|
||||
n2 = graph.get_node(referenced_table)
|
||||
graph.add_edge(n1, n2, color="#4C4C4C", label='')
|
||||
|
||||
graph.layout()
|
||||
#return graph.draw(format='png', prog='dot')
|
||||
if not request.args:
|
||||
return graph.draw(format='png', prog='dot')
|
||||
else:
|
||||
response.headers['Content-Disposition']='attachment;filename=graph.%s'%request.args(0)
|
||||
if request.args(0) == 'dot':
|
||||
return graph.string()
|
||||
else:
|
||||
return graph.draw(format=request.args(0), prog='dot')
|
||||
|
||||
def graph_model():
|
||||
return dict(databases=databases, pgv=pgv)
|
||||
|
||||
@@ -20,7 +20,7 @@ def what():
|
||||
import urllib
|
||||
try:
|
||||
images = XML(urllib.urlopen(
|
||||
'http://web2py.com/poweredby/default/images').read())
|
||||
'http://www.web2py.com/poweredby/default/images').read())
|
||||
except:
|
||||
images = []
|
||||
return response.render(images=images)
|
||||
@@ -61,11 +61,11 @@ def videos():
|
||||
|
||||
|
||||
def security():
|
||||
redirect('http://www.web2py.com/book/default/chapter/01#security')
|
||||
redirect('http://www.web2py.com/book/default/chapter/01#Security')
|
||||
|
||||
|
||||
def api():
|
||||
redirect('http://web2py.com/book/default/chapter/04#API')
|
||||
redirect('http://www.web2py.com/book/default/chapter/04#API')
|
||||
|
||||
|
||||
@cache('license', time_expire=cache_expire)
|
||||
@@ -74,10 +74,14 @@ def license():
|
||||
filename = os.path.join(request.env.gluon_parent, 'LICENSE')
|
||||
return response.render(dict(license=MARKMIN(read_file(filename))))
|
||||
|
||||
|
||||
def version():
|
||||
return 'Version %s.%s.%s (%s) %s' % request.env.web2py_version
|
||||
|
||||
if request.args(0)=='raw':
|
||||
return request.env.web2py_version
|
||||
from gluon.fileutils import parse_version
|
||||
(a, b, c, pre_release, build) = parse_version(request.env.web2py_version)
|
||||
return 'Version %i.%i.%i (%.4i-%.2i-%.2i %.2i:%.2i:%.2i) %s' % (
|
||||
a,b,c,build.year,build.month,build.day,
|
||||
build.hour,build.minute,build.second,pre_release)
|
||||
|
||||
@cache('examples', time_expire=cache_expire)
|
||||
def examples():
|
||||
|
||||
@@ -1,75 +1,49 @@
|
||||
session.forget()
|
||||
|
||||
response.menu = [['home', False, '/%s/default/index'
|
||||
% request.application], ['docs', True,
|
||||
'/%s/global/vars' % request.application]]
|
||||
|
||||
|
||||
def get(args):
|
||||
if args[0].startswith('__'):
|
||||
return None
|
||||
try:
|
||||
obj = globals(),get(args[0])
|
||||
for k in range(1,len(args)):
|
||||
obj = getattr(obj,args[k])
|
||||
return obj
|
||||
except:
|
||||
return None
|
||||
|
||||
def vars():
|
||||
"""the running controller function!"""
|
||||
|
||||
title = '.'.join(request.args)
|
||||
attributes = {}
|
||||
if not request.args:
|
||||
(
|
||||
doc,
|
||||
keys,
|
||||
t,
|
||||
c,
|
||||
d,
|
||||
value,
|
||||
) = (
|
||||
'Global variables',
|
||||
globals(),
|
||||
None,
|
||||
None,
|
||||
(),
|
||||
None,
|
||||
)
|
||||
(title, args) = ('globals()', '')
|
||||
(doc,keys,t,c,d,value)=('Global variables',globals(),None,None,[],None)
|
||||
elif len(request.args) < 3:
|
||||
args = '.'.join(request.args)
|
||||
try:
|
||||
doc = eval(args + '.__doc__')
|
||||
except:
|
||||
doc = 'no documentation'
|
||||
try:
|
||||
keys = eval('dir(%s)' % args)
|
||||
except:
|
||||
obj = get(request.args)
|
||||
if obj:
|
||||
doc = getattr(obj,'__doc__','no documentation')
|
||||
keys = dir(obj)
|
||||
t = type(obj)
|
||||
c = getattr(obj,'__class__',None)
|
||||
d = getattr(obj,'__bases__',None)
|
||||
|
||||
for key in keys:
|
||||
a = getattr(obj,key,None)
|
||||
if a and not isinstance(a,DAL):
|
||||
doc1 = getattr(a, '__doc__', '')
|
||||
t1 = type(a)
|
||||
c1 = getattr(a,'__class__',None)
|
||||
d1 = getattr(a,'__bases__',None)
|
||||
key = '.'.join(request.args)+'.'+key
|
||||
attributes[key] = (doc1, t1, c1, d1)
|
||||
else:
|
||||
doc = 'Unkown'
|
||||
keys = []
|
||||
t = eval('type(%s)' % args)
|
||||
try:
|
||||
c = eval('%s.__class__' % args)
|
||||
except:
|
||||
c = None
|
||||
try:
|
||||
d = eval('%s.__bases__' % args)
|
||||
except:
|
||||
d = None
|
||||
title = args
|
||||
args += '.'
|
||||
t = c = d = None
|
||||
else:
|
||||
raise HTTP(400)
|
||||
attributes = {}
|
||||
for key in keys:
|
||||
a = args + key
|
||||
if eval('isinstance(%s,SQLDB)' % a) or a == 'vars':
|
||||
continue
|
||||
try:
|
||||
doc1 = eval(a + '.__doc__')
|
||||
except:
|
||||
doc1 = 'no documentation'
|
||||
t1 = eval('type(%s)' % a)
|
||||
try:
|
||||
c1 = eval('%s.__class__' % a)
|
||||
except:
|
||||
c1 = None
|
||||
try:
|
||||
d1 = eval('%s.__bases__' % a)
|
||||
except:
|
||||
d1 = ()
|
||||
attributes[a] = (doc1, t1, c1, d1)
|
||||
return dict(
|
||||
title=title,
|
||||
args=args,
|
||||
args=request.args,
|
||||
t=t,
|
||||
c=c,
|
||||
d=d,
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
|
||||
def hello1():
|
||||
""" simple page without template """
|
||||
|
||||
@@ -53,13 +54,6 @@ def raisehttp():
|
||||
raise HTTP(400, 'internal error')
|
||||
|
||||
|
||||
def raiseexception():
|
||||
""" generates an exeption, logs the event and returns a ticket number """
|
||||
|
||||
1 / 0
|
||||
return 'oops'
|
||||
|
||||
|
||||
def servejs():
|
||||
""" serves a js document """
|
||||
|
||||
@@ -68,7 +62,6 @@ def servejs():
|
||||
gluon.contenttype.contenttype('.js')
|
||||
return 'alert("This is a Javascript document, it is not supposed to run!");'
|
||||
|
||||
|
||||
def makejson():
|
||||
import gluon.contrib.simplejson as sj
|
||||
return sj.dumps(['foo', {'bar': ('baz', None, 1.0, 2)}])
|
||||
@@ -99,7 +92,7 @@ def rss_aggregator():
|
||||
pubDate=datetime.datetime.now()) for entry in
|
||||
d.entries])
|
||||
response.headers['Content-Type'] = 'application/rss+xml'
|
||||
return rss2.dumps(rss)
|
||||
return rss.to_xml(encoding='utf-8')
|
||||
|
||||
|
||||
def ajaxwiki():
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
from gluon.contrib.spreadsheet import Sheet
|
||||
|
||||
|
||||
def callback():
|
||||
return cache.ram('sheet1', lambda: None, None).process(request)
|
||||
|
||||
|
||||
1
applications/examples/models/session.py
Normal file
@@ -0,0 +1 @@
|
||||
session.connect(request,response,cookie_key='yoursecret')
|
||||
1
applications/examples/static/403.html
Normal file
@@ -0,0 +1 @@
|
||||
403
|
||||
1
applications/examples/static/404.html
Normal file
@@ -0,0 +1 @@
|
||||
404
|
||||
1
applications/examples/static/500.html
Normal file
@@ -0,0 +1 @@
|
||||
500
|
||||
9
applications/examples/static/css/bootstrap-responsive.min.css
vendored
Normal file
9
applications/examples/static/css/bootstrap.min.css
vendored
Executable file
@@ -1,117 +1,16 @@
|
||||
footer-content {position: relative; bottom: 0; width: 100%;}
|
||||
|
||||
.statusbar {
|
||||
padding: 2px 0;
|
||||
border: 0;
|
||||
margin-bottom: 15px;
|
||||
background-color: #C1CDCD;
|
||||
/*background: url('../images/menu.png') repeat-x;*/
|
||||
}
|
||||
.statusbar a, .statusbar a:visited {
|
||||
color: #406361;
|
||||
}
|
||||
|
||||
.footer {
|
||||
position: relative;
|
||||
}
|
||||
.footer-content {
|
||||
height: 100%;
|
||||
position: absolute;
|
||||
}
|
||||
@import url(http://fonts.googleapis.com/css?family=Economica);
|
||||
@@import url(http://fonts.googleapis.com/css?family=Belleza);
|
||||
|
||||
body { font-family: Arial, Helvetica; }
|
||||
a, a:visited, a:hover, h1,h2,h3,h4,h5 {color: #658883}
|
||||
a.button {color: #658883}
|
||||
|
||||
.sf-menu li, .sf-menu li a { border-radius: 5px;}
|
||||
|
||||
.wrapper {
|
||||
background: url('../images/back-02.png') repeat-x;
|
||||
padding-top:10px;
|
||||
a.btn-danger, a.btn-warning, a.btn-success {color:white}
|
||||
h1,h2,h3,h4,h5 { font-family: "Economica", Arial, Helevtica; }
|
||||
body {
|
||||
background: url('../images/stripes.png') repeat-x;
|
||||
}
|
||||
h1 { font-size: 32px }
|
||||
h2 { font-size: 24px }
|
||||
h3 { font-size: 20px }
|
||||
h4 { font-size: 14px }
|
||||
sup {
|
||||
font-size: 0.5em;
|
||||
line-height: 2em;
|
||||
vertical-align: top;
|
||||
}
|
||||
ul { list-style: circle outside; padding-left: 30px;}
|
||||
|
||||
.frame {
|
||||
border: 3px solid #959595;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
.header h5 {
|
||||
float: left;
|
||||
}
|
||||
.logo: {
|
||||
float:left;
|
||||
}
|
||||
|
||||
.announce {
|
||||
text-align: center;
|
||||
color: white;
|
||||
top: 0;
|
||||
font-weight: bold;
|
||||
text-align: center;
|
||||
left: 0;
|
||||
position: relative;
|
||||
background: #000;
|
||||
border-radius: 5px;
|
||||
margin: 7px 0 15px;
|
||||
}
|
||||
.announce a {color: white}
|
||||
|
||||
input:focus, textarea:focus {background:#f0f0f0}
|
||||
|
||||
table.downloads { width:100%; }
|
||||
table.downloads th, table.downloads td {text-align:center;}
|
||||
table.downloads a.button { width: 150px; }
|
||||
th,td {padding-right: 10px;}
|
||||
|
||||
p {text-align: left;}
|
||||
|
||||
p + p {
|
||||
margin-bottom: .75em;
|
||||
}
|
||||
|
||||
strong {color: inherit;}
|
||||
|
||||
img.centered {
|
||||
margin: 0 auto;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.tagCloud {
|
||||
width: 100%;
|
||||
max-width: 489px;
|
||||
}
|
||||
.mainbody {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
.aboutW2P {
|
||||
margin-top: 23px;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
.aboutW2P p {
|
||||
padding: 0 0.5em;
|
||||
font-size: 1.15em;
|
||||
}
|
||||
.aboutW2P h3 {
|
||||
padding: 0 0.3em;
|
||||
}
|
||||
.userQuotes {
|
||||
/*border-top: #eee 2px solid;*/
|
||||
padding-top: 15px;
|
||||
}
|
||||
.userQuotes p {
|
||||
text-align: left;
|
||||
font-size: 111%;
|
||||
color: #777;
|
||||
}
|
||||
#menu {
|
||||
padding: 0.1em 0.5em;
|
||||
#header {
|
||||
margin-top: 40px;
|
||||
}
|
||||
.btn-180 {
|
||||
width: 180px;
|
||||
}
|
||||
629
applications/examples/static/css/skeleton.css
vendored
@@ -1,629 +0,0 @@
|
||||
/*
|
||||
* Skeleton V1.1
|
||||
* Copyright 2011, Dave Gamache
|
||||
* www.getskeleton.com
|
||||
* Free to use under the MIT license.
|
||||
* http://www.opensource.org/licenses/mit-license.php
|
||||
* 8/17/2011
|
||||
*/
|
||||
|
||||
|
||||
/* Table of Content
|
||||
==================================================
|
||||
#Reset & Basics
|
||||
#Basic Styles
|
||||
#Site Styles
|
||||
#Typography
|
||||
#Links
|
||||
#Lists
|
||||
#Images
|
||||
#Buttons
|
||||
#Tabs
|
||||
#Forms
|
||||
#Misc */
|
||||
|
||||
|
||||
/* #Reset & Basics (Inspired by E. Meyers)
|
||||
================================================== */
|
||||
html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
border: 0;
|
||||
font-size: 100%;
|
||||
font: inherit;
|
||||
vertical-align: baseline; }
|
||||
article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section {
|
||||
display: block; }
|
||||
body {
|
||||
line-height: 1; }
|
||||
// ol, ul { list-style: none; } /* WEB2PY EDIT */
|
||||
blockquote, q {
|
||||
quotes: none; }
|
||||
blockquote:before, blockquote:after,
|
||||
q:before, q:after {
|
||||
content: '';
|
||||
content: none; }
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0; }
|
||||
|
||||
|
||||
/* #Basic Styles
|
||||
================================================== */
|
||||
body {
|
||||
background: #fff;
|
||||
font: 14px/21px "HelveticaNeue", "Helvetica Neue", Helvetica, Arial, sans-serif;
|
||||
color: #444;
|
||||
-webkit-font-smoothing: antialiased; /* Fix for webkit rendering */
|
||||
-webkit-text-size-adjust: 100%;
|
||||
}
|
||||
|
||||
|
||||
/* #Typography
|
||||
================================================== */
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
color: #181818;
|
||||
font-family: "Georgia", "Times New Roman", Helvetica, Arial, sans-serif;
|
||||
font-weight: normal; }
|
||||
h1 a, h2 a, h3 a, h4 a, h5 a, h6 a { font-weight: inherit; }
|
||||
h1 { font-size: 46px; line-height: 50px; }
|
||||
h2 { font-size: 35px; line-height: 40px; }
|
||||
h3 { font-size: 28px; line-height: 34px; }
|
||||
h4 { font-size: 21px; line-height: 30px; }
|
||||
h5 { font-size: 17px; line-height: 24px; }
|
||||
h6 { font-size: 14px; line-height: 21px; }
|
||||
|
||||
.subheader { color: #777; }
|
||||
|
||||
p { margin: 0 0 20px 0; }
|
||||
p img { margin: 0; }
|
||||
p.lead { font-size: 21px; line-height: 27px; color: #777; }
|
||||
|
||||
em { font-style: italic; }
|
||||
strong { font-weight: bold; color: #333; }
|
||||
small { font-size: 80%; }
|
||||
|
||||
/* Blockquotes */
|
||||
blockquote, blockquote p { font-size: 17px; line-height: 24px; color: #777; font-style: italic; }
|
||||
blockquote { margin: 0 0 20px; padding: 9px 20px 0 19px;} /* WEB2PY EDIT */
|
||||
blockquote cite { display: block; font-size: 12px; color: #555; }
|
||||
blockquote cite:before { content: "\2014 \0020"; }
|
||||
blockquote cite a, blockquote cite a:visited, blockquote cite a:visited { color: #555; }
|
||||
|
||||
hr { border: solid #ddd; border-width: 1px 0 0; clear: both; margin: 10px 0 30px; height: 0; }
|
||||
|
||||
|
||||
/* #Links
|
||||
================================================== */
|
||||
a, a:visited { color: #333; text-decoration: underline; outline: 0; }
|
||||
a:hover, a:focus { color: #000; }
|
||||
p a, p a:visited { line-height: inherit; }
|
||||
|
||||
|
||||
/* #Lists
|
||||
================================================== */
|
||||
ul, ol { margin-bottom: 20px; }
|
||||
// ul { list-style: none outside; } /* WEB2PY EDIT */
|
||||
ol { list-style: decimal; }
|
||||
ol, ul.square, ul.circle, ul.disc { margin-left: 30px; }
|
||||
ul.square { list-style: square outside; }
|
||||
ul.circle { list-style: circle outside; }
|
||||
ul.disc { list-style: disc outside; }
|
||||
ul ul, ul ol,
|
||||
ol ol, ol ul { margin: 4px 0 5px 30px; font-size: 90%; }
|
||||
ul ul li, ul ol li,
|
||||
ol ol li, ol ul li { margin-bottom: 6px; }
|
||||
li { line-height: 18px; margin-bottom: 12px; }
|
||||
ul.large li { line-height: 21px; }
|
||||
li p { line-height: 21px; }
|
||||
|
||||
/* #Images
|
||||
================================================== */
|
||||
|
||||
img.scale-with-grid {
|
||||
max-width: 100%;
|
||||
height: auto; }
|
||||
|
||||
|
||||
/* #Buttons
|
||||
================================================== */
|
||||
|
||||
a.button,
|
||||
button,
|
||||
input[type="submit"],
|
||||
input[type="reset"],
|
||||
input[type="button"] {
|
||||
background: #eee; /* Old browsers */
|
||||
background: #eee -moz-linear-gradient(top, rgba(255,255,255,.2) 0%, rgba(0,0,0,.2) 100%); /* FF3.6+ */
|
||||
background: #eee -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(255,255,255,.2)), color-stop(100%,rgba(0,0,0,.2))); /* Chrome,Safari4+ */
|
||||
background: #eee -webkit-linear-gradient(top, rgba(255,255,255,.2) 0%,rgba(0,0,0,.2) 100%); /* Chrome10+,Safari5.1+ */
|
||||
background: #eee -o-linear-gradient(top, rgba(255,255,255,.2) 0%,rgba(0,0,0,.2) 100%); /* Opera11.10+ */
|
||||
background: #eee -ms-linear-gradient(top, rgba(255,255,255,.2) 0%,rgba(0,0,0,.2) 100%); /* IE10+ */
|
||||
background: #eee linear-gradient(top, rgba(255,255,255,.2) 0%,rgba(0,0,0,.2) 100%); /* W3C */
|
||||
border: 1px solid #aaa;
|
||||
border-top: 1px solid #ccc;
|
||||
border-left: 1px solid #ccc;
|
||||
padding: 4px 12px;
|
||||
-moz-border-radius: 3px;
|
||||
-webkit-border-radius: 3px;
|
||||
border-radius: 3px;
|
||||
color: #444;
|
||||
display: inline-block;
|
||||
font-size: 1em; /** WEB2PY EDIT **/
|
||||
font-weight: bold;
|
||||
text-decoration: none;
|
||||
text-shadow: 0 1px rgba(255, 255, 255, .75);
|
||||
cursor: pointer;
|
||||
margin-bottom: 5px; /** WEB2PY EDIT **/
|
||||
line-height: 21px;
|
||||
font-family: "HelveticaNeue", "Helvetica Neue", Helvetica, Arial, sans-serif; }
|
||||
|
||||
a.button:hover,
|
||||
button:hover,
|
||||
input[type="submit"]:hover,
|
||||
input[type="reset"]:hover,
|
||||
input[type="button"]:hover {
|
||||
color: #222;
|
||||
background: #ddd; /* Old browsers */
|
||||
background: #ddd -moz-linear-gradient(top, rgba(255,255,255,.3) 0%, rgba(0,0,0,.3) 100%); /* FF3.6+ */
|
||||
background: #ddd -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(255,255,255,.3)), color-stop(100%,rgba(0,0,0,.3))); /* Chrome,Safari4+ */
|
||||
background: #ddd -webkit-linear-gradient(top, rgba(255,255,255,.3) 0%,rgba(0,0,0,.3) 100%); /* Chrome10+,Safari5.1+ */
|
||||
background: #ddd -o-linear-gradient(top, rgba(255,255,255,.3) 0%,rgba(0,0,0,.3) 100%); /* Opera11.10+ */
|
||||
background: #ddd -ms-linear-gradient(top, rgba(255,255,255,.3) 0%,rgba(0,0,0,.3) 100%); /* IE10+ */
|
||||
background: #ddd linear-gradient(top, rgba(255,255,255,.3) 0%,rgba(0,0,0,.3) 100%); /* W3C */
|
||||
border: 1px solid #888;
|
||||
border-top: 1px solid #aaa;
|
||||
border-left: 1px solid #aaa; }
|
||||
|
||||
a.button:active,
|
||||
button:active,
|
||||
input[type="submit"]:active,
|
||||
input[type="reset"]:active,
|
||||
input[type="button"]:active {
|
||||
border: 1px solid #666;
|
||||
background: #ccc; /* Old browsers */
|
||||
background: #ccc -moz-linear-gradient(top, rgba(255,255,255,.35) 0%, rgba(10,10,10,.4) 100%); /* FF3.6+ */
|
||||
background: #ccc -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(255,255,255,.35)), color-stop(100%,rgba(10,10,10,.4))); /* Chrome,Safari4+ */
|
||||
background: #ccc -webkit-linear-gradient(top, rgba(255,255,255,.35) 0%,rgba(10,10,10,.4) 100%); /* Chrome10+,Safari5.1+ */
|
||||
background: #ccc -o-linear-gradient(top, rgba(255,255,255,.35) 0%,rgba(10,10,10,.4) 100%); /* Opera11.10+ */
|
||||
background: #ccc -ms-linear-gradient(top, rgba(255,255,255,.35) 0%,rgba(10,10,10,.4) 100%); /* IE10+ */
|
||||
background: #ccc linear-gradient(top, rgba(255,255,255,.35) 0%,rgba(10,10,10,.4) 100%); /* W3C */ }
|
||||
|
||||
.button.full-width,
|
||||
button.full-width,
|
||||
input[type="submit"].full-width,
|
||||
input[type="reset"].full-width,
|
||||
input[type="button"].full-width {
|
||||
width: 100%;
|
||||
padding-left: 0 !important;
|
||||
padding-right: 0 !important;
|
||||
text-align: center; }
|
||||
|
||||
|
||||
/* #Tabs (activate in tabs.js)
|
||||
================================================== */
|
||||
ul.tabs {
|
||||
display: block;
|
||||
margin: 0 0 20px 0;
|
||||
padding: 0;
|
||||
border-bottom: solid 1px #ddd; }
|
||||
ul.tabs li {
|
||||
display: block;
|
||||
width: auto;
|
||||
height: 30px;
|
||||
padding: 0;
|
||||
float: left;
|
||||
margin-bottom: 0; }
|
||||
ul.tabs li a {
|
||||
display: block;
|
||||
text-decoration: none;
|
||||
width: auto;
|
||||
height: 29px;
|
||||
padding: 0px 20px;
|
||||
line-height: 30px;
|
||||
border: solid 1px #ddd;
|
||||
border-width: 1px 1px 0 0;
|
||||
margin: 0;
|
||||
background: #f5f5f5;
|
||||
font-size: 13px; }
|
||||
ul.tabs li a.active {
|
||||
background: #fff;
|
||||
height: 30px;
|
||||
position: relative;
|
||||
top: -4px;
|
||||
padding-top: 4px;
|
||||
border-left-width: 1px;
|
||||
margin: 0 0 0 -1px;
|
||||
color: #111;
|
||||
-moz-border-radius-topleft: 2px;
|
||||
-webkit-border-top-left-radius: 2px;
|
||||
border-top-left-radius: 2px;
|
||||
-moz-border-radius-topright: 2px;
|
||||
-webkit-border-top-right-radius: 2px;
|
||||
border-top-right-radius: 2px; }
|
||||
ul.tabs li:first-child a.active {
|
||||
margin-left: 0; }
|
||||
ul.tabs li:first-child a {
|
||||
border-width: 1px 1px 0 1px;
|
||||
-moz-border-radius-topleft: 2px;
|
||||
-webkit-border-top-left-radius: 2px;
|
||||
border-top-left-radius: 2px; }
|
||||
ul.tabs li:last-child a {
|
||||
-moz-border-radius-topright: 2px;
|
||||
-webkit-border-top-right-radius: 2px;
|
||||
border-top-right-radius: 2px; }
|
||||
|
||||
ul.tabs-content { margin: 0; display: block; }
|
||||
ul.tabs-content > li { display:none; }
|
||||
ul.tabs-content > li.active { display: block; }
|
||||
|
||||
/* Clearfixing tabs for beautiful stacking */
|
||||
ul.tabs:before,
|
||||
ul.tabs:after {
|
||||
content: '\0020';
|
||||
display: block;
|
||||
overflow: hidden;
|
||||
visibility: hidden;
|
||||
width: 0;
|
||||
height: 0; }
|
||||
ul.tabs:after {
|
||||
clear: both; }
|
||||
ul.tabs {
|
||||
zoom: 1; }
|
||||
|
||||
|
||||
/* #Forms
|
||||
================================================== */
|
||||
|
||||
form {
|
||||
margin-bottom: 5px; } /** WEB2PY EDIT **/
|
||||
fieldset {
|
||||
margin-bottom: 5px; } /** WEB2PY EDIT **/
|
||||
input[type="text"],
|
||||
input[type="password"],
|
||||
input[type="email"],
|
||||
textarea,
|
||||
select {
|
||||
border: 1px solid #ccc;
|
||||
padding: 6px 4px;
|
||||
outline: none;
|
||||
-moz-border-radius: 2px;
|
||||
-webkit-border-radius: 2px;
|
||||
border-radius: 2px;
|
||||
font: 13px "HelveticaNeue", "Helvetica Neue", Helvetica, Arial, sans-serif;
|
||||
color: #777;
|
||||
margin: 0;
|
||||
width: 210px;
|
||||
max-width: 100%;
|
||||
// display: block; /** WEB2PY EDIT **/
|
||||
margin-bottom: 0; /** WEB2PY EDIT **/
|
||||
background: #fff; }
|
||||
select {
|
||||
padding: 0; }
|
||||
input[type="text"]:focus,
|
||||
input[type="password"]:focus,
|
||||
input[type="email"]:focus,
|
||||
textarea:focus {
|
||||
border: 1px solid #aaa;
|
||||
color: #444;
|
||||
-moz-box-shadow: 0 0 3px rgba(0,0,0,.2);
|
||||
-webkit-box-shadow: 0 0 3px rgba(0,0,0,.2);
|
||||
box-shadow: 0 0 3px rgba(0,0,0,.2); }
|
||||
textarea {
|
||||
min-height: 60px; }
|
||||
label,
|
||||
legend {
|
||||
display: block;
|
||||
font-weight: bold;
|
||||
font-size: 13px; }
|
||||
select {
|
||||
width: 220px; }
|
||||
input[type="checkbox"] {
|
||||
display: inline; }
|
||||
label span,
|
||||
legend span {
|
||||
font-weight: normal;
|
||||
font-size: 13px;
|
||||
color: #444; }
|
||||
|
||||
/* #Misc
|
||||
================================================== */
|
||||
.remove-bottom { margin-bottom: 0 !important; }
|
||||
.half-bottom { margin-bottom: 10px !important; }
|
||||
.add-bottom { margin-bottom: 20px !important; }
|
||||
|
||||
|
||||
/*
|
||||
* Skeleton V1.1
|
||||
* Copyright 2011, Dave Gamache
|
||||
* www.getskeleton.com
|
||||
* Free to use under the MIT license.
|
||||
* http://www.opensource.org/licenses/mit-license.php
|
||||
* 8/17/2011
|
||||
*/
|
||||
|
||||
/* Table of Content
|
||||
==================================================
|
||||
#Site Styles
|
||||
#Page Styles
|
||||
#Media Queries
|
||||
#Font-Face */
|
||||
|
||||
/* #Site Styles
|
||||
================================================== */
|
||||
|
||||
/* #Page Styles
|
||||
================================================== */
|
||||
|
||||
/* #Media Queries
|
||||
================================================== */
|
||||
|
||||
/* Smaller than standard 960 (devices and browsers) */
|
||||
@media only screen and (max-width: 959px) {}
|
||||
|
||||
/* Tablet Portrait size to standard 960 (devices and browsers) */
|
||||
@media only screen and (min-width: 768px) and (max-width: 959px) {}
|
||||
|
||||
/* All Mobile Sizes (devices and browser) */
|
||||
@media only screen and (max-width: 767px) {}
|
||||
|
||||
/* Mobile Landscape Size to Tablet Portrait (devices and browsers) */
|
||||
@media only screen and (min-width: 480px) and (max-width: 767px) {}
|
||||
|
||||
/* Mobile Portrait Size to Mobile Landscape Size (devices and browsers) */
|
||||
@media only screen and (max-width: 479px) {}
|
||||
|
||||
|
||||
/* #Font-Face
|
||||
================================================== */
|
||||
/* This is the proper syntax for an @font-face file
|
||||
Just create a "fonts" folder at the root,
|
||||
copy your FontName into code below and remove
|
||||
comment brackets */
|
||||
|
||||
/* @font-face {
|
||||
font-family: 'FontName';
|
||||
src: url('../fonts/FontName.eot');
|
||||
src: url('../fonts/FontName.eot?iefix') format('eot'),
|
||||
url('../fonts/FontName.woff') format('woff'),
|
||||
url('../fonts/FontName.ttf') format('truetype'),
|
||||
url('../fonts/FontName.svg#webfontZam02nTh') format('svg');
|
||||
font-weight: normal;
|
||||
font-style: normal; }
|
||||
*//*
|
||||
* Skeleton V1.1
|
||||
* Copyright 2011, Dave Gamache
|
||||
* www.getskeleton.com
|
||||
* Free to use under the MIT license.
|
||||
* http://www.opensource.org/licenses/mit-license.php
|
||||
* 8/17/2011
|
||||
*/
|
||||
|
||||
|
||||
/* Table of Contents
|
||||
==================================================
|
||||
#Base 960 Grid
|
||||
#Tablet (Portrait)
|
||||
#Mobile (Portrait)
|
||||
#Mobile (Landscape)
|
||||
#Clearing */
|
||||
|
||||
|
||||
|
||||
/* #Base 960 Grid
|
||||
================================================== */
|
||||
|
||||
.container { position: relative; width: 960px; margin: 0 auto; padding: 0; }
|
||||
.column, .columns { float: left; display: inline; margin-left: 10px; margin-right: 10px; }
|
||||
.row { margin-bottom: 20px; }
|
||||
|
||||
/* Nested Column Classes */
|
||||
.column.alpha, .columns.alpha { margin-left: 0; }
|
||||
.column.omega, .columns.omega { margin-right: 0; }
|
||||
|
||||
/* Base Grid */
|
||||
.container .one.column { width: 40px; }
|
||||
.container .two.columns { width: 100px; }
|
||||
.container .three.columns { width: 160px; }
|
||||
.container .four.columns { width: 220px; }
|
||||
.container .five.columns { width: 280px; }
|
||||
.container .six.columns { width: 340px; }
|
||||
.container .seven.columns { width: 400px; }
|
||||
.container .eight.columns { width: 460px; }
|
||||
.container .nine.columns { width: 520px; }
|
||||
.container .ten.columns { width: 580px; }
|
||||
.container .eleven.columns { width: 640px; }
|
||||
.container .twelve.columns { width: 700px; }
|
||||
.container .thirteen.columns { width: 760px; }
|
||||
.container .fourteen.columns { width: 820px; }
|
||||
.container .fifteen.columns { width: 880px; }
|
||||
.container .sixteen.columns { width: 940px; }
|
||||
|
||||
.container .one-third.column { width: 300px; }
|
||||
.container .two-thirds.column { width: 620px; }
|
||||
|
||||
/* Offsets */
|
||||
.container .offset-by-one { padding-left: 60px; }
|
||||
.container .offset-by-two { padding-left: 120px; }
|
||||
.container .offset-by-three { padding-left: 180px; }
|
||||
.container .offset-by-four { padding-left: 240px; }
|
||||
.container .offset-by-five { padding-left: 300px; }
|
||||
.container .offset-by-six { padding-left: 360px; }
|
||||
.container .offset-by-seven { padding-left: 420px; }
|
||||
.container .offset-by-eight { padding-left: 480px; }
|
||||
.container .offset-by-nine { padding-left: 540px; }
|
||||
.container .offset-by-ten { padding-left: 600px; }
|
||||
.container .offset-by-eleven { padding-left: 660px; }
|
||||
.container .offset-by-twelve { padding-left: 720px; }
|
||||
.container .offset-by-thirteen { padding-left: 780px; }
|
||||
.container .offset-by-fourteen { padding-left: 840px; }
|
||||
.container .offset-by-fifteen { padding-left: 900px; }
|
||||
|
||||
|
||||
|
||||
/* #Tablet (Portrait)
|
||||
================================================== */
|
||||
|
||||
/* Note: Design for a width of 768px */
|
||||
|
||||
@media only screen and (min-width: 768px) and (max-width: 959px) {
|
||||
.container { width: 768px; }
|
||||
.container .column,
|
||||
.container .columns { margin-left: 10px; margin-right: 10px; }
|
||||
.column.alpha, .columns.alpha { margin-left: 0; margin-right: 10px; }
|
||||
.column.omega, .columns.omega { margin-right: 0; margin-left: 10px; }
|
||||
|
||||
.container .one.column { width: 28px; }
|
||||
.container .two.columns { width: 76px; }
|
||||
.container .three.columns { width: 124px; }
|
||||
.container .four.columns { width: 172px; }
|
||||
.container .five.columns { width: 220px; }
|
||||
.container .six.columns { width: 268px; }
|
||||
.container .seven.columns { width: 316px; }
|
||||
.container .eight.columns { width: 364px; }
|
||||
.container .nine.columns { width: 412px; }
|
||||
.container .ten.columns { width: 460px; }
|
||||
.container .eleven.columns { width: 508px; }
|
||||
.container .twelve.columns { width: 556px; }
|
||||
.container .thirteen.columns { width: 604px; }
|
||||
.container .fourteen.columns { width: 652px; }
|
||||
.container .fifteen.columns { width: 700px; }
|
||||
.container .sixteen.columns { width: 748px; }
|
||||
|
||||
.container .one-third.column { width: 236px; }
|
||||
.container .two-thirds.column { width: 492px; }
|
||||
|
||||
/* Offsets */
|
||||
.container .offset-by-one { padding-left: 48px; }
|
||||
.container .offset-by-two { padding-left: 96px; }
|
||||
.container .offset-by-three { padding-left: 144px; }
|
||||
.container .offset-by-four { padding-left: 192px; }
|
||||
.container .offset-by-five { padding-left: 240px; }
|
||||
.container .offset-by-six { padding-left: 288px; }
|
||||
.container .offset-by-seven { padding-left: 336px; }
|
||||
.container .offset-by-eight { padding-left: 348px; }
|
||||
.container .offset-by-nine { padding-left: 432px; }
|
||||
.container .offset-by-ten { padding-left: 480px; }
|
||||
.container .offset-by-eleven { padding-left: 528px; }
|
||||
.container .offset-by-twelve { padding-left: 576px; }
|
||||
.container .offset-by-thirteen { padding-left: 624px; }
|
||||
.container .offset-by-fourteen { padding-left: 672px; }
|
||||
.container .offset-by-fifteen { padding-left: 720px; }
|
||||
}
|
||||
|
||||
|
||||
/* #Mobile (Portrait)
|
||||
================================================== */
|
||||
|
||||
/* Note: Design for a width of 320px */
|
||||
|
||||
@media only screen and (max-width: 767px) {
|
||||
.container { width: 300px; }
|
||||
.columns, .column { margin: 0; }
|
||||
|
||||
.container .one.column,
|
||||
.container .two.columns,
|
||||
.container .three.columns,
|
||||
.container .four.columns,
|
||||
.container .five.columns,
|
||||
.container .six.columns,
|
||||
.container .seven.columns,
|
||||
.container .eight.columns,
|
||||
.container .nine.columns,
|
||||
.container .ten.columns,
|
||||
.container .eleven.columns,
|
||||
.container .twelve.columns,
|
||||
.container .thirteen.columns,
|
||||
.container .fourteen.columns,
|
||||
.container .fifteen.columns,
|
||||
.container .sixteen.columns,
|
||||
.container .one-third.column,
|
||||
.container .two-thirds.column { width: 300px; }
|
||||
|
||||
/* Offsets */
|
||||
.container .offset-by-one,
|
||||
.container .offset-by-two,
|
||||
.container .offset-by-three,
|
||||
.container .offset-by-four,
|
||||
.container .offset-by-five,
|
||||
.container .offset-by-six,
|
||||
.container .offset-by-seven,
|
||||
.container .offset-by-eight,
|
||||
.container .offset-by-nine,
|
||||
.container .offset-by-ten,
|
||||
.container .offset-by-eleven,
|
||||
.container .offset-by-twelve,
|
||||
.container .offset-by-thirteen,
|
||||
.container .offset-by-fourteen,
|
||||
.container .offset-by-fifteen { padding-left: 0; }
|
||||
|
||||
}
|
||||
|
||||
|
||||
/* #Mobile (Landscape)
|
||||
================================================== */
|
||||
|
||||
/* Note: Design for a width of 480px */
|
||||
|
||||
@media only screen and (min-width: 480px) and (max-width: 767px) {
|
||||
.container { width: 420px; }
|
||||
.columns, .column { margin: 0; }
|
||||
|
||||
.container .one.column,
|
||||
.container .two.columns,
|
||||
.container .three.columns,
|
||||
.container .four.columns,
|
||||
.container .five.columns,
|
||||
.container .six.columns,
|
||||
.container .seven.columns,
|
||||
.container .eight.columns,
|
||||
.container .nine.columns,
|
||||
.container .ten.columns,
|
||||
.container .eleven.columns,
|
||||
.container .twelve.columns,
|
||||
.container .thirteen.columns,
|
||||
.container .fourteen.columns,
|
||||
.container .fifteen.columns,
|
||||
.container .sixteen.columns,
|
||||
.container .one-third.column,
|
||||
.container .two-thirds.column { width: 420px; }
|
||||
}
|
||||
|
||||
|
||||
/* #Clearing
|
||||
================================================== */
|
||||
|
||||
/* Self Clearing Goodness */
|
||||
.container:after { content: "\0020"; display: block; height: 0; clear: both; visibility: hidden; }
|
||||
|
||||
/* Use clearfix class on parent to clear nested columns,
|
||||
or wrap each row of columns in a <div class="row"> */
|
||||
.clearfix:before,
|
||||
.clearfix:after,
|
||||
.row:before,
|
||||
.row:after {
|
||||
content: '\0020';
|
||||
display: block;
|
||||
overflow: hidden;
|
||||
visibility: hidden;
|
||||
width: 0;
|
||||
height: 0; }
|
||||
.row:after,
|
||||
.clearfix:after {
|
||||
clear: both; }
|
||||
.row,
|
||||
.clearfix {
|
||||
zoom: 1; }
|
||||
|
||||
/* You can also use a <br class="clear" /> to clear columns */
|
||||
.clear {
|
||||
clear: both;
|
||||
display: block;
|
||||
overflow: hidden;
|
||||
visibility: hidden;
|
||||
width: 0;
|
||||
height: 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,152 +0,0 @@
|
||||
|
||||
/*** ESSENTIAL STYLES ***/
|
||||
.sf-menu, .sf-menu * {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
list-style: none;
|
||||
}
|
||||
.sf-menu {
|
||||
line-height: 1.0;
|
||||
}
|
||||
.sf-menu ul {
|
||||
position: absolute;
|
||||
top: -999em;
|
||||
width: 10em; /* left offset of submenus need to match (see below) */
|
||||
}
|
||||
.sf-menu ul li {
|
||||
width: 100%;
|
||||
}
|
||||
.sf-menu li:hover {
|
||||
visibility: inherit; /* fixes IE7 'sticky bug' */
|
||||
}
|
||||
.sf-menu li {
|
||||
float: left;
|
||||
position: relative;
|
||||
}
|
||||
.sf-menu a {
|
||||
padding: 5px;
|
||||
display: block;
|
||||
position: relative;
|
||||
}
|
||||
.sf-menu li:hover ul,
|
||||
.sf-menu li.sfHover ul {
|
||||
left: 0;
|
||||
top: 26px; /* match top ul list item height */
|
||||
z-index: 99;
|
||||
}
|
||||
ul.sf-menu li:hover li ul,
|
||||
ul.sf-menu li.sfHover li ul {
|
||||
top: -999em;
|
||||
}
|
||||
ul.sf-menu li li:hover ul,
|
||||
ul.sf-menu li li.sfHover ul {
|
||||
left: 10em; /* match ul width */
|
||||
top: 0;
|
||||
}
|
||||
ul.sf-menu li li:hover li ul,
|
||||
ul.sf-menu li li.sfHover li ul {
|
||||
top: -999em;
|
||||
}
|
||||
ul.sf-menu li li li:hover ul,
|
||||
ul.sf-menu li li li.sfHover ul {
|
||||
left: 10em; /* match ul width */
|
||||
top: 0;
|
||||
}
|
||||
|
||||
/*** DEMO SKIN ***/
|
||||
.sf-menu {
|
||||
float: left;
|
||||
/*margin-bottom: 1em;*/
|
||||
}
|
||||
.sf-menu a {
|
||||
padding-left: 1em;
|
||||
padding-right: 1em;
|
||||
text-decoration:none;
|
||||
}
|
||||
.sf-menu a, .sf-menu a:visited { /* visited pseudo selector so IE6 applies text colour*/
|
||||
// color: #959595;
|
||||
background-color: transparent;
|
||||
font-weight: bold;
|
||||
}
|
||||
.sf-menu li {
|
||||
background-color: transparent;
|
||||
}
|
||||
.sf-menu li li {
|
||||
background: #232323;
|
||||
text-align: left;
|
||||
}
|
||||
.sf-menu li li a {
|
||||
padding-top: 0.25em;
|
||||
padding-bottom: 0.25em;
|
||||
color: #959595;
|
||||
}
|
||||
.sf-menu li li li {
|
||||
background: #232323;
|
||||
text-align: left;
|
||||
}
|
||||
.sf-menu li li li a {
|
||||
padding-top: 0.25em;
|
||||
padding-bottom: 0.25em;
|
||||
color: #959595;
|
||||
}
|
||||
.sf-menu li:hover, .sf-menu a:focus, .sf-menu a:active, .sf-menu li.sfHover, .sf-menu a:hover {
|
||||
color: #FFFFFF;
|
||||
background-color: #303030;
|
||||
outline: 0;
|
||||
}
|
||||
|
||||
|
||||
/*** arrows **/
|
||||
.sf-menu a.sf-with-ul {
|
||||
padding-right: 2.25em;
|
||||
min-width: 1px; /* trigger IE7 hasLayout so spans position accurately */
|
||||
}
|
||||
.sf-sub-indicator {
|
||||
position: absolute;
|
||||
display: block;
|
||||
right: .75em;
|
||||
top: 1.05em; /* IE6 only */
|
||||
width: 10px;
|
||||
height: 10px;
|
||||
text-indent: -999em;
|
||||
overflow: hidden;
|
||||
background: url('../images/arrows-ffffff.png') no-repeat -10px -100px; /* 8-bit indexed alpha png. IE6 gets solid image only */
|
||||
}
|
||||
a > .sf-sub-indicator { /* give all except IE6 the correct values */
|
||||
top: .8em;
|
||||
background-position: 0 -100px; /* use translucent arrow for modern browsers*/
|
||||
}
|
||||
/* apply hovers to modern browsers */
|
||||
a:focus > .sf-sub-indicator,
|
||||
a:hover > .sf-sub-indicator,
|
||||
a:active > .sf-sub-indicator,
|
||||
li:hover > a > .sf-sub-indicator,
|
||||
li.sfHover > a > .sf-sub-indicator {
|
||||
background-position: -10px -100px; /* arrow hovers for modern browsers*/
|
||||
}
|
||||
|
||||
/* point right for anchors in subs */
|
||||
.sf-menu ul .sf-sub-indicator { background-position: -10px 0; }
|
||||
.sf-menu ul a > .sf-sub-indicator { background-position: 0 0; }
|
||||
/* apply hovers to modern browsers */
|
||||
.sf-menu ul a:focus > .sf-sub-indicator,
|
||||
.sf-menu ul a:hover > .sf-sub-indicator,
|
||||
.sf-menu ul a:active > .sf-sub-indicator,
|
||||
.sf-menu ul li:hover > a > .sf-sub-indicator,
|
||||
.sf-menu ul li.sfHover > a > .sf-sub-indicator {
|
||||
background-position: -10px 0; /* arrow hovers for modern browsers*/
|
||||
}
|
||||
|
||||
/*** shadows for all but IE6 ***/
|
||||
.sf-shadow ul {
|
||||
background: url('../images/shadow.png') no-repeat bottom right;
|
||||
padding: 0 8px 9px 0;
|
||||
-moz-border-radius-bottomleft: 17px;
|
||||
-moz-border-radius-topright: 17px;
|
||||
-webkit-border-top-right-radius: 17px;
|
||||
-webkit-border-bottom-left-radius: 17px;
|
||||
}
|
||||
.sf-shadow ul.sf-shadow-off {
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
232
applications/examples/static/css/web2py_bootstrap.css
Normal file
@@ -0,0 +1,232 @@
|
||||
/*=============================================================
|
||||
CUSTOM RULES
|
||||
==============================================================*/
|
||||
|
||||
body{height:auto;} /* to avoid vertical scroll bar */
|
||||
div.flash.flash-center{left:25%;right:25%;}
|
||||
div.flash.flash-top,div.flash.flash-top:hover{
|
||||
position:relative;
|
||||
display:block;
|
||||
margin:0;
|
||||
padding:1em;
|
||||
top:0;
|
||||
left:0;
|
||||
width:100%;
|
||||
text-align:center;
|
||||
text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);
|
||||
color:#865100;
|
||||
background:#feea9a;
|
||||
border:1px solid;
|
||||
border-top:0px;
|
||||
border-left:0px;
|
||||
border-right:0px;
|
||||
border-radius:0;
|
||||
opacity:1;
|
||||
}
|
||||
#header{margin-top:60px;}
|
||||
.mastheader h1 {
|
||||
margin-bottom:9px;
|
||||
font-size:81px;
|
||||
font-weight:bold;
|
||||
letter-spacing:-1px;
|
||||
line-height:1;
|
||||
font-size:54px;
|
||||
}
|
||||
.mastheader small {
|
||||
font-size:20px;
|
||||
font-weight:300;
|
||||
}
|
||||
/* auth navbar - primitive style */
|
||||
.auth_navbar,.auth_navbar a{color:inherit;}
|
||||
.ie-lte7 .auth_navbar,.auth_navbar a{color:expression(this.parentNode.currentStyle['color']); /* ie7 doesn't support inherit */}
|
||||
.auth_navbar a{white-space:nowrap;} /* to avoid the nav split on more lines */
|
||||
.auth_navbar a:hover{color:white;text-decoration:none;}
|
||||
ul#navbar>.auth_navbar{
|
||||
display:inline-block;
|
||||
padding:5px;
|
||||
}
|
||||
/* form errors message box customization */
|
||||
div.error_wrapper{margin-bottom:9px;}
|
||||
div.error_wrapper .error{
|
||||
border-radius: 4px;
|
||||
-o-border-radius: 4px;
|
||||
-moz-border-radius: 4px;
|
||||
-webkit-border-radius: 4px;
|
||||
}
|
||||
/* below rules are only for formstyle = bootstrap
|
||||
trying to make errors look like bootstrap ones */
|
||||
div.controls .error_wrapper{
|
||||
display:inline-block;
|
||||
margin-bottom:0;
|
||||
vertical-align:middle;
|
||||
}
|
||||
div.controls .error{
|
||||
min-width:5px;
|
||||
background:inherit;
|
||||
color:#B94A48;
|
||||
border:none;
|
||||
padding:0;
|
||||
margin:0;
|
||||
/*display:inline;*/ /* uncommenting this, the animation effect is lost */
|
||||
}
|
||||
div.controls .help-inline{color:#3A87AD;}
|
||||
div.controls .error_wrapper +.help-inline {margin-left:-99999px;}
|
||||
div.controls select +.error_wrapper {margin-left:5px;}
|
||||
.ie-lte7 div.error{color:#fff;}
|
||||
|
||||
/* beautify brand */
|
||||
.navbar-inverse .brand{color:#c6cecc;}
|
||||
.navbar-inverse .brand b{display:inline-block;margin-top:-1px;}
|
||||
.navbar-inverse .brand b>span{font-size:22px;color:white}
|
||||
.navbar-inverse .brand:hover b>span{color:white}
|
||||
/* beautify web2py link in navbar */
|
||||
span.highlighted{color:#d8d800;}
|
||||
.open span.highlighted{color:#ffff00;}
|
||||
|
||||
/*=============================================================
|
||||
OVERRIDING WEB2PY.CSS RULES
|
||||
==============================================================*/
|
||||
|
||||
/* reset to default */
|
||||
a{white-space:normal;}
|
||||
li{margin-bottom:0;}
|
||||
textarea,button{display:block;}
|
||||
/*reset ul padding */
|
||||
ul#navbar{padding:0;}
|
||||
/* label aligned to related input */
|
||||
td.w2p_fl,td.w2p_fc {padding:0;}
|
||||
#web2py_user_form td{vertical-align:middle;}
|
||||
|
||||
/*=============================================================
|
||||
OVERRIDING BOOTSTRAP.CSS RULES
|
||||
==============================================================*/
|
||||
|
||||
/* because web2py handles this via js */
|
||||
textarea { width:90%}
|
||||
.hidden{visibility:visible;}
|
||||
/* right folder for bootstrap black images/icons */
|
||||
[class^="icon-"],[class*=" icon-"]{
|
||||
background-image:url("../images/glyphicons-halflings.png")
|
||||
}
|
||||
/* right folder for bootstrap white images/icons */
|
||||
.icon-white,
|
||||
.nav-tabs > .active > a > [class^="icon-"],
|
||||
.nav-tabs > .active > a > [class*=" icon-"],
|
||||
.nav-pills > .active > a > [class^="icon-"],
|
||||
.nav-pills > .active > a > [class*=" icon-"],
|
||||
.nav-list > .active > a > [class^="icon-"],
|
||||
.nav-list > .active > a > [class*=" icon-"],
|
||||
.navbar-inverse .nav > .active > a > [class^="icon-"],
|
||||
.navbar-inverse .nav > .active > a > [class*=" icon-"],
|
||||
.dropdown-menu > li > a:hover > [class^="icon-"],
|
||||
.dropdown-menu > li > a:hover > [class*=" icon-"],
|
||||
.dropdown-menu > .active > a > [class^="icon-"],
|
||||
.dropdown-menu > .active > a > [class*=" icon-"] {
|
||||
background-image:url("../images/glyphicons-halflings-white.png");
|
||||
}
|
||||
/* bootstrap has a label as input's wrapper while web2py has a div */
|
||||
div>input[type="radio"],div>input[type="checkbox"]{margin:0;}
|
||||
/* bootstrap has button instead of input */
|
||||
input[type="button"], input[type="submit"]{margin-right:8px;}
|
||||
|
||||
/*=============================================================
|
||||
RULES FOR SOLVING CONFLICTS BETWEEN WEB2PY.CSS AND BOOTSTRAP.CSS
|
||||
==============================================================*/
|
||||
|
||||
/*when formstyle=table3cols*/
|
||||
tr#auth_user_remember__row>td.w2p_fw>div{padding-bottom:8px;}
|
||||
td.w2p_fw div>label{vertical-align:middle;}
|
||||
td.w2p_fc {padding-bottom:5px;}
|
||||
/*when formstyle=divs*/
|
||||
div#auth_user_remember__row{margin-top:4px;}
|
||||
div#auth_user_remember__row>.w2p_fl{display:none;}
|
||||
div#auth_user_remember__row>.w2p_fw{min-height:39px;}
|
||||
div.w2p_fw,div.w2p_fc{
|
||||
display:inline-block;
|
||||
vertical-align:middle;
|
||||
margin-bottom:0;
|
||||
}
|
||||
div.w2p_fc{
|
||||
padding-left:5px;
|
||||
margin-top:-8px;
|
||||
}
|
||||
/*when formstyle=ul*/
|
||||
form>ul{
|
||||
list-style:none;
|
||||
margin:0;
|
||||
}
|
||||
li#auth_user_remember__row{margin-top:4px;}
|
||||
li#auth_user_remember__row>.w2p_fl{display:none;}
|
||||
li#auth_user_remember__row>.w2p_fw{min-height:39px;}
|
||||
/*when formstyle=bootstrap*/
|
||||
#auth_user_remember__row label.checkbox{display:block;}
|
||||
span.inline-help{display:inline-block;}
|
||||
input[type="text"].input-xlarge,input[type="password"].input-xlarge{width:270px;}
|
||||
/*when recaptcha is used*/
|
||||
#recaptcha{min-height:30px;display:inline-block;margin-bottom:0;line-height:30px;vertical-align:middle;}
|
||||
td>#recaptcha{margin-bottom:6px;}
|
||||
div>#recaptcha{margin-bottom:9px;}
|
||||
div.control-group.error{
|
||||
width:auto;
|
||||
background:transparent;
|
||||
border:0;
|
||||
color:inherit;
|
||||
padding:0;
|
||||
background-repeat:repeat;
|
||||
}
|
||||
|
||||
/*=============================================================
|
||||
OTHER RULES
|
||||
==============================================================*/
|
||||
|
||||
/* Massimo Di Pierro fixed alignment in forms with list:string */
|
||||
form table tr{margin-bottom:9px;}
|
||||
td.w2p_fw ul{margin-left:0px;}
|
||||
|
||||
/* web2py_console in grid and smartgrid */
|
||||
.hidden{visibility:visible;}
|
||||
.web2py_console input{
|
||||
display: inline-block;
|
||||
margin-bottom: 0;
|
||||
vertical-align: middle;
|
||||
}
|
||||
.web2py_console input[type="submit"],
|
||||
.web2py_console input[type="button"],
|
||||
.web2py_console button{
|
||||
padding-top:4px;
|
||||
padding-bottom:4px;
|
||||
margin:3px 0 0 2px;
|
||||
}
|
||||
.web2py_console a,
|
||||
.web2py_console select,
|
||||
.web2py_console input
|
||||
{
|
||||
margin:3px 0 0 2px;
|
||||
}
|
||||
.web2py_grid form table{width:auto;}
|
||||
/* auth_user_remember checkbox extrapadding in IE fix */
|
||||
.ie-lte9 input#auth_user_remember.checkbox {padding-left:0;}
|
||||
|
||||
/*=============================================================
|
||||
MEDIA QUERIES
|
||||
==============================================================*/
|
||||
|
||||
@media only screen and (max-width:979px){
|
||||
body{padding-top:0px;}
|
||||
#navbar{top:5px;}
|
||||
div.flash{right:5px;}
|
||||
.dropdown-menu ul{visibility:visible;}
|
||||
}
|
||||
@media only screen and (max-width:479px){
|
||||
body{
|
||||
padding-left:10px;
|
||||
padding-right:10px;
|
||||
}
|
||||
.navbar-fixed-top,.navbar-fixed-bottom {
|
||||
margin-left:-10px;
|
||||
margin-right:-10px;
|
||||
}
|
||||
input[type="text"],input[type="password"],select{
|
||||
width:95%;
|
||||
}
|
||||
}
|
||||
122
applications/examples/static/css/web2py_bootstrap_nojs.css
Normal file
@@ -0,0 +1,122 @@
|
||||
/*=============================================================
|
||||
BOOTSTRAP DROPDOWN MENU
|
||||
==============================================================*/
|
||||
|
||||
.dropdown-menu ul{
|
||||
left:100%;
|
||||
position:absolute;
|
||||
top:0;
|
||||
visibility:hidden;
|
||||
margin-top:-1px;
|
||||
}
|
||||
.dropdown-menu li:hover ul{visibility:visible;}
|
||||
.navbar .dropdown-menu ul:before{
|
||||
border-bottom:7px solid transparent;
|
||||
border-left:none;
|
||||
border-right:7px solid rgba(0, 0, 0, 0.2);
|
||||
border-top:7px solid transparent;
|
||||
left:-7px;
|
||||
top:5px;
|
||||
}
|
||||
.nav > li.dropdown > a:after {
|
||||
border-left: 4px solid transparent;
|
||||
border-right: 4px solid transparent;
|
||||
border-top: 4px solid #000000;
|
||||
content: "";
|
||||
display: inline-block;
|
||||
height: 0;
|
||||
opacity: 0.7;
|
||||
vertical-align: top;
|
||||
width: 0;
|
||||
|
||||
margin-left: 2px;
|
||||
margin-top: 8px;
|
||||
|
||||
border-bottom-color: #FFFFFF;
|
||||
border-top-color: #FFFFFF;
|
||||
}
|
||||
.dropdown-menu span{display:inline-block;}
|
||||
ul.dropdown-menu li.dropdown > a:after {
|
||||
border-left: 4px solid #000;
|
||||
border-right: 4px solid transparent;
|
||||
border-bottom: 4px solid transparent;
|
||||
border-top: 4px solid transparent;
|
||||
content: "";
|
||||
display: inline-block;
|
||||
height: 0;
|
||||
opacity: 0.7;
|
||||
vertical-align: top;
|
||||
width: 0;
|
||||
|
||||
margin-left: 8px;
|
||||
margin-top: 6px;
|
||||
}
|
||||
|
||||
ul.nav li.dropdown:hover ul.dropdown-menu {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.open >.dropdown-menu ul{display:block;} /* fix menu issue when BS2.0.4 is applied */
|
||||
|
||||
/*=============================================================
|
||||
BOOTSTRAP SUBMIT BUTTON
|
||||
==============================================================*/
|
||||
|
||||
input[type='submit']:not(.btn) {
|
||||
display: inline-block;
|
||||
padding: 4px 14px;
|
||||
margin-bottom: 0;
|
||||
font-size: 14px;
|
||||
line-height: 20px;
|
||||
color: #333;
|
||||
text-align: center;
|
||||
text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75);
|
||||
vertical-align: middle;
|
||||
cursor: pointer;
|
||||
background-color: whiteSmoke;
|
||||
background-image: -webkit-gradient(linear,0 0,0 100%,from(white),to(#E6E6E6));
|
||||
background-image: -webkit-linear-gradient(top,white,#E6E6E6);
|
||||
background-image: -o-linear-gradient(top,white,#E6E6E6);
|
||||
background-image: linear-gradient(to bottom,white,#E6E6E6);
|
||||
background-image: -moz-linear-gradient(top,white,#E6E6E6);
|
||||
background-repeat: repeat-x;
|
||||
border: 1px solid #BBB;
|
||||
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
|
||||
border-bottom-color: #A2A2A2;
|
||||
-webkit-border-radius: 4px;
|
||||
-moz-border-radius: 4px;
|
||||
border-radius: 4px;
|
||||
filter: progid:dximagetransform.microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0);
|
||||
filter: progid:dximagetransform.microsoft.gradient(enabled=false);
|
||||
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
-moz-box-shadow: inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);
|
||||
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
|
||||
input[type='submit']:not(.btn):hover {
|
||||
color: #333;
|
||||
text-decoration: none;
|
||||
background-color: #E6E6E6;
|
||||
background-position: 0 -15px;
|
||||
-webkit-transition: background-position .1s linear;
|
||||
-moz-transition: background-position .1s linear;
|
||||
-o-transition: background-position .1s linear;
|
||||
transition: background-position .1s linear;
|
||||
}
|
||||
|
||||
input[type='submit']:not(.btn).active, input[type='submit']:not(.btn):active {
|
||||
background-color: #E6E6E6;
|
||||
background-color: #D9D9D9 9;
|
||||
background-image: none;
|
||||
outline: 0;
|
||||
-webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
-moz-box-shadow: inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);
|
||||
box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
|
||||
/*=============================================================
|
||||
OTHER
|
||||
==============================================================*/
|
||||
|
||||
.ie-lte8 .navbar-fixed-top {position:static;}
|
||||
|
||||
|
Before Width: | Height: | Size: 478 B |
BIN
applications/examples/static/images/book-5th.png
Normal file
|
After Width: | Height: | Size: 29 KiB |
BIN
applications/examples/static/images/facebook.png
Normal file
|
After Width: | Height: | Size: 991 B |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 198 B |
|
Before Width: | Height: | Size: 6.3 KiB After Width: | Height: | Size: 323 B |
BIN
applications/examples/static/images/glyphicons-halflings-white.png
Executable file
|
After Width: | Height: | Size: 8.6 KiB |
BIN
applications/examples/static/images/glyphicons-halflings.png
Executable file
|
After Width: | Height: | Size: 12 KiB |