Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4b3b8d2795 | ||
|
|
eeff731858 | ||
|
|
63abd73942 | ||
|
|
c74bec2d29 | ||
|
|
769e9c1730 | ||
|
|
33d38f33e5 | ||
|
|
36107c11d5 | ||
|
|
6bc3adbd33 | ||
|
|
583c71eca3 | ||
|
|
1e3c3c8f6c | ||
|
|
0a36166317 | ||
|
|
661f01319c | ||
|
|
6f8941d7be | ||
|
|
f7116edc9a | ||
|
|
ea69d56ab4 | ||
|
|
223e129477 | ||
|
|
4a5674a679 | ||
|
|
91c3a81cb1 | ||
|
|
e6921730c0 | ||
|
|
89ef0636a8 | ||
|
|
769ef001ec | ||
|
|
44b8ac79da | ||
|
|
5ada65b2a0 | ||
|
|
e433e7eda1 | ||
|
|
7de7dea1da | ||
|
|
159474cf9b | ||
|
|
b143a942ae | ||
|
|
dba264cc5f | ||
|
|
7ff27a42ca | ||
|
|
8e1aa18b8f | ||
|
|
99cab7304d | ||
|
|
c575b861ed | ||
|
|
0dd84fad78 | ||
|
|
7dc25b3d33 | ||
|
|
5599e736ba | ||
|
|
e4e9a6b493 | ||
|
|
c50ee144df | ||
|
|
f5f32d902b | ||
|
|
f993d371a6 | ||
|
|
b5fb769bff | ||
|
|
28cbf6d803 | ||
|
|
89ddd937b0 | ||
|
|
5da950f61b | ||
|
|
7bff1b6c3c | ||
|
|
2baadd19cf | ||
|
|
2852aadc71 | ||
|
|
32e1854e13 | ||
|
|
b31daaa657 | ||
|
|
2401fc46ba | ||
|
|
0957d2d957 | ||
|
|
f8df9c502b | ||
|
|
52f071d8b0 | ||
|
|
a175ec5b5c | ||
|
|
f32ee0a9be | ||
|
|
f93702b82c | ||
|
|
0d4b006537 | ||
|
|
3f8477a442 | ||
|
|
bc9143b2a2 | ||
|
|
16c553196c | ||
|
|
b063ba412f | ||
|
|
aa406f191a | ||
|
|
f63b0cab81 | ||
|
|
beacc6ed1e | ||
|
|
028cfaa44c | ||
|
|
ac2949cf88 | ||
|
|
a098fae0f8 | ||
|
|
960e1f473f | ||
|
|
ffd72ed6f7 | ||
|
|
5eeab858d1 | ||
|
|
f64045168d | ||
|
|
f16d977e9b | ||
|
|
8274a69236 | ||
|
|
ce9f48e3d5 | ||
|
|
69735bdb22 | ||
|
|
f3e2143b4b | ||
|
|
2110eb9855 | ||
|
|
3c015990c5 | ||
|
|
0d3026b97d | ||
|
|
9cb8379c2d | ||
|
|
33c8ea7e2b | ||
|
|
561bed9fed | ||
|
|
7bdfa6a59d | ||
|
|
b887a941bf | ||
|
|
b76f5250a8 | ||
|
|
e372369b9e | ||
|
|
aaa0ea23e2 | ||
|
|
f8fe2cd532 | ||
|
|
bb362325ad | ||
|
|
56555ad550 | ||
|
|
456b441210 | ||
|
|
982594a4a5 | ||
|
|
eaded8dfd9 | ||
|
|
c583b95ee2 | ||
|
|
cda57dd733 | ||
|
|
60fbfce540 | ||
|
|
d8af2eaf4c | ||
|
|
9a571988ae | ||
|
|
b5b81a8bba | ||
|
|
e76551b4a8 | ||
|
|
74e071b1d7 | ||
|
|
327585327f | ||
|
|
4b445ca4df | ||
|
|
ef4a844233 | ||
|
|
80515658b0 | ||
|
|
e7d7dc6b6b | ||
|
|
aae0476967 | ||
|
|
aa6cf97324 | ||
|
|
8506671c5c | ||
|
|
022976d2f6 | ||
|
|
18d53167d0 | ||
|
|
9519bfddd4 | ||
|
|
0c556e32fa | ||
|
|
f9a02d9b3b | ||
|
|
3b6c986704 | ||
|
|
c78e8764a0 | ||
|
|
7f4d10c85d | ||
|
|
6b30ed0ba6 | ||
|
|
912d5c4d78 | ||
|
|
faa4bd82ae | ||
|
|
409f6b8dd5 | ||
|
|
4e79698b4e | ||
|
|
07b28605b5 | ||
|
|
c4403cc4de | ||
|
|
7e0742f29b | ||
|
|
b21aef221e | ||
|
|
20934f3ac8 | ||
|
|
715e497789 | ||
|
|
c0d389c283 | ||
|
|
6720575bd9 | ||
|
|
b1ec750d1d | ||
|
|
d9c78da997 | ||
|
|
1fa26e763d | ||
|
|
bb71b3d3d9 | ||
|
|
65e8e56e4a | ||
|
|
ee415d0e50 | ||
|
|
9db88a6c4f | ||
|
|
e5151a0a19 | ||
|
|
570234717a | ||
|
|
3f60d1f8de | ||
|
|
65d100c814 | ||
|
|
61bdab8621 | ||
|
|
8c94c9ecbf | ||
|
|
7fd895ecb5 | ||
|
|
213bc07646 | ||
|
|
1f081c181c | ||
|
|
db1d31900e | ||
|
|
2219c79ac3 | ||
|
|
d2782179aa | ||
|
|
d90a31afc7 | ||
|
|
1c236fe0f3 | ||
|
|
24165fb5f3 | ||
|
|
71da960386 | ||
|
|
a16c2d0a26 | ||
|
|
53de44a225 | ||
|
|
e32cff60e5 | ||
|
|
0ebba8d17c | ||
|
|
464db79c04 | ||
|
|
65019d8323 | ||
|
|
f131d316ca | ||
|
|
e6663c96b5 | ||
|
|
5f06d11fe9 | ||
|
|
6db2836662 | ||
|
|
cb209f8d98 | ||
|
|
5634e17a2e | ||
|
|
7c990edeaf | ||
|
|
9149f62760 | ||
|
|
872ec6b11c | ||
|
|
064a21a07c | ||
|
|
57c3c7b2e0 | ||
|
|
6dc75d7a44 | ||
|
|
5f3b7e05c5 | ||
|
|
61d3d8ad00 | ||
|
|
e36440f834 | ||
|
|
4029543d51 | ||
|
|
8aee9ac91f | ||
|
|
6e5e15f06f | ||
|
|
a72bd4cb7c | ||
|
|
d062ab553c | ||
|
|
a41edde12a | ||
|
|
7608927b4f | ||
|
|
24d7647c08 | ||
|
|
a14369cb7d | ||
|
|
3e81c4f3b6 | ||
|
|
84a6c19677 | ||
|
|
624a1d5509 | ||
|
|
8b6d35cfe2 | ||
|
|
867e502448 | ||
|
|
74275b969e | ||
|
|
275dde0630 | ||
|
|
46b470f30b | ||
|
|
fbfec95a8a | ||
|
|
1e75a18f55 | ||
|
|
a98849bf30 | ||
|
|
1b998e9d01 | ||
|
|
ebd6d3f3f9 | ||
|
|
1204afadbb | ||
|
|
cd08b72df7 | ||
|
|
c5ad7c98e2 | ||
|
|
4b8222d792 | ||
|
|
a3524ef8aa | ||
|
|
49ab8aa67d | ||
|
|
fa85639efb | ||
|
|
84bca81a9a | ||
|
|
206ea72a27 | ||
|
|
cc2aceb3d8 | ||
|
|
00b95aa6c3 | ||
|
|
a7632cc1e5 | ||
|
|
39f07025c6 | ||
|
|
658cb0403f | ||
|
|
db1519bcea | ||
|
|
885d1cc77c | ||
|
|
4005becd0a | ||
|
|
4c16b53c2a | ||
|
|
93dbf13d88 | ||
|
|
c5dd1a9002 | ||
|
|
18af7d6392 | ||
|
|
dbeb31d4fe | ||
|
|
0fb9234ebc | ||
|
|
6e4cec829a | ||
|
|
5a433c42e7 | ||
|
|
f808dd131b | ||
|
|
1bbf9a2318 | ||
|
|
ccff70d9c4 | ||
|
|
0347ca1bcc | ||
|
|
23564c14f9 | ||
|
|
93fca13510 | ||
|
|
1a39066cfc | ||
|
|
70b1574aa6 | ||
|
|
898f814dce | ||
|
|
9d425d33ab | ||
|
|
c6b0f58074 | ||
|
|
78b3802f8f | ||
|
|
833b90ccff | ||
|
|
c27a381286 | ||
|
|
ad29b43836 | ||
|
|
5cd9c51410 | ||
|
|
6476d42371 | ||
|
|
a48d9006ad | ||
|
|
c5c2057859 | ||
|
|
1889ab4825 | ||
|
|
0c81560f2c | ||
|
|
26005d6584 | ||
|
|
b0b0bcbdb7 | ||
|
|
546099fa2d | ||
|
|
c53fde6dca | ||
|
|
c9aeefc67a | ||
|
|
37594d3384 | ||
|
|
00dc5d8c38 | ||
|
|
ff8f6b1d00 | ||
|
|
aa60ba1fb1 | ||
|
|
3b8341f249 | ||
|
|
a68bcb6ee1 | ||
|
|
24a52a294c | ||
|
|
03ea67b20b | ||
|
|
4f20003f9a | ||
|
|
a92d13652d | ||
|
|
cf25fbc75d | ||
|
|
c1fb54ff1c | ||
|
|
bc484864ad | ||
|
|
465ffaa5a7 | ||
|
|
357c6bef0b | ||
|
|
d5de7f9b55 | ||
|
|
809beedcf8 | ||
|
|
40071ffaf9 | ||
|
|
501e3c1217 | ||
|
|
ebeb8a13a4 | ||
|
|
8be598c533 | ||
|
|
cf6a6a876f | ||
|
|
ea842a95ca | ||
|
|
f6f1328721 | ||
|
|
1e2901810f | ||
|
|
c5f67d070d | ||
|
|
527d2087c1 | ||
|
|
f6b5c0190d | ||
|
|
a5225dfc2e | ||
|
|
7920f9ef2a | ||
|
|
37d9cf11c3 | ||
|
|
fdc5078a85 | ||
|
|
e4332642f4 | ||
|
|
2d74797e86 | ||
|
|
97ccb60326 | ||
|
|
f9d331041d | ||
|
|
4b76e156a9 | ||
|
|
65660e57ca | ||
|
|
48e2722d9e | ||
|
|
91ec945a37 | ||
|
|
ba62e297b5 | ||
|
|
7f3d89aaa7 | ||
|
|
b7321e3121 | ||
|
|
2ecf0bcb41 | ||
|
|
fec92ea03e | ||
|
|
6a8ec5869b | ||
|
|
e7f585690d | ||
|
|
a76064e46c | ||
|
|
db2407dd75 | ||
|
|
d48a1bddde | ||
|
|
f83fc7fe4e | ||
|
|
3bd6f53788 | ||
|
|
37638369c1 | ||
|
|
39c5242f30 | ||
|
|
5d69984ef9 | ||
|
|
1f734d662e | ||
|
|
ff3855a436 | ||
|
|
30be69f08b | ||
|
|
e1bd9eabe7 | ||
|
|
997c78a08b | ||
|
|
e35d2277c3 | ||
|
|
f29352b864 | ||
|
|
2ca60b09d4 | ||
|
|
8ddf6ceb1f | ||
|
|
aabcc86d9c | ||
|
|
ecae9d0996 | ||
|
|
8eb0b02adb | ||
|
|
33417d4b7d | ||
|
|
ce296e691b | ||
|
|
eb49d303ad | ||
|
|
cf17287794 | ||
|
|
8be00cbee8 | ||
|
|
592f4a8bac | ||
|
|
42cb1f784a | ||
|
|
38529e6809 | ||
|
|
c1fe7df02d | ||
|
|
5c31f511f6 | ||
|
|
fc1c1ae31a | ||
|
|
ac0c61de98 | ||
|
|
fdb02cedea | ||
|
|
68fa9beb22 | ||
|
|
3075929824 | ||
|
|
754481ab13 | ||
|
|
8bf2d81998 | ||
|
|
80f795d32c | ||
|
|
9e6f2a4952 | ||
|
|
0146153d0a | ||
|
|
28079165c4 | ||
|
|
40884a7588 | ||
|
|
9b990c03a6 | ||
|
|
a72bbf29f6 | ||
|
|
7f740b1fc3 | ||
|
|
8ae0e6d4d3 | ||
|
|
f15ad447ca | ||
|
|
67c29560db | ||
|
|
8e787dca86 | ||
|
|
f06dd86a99 | ||
|
|
73f3cc64a5 | ||
|
|
2601de5c30 | ||
|
|
ee3ccfa598 | ||
|
|
396cbb7b64 | ||
|
|
c64f08b2b5 | ||
|
|
3cf82f4dac | ||
|
|
a43256e802 | ||
|
|
6f91694d51 | ||
|
|
d25ce692f9 | ||
|
|
f495fc01bc | ||
|
|
4aacbd2731 | ||
|
|
bb7b1f64ce | ||
|
|
548e0a9821 | ||
|
|
af23e322a1 | ||
|
|
b467e2db41 | ||
|
|
13f34a17b1 | ||
|
|
d0baeec53d | ||
|
|
6cb283cdf2 | ||
|
|
43f5fe421b | ||
|
|
09c041056e | ||
|
|
fda4658e92 | ||
|
|
9968bb2bb8 | ||
|
|
e6397b28a5 | ||
|
|
61fa747813 | ||
|
|
a2ae89e5f9 | ||
|
|
57f7bd1bd6 | ||
|
|
47ed1e6a71 | ||
|
|
9d527e2fb2 | ||
|
|
8e820cdad6 | ||
|
|
0069bba318 | ||
|
|
a67d0683ca | ||
|
|
2b8c063c32 | ||
|
|
4ae3655025 | ||
|
|
29622ba221 | ||
|
|
45a7756828 | ||
|
|
516c5fc84a | ||
|
|
2ea34d4b97 | ||
|
|
6952505368 | ||
|
|
60af816a66 | ||
|
|
364deea051 | ||
|
|
a300b62184 | ||
|
|
4e1716d58b | ||
|
|
7c98cbeb65 | ||
|
|
72852e04da | ||
|
|
7726044c61 | ||
|
|
76827abd78 | ||
|
|
561b6303bc | ||
|
|
4d85878921 | ||
|
|
b7abdf1973 | ||
|
|
015d269667 | ||
|
|
5ede29b401 | ||
|
|
4895d562b3 | ||
|
|
5215e55848 | ||
|
|
f8750645c2 | ||
|
|
9b6d75f370 | ||
|
|
c9f72d984e | ||
|
|
48022d92fe | ||
|
|
1732205174 | ||
|
|
32e57ade15 | ||
|
|
b8cd8bd31b | ||
|
|
b0c7c8b682 | ||
|
|
4af96b2bb6 | ||
|
|
8d7fd835a8 | ||
|
|
56beb897cf | ||
|
|
3bcea4b692 | ||
|
|
7369311501 | ||
|
|
9eef7e40f5 | ||
|
|
5a4bff5be8 | ||
|
|
a040f38a3f | ||
|
|
3ff09aeb46 | ||
|
|
045f1cd766 | ||
|
|
c691b7c39d | ||
|
|
ed21bd4b3e | ||
|
|
be7716326e | ||
|
|
8c21f781e1 | ||
|
|
5c1223adfb | ||
|
|
23055da02d | ||
|
|
20981a6c61 | ||
|
|
b082fbc0a5 | ||
|
|
2af45fd3fe | ||
|
|
7d621cbc28 | ||
|
|
48ef8a93a9 | ||
|
|
80d0c6d430 | ||
|
|
ada8603e9f | ||
|
|
ce73883ba2 | ||
|
|
bfbc2e3488 | ||
|
|
ef493f65a0 | ||
|
|
d76fce8cbc | ||
|
|
87b444684a | ||
|
|
f9dfdb2c98 | ||
|
|
fd7bb4eb7e | ||
|
|
2ddb96e134 | ||
|
|
5ebe6bcd00 | ||
|
|
6b4afd8877 | ||
|
|
8a8821530a | ||
|
|
bea7022b4c | ||
|
|
553cc536c0 | ||
|
|
8fbef76dc0 | ||
|
|
2686b4c190 | ||
|
|
43109f8172 | ||
|
|
cf181e1d26 | ||
|
|
14c6f68fb7 | ||
|
|
47f93d97d5 | ||
|
|
0ffbd7824d | ||
|
|
5ea6ec4328 | ||
|
|
6b4fbe002d | ||
|
|
7a078dc880 | ||
|
|
63e106a12d | ||
|
|
63a32e473f | ||
|
|
e07fafda6e | ||
|
|
d887d06a4f | ||
|
|
8d839ef3cf | ||
|
|
353be0dbf5 | ||
|
|
05ce5f7853 | ||
|
|
f520ceaf25 | ||
|
|
371401fa36 | ||
|
|
574a76c231 | ||
|
|
f6bb76acb0 | ||
|
|
3f5044c82d | ||
|
|
394876992b | ||
|
|
365d4fa1bf | ||
|
|
66309d806a | ||
|
|
e7a97ed277 | ||
|
|
c09c290ac8 | ||
|
|
efdd51c361 | ||
|
|
f6346f3c41 | ||
|
|
2c72fb8e8e | ||
|
|
0c9de181f8 | ||
|
|
757ebe9085 | ||
|
|
61dc4fa95e | ||
|
|
c05fa78fa0 | ||
|
|
6a16fc2526 | ||
|
|
e790443829 | ||
|
|
9c1a0bc151 | ||
|
|
1379ff7845 | ||
|
|
3a13612d15 | ||
|
|
5305b6a3a8 | ||
|
|
e9d9a6c441 | ||
|
|
8838ee481e | ||
|
|
0fd4c9c998 | ||
|
|
b857108db4 | ||
|
|
16ec910ba5 | ||
|
|
5e98d96f65 | ||
|
|
7e2b9a30a2 | ||
|
|
4d683922c1 | ||
|
|
9d594988d9 | ||
|
|
c441e888c2 | ||
|
|
298daf9895 | ||
|
|
d04dff9130 | ||
|
|
5eef5a594c | ||
|
|
cce98709a7 | ||
|
|
3fef151fca | ||
|
|
a6fe517f87 | ||
|
|
964c5008ca | ||
|
|
f250ae58a4 | ||
|
|
7af194822c | ||
|
|
c4b1f3f4fe | ||
|
|
f4b13533ce | ||
|
|
638baf564d | ||
|
|
21b3d99249 | ||
|
|
d8dda5b24f | ||
|
|
25fb4361dc | ||
|
|
8ec1808313 | ||
|
|
43efca9d04 | ||
|
|
34b9480a1b | ||
|
|
51dfeb8190 | ||
|
|
3a03d940a1 | ||
|
|
69268b7d21 | ||
|
|
e69cf3942e | ||
|
|
2e6c8e6537 | ||
|
|
ca084f1216 | ||
|
|
a1bc3617a4 | ||
|
|
a1e2042315 | ||
|
|
3bb173c979 | ||
|
|
70135a5bf4 | ||
|
|
efa9ac77b8 | ||
|
|
e8b330f3ba | ||
|
|
56adf4a1ee | ||
|
|
9f92b3b774 | ||
|
|
9d774b4486 | ||
|
|
163e1e3f2e | ||
|
|
adaaf51e9a | ||
|
|
2ba5978f84 | ||
|
|
46240fb7d1 | ||
|
|
a4fa8ca79d | ||
|
|
701f709c23 | ||
|
|
3d22a66701 | ||
|
|
a401ff4fb4 | ||
|
|
72419227e9 | ||
|
|
22bff59789 | ||
|
|
b3746dc58e | ||
|
|
b950bcbd0b | ||
|
|
aa6206a235 | ||
|
|
8cf23b79bf | ||
|
|
bb884eeab7 | ||
|
|
72d2201dd6 | ||
|
|
1b65df6c45 | ||
|
|
a7d1f128ad | ||
|
|
17ef29887e | ||
|
|
06822e2514 | ||
|
|
fc1c26f58f | ||
|
|
ef3cd00ef1 | ||
|
|
08f483d77d | ||
|
|
405ebe5ee2 | ||
|
|
59b4cefd53 | ||
|
|
d037147c23 | ||
|
|
34097e2d81 | ||
|
|
e0f51f756c | ||
|
|
8c9b834bc4 | ||
|
|
9178740c26 | ||
|
|
922cca9652 | ||
|
|
e2f0354deb | ||
|
|
6891252cf6 | ||
|
|
c9debdcce5 | ||
|
|
6911dfde02 | ||
|
|
e7ddb2d7b2 | ||
|
|
51fde7a52b | ||
|
|
b36178d6d4 | ||
|
|
c19dffcb46 | ||
|
|
e04245cff5 | ||
|
|
d5b08a8f51 | ||
|
|
49179170fa | ||
|
|
e224ad1a6a | ||
|
|
ba552bd1f8 | ||
|
|
ad1de823bd | ||
|
|
f2f8ad68a3 | ||
|
|
23e3dd91b3 | ||
|
|
b4df21776e | ||
|
|
741538fa3c | ||
|
|
270d32b45e | ||
|
|
cedf54865d | ||
|
|
c0199cf356 | ||
|
|
c95bb9d29c | ||
|
|
29ae400b80 | ||
|
|
0cd4d540aa | ||
|
|
6ce710dbb1 | ||
|
|
90744c3b80 | ||
|
|
d777cf74a5 | ||
|
|
9b1d6eb6e0 | ||
|
|
676fa7199b | ||
|
|
fd30b3501e | ||
|
|
2a601d2731 | ||
|
|
296c9ca767 | ||
|
|
245f1fe366 | ||
|
|
ce3b8b7894 | ||
|
|
0c61eb11f5 | ||
|
|
9ec4866cea | ||
|
|
d48dbc6bbb | ||
|
|
5cb9d78e35 | ||
|
|
78c866ce59 | ||
|
|
ab6fcc92e5 | ||
|
|
ba640e2659 | ||
|
|
9849a8334f | ||
|
|
ad645d960d | ||
|
|
98604a2ab8 | ||
|
|
bd8da45c1a | ||
|
|
b46787ae93 | ||
|
|
48b2b9235d | ||
|
|
efd2e44ded | ||
|
|
93e4e47cd6 | ||
|
|
9ec65c5f9a | ||
|
|
1597d028f0 | ||
|
|
2178397c2f | ||
|
|
568f8327ef | ||
|
|
7e2b7b7376 | ||
|
|
253e578a98 | ||
|
|
d590d037ad | ||
|
|
64298127c5 | ||
|
|
9122136594 | ||
|
|
1ee76f7488 | ||
|
|
91bfdcd4bd | ||
|
|
2b02ae4196 | ||
|
|
326f866d7e | ||
|
|
86b1d6f443 | ||
|
|
62e35e9a42 | ||
|
|
dc02fb4a06 | ||
|
|
c639d774cf | ||
|
|
58bc146d11 | ||
|
|
429e2fcc40 | ||
|
|
7d8140316c | ||
|
|
3dfb8e0b0b | ||
|
|
9aeea8bcad | ||
|
|
850ce9ac3c | ||
|
|
61b901a481 | ||
|
|
08a2c2d148 | ||
|
|
d87bb1f11c | ||
|
|
bf4d642125 | ||
|
|
7163886d31 | ||
|
|
a3930e1c05 | ||
|
|
32a037b1c6 | ||
|
|
c170b2a06d | ||
|
|
0807c32a1c | ||
|
|
c447212562 | ||
|
|
54bbde5c1d | ||
|
|
7009984357 | ||
|
|
7229b73862 | ||
|
|
66b9da36dd | ||
|
|
9d9c5f53e7 | ||
|
|
9a7300cda1 | ||
|
|
e618103f38 | ||
|
|
114b6b8a41 | ||
|
|
5064beffe9 | ||
|
|
19c4e7d7d3 | ||
|
|
8b799c7904 | ||
|
|
a6c5894272 | ||
|
|
0fdc62c914 | ||
|
|
88af84579c | ||
|
|
917dc7695f | ||
|
|
65e3e4faa2 | ||
|
|
9e7ec3a65c | ||
|
|
7ac7b127c6 | ||
|
|
3945753c5c | ||
|
|
599585d57a | ||
|
|
10cf36401f | ||
|
|
fe2834f4a6 | ||
|
|
674617c0f8 | ||
|
|
f92f8928b0 | ||
|
|
45868bc523 | ||
|
|
9b2594355f | ||
|
|
e30cb26200 | ||
|
|
63d3ab1cc1 | ||
|
|
188d907e10 | ||
|
|
e972a86233 | ||
|
|
52a76e87ad | ||
|
|
8ab19f8121 | ||
|
|
6f3c8c68d4 | ||
|
|
98385ff4c8 | ||
|
|
62a6be26af | ||
|
|
5c1169ba9d | ||
|
|
0b47a5ca3a | ||
|
|
9da75a777b | ||
|
|
2fc2190b59 | ||
|
|
e108935430 | ||
|
|
bbde74db8d | ||
|
|
9fce4edf00 | ||
|
|
ea3c6c3278 | ||
|
|
6a0bd397cd | ||
|
|
7bbb137fd9 | ||
|
|
e67d32445f | ||
|
|
83280f3f99 | ||
|
|
9c81fbaa2b | ||
|
|
1d7415b91d | ||
|
|
bc5a042dcc | ||
|
|
e5af0bdd52 | ||
|
|
dc2939a4f9 | ||
|
|
f52ec56a0f | ||
|
|
75b38df3d6 | ||
|
|
0f5aeea345 | ||
|
|
d80fc36b29 | ||
|
|
4ca42c9c11 | ||
|
|
6c760902d6 | ||
|
|
2a0fcc7566 | ||
|
|
b763ccdd08 | ||
|
|
e72a0d1141 | ||
|
|
295e5a1ccf | ||
|
|
497fafb555 | ||
|
|
585f556006 | ||
|
|
7b115126c9 | ||
|
|
1a9165a084 | ||
|
|
4a74d54cdc | ||
|
|
a0755d4b1c | ||
|
|
084181a9a5 | ||
|
|
5c381b9410 | ||
|
|
0be9500518 | ||
|
|
9c2da72dcc | ||
|
|
3f6145cd07 | ||
|
|
e155f19d0d | ||
|
|
0c7ea8a5a0 | ||
|
|
1f3474a154 | ||
|
|
c0c1f9cc61 | ||
|
|
e4382c23a3 | ||
|
|
29b5305ab4 | ||
|
|
758154e87e | ||
|
|
ea8b1815f6 | ||
|
|
ebc0b7205f | ||
|
|
06ee770184 | ||
|
|
900325186b | ||
|
|
3b9816f3b3 | ||
|
|
3e5779e5ce | ||
|
|
66d0cb4a1b | ||
|
|
54c85c7951 | ||
|
|
941da4be1c | ||
|
|
69c94baf18 | ||
|
|
90016f6eda | ||
|
|
06b647e30d | ||
|
|
84ebcb84f9 | ||
|
|
b11610face | ||
|
|
6e90419014 | ||
|
|
0457c3c30e | ||
|
|
945cfbf21b | ||
|
|
5769cb0dee | ||
|
|
efd043e309 | ||
|
|
fd19563160 | ||
|
|
1a2ed24566 | ||
|
|
d2fecc47ec | ||
|
|
f9b0a5efb9 | ||
|
|
e304e34ac7 | ||
|
|
ff3826c0c8 | ||
|
|
c96b043a19 | ||
|
|
a1d0f14eb8 | ||
|
|
0234f4dab9 | ||
|
|
e00411f7ad | ||
|
|
3b2350cd8f | ||
|
|
d490091a9a | ||
|
|
5be36b517f | ||
|
|
dab323e8ff | ||
|
|
7e02f86af8 | ||
|
|
26ed43fca8 | ||
|
|
dab4e3d5f8 | ||
|
|
07e8b6b095 | ||
|
|
52523a5d3c | ||
|
|
ded4b7ef6f | ||
|
|
aa9d669a2b | ||
|
|
5378884bf8 | ||
|
|
631d947a9a | ||
|
|
7280807588 | ||
|
|
ca010ac522 | ||
|
|
e2e1ef9bc6 | ||
|
|
a96b793c98 | ||
|
|
f7ba0ff634 | ||
|
|
a0339d9814 | ||
|
|
eb7a1d7117 | ||
|
|
65fa0e21fa | ||
|
|
60ea86d499 | ||
|
|
0411bb6b44 | ||
|
|
d0198b15ee | ||
|
|
c4e8678d8f | ||
|
|
d6cd9cd7e4 | ||
|
|
6c4da76056 | ||
|
|
bf918e6e56 | ||
|
|
0616aae684 | ||
|
|
2d137ddcd6 | ||
|
|
94a2be275b | ||
|
|
aba4bae39e | ||
|
|
541fe5a610 | ||
|
|
f7df469cc3 | ||
|
|
648fe27604 | ||
|
|
a6532d149c | ||
|
|
966c097f76 | ||
|
|
d3d5b9dda2 | ||
|
|
a693777433 | ||
|
|
b406c3cb68 | ||
|
|
432354dcd1 | ||
|
|
496e9a0fd5 | ||
|
|
d3727d1fef | ||
|
|
a37ce75038 | ||
|
|
69d1807e9a | ||
|
|
0c32fbe706 | ||
|
|
a1ed6901d4 | ||
|
|
1f4ca0ac48 | ||
|
|
ff16c84b8b | ||
|
|
d1d45c21d4 | ||
|
|
9c14a2699e | ||
|
|
66becf2642 | ||
|
|
7240db2567 | ||
|
|
6118fea823 | ||
|
|
49e0571cb9 | ||
|
|
de78d1e737 | ||
|
|
93d4df29a6 | ||
|
|
ae7dc456ca | ||
|
|
ea1e01d417 | ||
|
|
00c545b37e | ||
|
|
f51962f645 | ||
|
|
8e5b96059c | ||
|
|
aab4461ab6 | ||
|
|
001404d5c4 | ||
|
|
9416d185e7 | ||
|
|
a43df2b275 | ||
|
|
856bed9337 | ||
|
|
3a00c7a79a | ||
|
|
fa202e3eb3 | ||
|
|
d6e3ebf41a | ||
|
|
81f9614595 | ||
|
|
a464856216 | ||
|
|
150a49fb51 | ||
|
|
8cdc48f33f | ||
|
|
0325660abe | ||
|
|
b52acfdcd0 | ||
|
|
d34455af3f | ||
|
|
06f2f1c661 | ||
|
|
7c87c534f9 | ||
|
|
22151ff4b0 | ||
|
|
a9a2fb78ed | ||
|
|
21e1c100e7 | ||
|
|
8d267febcb | ||
|
|
cd3cc7c811 | ||
|
|
686ea47449 | ||
|
|
41cb84957e | ||
|
|
1de8ace080 | ||
|
|
7d3401ff9f | ||
|
|
a7d517fb09 | ||
|
|
3dfedc305a | ||
|
|
210c23dd5d | ||
|
|
9544b0e616 | ||
|
|
55796324b6 | ||
|
|
a717594950 | ||
|
|
084bf59b6a | ||
|
|
51c32e09bd | ||
|
|
cbb15a13dd | ||
|
|
f757ce0bde | ||
|
|
667f768749 | ||
|
|
ea6e3335a3 | ||
|
|
a59ed331a8 | ||
|
|
d3c48970ae | ||
|
|
65bd0ad229 | ||
|
|
1580f5c22e | ||
|
|
da05a44187 | ||
|
|
0f619a2d43 | ||
|
|
769982cc43 | ||
|
|
30ba21c616 | ||
|
|
91b596fb0f | ||
|
|
d79dc8f1ab | ||
|
|
ed63a08333 | ||
|
|
e136a6a4e4 | ||
|
|
b02889a451 | ||
|
|
1683e4da76 | ||
|
|
d7bc0625e3 | ||
|
|
20863084da | ||
|
|
75dc68f176 | ||
|
|
6ae655ad7a | ||
|
|
eb3a0ac217 | ||
|
|
42207516b9 | ||
|
|
f90a87f943 | ||
|
|
a5480dd124 | ||
|
|
1ac7ba0892 | ||
|
|
e409859c35 | ||
|
|
2add9fa264 | ||
|
|
f3d192c548 | ||
|
|
e4032106d6 | ||
|
|
300b47d6f8 | ||
|
|
89aff6e199 | ||
|
|
bfbfb4262b | ||
|
|
79c293f32b | ||
|
|
a364c435e4 | ||
|
|
799aa5c26a | ||
|
|
d7655ec95a | ||
|
|
7761015b15 | ||
|
|
6279a95b6c | ||
|
|
1cff59fdaf | ||
|
|
864ea22a70 | ||
|
|
acad25c534 | ||
|
|
269f346e1c | ||
|
|
f03a2518ba | ||
|
|
cc28e7b4c3 | ||
|
|
41119b1d77 | ||
|
|
5da4cb7d12 | ||
|
|
933dbd205c | ||
|
|
431e24ff37 | ||
|
|
d12b6cabc9 | ||
|
|
8ccb7f2f16 | ||
|
|
dd9c21fe3f | ||
|
|
a48babfa09 | ||
|
|
e13cc15edf | ||
|
|
073f1dad3f | ||
|
|
e721f3d302 | ||
|
|
b18487f512 | ||
|
|
c1b0dc4225 | ||
|
|
31ed56bcc9 | ||
|
|
0c714a78de | ||
|
|
708f5fcd70 | ||
|
|
feb86435d8 | ||
|
|
11b5c9ced1 | ||
|
|
ad1c4851b1 | ||
|
|
5a1a6d1b57 | ||
|
|
341e2c5edb | ||
|
|
4f5a2cd3d0 | ||
|
|
2ba476c6ef | ||
|
|
9872e9a1a3 | ||
|
|
c26e867859 | ||
|
|
4607c2f28b | ||
|
|
17f1bc5344 | ||
|
|
7bb7cf9551 | ||
|
|
b51a2eb4e3 | ||
|
|
1c3132b3aa | ||
|
|
88a2d364f6 | ||
|
|
3dc515507c | ||
|
|
a1fe8f2519 | ||
|
|
f0b4f2f3c8 | ||
|
|
d2e2008f1b | ||
|
|
2f10b9bbe8 | ||
|
|
d0ae36ac56 | ||
|
|
729a105377 | ||
|
|
0bdc707fdf | ||
|
|
ca8ab32eaf | ||
|
|
6e2338184e | ||
|
|
dbe644aee2 | ||
|
|
e293302bfe | ||
|
|
7c068ca4c5 | ||
|
|
537126b3d9 | ||
|
|
23c9750cc2 | ||
|
|
e69e391a33 | ||
|
|
84aa80c93e | ||
|
|
aa4bb6b598 | ||
|
|
00830ef3a2 | ||
|
|
1d949badae | ||
|
|
df9432163e | ||
|
|
dc07138caf | ||
|
|
96bc2b835c | ||
|
|
44acaf7599 | ||
|
|
863ad41f7c | ||
|
|
fb4558e431 | ||
|
|
6e18ceaaaa | ||
|
|
fc1fb9bc90 | ||
|
|
c322e96dff | ||
|
|
3166d3333c | ||
|
|
1e683f9aa9 | ||
|
|
eb7d4638d1 | ||
|
|
0fc242451a | ||
|
|
40fe0cde15 | ||
|
|
6d60365ea3 | ||
|
|
b7ceae8a29 | ||
|
|
09648804f7 | ||
|
|
8a0f7ba927 | ||
|
|
58bc5947cd | ||
|
|
8ed040a24e | ||
|
|
6518e61963 | ||
|
|
fbae7c3d30 | ||
|
|
cb8c859802 | ||
|
|
6f7f472478 | ||
|
|
81e13e5f68 | ||
|
|
1027009c15 | ||
|
|
fb80889d8e | ||
|
|
e28f92b4cd | ||
|
|
c113d8f9aa | ||
|
|
680ec0ef27 | ||
|
|
e0425f83a2 | ||
|
|
b3be038c10 | ||
|
|
ec5d9f2554 | ||
|
|
2e64968502 | ||
|
|
b8f3a81512 | ||
|
|
1ff1e1fe0b | ||
|
|
a245eeba5b | ||
|
|
f5eaffa427 | ||
|
|
10960a0aed | ||
|
|
1b403750f9 | ||
|
|
5c6ec3984c | ||
|
|
635c23dfc9 | ||
|
|
424c53f6fb | ||
|
|
69e9a329a5 | ||
|
|
8c4a93239b | ||
|
|
1c9f323e7e | ||
|
|
2bf8bd18c7 | ||
|
|
afe9a0259e | ||
|
|
03d577eb72 | ||
|
|
d4a5afea8b | ||
|
|
5db9002bc4 | ||
|
|
ec0fd92b80 | ||
|
|
a7f34d8c90 | ||
|
|
6e0256ca55 | ||
|
|
7108398099 | ||
|
|
e879af6b0e | ||
|
|
70eadcd330 | ||
|
|
ae9c1042cf | ||
|
|
d51cdca1d8 | ||
|
|
327e4785c5 | ||
|
|
2f9190dc34 | ||
|
|
88b277ea25 | ||
|
|
d4fae1dd35 | ||
|
|
10f062201b | ||
|
|
be55a2e547 | ||
|
|
3ccfc9cea9 | ||
|
|
31cdb095dc | ||
|
|
251c55d84c | ||
|
|
594dc6acaa | ||
|
|
b6965b3db3 | ||
|
|
62f294a51d | ||
|
|
435cd780b2 | ||
|
|
9023f95e71 | ||
|
|
c0d8ee17e8 | ||
|
|
ded1657119 | ||
|
|
bb270cc9e3 | ||
|
|
4d69689dd9 | ||
|
|
6ffacc2fe9 | ||
|
|
883b316f84 | ||
|
|
ecb402e10e | ||
|
|
5d41a3adb9 | ||
|
|
b1a47a2a91 | ||
|
|
4c8f933900 | ||
|
|
fbb6413287 | ||
|
|
cc61cc5c9f | ||
|
|
418f93ed96 | ||
|
|
bb36c914b7 | ||
|
|
a78dc78b95 | ||
|
|
b30b472e58 | ||
|
|
162c3cb604 | ||
|
|
8ded4b6edc | ||
|
|
16dbe9a1cb | ||
|
|
8ffd451832 | ||
|
|
4dbf6fbf0c | ||
|
|
47fb5334cc | ||
|
|
e18cb4c5c2 | ||
|
|
cb8a1c91a3 | ||
|
|
e62b85810e | ||
|
|
3dc6417e7a | ||
|
|
b872966011 | ||
|
|
17fb793833 | ||
|
|
af0e570b44 | ||
|
|
4c8f11555e | ||
|
|
6ebd26ecfd | ||
|
|
8cd08401f5 | ||
|
|
67dc54f01b | ||
|
|
467947d48e | ||
|
|
94c404e7bd | ||
|
|
8fd631f96b | ||
|
|
f75d9bd50e | ||
|
|
8f4d048859 | ||
|
|
7a2c9ab25f | ||
|
|
38e9128f1a | ||
|
|
b015275d74 | ||
|
|
b0d75b46ec | ||
|
|
4ea867836e | ||
|
|
237e429669 | ||
|
|
9151a98656 | ||
|
|
71607d4cf7 | ||
|
|
fc00567191 | ||
|
|
7a19d08ab2 | ||
|
|
af97f16c25 | ||
|
|
75a5f86cde | ||
|
|
9aa8bb8a72 | ||
|
|
4bbf067776 | ||
|
|
79f69f4e6e | ||
|
|
239c9841a1 | ||
|
|
3639220a82 | ||
|
|
8ef1fb45c8 |
@@ -0,0 +1 @@
|
|||||||
|
* text=auto
|
||||||
@@ -1,3 +1,13 @@
|
|||||||
|
[Tt]est[Rr]esult*
|
||||||
|
/cache
|
||||||
|
/logs
|
||||||
|
.project
|
||||||
|
.pydevproject
|
||||||
|
|
||||||
|
# coverage generated:
|
||||||
|
/cover-html/
|
||||||
|
.coverage
|
||||||
|
.coveralls.yml
|
||||||
|
|
||||||
# Compiled source #
|
# Compiled source #
|
||||||
###################
|
###################
|
||||||
@@ -6,12 +16,13 @@
|
|||||||
*.pyproj
|
*.pyproj
|
||||||
*.sln
|
*.sln
|
||||||
|
|
||||||
# Logs and databases #
|
# Headphones files #
|
||||||
######################
|
######################
|
||||||
*.log
|
*.log
|
||||||
*.db*
|
*.db*
|
||||||
*.db-journal
|
*.db-journal
|
||||||
*.ini
|
*.ini
|
||||||
|
version.lock
|
||||||
logs/*
|
logs/*
|
||||||
cache/*
|
cache/*
|
||||||
|
|
||||||
@@ -19,6 +30,7 @@ cache/*
|
|||||||
##################
|
##################
|
||||||
*.crt
|
*.crt
|
||||||
*.key
|
*.key
|
||||||
|
*.csr
|
||||||
|
|
||||||
# OS generated files #
|
# OS generated files #
|
||||||
######################
|
######################
|
||||||
@@ -28,8 +40,12 @@ ehthumbs.db
|
|||||||
Icon?
|
Icon?
|
||||||
Thumbs.db
|
Thumbs.db
|
||||||
|
|
||||||
#ignore thumbnails created by windows
|
#Ignore files generated by PyCharm
|
||||||
Thumbs.db
|
.idea/*
|
||||||
|
|
||||||
|
#Ignore files generated by vi
|
||||||
|
*.swp
|
||||||
|
|
||||||
#Ignore files build by Visual Studio
|
#Ignore files build by Visual Studio
|
||||||
*.obj
|
*.obj
|
||||||
*.exe
|
*.exe
|
||||||
@@ -55,8 +71,4 @@ Thumbs.db
|
|||||||
obj/
|
obj/
|
||||||
[Rr]elease*/
|
[Rr]elease*/
|
||||||
_ReSharper*/
|
_ReSharper*/
|
||||||
[Tt]est[Rr]esult*
|
.vscode
|
||||||
/cache
|
|
||||||
/logs
|
|
||||||
.project
|
|
||||||
.pydevproject
|
|
||||||
|
|||||||
@@ -0,0 +1,17 @@
|
|||||||
|
[pep8]
|
||||||
|
# E111 indentation is not a multiple of four
|
||||||
|
# E121 continuation line under-indented for hanging indent
|
||||||
|
# E122 continuation line missing indentation or outdented
|
||||||
|
# E124 closing bracket does not match visual indentation
|
||||||
|
# E125 continuation line with same indent as next logical line
|
||||||
|
# E126 continuation line over-indented for hanging indent
|
||||||
|
# E127 continuation line over-indented for visual indent
|
||||||
|
# E128 continuation line under-indented for visual indent
|
||||||
|
# E261 at least two spaces before inline comment
|
||||||
|
# E262 inline comment should start with '# '
|
||||||
|
# E265 block comment should start with '# '
|
||||||
|
# E302 expected 2 blank lines, found 1
|
||||||
|
# E501 line too long (312 > 160 characters)
|
||||||
|
# E502 the backslash is redundant between brackets
|
||||||
|
ignore = E111,E121,E122,E123,E124,E125,E126,E127,E128,E261,E262,E265,E302,E501,E502
|
||||||
|
max-line-length = 160
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
# Travis CI configuration file
|
||||||
|
# http://about.travis-ci.org/docs/
|
||||||
|
|
||||||
|
language: python
|
||||||
|
sudo: false
|
||||||
|
|
||||||
|
cache:
|
||||||
|
pip: true
|
||||||
|
directories:
|
||||||
|
- lib
|
||||||
|
|
||||||
|
# Available Python versions:
|
||||||
|
# http://about.travis-ci.org/docs/user/ci-environment/#Python-VM-images
|
||||||
|
python:
|
||||||
|
- "2.6"
|
||||||
|
matrix:
|
||||||
|
include:
|
||||||
|
- python: "2.7"
|
||||||
|
env: SENDCOVERAGE=1
|
||||||
|
|
||||||
|
# pylint 1.4 does not run under python 2.6
|
||||||
|
install:
|
||||||
|
- pip install pyOpenSSL
|
||||||
|
- pip install pylint==1.3.1
|
||||||
|
- pip install pyflakes
|
||||||
|
- pip install pep8
|
||||||
|
# coverage stuff:
|
||||||
|
- pip install coveralls
|
||||||
|
- pip install coverage
|
||||||
|
script:
|
||||||
|
- pep8 headphones
|
||||||
|
- pyflakes headphones
|
||||||
|
- nosetests
|
||||||
|
|
||||||
|
after_success:
|
||||||
|
# coverage stuff:
|
||||||
|
- if [ $SENDCOVERAGE ]; then coveralls; fi
|
||||||
@@ -0,0 +1,111 @@
|
|||||||
|
# API Reference
|
||||||
|
The API is still pretty new and needs some serious cleaning up on the backend but should be reasonably functional. There are no error codes yet.
|
||||||
|
|
||||||
|
## General structure
|
||||||
|
The API endpoint is `http://ip:port + HTTP_ROOT + /api?apikey=$apikey&cmd=$command`
|
||||||
|
|
||||||
|
Data response in JSON formatted. If executing a command like "delArtist" or "addArtist" you'll get back an "OK", else, you'll get the data you requested.
|
||||||
|
|
||||||
|
## API methods
|
||||||
|
|
||||||
|
### getIndex
|
||||||
|
Fetch data from index page. Returns: ArtistName, ArtistSortName, ArtistID, Status, DateAdded, [LatestAlbum, ReleaseDate, AlbumID], HaveTracks, TotalTracks, IncludeExtras, LastUpdated, [ArtworkURL, ThumbURL]: a remote url to the artwork/thumbnail.
|
||||||
|
|
||||||
|
To get the cached image path, see getArtistArt command. ThumbURL is added/updated when an artist is added/updated. If your using the database method to get the artwork, it's more reliable to use the ThumbURL than the ArtworkURL)
|
||||||
|
|
||||||
|
### getArtist&id=$artistid
|
||||||
|
Fetch artist data. returns the artist object (see above) and album info: Status, AlbumASIN, DateAdded, AlbumTitle, ArtistName, ReleaseDate, AlbumID, ArtistID, Type, ArtworkURL: hosted image path. For cached image, see getAlbumArt command)
|
||||||
|
|
||||||
|
### getAlbum&id=$albumid
|
||||||
|
Fetch data from album page. Returns the album object, a description object and a tracks object. Tracks contain: AlbumASIN, AlbumTitle, TrackID, Format, TrackDuration (ms), ArtistName, TrackTitle, AlbumID, ArtistID, Location, TrackNumber, CleanName (stripped of punctuation /styling), BitRate)
|
||||||
|
|
||||||
|
### getUpcoming
|
||||||
|
Returns: Status, AlbumASIN, DateAdded, AlbumTitle, ArtistName, ReleaseDate, AlbumID, ArtistID, Type
|
||||||
|
|
||||||
|
### getWanted
|
||||||
|
Returns: Status, AlbumASIN, DateAdded, AlbumTitle, ArtistName, ReleaseDate, AlbumID, ArtistID, Type
|
||||||
|
|
||||||
|
### getSimilar
|
||||||
|
Returns similar artists - with a higher "Count" being more likely to be similar. Returns: Count, ArtistName, ArtistID
|
||||||
|
|
||||||
|
### getHistory
|
||||||
|
Returns: Status, DateAdded, Title, URL (nzb), FolderName, AlbumID, Size (bytes)
|
||||||
|
|
||||||
|
### getLogs
|
||||||
|
Not working yet
|
||||||
|
|
||||||
|
### findArtist&name=$artistname[&limit=$limit]
|
||||||
|
Perform artist query on musicbrainz. Returns: url, score, name, uniquename (contains disambiguation info), id)
|
||||||
|
|
||||||
|
### findAlbum&name=$albumname[&limit=$limit]
|
||||||
|
Perform album query on musicbrainz. Returns: title, url (artist), id (artist), albumurl, albumid, score, uniquename (artist - with disambiguation)
|
||||||
|
|
||||||
|
### addArtist&id=$artistid
|
||||||
|
Add an artist to the db by artistid)
|
||||||
|
|
||||||
|
### addAlbum&id=$releaseid
|
||||||
|
Add an album to the db by album release id
|
||||||
|
|
||||||
|
### delArtist&id=$artistid
|
||||||
|
Delete artist from db by artistid)
|
||||||
|
|
||||||
|
### pauseArtist&id=$artistid
|
||||||
|
Pause an artist in db)
|
||||||
|
|
||||||
|
### resumeArtist&id=$artistid
|
||||||
|
Resume an artist in db)
|
||||||
|
|
||||||
|
### refreshArtist&id=$artistid
|
||||||
|
Refresh info for artist in db from musicbrainz
|
||||||
|
|
||||||
|
### queueAlbum&id=$albumid[&new=True&lossless=True]
|
||||||
|
Mark an album as wanted and start the searcher. Optional paramters: 'new' looks for new versions, 'lossless' looks only for lossless versions
|
||||||
|
|
||||||
|
### unqueueAlbum&id=$albumid
|
||||||
|
Unmark album as wanted / i.e. mark as skipped
|
||||||
|
|
||||||
|
### forceSearch
|
||||||
|
force search for wanted albums - not launched in a separate thread so it may take a bit to complete
|
||||||
|
### forceProcess[&dir=/path/to/folder]
|
||||||
|
Force post process albums in download directory - also not launched in a separate thread
|
||||||
|
### forceActiveArtistsUpdate
|
||||||
|
force Active Artist Update - also not launched in a separate thread
|
||||||
|
|
||||||
|
### getVersion
|
||||||
|
Returns some version information: git_path, install_type, current_version, installed_version, commits_behind
|
||||||
|
|
||||||
|
### checkGithub
|
||||||
|
Updates the version information above and returns getVersion data
|
||||||
|
|
||||||
|
### shutdown
|
||||||
|
Shut down headphones
|
||||||
|
|
||||||
|
### restart
|
||||||
|
Restart headphones
|
||||||
|
|
||||||
|
### update
|
||||||
|
Update headphones - you may want to check the install type in get version and not allow this if type==exe
|
||||||
|
|
||||||
|
### getArtistArt&id=$artistid
|
||||||
|
Returns either a relative path to the cached image, or a remote url if the image can't be saved to the cache dir
|
||||||
|
|
||||||
|
getAlbumArt&id=$albumid
|
||||||
|
see above
|
||||||
|
|
||||||
|
### getArtistInfo&id=$artistid
|
||||||
|
Returns Summary and Content, both formatted in html.
|
||||||
|
|
||||||
|
### getAlbumInfo&id=$albumid
|
||||||
|
See above, returns Summary and Content.
|
||||||
|
|
||||||
|
### getArtistThumb&id=$artistid
|
||||||
|
Returns either a relative path to the cached thumbnail artist image, or an http:// address if the cache dir can't be written to.
|
||||||
|
|
||||||
|
### getAlbumThumb&id=$albumid
|
||||||
|
See above.
|
||||||
|
|
||||||
|
### choose_specific_download&id=$albumid
|
||||||
|
Gives you a list of results from searcher.searchforalbum(). Basically runs a normal search, but rather than sorting them and downloading the best result, it dumps the data, which you can then pass on to download_specific_release(). Returns a list of dictionaries with params: title, size, url, provider & kind - all of these values must be passed back to download_specific_release
|
||||||
|
|
||||||
|
### download_specific_release&id=albumid&title=$title&size=$size&url=$url&provider=$provider&kind=$kind
|
||||||
|
Allows you to manually pass a choose_specific_download release back to searcher.send_to_downloader()
|
||||||
@@ -1,67 +0,0 @@
|
|||||||
The API is still pretty new and needs some serious cleaning up on the backend but should be
|
|
||||||
reasonably functional. There are no error codes yet,
|
|
||||||
|
|
||||||
|
|
||||||
General structure:
|
|
||||||
http://localhost:8181 + HTTP_ROOT + /api?apikey=$apikey&cmd=$command
|
|
||||||
|
|
||||||
Data returned in json format. If executing a command like "delArtist" or "addArtist" you'll get back an "OK", else, you'll get the data you requested
|
|
||||||
|
|
||||||
$commands¶meters[&optionalparameters]:
|
|
||||||
|
|
||||||
|
|
||||||
getIndex (fetch data from index page. Returns: ArtistName, ArtistSortName, ArtistID, Status, DateAdded,
|
|
||||||
[LatestAlbum, ReleaseDate, AlbumID], HaveTracks, TotalTracks,
|
|
||||||
IncludeExtras, LastUpdated, [ArtworkURL, ThumbURL]: a remote url to the artwork/thumbnail. To get the cached image path, see getArtistArt command.
|
|
||||||
ThumbURL is added/updated when an artist is added/updated. If your using the database method to get the artwork,
|
|
||||||
it's more reliable to use the ThumbURL than the ArtworkURL)
|
|
||||||
|
|
||||||
getArtist&id=$artistid (fetch artist data. returns the artist object (see above) and album info: Status, AlbumASIN, DateAdded, AlbumTitle, ArtistName, ReleaseDate, AlbumID, ArtistID, Type, ArtworkURL: hosted image path. For cached image, see getAlbumArt command)
|
|
||||||
|
|
||||||
getAlbum&id=$albumid (fetch data from album page. Returns the album object, a description object and a tracks object. Tracks contain: AlbumASIN, AlbumTitle, TrackID, Format, TrackDuration (ms), ArtistName, TrackTitle, AlbumID, ArtistID, Location, TrackNumber, CleanName (stripped of punctuation /styling), BitRate)
|
|
||||||
|
|
||||||
getUpcoming (Returns: Status, AlbumASIN, DateAdded, AlbumTitle, ArtistName, ReleaseDate, AlbumID, ArtistID, Type)
|
|
||||||
|
|
||||||
getWanted (Returns: Status, AlbumASIN, DateAdded, AlbumTitle, ArtistName, ReleaseDate, AlbumID, ArtistID, Type)
|
|
||||||
|
|
||||||
getSimilar (Returns similar artists - with a higher "Count" being more likely to be similar. Returns: Count, ArtistName, ArtistID)
|
|
||||||
|
|
||||||
getHistory (Returns: Status, DateAdded, Title, URL (nzb), FolderName, AlbumID, Size (bytes))
|
|
||||||
|
|
||||||
getLogs (not working yet)
|
|
||||||
|
|
||||||
findArtist&name=$artistname[&limit=$limit] (perform artist query on musicbrainz. Returns: url, score, name, uniquename (contains disambiguation info), id)
|
|
||||||
|
|
||||||
findAlbum&name=$albumname[&limit=$limit] (perform album query on musicbrainz. Returns: title, url (artist), id (artist), albumurl, albumid, score, uniquename (artist - with disambiguation)
|
|
||||||
|
|
||||||
addArtist&id=$artistid (add an artist to the db by artistid)
|
|
||||||
addAlbum&id=$releaseid (add an album to the db by album release id)
|
|
||||||
|
|
||||||
delArtist&id=$artistid (delete artist from db by artistid)
|
|
||||||
|
|
||||||
pauseArtist&id=$artistid (pause an artist in db)
|
|
||||||
resumeArtist&id=$artistid (resume an artist in db)
|
|
||||||
|
|
||||||
refreshArtist&id=$artistid (refresh info for artist in db from musicbrainz)
|
|
||||||
|
|
||||||
queueAlbum&id=$albumid[&new=True&lossless=True] (Mark an album as wanted and start the searcher. Optional paramters: 'new' looks for new versions, 'lossless' looks only for lossless versions)
|
|
||||||
unqueueAlbum&id=$albumid (Unmark album as wanted / i.e. mark as skipped)
|
|
||||||
|
|
||||||
forceSearch (force search for wanted albums - not launched in a separate thread so it may take a bit to complete)
|
|
||||||
forceProcess (force post process albums in download directory - also not launched in a separate thread)
|
|
||||||
|
|
||||||
getVersion (Returns some version information: git_path, install_type, current_version, installed_version, commits_behind
|
|
||||||
checkGithub (updates the version information above and returns getVersion data)
|
|
||||||
|
|
||||||
shutdown (shut down headphones)
|
|
||||||
restart (restart headphones)
|
|
||||||
update (update headphones - you may want to check the install type in get version and not allow this if type==exe)
|
|
||||||
|
|
||||||
getArtistArt&id=$artistid (Returns either a relative path to the cached image, or a remote url if the image can't be saved to the cache dir)
|
|
||||||
getAlbumArt&id=$albumid (see above)
|
|
||||||
|
|
||||||
getArtistInfo&id=$artistid (Returns Summary and Content, both formatted in html)
|
|
||||||
getAlbumInfo&id=$albumid (See above, returns Summary and Content)
|
|
||||||
|
|
||||||
getArtistThumb&id=$artistid (Returns either a relative path to the cached thumbnail artist image, or an http:// address if the cache dir can't be written to)
|
|
||||||
getAlbumThumb&id=$albumid (see above)
|
|
||||||
@@ -0,0 +1,277 @@
|
|||||||
|
# Changelog
|
||||||
|
|
||||||
|
## v0.5.11
|
||||||
|
Released 20 February 2016
|
||||||
|
|
||||||
|
Highlights:
|
||||||
|
* Added: Soft chroot option
|
||||||
|
* Fixed: Post processing temporary directory fix (#2504)
|
||||||
|
* Fixed: Ubuntu init script (#2509)
|
||||||
|
* Fixed: Image cache uncaught exception (#2485)
|
||||||
|
* Improved: $Date/$date variable in folder renaming
|
||||||
|
* Improved: Reuse transmission session id
|
||||||
|
|
||||||
|
The full list of commits can be found [here](https://github.com/rembo10/headphones/compare/v0.5.10...v0.5.11).
|
||||||
|
|
||||||
|
## v0.5.10
|
||||||
|
Released 29 January 2016
|
||||||
|
|
||||||
|
Highlights:
|
||||||
|
* Added: API option to post-process single folders
|
||||||
|
* Added: Ability to specify extension when re-encoding
|
||||||
|
* Added: Option to stop renaming folders
|
||||||
|
* Fixed: Utorrent torrents not being removed (#2385)
|
||||||
|
* Fixed: Torznab to transmission
|
||||||
|
* Fixed: Magnet folder names in history
|
||||||
|
* Fixed: Multiple torcache fixes
|
||||||
|
* Fixed: Updated requests & urllib3 to latest versions to fix errors with pyOpenSSL
|
||||||
|
* Improved: Use a temporary folder during post-processing
|
||||||
|
* Improved: Added verify_ssl_cert option
|
||||||
|
* Improved: Fixed track matching progress
|
||||||
|
* Improved: pylint, pep8 & pylint fixes
|
||||||
|
* Improved: Stop JS links from scrolling to the top of the page
|
||||||
|
|
||||||
|
The full list of commits can be found [here](https://github.com/rembo10/headphones/compare/v0.5.9...v0.5.10).
|
||||||
|
|
||||||
|
## v0.5.9
|
||||||
|
Released 05 September 2015
|
||||||
|
|
||||||
|
Highlights:
|
||||||
|
* Added: Providers Strike, Jackett, custom Torznabs
|
||||||
|
* Added: Option to stop post-processing if no good match found (#2343)
|
||||||
|
* Fixed: Blackhole -> Magnet, limit to torcache
|
||||||
|
* Fixed: Kat 403 flac error
|
||||||
|
* Fixed: Last.fm errors
|
||||||
|
* Fixed: Pushover notifications
|
||||||
|
* Improved: Rutracker logging, switched to requests lib
|
||||||
|
|
||||||
|
The full list of commits can be found [here](https://github.com/rembo10/headphones/compare/v0.5.8...v0.5.9).
|
||||||
|
|
||||||
|
## v0.5.8
|
||||||
|
Released 13 July 2015
|
||||||
|
|
||||||
|
Highlights:
|
||||||
|
* Added: Option to only include official extras
|
||||||
|
* Added: Option to wait until album release date before searching
|
||||||
|
* Fixed: NotifyMyAndroid notifications
|
||||||
|
* Fixed: Plex Notifications
|
||||||
|
* Fixed: Metacritic parsing
|
||||||
|
* Fixed: Pushbullet notifications
|
||||||
|
* Fixed: What.cd not honoring custom search term (#2279)
|
||||||
|
* Improved: XSS Search bug
|
||||||
|
* Improved: Config page layout
|
||||||
|
* Improved: Set localhost as default
|
||||||
|
* Improved: Better single artist scanning
|
||||||
|
|
||||||
|
The full list of commits can be found [here](https://github.com/rembo10/headphones/compare/v0.5.7...v0.5.8).
|
||||||
|
|
||||||
|
## v0.5.7
|
||||||
|
Released 01 July 2015
|
||||||
|
|
||||||
|
Highlights:
|
||||||
|
* Improved: Moved pushover to use requests lib
|
||||||
|
* Improved: Plex tokens with Plex Home
|
||||||
|
* Improved: Added getLogs & clearLogs to api
|
||||||
|
* Improved: Cache MetaCritic scores. Added user-agent header to fix 403 errors
|
||||||
|
* Improved: Specify whether to delete folders when force post-processing
|
||||||
|
* Improved: Convert target bitrate to vbr preset for what.cd searching
|
||||||
|
* Improved: Switched Pushover to requests lib
|
||||||
|
|
||||||
|
The full list of commits can be found [here](https://github.com/rembo10/headphones/compare/v0.5.6...v0.5.7).
|
||||||
|
|
||||||
|
## v0.5.6
|
||||||
|
Released 08 June 2015
|
||||||
|
|
||||||
|
Highlights:
|
||||||
|
* Added: Metacritic scores
|
||||||
|
* Added: Series support (e.g. Cafe Del Mar, Now That's What I Call Music, etc)
|
||||||
|
* Added: Filter out clean/edited/censored releases (#2198)
|
||||||
|
* Added: Button on the log page to toggle verbose/debug logging
|
||||||
|
* Fixed: Connecting to SABnzbd over https with python >= 2.7.9
|
||||||
|
* Fixed: Email Notifications with SSL
|
||||||
|
* Fixed: Don't limit musicbrainz results to first 100
|
||||||
|
* Fixed: nzbget url fix
|
||||||
|
* Fixed: OSX Notifications
|
||||||
|
* Improved: Cuesplit, allow wav, ape to be split
|
||||||
|
* Improved: Moved the 'freeze db' option to the advanced->misc. tab
|
||||||
|
* Improved: Moved kickass searching to json api, so it doesn't throw 404 errors anymore when there are no results
|
||||||
|
* Improved: SSL for headphones indexer
|
||||||
|
* Improved: Disable update dialog box if check_github is diabled
|
||||||
|
|
||||||
|
The full list of commits can be found [here](https://github.com/rembo10/headphones/compare/v0.5.5...v0.5.6).
|
||||||
|
|
||||||
|
## v0.5.5
|
||||||
|
Released 04 May 2015
|
||||||
|
|
||||||
|
Highlights:
|
||||||
|
* Added: force ID3v2.3 during post processing (#2121)
|
||||||
|
* Added: MusicBrainz authentication (#2125)
|
||||||
|
* Added: Email notifications (addresses #1045)
|
||||||
|
* Fixed: Kickass url updated to kickass.to (#2119)
|
||||||
|
* Fixed: Piratebay returning 0 bytes for all files
|
||||||
|
* Fixed: Albums stopped automatically refreshing when adding an artist
|
||||||
|
* Fixed: Min/max sizes for target bitrate
|
||||||
|
* Fixed: Don't filter any results if looking for a specific download
|
||||||
|
* Fixed: Sort by size in the specific download table
|
||||||
|
* Fixed: Deal with beets recommendation.none correctly
|
||||||
|
* Improved: Close dialog window automatically when choosing a specific download
|
||||||
|
* Improved: Move some repetitive log messages to debug level
|
||||||
|
|
||||||
|
The full list of commits can be found [here](https://github.com/rembo10/headphones/compare/v0.5.4...v0.5.5).
|
||||||
|
|
||||||
|
## v0.5.4
|
||||||
|
Released 05 February 2015
|
||||||
|
|
||||||
|
Highlights:
|
||||||
|
* Added: backported 'Scan Artist' feature from `sarakha63/headphones`
|
||||||
|
* Fixed: change file permissions of cache files according to settings (#2102)
|
||||||
|
* Fixed: hide Songkick if no regional events are available
|
||||||
|
* Fixed: only reschedule jobs if timeout changed (#2099)
|
||||||
|
* Fixed: limit dialog height (#2096)
|
||||||
|
* Improved: upgraded requests to 2.5.1
|
||||||
|
* Improved: upgraded unidecode to 0.04.17
|
||||||
|
* Improved: upgraded tzlocal to 1.1.2
|
||||||
|
* Improved: upgraded PyTZ to 2014.10
|
||||||
|
* Improved: upgraded mako to 1.0.1
|
||||||
|
* Improved: upgraded mutagen to 1.27
|
||||||
|
* Improved: upgraded beets to 1.3.10
|
||||||
|
|
||||||
|
The full list of commits can be found [here](https://github.com/rembo10/headphones/compare/v0.5.3...v0.5.4).
|
||||||
|
|
||||||
|
## v0.5.3
|
||||||
|
Released 15 January 2015
|
||||||
|
|
||||||
|
Highlights:
|
||||||
|
* Added: update active artists via API (#2075)
|
||||||
|
* Fixed: queue instance lacks `add` method (#2055)
|
||||||
|
* Improved: better SSL error messages (#2058)
|
||||||
|
|
||||||
|
The full list of commits can be found [here](https://github.com/rembo10/headphones/compare/v0.5.2...v0.5.3).
|
||||||
|
|
||||||
|
## v0.5.2
|
||||||
|
Released 28 December 2014
|
||||||
|
|
||||||
|
Highlights:
|
||||||
|
* Added: advanced option to ignore certain folders by patterns. (#2037)
|
||||||
|
* Added: advanced option to ignore certain files by patterns (library only)
|
||||||
|
* Added: specify optional paths to CUE splitting tools (#1938)
|
||||||
|
* Added: experimental support for OPB (provide details yourself!)
|
||||||
|
* Fixed: magnet to torrent conversion (#1926)
|
||||||
|
* Fixed: new KAT URL (#2043)
|
||||||
|
* Fixed: LMS notifications (#1564)
|
||||||
|
* Improved: notify user of SSL-related warnings, instead of silently failing.
|
||||||
|
* Improved: show all search results for 'Choose Specific Release'
|
||||||
|
|
||||||
|
The full list of commits can be found [here](https://github.com/rembo10/headphones/compare/v0.5.1...v0.5.2).
|
||||||
|
|
||||||
|
## v0.5.1
|
||||||
|
Released 13 November 2014
|
||||||
|
|
||||||
|
Highlights:
|
||||||
|
* Added: allow one to disable interval tasks (#2002)
|
||||||
|
* Added: script to downgrade Headphones to last version that started (Linux only)
|
||||||
|
* Fixed: SSL issues in CherryPy. Self-generated certificates will be 2048 now (#1995)
|
||||||
|
* Fixed: Transmission URL detection (#1998)
|
||||||
|
* Fixed: missing dependencies for APScheduler and CherryPy (#2001)
|
||||||
|
* Improved: symlink infinite recursion detection
|
||||||
|
|
||||||
|
The full list of commits can be found [here](https://github.com/rembo10/headphones/compare/v0.5...v0.5.1).
|
||||||
|
|
||||||
|
## v0.5
|
||||||
|
Released 10 November 2014
|
||||||
|
|
||||||
|
Highlights:
|
||||||
|
* Added: CUE splitter
|
||||||
|
* Added: filter search result by MusicBrainz Release Group ID
|
||||||
|
* Added: follow symlinks while scanning library (#1953)
|
||||||
|
* Fixed: crash during post processing (#1897)
|
||||||
|
* Fixed: embedding lyrics (#1896)
|
||||||
|
* Fixed: HTTP errors with older versions of Python 2.6
|
||||||
|
* Fixed: jump back to top of page (#1948)
|
||||||
|
* Improved: parse MusicBrainz RGID first when post processing (#1952)
|
||||||
|
* Improved: Growl unicode characters (#1695)
|
||||||
|
* Improved: search handling for PB and KAT
|
||||||
|
* Improved: Last.FM API support (#1877)
|
||||||
|
* Improved: upgraded CherryPy to version 3.6.0
|
||||||
|
* Improved: upgraded Requests to version 2.4.1
|
||||||
|
* Improved: upgraded APScheduler to version 3.0.1
|
||||||
|
* Improved: lot of code refactoring
|
||||||
|
|
||||||
|
The full list of commits can be found [here](https://github.com/rembo10/headphones/compare/v0.4...v0.5).
|
||||||
|
|
||||||
|
## v0.4
|
||||||
|
Released 20 September 2014
|
||||||
|
|
||||||
|
Highlights:
|
||||||
|
* Added: support for libav-tools (which replaces FFmpeg under Ubuntu)
|
||||||
|
* Added: option to freeze library when post processing
|
||||||
|
* Added: Songkick per area
|
||||||
|
* Added: rename original NFO file (#1797)
|
||||||
|
* Removed: removed dead search providers
|
||||||
|
* Fixed: removed left-overs of old packages
|
||||||
|
* Improved: rename by original folder (#1811)
|
||||||
|
* Improved: uTorrent fixess
|
||||||
|
* Improved: delayed loading of album art
|
||||||
|
* Improved: search result parser
|
||||||
|
|
||||||
|
The full list of commits can be found [here](https://github.com/rembo10/headphones/compare/v0.3.4...v0.4).
|
||||||
|
|
||||||
|
## v0.3.4
|
||||||
|
Released 15 May 2014
|
||||||
|
|
||||||
|
The full list of commits can be found [here](https://github.com/rembo10/headphones/compare/v0.3.3...v0.3.4).
|
||||||
|
|
||||||
|
## v0.3.3
|
||||||
|
Released 05 May 2014
|
||||||
|
|
||||||
|
The full list of commits can be found [here](https://github.com/rembo10/headphones/compare/v0.3.2...v0.3.3).
|
||||||
|
|
||||||
|
## v0.3.2
|
||||||
|
Released 17 April 2014
|
||||||
|
|
||||||
|
The full list of commits can be found [here](https://github.com/rembo10/headphones/compare/v0.3.1...v0.3.2).
|
||||||
|
|
||||||
|
## v0.3.1
|
||||||
|
Released 11 April 2014
|
||||||
|
|
||||||
|
The full list of commits can be found [here](https://github.com/rembo10/headphones/compare/v0.3...v0.3.1).
|
||||||
|
|
||||||
|
## v0.3
|
||||||
|
Released 09 April 2014
|
||||||
|
|
||||||
|
The full list of commits can be found [here](https://github.com/rembo10/headphones/compare/v0.2.3...v0.3).
|
||||||
|
|
||||||
|
## v0.2.3
|
||||||
|
Released 28 March 2014
|
||||||
|
|
||||||
|
The full list of commits can be found [here](https://github.com/rembo10/headphones/compare/v0.2.2...v0.2.3).
|
||||||
|
|
||||||
|
## v0.2.2
|
||||||
|
Released 15 January 2014
|
||||||
|
|
||||||
|
The full list of commits can be found [here](https://github.com/rembo10/headphones/compare/v0.2.1...v0.2.2).
|
||||||
|
|
||||||
|
## v0.2.1
|
||||||
|
Released 13 January 2014
|
||||||
|
|
||||||
|
The full list of commits can be found [here](https://github.com/rembo10/headphones/compare/v0.2...v0.2.1).
|
||||||
|
|
||||||
|
## v0.2
|
||||||
|
Released 13 January 2014
|
||||||
|
|
||||||
|
The full list of commits can be found [here](https://github.com/rembo10/headphones/compare/v0.1.2...v0.2).
|
||||||
|
|
||||||
|
## v0.1.2
|
||||||
|
Released 11 October 2013
|
||||||
|
|
||||||
|
The full list of commits can be found [here](https://github.com/rembo10/headphones/compare/v0.1.1...v0.1.2).
|
||||||
|
|
||||||
|
## v0.1.1
|
||||||
|
Released 26 August 2013
|
||||||
|
|
||||||
|
The full list of commits can be found [here](https://github.com/rembo10/headphones/compare/v0.1...v0.1.1).
|
||||||
|
|
||||||
|
## v0.1
|
||||||
|
Released 05 August 2013
|
||||||
|
|
||||||
|
The full list of commits can be found [here](https://github.com/rembo10/headphones/compare/2156e1341405d07c5bcfbe994f6b354b32d94cda...v0.1).
|
||||||
@@ -0,0 +1,52 @@
|
|||||||
|
# Contributing to Headphones
|
||||||
|
|
||||||
|
## Issues
|
||||||
|
In case you read this because you are posting an issue, please take a minute and conside the things below. The issue tracker is not a support forum. It is primarily intended to submit bugs, improvements or feature requests. However, we are glad to help you, and make sure the problem is not caused by Headphones, but don't expect step-by-step answers.
|
||||||
|
|
||||||
|
* Use the search function. Chances are that your problem is already discussed. Do not append to (closed) issues if your problem does not fit the discussion.
|
||||||
|
* Visit the [Troubleshooting](../../wiki/TroubleShooting) wiki first.
|
||||||
|
* Use [proper formatting](https://help.github.com/articles/github-flavored-markdown/). Paste your logs in code blocks.
|
||||||
|
* Close your issue if you resolved it.
|
||||||
|
|
||||||
|
## Pull Requests
|
||||||
|
If you think you can contribute code to the Headphones repository, do not hesitate to submit a pull request.
|
||||||
|
|
||||||
|
### Branches
|
||||||
|
All pull requests should be based on the `develop` branch, to minimize cross merges. When you want to develop a new feature, clone the repository with `git clone origin/develop -b FEATURE_NAME`. Use meaningful commit messages.
|
||||||
|
|
||||||
|
### Python Code
|
||||||
|
|
||||||
|
#### Compatibility
|
||||||
|
The code should work with Python 2.6 and 2.7. Note that Headphones runs on different platforms, including Network Attached Storage devices such as Synology.
|
||||||
|
|
||||||
|
Re-use existing code. Do not hesitate to add logging in your code. You can the logger module `headphones.logger.*` for this. Web requests are invoked via `headphones.request.*` and derived ones. Use these methods to automatically add proper and meaningful error handling.
|
||||||
|
|
||||||
|
#### Code conventions
|
||||||
|
Although Headphones did not adapt a code convention in the past, we try to follow the [PEP8](http://legacy.python.org/dev/peps/pep-0008/) conventions for future code. A short summary to remind you (copied from http://wiki.ros.org/PyStyleGuide):
|
||||||
|
|
||||||
|
* 4 space indentation
|
||||||
|
* 80 characters per line
|
||||||
|
* `package_name`
|
||||||
|
* `ClassName`
|
||||||
|
* `method_name`
|
||||||
|
* `field_name`
|
||||||
|
* `_private_something`
|
||||||
|
* `self.__really_private_field`
|
||||||
|
* `_global`
|
||||||
|
|
||||||
|
#### Documentation
|
||||||
|
Document your code. Use docstrings See [PEP-257](https://www.python.org/dev/peps/pep-0257/) for more information.
|
||||||
|
|
||||||
|
#### Continuous Integration
|
||||||
|
Headphones has a configuration file for [travis-ci](https://travis-ci.org/). You can add your forked repo to Travis to have it check your code against PEP8, PyLint, and PyFlakes for you. Your pull request will show a green check mark or a red cross on each tested commit, depending on if linting passes.
|
||||||
|
|
||||||
|
### HTML/Template code
|
||||||
|
|
||||||
|
#### Compatibility
|
||||||
|
HTML5 compatible browsers are targetted. There is no specific mobile version of Headphones yet.
|
||||||
|
|
||||||
|
#### Conventions
|
||||||
|
* 4 space indentation
|
||||||
|
* `methodName`
|
||||||
|
* `variableName`
|
||||||
|
* `ClassName`
|
||||||
@@ -14,26 +14,30 @@
|
|||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with Headphones. If not, see <http://www.gnu.org/licenses/>.
|
# along with Headphones. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
import os, sys, locale
|
import os
|
||||||
import time
|
import sys
|
||||||
import signal
|
|
||||||
|
|
||||||
from lib.configobj import ConfigObj
|
# Ensure lib added to path, before any other imports
|
||||||
|
sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'lib/'))
|
||||||
import headphones
|
|
||||||
|
|
||||||
from headphones import webstart, logger
|
from headphones import webstart, logger
|
||||||
|
|
||||||
try:
|
import locale
|
||||||
import argparse
|
import time
|
||||||
except ImportError:
|
import signal
|
||||||
import lib.argparse as argparse
|
import argparse
|
||||||
|
import headphones
|
||||||
|
|
||||||
|
# Register signals, such as CTRL + C
|
||||||
signal.signal(signal.SIGINT, headphones.sig_handler)
|
signal.signal(signal.SIGINT, headphones.sig_handler)
|
||||||
signal.signal(signal.SIGTERM, headphones.sig_handler)
|
signal.signal(signal.SIGTERM, headphones.sig_handler)
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
|
"""
|
||||||
|
Headphones application entry point. Parses arguments, setups encoding and
|
||||||
|
initializes the application.
|
||||||
|
"""
|
||||||
|
|
||||||
# Fixed paths to Headphones
|
# Fixed paths to Headphones
|
||||||
if hasattr(sys, 'frozen'):
|
if hasattr(sys, 'frozen'):
|
||||||
@@ -59,112 +63,146 @@ def main():
|
|||||||
headphones.SYS_ENCODING = 'UTF-8'
|
headphones.SYS_ENCODING = 'UTF-8'
|
||||||
|
|
||||||
# Set up and gather command line arguments
|
# Set up and gather command line arguments
|
||||||
parser = argparse.ArgumentParser(description='Music add-on for SABnzbd+')
|
parser = argparse.ArgumentParser(
|
||||||
|
description='Music add-on for SABnzbd+, Transmission and more.')
|
||||||
|
|
||||||
parser.add_argument('-v', '--verbose', action='store_true', help='Increase console logging verbosity')
|
parser.add_argument(
|
||||||
parser.add_argument('-q', '--quiet', action='store_true', help='Turn off console logging')
|
'-v', '--verbose', action='store_true', help='Increase console logging verbosity')
|
||||||
parser.add_argument('-d', '--daemon', action='store_true', help='Run as a daemon')
|
parser.add_argument(
|
||||||
parser.add_argument('-p', '--port', type=int, help='Force Headphones to run on a specified port')
|
'-q', '--quiet', action='store_true', help='Turn off console logging')
|
||||||
parser.add_argument('--datadir', help='Specify a directory where to store your data files')
|
parser.add_argument(
|
||||||
|
'-d', '--daemon', action='store_true', help='Run as a daemon')
|
||||||
|
parser.add_argument(
|
||||||
|
'-p', '--port', type=int, help='Force Headphones to run on a specified port')
|
||||||
|
parser.add_argument(
|
||||||
|
'--datadir', help='Specify a directory where to store your data files')
|
||||||
parser.add_argument('--config', help='Specify a config file to use')
|
parser.add_argument('--config', help='Specify a config file to use')
|
||||||
parser.add_argument('--nolaunch', action='store_true', help='Prevent browser from launching on startup')
|
parser.add_argument('--nolaunch', action='store_true',
|
||||||
parser.add_argument('--pidfile', help='Create a pid file (only relevant when running as a daemon)')
|
help='Prevent browser from launching on startup')
|
||||||
|
parser.add_argument(
|
||||||
|
'--pidfile', help='Create a pid file (only relevant when running as a daemon)')
|
||||||
|
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
if args.verbose:
|
if args.verbose:
|
||||||
headphones.VERBOSE = 2
|
headphones.VERBOSE = True
|
||||||
elif args.quiet:
|
if args.quiet:
|
||||||
headphones.VERBOSE = 0
|
headphones.QUIET = True
|
||||||
|
|
||||||
|
# Do an intial setup of the logger.
|
||||||
|
logger.initLogger(console=not headphones.QUIET, log_dir=False,
|
||||||
|
verbose=headphones.VERBOSE)
|
||||||
|
|
||||||
if args.daemon:
|
if args.daemon:
|
||||||
if sys.platform == 'win32':
|
if sys.platform == 'win32':
|
||||||
print "Daemonize not supported under Windows, starting normally"
|
sys.stderr.write(
|
||||||
|
"Daemonizing not supported under Windows, starting normally\n")
|
||||||
else:
|
else:
|
||||||
headphones.DAEMON=True
|
headphones.DAEMON = True
|
||||||
headphones.VERBOSE = False
|
headphones.QUIET = True
|
||||||
|
|
||||||
if args.pidfile:
|
if args.pidfile:
|
||||||
headphones.PIDFILE = str(args.pidfile)
|
headphones.PIDFILE = str(args.pidfile)
|
||||||
|
|
||||||
# If the pidfile already exists, headphones may still be running, so exit
|
# If the pidfile already exists, headphones may still be running, so
|
||||||
|
# exit
|
||||||
if os.path.exists(headphones.PIDFILE):
|
if os.path.exists(headphones.PIDFILE):
|
||||||
sys.exit("PID file '" + headphones.PIDFILE + "' already exists. Exiting.")
|
raise SystemExit("PID file '%s' already exists. Exiting." %
|
||||||
|
headphones.PIDFILE)
|
||||||
|
|
||||||
# The pidfile is only useful in daemon mode, make sure we can write the file properly
|
# The pidfile is only useful in daemon mode, make sure we can write the
|
||||||
|
# file properly
|
||||||
if headphones.DAEMON:
|
if headphones.DAEMON:
|
||||||
headphones.CREATEPID = True
|
headphones.CREATEPID = True
|
||||||
try:
|
|
||||||
file(headphones.PIDFILE, 'w').write("pid\n")
|
|
||||||
except IOError, e:
|
|
||||||
raise SystemExit("Unable to write PID file: %s [%d]" % (e.strerror, e.errno))
|
|
||||||
else:
|
|
||||||
logger.warn("Not running in daemon mode. PID file creation disabled.")
|
|
||||||
|
|
||||||
|
try:
|
||||||
|
with open(headphones.PIDFILE, 'w') as fp:
|
||||||
|
fp.write("pid\n")
|
||||||
|
except IOError as e:
|
||||||
|
raise SystemExit("Unable to write PID file: %s", e)
|
||||||
|
else:
|
||||||
|
logger.warn("Not running in daemon mode. PID file creation " \
|
||||||
|
"disabled.")
|
||||||
|
|
||||||
|
# Determine which data directory and config file to use
|
||||||
if args.datadir:
|
if args.datadir:
|
||||||
headphones.DATA_DIR = args.datadir
|
headphones.DATA_DIR = args.datadir
|
||||||
else:
|
else:
|
||||||
headphones.DATA_DIR = headphones.PROG_DIR
|
headphones.DATA_DIR = headphones.PROG_DIR
|
||||||
|
|
||||||
if args.config:
|
if args.config:
|
||||||
headphones.CONFIG_FILE = args.config
|
config_file = args.config
|
||||||
else:
|
else:
|
||||||
headphones.CONFIG_FILE = os.path.join(headphones.DATA_DIR, 'config.ini')
|
config_file = os.path.join(headphones.DATA_DIR, 'config.ini')
|
||||||
|
|
||||||
# Try to create the DATA_DIR if it doesn't exist
|
# Try to create the DATA_DIR if it doesn't exist
|
||||||
if not os.path.exists(headphones.DATA_DIR):
|
if not os.path.exists(headphones.DATA_DIR):
|
||||||
try:
|
try:
|
||||||
os.makedirs(headphones.DATA_DIR)
|
os.makedirs(headphones.DATA_DIR)
|
||||||
except OSError:
|
except OSError:
|
||||||
raise SystemExit('Could not create data directory: ' + headphones.DATA_DIR + '. Exiting....')
|
raise SystemExit(
|
||||||
|
'Could not create data directory: ' + headphones.DATA_DIR + '. Exiting....')
|
||||||
|
|
||||||
# Make sure the DATA_DIR is writeable
|
# Make sure the DATA_DIR is writeable
|
||||||
if not os.access(headphones.DATA_DIR, os.W_OK):
|
if not os.access(headphones.DATA_DIR, os.W_OK):
|
||||||
raise SystemExit('Cannot write to the data directory: ' + headphones.DATA_DIR + '. Exiting...')
|
raise SystemExit(
|
||||||
|
'Cannot write to the data directory: ' + headphones.DATA_DIR + '. Exiting...')
|
||||||
|
|
||||||
# Put the database in the DATA_DIR
|
# Put the database in the DATA_DIR
|
||||||
headphones.DB_FILE = os.path.join(headphones.DATA_DIR, 'headphones.db')
|
headphones.DB_FILE = os.path.join(headphones.DATA_DIR, 'headphones.db')
|
||||||
|
|
||||||
headphones.CFG = ConfigObj(headphones.CONFIG_FILE, encoding='utf-8')
|
# Read config and start logging
|
||||||
|
try:
|
||||||
# Read config & start logging
|
headphones.initialize(config_file)
|
||||||
headphones.initialize()
|
except headphones.exceptions.SoftChrootError as e:
|
||||||
|
raise SystemExit('FATAL ERROR')
|
||||||
|
|
||||||
if headphones.DAEMON:
|
if headphones.DAEMON:
|
||||||
if sys.platform == "win32":
|
headphones.daemonize()
|
||||||
print "Daemonize not supported under Windows, starting normally"
|
|
||||||
else:
|
|
||||||
headphones.daemonize()
|
|
||||||
|
|
||||||
#configure the connection to the musicbrainz database
|
# Configure the connection to the musicbrainz database
|
||||||
headphones.mb.startmb()
|
headphones.mb.startmb()
|
||||||
|
|
||||||
# Force the http port if neccessary
|
# Force the http port if neccessary
|
||||||
if args.port:
|
if args.port:
|
||||||
http_port = args.port
|
http_port = args.port
|
||||||
logger.info('Using forced port: %i' % http_port)
|
logger.info('Using forced web server port: %i', http_port)
|
||||||
else:
|
else:
|
||||||
http_port = int(headphones.HTTP_PORT)
|
http_port = int(headphones.CONFIG.HTTP_PORT)
|
||||||
|
|
||||||
# Try to start the server.
|
# Check if pyOpenSSL is installed. It is required for certificate generation
|
||||||
webstart.initialize({
|
# and for CherryPy.
|
||||||
'http_port': http_port,
|
if headphones.CONFIG.ENABLE_HTTPS:
|
||||||
'http_host': headphones.HTTP_HOST,
|
try:
|
||||||
'http_root': headphones.HTTP_ROOT,
|
import OpenSSL
|
||||||
'http_proxy': headphones.HTTP_PROXY,
|
except ImportError:
|
||||||
'enable_https': headphones.ENABLE_HTTPS,
|
logger.warn("The pyOpenSSL module is missing. Install this " \
|
||||||
'https_cert': headphones.HTTPS_CERT,
|
"module to enable HTTPS. HTTPS will be disabled.")
|
||||||
'https_key': headphones.HTTPS_KEY,
|
headphones.CONFIG.ENABLE_HTTPS = False
|
||||||
'http_username': headphones.HTTP_USERNAME,
|
|
||||||
'http_password': headphones.HTTP_PASSWORD,
|
|
||||||
})
|
|
||||||
|
|
||||||
if headphones.LAUNCH_BROWSER and not args.nolaunch:
|
# Try to start the server. Will exit here is address is already in use.
|
||||||
headphones.launch_browser(headphones.HTTP_HOST, http_port, headphones.HTTP_ROOT)
|
web_config = {
|
||||||
|
'http_port': http_port,
|
||||||
|
'http_host': headphones.CONFIG.HTTP_HOST,
|
||||||
|
'http_root': headphones.CONFIG.HTTP_ROOT,
|
||||||
|
'http_proxy': headphones.CONFIG.HTTP_PROXY,
|
||||||
|
'enable_https': headphones.CONFIG.ENABLE_HTTPS,
|
||||||
|
'https_cert': headphones.CONFIG.HTTPS_CERT,
|
||||||
|
'https_key': headphones.CONFIG.HTTPS_KEY,
|
||||||
|
'http_username': headphones.CONFIG.HTTP_USERNAME,
|
||||||
|
'http_password': headphones.CONFIG.HTTP_PASSWORD,
|
||||||
|
}
|
||||||
|
webstart.initialize(web_config)
|
||||||
|
|
||||||
# Start the background threads
|
# Start the background threads
|
||||||
headphones.start()
|
headphones.start()
|
||||||
|
|
||||||
|
# Open webbrowser
|
||||||
|
if headphones.CONFIG.LAUNCH_BROWSER and not args.nolaunch:
|
||||||
|
headphones.launch_browser(headphones.CONFIG.HTTP_HOST, http_port,
|
||||||
|
headphones.CONFIG.HTTP_ROOT)
|
||||||
|
|
||||||
|
# Wait endlessy for a signal to happen
|
||||||
while True:
|
while True:
|
||||||
if not headphones.SIGNAL:
|
if not headphones.SIGNAL:
|
||||||
try:
|
try:
|
||||||
@@ -172,7 +210,8 @@ def main():
|
|||||||
except KeyboardInterrupt:
|
except KeyboardInterrupt:
|
||||||
headphones.SIGNAL = 'shutdown'
|
headphones.SIGNAL = 'shutdown'
|
||||||
else:
|
else:
|
||||||
logger.info('Received signal: ' + headphones.SIGNAL)
|
logger.info('Received signal: %s', headphones.SIGNAL)
|
||||||
|
|
||||||
if headphones.SIGNAL == 'shutdown':
|
if headphones.SIGNAL == 'shutdown':
|
||||||
headphones.shutdown()
|
headphones.shutdown()
|
||||||
elif headphones.SIGNAL == 'restart':
|
elif headphones.SIGNAL == 'restart':
|
||||||
@@ -182,7 +221,6 @@ def main():
|
|||||||
|
|
||||||
headphones.SIGNAL = None
|
headphones.SIGNAL = None
|
||||||
|
|
||||||
return
|
# Call main()
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
main()
|
main()
|
||||||
|
|||||||
@@ -1,21 +1,45 @@
|
|||||||
#Headphones
|
## Headphones
|
||||||
|
|
||||||
###Installation and Notes
|
**Master Branch:** [](https://travis-ci.org/rembo10/headphones)
|
||||||
|
**Develop Branch:** [](https://travis-ci.org/rembo10/headphones)
|
||||||
|
|
||||||
This is a relatively early release of a third-party add-on for SABnzbd. It's been around for about a year, and while
|
Headphones is an automated music downloader for NZB and Torrent, written in Python. It supports SABnzbd, NZBget, Transmission, µTorrent and Blackhole.
|
||||||
quite functional, there are still a lot of kinks to work out!
|
|
||||||
|
|
||||||
To run it, just double-click the Headphones.py file (in Windows - you may need to right click and click 'Open With' -> Python) or launch a terminal, cd into the Headphones directory and run 'python headphones.py'.
|
## Support & Discuss
|
||||||
|
You are free to join the Headphones support community on IRC where you can ask questions, hang around and discuss anything related to HP.
|
||||||
|
|
||||||
For additional startup options, type 'python Headphones.py -h' or 'python Headphones.py --help'
|
1. Use any IRC client and connect to the Freenode server, `irc.freenode.net`.
|
||||||
|
2. Join the `#headphones` channel.
|
||||||
|
|
||||||
###Screenshots
|
## Installation and Notes
|
||||||
|
|
||||||
Homepage (Artist Overview)
|
* [Installation page](../../wiki/Installation) shows you how to install Headphones.
|
||||||
|
* [Usage guide](../../wiki/Usage-guide) introduces you to Headphones.
|
||||||
|
* [Troubleshooting page](../../wiki/TroubleShooting) in the wiki can help you with common problems.
|
||||||
|
|
||||||
|
**Issues** can be reported on the GitHub issue tracker considering these rules:
|
||||||
|
|
||||||
|
1. Analyze your log, you just might find the solution yourself!
|
||||||
|
2. You read the wiki and searched existing issues, but this is not solving your problem.
|
||||||
|
3. Post the issue with a clear title, description and the HP log and use [proper markdown syntax](https://help.github.com/articles/github-flavored-markdown) to structure your text (code/log in code blocks).
|
||||||
|
4. Close your issue when it's solved! If you found the solution yourself, please comment so that others benefit from it.
|
||||||
|
|
||||||
|
**Feature requests** can be reported on the GitHub issue tracker too:
|
||||||
|
|
||||||
|
1. Search for similar existing 'issues', feature requests can be recognized by the label 'Request'.
|
||||||
|
2. If a similar Request exists, post a comment (+1, or add a new idea to the existing request), otherwise you can create a new one.
|
||||||
|
|
||||||
|
If you **comply with these rules** you can [post your request/issue](http://github.com/rembo10/headphones/issues).
|
||||||
|
|
||||||
|
**Support** the project by implementing new features, solving support tickets and provide bug fixes.
|
||||||
|
|
||||||
|
## Screenshots
|
||||||
|
|
||||||
|
Homepage (Artist Overview):
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
One of the many settings pages....
|
One of the many settings pages:
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
@@ -27,7 +51,7 @@ Import Your Favorite Artists:
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
Artist Search Results (also search by album!):
|
Search Results:
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
@@ -39,6 +63,5 @@ Album Page with track overview:
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
If you run into any issues, use the GitHub issue tracker at: http://github.com/rembo10/headphones/issues.
|
## License
|
||||||
|
This is free software under the GPL v3 open source license. Feel free to do with it what you wish, but any modification must be open sourced. A copy of the license is included.
|
||||||
This is free software under the GPL v3 open source license - so feel free to do with it what you wish.
|
|
||||||
|
|||||||
@@ -1,8 +0,0 @@
|
|||||||
##############################
|
|
||||||
### TODO LIST (18/08/12) ###
|
|
||||||
##############################
|
|
||||||
|
|
||||||
1. Add ability to fetch a specific extra, rather than pull down the whole category
|
|
||||||
- This requires extra calls to MB right now, so modify 1st mb artist call to pull down the
|
|
||||||
whole album list, then only send the desried ones to importer.py
|
|
||||||
2. Update API with newstyle getExtras function (lacking entirely right now)
|
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Display information
|
||||||
|
echo "This script will remove *.pyc files. These files are generated by Python, but they can cause conflicts after an upgrade. It's safe to remove them, because they will be regenerated."
|
||||||
|
echo "Press enter to continue, or CTRL + C to quit."
|
||||||
|
read
|
||||||
|
|
||||||
|
# Remove the *.pyc
|
||||||
|
find "`dirname $0`/.." -type f -name "*.pyc" -exec rm -rf {} \;
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Parameter check
|
||||||
|
if [ -z "$1" ]; then
|
||||||
|
echo "Syntax: $0 <data directory>"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Version file check
|
||||||
|
if [ ! -s "$1/version.lock" ]; then
|
||||||
|
echo "Missing the version.lock file in the data folder, or the file is empty. Did you start Headphones at least once?"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Git installation check
|
||||||
|
if [ ! -x "$(command -v git)" ]; then
|
||||||
|
echo "Git is required to downgrade."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Display information
|
||||||
|
HASH=$(cat $1/version.lock)
|
||||||
|
|
||||||
|
echo "This script will try to downgrade Headphones to the last version that started, version $HASH. Make sure you have a backup of your config file and database, just in case!"
|
||||||
|
echo "Press enter to continue, or CTRL + C to quit."
|
||||||
|
read
|
||||||
|
|
||||||
|
# Downgrade
|
||||||
|
cd "`dirname $0`/.."
|
||||||
|
git reset --hard "$HASH"
|
||||||
|
|
||||||
|
echo "All done, Headphones should be downgraded to the last version that started."
|
||||||
@@ -0,0 +1,145 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
|
||||||
|
# Ensure that we use the Headphones provided libraries.
|
||||||
|
sys.path.insert(0, os.path.join(os.path.dirname(__file__), "../lib"))
|
||||||
|
|
||||||
|
import urlparse
|
||||||
|
|
||||||
|
|
||||||
|
def can_import(module):
|
||||||
|
"""
|
||||||
|
Return True if a given module can be imported or not.
|
||||||
|
"""
|
||||||
|
|
||||||
|
try:
|
||||||
|
__import__(module)
|
||||||
|
except ImportError:
|
||||||
|
return False
|
||||||
|
|
||||||
|
# Module can be imported
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
def check_installation():
|
||||||
|
"""
|
||||||
|
Check if some core modules are available. Info is based on this topic:
|
||||||
|
https://github.com/rembo10/headphones/issues/2210.
|
||||||
|
"""
|
||||||
|
|
||||||
|
if can_import("requests"):
|
||||||
|
import requests
|
||||||
|
requests_version = requests.__version__
|
||||||
|
else:
|
||||||
|
requests_version = "no"
|
||||||
|
|
||||||
|
if can_import("OpenSSL"):
|
||||||
|
import OpenSSL
|
||||||
|
openssl_version = OpenSSL.__version__
|
||||||
|
else:
|
||||||
|
openssl_version = "no"
|
||||||
|
|
||||||
|
if can_import("cryptography"):
|
||||||
|
import cryptography
|
||||||
|
cryptography_version = cryptography.__version__
|
||||||
|
else:
|
||||||
|
cryptography_version = "no"
|
||||||
|
|
||||||
|
if can_import("pyasn1"):
|
||||||
|
import pyasn1
|
||||||
|
pyasn1_version = pyasn1.__version__
|
||||||
|
else:
|
||||||
|
pyasn1_version = "no"
|
||||||
|
|
||||||
|
if can_import("ndg.httpsclient"):
|
||||||
|
from ndg import httpsclient
|
||||||
|
ndg_version = httpsclient.__date__
|
||||||
|
else:
|
||||||
|
ndg_version = "no"
|
||||||
|
|
||||||
|
# Print some system information.
|
||||||
|
sys.stdout.write(
|
||||||
|
"* Checking Python version: %s.%s.%s\n" % sys.version_info[:3])
|
||||||
|
sys.stdout.write("* Operating system: %s\n" % sys.platform)
|
||||||
|
|
||||||
|
sys.stdout.write(
|
||||||
|
"* Checking if requests can be imported: %s\n" % requests_version)
|
||||||
|
sys.stdout.write(
|
||||||
|
"* Checking if pyOpenSSL is installed: %s\n" % openssl_version)
|
||||||
|
sys.stdout.write(
|
||||||
|
"* Checking if cryptography is installed: %s\n" % cryptography_version)
|
||||||
|
sys.stdout.write(
|
||||||
|
"* Checking if pyasn1 is installed: %s\n" % pyasn1_version)
|
||||||
|
sys.stdout.write(
|
||||||
|
"* Checking if ndg.httpsclient is installed: %s\n" % ndg_version)
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
"""
|
||||||
|
Test if the current Headphones installation can connect to SNI-enabled
|
||||||
|
servers.
|
||||||
|
"""
|
||||||
|
|
||||||
|
# Read the URL to test.
|
||||||
|
if len(sys.argv) == 1:
|
||||||
|
url = "https://sni.velox.ch/"
|
||||||
|
else:
|
||||||
|
url = sys.argv[1]
|
||||||
|
|
||||||
|
# Check if it is a HTTPS website.
|
||||||
|
parts = urlparse.urlparse(url)
|
||||||
|
|
||||||
|
if parts.scheme.lower() != "https":
|
||||||
|
sys.stderr.write(
|
||||||
|
"Error: provided URL does not start with https://\n")
|
||||||
|
return 1
|
||||||
|
|
||||||
|
# Gather information
|
||||||
|
check_installation()
|
||||||
|
|
||||||
|
# Do the request.
|
||||||
|
if not can_import("requests"):
|
||||||
|
sys.stderr.exit("Error: cannot continue without requests module!\n")
|
||||||
|
return 1
|
||||||
|
|
||||||
|
sys.stdout.write("* Performing request: %s\n" % url)
|
||||||
|
|
||||||
|
import requests
|
||||||
|
requests.packages.urllib3.disable_warnings()
|
||||||
|
|
||||||
|
try:
|
||||||
|
try:
|
||||||
|
response = requests.get(url)
|
||||||
|
except requests.exceptions.SSLError as e:
|
||||||
|
sys.stdout.write(
|
||||||
|
"- Server certificate seems invalid. I will disable "
|
||||||
|
"certificate check and try again. You'll see the real "
|
||||||
|
"exception if it fails again.\n")
|
||||||
|
sys.stdout.write(
|
||||||
|
"* Retrying request with certificate verification off.\n")
|
||||||
|
response = requests.get(url)
|
||||||
|
except Exception as e:
|
||||||
|
sys.stdout.write(
|
||||||
|
"- An error occured while performing the request. The "
|
||||||
|
"exception was: %s\n" % e.message)
|
||||||
|
sys.stdout.write(
|
||||||
|
"- Consult the Troubleshooting wiki (https://github.com/"
|
||||||
|
"rembo10/headphones/wiki/Troubleshooting) before you post an "
|
||||||
|
"issue!")
|
||||||
|
return 0
|
||||||
|
|
||||||
|
# Verify the response.
|
||||||
|
if response.status_code == 200:
|
||||||
|
sys.stdout.write("+ Got a valid response. All seems OK!\n")
|
||||||
|
else:
|
||||||
|
sys.stdout.write(
|
||||||
|
"- Server returned status code %s. Expected a status code 200.\n",
|
||||||
|
response.status_code)
|
||||||
|
sys.stdout.write(
|
||||||
|
"- However, I was able to communicate to the server!\n")
|
||||||
|
|
||||||
|
# E.g. `python sni_test.py https://example.org'.
|
||||||
|
if __name__ == "__main__":
|
||||||
|
sys.exit(main())
|
||||||
@@ -1,310 +0,0 @@
|
|||||||
.dataTables_wrapper {
|
|
||||||
border-radius: 20px;
|
|
||||||
-webkit-border-radius: 20px;
|
|
||||||
-moz-border-radius: 20px;
|
|
||||||
width: 88%;
|
|
||||||
margin: 20px auto 0 auto;
|
|
||||||
padding: 25px;
|
|
||||||
background-color: white;
|
|
||||||
position: relative;
|
|
||||||
min-height: 155px;
|
|
||||||
clear: both;
|
|
||||||
_height: 302px;
|
|
||||||
zoom: 1; /* Feeling sorry for IE */
|
|
||||||
}
|
|
||||||
|
|
||||||
.dataTables_processing {
|
|
||||||
position: absolute;
|
|
||||||
top: 50%;
|
|
||||||
left: 50%;
|
|
||||||
width: 20px;
|
|
||||||
height: 30px;
|
|
||||||
margin-left: -125px;
|
|
||||||
margin-top: -15px;
|
|
||||||
padding: 14px 0 2px 0;
|
|
||||||
border: 1px solid #ddd;
|
|
||||||
text-align: center;
|
|
||||||
color: #999;
|
|
||||||
font-size: 14px;
|
|
||||||
background-color: white;
|
|
||||||
}
|
|
||||||
|
|
||||||
.dataTables_length {
|
|
||||||
width: 40%;
|
|
||||||
float: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
.dataTables_filter {
|
|
||||||
width: 50%;
|
|
||||||
float: right;
|
|
||||||
text-align: right;
|
|
||||||
margin-bottom: 15px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.dataTables_info {
|
|
||||||
width: 50%;
|
|
||||||
float: left;
|
|
||||||
background-color: white;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
.dataTables_paginate {
|
|
||||||
width: 44px;
|
|
||||||
* width: 50px;
|
|
||||||
float: right;
|
|
||||||
text-align: right;
|
|
||||||
background-color: white;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Pagination nested */
|
|
||||||
.paginate_disabled_previous, .paginate_enabled_previous, .paginate_disabled_next, .paginate_enabled_next {
|
|
||||||
height: 19px;
|
|
||||||
width: 19px;
|
|
||||||
margin-left: 3px;
|
|
||||||
float: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
.paginate_disabled_previous {
|
|
||||||
background-image: url('../images/back_disabled.jpg');
|
|
||||||
}
|
|
||||||
|
|
||||||
.paginate_enabled_previous {
|
|
||||||
background-image: url('../images/back_enabled.jpg');
|
|
||||||
}
|
|
||||||
|
|
||||||
.paginate_disabled_next {
|
|
||||||
background-image: url('../images/forward_disabled.jpg');
|
|
||||||
}
|
|
||||||
|
|
||||||
.paginate_enabled_next {
|
|
||||||
background-image: url('../images/forward_enabled.jpg');
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
|
||||||
* DataTables display
|
|
||||||
*/
|
|
||||||
table.display {
|
|
||||||
margin: 20px auto;
|
|
||||||
clear: both;
|
|
||||||
|
|
||||||
/* Note Firefox 3.5 and before have a bug with border-collapse
|
|
||||||
* ( https://bugzilla.mozilla.org/show%5Fbug.cgi?id=155955 )
|
|
||||||
* border-spacing: 0; is one possible option. Conditional-css.com is
|
|
||||||
* useful for this kind of thing
|
|
||||||
*
|
|
||||||
* Further note IE 6/7 has problems when calculating widths with border width.
|
|
||||||
* It subtracts one px relative to the other browsers from the first column, and
|
|
||||||
* adds one to the end...
|
|
||||||
*
|
|
||||||
* If you want that effect I'd suggest setting a border-top/left on th/td's and
|
|
||||||
* then filling in the gaps with other borders.
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
|
|
||||||
table.display thead th {
|
|
||||||
padding: 3px 18px 3px 10px;
|
|
||||||
background-color: white;
|
|
||||||
font-weight: bold;
|
|
||||||
font-size: 16px;
|
|
||||||
cursor: pointer;
|
|
||||||
* cursor: hand;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.display tfoot th {
|
|
||||||
padding: 3px 18px 3px 10px;
|
|
||||||
border-top: 1px solid black;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.display tr.heading2 td {
|
|
||||||
border-bottom: 1px solid #aaa;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.display td {
|
|
||||||
padding: 3px 10px;
|
|
||||||
font-size: 16px;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.display td.center {
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
|
||||||
* DataTables sorting
|
|
||||||
*/
|
|
||||||
|
|
||||||
.sorting_asc {
|
|
||||||
background: url('../images/sort_asc.png') no-repeat center right;
|
|
||||||
}
|
|
||||||
|
|
||||||
.sorting_desc {
|
|
||||||
background: url('../images/sort_desc.png') no-repeat center right;
|
|
||||||
}
|
|
||||||
|
|
||||||
.sorting {
|
|
||||||
background: url('../images/sort_both.png') no-repeat center right;
|
|
||||||
}
|
|
||||||
|
|
||||||
.sorting_asc_disabled {
|
|
||||||
background: url('../images/sort_asc_disabled.png') no-repeat center right;
|
|
||||||
}
|
|
||||||
|
|
||||||
.sorting_desc_disabled {
|
|
||||||
background: url('../images/sort_desc_disabled.png') no-repeat center right;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
|
||||||
* DataTables row classes
|
|
||||||
*/
|
|
||||||
table.display tr.odd.gradeA {
|
|
||||||
background-color: #ddffdd;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.display tr.even.gradeA {
|
|
||||||
background-color: #ddffdd;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.display tr.odd.gradeC {
|
|
||||||
background-color: #ddddff;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.display tr.even.gradeC {
|
|
||||||
background-color: #ddddff;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.display tr.odd.gradeX {
|
|
||||||
background-color: #ffdddd;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.display tr.even.gradeX {
|
|
||||||
background-color: #ffdddd;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.display tr.odd.gradeU {
|
|
||||||
background-color: #ddd;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.display tr.even.gradeU {
|
|
||||||
background-color: #eee;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
table.display tr.odd.gradeZ {
|
|
||||||
background-color: #FCFAFA;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.display tr.even.gradeZ {
|
|
||||||
background-color: white;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
|
||||||
* Misc
|
|
||||||
*/
|
|
||||||
.dataTables_scroll {
|
|
||||||
clear: both;
|
|
||||||
}
|
|
||||||
|
|
||||||
.dataTables_scrollBody {
|
|
||||||
*margin-top: -1px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.top, .bottom {
|
|
||||||
padding: 15px;
|
|
||||||
background-color: #F5F5F5;
|
|
||||||
border: 1px solid #CCCCCC;
|
|
||||||
}
|
|
||||||
|
|
||||||
.top .dataTables_info {
|
|
||||||
float: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.clear {
|
|
||||||
clear: both;
|
|
||||||
}
|
|
||||||
|
|
||||||
.dataTables_empty {
|
|
||||||
font-size: 24px;
|
|
||||||
text-align: center;
|
|
||||||
vertical-align: middle;
|
|
||||||
background-color: white;
|
|
||||||
height: 50px;
|
|
||||||
width: 90%;
|
|
||||||
}
|
|
||||||
|
|
||||||
tfoot input {
|
|
||||||
margin: 0.5em 0;
|
|
||||||
width: 100%;
|
|
||||||
color: #444;
|
|
||||||
}
|
|
||||||
|
|
||||||
tfoot input.search_init {
|
|
||||||
color: #999;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.group {
|
|
||||||
background-color: #d1cfd0;
|
|
||||||
border-bottom: 2px solid #A19B9E;
|
|
||||||
border-top: 2px solid #A19B9E;
|
|
||||||
}
|
|
||||||
|
|
||||||
td.details {
|
|
||||||
background-color: #d1cfd0;
|
|
||||||
border: 2px solid #A19B9E;
|
|
||||||
}
|
|
||||||
|
|
||||||
.paging_full_numbers {
|
|
||||||
width: 400px;
|
|
||||||
height: 22px;
|
|
||||||
line-height: 22px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.paging_full_numbers span.paginate_button,
|
|
||||||
.paging_full_numbers span.paginate_active {
|
|
||||||
border: 1px solid #aaa;
|
|
||||||
-webkit-border-radius: 5px;
|
|
||||||
-moz-border-radius: 5px;
|
|
||||||
padding: 2px 5px;
|
|
||||||
margin: 0 3px;
|
|
||||||
cursor: pointer;
|
|
||||||
*cursor: hand;
|
|
||||||
}
|
|
||||||
|
|
||||||
.paging_full_numbers span.paginate_button {
|
|
||||||
background-color: #ddd;
|
|
||||||
}
|
|
||||||
|
|
||||||
.paging_full_numbers span.paginate_button:hover {
|
|
||||||
background-color: #ccc;
|
|
||||||
}
|
|
||||||
|
|
||||||
.paging_full_numbers span.paginate_active {
|
|
||||||
background-color: #99B3FF;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.display tr.even.row_selected td {
|
|
||||||
background-color: #B0BED9;
|
|
||||||
}
|
|
||||||
|
|
||||||
table.display tr.odd.row_selected td {
|
|
||||||
background-color: #9FAFD1;
|
|
||||||
}
|
|
||||||
|
|
||||||
div.box {
|
|
||||||
height: 100px;
|
|
||||||
padding: 10px;
|
|
||||||
overflow: auto;
|
|
||||||
border: 1px solid #8080FF;
|
|
||||||
background-color: #E5E5FF;
|
|
||||||
}
|
|
||||||
@@ -1,317 +0,0 @@
|
|||||||
/* HTML5 ✰ Boilerplate */
|
|
||||||
|
|
||||||
html, body, div, span, object, iframe,
|
|
||||||
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
|
|
||||||
abbr, address, cite, code, del, dfn, em, img, ins, kbd, q, samp,
|
|
||||||
small, strong, sub, sup, var, b, i, dl, dt, dd, ol, ul, li,
|
|
||||||
fieldset, form, label, legend,
|
|
||||||
table, caption, tbody, tfoot, thead, tr, th, td,
|
|
||||||
article, aside, canvas, details, figcaption, figure,
|
|
||||||
footer, header, hgroup, menu, nav, 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;
|
|
||||||
}
|
|
||||||
|
|
||||||
blockquote, q { quotes: none; }
|
|
||||||
blockquote:before, blockquote:after,
|
|
||||||
q:before, q:after { content: ''; content: none; }
|
|
||||||
ins { background-color: #ff9; color: #000; text-decoration: none; }
|
|
||||||
mark { background-color: #ff9; color: #000; font-style: italic; font-weight: bold; }
|
|
||||||
del { text-decoration: line-through; }
|
|
||||||
abbr[title], dfn[title] { border-bottom: 1px dotted; cursor: help; }
|
|
||||||
table { border-collapse: collapse; border-spacing: 0; }
|
|
||||||
hr { display: block; height: 1px; border: 0; border-top: 1px solid #ccc; margin: 1em 0; padding: 0; }
|
|
||||||
input, select { vertical-align: middle; }
|
|
||||||
|
|
||||||
body { font:13px/1.231 sans-serif; *font-size:small; }
|
|
||||||
select, input, textarea, button { font:99% sans-serif; }
|
|
||||||
pre, code, kbd, samp { font-family: monospace, sans-serif; }
|
|
||||||
|
|
||||||
html { overflow-y: scroll; }
|
|
||||||
a:hover, a:active { outline: none; }
|
|
||||||
ul, ol { margin-left: 2em; }
|
|
||||||
ol { list-style-type: decimal; }
|
|
||||||
nav ul, nav li { margin: 0; list-style:none; list-style-image: none; }
|
|
||||||
small { font-size: 85%; }
|
|
||||||
strong, th { font-weight: bold; }
|
|
||||||
td { vertical-align: top; }
|
|
||||||
|
|
||||||
sub, sup { font-size: 75%; line-height: 0; position: relative; }
|
|
||||||
sup { top: -0.5em; }
|
|
||||||
sub { bottom: -0.25em; }
|
|
||||||
|
|
||||||
pre { white-space: pre; white-space: pre-wrap; word-wrap: break-word; padding: 15px; }
|
|
||||||
textarea { overflow: auto; }
|
|
||||||
.ie6 legend, .ie7 legend { margin-left: -7px; }
|
|
||||||
input[type="radio"] { vertical-align: text-bottom; }
|
|
||||||
input[type="checkbox"] { vertical-align: bottom; }
|
|
||||||
.ie7 input[type="checkbox"] { vertical-align: baseline; }
|
|
||||||
.ie6 input { vertical-align: text-bottom; }
|
|
||||||
label, input[type="button"], input[type="submit"], input[type="image"], button { cursor: pointer; }
|
|
||||||
button, input, select, textarea { margin: 0; }
|
|
||||||
input:valid, textarea:valid { }
|
|
||||||
input:invalid, textarea:invalid { border-radius: 1px; -moz-box-shadow: 0px 0px 5px red; -webkit-box-shadow: 0px 0px 5px red; box-shadow: 0px 0px 5px red; }
|
|
||||||
.no-boxshadow input:invalid, .no-boxshadow textarea:invalid { background-color: #f0dddd; }
|
|
||||||
|
|
||||||
::-moz-selection{ background: grey; color:#fff; text-shadow: none; }
|
|
||||||
::selection { background: grey; color:#fff; text-shadow: none; }
|
|
||||||
|
|
||||||
button { width: auto; overflow: visible; }
|
|
||||||
.ie7 img { -ms-interpolation-mode: bicubic; }
|
|
||||||
|
|
||||||
body, select, input, textarea { color: #444; }
|
|
||||||
h1, h2, h3, h4, h5, h6 { font-weight: bold; }
|
|
||||||
|
|
||||||
/*
|
|
||||||
// ========================================== \\
|
|
||||||
|| ||
|
|
||||||
|| Custom Styles ||
|
|
||||||
|| ||
|
|
||||||
\\ ========================================== //
|
|
||||||
*/
|
|
||||||
|
|
||||||
a:link {
|
|
||||||
color: #5E2612;
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
a:visited {
|
|
||||||
color: #5E2612;
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
a:hover { /*this effect is not shown in NN4.xx*/
|
|
||||||
color: #999999;
|
|
||||||
text-decoration: underline;
|
|
||||||
}
|
|
||||||
a:active {/*colour in NN4.xx is red*/
|
|
||||||
color: #5E2612;
|
|
||||||
text-decoration: underline;
|
|
||||||
}
|
|
||||||
a.blue {
|
|
||||||
color: blue;
|
|
||||||
}
|
|
||||||
|
|
||||||
container { }
|
|
||||||
|
|
||||||
body { background-color: #EBF4FB; min-width: 935px; }
|
|
||||||
|
|
||||||
header { min-height: 68px; width: 100%; min-width: 935px; padding-left: 0px; padding-right: 10px; background-color: #CDC9C9; position: fixed; z-index: 998; }
|
|
||||||
|
|
||||||
h1 { font-size: 24px; }
|
|
||||||
h2 { font-size: 20px; }
|
|
||||||
h3 { font-size: 16px; }
|
|
||||||
h4 { font-size: 14px; }
|
|
||||||
|
|
||||||
p.indented { padding-top: 20px; margin-left: 20px; font-size: 14px; }
|
|
||||||
p.center { text-align: center; font-size: 18px; }
|
|
||||||
.smalltext2 { font-size: 12px; margin-left: 45px; }
|
|
||||||
|
|
||||||
div#updatebar { text-align: center; min-width: 970px; width: 100%; background-color: light-blue; float: left; }
|
|
||||||
div#logo { float: left; padding-left: 10px; }
|
|
||||||
|
|
||||||
ul#nav { margin: 25px 0 0 0; float: left; list-style-type: none; }
|
|
||||||
ul#nav li { margin: 40px 0px auto 10px; display: inline; }
|
|
||||||
ul#nav li a { padding: 5px; font-size: 16px; font-weight: bold; color: #330000; text-decoration: none; }
|
|
||||||
ul#nav li a:hover { background-color: #a3e532; }
|
|
||||||
|
|
||||||
div#subhead_container { height: 30px; width:100%; min-width: 1000px; background-color:#330000; float: left; list-style-type: none; z-index: 998; overflow: hidden; }
|
|
||||||
ul#subhead_menu { margin-top: 5px; }
|
|
||||||
ul#subhead_menu li { width: 100%; height: 100%; display: inline; }
|
|
||||||
ul#subhead_menu li a { padding: 5px 15px 10px 15px; vertical-align: middle; color: white; font-size: 16px; text-decoration: none; }
|
|
||||||
ul#subhead_menu li a:hover { width: 100%; height: 100%; background-color: #grey; }
|
|
||||||
|
|
||||||
div#searchbar { margin: 24px 30px auto auto; float: right; }
|
|
||||||
|
|
||||||
div#main { margin: 0; padding: 80px 0 0 0; }
|
|
||||||
|
|
||||||
.table_wrapper { border-radius: 20px; -webkit-border-radius: 20px; -moz-border-radius: 20px; width: 88%; margin: 20px auto 0 auto; padding: 25px; background-color: white; position: relative; min-height: 200px; clear: both; _height: 302px; zoom: 1; }
|
|
||||||
.manage_wrapper { width: 88%; margin: 20px auto 0 auto; padding: 25px; min-height: 150px; clear: both; _height: 302px; zoom: 1; }
|
|
||||||
.table_wrapper_left { padding: 25px; background-color: #ffffff; float: left; width: 40%; min-height: 100px; margin-top: 25px; margin-left: 30px; margin-right: auto; -moz-border-radius: 20px; border-radius: 20px; }
|
|
||||||
.table_wrapper_right{ padding: 25px; background-color: #ffffff; width: 40%; min-height: 100px; margin-top: 25px; margin-left: auto; margin-right: 30px; -moz-border-radius: 20px; border-radius: 20px; }
|
|
||||||
|
|
||||||
.configtable { font-size: 14px; line-height:18px; }
|
|
||||||
.configtable td { width: 350px; padding: 10px; }
|
|
||||||
.configtable td#middle { vertical-align: middle; }
|
|
||||||
|
|
||||||
table#artist_table { background-color: white; width: 100%; padding: 20px; }
|
|
||||||
|
|
||||||
table#artist_table th#select { text-align: left; }
|
|
||||||
table#artist_table th#name { text-align: left; min-width: 200px; }
|
|
||||||
table#artist_table th#status { text-align: left; min-width: 50px; }
|
|
||||||
table#artist_table th#album { text-align: left; min-width: 300px; }
|
|
||||||
table#artist_table th#have { text-align: center; }
|
|
||||||
table#artist_table td#name { vertical-align: middle; text-align: left; min-width:200px; }
|
|
||||||
table#artist_table td#status { vertical-align: middle; text-align: left; min-width: 50px; }
|
|
||||||
table#artist_table td#album { vertical-align: middle; text-align: left; min-width: 300px; }
|
|
||||||
table#artist_table td#have { vertical-align: middle; }
|
|
||||||
|
|
||||||
div#paddingheader { padding-top: 48px; font-size: 24px; font-weight: bold; text-align: center; }
|
|
||||||
div#nopaddingheader { font-size: 24px; font-weight: bold; text-align: center; }
|
|
||||||
table#album_table { background-color: white; }
|
|
||||||
|
|
||||||
table#album_table th#select { vertical-align: middle; text-align: left; min-width: 10px; }
|
|
||||||
table#album_table th#albumart { text-align: left; min-width: 50px; }
|
|
||||||
table#album_table th#albumname { text-align: center; min-width: 150px; }
|
|
||||||
table#album_table th#reldate { width: 175px; text-align: center; min-width: 70px; }
|
|
||||||
table#album_table th#status { width: 175px; text-align: center; min-width: 80px; }
|
|
||||||
table#album_table th#type { width: 175px; text-align: center; min-width: 100px; }
|
|
||||||
table#album_table th#bitrate { text-align: center; min-width: 60px; }
|
|
||||||
table#album_table th#albumformat { text-align: center; min-width: 60px; }
|
|
||||||
table#album_table th#wantlossless { width: 80px; text-align: center; min-width: 80px; }
|
|
||||||
table#album_table td#select { vertical-align: middle; text-align: left; }
|
|
||||||
table#album_table td#albumart { vertical-align: middle; text-align: left; }
|
|
||||||
table#album_table td#albumname { vertical-align: middle; text-align: center; }
|
|
||||||
table#album_table td#reldate { vertical-align: middle; text-align: center; }
|
|
||||||
table#album_table td#status { vertical-align: middle; text-align: center; font-size: 13px; }
|
|
||||||
table#album_table td#status a#wantlossless { white-space: nowrap; }
|
|
||||||
table#album_table td#type { vertical-align: middle; text-align: center; }
|
|
||||||
table#album_table td#have { vertical-align: middle; }
|
|
||||||
table#album_table td#bitrate { vertical-align: middle; text-align: center; font-size: 13px; }
|
|
||||||
table#album_table td#albumformat { vertical-align: middle; text-align: center; font-size: 13px; }
|
|
||||||
table#album_table td#wantlossless { vertical-align: middle; text-align: center; font-size: 13px; }
|
|
||||||
|
|
||||||
img.albumArt { float: left; padding-right: 5px; }
|
|
||||||
div#albumheader { padding-top: 48px; height: 200px; }
|
|
||||||
div#track_wrapper { margin-left: -50px; padding-top: 20px; font-size: 16px; width: 100%; }
|
|
||||||
|
|
||||||
table#track_table th#number { text-align: right; min-width: 10px; }
|
|
||||||
table#track_table th#name { text-align: center; min-width: 350px; }
|
|
||||||
table#track_table th#duration { width: 175px; text-align: center; min-width: 100px; }
|
|
||||||
table#track_table th#location { text-align: center; width: 250px; }
|
|
||||||
table#track_table th#bitrate { text-align: center; min-width: 75px; }
|
|
||||||
table#track_table th#format { text-align: center; min-width: 75px; }
|
|
||||||
|
|
||||||
table#track_table td#number { vertical-align: middle; text-align: right; }
|
|
||||||
table#track_table td#name { vertical-align: middle; text-align: center; font-size: 15px; }
|
|
||||||
table#track_table td#duration { vertical-align: middle; text-align: center; }
|
|
||||||
table#track_table td#location { vertical-align: middle; text-align: center; font-size: 11px; }
|
|
||||||
table#track_table td#bitrate { vertical-align: middle; text-align: center; font-size: 12px; }
|
|
||||||
table#track_table td#format { vertical-align: middle; text-align: center; font-size: 12px; }
|
|
||||||
|
|
||||||
table#history_table { background-color: white; width: 100%; font-size: 13px; }
|
|
||||||
|
|
||||||
table#history_table td#dateadded { vertical-align: middle; text-align: center; min-width: 150px; font-size: 14px; }
|
|
||||||
table#history_table td#filename { vertical-align: middle; text-align: center; min-width: 100px; font-size: 15px; }
|
|
||||||
table#history_table td#size { vertical-align: middle; text-align: center; min-width: 75px; font-size: 14px; }
|
|
||||||
table#history_table td#status { vertical-align: middle; text-align: center; font-size: 14px; }
|
|
||||||
table#history_table td#action { vertical-align: middle; text-align: center; font-size: 14px; }
|
|
||||||
|
|
||||||
table#log_table { background-color: white; }
|
|
||||||
|
|
||||||
table#log_table th#timestamp { text-align: left; min-width: 150px; }
|
|
||||||
table#log_table th#level { text-align: left; min-width: 60px; }
|
|
||||||
table#log_table th#message { text-align: left; min-width: 500px; }
|
|
||||||
|
|
||||||
table#upcoming_table th#albumart { text-align: center; min-width: 50px; }
|
|
||||||
table#upcoming_table th#albumname { text-align: center; min-width: 200px; }
|
|
||||||
table#upcoming_table th#artistname { text-align: center; min-width: 150px; }
|
|
||||||
table#upcoming_table th#reldate { text-align: center; min-width: 100px; }
|
|
||||||
table#upcoming_table th#type { text-align: center; min-width: 75px; }
|
|
||||||
|
|
||||||
table#upcoming_table td#select { vertical-align: middle; text-align: center; }
|
|
||||||
table#upcoming_table td#albumart { vertical-align: middle; text-align: center; min-width: 50px; }
|
|
||||||
table#upcoming_table td#albumname { vertical-align: middle; text-align: center; min-width: 200px; }
|
|
||||||
table#upcoming_table td#artistname { vertical-align: middle; text-align: center; min-width: 150px; }
|
|
||||||
table#upcoming_table td#reldate { vertical-align: middle; text-align: center; min-width: 100px; }
|
|
||||||
table#upcoming_table td#type { vertical-align: middle; text-align: center; min-width: 75px; }
|
|
||||||
table#upcoming_table td#status { vertical-align: middle; text-align: center; }
|
|
||||||
|
|
||||||
table#wanted_table th#albumart { text-align: center; min-width: 50px; }
|
|
||||||
table#wanted_table th#albumname { text-align: center; min-width: 200px; }
|
|
||||||
table#wanted_table th#artistname { text-align: center; min-width: 150px; }
|
|
||||||
table#wanted_table th#reldate { text-align: center; min-width: 100px; }
|
|
||||||
table#wanted_table th#type { text-align: center; min-width: 75px; }
|
|
||||||
|
|
||||||
table#wanted_table td#select { vertical-align: middle; text-align: center; }
|
|
||||||
table#wanted_table td#albumart { vertical-align: middle; text-align: center; min-width: 50px; }
|
|
||||||
table#wanted_table td#albumname { vertical-align: middle; text-align: center; min-width: 200px; }
|
|
||||||
table#wanted_table td#artistname { vertical-align: middle; text-align: center; min-width: 150px; }
|
|
||||||
table#wanted_table td#reldate { vertical-align: middle; text-align: center; min-width: 100px; }
|
|
||||||
table#wanted_table td#type { vertical-align: middle; text-align: center; min-width: 75px; }
|
|
||||||
table#wanted_table td#status { vertical-align: middle; text-align: center; }
|
|
||||||
|
|
||||||
table#searchresults_table th#albumname { text-align: left; min-width: 225px; }
|
|
||||||
table#searchresults_table th#artistname { text-align: center; min-width: 325px; }
|
|
||||||
table#searchresults_table th#score { text-align: center; min-width: 75px; }
|
|
||||||
|
|
||||||
table#searchresults_table td#albumname { vertical-align: middle; text-align: left; min-width: 200px; }
|
|
||||||
table#searchresults_table td#artistname { vertical-align: middle; text-align: left; min-width: 300px; }
|
|
||||||
table#searchresults_table td#score { vertical-align: middle; text-align: center; min-width: 75px; }
|
|
||||||
|
|
||||||
div.progress-container { border: 1px solid #ccc; width: 100px; height: 14px; margin: 2px 5px 2px 0; padding: 1px; float: left; background: white; }
|
|
||||||
div.progress-container > div { background-color: #a3e532; height: 14px; }
|
|
||||||
.havetracks { font-size: 13px; margin-left: 36px; padding-bottom: 3px; vertical-align: middle; }
|
|
||||||
|
|
||||||
footer { margin: 20px auto 20px auto; }
|
|
||||||
div#version { text-align: center; font-weight: bold; }
|
|
||||||
div#donate { text-align: center; margin: 20px auto 20px auto; }
|
|
||||||
|
|
||||||
div#shutdown{ text-align: center; vertical-align: middle; }
|
|
||||||
|
|
||||||
.cloudtag { padding-top: 30px; font-size:16px; }
|
|
||||||
#cloud a.tag1 { font-size: 0.7em; font-weight: 100; }
|
|
||||||
#cloud a.tag2 { font-size: 0.8em; font-weight: 200; }
|
|
||||||
#cloud a.tag3 { font-size: 0.9em; font-weight: 300; }
|
|
||||||
#cloud a.tag4 { font-size: 1.0em; font-weight: 400; }
|
|
||||||
#cloud a.tag5 { font-size: 1.2em; font-weight: 500; }
|
|
||||||
#cloud a.tag6 { font-size: 1.4em; font-weight: 600; }
|
|
||||||
#cloud a.tag7 { font-size: 1.6em; font-weight: 700; }
|
|
||||||
#cloud a.tag8 { font-size: 1.8em; font-weight: 800; }
|
|
||||||
#cloud a.tag9 { font-size: 2.2em; font-weight: 900; }
|
|
||||||
#cloud a.tag10 { font-size: 2.5em; font-weight: 900; }
|
|
||||||
|
|
||||||
#cloud { padding: 2px; line-height: 1.5em; text-align: center; }
|
|
||||||
#cloud a { padding: 0px; }
|
|
||||||
#cloud { margin: 0; }
|
|
||||||
#cloud li { display: inline; }
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.ir { display: block; text-indent: -999em; overflow: hidden; background-repeat: no-repeat; text-align: left; direction: ltr; }
|
|
||||||
.hidden { display: none; visibility: hidden; }
|
|
||||||
.visuallyhidden { border: 0; clip: rect(0 0 0 0); height: 1px; margin: -1px; overflow: hidden; padding: 0; position: absolute; width: 1px; }
|
|
||||||
.visuallyhidden.focusable:active,
|
|
||||||
.visuallyhidden.focusable:focus { clip: auto; height: auto; margin: 0; overflow: visible; position: static; width: auto; }
|
|
||||||
.invisible { visibility: hidden; }
|
|
||||||
.clearfix:before, .clearfix:after { content: "\0020"; display: block; height: 0; overflow: hidden; }
|
|
||||||
.clearfix:after { clear: both; }
|
|
||||||
.clearfix { zoom: 1; }
|
|
||||||
|
|
||||||
|
|
||||||
@media all and (orientation:portrait) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@media all and (orientation:landscape) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@media screen and (max-device-width: 480px) {
|
|
||||||
|
|
||||||
html { -webkit-text-size-adjust:none; -ms-text-size-adjust:none; }
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@media print {
|
|
||||||
* { background: transparent !important; color: black !important; text-shadow: none !important; filter:none !important;
|
|
||||||
-ms-filter: none !important; }
|
|
||||||
a, a:visited { color: #444 !important; text-decoration: underline; }
|
|
||||||
a[href]:after { content: " (" attr(href) ")"; }
|
|
||||||
abbr[title]:after { content: " (" attr(title) ")"; }
|
|
||||||
.ir a:after, a[href^="javascript:"]:after, a[href^="#"]:after { content: ""; }
|
|
||||||
pre, blockquote { border: 1px solid #999; page-break-inside: avoid; }
|
|
||||||
thead { display: table-header-group; }
|
|
||||||
tr, img { page-break-inside: avoid; }
|
|
||||||
@page { margin: 0.5cm; }
|
|
||||||
p, h2, h3 { orphans: 3; widows: 3; }
|
|
||||||
h2, h3{ page-break-after: avoid; }
|
|
||||||
}
|
|
||||||
|
Before Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 88 KiB |
|
Before Width: | Height: | Size: 8.1 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 3.3 KiB |
|
Before Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 212 B |
|
After Width: | Height: | Size: 220 B |
|
After Width: | Height: | Size: 206 B |
|
After Width: | Height: | Size: 220 B |
|
After Width: | Height: | Size: 262 B |
|
After Width: | Height: | Size: 262 B |
|
After Width: | Height: | Size: 262 B |
|
After Width: | Height: | Size: 253 B |
|
After Width: | Height: | Size: 281 B |
|
After Width: | Height: | Size: 4.4 KiB |
|
After Width: | Height: | Size: 6.8 KiB |
|
After Width: | Height: | Size: 4.4 KiB |
|
After Width: | Height: | Size: 6.8 KiB |
|
After Width: | Height: | Size: 4.4 KiB |
@@ -5,63 +5,83 @@
|
|||||||
%>
|
%>
|
||||||
|
|
||||||
<%def name="headerIncludes()">
|
<%def name="headerIncludes()">
|
||||||
|
|
||||||
<div id="subhead_container">
|
<div id="subhead_container">
|
||||||
|
<div id="back_to_previous_link">
|
||||||
|
<a href="artistPage?ArtistID=${album['ArtistID']}" class="back">« Back to ${album['ArtistName']}</a>
|
||||||
|
</div>
|
||||||
<div id="subhead_menu">
|
<div id="subhead_menu">
|
||||||
<a id="menu_link_delete" href="deleteAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}">Delete Album</a>
|
|
||||||
%if album['Status'] == 'Skipped':
|
<a id="menu_link_delete" href="deleteAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}"><i class="fa fa-trash-o"></i> Delete Album</a>
|
||||||
<a id="menu_link_wanted" href="#" onclick="doAjaxCall('queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}&new=False', $(this),true)" data-success="'${album['AlbumTitle']}' added to queue">Mark Album as Wanted</a>
|
%if album['Status'] == 'Skipped' or album['Status'] == 'Ignored':
|
||||||
|
<a id="menu_link_wanted" href="javascript:void(0)" onclick="doAjaxCall('queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}&new=False', $(this),true)" data-success="'${album['AlbumTitle']}' added to queue"><i class="fa fa-heart"></i> Mark Album as Wanted</a>
|
||||||
%elif album['Status'] == 'Wanted':
|
%elif album['Status'] == 'Wanted':
|
||||||
<a id="menu_link_check" href="#" onclick="doAjaxCall('queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}&new=True', $(this));" data-success="Forced checking successful">Force Check</a>
|
<a id="menu_link_check" href="javascript:void(0)" onclick="doAjaxCall('queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}&new=True', $(this));" data-success="Forced checking successful"><i class="fa fa-search"></i> Force Check</a>
|
||||||
<a id="menu_link_skipped" href="#" onclick="doAjaxCall('unqueueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}', $(this),true);" data-success="'${album['AlbumTitle']}' marked as Skipped">Mark Album as Skipped</a>
|
<a id="menu_link_skipped" href="javascript:void(0)" onclick="doAjaxCall('unqueueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}', $(this),true);" data-success="'${album['AlbumTitle']}' marked as Skipped"><i class="fa fa-step-forward"></i> Mark Album as Skipped</a>
|
||||||
%else:
|
%else:
|
||||||
<a id="menu_link_retry" href="#" onclick="doAjaxCall('queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}&new=False', $(this),true);" data-success="Retrying the same version of '${album['AlbumTitle']}'">Retry Download</a>
|
<a id="menu_link_retry" href="javascript:void(0)" onclick="doAjaxCall('queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}&new=False', $(this),true);" data-success="Retrying the same version of '${album['AlbumTitle']}'"><i class="fa fa-refresh"></i> Retry Download</a>
|
||||||
<a id="menu_link_new" href="#" onclick="doAjaxCall('queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}&new=True', $(this),true);" data-success="Looking for a new version of '${album['AlbumTitle']}'">Try New Version</a>
|
<a id="menu_link_new" href="javascript:void(0)" onclick="doAjaxCall('queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}&new=True', $(this),true);" data-success="Looking for a new version of '${album['AlbumTitle']}'"><i class="fa fa-download"></i> Try New Version</a>
|
||||||
%endif
|
%endif
|
||||||
<a class="menu_link_edit" id="album_chooser" href="#">Choose Alternate Release</a>
|
<a class="menu_link_edit" id="album_chooser" href="javascript:void(0)"><i class="fa fa-pencil"></i> Choose Alternate Release</a>
|
||||||
<div id="dialog" title="Choose an Alternate Release" style="display:none" class="configtable">
|
<div id="dialog" title="Choose an Alternate Release" style="display:none" class="configtable">
|
||||||
<div class="links">
|
<div class="links">
|
||||||
<%
|
<%
|
||||||
alternate_albums = myDB.select("SELECT * from allalbums WHERE AlbumID=?", [album['AlbumID']])
|
alternate_albums = myDB.select("SELECT * from allalbums WHERE AlbumID=? ORDER BY ReleaseDate ASC", [album['AlbumID']])
|
||||||
%>
|
%>
|
||||||
%if not alternate_albums:
|
%if not alternate_albums:
|
||||||
<p>No alternate releases found. Try refreshing the artist (if the artist is being refreshed, please wait until it's finished)</p>
|
<p>No alternate releases found. Try refreshing the artist (if the artist is being refreshed, please wait until it's finished)</p>
|
||||||
<h2><a id="refresh_artist" onclick="doAjaxCall('refreshArtist?ArtistID=${album['ArtistID']}', $(this)), true" href="#" data-success="'${album['ArtistName']}' is being refreshed">Refresh Artist</a></h2>
|
<h2><a id="refresh_artist" onclick="doAjaxCall('refreshArtist?ArtistID=${album['ArtistID']}', $(this)), true" href="javascript:void(0)" data-success="'${album['ArtistName']}' is being refreshed">Refresh Artist</a></h2>
|
||||||
%else:
|
%else:
|
||||||
%for alternate_album in alternate_albums:
|
%for alternate_album in alternate_albums:
|
||||||
<%
|
<%
|
||||||
track_count = len(myDB.select("SELECT * from alltracks WHERE ReleaseID=?", [alternate_album['ReleaseID']]))
|
track_count = len(myDB.select("SELECT * from alltracks WHERE ReleaseID=?", [alternate_album['ReleaseID']]))
|
||||||
|
mb_link = "http://musicbrainz.org/release/" + alternate_album['ReleaseID']
|
||||||
have_track_count = len(myDB.select("SELECT * from alltracks WHERE ReleaseID=? AND Location IS NOT NULL", [alternate_album['ReleaseID']]))
|
have_track_count = len(myDB.select("SELECT * from alltracks WHERE ReleaseID=? AND Location IS NOT NULL", [alternate_album['ReleaseID']]))
|
||||||
if alternate_album['AlbumID'] == alternate_album['ReleaseID']:
|
if alternate_album['AlbumID'] == alternate_album['ReleaseID']:
|
||||||
alternate_album_name = "Headphones Default Release [" + str(have_track_count) + "/" + str(track_count) + " tracks]"
|
alternate_album_name = "Headphones Default Release (" + str(alternate_album['ReleaseDate']) + ") [" + str(have_track_count) + "/" + str(track_count) + " tracks]"
|
||||||
else:
|
else:
|
||||||
alternate_album_name = alternate_album['AlbumTitle'] + " (" + alternate_album['ReleaseCountry'] + ", " + alternate_album['ReleaseFormat'] + ") [" + str(have_track_count) + "/" + str(track_count) + " tracks]"
|
alternate_album_name = alternate_album['AlbumTitle'] + " (" + alternate_album['ReleaseCountry'] + ", " + str(alternate_album['ReleaseDate']) + ", " + alternate_album['ReleaseFormat'] + ") [" + str(have_track_count) + "/" + str(track_count) + " tracks]"
|
||||||
|
|
||||||
%>
|
%>
|
||||||
<a href="#" onclick="doAjaxCall('switchAlbum?AlbumID=${album['AlbumID']}&ReleaseID=${alternate_album['ReleaseID']}', $(this), 'table');" data-success="Switched release to: ${alternate_album_name}">${alternate_album_name}</a><br>
|
<a href="javascript:void(0)" onclick="doAjaxCall('switchAlbum?AlbumID=${album['AlbumID']}&ReleaseID=${alternate_album['ReleaseID']}', $(this), 'table');" data-success="Switched release to: ${alternate_album_name}">${alternate_album_name}</a><a href="${mb_link}" target="_blank">MB</a><br>
|
||||||
%endfor
|
%endfor
|
||||||
%endif
|
%endif
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<a class="menu_link_edit" id="edit_search_term" href="#">Edit Search Term</a>
|
<a class="menu_link_edit" id="edit_search_term" href="javascript:void(0)"><i class="fa fa-pencil"></i> Edit Search Term</a>
|
||||||
<div id="dialog2" title="Enter your own search term for this album" style="display:none" class="configtable">
|
<div id="dialog2" title="Enter your own search term for this album" style="display:none" class="configtable">
|
||||||
<form action="editSearchTerm" method="GET" id="editSearchTerm">
|
<form action="editSearchTerm" method="GET" id="editSearchTerm">
|
||||||
<input type="hidden" name="AlbumID" value="${album['AlbumID']}">
|
<input type="hidden" name="AlbumID" value="${album['AlbumID']}">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<%
|
<%
|
||||||
if not album['SearchTerm']:
|
if not album['SearchTerm']:
|
||||||
search_term = ""
|
search_term = ""
|
||||||
else:
|
else:
|
||||||
search_term = album['SearchTerm']
|
search_term = album['SearchTerm']
|
||||||
|
%>
|
||||||
%>
|
<input type="text" value="${search_term}" name="SearchTerm" size="40" />
|
||||||
<input type="text" value="${search_term}" name="SearchTerm" size="40" />
|
</div>
|
||||||
</div>
|
<input type="button" value="Save changes" onclick="doAjaxCall('editSearchTerm',$(this),'tabs',true);return false;" data-success="Search term updated"/>
|
||||||
<input type="button" value="Save changes" onclick="doAjaxCall('editSearchTerm',$(this),'tabs',true);return false;" data-success="Search term updated"/>
|
</form>
|
||||||
</form>
|
</div>
|
||||||
</div>
|
<a class="menu_link_edit" id="choose_specific_download" href="javascript:void(0)" onclick="getAvailableDownloads()"><i class="fa fa-search"></i> Choose Specific Download</a>
|
||||||
|
<div id="choose_specific_download_dialog" title="Choose a specific download for this album" style="display:none" class="configtable">
|
||||||
|
<table class="display" id="downloads_table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th id="title">Title</th>
|
||||||
|
<th id="size">Size</th>
|
||||||
|
<th id="provider">Provider</th>
|
||||||
|
<th id="kind">Kind</th>
|
||||||
|
<th id="matches" title="Matches quality and/or seed settings.">Matches</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody id="downloads_table_body">
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<a href="artistPage?ArtistID=${album['ArtistID']}" class="back">« Back to ${album['ArtistName']}</a>
|
|
||||||
</%def>
|
</%def>
|
||||||
|
|
||||||
<%def name="body()">
|
<%def name="body()">
|
||||||
@@ -71,8 +91,14 @@
|
|||||||
<img height="200" alt="" class="albumArt" src="artwork/album/${album['AlbumID']}">
|
<img height="200" alt="" class="albumArt" src="artwork/album/${album['AlbumID']}">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<h1><a href="http://musicbrainz.org/release-group/${album['AlbumID']}">${album['AlbumTitle']}</a></h1>
|
<h1 id="albumname">
|
||||||
<h2><a href="http://musicbrainz.org/artist/${album['ArtistID']}">${album['ArtistName']}</a></h2>
|
<a href="http://musicbrainz.org/release-group/${album['AlbumID']}" id="albumnamelink">${album['AlbumTitle']}</a>
|
||||||
|
</h1>
|
||||||
|
|
||||||
|
<h2 id="artistname">
|
||||||
|
<a href="http://musicbrainz.org/artist/${album['ArtistID']}" id="artistnamelink">${album['ArtistName']}</a>
|
||||||
|
</h2>
|
||||||
|
|
||||||
<%
|
<%
|
||||||
totalduration = myDB.action("SELECT SUM(TrackDuration) FROM tracks WHERE AlbumID=?", [album['AlbumID']]).fetchone()[0]
|
totalduration = myDB.action("SELECT SUM(TrackDuration) FROM tracks WHERE AlbumID=?", [album['AlbumID']]).fetchone()[0]
|
||||||
totaltracks = len(myDB.select("SELECT TrackTitle from tracks WHERE AlbumID=?", [album['AlbumID']]))
|
totaltracks = len(myDB.select("SELECT TrackTitle from tracks WHERE AlbumID=?", [album['AlbumID']]))
|
||||||
@@ -89,7 +115,6 @@
|
|||||||
<li>Duration: <span>${albumduration}</span></li>
|
<li>Duration: <span>${albumduration}</span></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div id="track_wrapper">
|
<div id="track_wrapper">
|
||||||
<table class="display" id="track_table">
|
<table class="display" id="track_table">
|
||||||
@@ -138,7 +163,7 @@
|
|||||||
</tr>
|
</tr>
|
||||||
%endfor
|
%endfor
|
||||||
<%
|
<%
|
||||||
unmatched = myDB.select('SELECT * from have WHERE ArtistName LIKE ? AND AlbumTitle LIKE ?', [album['ArtistName'], album['AlbumTitle']])
|
unmatched = myDB.select('SELECT * from have WHERE ArtistName LIKE ? AND AlbumTitle LIKE ? AND Matched = "Failed" ORDER BY CAST(TrackNumber AS INTEGER)', [album['ArtistName'], album['AlbumTitle']])
|
||||||
%>
|
%>
|
||||||
%if unmatched:
|
%if unmatched:
|
||||||
%for track in unmatched:
|
%for track in unmatched:
|
||||||
@@ -176,11 +201,17 @@
|
|||||||
|
|
||||||
function initThisPage() {
|
function initThisPage() {
|
||||||
$('#album_chooser').click(function() {
|
$('#album_chooser').click(function() {
|
||||||
$('#dialog').dialog({ width: "500px" });
|
$('#dialog').dialog({
|
||||||
|
width: 500,
|
||||||
|
maxHeight: 500
|
||||||
|
});
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
$('#edit_search_term').click(function() {
|
$('#edit_search_term').click(function() {
|
||||||
$('#dialog2').dialog({ width: "500px" });
|
$('#dialog2').dialog({
|
||||||
|
width: 500,
|
||||||
|
maxHeight: 500
|
||||||
|
});
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
$('#refresh_artist').click(function() {
|
$('#refresh_artist').click(function() {
|
||||||
@@ -189,7 +220,7 @@
|
|||||||
initActions();
|
initActions();
|
||||||
setTimeout(function(){
|
setTimeout(function(){
|
||||||
initFancybox();
|
initFancybox();
|
||||||
},1000);
|
}, 1000);
|
||||||
|
|
||||||
$('#track_table').dataTable({
|
$('#track_table').dataTable({
|
||||||
"aaSorting": [],
|
"aaSorting": [],
|
||||||
@@ -200,9 +231,135 @@
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
function getAvailableDownloads() {
|
||||||
|
ShowSpinner();
|
||||||
|
$.getJSON("choose_specific_download?AlbumID=${album['AlbumID']}", function(data) {
|
||||||
|
loader.remove();
|
||||||
|
feedback.fadeOut();
|
||||||
|
search_results = data
|
||||||
|
for( var i = 0, len = data.length; i < len; i++ ) {
|
||||||
|
$('#downloads_table_body').append('<tr><td id="title"><a href="javascript:void(0)" onclick="downloadSpecificRelease('+i+')">'+data[i].title+'</a></td><td id="size"><span title='+data[i].size+'></span>'+(data[i].size / (1024*1024)).toFixed(2)+' MB</td><td id="provider">'+data[i].provider+'</td><td id="kind">'+data[i].kind+'</td><td id="matches">'+data[i].matches+'</td></tr>');
|
||||||
|
}
|
||||||
|
$('#downloads_table').dataTable({
|
||||||
|
"aoColumns": [
|
||||||
|
null,
|
||||||
|
{"sType": "title-numeric"},
|
||||||
|
null,
|
||||||
|
null,
|
||||||
|
{"sType": "string"}
|
||||||
|
],
|
||||||
|
"aaSorting": [[ 4, 'desc']],
|
||||||
|
"bFilter": false,
|
||||||
|
"bInfo": false,
|
||||||
|
"bPaginate": false,
|
||||||
|
"bDestroy": true
|
||||||
|
});
|
||||||
|
$("#choose_specific_download_dialog").dialog({
|
||||||
|
width: "80%",
|
||||||
|
maxHeight: 500
|
||||||
|
});
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function downloadSpecificRelease(i){
|
||||||
|
|
||||||
|
title = search_results[i].title
|
||||||
|
size = search_results[i].size
|
||||||
|
url = search_results[i].url
|
||||||
|
provider = search_results[i].provider
|
||||||
|
kind = search_results[i].kind
|
||||||
|
|
||||||
|
ShowSpinner();
|
||||||
|
$.getJSON("download_specific_release?AlbumID=${album['AlbumID']}&title="+title+"&size="+size+"&url="+url+"&provider="+provider+"&kind=" + kind, function(data) {
|
||||||
|
loader.remove();
|
||||||
|
feedback.fadeOut();
|
||||||
|
refreshSubmenu();
|
||||||
|
$("#choose_specific_download_dialog").dialog("close");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function ShowSpinner() {
|
||||||
|
feedback = $("#ajaxMsg");
|
||||||
|
update = $("#updatebar");
|
||||||
|
if ( update.is(":visible") ) {
|
||||||
|
var height = update.height() + 35;
|
||||||
|
feedback.css("bottom",height + "px");
|
||||||
|
} else {
|
||||||
|
feedback.removeAttr("style");
|
||||||
|
}
|
||||||
|
loader = $("<i class='fa fa-refresh fa-spin'></i>");
|
||||||
|
feedback.prepend(loader);
|
||||||
|
feedback.fadeIn();
|
||||||
|
}
|
||||||
|
|
||||||
|
var loadingMessage = false;
|
||||||
|
var spinner_active = false;
|
||||||
|
var loadingtext_active = false;
|
||||||
|
var refreshInterval;
|
||||||
|
var wasLoading = false;
|
||||||
|
var x = 0;
|
||||||
|
|
||||||
|
function checkAlbumStatus() {
|
||||||
|
$.getJSON("getAlbumjson?AlbumID=${album['AlbumID']}", function(data) {
|
||||||
|
if (data['Status'] == "Loading"){
|
||||||
|
wasLoading = true;
|
||||||
|
$('#albumnamelink').text(data["AlbumTitle"]);
|
||||||
|
$('#artistnamelink').text(data["ArtistName"]);
|
||||||
|
if (loadingMessage == false){
|
||||||
|
$("#ajaxMsg").after( "<div id='ajaxMsg2' class='ajaxMsg'></div>" );
|
||||||
|
showArtistMsg("Getting album information");
|
||||||
|
loadingMessage = true;
|
||||||
|
}
|
||||||
|
if (spinner_active == false){
|
||||||
|
$('#albumname').prepend('<i class="fa fa-refresh fa-spin" id="albumnamespinner"></i>')
|
||||||
|
spinner_active = true;
|
||||||
|
}
|
||||||
|
if (loadingtext_active == false){
|
||||||
|
$('#albumname').append('<h3 id="loadingtext"><i>(Album information is currently being loaded)</i></h3>')
|
||||||
|
loadingtext_active = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
if (++x === 10) {
|
||||||
|
clearInterval(refreshInterval);
|
||||||
|
}
|
||||||
|
var sts = $("#artistname").text();
|
||||||
|
if (wasLoading == true || sts == "Loading"){
|
||||||
|
location.reload();
|
||||||
|
$('#albumnamespinner').remove()
|
||||||
|
$('#loadingtext').remove()
|
||||||
|
$('#ajaxMsg2').remove()
|
||||||
|
spinner_active = false
|
||||||
|
loadingtext_active = false
|
||||||
|
loadingMessage = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
jQuery.extend( jQuery.fn.dataTableExt.oSort, {
|
||||||
|
"title-numeric-pre": function ( a ) {
|
||||||
|
var x = a.match(/title="*(-?[0-9\.]+)/)[1];
|
||||||
|
return parseFloat( x );
|
||||||
|
},
|
||||||
|
|
||||||
|
"title-numeric-asc": function ( a, b ) {
|
||||||
|
return ((a < b) ? -1 : ((a > b) ? 1 : 0));
|
||||||
|
},
|
||||||
|
|
||||||
|
"title-numeric-desc": function ( a, b ) {
|
||||||
|
return ((a < b) ? 1 : ((a > b) ? -1 : 0));
|
||||||
|
}
|
||||||
|
} );
|
||||||
|
|
||||||
$(document).ready(function() {
|
$(document).ready(function() {
|
||||||
getAlbumInfo();
|
getAlbumInfo();
|
||||||
initThisPage();
|
initThisPage();
|
||||||
|
checkAlbumStatus();
|
||||||
|
refreshInterval = setInterval(function(){
|
||||||
|
checkAlbumStatus();
|
||||||
|
}, 3000);
|
||||||
});
|
});
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -8,30 +8,31 @@
|
|||||||
<%def name="headerIncludes()">
|
<%def name="headerIncludes()">
|
||||||
<div id="subhead_container">
|
<div id="subhead_container">
|
||||||
<div id="subhead_menu">
|
<div id="subhead_menu">
|
||||||
<a id="menu_link_refresh" onclick="doAjaxCall('refreshArtist?ArtistID=${artist['ArtistID']}', $(this)),'table'" href="#" data-success="'${artist['ArtistName']}' is being refreshed">Refresh Artist</a>
|
<a id="menu_link_refresh" onclick="doSimpleAjaxCall('refreshArtist?ArtistID=${artist['ArtistID']}')" href="javascript:void(0)"><i class="fa fa-refresh"></i> Refresh Artist</a>
|
||||||
<a id="menu_link_delete" href="deleteArtist?ArtistID=${artist['ArtistID']}">Delete Artist</a>
|
<a id="menu_link_delete" href="deleteArtist?ArtistID=${artist['ArtistID']}"><i class="fa fa-trash-o"></i> Delete Artist</a>
|
||||||
|
<a id="menu_link_scan" onclick="doAjaxCall('scanArtist?ArtistID=${artist['ArtistID']}', $(this)),'table'" href="javascript:void(0)" data-success="'${artist['ArtistName']}' was scanned"><i class="fa fa-refresh"></i> Scan Artist</a>
|
||||||
%if artist['Status'] == 'Paused':
|
%if artist['Status'] == 'Paused':
|
||||||
<a id="menu_link_resume" href="#" onclick="doAjaxCall('resumeArtist?ArtistID=${artist['ArtistID']}',$(this),true)" data-success="${artist['ArtistName']} resumed">Resume Artist</a>
|
<a id="menu_link_resume" href="javascript:void(0)" onclick="doAjaxCall('resumeArtist?ArtistID=${artist['ArtistID']}',$(this),true)" data-success="${artist['ArtistName']} resumed"><i class="fa fa-play"></i> Resume Artist</a>
|
||||||
%else:
|
%else:
|
||||||
<a id="menu_link_pauze" href="#" onclick="doAjaxCall('pauseArtist?ArtistID=${artist['ArtistID']}',$(this),true)" data-success="${artist['ArtistName']} paused">Pause Artist</a>
|
<a id="menu_link_pauze" href="javascript:void(0)" onclick="doAjaxCall('pauseArtist?ArtistID=${artist['ArtistID']}',$(this),true)" data-success="${artist['ArtistName']} paused"><i class="fa fa-pause"></i> Pause Artist</a>
|
||||||
%endif
|
%endif
|
||||||
%if artist['IncludeExtras']:
|
%if artist['IncludeExtras']:
|
||||||
<a id="menu_link_removeextra" href="#" onclick="doAjaxCall('removeExtras?ArtistID=${artist['ArtistID']}',$(this),true)" data-success="Extras removed for ${artist['ArtistName']}">Remove Extras</a>
|
<a id="menu_link_removeextra" href="javascript:void(0)" onclick="doAjaxCall('removeExtras?ArtistID=${artist['ArtistID']}&ArtistName=${artist['ArtistName']}',$(this),'submenu&table')" data-success="Extras removed for ${artist['ArtistName']}"><i class="fa fa-minus"></i> Remove Extras</a>
|
||||||
<a class="menu_link_edit" id="menu_link_modifyextra" href="#">Modify Extras</a>
|
<a class="menu_link_edit" id="menu_link_modifyextra" href="javascript:void(0)"><i class="fa fa-pencil"></i> Modify Extras</a>
|
||||||
%else:
|
%else:
|
||||||
<a id="menu_link_getextra" href="#">Get Extras</a>
|
<a id="menu_link_getextra" href="javascript:void(0)"><i class="fa fa-plus"></i> Get Extras</a>
|
||||||
%endif
|
%endif
|
||||||
<div id="dialog" title="Choose Which Extras to Fetch" style="display:none" class="configtable">
|
<div id="dialog" title="Choose Which Extras to Fetch" style="display:none" class="configtable">
|
||||||
<form action="getExtras" method="get" class="form">
|
<form action="getExtras" method="get" class="form">
|
||||||
<input type="hidden" name="ArtistID" value="${artist['ArtistID']}">
|
<input type="hidden" name="ArtistID" value="${artist['ArtistID']}">
|
||||||
<input type="hidden" name="newstyle" value="true">
|
<input type="hidden" name="newstyle" value="true">
|
||||||
%for extra in extras:
|
%for extra in extras:
|
||||||
<input type="checkbox" id="${extra}" name="${extra}" value="1" ${extras[extra]} />${string.capwords(extra)}<br>
|
<input type="checkbox" id="${extra}" name="${extra}" value="1" ${extras[extra]} />${string.capwords(extra)}<br>
|
||||||
%endfor
|
%endfor
|
||||||
<br>
|
<br>
|
||||||
<input id="submit" type="submit" value="Fetch Extras">
|
<input id="submit" type="submit" value="Fetch Extras">
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<a href="home" class="back">« Back to overview</a>
|
<a href="home" class="back">« Back to overview</a>
|
||||||
@@ -42,17 +43,12 @@
|
|||||||
<div id="artistImg">
|
<div id="artistImg">
|
||||||
<img id="artistImage" class="albumArt" alt="" src="artwork/artist/${artist['ArtistID']}"/>
|
<img id="artistImage" class="albumArt" alt="" src="artwork/artist/${artist['ArtistID']}"/>
|
||||||
</div>
|
</div>
|
||||||
<h1>
|
<h1 id="artistname">
|
||||||
%if artist['Status'] == 'Loading':
|
<a href="http://musicbrainz.org/artist/${artist['ArtistID']}" id="artistnamelink">${artist['ArtistName']}</a>
|
||||||
<img src="interfaces/default/images/loader_black.gif" alt="loading" style="float:left; margin-right: 5px;"/>
|
|
||||||
%endif
|
|
||||||
<a href="http://musicbrainz.org/artist/${artist['ArtistID']}">${artist['ArtistName']}</a>
|
|
||||||
%if artist['Status'] == 'Loading':
|
|
||||||
<h3><i>(Album information for this artist is currently being loaded)</i></h3>
|
|
||||||
%endif
|
|
||||||
</h1>
|
</h1>
|
||||||
<div id="artistBio"></div>
|
<div id="artistBio"></div>
|
||||||
</div>
|
</div>
|
||||||
|
<ul id="artistCalendar" style="display:none;"></ul>
|
||||||
<form action="markAlbums" method="get" id="markAlbums">
|
<form action="markAlbums" method="get" id="markAlbums">
|
||||||
<input type="hidden" name="ArtistID" value=${artist['ArtistID']}>
|
<input type="hidden" name="ArtistID" value=${artist['ArtistID']}>
|
||||||
<div id="markalbum">Mark selected albums as
|
<div id="markalbum">Mark selected albums as
|
||||||
@@ -61,6 +57,7 @@
|
|||||||
<option value="Wanted">Wanted</option>
|
<option value="Wanted">Wanted</option>
|
||||||
<option value="WantedNew">Wanted (new only)</option>
|
<option value="WantedNew">Wanted (new only)</option>
|
||||||
<option value="Skipped">Skipped</option>
|
<option value="Skipped">Skipped</option>
|
||||||
|
<option value="Ignored">Ignored</option>
|
||||||
<option value="Downloaded">Downloaded</option>
|
<option value="Downloaded">Downloaded</option>
|
||||||
</select>
|
</select>
|
||||||
<input type="hidden" value="Go">
|
<input type="hidden" value="Go">
|
||||||
@@ -73,6 +70,7 @@
|
|||||||
<th id="albumname">Name</th>
|
<th id="albumname">Name</th>
|
||||||
<th id="reldate">Date</th>
|
<th id="reldate">Date</th>
|
||||||
<th id="type">Type</th>
|
<th id="type">Type</th>
|
||||||
|
<th id="score">Metacritic</th>
|
||||||
<th id="status">Status</th>
|
<th id="status">Status</th>
|
||||||
<th id="have">Have</th>
|
<th id="have">Have</th>
|
||||||
<th id="bitrate">Bitrate</th>
|
<th id="bitrate">Bitrate</th>
|
||||||
@@ -88,12 +86,14 @@
|
|||||||
grade = 'X'
|
grade = 'X'
|
||||||
elif album['Status'] == 'Snatched':
|
elif album['Status'] == 'Snatched':
|
||||||
grade = 'C'
|
grade = 'C'
|
||||||
|
elif album['Status'] == 'Ignored':
|
||||||
|
grade = 'I'
|
||||||
else:
|
else:
|
||||||
grade = 'A'
|
grade = 'A'
|
||||||
|
|
||||||
myDB = db.DBConnection()
|
myDB = db.DBConnection()
|
||||||
totaltracks = len(myDB.select('SELECT TrackTitle from tracks WHERE AlbumID=?', [album['AlbumID']]))
|
totaltracks = len(myDB.select('SELECT TrackTitle from tracks WHERE AlbumID=?', [album['AlbumID']]))
|
||||||
havetracks = len(myDB.select('SELECT TrackTitle from tracks WHERE AlbumID=? AND Location IS NOT NULL', [album['AlbumID']])) + len(myDB.select('SELECT TrackTitle from have WHERE ArtistName like ? AND AlbumTitle LIKE ?', [album['ArtistName'], album['AlbumTitle']]))
|
havetracks = len(myDB.select('SELECT TrackTitle from tracks WHERE AlbumID=? AND Location IS NOT NULL', [album['AlbumID']])) + len(myDB.select('SELECT TrackTitle from have WHERE ArtistName like ? AND AlbumTitle LIKE ? AND Matched = "Failed"', [album['ArtistName'], album['AlbumTitle']]))
|
||||||
|
|
||||||
try:
|
try:
|
||||||
percent = (havetracks*100.0)/totaltracks
|
percent = (havetracks*100.0)/totaltracks
|
||||||
@@ -122,22 +122,23 @@
|
|||||||
%>
|
%>
|
||||||
<tr class="grade${grade}">
|
<tr class="grade${grade}">
|
||||||
<td id="select"><input type="checkbox" name="${album['AlbumID']}" class="checkbox" /></td>
|
<td id="select"><input type="checkbox" name="${album['AlbumID']}" class="checkbox" /></td>
|
||||||
<td id="albumart"><img class="albumArt" id="${album['AlbumID']}" src="artwork/thumbs/album/${album['AlbumID']}" height="64" width="64"></td>
|
<td id="albumart"><img class="albumArtnostretch" id="${album['AlbumID']}" src="artwork/thumbs/album/${album['AlbumID']}" height="64" width="64"></td>
|
||||||
<td id="albumname"><a href="albumPage?AlbumID=${album['AlbumID']}">${album['AlbumTitle']}</a></td>
|
<td id="albumname"><a href="albumPage?AlbumID=${album['AlbumID']}">${album['AlbumTitle']}</a></td>
|
||||||
<td id="reldate">${album['ReleaseDate']}</td>
|
<td id="reldate">${album['ReleaseDate']}</td>
|
||||||
<td id="type">${album['Type']}</td>
|
<td id="type">${album['Type']}</td>
|
||||||
|
<td id="score">${album['CriticScore']}/${album['UserScore']}</td>
|
||||||
<td id="status">${album['Status']}
|
<td id="status">${album['Status']}
|
||||||
%if album['Status'] == 'Skipped':
|
%if album['Status'] == 'Skipped' or album['Status'] == 'Ignored':
|
||||||
[<a href="#" onclick="doAjaxCall('queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}',$(this),'table')" data-success="'${album['AlbumTitle']}' added to Wanted list">want</a>]
|
[<a href="javascript:void(0)" onclick="doAjaxCall('queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}',$(this),'table')" data-success="'${album['AlbumTitle']}' added to Wanted list">want</a>]
|
||||||
%elif (album['Status'] == 'Wanted' or album['Status'] == 'Wanted Lossless'):
|
%elif (album['Status'] == 'Wanted' or album['Status'] == 'Wanted Lossless'):
|
||||||
[<a href="#" onclick="doAjaxCall('unqueueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}',$(this),'table')" data-success="'${album['AlbumTitle']}' skipped">skip</a>]
|
[<a href="javascript:void(0)" onclick="doAjaxCall('unqueueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}',$(this),'table')" data-success="'${album['AlbumTitle']}' skipped">skip</a>] [<a href="javascript:void(0)" onclick="doAjaxCall('queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}', $(this),'table')" data-success="Trying to download'${album['AlbumTitle']}'" title="Search if available for download">search</a>]
|
||||||
%else:
|
%else:
|
||||||
[<a href="#" onclick="doAjaxCall('queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}', $(this),'table')" data-success="Retrying the same version of '${album['AlbumTitle']}'" title="Retry the same download again">retry</a>][<a href="#" onclick="doAjaxCall('queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}&new=True', $(this),'table')" title="Try a new download, skipping all previously tried nzbs" data-success="Downloading new version for '${album['AlbumTitle']}'" data-success="Looking for a new version of '${album['AlbumTitle']}'">new</a>]
|
[<a href="javascript:void(0)" onclick="doAjaxCall('queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}', $(this),'table')" data-success="Retrying the same version of '${album['AlbumTitle']}'" title="Retry the same download again">retry</a>][<a href="javascript:void(0)" onclick="doAjaxCall('queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}&new=True', $(this),'table')" title="Try a new download, skipping all previously tried nzbs" data-success="Downloading new version for '${album['AlbumTitle']}'" data-success="Looking for a new version of '${album['AlbumTitle']}'">new</a>]
|
||||||
%endif
|
%endif
|
||||||
%if albumformat in lossy_formats and album['Status'] == 'Skipped':
|
%if albumformat in lossy_formats and album['Status'] == 'Skipped':
|
||||||
[<a id="wantlossless" href="#" onclick="doAjaxCall('queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}&lossless=True', $(this),'table')" data-success="Lossless version of '${album['AlbumTitle']}' added to queue">want lossless</a>]
|
[<a id="wantlossless" href="javascript:void(0)" onclick="doAjaxCall('queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}&lossless=True', $(this),'table')" data-success="Lossless version of '${album['AlbumTitle']}' added to queue">want lossless</a>]
|
||||||
%elif albumformat in lossy_formats and (album['Status'] == 'Snatched' or album['Status'] == 'Downloaded'):
|
%elif albumformat in lossy_formats and (album['Status'] == 'Snatched' or album['Status'] == 'Downloaded'):
|
||||||
[<a id="wantlossless" href="#" onclick="doAjaxCall('queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}&lossless=True', $(this),'table')" data-success="Retrying the same lossless version of '${album['AlbumTitle']}'">retry lossless</a>]
|
[<a id="wantlossless" href="javascript:void(0)" onclick="doAjaxCall('queueAlbum?AlbumID=${album['AlbumID']}&ArtistID=${album['ArtistID']}&lossless=True', $(this),'table')" data-success="Retrying the same lossless version of '${album['AlbumTitle']}'">retry lossless</a>]
|
||||||
%endif
|
%endif
|
||||||
</td>
|
</td>
|
||||||
<td id="have"><span title="${percent}"><span><div class="progress-container"><div style="width:${percent}%"><div class="havetracks">${havetracks}/${totaltracks}</div></div></div></td>
|
<td id="have"><span title="${percent}"><span><div class="progress-container"><div style="width:${percent}%"><div class="havetracks">${havetracks}/${totaltracks}</div></div></div></td>
|
||||||
@@ -152,9 +153,6 @@
|
|||||||
|
|
||||||
<%def name="headIncludes()">
|
<%def name="headIncludes()">
|
||||||
<link rel="stylesheet" href="interfaces/default/css/data_table.css">
|
<link rel="stylesheet" href="interfaces/default/css/data_table.css">
|
||||||
%if artist['Status'] == 'Loading':
|
|
||||||
<meta http-equiv="refresh" content="5">
|
|
||||||
%endif
|
|
||||||
</%def>
|
</%def>
|
||||||
|
|
||||||
<%def name="javascriptIncludes()">
|
<%def name="javascriptIncludes()">
|
||||||
@@ -167,19 +165,117 @@
|
|||||||
getInfo(elem,id,'artist');
|
getInfo(elem,id,'artist');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
<%
|
||||||
|
if headphones.CONFIG.SONGKICK_FILTER_ENABLED:
|
||||||
|
songkick_filter_enabled = "true"
|
||||||
|
else:
|
||||||
|
songkick_filter_enabled = "false"
|
||||||
|
|
||||||
|
if not headphones.CONFIG.SONGKICK_LOCATION:
|
||||||
|
songkick_location = "none"
|
||||||
|
else:
|
||||||
|
songkick_location = headphones.CONFIG.SONGKICK_LOCATION
|
||||||
|
|
||||||
|
if headphones.CONFIG.SONGKICK_ENABLED:
|
||||||
|
songkick_enabled = "true"
|
||||||
|
else:
|
||||||
|
songkick_enabled = "false"
|
||||||
|
|
||||||
|
%>
|
||||||
|
function getArtistsCalendar() {
|
||||||
|
var template, calendarDomNode;
|
||||||
|
|
||||||
|
calendarDomNode = $("#artistCalendar");
|
||||||
|
|
||||||
|
template = '<li><a target="_blank" href="URI"><span class="sk-name">NAME</span><span class="sk-location">LOC</span></a></li>';
|
||||||
|
|
||||||
|
$.getJSON("https://api.songkick.com/api/3.0/artists/mbid:${artist['ArtistID']}/calendar.json?apikey=${headphones.CONFIG.SONGKICK_APIKEY}&jsoncallback=?",
|
||||||
|
function(data){
|
||||||
|
if (data['resultsPage'].totalEntries >= 1) {
|
||||||
|
if (${songkick_filter_enabled}) {
|
||||||
|
data.resultsPage.results.event = $.grep(data.resultsPage.results.event, function(element,index){
|
||||||
|
return element.venue.metroArea.id == ${songkick_location};
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (data.resultsPage.results.event.length > 0) {
|
||||||
|
var tourDate;
|
||||||
|
|
||||||
|
calendarDomNode.show();
|
||||||
|
$("#artistImg").addClass('on-tour');
|
||||||
|
|
||||||
|
jQuery.each(data.resultsPage.results.event, function(i, event) {
|
||||||
|
tourDate = template;
|
||||||
|
tourDate = tourDate.replace('URI',event.uri);
|
||||||
|
tourDate = tourDate.replace('NAME',event.displayName);
|
||||||
|
tourDate = tourDate.replace('LOC',event.location.city);
|
||||||
|
|
||||||
|
calendarDomNode.append(tourDate);
|
||||||
|
});
|
||||||
|
|
||||||
|
calendarDomNode.append('<li><img src="interfaces/default/images/songkick.png" alt="concerts by songkick" class="sk-logo" /></li>');
|
||||||
|
|
||||||
|
$(function() {
|
||||||
|
$("#artistCalendar").each(function() {
|
||||||
|
$("li:gt(4)", this).hide(); /* :gt() is zero-indexed */
|
||||||
|
$("li:nth-child(5)", this).after("<br><li class='more'><a href='#'>More...</a></li>"); /* :nth-child() is one-indexed */
|
||||||
|
});
|
||||||
|
$("li.more").on("click", 'a', function() {
|
||||||
|
var li = $(this).parents("li:first");
|
||||||
|
li.parent().children().show();
|
||||||
|
li.remove();
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
var loadingMessage = false;
|
||||||
|
var spinner_active = false;
|
||||||
|
var loadingtext_active = false;
|
||||||
|
|
||||||
|
function checkArtistStatus() {
|
||||||
|
$.getJSON("getArtistjson?ArtistID=${artist['ArtistID']}", function(data) {
|
||||||
|
if (data['Status'] == "Loading"){
|
||||||
|
refreshTable();
|
||||||
|
$('#artistnamelink').text(data["ArtistName"]);
|
||||||
|
if (loadingMessage == false){
|
||||||
|
$("#ajaxMsg").after( "<div id='ajaxMsg2' class='ajaxMsg'></div>" );
|
||||||
|
showArtistMsg("Getting artist information");
|
||||||
|
loadingMessage = true;
|
||||||
|
}
|
||||||
|
if (spinner_active == false){
|
||||||
|
$('#artistname').prepend('<i class="fa fa-refresh fa-spin" id="artistnamespinner"></i>')
|
||||||
|
spinner_active = true;
|
||||||
|
}
|
||||||
|
if (loadingtext_active == false){
|
||||||
|
$('#artistname').append('<h3 id="loadingtext"><i>(Album information for this artist is currently being loaded)</i></h3>')
|
||||||
|
loadingtext_active = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
$('#artistnamespinner').remove()
|
||||||
|
$('#loadingtext').remove()
|
||||||
|
$('#ajaxMsg2').remove()
|
||||||
|
spinner_active = false
|
||||||
|
loadingtext_active = false
|
||||||
|
loadingMessage = false
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
function initThisPage() {
|
function initThisPage() {
|
||||||
$('#menu_link_getextra').click(function() {
|
$('#menu_link_getextra').click(function(event) {
|
||||||
$('#dialog').dialog();
|
$('#dialog').dialog();
|
||||||
return false;
|
event.preventDefault();
|
||||||
});
|
});
|
||||||
$('#menu_link_modifyextra').click(function() {
|
$('#menu_link_modifyextra').click(function(event) {
|
||||||
$('#dialog').dialog();
|
$('#dialog').dialog();
|
||||||
|
event.preventDefault();
|
||||||
});
|
});
|
||||||
|
|
||||||
%if artist['Status'] == 'Loading':
|
|
||||||
showMsg("Getting artist information",true);
|
|
||||||
%endif
|
|
||||||
$('#album_table').dataTable({
|
$('#album_table').dataTable({
|
||||||
"bDestroy": true,
|
"bDestroy": true,
|
||||||
"aoColumns": [
|
"aoColumns": [
|
||||||
@@ -189,6 +285,7 @@
|
|||||||
{ "sType": "date" },
|
{ "sType": "date" },
|
||||||
null,
|
null,
|
||||||
null,
|
null,
|
||||||
|
null,
|
||||||
{ "sType": "title-numeric"},
|
{ "sType": "title-numeric"},
|
||||||
null,
|
null,
|
||||||
null
|
null
|
||||||
@@ -196,6 +293,7 @@
|
|||||||
"aoColumnDefs": [
|
"aoColumnDefs": [
|
||||||
{ 'bSortable': false, 'aTargets': [ 0,1 ] }
|
{ 'bSortable': false, 'aTargets': [ 0,1 ] }
|
||||||
],
|
],
|
||||||
|
"bStateSave": true,
|
||||||
"oLanguage": {
|
"oLanguage": {
|
||||||
"sLengthMenu":"Show _MENU_ albums per page",
|
"sLengthMenu":"Show _MENU_ albums per page",
|
||||||
"sEmptyTable": "No album information available",
|
"sEmptyTable": "No album information available",
|
||||||
@@ -210,13 +308,20 @@
|
|||||||
resetFilters("albums");
|
resetFilters("albums");
|
||||||
setTimeout(function(){
|
setTimeout(function(){
|
||||||
initFancybox();
|
initFancybox();
|
||||||
},1500)
|
},1500);
|
||||||
}
|
}
|
||||||
|
|
||||||
$(document).ready(function() {
|
$(document).ready(function() {
|
||||||
initActions();
|
initActions();
|
||||||
initThisPage();
|
initThisPage();
|
||||||
getArtistBio();
|
getArtistBio();
|
||||||
|
if( ${songkick_enabled} ){
|
||||||
|
getArtistsCalendar();
|
||||||
|
}
|
||||||
|
checkArtistStatus();
|
||||||
|
setInterval(function(){
|
||||||
|
checkArtistStatus();
|
||||||
|
}, 1500);
|
||||||
});
|
});
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -3,7 +3,6 @@
|
|||||||
from headphones import version
|
from headphones import version
|
||||||
%>
|
%>
|
||||||
<!doctype html>
|
<!doctype html>
|
||||||
<!--[if lt IE 7 ]> <html lang="en" class="no-js ie6"> <![endif]-->
|
|
||||||
<!--[if IE 7 ]> <html lang="en" class="no-js ie7"> <![endif]-->
|
<!--[if IE 7 ]> <html lang="en" class="no-js ie7"> <![endif]-->
|
||||||
<!--[if IE 8 ]> <html lang="en" class="no-js ie8"> <![endif]-->
|
<!--[if IE 8 ]> <html lang="en" class="no-js ie8"> <![endif]-->
|
||||||
<!--[if IE 9 ]> <html lang="en" class="no-js ie9"> <![endif]-->
|
<!--[if IE 9 ]> <html lang="en" class="no-js ie9"> <![endif]-->
|
||||||
@@ -20,50 +19,54 @@
|
|||||||
|
|
||||||
<link rel="shortcut icon" href="images/favicon.ico">
|
<link rel="shortcut icon" href="images/favicon.ico">
|
||||||
<link rel="apple-touch-icon" href="images/headphoneslogo.png">
|
<link rel="apple-touch-icon" href="images/headphoneslogo.png">
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="css/jquery-ui.min.css">
|
||||||
|
|
||||||
<link rel="stylesheet" href="interfaces/default/css/style.css">
|
<link rel="stylesheet" href="interfaces/default/css/style.css">
|
||||||
<link rel="stylesheet" href="interfaces/default/css/jquery-ui.css">
|
<link rel="stylesheet" href="interfaces/default/css/font-awesome.min.css">
|
||||||
${next.headIncludes()}
|
${next.headIncludes()}
|
||||||
|
|
||||||
<script src="js/libs/modernizr-1.7.min.js"></script>
|
<script src="js/libs/modernizr-2.8.3.min.js"></script>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div id="container">
|
<div id="container">
|
||||||
<div id="ajaxMsg"></div>
|
<div id="ajaxMsg" class="ajaxMsg"></div>
|
||||||
% if not headphones.CURRENT_VERSION:
|
% if headphones.CONFIG.CHECK_GITHUB and not headphones.CURRENT_VERSION:
|
||||||
<div id="updatebar">
|
<div id="updatebar">
|
||||||
You're running an unknown version of Headphones. <a href="update">Update</a> or
|
You're running an unknown version of Headphones. <a href="update">Update</a> or
|
||||||
<a href="#" onclick="$('#updatebar').slideUp('slow');">Close</a>
|
<a href="javascript:void(0)" onclick="$('#updatebar').slideUp('slow');">Close</a>
|
||||||
</div>
|
</div>
|
||||||
% elif headphones.CURRENT_VERSION != headphones.LATEST_VERSION and headphones.INSTALL_TYPE != 'win':
|
% elif headphones.CONFIG.CHECK_GITHUB and headphones.CURRENT_VERSION != headphones.LATEST_VERSION and headphones.COMMITS_BEHIND > 0 and headphones.INSTALL_TYPE != 'win':
|
||||||
<div id="updatebar">
|
<div id="updatebar">
|
||||||
A <a href="https://github.com/${headphones.GIT_USER}/headphones/compare/${headphones.CURRENT_VERSION}...${headphones.LATEST_VERSION}"> newer version</a> is available. You're ${headphones.COMMITS_BEHIND} commits behind. <a href="update">Update</a> or <a href="#" onclick="$('#updatebar').slideUp('slow');">Close</a>
|
A <a href="https://github.com/${headphones.CONFIG.GIT_USER}/headphones/compare/${headphones.CURRENT_VERSION}...${headphones.LATEST_VERSION}"> newer version</a> is available. You're ${headphones.COMMITS_BEHIND} commits behind. <a href="update">Update</a> or <a href="javascript:void(0)" onclick="$('#updatebar').slideUp('slow');">Close</a>
|
||||||
</div>
|
</div>
|
||||||
% endif
|
% endif
|
||||||
|
|
||||||
<header>
|
<header>
|
||||||
<div class="wrapper">
|
<div class="wrapper">
|
||||||
<div id="logo">
|
<div id="logo">
|
||||||
<a href="home"><img src="images/headphoneslogo.png" alt="headphones"></a>
|
<a href="home"><img src="images/headphoneslogo.png" alt="headphones" width="64"></a>
|
||||||
</div>
|
</div>
|
||||||
<ul id="nav">
|
<ul id="nav">
|
||||||
<li><a href="upcoming">wanted</a></li>
|
<li><a href="upcoming">wanted</a></li>
|
||||||
<li><a href="extras">extras</a></li>
|
<li><a href="extras">extras</a></li>
|
||||||
<li><a href="manage">manage</a></li>
|
<li><a href="manage">manage</a></li>
|
||||||
<li><a href="history">history</a></li>
|
<li><a href="history">history</a></li>
|
||||||
<li><a href="logs" class="log">logs</a></li>
|
<li><a href="logs">logs</a></li>
|
||||||
<li><a href="config" class="config"><img src="interfaces/default/images/icon_gear.png" alt="settings"/></a></li>
|
<li><a href="config" class="config"><i class="fa fa-gear fa-lg"></i></a></li>
|
||||||
</ul>
|
</ul>
|
||||||
<div id="searchbar">
|
<div id="searchbar">
|
||||||
<form action="search" method="get">
|
<form action="search" method="get">
|
||||||
<input type="text" value="" placeholder="Search" onfocus="if(this.value==this.defaultValue) this.value='';" name="name" />
|
<input type="text" value="" placeholder="Search" onfocus="if(this.value==this.defaultValue) this.value='';" name="name" />
|
||||||
<span class="mini-icon"></span>
|
<i class='fa fa-search mini-icon'></i>
|
||||||
<select name="type">
|
<select name="type" id="search_type">
|
||||||
<option value="artist">Artist</option>
|
<option value="artist">Artist</option>
|
||||||
<option value="album">Album</option>
|
<option value="album">Album</option>
|
||||||
|
<option value="series">Series</option>
|
||||||
</select>
|
</select>
|
||||||
<input type="submit" value="Add"/>
|
<input type="submit" value="Search"/>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</header>
|
</header>
|
||||||
@@ -76,11 +79,17 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<footer>
|
<footer>
|
||||||
|
<div id="info">
|
||||||
|
<small>
|
||||||
|
<a href="https://github.com/rembo10/headphones"><i class="fa fa-headphones"></i> Website</a> |
|
||||||
|
<a href="https://github.com/rembo10/headphones/wiki/TroubleShooting"><i class="fa fa-ambulance"></i> Help</a>
|
||||||
|
</small>
|
||||||
|
</div>
|
||||||
<div id="actions">
|
<div id="actions">
|
||||||
<small>
|
<small>
|
||||||
<a href="shutdown"><span class="ui-button-icon-primary ui-icon ui-icon-power"></span>Shutdown</a> |
|
<a href="shutdown"><i class="fa fa-power-off"></i> Shutdown</a> |
|
||||||
<a href="restart"><span class="ui-button-icon-primary ui-icon ui-icon-power"></span>Restart</a> |
|
<a href="restart"><i class="fa fa-power-off"></i> Restart</a> |
|
||||||
<a href="#" onclick="doAjaxCall('checkGithub',$(this))" data-success="Checking for update successful" data-error="Error checking for update"><span class="ui-icon ui-icon-refresh"></span>Check for new version</a>
|
<a href="javascript:void(0)" onclick="doAjaxCall('checkGithub',$(this))" data-success="Checking for update successful" data-error="Error checking for update"><i class="fa fa-refresh"></i> Check for new version</a>
|
||||||
</small>
|
</small>
|
||||||
</div>
|
</div>
|
||||||
<div id="version">
|
<div id="version">
|
||||||
@@ -88,23 +97,44 @@
|
|||||||
%if version.HEADPHONES_VERSION != 'master':
|
%if version.HEADPHONES_VERSION != 'master':
|
||||||
(${version.HEADPHONES_VERSION})
|
(${version.HEADPHONES_VERSION})
|
||||||
%endif
|
%endif
|
||||||
|
%if headphones.CONFIG.GIT_BRANCH != 'master':
|
||||||
|
(${headphones.CONFIG.GIT_BRANCH})
|
||||||
|
%endif
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
<a href="#main" id="toTop"><span>Back to top</span></a>
|
<a href="#main" id="toTop"><i class="fa fa-angle-double-up"></i> <span>Back to top</span></a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="js/libs/jquery-1.7.2.min.js"></script>
|
<script src="js/libs/jquery-1.11.1.min.js"></script>
|
||||||
<script src="js/libs/jquery-ui.min.js"></script>
|
<script src="js/libs/jquery-ui.min.js"></script>
|
||||||
|
<script src="js/common.js"></script>
|
||||||
|
|
||||||
${next.javascriptIncludes()}
|
${next.javascriptIncludes()}
|
||||||
|
|
||||||
<script src="js/plugins.js"></script>
|
|
||||||
<script src="interfaces/default/js/script.js"></script>
|
<script src="interfaces/default/js/script.js"></script>
|
||||||
<!--[if lt IE 7 ]>
|
|
||||||
<script src="js/libs/dd_belatedpng.js"></script>
|
|
||||||
<script> DD_belatedPNG.fix('img, .png_bg');</script>
|
|
||||||
<![endif]-->
|
|
||||||
<!-- This template is made by Elmar Kouwenhoven -->
|
<!-- This template is made by Elmar Kouwenhoven -->
|
||||||
|
|
||||||
|
<!-- Persist search type using local storage -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
|
||||||
|
$(document).ready(function() {
|
||||||
|
$('form:first *:input[type!=hidden]:first').focus();
|
||||||
|
try{
|
||||||
|
var type = window.localStorage.getItem('search_type') || "artist";
|
||||||
|
$("#search_type").val(type);
|
||||||
|
} catch(e) {
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
$('select[id=search_type]').change(function() {
|
||||||
|
var type = $(this).val()
|
||||||
|
try{
|
||||||
|
window.localStorage.setItem('search_type', type);
|
||||||
|
} catch(e) {
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
</script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
||||||
|
|||||||
@@ -224,6 +224,14 @@ table.display tr.even.gradeA {
|
|||||||
background-color: #ddffdd;
|
background-color: #ddffdd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
table.display tr.odd.gradeI {
|
||||||
|
background-color: #bebebe;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.display tr.even.gradeI {
|
||||||
|
background-color: #bebebe;
|
||||||
|
}
|
||||||
|
|
||||||
table.display tr.odd.gradeC {
|
table.display tr.odd.gradeC {
|
||||||
background-color: #ebf5ff;
|
background-color: #ebf5ff;
|
||||||
}
|
}
|
||||||
@@ -254,6 +262,13 @@ table.display tr.even.gradeU {
|
|||||||
background-color: #eee;
|
background-color: #eee;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
table.display tr.odd.gradeW {
|
||||||
|
background-color: #ffffaa;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.display tr.even.gradeW {
|
||||||
|
background-color: #ffffaa;
|
||||||
|
}
|
||||||
|
|
||||||
table.display tr.odd.gradeZ {
|
table.display tr.odd.gradeZ {
|
||||||
background-color: #FAFAFA;
|
background-color: #FAFAFA;
|
||||||
@@ -269,6 +284,7 @@ table.display tr.gradeL #status {
|
|||||||
}
|
}
|
||||||
table.display tr.gradeA td,
|
table.display tr.gradeA td,
|
||||||
table.display tr.gradeC td,
|
table.display tr.gradeC td,
|
||||||
|
table.display tr.gradeI td,
|
||||||
table.display tr.gradeX td,
|
table.display tr.gradeX td,
|
||||||
table.display tr.gradeU td,
|
table.display tr.gradeU td,
|
||||||
table.display tr.gradeZ td {border-bottom: 1px solid #FFF;}
|
table.display tr.gradeZ td {border-bottom: 1px solid #FFF;}
|
||||||
|
|||||||
@@ -1,547 +0,0 @@
|
|||||||
/*!
|
|
||||||
* jQuery UI CSS Framework 1.8.19
|
|
||||||
*
|
|
||||||
* Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
|
|
||||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
|
||||||
* http://jquery.org/license
|
|
||||||
*
|
|
||||||
* http://docs.jquery.com/UI/Theming/API
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Layout helpers
|
|
||||||
----------------------------------*/
|
|
||||||
.ui-helper-hidden { display: none; }
|
|
||||||
.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); }
|
|
||||||
.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
|
|
||||||
.ui-helper-clearfix:before, .ui-helper-clearfix:after { content: ""; display: table; }
|
|
||||||
.ui-helper-clearfix:after { clear: both; }
|
|
||||||
.ui-helper-clearfix { zoom: 1; }
|
|
||||||
.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
|
|
||||||
|
|
||||||
|
|
||||||
/* Interaction Cues
|
|
||||||
----------------------------------*/
|
|
||||||
.ui-state-disabled { cursor: default !important; }
|
|
||||||
|
|
||||||
|
|
||||||
/* Icons
|
|
||||||
----------------------------------*/
|
|
||||||
|
|
||||||
/* states and images */
|
|
||||||
.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
|
|
||||||
|
|
||||||
|
|
||||||
/* Misc visuals
|
|
||||||
----------------------------------*/
|
|
||||||
|
|
||||||
/* Overlays */
|
|
||||||
.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
|
|
||||||
|
|
||||||
|
|
||||||
/*!
|
|
||||||
* jQuery UI CSS Framework 1.8.19
|
|
||||||
*
|
|
||||||
* Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
|
|
||||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
|
||||||
* http://jquery.org/license
|
|
||||||
*
|
|
||||||
* http://docs.jquery.com/UI/Theming/API
|
|
||||||
*
|
|
||||||
* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS,%20Helvetica,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=6px&bgColorHeader=dddddd&bgTextureHeader=02_glass.png&bgImgOpacityHeader=35&borderColorHeader=bbbbbb&fcHeader=444444&iconColorHeader=999999&bgColorContent=c9c9c9&bgTextureContent=05_inset_soft.png&bgImgOpacityContent=50&borderColorContent=aaaaaa&fcContent=333333&iconColorContent=999999&bgColorDefault=eeeeee&bgTextureDefault=02_glass.png&bgImgOpacityDefault=60&borderColorDefault=cccccc&fcDefault=3383bb&iconColorDefault=70b2e1&bgColorHover=f8f8f8&bgTextureHover=02_glass.png&bgImgOpacityHover=100&borderColorHover=bbbbbb&fcHover=599fcf&iconColorHover=3383bb&bgColorActive=999999&bgTextureActive=06_inset_hard.png&bgImgOpacityActive=75&borderColorActive=999999&fcActive=ffffff&iconColorActive=454545&bgColorHighlight=eeeeee&bgTextureHighlight=01_flat.png&bgImgOpacityHighlight=55&borderColorHighlight=ffffff&fcHighlight=444444&iconColorHighlight=3383bb&bgColorError=c0402a&bgTextureError=01_flat.png&bgImgOpacityError=55&borderColorError=c0402a&fcError=ffffff&iconColorError=fbc856&bgColorOverlay=eeeeee&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=80&bgColorShadow=aaaaaa&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=60&thicknessShadow=4px&offsetTopShadow=-4px&offsetLeftShadow=-4px&cornerRadiusShadow=0pxdow=0px
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/* Component containers
|
|
||||||
----------------------------------*/
|
|
||||||
.ui-widget { font-family: Trebuchet MS, Helvetica, Arial, sans-serif; font-size: 1.1em; }
|
|
||||||
.ui-widget .ui-widget { font-size: 1em; }
|
|
||||||
.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Trebuchet MS, Helvetica, Arial, sans-serif; font-size: 1em; }
|
|
||||||
.ui-widget-content { border: 1px solid #aaaaaa; background: #f2f2f2; color: #333333; }
|
|
||||||
.ui-widget-content a { /*color: #333333;*/ }
|
|
||||||
.ui-widget-header { border: 1px solid #bbbbbb; background: #dddddd url(../images/ui-bg_glass_35_dddddd_1x400.png) 50% 50% repeat-x; color: #444444; font-weight: bold; }
|
|
||||||
.ui-widget-header a { color: #444444; }
|
|
||||||
|
|
||||||
/* Interaction states
|
|
||||||
----------------------------------*/
|
|
||||||
.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #cccccc; background: #eeeeee url(../images/ui-bg_glass_60_eeeeee_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #3383bb; }
|
|
||||||
.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #3383bb; text-decoration: none; }
|
|
||||||
.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #bbbbbb; background: #f8f8f8 url(../images/ui-bg_glass_100_f8f8f8_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #599fcf; }
|
|
||||||
.ui-state-hover a, .ui-state-hover a:hover { color: #599fcf; text-decoration: none; }
|
|
||||||
.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #999999; background: #ccc; font-weight: bold; color: #ffffff; }
|
|
||||||
.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #ffffff; text-decoration: none; }
|
|
||||||
.ui-widget :active { outline: none; }
|
|
||||||
|
|
||||||
/* Interaction Cues
|
|
||||||
----------------------------------*/
|
|
||||||
.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #ffffff; background: #eeeeee url(../images/ui-bg_flat_55_eeeeee_40x100.png) 50% 50% repeat-x; color: #444444; }
|
|
||||||
.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #444444; }
|
|
||||||
.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #c0402a; background: #c0402a url(../images/ui-bg_flat_55_c0402a_40x100.png) 50% 50% repeat-x; color: #ffffff; }
|
|
||||||
.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #ffffff; }
|
|
||||||
.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #ffffff; }
|
|
||||||
.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
|
|
||||||
.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
|
|
||||||
.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
|
|
||||||
|
|
||||||
/* Icons
|
|
||||||
----------------------------------*/
|
|
||||||
|
|
||||||
/* states and images */
|
|
||||||
.ui-icon { width: 16px; height: 16px; background-image: url(../images/icon_sprite_black.png); }
|
|
||||||
.ui-widget-content .ui-icon {background-image: url(../images/icon_sprite_black.png); }
|
|
||||||
.ui-widget-header .ui-icon {background-image: url(../images/icon_sprite_black.png); }
|
|
||||||
.ui-button.ui-state-hover .ui-icon { background-image: url(../images/icon_sprite_white.png); }
|
|
||||||
.ui-state-default .ui-icon { background-image: url(../images/ui-icons_70b2e1_256x240.png); }
|
|
||||||
.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(../images/ui-icons_3383bb_256x240.png); }
|
|
||||||
.ui-state-active .ui-icon {background-image: url(../images/ui-icons_454545_256x240.png); }
|
|
||||||
.ui-state-highlight .ui-icon {background-image: url(../images/ui-icons_3383bb_256x240.png); }
|
|
||||||
.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(../images/ui-icons_fbc856_256x240.png); }
|
|
||||||
|
|
||||||
/* positioning */
|
|
||||||
.ui-icon-carat-1-n { background-position: 0 0; }
|
|
||||||
.ui-icon-carat-1-ne { background-position: -16px 0; }
|
|
||||||
.ui-icon-carat-1-e { background-position: -32px 0; }
|
|
||||||
.ui-icon-carat-1-se { background-position: -48px 0; }
|
|
||||||
.ui-icon-carat-1-s { background-position: -64px 0; }
|
|
||||||
.ui-icon-carat-1-sw { background-position: -80px 0; }
|
|
||||||
.ui-icon-carat-1-w { background-position: -96px 0; }
|
|
||||||
.ui-icon-carat-1-nw { background-position: -112px 0; }
|
|
||||||
.ui-icon-carat-2-n-s { background-position: -128px 0; }
|
|
||||||
.ui-icon-carat-2-e-w { background-position: -144px 0; }
|
|
||||||
.ui-icon-triangle-1-n { background-position: 0 -16px; }
|
|
||||||
.ui-icon-triangle-1-ne { background-position: -16px -16px; }
|
|
||||||
.ui-icon-triangle-1-e { background-position: -32px -16px; }
|
|
||||||
.ui-icon-triangle-1-se { background-position: -48px -16px; }
|
|
||||||
.ui-icon-triangle-1-s { background-position: -64px -16px; }
|
|
||||||
.ui-icon-triangle-1-sw { background-position: -80px -16px; }
|
|
||||||
.ui-icon-triangle-1-w { background-position: -96px -16px; }
|
|
||||||
.ui-icon-triangle-1-nw { background-position: -112px -16px; }
|
|
||||||
.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
|
|
||||||
.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
|
|
||||||
.ui-icon-arrow-1-n { background-position: 0 -32px; }
|
|
||||||
.ui-icon-arrow-1-ne { background-position: -16px -32px; }
|
|
||||||
.ui-icon-arrow-1-e { background-position: -32px -32px; }
|
|
||||||
.ui-icon-arrow-1-se { background-position: -48px -32px; }
|
|
||||||
.ui-icon-arrow-1-s { background-position: -64px -32px; }
|
|
||||||
.ui-icon-arrow-1-sw { background-position: -80px -32px; }
|
|
||||||
.ui-icon-arrow-1-w { background-position: -96px -32px; }
|
|
||||||
.ui-icon-arrow-1-nw { background-position: -112px -32px; }
|
|
||||||
.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
|
|
||||||
.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
|
|
||||||
.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
|
|
||||||
.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
|
|
||||||
.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
|
|
||||||
.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
|
|
||||||
.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
|
|
||||||
.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
|
|
||||||
.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
|
|
||||||
.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
|
|
||||||
.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
|
|
||||||
.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
|
|
||||||
.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
|
|
||||||
.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
|
|
||||||
.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
|
|
||||||
.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
|
|
||||||
.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
|
|
||||||
.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
|
|
||||||
.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
|
|
||||||
.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
|
|
||||||
.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
|
|
||||||
.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
|
|
||||||
.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
|
|
||||||
.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
|
|
||||||
.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
|
|
||||||
.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
|
|
||||||
.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
|
|
||||||
.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
|
|
||||||
.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
|
|
||||||
.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
|
|
||||||
.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
|
|
||||||
.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
|
|
||||||
.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
|
|
||||||
.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
|
|
||||||
.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
|
|
||||||
.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
|
|
||||||
.ui-icon-arrow-4 { background-position: 0 -80px; }
|
|
||||||
.ui-icon-arrow-4-diag { background-position: -16px -80px; }
|
|
||||||
.ui-icon-extlink { background-position: -32px -80px; }
|
|
||||||
.ui-icon-newwin { background-position: -48px -80px; }
|
|
||||||
.ui-icon-refresh { background-position: -64px -80px; }
|
|
||||||
.ui-icon-shuffle { background-position: -80px -80px; }
|
|
||||||
.ui-icon-transfer-e-w { background-position: -96px -80px; }
|
|
||||||
.ui-icon-transferthick-e-w { background-position: -112px -80px; }
|
|
||||||
.ui-icon-folder-collapsed { background-position: 0 -96px; }
|
|
||||||
.ui-icon-folder-open { background-position: -16px -96px; }
|
|
||||||
.ui-icon-document { background-position: -32px -96px; }
|
|
||||||
.ui-icon-document-b { background-position: -48px -96px; }
|
|
||||||
.ui-icon-note { background-position: -64px -96px; }
|
|
||||||
.ui-icon-mail-closed { background-position: -80px -96px; }
|
|
||||||
.ui-icon-mail-open { background-position: -96px -96px; }
|
|
||||||
.ui-icon-suitcase { background-position: -112px -96px; }
|
|
||||||
.ui-icon-comment { background-position: -128px -96px; }
|
|
||||||
.ui-icon-person { background-position: -144px -96px; }
|
|
||||||
.ui-icon-print { background-position: -160px -96px; }
|
|
||||||
.ui-icon-trash { background-position: -176px -96px; }
|
|
||||||
.ui-icon-locked { background-position: -192px -96px; }
|
|
||||||
.ui-icon-unlocked { background-position: -208px -96px; }
|
|
||||||
.ui-icon-bookmark { background-position: -224px -96px; }
|
|
||||||
.ui-icon-tag { background-position: -240px -96px; }
|
|
||||||
.ui-icon-home { background-position: 0 -112px; }
|
|
||||||
.ui-icon-flag { background-position: -16px -112px; }
|
|
||||||
.ui-icon-calendar { background-position: -32px -112px; }
|
|
||||||
.ui-icon-cart { background-position: -48px -112px; }
|
|
||||||
.ui-icon-pencil { background-position: -64px -112px; }
|
|
||||||
.ui-icon-clock { background-position: -80px -112px; }
|
|
||||||
.ui-icon-disk { background-position: -96px -112px; }
|
|
||||||
.ui-icon-calculator { background-position: -112px -112px; }
|
|
||||||
.ui-icon-zoomin { background-position: -128px -112px; }
|
|
||||||
.ui-icon-zoomout { background-position: -144px -112px; }
|
|
||||||
.ui-icon-search { background-position: -160px -112px; }
|
|
||||||
.ui-icon-wrench { background-position: -176px -112px; }
|
|
||||||
.ui-icon-gear { background-position: -192px -112px; }
|
|
||||||
.ui-icon-heart { background-position: -208px -112px; }
|
|
||||||
.ui-icon-star { background-position: -224px -112px; }
|
|
||||||
.ui-icon-link { background-position: -240px -112px; }
|
|
||||||
.ui-icon-cancel { background-position: 0 -128px; }
|
|
||||||
.ui-icon-plus { background-position: -16px -128px; }
|
|
||||||
.ui-icon-plusthick { background-position: -32px -128px; }
|
|
||||||
.ui-icon-minus { background-position: -48px -128px; }
|
|
||||||
.ui-icon-minusthick { background-position: -64px -128px; }
|
|
||||||
.ui-icon-close { background-position: -80px -128px; }
|
|
||||||
.ui-icon-closethick { background-position: -96px -128px; }
|
|
||||||
.ui-icon-key { background-position: -112px -128px; }
|
|
||||||
.ui-icon-lightbulb { background-position: -128px -128px; }
|
|
||||||
.ui-icon-scissors { background-position: -144px -128px; }
|
|
||||||
.ui-icon-clipboard { background-position: -160px -128px; }
|
|
||||||
.ui-icon-copy { background-position: -176px -128px; }
|
|
||||||
.ui-icon-contact { background-position: -192px -128px; }
|
|
||||||
.ui-icon-image { background-position: -208px -128px; }
|
|
||||||
.ui-icon-video { background-position: -224px -128px; }
|
|
||||||
.ui-icon-script { background-position: -240px -128px; }
|
|
||||||
.ui-icon-alert { background-position: 0 -144px; }
|
|
||||||
.ui-icon-info { background-position: -16px -144px; }
|
|
||||||
.ui-icon-notice { background-position: -32px -144px; }
|
|
||||||
.ui-icon-help { background-position: -48px -144px; }
|
|
||||||
.ui-icon-check { background-position: -64px -144px; }
|
|
||||||
.ui-icon-bullet { background-position: -80px -144px; }
|
|
||||||
.ui-icon-radio-off { background-position: -96px -144px; }
|
|
||||||
.ui-icon-radio-on { background-position: -112px -144px; }
|
|
||||||
.ui-icon-pin-w { background-position: -128px -144px; }
|
|
||||||
.ui-icon-pin-s { background-position: -144px -144px; }
|
|
||||||
.ui-icon-play { background-position: 0 -160px; }
|
|
||||||
.ui-icon-pause { background-position: -16px -160px; }
|
|
||||||
.ui-icon-seek-next { background-position: -32px -160px; }
|
|
||||||
.ui-icon-seek-prev { background-position: -48px -160px; }
|
|
||||||
.ui-icon-seek-end { background-position: -64px -160px; }
|
|
||||||
.ui-icon-seek-start { background-position: -80px -160px; }
|
|
||||||
/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
|
|
||||||
.ui-icon-seek-first { background-position: -80px -160px; }
|
|
||||||
.ui-icon-stop { background-position: -96px -160px; }
|
|
||||||
.ui-icon-eject { background-position: -112px -160px; }
|
|
||||||
.ui-icon-volume-off { background-position: -128px -160px; }
|
|
||||||
.ui-icon-volume-on { background-position: -144px -160px; }
|
|
||||||
.ui-icon-power { background-position: 0 -176px; }
|
|
||||||
.ui-icon-signal-diag { background-position: -16px -176px; }
|
|
||||||
.ui-icon-signal { background-position: -32px -176px; }
|
|
||||||
.ui-icon-battery-0 { background-position: -48px -176px; }
|
|
||||||
.ui-icon-battery-1 { background-position: -64px -176px; }
|
|
||||||
.ui-icon-battery-2 { background-position: -80px -176px; }
|
|
||||||
.ui-icon-battery-3 { background-position: -96px -176px; }
|
|
||||||
.ui-icon-circle-plus { background-position: 0 -192px; }
|
|
||||||
.ui-icon-circle-minus { background-position: -16px -192px; }
|
|
||||||
.ui-icon-circle-close { background-position: -32px -192px; }
|
|
||||||
.ui-icon-circle-triangle-e { background-position: -48px -192px; }
|
|
||||||
.ui-icon-circle-triangle-s { background-position: -64px -192px; }
|
|
||||||
.ui-icon-circle-triangle-w { background-position: -80px -192px; }
|
|
||||||
.ui-icon-circle-triangle-n { background-position: -96px -192px; }
|
|
||||||
.ui-icon-circle-arrow-e { background-position: -112px -192px; }
|
|
||||||
.ui-icon-circle-arrow-s { background-position: -128px -192px; }
|
|
||||||
.ui-icon-circle-arrow-w { background-position: -144px -192px; }
|
|
||||||
.ui-icon-circle-arrow-n { background-position: -160px -192px; }
|
|
||||||
.ui-icon-circle-zoomin { background-position: -176px -192px; }
|
|
||||||
.ui-icon-circle-zoomout { background-position: -192px -192px; }
|
|
||||||
.ui-icon-circle-check { background-position: -208px -192px; }
|
|
||||||
.ui-icon-circlesmall-plus { background-position: 0 -208px; }
|
|
||||||
.ui-icon-circlesmall-minus { background-position: -16px -208px; }
|
|
||||||
.ui-icon-circlesmall-close { background-position: -32px -208px; }
|
|
||||||
.ui-icon-squaresmall-plus { background-position: -48px -208px; }
|
|
||||||
.ui-icon-squaresmall-minus { background-position: -64px -208px; }
|
|
||||||
.ui-icon-squaresmall-close { background-position: -80px -208px; }
|
|
||||||
.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
|
|
||||||
.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
|
|
||||||
.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
|
|
||||||
.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
|
|
||||||
.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
|
|
||||||
.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
|
|
||||||
|
|
||||||
|
|
||||||
/* Misc visuals
|
|
||||||
----------------------------------*/
|
|
||||||
|
|
||||||
/* Corner radius */
|
|
||||||
.ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; -khtml-border-top-left-radius: 6px; border-top-left-radius: 6px; }
|
|
||||||
.ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; -khtml-border-top-right-radius: 6px; border-top-right-radius: 6px; }
|
|
||||||
.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; -khtml-border-bottom-left-radius: 6px; border-bottom-left-radius: 6px; }
|
|
||||||
.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; -khtml-border-bottom-right-radius: 6px; border-bottom-right-radius: 6px; }
|
|
||||||
|
|
||||||
/* Overlays */
|
|
||||||
.ui-widget-overlay { background: #eeeeee url(../images/ui-bg_flat_0_eeeeee_40x100.png) 50% 50% repeat-x; opacity: .80;filter:Alpha(Opacity=80); }
|
|
||||||
.ui-widget-shadow { margin: -4px 0 0 -4px; padding: 4px; background: #aaaaaa url(../images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .60;filter:Alpha(Opacity=60); -moz-border-radius: 0pxdow=0px; -khtml-border-radius: 0pxdow=0px; -webkit-border-radius: 0pxdow=0px; border-radius: 0pxdow=0px; }/*!
|
|
||||||
* jQuery UI Resizable 1.8.19
|
|
||||||
*
|
|
||||||
* Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
|
|
||||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
|
||||||
* http://jquery.org/license
|
|
||||||
*
|
|
||||||
* http://docs.jquery.com/UI/Resizable#theming
|
|
||||||
*/
|
|
||||||
.ui-resizable { position: relative;}
|
|
||||||
.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block; }
|
|
||||||
.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
|
|
||||||
.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; }
|
|
||||||
.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; }
|
|
||||||
.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; }
|
|
||||||
.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; }
|
|
||||||
.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
|
|
||||||
.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
|
|
||||||
.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
|
|
||||||
.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/*!
|
|
||||||
* jQuery UI Selectable 1.8.19
|
|
||||||
*
|
|
||||||
* Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
|
|
||||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
|
||||||
* http://jquery.org/license
|
|
||||||
*
|
|
||||||
* http://docs.jquery.com/UI/Selectable#theming
|
|
||||||
*/
|
|
||||||
.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; }
|
|
||||||
/*!
|
|
||||||
* jQuery UI Accordion 1.8.19
|
|
||||||
*
|
|
||||||
* Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
|
|
||||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
|
||||||
* http://jquery.org/license
|
|
||||||
*
|
|
||||||
* http://docs.jquery.com/UI/Accordion#theming
|
|
||||||
*/
|
|
||||||
/* IE/Win - Fix animation bug - #4615 */
|
|
||||||
.ui-accordion { width: 100%; }
|
|
||||||
.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; }
|
|
||||||
.ui-accordion .ui-accordion-li-fix { display: inline; }
|
|
||||||
.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; }
|
|
||||||
.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; }
|
|
||||||
.ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; }
|
|
||||||
.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; }
|
|
||||||
.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; }
|
|
||||||
.ui-accordion .ui-accordion-content-active { display: block; }
|
|
||||||
/*!
|
|
||||||
* jQuery UI Autocomplete 1.8.19
|
|
||||||
*
|
|
||||||
* Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
|
|
||||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
|
||||||
* http://jquery.org/license
|
|
||||||
*
|
|
||||||
* http://docs.jquery.com/UI/Autocomplete#theming
|
|
||||||
*/
|
|
||||||
.ui-autocomplete { position: absolute; cursor: default; }
|
|
||||||
|
|
||||||
/* workarounds */
|
|
||||||
* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */
|
|
||||||
|
|
||||||
/*
|
|
||||||
* jQuery UI Menu @VERSION
|
|
||||||
*
|
|
||||||
* Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
|
|
||||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
|
||||||
* http://jquery.org/license
|
|
||||||
*
|
|
||||||
* http://docs.jquery.com/UI/Menu#theming
|
|
||||||
*/
|
|
||||||
.ui-menu {
|
|
||||||
list-style:none;
|
|
||||||
padding: 2px;
|
|
||||||
margin: 0;
|
|
||||||
display:block;
|
|
||||||
float: left;
|
|
||||||
}
|
|
||||||
.ui-menu .ui-menu {
|
|
||||||
margin-top: -3px;
|
|
||||||
}
|
|
||||||
.ui-menu .ui-menu-item {
|
|
||||||
margin:0;
|
|
||||||
padding: 0;
|
|
||||||
zoom: 1;
|
|
||||||
float: left;
|
|
||||||
clear: left;
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
.ui-menu .ui-menu-item a {
|
|
||||||
text-decoration:none;
|
|
||||||
display:block;
|
|
||||||
padding:.2em .4em;
|
|
||||||
line-height:1.5;
|
|
||||||
zoom:1;
|
|
||||||
}
|
|
||||||
.ui-menu .ui-menu-item a.ui-state-hover,
|
|
||||||
.ui-menu .ui-menu-item a.ui-state-active {
|
|
||||||
font-weight: normal;
|
|
||||||
margin: -1px;
|
|
||||||
}
|
|
||||||
/*!
|
|
||||||
* jQuery UI Button 1.8.19
|
|
||||||
*
|
|
||||||
* Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
|
|
||||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
|
||||||
* http://jquery.org/license
|
|
||||||
*
|
|
||||||
* http://docs.jquery.com/UI/Button#theming
|
|
||||||
*/
|
|
||||||
.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */
|
|
||||||
.ui-button:hover {
|
|
||||||
color:#3383BB;
|
|
||||||
}
|
|
||||||
.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */
|
|
||||||
button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */
|
|
||||||
.ui-button-icons-only { width: 3.4em; }
|
|
||||||
button.ui-button-icons-only { width: 3.7em; }
|
|
||||||
|
|
||||||
/*button text element */
|
|
||||||
.ui-button .ui-button-text { display: block; line-height: 1.4; }
|
|
||||||
.ui-button-text-only .ui-button-text { padding: .4em 1em; }
|
|
||||||
.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; }
|
|
||||||
.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: 0.2em 0.5em 0.2em 1.8em }
|
|
||||||
.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: 0.2em 1.8em 0.2em 0.5em }
|
|
||||||
.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; }
|
|
||||||
/* no icon support for input elements, provide padding by default */
|
|
||||||
input.ui-button { padding: .4em 1em; }
|
|
||||||
|
|
||||||
/*button icon element(s) */
|
|
||||||
.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; }
|
|
||||||
.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; }
|
|
||||||
.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .3em; }
|
|
||||||
.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
|
|
||||||
.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; }
|
|
||||||
|
|
||||||
/*button sets*/
|
|
||||||
.ui-buttonset { margin-right: 7px; }
|
|
||||||
.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; }
|
|
||||||
|
|
||||||
/* workarounds */
|
|
||||||
button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */
|
|
||||||
/*!
|
|
||||||
* jQuery UI Dialog 1.8.19
|
|
||||||
*
|
|
||||||
* Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
|
|
||||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
|
||||||
* http://jquery.org/license
|
|
||||||
*
|
|
||||||
* http://docs.jquery.com/UI/Dialog#theming
|
|
||||||
*/
|
|
||||||
.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; }
|
|
||||||
.ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative; }
|
|
||||||
.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; }
|
|
||||||
.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; }
|
|
||||||
.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; }
|
|
||||||
.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; }
|
|
||||||
.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; }
|
|
||||||
.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; }
|
|
||||||
.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; }
|
|
||||||
.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; }
|
|
||||||
.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; }
|
|
||||||
.ui-draggable .ui-dialog-titlebar { cursor: move; }
|
|
||||||
/*!
|
|
||||||
* jQuery UI Tabs 1.8.19
|
|
||||||
*
|
|
||||||
* Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
|
|
||||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
|
||||||
* http://jquery.org/license
|
|
||||||
*
|
|
||||||
* http://docs.jquery.com/UI/Tabs#theming
|
|
||||||
*/
|
|
||||||
.ui-tabs { position: relative; padding: 0em; zoom: 1; background: transparent; border: none;} /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
|
|
||||||
.ui-tabs .ui-tabs-nav { margin: 0; padding: 0; background: none; border:none;}
|
|
||||||
.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap;background: #FFF; }
|
|
||||||
.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; font-weight: normal; }
|
|
||||||
.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; background-color: #f7f7f7; border-color: #CCC; }
|
|
||||||
.ui-tabs .ui-tabs-nav li.ui-tabs-selected a { color: #454545; }
|
|
||||||
.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; }
|
|
||||||
.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */
|
|
||||||
.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: #f7f7f7; border: 1px solid #CCC; }
|
|
||||||
.ui-tabs .ui-tabs-hide { display: none !important; }
|
|
||||||
/*!
|
|
||||||
* jQuery UI Datepicker 1.8.19
|
|
||||||
*
|
|
||||||
* Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
|
|
||||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
|
||||||
* http://jquery.org/license
|
|
||||||
*
|
|
||||||
* http://docs.jquery.com/UI/Datepicker#theming
|
|
||||||
*/
|
|
||||||
.ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; }
|
|
||||||
.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
|
|
||||||
.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
|
|
||||||
.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
|
|
||||||
.ui-datepicker .ui-datepicker-prev { left:2px; }
|
|
||||||
.ui-datepicker .ui-datepicker-next { right:2px; }
|
|
||||||
.ui-datepicker .ui-datepicker-prev-hover { left:1px; }
|
|
||||||
.ui-datepicker .ui-datepicker-next-hover { right:1px; }
|
|
||||||
.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; }
|
|
||||||
.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
|
|
||||||
.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; }
|
|
||||||
.ui-datepicker select.ui-datepicker-month-year {width: 100%;}
|
|
||||||
.ui-datepicker select.ui-datepicker-month,
|
|
||||||
.ui-datepicker select.ui-datepicker-year { width: 49%;}
|
|
||||||
.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
|
|
||||||
.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; }
|
|
||||||
.ui-datepicker td { border: 0; padding: 1px; }
|
|
||||||
.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
|
|
||||||
.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
|
|
||||||
.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
|
|
||||||
.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
|
|
||||||
|
|
||||||
/* with multiple calendars */
|
|
||||||
.ui-datepicker.ui-datepicker-multi { width:auto; }
|
|
||||||
.ui-datepicker-multi .ui-datepicker-group { float:left; }
|
|
||||||
.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
|
|
||||||
.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
|
|
||||||
.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
|
|
||||||
.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
|
|
||||||
.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
|
|
||||||
.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
|
|
||||||
.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
|
|
||||||
.ui-datepicker-row-break { clear:both; width:100%; font-size:0em; }
|
|
||||||
|
|
||||||
/* RTL support */
|
|
||||||
.ui-datepicker-rtl { direction: rtl; }
|
|
||||||
.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
|
|
||||||
.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
|
|
||||||
.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
|
|
||||||
.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
|
|
||||||
.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
|
|
||||||
.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
|
|
||||||
.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
|
|
||||||
.ui-datepicker-rtl .ui-datepicker-group { float:right; }
|
|
||||||
.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
|
|
||||||
.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
|
|
||||||
|
|
||||||
/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
|
|
||||||
.ui-datepicker-cover {
|
|
||||||
display: none; /*sorry for IE5*/
|
|
||||||
display/**/: block; /*sorry for IE5*/
|
|
||||||
position: absolute; /*must have*/
|
|
||||||
z-index: -1; /*must have*/
|
|
||||||
filter: mask(); /*must have*/
|
|
||||||
top: -4px; /*must have*/
|
|
||||||
left: -4px; /*must have*/
|
|
||||||
width: 200px; /*must have*/
|
|
||||||
height: 200px; /*must have*/
|
|
||||||
}/*!
|
|
||||||
* jQuery UI Progressbar 1.8.19
|
|
||||||
*
|
|
||||||
* Copyright 2012, AUTHORS.txt (http://jqueryui.com/about)
|
|
||||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
|
||||||
* http://jquery.org/license
|
|
||||||
*
|
|
||||||
* http://docs.jquery.com/UI/Progressbar#theming
|
|
||||||
*/
|
|
||||||
.ui-progressbar { height:2em; text-align: left; overflow: hidden; }
|
|
||||||
.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }
|
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
/* Variables *//* Mixins */
|
/* Variables */
|
||||||
|
/* Mixins */
|
||||||
html,
|
html,
|
||||||
body,
|
body,
|
||||||
div,
|
div,
|
||||||
@@ -158,7 +159,15 @@ img.albumArt {
|
|||||||
float: left;
|
float: left;
|
||||||
min-height: 100%;
|
min-height: 100%;
|
||||||
min-width: 100%;
|
min-width: 100%;
|
||||||
max-width: 300px;
|
max-width: 250px;
|
||||||
|
max-height: 300px;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
img.albumArt-nostretch {
|
||||||
|
float: left;
|
||||||
|
min-height: 64px;
|
||||||
|
min-width: 64px;
|
||||||
|
max-width: 250px;
|
||||||
max-height: 300px;
|
max-height: 300px;
|
||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
@@ -179,8 +188,8 @@ table th {
|
|||||||
background-image: linear-gradient(#fafafa, #eaeaea) !important;
|
background-image: linear-gradient(#fafafa, #eaeaea) !important;
|
||||||
background-image: -webkit-linear-gradient(#fafafa, #eaeaea) !important;
|
background-image: -webkit-linear-gradient(#fafafa, #eaeaea) !important;
|
||||||
background-image: -o-linear-gradient(#fafafa, #eaeaea) !important;
|
background-image: -o-linear-gradient(#fafafa, #eaeaea) !important;
|
||||||
filter: progid:dximagetransform.microsoft.gradient(startColorstr=#fafafa, endColorstr=#eaeaea) !important;
|
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#fafafa, endColorstr=#eaeaea) !important;
|
||||||
-ms-filter: progid:dximagetransform.microsoft.gradient(startColorstr=#fafafa, endColorstr=#eaeaea) !important;
|
-ms-filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#fafafa, endColorstr=#eaeaea) !important;
|
||||||
border-left: 1px solid #E0E0E0;
|
border-left: 1px solid #E0E0E0;
|
||||||
-moz-box-shadow: 1px 0 0 #fafafa;
|
-moz-box-shadow: 1px 0 0 #fafafa;
|
||||||
-webkit-box-shadow: 1px 0 0 #fafafa;
|
-webkit-box-shadow: 1px 0 0 #fafafa;
|
||||||
@@ -204,8 +213,8 @@ table th.sorting_asc {
|
|||||||
background-image: linear-gradient(#fafbfd, #dce6ef) !important;
|
background-image: linear-gradient(#fafbfd, #dce6ef) !important;
|
||||||
background-image: -webkit-linear-gradient(#fafbfd, #dce6ef) !important;
|
background-image: -webkit-linear-gradient(#fafbfd, #dce6ef) !important;
|
||||||
background-image: -o-linear-gradient(#fafbfd, #dce6ef) !important;
|
background-image: -o-linear-gradient(#fafbfd, #dce6ef) !important;
|
||||||
filter: progid:dximagetransform.microsoft.gradient(startColorstr=#fafafa, endColorstr=#eaeaea) !important;
|
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#fafbfd, endColorstr=#dce6ef) !important;
|
||||||
-ms-filter: progid:dximagetransform.microsoft.gradient(startColorstr=#fafafa, endColorstr=#eaeaea) !important;
|
-ms-filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#fafbfd, endColorstr=#dce6ef) !important;
|
||||||
color: #4183c4;
|
color: #4183c4;
|
||||||
}
|
}
|
||||||
table td {
|
table td {
|
||||||
@@ -220,6 +229,17 @@ textarea,
|
|||||||
button {
|
button {
|
||||||
font: 99%;
|
font: 99%;
|
||||||
}
|
}
|
||||||
|
select {
|
||||||
|
-moz-border-radius: 5px;
|
||||||
|
-webkit-border-radius: 5px;
|
||||||
|
border-radius: 5px;
|
||||||
|
background: #4F4F4F;
|
||||||
|
border: 0;
|
||||||
|
border-bottom: 1px solid rgba(0, 0, 0, 0.25);
|
||||||
|
color: #fff;
|
||||||
|
padding: 3px 10px;
|
||||||
|
text-shadow: 0 -1px 1px rgba(0, 0, 0, 0.25);
|
||||||
|
}
|
||||||
textarea {
|
textarea {
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
}
|
}
|
||||||
@@ -296,23 +316,6 @@ input[type=button] {
|
|||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
text-shadow: 0 -1px 1px rgba(0, 0, 0, 0.25);
|
text-shadow: 0 -1px 1px rgba(0, 0, 0, 0.25);
|
||||||
}
|
}
|
||||||
.configsubmit {
|
|
||||||
-moz-border-radius: 5px;
|
|
||||||
-webkit-border-radius: 5px;
|
|
||||||
border-radius: 5px;
|
|
||||||
background: #222222 url("../images/button.png") repeat-x;
|
|
||||||
border: 0;
|
|
||||||
border-bottom: 1px solid rgba(0, 0, 0, 0.25);
|
|
||||||
color: #fff;
|
|
||||||
cursor: pointer;
|
|
||||||
margin-left: 75%;
|
|
||||||
margin-top: 5px;
|
|
||||||
text-align: center;
|
|
||||||
width: 200px;
|
|
||||||
padding: 4px 10px;
|
|
||||||
text-decoration: none;
|
|
||||||
text-shadow: 0 -1px 1px rgba(0, 0, 0, 0.25);
|
|
||||||
}
|
|
||||||
form legend,
|
form legend,
|
||||||
form h2 {
|
form h2 {
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
@@ -333,7 +336,7 @@ form fieldset small.heading {
|
|||||||
margin-top: -15px;
|
margin-top: -15px;
|
||||||
}
|
}
|
||||||
form .row {
|
form .row {
|
||||||
font-family: Helvetica, Arial;
|
font-family: Helvetica, Arial, sans-serif;
|
||||||
margin-bottom: 10px;
|
margin-bottom: 10px;
|
||||||
}
|
}
|
||||||
form .row label {
|
form .row label {
|
||||||
@@ -342,7 +345,11 @@ form .row label {
|
|||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
line-height: normal;
|
line-height: normal;
|
||||||
padding-top: 7px;
|
padding-top: 7px;
|
||||||
width: 175px;
|
width: 170px;
|
||||||
|
}
|
||||||
|
form .row label.inline {
|
||||||
|
margin-right: 5px;
|
||||||
|
width: auto;
|
||||||
}
|
}
|
||||||
form .row input {
|
form .row input {
|
||||||
margin-right: 5px;
|
margin-right: 5px;
|
||||||
@@ -365,41 +372,37 @@ form .row input[type=password] {
|
|||||||
line-height: normal;
|
line-height: normal;
|
||||||
max-width: 230px;
|
max-width: 230px;
|
||||||
margin-right: 5px;
|
margin-right: 5px;
|
||||||
padding: 2px 5px;
|
padding: 3px 5px;
|
||||||
}
|
}
|
||||||
form .row small {
|
form .row small {
|
||||||
color: #999;
|
color: #999;
|
||||||
display: block;
|
display: block;
|
||||||
font-size: 9px;
|
font-size: 9px;
|
||||||
line-height: 12px;
|
line-height: 12px;
|
||||||
margin-left: 175px;
|
margin-left: 170px;
|
||||||
margin-top: 3px;
|
margin-top: 3px;
|
||||||
}
|
}
|
||||||
form .left label {
|
form .left label {
|
||||||
float: none;
|
float: none;
|
||||||
line-height: normal;
|
line-height: normal;
|
||||||
margin-bottom: 5px;
|
margin-bottom: 10px;
|
||||||
padding-top: 2px;
|
padding-top: 1px;
|
||||||
width: auto;
|
width: auto;
|
||||||
}
|
}
|
||||||
form .left input {
|
form .left input {
|
||||||
float: left;
|
float: left;
|
||||||
margin-bottom: 5px;
|
margin-bottom: 10px;
|
||||||
clear: left;
|
|
||||||
display: block;
|
|
||||||
}
|
}
|
||||||
form .radio label {
|
form .radio label {
|
||||||
float: none;
|
float: none;
|
||||||
line-height: normal;
|
line-height: normal;
|
||||||
margin-bottom: 5px;
|
margin-bottom: 10px;
|
||||||
padding-top: 0px;
|
padding-top: 1px;
|
||||||
width: auto;
|
width: auto;
|
||||||
}
|
}
|
||||||
form .radio input {
|
form .radio input {
|
||||||
float: left;
|
float: left;
|
||||||
margin-bottom: 5px;
|
margin-bottom: 10px;
|
||||||
clear: left;
|
|
||||||
display: block;
|
|
||||||
}
|
}
|
||||||
form .radio small {
|
form .radio small {
|
||||||
display: inline !important;
|
display: inline !important;
|
||||||
@@ -413,14 +416,20 @@ form .checkbox small {
|
|||||||
margin: 0 !important;
|
margin: 0 !important;
|
||||||
width: auto;
|
width: auto;
|
||||||
}
|
}
|
||||||
.override-float {
|
form .indent input {
|
||||||
float: none !important;
|
margin-left: 15px;
|
||||||
margin-bottom: 0px !important;
|
}
|
||||||
clear: none !important;
|
form .suboptions {
|
||||||
display: inline !important;
|
margin-left: 15px;
|
||||||
font-size: 10px;
|
}
|
||||||
line-height: 10px;
|
.option{
|
||||||
height: 10px;
|
font-size: 15px;
|
||||||
|
font-weight: 600;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
input.bigcheck[type="checkbox"] {
|
||||||
|
width: 16px;
|
||||||
|
height: 16px;
|
||||||
}
|
}
|
||||||
ul,
|
ul,
|
||||||
ol {
|
ol {
|
||||||
@@ -468,8 +477,8 @@ ul#nav li a:hover {
|
|||||||
background-image: linear-gradient(#f1f1f1, #e0e0e0) !important;
|
background-image: linear-gradient(#f1f1f1, #e0e0e0) !important;
|
||||||
background-image: -webkit-linear-gradient(#f1f1f1, #e0e0e0) !important;
|
background-image: -webkit-linear-gradient(#f1f1f1, #e0e0e0) !important;
|
||||||
background-image: -o-linear-gradient(#f1f1f1, #e0e0e0) !important;
|
background-image: -o-linear-gradient(#f1f1f1, #e0e0e0) !important;
|
||||||
filter: progid:dximagetransform.microsoft.gradient(startColorstr=#fafafa, endColorstr=#eaeaea) !important;
|
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#f1f1f1, endColorstr=#e0e0e0) !important;
|
||||||
-ms-filter: progid:dximagetransform.microsoft.gradient(startColorstr=#fafafa, endColorstr=#eaeaea) !important;
|
-ms-filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#f1f1f1, endColorstr=#e0e0e0) !important;
|
||||||
border: 1px solid #DDDDDD;
|
border: 1px solid #DDDDDD;
|
||||||
-moz-border-radius: 3px;
|
-moz-border-radius: 3px;
|
||||||
-webkit-border-radius: 3px;
|
-webkit-border-radius: 3px;
|
||||||
@@ -491,10 +500,10 @@ ul#nav li a.config {
|
|||||||
height: 28px;
|
height: 28px;
|
||||||
width: 10px;
|
width: 10px;
|
||||||
}
|
}
|
||||||
ul#nav li a.config img {
|
ul#nav li a.config i {
|
||||||
position: relative;
|
position: relative;
|
||||||
top: -7px;
|
top: 0px;
|
||||||
left: -7px;
|
left: -6px;
|
||||||
}
|
}
|
||||||
ul#nav li a.log {
|
ul#nav li a.log {
|
||||||
font-size: 13px;
|
font-size: 13px;
|
||||||
@@ -505,8 +514,8 @@ header {
|
|||||||
background-image: linear-gradient(#fafafa, #eaeaea) !important;
|
background-image: linear-gradient(#fafafa, #eaeaea) !important;
|
||||||
background-image: -webkit-linear-gradient(#fafafa, #eaeaea) !important;
|
background-image: -webkit-linear-gradient(#fafafa, #eaeaea) !important;
|
||||||
background-image: -o-linear-gradient(#fafafa, #eaeaea) !important;
|
background-image: -o-linear-gradient(#fafafa, #eaeaea) !important;
|
||||||
filter: progid:dximagetransform.microsoft.gradient(startColorstr=#fafafa, endColorstr=#eaeaea) !important;
|
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#fafafa, endColorstr=#eaeaea) !important;
|
||||||
-ms-filter: progid:dximagetransform.microsoft.gradient(startColorstr=#fafafa, endColorstr=#eaeaea) !important;
|
-ms-filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#fafafa, endColorstr=#eaeaea) !important;
|
||||||
border-bottom: 1px solid #CACACA;
|
border-bottom: 1px solid #CACACA;
|
||||||
-moz-box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
|
-moz-box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
|
||||||
-webkit-box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
|
-webkit-box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
|
||||||
@@ -521,7 +530,7 @@ header .wrapper {
|
|||||||
margin: 0 auto;
|
margin: 0 auto;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
position: relative;
|
position: relative;
|
||||||
width: 960px;
|
width: 990px;
|
||||||
}
|
}
|
||||||
header #logo {
|
header #logo {
|
||||||
float: left;
|
float: left;
|
||||||
@@ -532,7 +541,7 @@ header #logo {
|
|||||||
}
|
}
|
||||||
footer {
|
footer {
|
||||||
display: table;
|
display: table;
|
||||||
margin: 40px auto 50px auto;
|
margin: 60px auto 50px auto;
|
||||||
width: 960px;
|
width: 960px;
|
||||||
padding-top: 10px;
|
padding-top: 10px;
|
||||||
border-top: 1px solid #EEE;
|
border-top: 1px solid #EEE;
|
||||||
@@ -551,8 +560,8 @@ footer {
|
|||||||
background-image: linear-gradient(#fcf5c2, #fff6a9) !important;
|
background-image: linear-gradient(#fcf5c2, #fff6a9) !important;
|
||||||
background-image: -webkit-linear-gradient(#fcf5c2, #fff6a9) !important;
|
background-image: -webkit-linear-gradient(#fcf5c2, #fff6a9) !important;
|
||||||
background-image: -o-linear-gradient(#fcf5c2, #fff6a9) !important;
|
background-image: -o-linear-gradient(#fcf5c2, #fff6a9) !important;
|
||||||
filter: progid:dximagetransform.microsoft.gradient(startColorstr=#fafafa, endColorstr=#eaeaea) !important;
|
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#fcf5c2, endColorstr=#fff6a9) !important;
|
||||||
-ms-filter: progid:dximagetransform.microsoft.gradient(startColorstr=#fafafa, endColorstr=#eaeaea) !important;
|
-ms-filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#fcf5c2, endColorstr=#fff6a9) !important;
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
padding: 5px 10px;
|
padding: 5px 10px;
|
||||||
margin-top: 10px;
|
margin-top: 10px;
|
||||||
@@ -563,37 +572,14 @@ footer {
|
|||||||
position: relative;
|
position: relative;
|
||||||
top: 4px;
|
top: 4px;
|
||||||
}
|
}
|
||||||
.configmessage {
|
.ajaxMsg {
|
||||||
-moz-border-radius: 10px;
|
|
||||||
-webkit-border-radius: 10px;
|
|
||||||
border-radius: 10px;
|
|
||||||
background-image: -moz-linear-gradient(#fcf5c2, #fff6a9) !important;
|
|
||||||
background-image: linear-gradient(#fcf5c2, #fff6a9) !important;
|
|
||||||
background-image: -webkit-linear-gradient(#fcf5c2, #fff6a9) !important;
|
|
||||||
background-image: -o-linear-gradient(#fcf5c2, #fff6a9) !important;
|
|
||||||
filter: progid:dximagetransform.microsoft.gradient(startColorstr=#fafafa, endColorstr=#eaeaea) !important;
|
|
||||||
-ms-filter: progid:dximagetransform.microsoft.gradient(startColorstr=#fafafa, endColorstr=#eaeaea) !important;
|
|
||||||
text-align: center;
|
|
||||||
padding: 3px 5px;
|
|
||||||
width: 400px;
|
|
||||||
margin-left: auto;
|
|
||||||
margin-right: auto;
|
|
||||||
margin-bottom: 5px;
|
|
||||||
}
|
|
||||||
.configmessage .ui-icon {
|
|
||||||
float: left;
|
|
||||||
margin-right: 5px;
|
|
||||||
position: relative;
|
|
||||||
top: 4px;
|
|
||||||
}
|
|
||||||
#ajaxMsg {
|
|
||||||
border: 1px solid #cccccc;
|
border: 1px solid #cccccc;
|
||||||
background-image: -moz-linear-gradient(#ffffff, #eeeeee) !important;
|
background-image: -moz-linear-gradient(#ffffff, #eeeeee) !important;
|
||||||
background-image: linear-gradient(#ffffff, #eeeeee) !important;
|
background-image: linear-gradient(#ffffff, #eeeeee) !important;
|
||||||
background-image: -webkit-linear-gradient(#ffffff, #eeeeee) !important;
|
background-image: -webkit-linear-gradient(#ffffff, #eeeeee) !important;
|
||||||
background-image: -o-linear-gradient(#ffffff, #eeeeee) !important;
|
background-image: -o-linear-gradient(#ffffff, #eeeeee) !important;
|
||||||
filter: progid:dximagetransform.microsoft.gradient(startColorstr=#fafafa, endColorstr=#eaeaea) !important;
|
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff, endColorstr=#eeeeee) !important;
|
||||||
-ms-filter: progid:dximagetransform.microsoft.gradient(startColorstr=#fafafa, endColorstr=#eaeaea) !important;
|
-ms-filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff, endColorstr=#eeeeee) !important;
|
||||||
-moz-border-radius: 7px;
|
-moz-border-radius: 7px;
|
||||||
-webkit-border-radius: 7px;
|
-webkit-border-radius: 7px;
|
||||||
border-radius: 7px;
|
border-radius: 7px;
|
||||||
@@ -617,36 +603,36 @@ footer {
|
|||||||
-o-opacity: 0.8 !important;
|
-o-opacity: 0.8 !important;
|
||||||
opacity: 0.8 !important;
|
opacity: 0.8 !important;
|
||||||
}
|
}
|
||||||
#ajaxMsg .msg {
|
.ajaxMsg .msg {
|
||||||
font-family: "Trebuchet MS", Helvetica, Arial, sans-serif;
|
font-family: "Trebuchet MS", Helvetica, Arial, sans-serif;
|
||||||
line-height: normal;
|
line-height: normal;
|
||||||
padding-left: 20px;
|
padding-left: 20px;
|
||||||
}
|
}
|
||||||
#ajaxMsg .loader {
|
.ajaxMsg .loader {
|
||||||
position: relative;
|
position: relative;
|
||||||
top: 2px;
|
top: 2px;
|
||||||
}
|
}
|
||||||
#ajaxMsg.success {
|
.ajaxMsg .success {
|
||||||
background-image: -moz-linear-gradient(#d3ffd7, #c2edc6) !important;
|
background-image: -moz-linear-gradient(#d3ffd7, #c2edc6) !important;
|
||||||
background-image: linear-gradient(#d3ffd7, #c2edc6) !important;
|
background-image: linear-gradient(#d3ffd7, #c2edc6) !important;
|
||||||
background-image: -webkit-linear-gradient(#d3ffd7, #c2edc6) !important;
|
background-image: -webkit-linear-gradient(#d3ffd7, #c2edc6) !important;
|
||||||
background-image: -o-linear-gradient(#d3ffd7, #c2edc6) !important;
|
background-image: -o-linear-gradient(#d3ffd7, #c2edc6) !important;
|
||||||
filter: progid:dximagetransform.microsoft.gradient(startColorstr=#fafafa, endColorstr=#eaeaea) !important;
|
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#d3ffd7, endColorstr=#c2edc6) !important;
|
||||||
-ms-filter: progid:dximagetransform.microsoft.gradient(startColorstr=#fafafa, endColorstr=#eaeaea) !important;
|
-ms-filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#d3ffd7, endColorstr=#c2edc6) !important;
|
||||||
padding: 15px 10px;
|
padding: 15px 10px;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
}
|
}
|
||||||
#ajaxMsg.error {
|
.ajaxMsg .error {
|
||||||
background-image: -moz-linear-gradient(#ffd3d3, #edc4c4) !important;
|
background-image: -moz-linear-gradient(#ffd3d3, #edc4c4) !important;
|
||||||
background-image: linear-gradient(#ffd3d3, #edc4c4) !important;
|
background-image: linear-gradient(#ffd3d3, #edc4c4) !important;
|
||||||
background-image: -webkit-linear-gradient(#ffd3d3, #edc4c4) !important;
|
background-image: -webkit-linear-gradient(#ffd3d3, #edc4c4) !important;
|
||||||
background-image: -o-linear-gradient(#ffd3d3, #edc4c4) !important;
|
background-image: -o-linear-gradient(#ffd3d3, #edc4c4) !important;
|
||||||
filter: progid:dximagetransform.microsoft.gradient(startColorstr=#fafafa, endColorstr=#eaeaea) !important;
|
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffd3d3, endColorstr=#edc4c4) !important;
|
||||||
-ms-filter: progid:dximagetransform.microsoft.gradient(startColorstr=#fafafa, endColorstr=#eaeaea) !important;
|
-ms-filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffd3d3, endColorstr=#edc4c4) !important;
|
||||||
padding: 15px 10px;
|
padding: 15px 10px;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
}
|
}
|
||||||
#ajaxMsg .ui-icon {
|
.ajaxMsg .ui-icon {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
margin-left: -20px;
|
margin-left: -20px;
|
||||||
top: 2px;
|
top: 2px;
|
||||||
@@ -659,8 +645,8 @@ footer {
|
|||||||
background-image: linear-gradient(#ffffff, #eeeeee) !important;
|
background-image: linear-gradient(#ffffff, #eeeeee) !important;
|
||||||
background-image: -webkit-linear-gradient(#ffffff, #eeeeee) !important;
|
background-image: -webkit-linear-gradient(#ffffff, #eeeeee) !important;
|
||||||
background-image: -o-linear-gradient(#ffffff, #eeeeee) !important;
|
background-image: -o-linear-gradient(#ffffff, #eeeeee) !important;
|
||||||
filter: progid:dximagetransform.microsoft.gradient(startColorstr=#fafafa, endColorstr=#eaeaea) !important;
|
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff, endColorstr=#eeeeee) !important;
|
||||||
-ms-filter: progid:dximagetransform.microsoft.gradient(startColorstr=#fafafa, endColorstr=#eaeaea) !important;
|
-ms-filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffffff, endColorstr=#eeeeee) !important;
|
||||||
-moz-border-radius: 7px;
|
-moz-border-radius: 7px;
|
||||||
-webkit-border-radius: 7px;
|
-webkit-border-radius: 7px;
|
||||||
border-radius: 7px;
|
border-radius: 7px;
|
||||||
@@ -688,8 +674,8 @@ footer {
|
|||||||
background-image: linear-gradient(#fcf5c2, #fff6a9) !important;
|
background-image: linear-gradient(#fcf5c2, #fff6a9) !important;
|
||||||
background-image: -webkit-linear-gradient(#fcf5c2, #fff6a9) !important;
|
background-image: -webkit-linear-gradient(#fcf5c2, #fff6a9) !important;
|
||||||
background-image: -o-linear-gradient(#fcf5c2, #fff6a9) !important;
|
background-image: -o-linear-gradient(#fcf5c2, #fff6a9) !important;
|
||||||
filter: progid:dximagetransform.microsoft.gradient(startColorstr=#fafafa, endColorstr=#eaeaea) !important;
|
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#fcf5c2, endColorstr=#fff6a9) !important;
|
||||||
-ms-filter: progid:dximagetransform.microsoft.gradient(startColorstr=#fafafa, endColorstr=#eaeaea) !important;
|
-ms-filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#fcf5c2, endColorstr=#fff6a9) !important;
|
||||||
}
|
}
|
||||||
#updatebar .msg {
|
#updatebar .msg {
|
||||||
font-family: "Trebuchet MS", Helvetica, Arial, sans-serif;
|
font-family: "Trebuchet MS", Helvetica, Arial, sans-serif;
|
||||||
@@ -705,8 +691,8 @@ footer {
|
|||||||
background-image: linear-gradient(#d3ffd7, #c2edc6) !important;
|
background-image: linear-gradient(#d3ffd7, #c2edc6) !important;
|
||||||
background-image: -webkit-linear-gradient(#d3ffd7, #c2edc6) !important;
|
background-image: -webkit-linear-gradient(#d3ffd7, #c2edc6) !important;
|
||||||
background-image: -o-linear-gradient(#d3ffd7, #c2edc6) !important;
|
background-image: -o-linear-gradient(#d3ffd7, #c2edc6) !important;
|
||||||
filter: progid:dximagetransform.microsoft.gradient(startColorstr=#fafafa, endColorstr=#eaeaea) !important;
|
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#d3ffd7, endColorstr=#c2edc6) !important;
|
||||||
-ms-filter: progid:dximagetransform.microsoft.gradient(startColorstr=#fafafa, endColorstr=#eaeaea) !important;
|
-ms-filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#d3ffd7, endColorstr=#c2edc6) !important;
|
||||||
padding: 15px 10px;
|
padding: 15px 10px;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
}
|
}
|
||||||
@@ -715,8 +701,8 @@ footer {
|
|||||||
background-image: linear-gradient(#ffd3d3, #edc4c4) !important;
|
background-image: linear-gradient(#ffd3d3, #edc4c4) !important;
|
||||||
background-image: -webkit-linear-gradient(#ffd3d3, #edc4c4) !important;
|
background-image: -webkit-linear-gradient(#ffd3d3, #edc4c4) !important;
|
||||||
background-image: -o-linear-gradient(#ffd3d3, #edc4c4) !important;
|
background-image: -o-linear-gradient(#ffd3d3, #edc4c4) !important;
|
||||||
filter: progid:dximagetransform.microsoft.gradient(startColorstr=#fafafa, endColorstr=#eaeaea) !important;
|
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffd3d3, endColorstr=#edc4c4) !important;
|
||||||
-ms-filter: progid:dximagetransform.microsoft.gradient(startColorstr=#fafafa, endColorstr=#eaeaea) !important;
|
-ms-filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#ffd3d3, endColorstr=#edc4c4) !important;
|
||||||
padding: 15px 10px;
|
padding: 15px 10px;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
}
|
}
|
||||||
@@ -727,13 +713,6 @@ footer {
|
|||||||
position: relative;
|
position: relative;
|
||||||
margin-right: 3px;
|
margin-right: 3px;
|
||||||
}
|
}
|
||||||
#dialog {
|
|
||||||
padding: 40px;
|
|
||||||
}
|
|
||||||
#dialog input#submit {
|
|
||||||
margin-left: 50px;
|
|
||||||
margin-right: auto;
|
|
||||||
}
|
|
||||||
#subhead .back {
|
#subhead .back {
|
||||||
float: left;
|
float: left;
|
||||||
margin-top: -25px;
|
margin-top: -25px;
|
||||||
@@ -747,7 +726,7 @@ footer {
|
|||||||
}
|
}
|
||||||
#subhead #subhead_container #subhead_menu {
|
#subhead #subhead_container #subhead_menu {
|
||||||
float: right;
|
float: right;
|
||||||
margin-top: 5px;
|
margin-top: 0px;
|
||||||
position: relative;
|
position: relative;
|
||||||
z-index: 99;
|
z-index: 99;
|
||||||
}
|
}
|
||||||
@@ -756,8 +735,8 @@ footer {
|
|||||||
background-image: linear-gradient(#f4f4f4, #e7e7e7) !important;
|
background-image: linear-gradient(#f4f4f4, #e7e7e7) !important;
|
||||||
background-image: -webkit-linear-gradient(#f4f4f4, #e7e7e7) !important;
|
background-image: -webkit-linear-gradient(#f4f4f4, #e7e7e7) !important;
|
||||||
background-image: -o-linear-gradient(#f4f4f4, #e7e7e7) !important;
|
background-image: -o-linear-gradient(#f4f4f4, #e7e7e7) !important;
|
||||||
filter: progid:dximagetransform.microsoft.gradient(startColorstr=#fafafa, endColorstr=#eaeaea) !important;
|
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#f4f4f4, endColorstr=#e7e7e7) !important;
|
||||||
-ms-filter: progid:dximagetransform.microsoft.gradient(startColorstr=#fafafa, endColorstr=#eaeaea) !important;
|
-ms-filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#f4f4f4, endColorstr=#e7e7e7) !important;
|
||||||
font-family: "Helvetica Neue", Helvetica, Arial, Geneva, sans-serif;
|
font-family: "Helvetica Neue", Helvetica, Arial, Geneva, sans-serif;
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
@@ -767,11 +746,16 @@ footer {
|
|||||||
background-image: linear-gradient(#599bdc, #3072b3) !important;
|
background-image: linear-gradient(#599bdc, #3072b3) !important;
|
||||||
background-image: -webkit-linear-gradient(#599bdc, #3072b3) !important;
|
background-image: -webkit-linear-gradient(#599bdc, #3072b3) !important;
|
||||||
background-image: -o-linear-gradient(#599bdc, #3072b3) !important;
|
background-image: -o-linear-gradient(#599bdc, #3072b3) !important;
|
||||||
filter: progid:dximagetransform.microsoft.gradient(startColorstr=#fafafa, endColorstr=#eaeaea) !important;
|
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#599bdc, endColorstr=#3072b3) !important;
|
||||||
-ms-filter: progid:dximagetransform.microsoft.gradient(startColorstr=#fafafa, endColorstr=#eaeaea) !important;
|
-ms-filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#599bdc, endColorstr=#3072b3) !important;
|
||||||
color: #FFF;
|
color: #FFF;
|
||||||
border-color: #518CC6 #518CC6 #2A65A0;
|
border-color: #518CC6 #518CC6 #2A65A0;
|
||||||
}
|
}
|
||||||
|
#subhead #subhead_container #back_to_previous_link {
|
||||||
|
margin-top: 20px;
|
||||||
|
position: relative;
|
||||||
|
z-index: 99;
|
||||||
|
}
|
||||||
div#searchbar {
|
div#searchbar {
|
||||||
border-left: 1px solid #FAFAFA;
|
border-left: 1px solid #FAFAFA;
|
||||||
-moz-box-shadow: -1px 0 0 #e0e0e0;
|
-moz-box-shadow: -1px 0 0 #e0e0e0;
|
||||||
@@ -801,16 +785,14 @@ div#searchbar input[type=text] {
|
|||||||
line-height: normal;
|
line-height: normal;
|
||||||
margin-right: 5px;
|
margin-right: 5px;
|
||||||
padding: 4px 5px 4px 25px;
|
padding: 4px 5px 4px 25px;
|
||||||
width: 150px;
|
width: 185px;
|
||||||
}
|
}
|
||||||
div#searchbar .mini-icon {
|
div#searchbar .mini-icon {
|
||||||
height: 20px;
|
color: #999;
|
||||||
width: 20px;
|
|
||||||
background: url("../images/icon_search.gif") left top no-repeat;
|
|
||||||
position: absolute;
|
position: absolute;
|
||||||
display: block;
|
display: block;
|
||||||
margin-left: 6px;
|
margin-left: 9px;
|
||||||
margin-top: 6px;
|
margin-top: 7px;
|
||||||
}
|
}
|
||||||
.configtable legend {
|
.configtable legend {
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
@@ -830,7 +812,7 @@ div#searchbar .mini-icon {
|
|||||||
_height: 302px;
|
_height: 302px;
|
||||||
background-color: #FFF;
|
background-color: #FFF;
|
||||||
clear: both;
|
clear: both;
|
||||||
margin: 30px auto 0;
|
margin: 60px auto 0;
|
||||||
min-height: 100px;
|
min-height: 100px;
|
||||||
position: relative;
|
position: relative;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
@@ -880,6 +862,18 @@ div#artistheader #artistImg {
|
|||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
text-indent: -3000px;
|
text-indent: -3000px;
|
||||||
width: 200px;
|
width: 200px;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
div#artistheader #artistImg.on-tour:before {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: -2px;
|
||||||
|
width: 100px;
|
||||||
|
height: 100px;
|
||||||
|
z-index: 2;
|
||||||
|
background-image: url('../images/songkick_ribon.png');
|
||||||
|
background-repeat: no-repeat;
|
||||||
}
|
}
|
||||||
div#artistheader #artistBio {
|
div#artistheader #artistBio {
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
@@ -896,6 +890,22 @@ div#artistheader h2 a {
|
|||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
font-family: "Trebuchet MS", Helvetica, Arial, sans-serif;
|
font-family: "Trebuchet MS", Helvetica, Arial, sans-serif;
|
||||||
}
|
}
|
||||||
|
#artistCalendar {
|
||||||
|
list-style-type: none;
|
||||||
|
margin: 0px;
|
||||||
|
display: block;
|
||||||
|
background: #FEF2EB;
|
||||||
|
padding: 10px;
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
#artistCalendar .sk-location {
|
||||||
|
display: inline-block;
|
||||||
|
padding-left: 6px;
|
||||||
|
}
|
||||||
|
#artistCalendar .sk-logo {
|
||||||
|
width: 100px;
|
||||||
|
padding-top: 16px;
|
||||||
|
}
|
||||||
#artist_table {
|
#artist_table {
|
||||||
background-color: #FFF;
|
background-color: #FFF;
|
||||||
padding: 20px;
|
padding: 20px;
|
||||||
@@ -920,24 +930,16 @@ div#artistheader h2 a {
|
|||||||
#artist_table th#name {
|
#artist_table th#name {
|
||||||
min-width: 200px;
|
min-width: 200px;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
width:200px;
|
|
||||||
}
|
}
|
||||||
#artist_table th#album {
|
#artist_table th#album {
|
||||||
min-width: 300px;
|
min-width: 300px;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
}
|
}
|
||||||
#artist_table th#albumart,
|
|
||||||
#artist_table th#status{
|
|
||||||
width:50px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#artist_table th#status,
|
#artist_table th#status,
|
||||||
#artist_table th#albumart,
|
#artist_table th#albumart {
|
||||||
#artist_table th#lastupdated {
|
|
||||||
min-width: 50px;
|
min-width: 50px;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
}
|
}
|
||||||
|
|
||||||
#artist_table th#have {
|
#artist_table th#have {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
@@ -946,13 +948,11 @@ div#artistheader h2 a {
|
|||||||
text-align: left;
|
text-align: left;
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
}
|
}
|
||||||
#artist_table td#status,
|
#artist_table td#status {
|
||||||
#artist_table td#lastupdated {
|
|
||||||
min-width: 50px;
|
min-width: 50px;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
}
|
}
|
||||||
|
|
||||||
#artist_table td#album {
|
#artist_table td#album {
|
||||||
min-width: 300px;
|
min-width: 300px;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
@@ -1094,6 +1094,22 @@ div#artistheader h2 a {
|
|||||||
text-align: center;
|
text-align: center;
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
}
|
}
|
||||||
|
#downloads_table th#title {
|
||||||
|
text-align: center;
|
||||||
|
min-width: 500px;
|
||||||
|
}
|
||||||
|
#downloads_table th#size {
|
||||||
|
text-align: center;
|
||||||
|
min-width: 80px;
|
||||||
|
}
|
||||||
|
#downloads_table th#provider {
|
||||||
|
text-align: center;
|
||||||
|
min-width: 100px;
|
||||||
|
}
|
||||||
|
#downloads_table th#kind {
|
||||||
|
text-align: center;
|
||||||
|
min-width: 80px;
|
||||||
|
}
|
||||||
#history_table {
|
#history_table {
|
||||||
background-color: #FFF;
|
background-color: #FFF;
|
||||||
font-size: 13px;
|
font-size: 13px;
|
||||||
@@ -1137,13 +1153,34 @@ div#artistheader h2 a {
|
|||||||
padding: 2px 10px;
|
padding: 2px 10px;
|
||||||
}
|
}
|
||||||
#searchresults_table th#albumname {
|
#searchresults_table th#albumname {
|
||||||
min-width: 225px;
|
min-width: 250px;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
|
font-size: 14px;
|
||||||
}
|
}
|
||||||
#searchresults_table th#artistname {
|
#searchresults_table th#artistname {
|
||||||
min-width: 325px;
|
min-width: 325px;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
}
|
}
|
||||||
|
#searchresults_table th#artistnamesmall {
|
||||||
|
min-width: 125px;
|
||||||
|
text-align: left;
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
#searchresults_table th#reldate {
|
||||||
|
min-width: 80px;
|
||||||
|
text-align: center;
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
#searchresults_table th#format {
|
||||||
|
min-width: 50px;
|
||||||
|
text-align: left;
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
#searchresults_table th#tracks {
|
||||||
|
min-width: 50px;
|
||||||
|
text-align: left;
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
#searchresults_table #artistImg {
|
#searchresults_table #artistImg {
|
||||||
background: url("../images/loader_black.gif") no-repeat scroll center center #ffffff;
|
background: url("../images/loader_black.gif") no-repeat scroll center center #ffffff;
|
||||||
border: 3px solid #FFFFFF;
|
border: 3px solid #FFFFFF;
|
||||||
@@ -1155,15 +1192,40 @@ div#artistheader h2 a {
|
|||||||
width: 50px;
|
width: 50px;
|
||||||
}
|
}
|
||||||
#searchresults_table td#albumname {
|
#searchresults_table td#albumname {
|
||||||
min-width: 200px;
|
min-width: 250px;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
|
font-size: 14px;
|
||||||
}
|
}
|
||||||
#searchresults_table td#artistname {
|
#searchresults_table td#artistname {
|
||||||
min-width: 300px;
|
min-width: 300px;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
}
|
}
|
||||||
|
#searchresults_table td#artistnamesmall {
|
||||||
|
min-width: 100px;
|
||||||
|
text-align: left;
|
||||||
|
vertical-align: middle;
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
#searchresults_table td#reldate {
|
||||||
|
min-width: 80px;
|
||||||
|
text-align: center;
|
||||||
|
vertical-align: middle;
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
#searchresults_table td#format {
|
||||||
|
min-width: 50px;
|
||||||
|
text-align: left;
|
||||||
|
vertical-align: middle;
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
#searchresults_table td#tracks {
|
||||||
|
min-width: 50px;
|
||||||
|
text-align: left;
|
||||||
|
vertical-align: middle;
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
#searchresults_table td#add {
|
#searchresults_table td#add {
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
}
|
}
|
||||||
@@ -1185,8 +1247,8 @@ div#artistheader h2 a {
|
|||||||
background-image: linear-gradient(#a3e532, #90cc2a) !important;
|
background-image: linear-gradient(#a3e532, #90cc2a) !important;
|
||||||
background-image: -webkit-linear-gradient(#a3e532, #90cc2a) !important;
|
background-image: -webkit-linear-gradient(#a3e532, #90cc2a) !important;
|
||||||
background-image: -o-linear-gradient(#a3e532, #90cc2a) !important;
|
background-image: -o-linear-gradient(#a3e532, #90cc2a) !important;
|
||||||
filter: progid:dximagetransform.microsoft.gradient(startColorstr=#fafafa, endColorstr=#eaeaea) !important;
|
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#a3e532, endColorstr=#90cc2a) !important;
|
||||||
-ms-filter: progid:dximagetransform.microsoft.gradient(startColorstr=#fafafa, endColorstr=#eaeaea) !important;
|
-ms-filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#a3e532, endColorstr=#90cc2a) !important;
|
||||||
}
|
}
|
||||||
.progress-container {
|
.progress-container {
|
||||||
background: #FFF;
|
background: #FFF;
|
||||||
@@ -1197,13 +1259,13 @@ div#artistheader h2 a {
|
|||||||
padding: 1px;
|
padding: 1px;
|
||||||
width: 100px;
|
width: 100px;
|
||||||
}
|
}
|
||||||
.progress-container > div {
|
.progress-container > div {
|
||||||
background-image: -moz-linear-gradient(#a3e532, #90cc2a) !important;
|
background-image: -moz-linear-gradient(#a3e532, #90cc2a) !important;
|
||||||
background-image: linear-gradient(#a3e532, #90cc2a) !important;
|
background-image: linear-gradient(#a3e532, #90cc2a) !important;
|
||||||
background-image: -webkit-linear-gradient(#a3e532, #90cc2a) !important;
|
background-image: -webkit-linear-gradient(#a3e532, #90cc2a) !important;
|
||||||
background-image: -o-linear-gradient(#a3e532, #90cc2a) !important;
|
background-image: -o-linear-gradient(#a3e532, #90cc2a) !important;
|
||||||
filter: progid:dximagetransform.microsoft.gradient(startColorstr=#fafafa, endColorstr=#eaeaea) !important;
|
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#a3e532, endColorstr=#90cc2a) !important;
|
||||||
-ms-filter: progid:dximagetransform.microsoft.gradient(startColorstr=#fafafa, endColorstr=#eaeaea) !important;
|
-ms-filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#a3e532, endColorstr=#90cc2a) !important;
|
||||||
height: 14px;
|
height: 14px;
|
||||||
}
|
}
|
||||||
.havetracks {
|
.havetracks {
|
||||||
@@ -1226,6 +1288,13 @@ div#artistheader h2 a {
|
|||||||
float: left;
|
float: left;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
}
|
}
|
||||||
|
#info {
|
||||||
|
float: left;
|
||||||
|
text-align: left;
|
||||||
|
margin-left: 10px;
|
||||||
|
margin-top: -5px;
|
||||||
|
color: #cccccc;
|
||||||
|
}
|
||||||
#actions {
|
#actions {
|
||||||
float: right;
|
float: right;
|
||||||
text-align: right;
|
text-align: right;
|
||||||
@@ -1239,11 +1308,11 @@ div#artistheader h2 a {
|
|||||||
background-image: url("../images/ui-icons_70b2e1_256x240.png");
|
background-image: url("../images/ui-icons_70b2e1_256x240.png");
|
||||||
}
|
}
|
||||||
#toTop {
|
#toTop {
|
||||||
background: url("../images/toTop.gif") no-repeat scroll 10px center #f7f7f7;
|
background: #f7f7f7;
|
||||||
border-radius: 5px 0 0 0;
|
border-radius: 5px 0 0 0;
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
display: none;
|
display: none;
|
||||||
padding: 10px 10px 10px 40px;
|
padding: 10px 10px 10px 10px;
|
||||||
position: fixed;
|
position: fixed;
|
||||||
right: 0;
|
right: 0;
|
||||||
}
|
}
|
||||||
@@ -1255,6 +1324,7 @@ div#artistheader h2 a {
|
|||||||
position: relative;
|
position: relative;
|
||||||
top: 7px;
|
top: 7px;
|
||||||
}
|
}
|
||||||
|
#trashcan {margin-top:15px;}
|
||||||
.cloudtag {
|
.cloudtag {
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
}
|
}
|
||||||
@@ -1364,8 +1434,23 @@ div#artistheader h2 a {
|
|||||||
.clearfix:after {
|
.clearfix:after {
|
||||||
clear: both;
|
clear: both;
|
||||||
}
|
}
|
||||||
|
.override-float {
|
||||||
|
float: none !important;
|
||||||
|
margin-bottom: 0px !important;
|
||||||
|
clear: none !important;
|
||||||
|
display: inline !important;
|
||||||
|
font-size: 10px;
|
||||||
|
line-height: 10px;
|
||||||
|
height: 10px;
|
||||||
|
}
|
||||||
|
.nopad {
|
||||||
|
margin-bottom: 0px !important;
|
||||||
|
margin-top: 0px !important;
|
||||||
|
padding-top: 0px !important;
|
||||||
|
padding-bottom: 0px !important;
|
||||||
|
padding: 0px 0px !important;
|
||||||
|
}
|
||||||
#album_table th#albumname,
|
#album_table th#albumname,
|
||||||
#album_table th#artistname,
|
|
||||||
#upcoming_table th#artistname,
|
#upcoming_table th#artistname,
|
||||||
#wanted_table th#artistname {
|
#wanted_table th#artistname {
|
||||||
min-width: 150px;
|
min-width: 150px;
|
||||||
@@ -1388,9 +1473,9 @@ div#artistheader h2 a {
|
|||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
}
|
}
|
||||||
#album_table td#albumname,
|
#album_table td#albumname,
|
||||||
#album_table td#artistname,
|
|
||||||
#album_table td#reldate,
|
#album_table td#reldate,
|
||||||
#album_table td#type,
|
#album_table td#type,
|
||||||
|
#album_table td#score,
|
||||||
#track_table td#duration,
|
#track_table td#duration,
|
||||||
#upcoming_table td#select,
|
#upcoming_table td#select,
|
||||||
#upcoming_table td#status,
|
#upcoming_table td#status,
|
||||||
@@ -1401,6 +1486,7 @@ div#artistheader h2 a {
|
|||||||
}
|
}
|
||||||
#album_table td#status,
|
#album_table td#status,
|
||||||
#album_table td#bitrate,
|
#album_table td#bitrate,
|
||||||
|
#album_table td#score,
|
||||||
#album_table td#albumformat,
|
#album_table td#albumformat,
|
||||||
#album_table td#wantlossless {
|
#album_table td#wantlossless {
|
||||||
font-size: 13px;
|
font-size: 13px;
|
||||||
@@ -1419,6 +1505,11 @@ div#artistheader h3 span {
|
|||||||
min-width: 75px;
|
min-width: 75px;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
#searchresults_table th#scoresmall {
|
||||||
|
min-width: 50px;
|
||||||
|
text-align: center;
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
#track_table td#bitrate,
|
#track_table td#bitrate,
|
||||||
#track_table td#format {
|
#track_table td#format {
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
@@ -1495,6 +1586,3 @@ table tr td#status a {
|
|||||||
.ie7 legend {
|
.ie7 legend {
|
||||||
margin-left: -7px;
|
margin-left: -7px;
|
||||||
}
|
}
|
||||||
#preferred_bitrate_options {
|
|
||||||
margin-left: 20px;
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -124,7 +124,23 @@ table {
|
|||||||
|
|
||||||
|
|
||||||
// Forms
|
// Forms
|
||||||
select, input, textarea, button { font: 99%;}
|
select, input, textarea, button
|
||||||
|
{
|
||||||
|
font: 99%;
|
||||||
|
}
|
||||||
|
|
||||||
|
select
|
||||||
|
{
|
||||||
|
.rounded(5px);
|
||||||
|
background: #4F4F4F;
|
||||||
|
border: 0;
|
||||||
|
border-bottom: 1px solid rgba(0, 0, 0, 0.25);
|
||||||
|
color: #fff;
|
||||||
|
padding: 3px 10px;
|
||||||
|
text-shadow: 0 -1px 1px rgba(0, 0, 0, 0.25);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
textarea {overflow: auto;}
|
textarea {overflow: auto;}
|
||||||
input { .rounded(3px);}
|
input { .rounded(3px);}
|
||||||
input:invalid, textarea:invalid {
|
input:invalid, textarea:invalid {
|
||||||
@@ -190,7 +206,12 @@ form {
|
|||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
line-height: normal;
|
line-height: normal;
|
||||||
padding-top: 7px;
|
padding-top: 7px;
|
||||||
width: 175px;
|
width: 170px;
|
||||||
|
|
||||||
|
&.inline {
|
||||||
|
margin-right: 5px;
|
||||||
|
width: auto;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
input { margin-right: 5px; }
|
input { margin-right: 5px; }
|
||||||
input[type=text], input[type=password] {
|
input[type=text], input[type=password] {
|
||||||
@@ -211,7 +232,7 @@ form {
|
|||||||
display: block;
|
display: block;
|
||||||
font-size: 9px;
|
font-size: 9px;
|
||||||
line-height: 12px;
|
line-height: 12px;
|
||||||
margin-left: 175px;
|
margin-left: 170px;
|
||||||
margin-top: 3px;
|
margin-top: 3px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -303,10 +324,10 @@ ul#nav {
|
|||||||
&.config {
|
&.config {
|
||||||
height: 28px;
|
height: 28px;
|
||||||
width: 10px;
|
width: 10px;
|
||||||
img {
|
i {
|
||||||
position: relative;
|
position: relative;
|
||||||
top: -7px;
|
top: 0px;
|
||||||
left: -7px;
|
left: -6px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
&.log {
|
&.log {
|
||||||
@@ -472,13 +493,11 @@ div#searchbar {
|
|||||||
width: 150px;
|
width: 150px;
|
||||||
}
|
}
|
||||||
.mini-icon {
|
.mini-icon {
|
||||||
height: 20px;
|
color: #999;
|
||||||
width: 20px;
|
|
||||||
background: url("../images/icon_search.gif") left top no-repeat;
|
|
||||||
position: absolute;
|
position: absolute;
|
||||||
display: block;
|
display: block;
|
||||||
margin-left: 6px;
|
margin-left: 9px;
|
||||||
margin-top: 6px;
|
margin-top: 7px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -560,12 +579,26 @@ div#artistheader {
|
|||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
text-indent: -3000px;
|
text-indent: -3000px;
|
||||||
width: 200px;
|
width: 200px;
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
&.on-tour:before {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: -2px;
|
||||||
|
width: 100px;
|
||||||
|
height: 100px;
|
||||||
|
z-index: 2;
|
||||||
|
background-image: url('../images/songkick_ribon.png');
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#artistBio {
|
#artistBio {
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
line-height: 24px;
|
line-height: 24px;
|
||||||
margin-top: 10px;
|
margin-top: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
h1 {
|
h1 {
|
||||||
a {
|
a {
|
||||||
font-size: 32px;
|
font-size: 32px;
|
||||||
@@ -582,6 +615,25 @@ div#artistheader {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#artistCalendar {
|
||||||
|
list-style-type: none;
|
||||||
|
margin: 0px;
|
||||||
|
display: block;
|
||||||
|
background: #FEF2EB;
|
||||||
|
padding: 10px;
|
||||||
|
font-size: 16px;
|
||||||
|
|
||||||
|
.sk-location {
|
||||||
|
display: inline-block;
|
||||||
|
padding-left: 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sk-logo {
|
||||||
|
width: 100px;
|
||||||
|
padding-top: 16px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#artist_table {
|
#artist_table {
|
||||||
background-color: #FFF;
|
background-color: #FFF;
|
||||||
padding: 20px;
|
padding: 20px;
|
||||||
@@ -907,6 +959,13 @@ div#artistheader {
|
|||||||
float: left;
|
float: left;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
}
|
}
|
||||||
|
#info {
|
||||||
|
float: left;
|
||||||
|
text-align: left;
|
||||||
|
margin-left: 10px;
|
||||||
|
margin-top: -5px;
|
||||||
|
color: @border-color;
|
||||||
|
}
|
||||||
#actions {
|
#actions {
|
||||||
float: right;
|
float: right;
|
||||||
text-align: right;
|
text-align: right;
|
||||||
@@ -920,11 +979,11 @@ div#artistheader {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#toTop {
|
#toTop {
|
||||||
background: url("../images/toTop.gif") no-repeat scroll 10px center #f7f7f7;
|
background: #f7f7f7;
|
||||||
border-radius: 5px 0 0 0;
|
border-radius: 5px 0 0 0;
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
display: none;
|
display: none;
|
||||||
padding: 10px 10px 10px 40px;
|
padding: 10px 10px 10px 10px;
|
||||||
position: fixed;
|
position: fixed;
|
||||||
right: 0;
|
right: 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<%inherit file="base.html" />
|
<%inherit file="base.html" />
|
||||||
<%def name="body()">
|
<%def name="body()">
|
||||||
<div class="title">
|
<div class="title">
|
||||||
<h1 class="clearfix"><img src="interfaces/default/images/icon_extra.gif" alt="extra"/>Artists You Might Like</h1>
|
<h1 class="clearfix"><i class="fa fa-users"></i> Artists You Might Like</h1>
|
||||||
</div>
|
</div>
|
||||||
<div class="table_wrapper">
|
<div class="table_wrapper">
|
||||||
<div class="cloudtag">
|
<div class="cloudtag">
|
||||||
|
|||||||
@@ -0,0 +1,414 @@
|
|||||||
|
<?xml version="1.0" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<metadata></metadata>
|
||||||
|
<defs>
|
||||||
|
<font id="fontawesomeregular" horiz-adv-x="1536" >
|
||||||
|
<font-face units-per-em="1792" ascent="1536" descent="-256" />
|
||||||
|
<missing-glyph horiz-adv-x="448" />
|
||||||
|
<glyph unicode=" " horiz-adv-x="448" />
|
||||||
|
<glyph unicode="	" horiz-adv-x="448" />
|
||||||
|
<glyph unicode=" " horiz-adv-x="448" />
|
||||||
|
<glyph unicode="¨" horiz-adv-x="1792" />
|
||||||
|
<glyph unicode="©" horiz-adv-x="1792" />
|
||||||
|
<glyph unicode="®" horiz-adv-x="1792" />
|
||||||
|
<glyph unicode="´" horiz-adv-x="1792" />
|
||||||
|
|||||||