941 Commits

Author SHA1 Message Date
root
e3324b9c5a merged 2019-04-01 05:03:07 +00:00
root
a450ee4f34 autoexplain removed from development 2019-04-01 05:01:29 +00:00
5fd5ab51f8 ignore sbin 2019-04-01 06:50:08 +02:00
a64049a09f removed false 2019-04-01 06:49:58 +02:00
2f741d5893 fixes for design 2019-04-01 06:47:49 +02:00
c5860f338b Gems for design upgraded 2019-04-01 06:42:33 +02:00
011f772bc3 started to migrate themes new wrapper script 2019-03-17 18:06:20 +01:00
00c8045742 eagerload development 2019-03-11 20:48:29 +01:00
f809f36c06 Upgraded to Rails 4 2019-02-24 15:47:27 +01:00
f52ec0411d gremium und studien factory und specs 2019-01-13 15:13:31 +01:00
92d63b71ed neuigkeit factory small fix 2019-01-13 13:35:06 +01:00
30cbe8923f neuigkeit controller spec 2019-01-13 13:24:00 +01:00
1b15fdf385 very small fix for neuigkeit controller 2019-01-13 10:12:01 +01:00
d7c8342817 additional neuigkeit test 2019-01-13 10:11:25 +01:00
71d14c83ae rewriting some factories 2019-01-13 10:01:22 +01:00
fea219ba92 forst neuigkeit controller spec 2019-01-07 23:32:23 +01:00
1b065cd3f0 nes neuigkeiten model specs 2019-01-07 23:31:55 +01:00
67bfa0f699 Merge branch 'master' into prep_upgrade 2019-01-05 16:20:37 +01:00
ff20774889 improve tests for lva 2019-01-05 16:18:30 +01:00
f7f8937197 started increasing test coverage for lva 2019-01-05 02:56:47 +01:00
c713fdd0d0 ignore coverage folder 2019-01-05 02:56:08 +01:00
bc8f4cfce3 small fixes for neuigkeit spec 2019-01-05 02:55:35 +01:00
5759ba79e0 increase test coverage for meetings 2019-01-05 02:54:50 +01:00
70e415446a simplecov added to determine test coverage 2019-01-05 02:53:04 +01:00
82cd127370 Remove generated documentation from version control 2019-01-02 18:52:35 +01:00
72e18f9e29 generated documentation 2019-01-01 19:04:08 +01:00
e873916095 no longer ignore Gemfile.lock and adding Gemfile.lock 2018-12-30 09:33:19 +01:00
6ebb36d840 no longer ignore Gemfile.lock 2018-12-30 09:32:28 +01:00
f6c3cda045 fixes in fotogallery 2018-12-29 01:04:16 +01:00
a20c6fa673 Corrected solr config + minor bugfixes 2018-09-17 12:05:47 +02:00
Andreas Stephanides
52ffe0c701 added developer login strategy for testing 2018-06-02 12:01:18 +02:00
Andreas Stephanides
52fcabf2dc fix login menu 2018-05-26 08:52:26 +02:00
Andreas Stephanides
c03a60c236 developer login added 2018-05-26 08:50:54 +02:00
1cf84c90ae test 2018-05-20 23:35:38 +02:00
2e732561e8 infoscreenframe 2018-05-20 23:29:34 +02:00
a8f353f213 fixes for production Gemfile 2018-05-20 22:21:34 +02:00
6ba20206ab Merge remote-tracking branch 'origin/stable-production' into stable-production 2018-05-20 21:31:56 +02:00
Andreas Stephanides
2ae99b4b9e remove http header language detection 2018-05-20 21:20:43 +02:00
Andreas Stephanides
f61681c5d0 moved views from theme blue2 to default removed override by theme 2018-05-20 21:18:37 +02:00
1b91d99b24 Merge remote-tracking branch 'origin/master' into stable-production 2018-05-14 21:14:40 +02:00
28906eb5fb write True small 2018-05-14 21:13:42 +02:00
745c4413f4 fix the solr path for production 2018-05-14 21:00:17 +02:00
ac7e7f3462 Merge remote-tracking branch 'origin/master' into stable-production 2018-05-14 20:26:09 +02:00
e55a71e77d rake version set to 10 2018-05-14 20:26:04 +02:00
502aae5c27 merge latest 2018-05-14 20:17:30 +02:00
c2ebdcbefc merge master and stable 2018-05-14 19:58:17 +02:00
734a137563 testtmp 2018-05-14 18:55:37 +02:00
9f1de3d9d0 diverse hot fixes von der productive Version auf fetruby 2018-05-14 17:56:17 +02:00
Pet
0f683ac974 Found out the testrby is on Mogok ;) 2018-04-12 23:25:25 +02:00
Pet
5ffecf7087 Updated Lackis infoscreen layout 2018-04-12 22:48:20 +02:00
Pet
965db4dec0 Updated Lackis infoscreen layout 2018-04-12 22:45:00 +02:00
Pet
6aecb4b4a8 Updated Lackis infoscreen layout 2018-04-12 22:43:10 +02:00
Pet
b1616a6d6d Updated Lackis infoscreen layout 2018-04-12 22:39:48 +02:00
Pet
122bf6c6d4 Updated Lackis infoscreen layout 2018-04-12 22:37:00 +02:00
Pet
829bdb97be Updated Lackis infoscreen layout 2018-04-12 22:35:10 +02:00
Pet
6c91513ff8 Updated Lackis infoscreen layout 2018-04-12 22:33:00 +02:00
Pet
d1a496a017 Updated Lackis infoscreen layout 2018-04-12 22:29:34 +02:00
Pet
eb95f7a5e4 Updated Lackis infoscreen layout 2018-04-12 22:26:46 +02:00
Pet
de225627b1 Updated Lackis infoscreen layout 2018-04-12 22:20:44 +02:00
Pet
08aa459f57 Updated Lackis infoscreen layout 2018-04-12 22:16:06 +02:00
Pet
2b6890a6e6 Updated Lackis infoscreen layout 2018-04-12 22:14:55 +02:00
Pet
04ce26754a Updated Lackis infoscreen layout 2018-04-12 22:10:14 +02:00
Pet
163e1adfc2 Updated Lackis infoscreen layout 2018-04-12 22:04:47 +02:00
Pet
e5a5ec85ef Updated Lackis infoscreen layout 2018-04-12 22:02:50 +02:00
Pet
256d9f09fb Updated Lackis infoscreen layout 2018-04-12 21:58:19 +02:00
Pet
e3c6721811 Updated Lackis infoscreen layout 2018-04-12 21:55:05 +02:00
Pet
e5f0d75b79 Updated Lackis infoscreen layout 2018-04-12 21:47:07 +02:00
Pet
07bb853501 Updated Lackis infoscreen layout 2018-04-12 21:42:03 +02:00
Pet
af5b081a3b Updated Lackis infoscreen layout 2018-04-12 20:54:08 +02:00
Pet
24f3e90235 Updated Lackis infoscreen layout 2018-04-12 20:51:16 +02:00
Pet
ef1135962e Implemented Lackis infoscreen layout 2018-04-12 20:33:09 +02:00
Pet
22cf26f76c changed infoscreen layout 2018-03-28 16:06:52 +02:00
Pet
0c7614b41d removed the wrong login window 2018-03-27 23:09:18 +02:00
Pet
0fedeb2bde changed etherpad link 2018-03-27 22:03:17 +02:00
Pet
146885abae changed etherpad link 2018-03-27 22:01:20 +02:00
Pet
c38139d6f1 changed the etherpad url 2018-03-26 22:18:50 +02:00
ruby fuer rvm
8cb6ec785c no sunspot pid file 2018-03-10 07:10:03 +00:00
root
b8903c6d9a ignore pid files 2018-03-10 06:59:53 +00:00
Andreas Stephanides
242d05f4fa AutoCommit Mit Aug 23 10:03:01 CEST 2017 2017-08-23 10:03:01 +02:00
Andreas Stephanides
070e0dfedb fixing blue2 index 2017-07-27 09:23:02 +02:00
ruby
610e6ae3dd new design 2017-07-25 17:11:51 +02:00
Andreas Stephanides
6c4873d869 AutoCommit Die Jul 25 11:03:01 CEST 2017 2017-07-25 11:03:01 +02:00
Andreas Stephanides
09d5e7b880 Merge branch 'master' of https://git.triton.fet.at/git/fetsite 2017-07-25 10:21:50 +02:00
Andreas Stephanides
6b37d44c9a AutoCommit Die Jul 25 10:03:02 CEST 2017 2017-07-25 10:03:02 +02:00
peter
20088b868f added header image to infoscreen 2017-06-01 00:06:20 +02:00
peter
f1fbd3bef3 added header image to infoscreen 2017-05-31 23:58:38 +02:00
peter
17a43097e7 added header image to infoscreen 2017-05-31 23:55:56 +02:00
peter
3498535d8c added header image to infoscreen 2017-05-31 23:54:11 +02:00
peter
d313e712f1 added header image to infoscreen 2017-05-31 23:52:47 +02:00
peter
bb4adf2eb7 added header image to infoscreen 2017-05-31 23:47:38 +02:00
peter
09532fc74c added header image to infoscreen 2017-05-31 23:41:51 +02:00
peter
29d5c8dac7 added header image to infoscreen 2017-05-31 23:39:50 +02:00
peter
926431c0a2 added header image to infoscreen 2017-05-31 23:38:02 +02:00
peter
d95e1a3399 added header image to infoscreen 2017-05-31 23:35:58 +02:00
peter
d6fa4e1dc7 added header image to infoscreen 2017-05-31 23:27:07 +02:00
peter
6528e8a320 added header image to infoscreen 2017-05-31 23:24:35 +02:00
peter
18beead785 added header image to infoscreen 2017-05-31 23:16:34 +02:00
peter
3baf44c057 added header image to infoscreen 2017-05-31 23:08:43 +02:00
peter
9ec7a76d4a added header image to infoscreen 2017-05-31 23:03:13 +02:00
peter
3b6590f369 added header image to infoscreen 2017-05-31 23:01:07 +02:00
peter
708911ba4e added header image to infoscreen 2017-05-31 22:55:09 +02:00
peter
797d2a1d31 added header image to infoscreen 2017-05-31 22:54:01 +02:00
peter
7ad484cdd7 added header image to infoscreen 2017-05-31 22:52:06 +02:00
peter
aca92e1107 added header image to infoscreen 2017-05-31 22:46:11 +02:00
peter
f13fbafaae added header image to infoscreen 2017-05-31 22:45:42 +02:00
peter
f6738a5226 added header image to infoscreen 2017-05-31 22:42:31 +02:00
peter
2f4a9e4f10 added header image to infoscreen 2017-05-31 22:40:19 +02:00
peter
dff490163e added header image to infoscreen 2017-05-31 22:39:03 +02:00
peter
20a7091800 added header image to infoscreen 2017-05-31 22:38:10 +02:00
peter
ff49499204 added header image to infoscreen 2017-05-31 22:36:18 +02:00
peter
8b3e1ee225 added header image to infoscreen 2017-05-31 22:32:14 +02:00
peter
dc4f161ce4 added header image to infoscreen 2017-05-31 22:29:42 +02:00
peter
5c5236062b added header image to infoscreen 2017-05-31 22:20:53 +02:00
peter
43af1114e8 added header image to infoscreen 2017-05-31 22:16:54 +02:00
peter
0772d51c71 added header image to infoscreen 2017-05-31 22:15:34 +02:00
peter
f2293513c1 added header image to infoscreen 2017-05-31 22:14:12 +02:00
peter
87cad802d7 added header image to infoscreen 2017-05-31 22:12:39 +02:00
peter
2e4a0680df added header image to infoscreen 2017-05-31 22:07:11 +02:00
peter
4ca664a091 added header image to infoscreen 2017-05-31 22:04:03 +02:00
peter
02c766f428 added header image to infoscreen 2017-05-31 22:03:05 +02:00
peter
75e5b8e267 added header image to infoscreen 2017-05-31 21:59:47 +02:00
peter
7d008cb599 added header image to infoscreen 2017-05-31 21:51:41 +02:00
peter
b1fc24af80 set config.serve_static_assets = false 2017-05-31 21:49:21 +02:00
peter
7477b028c5 set config.serve_static_assets = false 2017-05-31 21:44:51 +02:00
peter
fddaa0dcb6 set config.serve_static_assets = false 2017-05-31 21:40:47 +02:00
peter
4ed7e92385 set config.serve_static_assets = true 2017-05-31 21:35:24 +02:00
peter
82876f34a8 changed infoscreen layout 2017-05-31 21:29:54 +02:00
peter
3d97153fa5 changed infoscreen layout 2017-05-31 21:28:09 +02:00
peter
6e10830b83 changed infoscreen layout 2017-05-31 21:05:06 +02:00
peter
8ad15aafd2 changed infoscreen layout 2017-05-31 21:03:43 +02:00
peter
d4948fff5e changed infoscreen layout 2017-05-31 15:11:59 +02:00
peter
8ea2109b27 changed infoscreen layout 2017-05-31 15:10:40 +02:00
peter
f72466f1cd changed infoscreen layout 2017-05-31 15:09:05 +02:00
peter
cba94e926c changed infoscreen layout 2017-05-31 15:07:47 +02:00
peter
f522a83813 changed infoscreen layout 2017-05-31 15:05:53 +02:00
peter
94d67463a9 changed infoscreen layout 2017-05-31 15:03:08 +02:00
peter
38656a1e75 changed infoscreen layout 2017-05-31 15:01:35 +02:00
peter
503b9eb732 changed infoscreen layout 2017-05-31 14:59:25 +02:00
peter
ffee3b8dfb changed infoscreen layout 2017-05-31 14:57:01 +02:00
peter
978f617131 changed infoscreen layout 2017-05-31 14:54:07 +02:00
peter
cf2a8adf49 changed infoscreen layout 2017-05-31 14:49:35 +02:00
peter
14e563ef95 changed infoscreen layout 2017-05-31 12:35:30 +02:00
Pet
5660cd7748 added testtext 2017-05-31 12:14:00 +02:00
Andreas Stephanides
af5d055014 change timeout for inforscreen 2017-05-29 09:56:46 +02:00
Andreas Stephanides
453dd7867d change timeout for inforscreen 2017-05-29 09:44:09 +02:00
root
bbfb5e6a1d Merge branch 'latest' of https://git.triton.fet.at/git/fetsite into latest 2017-05-13 23:04:50 +02:00
Andreas Stephanides
4ed35f184c https-etherpad 2017-05-12 07:18:19 +02:00
ruby
37aab0ef59 Merge branch 'latest' of https://git.triton.fet.at/git/fetsite into latest 2017-05-09 15:13:08 +02:00
ruby
c53d34191a fixes to init script 2017-05-09 15:11:28 +02:00
ruby
61c5624b16 blue2 default2 2017-05-09 15:11:00 +02:00
ruby
a1ef7028fd local solr sunspot 2017-05-09 15:10:40 +02:00
Andreas Stephanides
b5f1ae9e69 APIKEY 2017-05-09 13:39:52 +02:00
Andreas Stephanides
6a9fe8243b fix apth for ETHERPAD Key 2017-05-09 13:38:32 +02:00
Andreas Stephanides
1f581ab819 delete empty files 2017-05-09 13:31:45 +02:00
root
e73315bd41 fix neuigkeiten 2017-05-04 17:56:47 +02:00
Andreas Stephanides
491e360141 small fixes incl. solr 2017-04-18 19:03:09 +02:00
Andreas Stephanides
28226df76c Merge remote-tracking branch 'fetmaster/master' 2017-04-17 13:20:01 +02:00
root
dfef3721dc test1 2017-04-15 15:32:26 +02:00
Andreas Stephanides
14598fbbd9 add a README 2017-04-03 15:26:29 +02:00
Andreas Stephanides
ffaa57c914 starttopic nil 2017-04-03 15:26:19 +02:00
Andreas Stephanides
cd439ecf02 solr config update 2017-04-03 15:26:01 +02:00
Andreas Stephanides
328adfe3a5 calentries view fixed 2017-04-03 15:25:40 +02:00
Andreas Stephanides
e0312386e7 no boost for studium 2017-04-03 15:25:22 +02:00
ee451cdd9b some changes 2017-03-30 23:11:57 +02:00
cfdbeeaf46 Merge /home/andis/fetsite 2015-09-14 16:01:15 +02:00
Andreas Stephanides
5542777216 AutoCommit Mon Sep 14 16:00:56 CEST 2015 2015-09-14 16:00:56 +02:00
e341384493 Merge /home/andis/fetsite 2015-09-14 15:56:10 +02:00
Andreas Stephanides
0337131472 AutoCommit Mon Sep 14 15:54:50 CEST 2015 2015-09-14 15:54:50 +02:00
e4a100823f Merge /home/andis/fetsite 2015-09-14 13:50:46 +02:00
Andreas Stephanides
e15526865d AutoCommit Mon Sep 14 13:50:05 CEST 2015 2015-09-14 13:50:05 +02:00
f052940d6c Merge /home/andis/fetsite 2015-09-14 12:06:15 +02:00
7c6e04ca2e inactive facebook config 2015-09-14 12:05:55 +02:00
Andreas Stephanides
1d8bae3aee AutoCommit Mon Sep 14 12:03:04 CEST 2015 2015-09-14 12:03:04 +02:00
Andreas Stephanides
168b4d9e4c AutoCommit Mon Sep 14 01:03:01 CEST 2015 2015-09-14 01:03:01 +02:00
Andreas Stephanides
a47c6fea7a AutoCommit Mon Sep 14 00:03:01 CEST 2015 2015-09-14 00:03:01 +02:00
Andreas Stephanides
10949e9708 AutoCommit Son Sep 13 14:03:06 CEST 2015 2015-09-13 14:03:06 +02:00
Andreas Stephanides
a9c9b22a94 AutoCommit Son Sep 13 13:03:44 CEST 2015 2015-09-13 13:03:44 +02:00
Andreas Stephanides
b073a1a098 AutoCommit Son Sep 13 12:03:20 CEST 2015 2015-09-13 12:03:21 +02:00
Andreas Stephanides
d85a01c810 AutoCommit Son Sep 13 11:03:05 CEST 2015 2015-09-13 11:03:05 +02:00
Andreas Stephanides
4a8e5d393e AutoCommit Son Sep 13 10:03:11 CEST 2015 2015-09-13 10:03:11 +02:00
Andreas Stephanides
97d5427f6d AutoCommit Son Sep 13 00:03:01 CEST 2015 2015-09-13 00:03:01 +02:00
Andreas Stephanides
92667b92e9 AutoCommit Sam Sep 12 22:03:04 CEST 2015 2015-09-12 22:03:04 +02:00
Andreas Stephanides
ff70c31c40 AutoCommit Sam Sep 12 13:03:02 CEST 2015 2015-09-12 13:03:02 +02:00
Andreas Stephanides
3d87ce6fd2 AutoCommit Sam Sep 12 12:03:06 CEST 2015 2015-09-12 12:03:06 +02:00
Andreas Stephanides
cfb42584e1 AutoCommit Sam Sep 12 11:03:02 CEST 2015 2015-09-12 11:03:02 +02:00
Andreas Stephanides
52dac513f7 AutoCommit Sam Sep 12 10:03:56 CEST 2015 2015-09-12 10:03:56 +02:00
Andreas Stephanides
514bdc1ef0 AutoCommit Fre Sep 11 21:03:01 CEST 2015 2015-09-11 21:03:01 +02:00
Andreas Stephanides
e486ab02fd AutoCommit Fre Sep 11 19:03:01 CEST 2015 2015-09-11 19:03:01 +02:00
Andreas Stephanides
0dc83df98c AutoCommit Fre Sep 11 15:03:05 CEST 2015 2015-09-11 15:03:05 +02:00
Andreas Stephanides
9a9c7f74f9 AutoCommit Fre Sep 11 13:03:02 CEST 2015 2015-09-11 13:03:02 +02:00
Andreas Stephanides
68e2d4a5a7 AutoCommit Don Sep 10 22:03:01 CEST 2015 2015-09-10 22:03:01 +02:00
Andreas Stephanides
edaf154549 AutoCommit Don Sep 10 21:03:02 CEST 2015 2015-09-10 21:03:02 +02:00
Andreas Stephanides
f59f0cb05a AutoCommit Don Sep 10 20:03:01 CEST 2015 2015-09-10 20:03:01 +02:00
Andreas Stephanides
b7abbb8a77 AutoCommit Don Sep 10 09:03:01 CEST 2015 2015-09-10 09:03:01 +02:00
Andreas Stephanides
9521f04c72 AutoCommit Don Sep 10 00:03:03 CEST 2015 2015-09-10 00:03:03 +02:00
Andreas Stephanides
01c6fedaee AutoCommit Mit Sep 9 23:03:01 CEST 2015 2015-09-09 23:03:01 +02:00
Andreas Stephanides
1e48881830 AutoCommit Mit Sep 9 22:03:05 CEST 2015 2015-09-09 22:03:05 +02:00
Andreas Stephanides
0da3ee8ed9 AutoCommit Mit Sep 9 11:03:36 CEST 2015 2015-09-09 11:03:37 +02:00
Andreas Stephanides
5531eb089e AutoCommit Die Sep 8 14:03:06 CEST 2015 2015-09-08 14:03:06 +02:00
Andreas Stephanides
8fa549ae23 AutoCommit Mon Sep 7 00:03:01 CEST 2015 2015-09-07 00:03:01 +02:00
Andreas Stephanides
8c2efffff4 AutoCommit Son Sep 6 23:03:05 CEST 2015 2015-09-06 23:03:05 +02:00
Andreas Stephanides
b9079c0525 AutoCommit Son Sep 6 21:03:06 CEST 2015 2015-09-06 21:03:06 +02:00
Andreas Stephanides
d509884aa1 AutoCommit Sam Sep 5 21:03:02 CEST 2015 2015-09-05 21:03:02 +02:00
Andreas Stephanides
13f852cf48 AutoCommit Sam Sep 5 19:03:01 CEST 2015 2015-09-05 19:03:01 +02:00
Andreas Stephanides
a96e48fa36 AutoCommit Sam Sep 5 18:03:02 CEST 2015 2015-09-05 18:03:02 +02:00
Andreas Stephanides
a84332d09f AutoCommit Sam Sep 5 17:03:04 CEST 2015 2015-09-05 17:03:04 +02:00
Andreas Stephanides
4b1d11751d AutoCommit Sam Sep 5 16:03:02 CEST 2015 2015-09-05 16:03:02 +02:00
Andreas Stephanides
eccb090d5c AutoCommit Sam Sep 5 15:03:11 CEST 2015 2015-09-05 15:03:11 +02:00
Andreas Stephanides
c7d12e9a42 AutoCommit Fre Sep 4 14:03:04 CEST 2015 2015-09-04 14:03:04 +02:00
Andreas Stephanides
f7ad93c398 AutoCommit Don Sep 3 16:03:01 CEST 2015 2015-09-03 16:03:01 +02:00
Andreas Stephanides
984e5f4b56 AutoCommit Don Sep 3 12:03:05 CEST 2015 2015-09-03 12:03:05 +02:00
Andreas Stephanides
4835155d06 AutoCommit Don Sep 3 11:03:01 CEST 2015 2015-09-03 11:03:01 +02:00
Andreas Stephanides
e7c21ad95b AutoCommit Don Sep 3 10:03:06 CEST 2015 2015-09-03 10:03:06 +02:00
Andreas Stephanides
889d7ac3d0 AutoCommit Mit Sep 2 23:03:01 CEST 2015 2015-09-02 23:03:01 +02:00
Andreas Stephanides
194a8375dd AutoCommit Mit Sep 2 22:03:01 CEST 2015 2015-09-02 22:03:01 +02:00
Andreas Stephanides
7b9b226e59 AutoCommit Mit Sep 2 21:03:01 CEST 2015 2015-09-02 21:03:01 +02:00
Andreas Stephanides
d4964f40fb AutoCommit Die Sep 1 14:03:03 CEST 2015 2015-09-01 14:03:03 +02:00
Andreas Stephanides
5134dc2e5f AutoCommit Die Sep 1 13:03:03 CEST 2015 2015-09-01 13:03:03 +02:00
Andreas Stephanides
c37040a74b AutoCommit Die Sep 1 12:03:25 CEST 2015 2015-09-01 12:03:25 +02:00
Andreas Stephanides
c1a7d9b7c2 AutoCommit Die Sep 1 10:03:01 CEST 2015 2015-09-01 10:03:01 +02:00
Andreas Stephanides
576b763d82 AutoCommit Die Sep 1 09:03:01 CEST 2015 2015-09-01 09:03:01 +02:00
Andreas Stephanides
c02ee30013 AutoCommit Die Sep 1 01:03:02 CEST 2015 2015-09-01 01:03:02 +02:00
Andreas Stephanides
1cea790324 AutoCommit Die Sep 1 00:03:02 CEST 2015 2015-09-01 00:03:02 +02:00
Andreas Stephanides
3bcd8389d4 AutoCommit Mon Aug 31 23:03:01 CEST 2015 2015-08-31 23:03:01 +02:00
Andreas Stephanides
221bd95cbf AutoCommit Mon Aug 31 22:03:01 CEST 2015 2015-08-31 22:03:01 +02:00
Andreas Stephanides
8c1e430bb2 AutoCommit Mon Aug 31 18:03:21 CEST 2015 2015-08-31 18:03:21 +02:00
Andreas Stephanides
589597509a AutoCommit Mon Aug 31 17:03:03 CEST 2015 2015-08-31 17:03:03 +02:00
Andreas Stephanides
93dbdedf53 AutoCommit Mon Aug 31 16:03:01 CEST 2015 2015-08-31 16:03:01 +02:00
Andreas Stephanides
1bc9d65a44 AutoCommit Mon Aug 31 15:03:01 CEST 2015 2015-08-31 15:03:01 +02:00
Andreas Stephanides
f61231accc AutoCommit Mon Aug 31 14:03:19 CEST 2015 2015-08-31 14:03:19 +02:00
Andreas Stephanides
cec9939144 AutoCommit Mon Aug 31 13:03:02 CEST 2015 2015-08-31 13:03:02 +02:00
Andreas Stephanides
6b324ded44 AutoCommit Son Aug 30 20:03:01 CEST 2015 2015-08-30 20:03:01 +02:00
Andreas Stephanides
18a6821029 AutoCommit Son Aug 30 19:03:01 CEST 2015 2015-08-30 19:03:01 +02:00
Andreas Stephanides
2d9944dfc3 AutoCommit Son Aug 30 18:03:01 CEST 2015 2015-08-30 18:03:01 +02:00
Andreas Stephanides
9dd9c3cc48 AutoCommit Son Aug 30 17:03:01 CEST 2015 2015-08-30 17:03:01 +02:00
Andreas Stephanides
8bfd96d0af AutoCommit Son Aug 30 16:03:01 CEST 2015 2015-08-30 16:03:01 +02:00
Andreas Stephanides
4a671f5cff AutoCommit Son Aug 30 15:03:01 CEST 2015 2015-08-30 15:03:01 +02:00
Andreas Stephanides
5bf63421a6 AutoCommit Son Aug 30 14:03:01 CEST 2015 2015-08-30 14:03:01 +02:00
Andreas Stephanides
723d7be980 Merge branch 'master' of https://github.com/fetsite/fetsite into tests 2015-08-30 13:04:23 +02:00
Andreas Stephanides
e098c0cd36 AutoCommit Son Aug 30 10:03:05 CEST 2015 2015-08-30 10:03:05 +02:00
Andreas Stephanides
bffb978fc7 AutoCommit Don Aug 27 17:03:04 CEST 2015 2015-08-27 17:03:04 +02:00
Andreas Stephanides
8e1e19d3ab AutoCommit Don Aug 27 16:03:04 CEST 2015 2015-08-27 16:03:04 +02:00
Andreas Stephanides
7c2f1f9753 AutoCommit Don Aug 27 15:03:02 CEST 2015 2015-08-27 15:03:02 +02:00
Andreas Stephanides
370c439c29 AutoCommit Don Aug 27 14:03:04 CEST 2015 2015-08-27 14:03:04 +02:00
Andreas Stephanides
1047851b47 AutoCommit Mit Aug 26 12:03:05 CEST 2015 2015-08-26 12:03:05 +02:00
Andreas Stephanides
94cad06e31 AutoCommit Mit Aug 26 11:03:04 CEST 2015 2015-08-26 11:03:04 +02:00
8ed5b7287e small fixes 2015-08-26 09:40:53 +02:00
Andreas Stephanides
934e004416 AutoCommit Sam Aug 22 18:17:03 CEST 2015 2015-08-22 18:17:03 +02:00
Andreas Stephanides
af39f21595 AutoCommit Sam Aug 22 18:03:02 CEST 2015 2015-08-22 18:03:02 +02:00
Andreas Stephanides
82b71f045f Merge branch 'survey' 2015-08-22 17:55:32 +02:00
Andreas Stephanides
37c2d893b6 AutoCommit Sam Aug 22 00:03:01 CEST 2015 2015-08-22 00:03:01 +02:00
Andreas Stephanides
09e3f2568c AutoCommit Fre Aug 21 23:03:02 CEST 2015 2015-08-21 23:03:02 +02:00
Andreas Stephanides
c8e8a0d229 AutoCommit Fre Aug 21 22:03:01 CEST 2015 2015-08-21 22:03:01 +02:00
Andreas Stephanides
bfe65e14e3 AutoCommit Fre Aug 21 21:03:01 CEST 2015 2015-08-21 21:03:01 +02:00
Andreas Stephanides
c396c7410e AutoCommit Fre Aug 21 20:03:03 CEST 2015 2015-08-21 20:03:03 +02:00
Andreas Stephanides
6102587cab AutoCommit Don Aug 20 11:03:23 CEST 2015 2015-08-20 11:03:23 +02:00
Andreas Stephanides
8b0e655a88 AutoCommit Mit Aug 19 23:03:02 CEST 2015 2015-08-19 23:03:02 +02:00
Andreas Stephanides
3c493ae9d4 AutoCommit Mit Aug 19 22:03:03 CEST 2015 2015-08-19 22:03:03 +02:00
Andreas Stephanides
38f5591ee2 AutoCommit Mit Aug 19 21:03:04 CEST 2015 2015-08-19 21:03:04 +02:00
Andreas Stephanides
06599b5ce7 AutoCommit Mit Aug 19 20:03:01 CEST 2015 2015-08-19 20:03:01 +02:00
Andreas Stephanides
578dcdfbd6 AutoCommit Mit Aug 19 19:03:04 CEST 2015 2015-08-19 19:03:04 +02:00
Andreas Stephanides
1ce070aab3 AutoCommit Mit Aug 19 18:03:01 CEST 2015 2015-08-19 18:03:01 +02:00
Andreas Stephanides
11d95e71d2 AutoCommit Die Aug 11 00:03:03 CEST 2015 2015-08-11 00:03:03 +02:00
Andreas Stephanides
0ad67e860c AutoCommit Mon Aug 10 22:03:02 CEST 2015 2015-08-10 22:03:02 +02:00
Andreas Stephanides
cc45de5791 AutoCommit Mon Aug 10 21:03:04 CEST 2015 2015-08-10 21:03:04 +02:00
Andreas Stephanides
2ef0dc7fb8 AutoCommit Mon Aug 10 20:03:02 CEST 2015 2015-08-10 20:03:02 +02:00
Andreas Stephanides
d628d6cee8 AutoCommit Mon Aug 10 18:03:03 CEST 2015 2015-08-10 18:03:03 +02:00
Andreas Stephanides
07b0755004 AutoCommit Mon Aug 10 17:03:04 CEST 2015 2015-08-10 17:03:04 +02:00
Andreas Stephanides
db53f4843d AutoCommit Mon Aug 10 16:03:01 CEST 2015 2015-08-10 16:03:01 +02:00
Andreas Stephanides
7c180080ef AutoCommit Mon Aug 10 14:03:05 CEST 2015 2015-08-10 14:03:05 +02:00
Andreas Stephanides
3835c0e773 AutoCommit Mon Aug 10 13:03:04 CEST 2015 2015-08-10 13:03:04 +02:00
Andreas Stephanides
58fd356f00 Merge branch 'master' of fet.at:~/fetsite 2015-08-07 17:23:16 +02:00
Andreas Stephanides
cb73bbfa43 lösche unnötiges 2015-08-07 17:21:49 +02:00
Andreas Stephanides
3f57e83d49 AutoCommit Fre Aug 7 11:03:01 CEST 2015 2015-08-07 11:03:01 +02:00
Andreas Stephanides
7419e72eed AutoCommit Fre Aug 7 10:03:04 CEST 2015 2015-08-07 10:03:04 +02:00
Andreas Stephanides
84b88a141c AutoCommit Fre Aug 7 09:03:01 CEST 2015 2015-08-07 09:03:01 +02:00
Andreas Stephanides
13283e0e65 AutoCommit Fre Aug 7 01:03:02 CEST 2015 2015-08-07 01:03:02 +02:00
Andreas Stephanides
c6222cdc23 AutoCommit Fre Aug 7 00:03:02 CEST 2015 2015-08-07 00:03:02 +02:00
Andreas Stephanides
73f364e620 AutoCommit Don Aug 6 23:03:01 CEST 2015 2015-08-06 23:03:01 +02:00
Andreas Stephanides
bdb0025a8c AutoCommit Don Aug 6 22:03:02 CEST 2015 2015-08-06 22:03:02 +02:00
Andreas Stephanides
0c0e7ba051 AutoCommit Don Aug 6 21:03:01 CEST 2015 2015-08-06 21:03:01 +02:00
Andreas Stephanides
390075aa7f AutoCommit Don Aug 6 20:03:03 CEST 2015 2015-08-06 20:03:03 +02:00
Andreas Stephanides
7083da8125 AutoCommit Mit Aug 5 11:03:06 CEST 2015 2015-08-05 11:03:06 +02:00
Andreas Stephanides
3a4888c9a4 AutoCommit Mit Aug 5 09:03:03 CEST 2015 2015-08-05 09:03:03 +02:00
Andreas Stephanides
9b1c35f499 AutoCommit Die Aug 4 22:03:01 CEST 2015 2015-08-04 22:03:01 +02:00
Andreas Stephanides
aa06d2195e AutoCommit Die Aug 4 17:03:24 CEST 2015 2015-08-04 17:03:24 +02:00
Andreas Stephanides
d88edd708d AutoCommit Mon Aug 3 09:03:01 CEST 2015 2015-08-03 09:03:01 +02:00
Andreas Stephanides
e7a328737c AutoCommit Mon Aug 3 08:03:01 CEST 2015 2015-08-03 08:03:01 +02:00
Andreas Stephanides
1a12a3d394 AutoCommit Son Aug 2 17:03:02 CEST 2015 2015-08-02 17:03:03 +02:00
Andreas Stephanides
bbb924fcfb AutoCommit Son Aug 2 16:03:01 CEST 2015 2015-08-02 16:03:01 +02:00
Andreas Stephanides
270f42bba1 AutoCommit Son Aug 2 15:03:01 CEST 2015 2015-08-02 15:03:01 +02:00
Andreas Stephanides
15b70ad8c6 AutoCommit Son Aug 2 10:03:02 CEST 2015 2015-08-02 10:03:02 +02:00
Andreas Stephanides
f71171f509 css & destroy 2015-08-01 23:38:06 +02:00
Andreas Stephanides
38183bdc00 fixes fuer choices 2015-08-01 23:37:41 +02:00
Andreas Stephanides
9933718750 AutoCommit Sam Aug 1 23:03:02 CEST 2015 2015-08-01 23:03:02 +02:00
Andreas Stephanides
2b01a87d15 AutoCommit Sam Aug 1 22:03:01 CEST 2015 2015-08-01 22:03:01 +02:00
Andreas Stephanides
2a7ae7c2bf AutoCommit Sam Aug 1 21:03:02 CEST 2015 2015-08-01 21:03:02 +02:00
Andreas Stephanides
aa6f03574e AutoCommit Sam Aug 1 20:03:01 CEST 2015 2015-08-01 20:03:01 +02:00
Andreas Stephanides
dae218c4ff AutoCommit Sam Aug 1 16:03:03 CEST 2015 2015-08-01 16:03:03 +02:00
Andreas Stephanides
ab0559a45c AutoCommit Sam Aug 1 15:03:01 CEST 2015 2015-08-01 15:03:01 +02:00
Andreas Stephanides
cc764f68af AutoCommit Sam Aug 1 14:03:01 CEST 2015 2015-08-01 14:03:01 +02:00
Andreas Stephanides
fb99d55734 AutoCommit Sam Aug 1 13:03:01 CEST 2015 2015-08-01 13:03:01 +02:00
Andreas Stephanides
234880d90e AutoCommit Sam Aug 1 12:03:01 CEST 2015 2015-08-01 12:03:01 +02:00
Andreas Stephanides
a079a88dbc AutoCommit Sam Aug 1 11:03:01 CEST 2015 2015-08-01 11:03:01 +02:00
Andreas Stephanides
d5571b38fa AutoCommit Sam Aug 1 01:03:01 CEST 2015 2015-08-01 01:03:01 +02:00
Andreas Stephanides
ca6deabb34 AutoCommit Sam Aug 1 00:03:01 CEST 2015 2015-08-01 00:03:01 +02:00
Andreas Stephanides
786cde0d08 AutoCommit Fre Jul 31 23:03:01 CEST 2015 2015-07-31 23:03:01 +02:00
Andreas Stephanides
4bb81ef9d1 AutoCommit Fre Jul 31 22:03:01 CEST 2015 2015-07-31 22:03:01 +02:00
Andreas Stephanides
ca903cf84b AutoCommit Fre Jul 31 21:03:04 CEST 2015 2015-07-31 21:03:04 +02:00
Andreas Stephanides
cd5f415ca1 update für questions 2015-07-31 18:32:36 +02:00
Andreas Stephanides
8a867b72a3 AutoCommit Fre Jul 31 18:03:05 CEST 2015 2015-07-31 18:03:05 +02:00
Andreas Stephanides
02b3a651ca AutoCommit Fre Jul 31 17:03:12 CEST 2015 2015-07-31 17:03:12 +02:00
Andreas Stephanides
e61142382e AutoCommit Fre Jul 31 12:03:05 CEST 2015 2015-07-31 12:03:05 +02:00
Andreas Stephanides
8a4a168fe4 AutoCommit Fre Jul 31 11:03:07 CEST 2015 2015-07-31 11:03:07 +02:00
Andreas Stephanides
b450757e47 AutoCommit Fre Jul 31 10:03:05 CEST 2015 2015-07-31 10:03:05 +02:00
Andreas Stephanides
a9e413ada0 change gitignore 2015-07-31 09:01:55 +02:00
Andreas Stephanides
2193fcc49e AutoCommit Don Jul 30 14:03:07 CEST 2015 2015-07-30 14:03:07 +02:00
Andreas Stephanides
1e72b8e6ce AutoCommit Don Jul 30 02:03:02 CEST 2015 2015-07-30 02:03:02 +02:00
Andreas Stephanides
f161d15174 AutoCommit Don Jul 30 01:03:05 CEST 2015 2015-07-30 01:03:05 +02:00
Andreas Stephanides
97df081b33 AutoCommit Don Jul 30 00:03:02 CEST 2015 2015-07-30 00:03:02 +02:00
Andreas Stephanides
068c2a2e55 AutoCommit Fre Jul 17 14:03:07 CEST 2015 2015-07-17 14:03:07 +02:00
Andreas Stephanides
0e9525af81 AutoCommit Fre Jul 17 13:03:05 CEST 2015 2015-07-17 13:03:05 +02:00
Andreas Stephanides
353bbc145f AutoCommit Fre Jul 17 12:03:01 CEST 2015 2015-07-17 12:03:01 +02:00
Andreas Stephanides
d5cc41bfe6 AutoCommit Fre Jul 17 11:03:05 CEST 2015 2015-07-17 11:03:05 +02:00
Andreas Stephanides
9def2be84e AutoCommit Don Jul 16 21:03:06 CEST 2015 2015-07-16 21:03:06 +02:00
Andreas Stephanides
5b70b67bfe AutoCommit Mit Jul 15 12:03:05 CEST 2015 2015-07-15 12:03:05 +02:00
Andreas Stephanides
1d4bc2baab moderator lva 2015-07-14 15:04:28 +02:00
909cefb85b Merge branch 'master' of https://github.com/fetsite/fetsite 2015-07-14 14:38:36 +02:00
Andreas Stephanides
a7b6576fbd fix verwalten lva 2015-07-14 14:30:17 +02:00
07549c6f0e Merge branch 'master' of https://github.com/fetsite/fetsite 2015-07-13 11:52:23 +02:00
Andreas Stephanides
0f221ad4f4 AutoCommit Mon Jul 13 11:03:01 CEST 2015 2015-07-13 11:03:01 +02:00
c356c3c128 Merge branch 'master' of https://github.com/fetsite/fetsite 2015-07-12 09:44:32 +02:00
Andreas Stephanides
880ca238ad fix locale 2 2015-07-12 09:41:02 +02:00
c7902423b5 Merge branch 'master' of https://github.com/fetsite/fetsite 2015-07-12 07:15:57 +02:00
Andreas Stephanides
f16c9a89d5 Store loclae to session 2015-07-12 07:14:17 +02:00
dd94a1b47b Merge branch 'master' of https://github.com/fetsite/fetsite 2015-07-11 20:07:28 +02:00
Andreas Stephanides
5b09d51365 AutoCommit Fre Jul 10 12:03:14 CEST 2015 2015-07-10 12:03:14 +02:00
Andreas Stephanides
5d9571b03a AutoCommit Fre Jul 10 11:03:02 CEST 2015 2015-07-10 11:03:02 +02:00
Andreas Stephanides
b399a961a3 AutoCommit Don Jul 9 17:03:04 CEST 2015 2015-07-09 17:03:04 +02:00
Andreas Stephanides
fe32c2102b AutoCommit Don Jul 9 16:03:02 CEST 2015 2015-07-09 16:03:02 +02:00
Andreas Stephanides
783ba0d030 AutoCommit Don Jul 2 13:03:01 CEST 2015 2015-07-02 13:03:01 +02:00
Andreas Stephanides
7e5e8ea688 AutoCommit Son Jun 28 18:03:01 CEST 2015 2015-06-28 18:03:01 +02:00
48f8c975cd Merge branch 'master' of https://github.com/fetsite/fetsite 2015-06-26 16:21:38 +02:00
Andreas Stephanides
f5cc774c92 AutoCommit Fre Jun 26 16:03:06 CEST 2015 2015-06-26 16:03:06 +02:00
Andreas Stephanides
2ca5f49436 AutoCommit Fre Jun 26 15:03:04 CEST 2015 2015-06-26 15:03:04 +02:00
Andreas Stephanides
6aeccfb1d6 AutoCommit Fre Jun 26 14:03:06 CEST 2015 2015-06-26 14:03:06 +02:00
Andreas Stephanides
9c073a91c3 AutoCommit Fre Jun 26 13:03:01 CEST 2015 2015-06-26 13:03:01 +02:00
Andreas Stephanides
9fc0efd467 AutoCommit Fre Jun 26 12:03:01 CEST 2015 2015-06-26 12:03:01 +02:00
6b0314af7a merge cachebsp 2015-06-26 11:08:44 +02:00
f718567722 fix cachebsp 2015-06-26 11:07:08 +02:00
Andreas Stephanides
133a882cf8 AutoCommit Don Jun 25 17:04:03 CEST 2015 2015-06-25 17:04:04 +02:00
Andreas Stephanides
a5c950ad46 Merge branch 'master' of github.com:fetsite/fetsite 2015-06-25 16:35:14 +02:00
74e39f45d6 smallfix 2015-06-25 16:33:51 +02:00
Andreas Stephanides
88877ccab0 AutoCommit Don Jun 25 16:03:19 CEST 2015 2015-06-25 16:03:20 +02:00
Andreas Stephanides
b9d436789c beispiel ability cache fix 2015-06-24 11:17:15 +02:00
Andreas Stephanides
d93fd7e6b0 Merge branch 'master' of github.com:fetsite/fetsite 2015-06-24 11:16:43 +02:00
37fc308e46 smallfixes, performance 2015-06-24 11:15:58 +02:00
Andreas Stephanides
fe0980fb6c AutoCommit Mit Jun 24 11:03:03 CEST 2015 2015-06-24 11:03:03 +02:00
1d8b85afa9 Merge branch 'master' of https://github.com/fetsite/fetsite 2015-06-21 16:01:30 +02:00
308b542caa Hot Fixes 2015-06-21 16:01:01 +02:00
Andreas Stephanides
ef4bfa4012 AutoCommit Son Jun 21 01:03:01 CEST 2015 2015-06-21 01:03:01 +02:00
Andreas Stephanides
c62b3b34dd AutoCommit Son Jun 21 00:03:01 CEST 2015 2015-06-21 00:03:01 +02:00
Andreas Stephanides
916f2246f2 AutoCommit Sam Jun 20 20:03:01 CEST 2015 2015-06-20 20:03:01 +02:00
Andreas Stephanides
08c901c04f AutoCommit Sam Jun 20 19:03:05 CEST 2015 2015-06-20 19:03:05 +02:00
Andreas Stephanides
bd0f24603e AutoCommit Sam Jun 20 18:03:01 CEST 2015 2015-06-20 18:03:01 +02:00
Andreas Stephanides
99e32424c7 AutoCommit Sam Jun 20 15:03:01 CEST 2015 2015-06-20 15:03:01 +02:00
Andreas Stephanides
aadf180670 AutoCommit Sam Jun 20 14:03:01 CEST 2015 2015-06-20 14:03:01 +02:00
Andreas Stephanides
67404cc605 AutoCommit Sam Jun 20 13:03:01 CEST 2015 2015-06-20 13:03:01 +02:00
Andreas Stephanides
6e05c3d589 AutoCommit Sam Jun 20 12:03:03 CEST 2015 2015-06-20 12:03:03 +02:00
Andreas Stephanides
a3346e4c7a AutoCommit Sam Jun 20 11:03:04 CEST 2015 2015-06-20 11:03:04 +02:00
Andreas Stephanides
815c81add0 AutoCommit Mit Jun 17 14:03:07 CEST 2015 2015-06-17 14:03:07 +02:00
Andreas Stephanides
7ce34e9d29 AutoCommit Mit Jun 17 13:03:07 CEST 2015 2015-06-17 13:03:07 +02:00
Andreas Stephanides
efe17c681f AutoCommit Die Jun 16 16:03:07 CEST 2015 2015-06-16 16:03:07 +02:00
Andreas Stephanides
3c5ca56b13 AutoCommit Mon Jun 15 18:03:04 CEST 2015 2015-06-15 18:03:04 +02:00
Andreas Stephanides
3618db1376 AutoCommit Mon Jun 15 17:03:08 CEST 2015 2015-06-15 17:03:08 +02:00
Andreas Stephanides
67c3fc8089 intend 2015-06-15 15:39:09 +02:00
Andreas Stephanides
e3624263f5 crawler type 6 2015-06-15 15:39:03 +02:00
Andreas Stephanides
01521104ce crawler link 2015-06-15 15:21:49 +02:00
Andreas Stephanides
72be6c2f10 ability search document 2015-06-15 15:21:22 +02:00
Andreas Stephanides
b0f1a2823f calendar full url 2015-06-11 15:51:09 +02:00
Andreas Stephanides
12a82f519c dependent and calendar 2015-06-11 15:47:26 +02:00
Andreas Stephanides
2f1a63931c fix document 2015-06-11 11:56:11 +02:00
Andreas Stephanides
015ef4a64d search document html redirect 2015-06-11 11:54:40 +02:00
Andreas Stephanides
090e2ad72a document search 2015-06-11 11:36:36 +02:00
Andreas Stephanides
34659014df AutoCommit Don Jun 11 11:03:02 CEST 2015 2015-06-11 11:03:02 +02:00
Andreas Stephanides
9aaacbbb63 AutoCommit Don Jun 11 09:03:21 CEST 2015 2015-06-11 09:03:21 +02:00
Andreas Stephanides
f62ed335ec key, ability fixes 2015-06-10 17:11:21 +02:00
Andreas Stephanides
c57095bbca AutoCommit Mit Jun 10 17:03:04 CEST 2015 2015-06-10 17:03:04 +02:00
Andreas Stephanides
d10401c1c4 AutoCommit Mit Jun 10 11:03:37 CEST 2015 2015-06-10 11:03:37 +02:00
Andreas Stephanides
18a7e33012 AutoCommit Die Jun 9 19:03:02 CEST 2015 2015-06-09 19:03:02 +02:00
Andreas Stephanides
852a893a32 AutoCommit Die Jun 9 18:03:02 CEST 2015 2015-06-09 18:03:02 +02:00
Andreas Stephanides
e70cc8405f AutoCommit Die Jun 9 15:03:01 CEST 2015 2015-06-09 15:03:01 +02:00
Andreas Stephanides
d146cf09a7 AutoCommit Die Jun 9 12:03:27 CEST 2015 2015-06-09 12:03:27 +02:00
Andreas Stephanides
dd9ae1d20b AutoCommit Die Jun 9 10:03:05 CEST 2015 2015-06-09 10:03:05 +02:00
Andreas Stephanides
cc2ab28d16 AutoCommit Mon Jun 8 22:03:14 CEST 2015 2015-06-08 22:03:14 +02:00
Andreas Stephanides
18021fb502 AutoCommit Mon Jun 8 18:03:05 CEST 2015 2015-06-08 18:03:05 +02:00
Andreas Stephanides
45b5798e7d AutoCommit Mon Jun 8 17:03:02 CEST 2015 2015-06-08 17:03:02 +02:00
Andreas Stephanides
dc318e0efb AutoCommit Mon Jun 8 12:03:12 CEST 2015 2015-06-08 12:03:12 +02:00
Andreas Stephanides
c36008729b AutoCommit Don Jun 4 13:03:01 CEST 2015 2015-06-04 13:03:01 +02:00
Andreas Stephanides
6c8e30b701 gitignore 2015-06-04 12:47:52 +02:00
Andreas Stephanides
d3e97ff422 preferred theme 2015-06-03 08:28:09 +02:00
Andreas Stephanides
6c2238e740 blue2 update 2015-06-01 17:21:47 +02:00
Andreas Stephanides
5a7eb23a1f studium form update 2015-05-28 20:17:36 +02:00
Andreas Stephanides
c7e6c5022b Merge branch 'master' of github.com:fetsite/fetsite
Conflicts:
	app/views/neuigkeiten/_form.html.erb
2015-05-28 20:16:33 +02:00
Andreas Stephanides
7c668809dc neuigkeit no fallback for editor 2015-05-24 13:43:37 +02:00
eee8248c0f small fixes 2015-05-24 13:42:26 +02:00
Andreas Stephanides
020e46c2cc long etherpad session 2015-05-13 16:43:36 +02:00
Andreas Stephanides
c86b175250 flag_important 2015-05-13 15:14:02 +02:00
Andreas Stephanides
7b6d2eb57e Merge branch 'master' of github.com:fetsite/fetsite 2015-05-13 15:09:34 +02:00
fa61337459 rake task for crawl 2015-05-13 11:27:02 +02:00
8de4946109 fix lva & crawlobject 2015-05-13 11:26:43 +02:00
79dd7c4f68 unicorn gem 2015-05-13 11:26:04 +02:00
Andreas Stephanides
8eae985a97 add flag important 2015-05-13 11:22:51 +02:00
Andreas Stephanides
c7f87e5aa6 treeview update 2015-05-13 11:22:24 +02:00
Andreas Stephanides
e425a015ba document toolbar 2015-05-13 11:22:10 +02:00
Andreas Stephanides
42b6503707 neuigkeit calentrynil? fix 2015-05-13 11:21:54 +02:00
Andreas Stephanides
bac4c5f924 document toolbar sticky 2015-05-13 11:21:42 +02:00
Andreas Stephanides
03c81104b2 sort meetings 2015-05-13 11:21:16 +02:00
Andreas Stephanides
759d3f8916 attachments 2015-05-13 11:21:08 +02:00
Andreas Stephanides
c7aec6bb9b abiltiy themengruppe 2015-05-13 11:20:54 +02:00
Andreas Stephanides
53977df4c0 ability on thema 2015-05-13 11:20:03 +02:00
Andreas Stephanides
0f11ccfcfe themengruppe check if nil 2015-05-07 20:02:42 +02:00
Andreas Stephanides
69fa1ed634 studien load 2015-05-07 11:15:47 +02:00
Andreas Stephanides
7a3255ef6f studien 2015-05-06 15:23:14 +02:00
Andreas Stephanides
4b71964e26 studien visible 2015-05-06 15:10:16 +02:00
Andreas Stephanides
0656e849bd toc raw 2015-05-05 11:04:40 +02:00
Andreas Stephanides
649664c318 timezone fix 2015-05-05 10:39:40 +02:00
Andreas Stephanides
24ed5d29e3 toc added 2015-05-05 10:39:21 +02:00
Andreas Stephanides
e16762fdd0 crawler update 2015-05-04 13:41:07 +02:00
Andreas Stephanides
a2491ee84d inline tinymce document 2015-05-04 13:40:27 +02:00
Andreas Stephanides
9a9cee5768 view neuigekit meeting 2015-04-29 16:07:54 +02:00
Andreas Stephanides
8a32bff399 sanitize document 2015-04-29 16:07:39 +02:00
Andreas Stephanides
19959b083e time zone 2015-04-29 15:25:10 +02:00
Andreas Stephanides
2d2931cdb8 icon form 2015-04-29 15:24:59 +02:00
Andreas Stephanides
e5df9d3190 use Time.now instead of date 2015-04-28 20:14:20 +02:00
Andreas Stephanides
caaea67994 style update 2015-04-27 17:23:25 +02:00
Andreas Stephanides
160005b79f ignore bin 2015-04-26 18:09:18 +02:00
Andreas Stephanides
4526681198 crawlobject config 2015-04-26 18:09:11 +02:00
Andreas Stephanides
d56d77daef create_pdf 2015-04-26 18:08:46 +02:00
Andreas Stephanides
408a32ae5f ignore 2015-04-22 18:47:02 +02:00
Andreas Stephanides
9e1100f786 rubrik show cache key 2015-04-22 18:45:43 +02:00
Andreas Stephanides
7753c80120 crawl routes 2015-04-22 18:43:41 +02:00
Andreas Stephanides
224f2c6f83 tiss link 2015-04-22 18:43:32 +02:00
Andreas Stephanides
036f90e6e5 crawler 2015-04-22 18:43:24 +02:00
Andreas Stephanides
de215c16eb ability for crawlobject 2015-04-22 18:42:18 +02:00
Andreas Stephanides
c88a337de7 fix app helper 2015-04-22 18:41:49 +02:00
Andreas Stephanides
7321a63b37 Merge branch 'master' of github.com:fetsite/fetsite into crawler 2015-04-21 18:56:22 +02:00
c6574cee00 fetprofile validated date 2015-04-21 17:17:01 +02:00
f0bb767ba4 fix cache key 2015-04-20 20:55:17 +02:00
Andreas Stephanides
d757a31e75 Merge branch 'master' into crawler 2015-04-17 11:07:30 +02:00
Andreas Stephanides
682d5687fc remove h from english time 2015-04-17 10:50:05 +02:00
Andreas Stephanides
6bb7cb917c fix meeting translation 2015-04-14 18:26:03 +02:00
Andreas Stephanides
d8aa87d25a translation date 2015-04-14 18:19:37 +02:00
Andreas Stephanides
e56ff2597b on->am 2015-04-14 18:16:30 +02:00
Andreas Stephanides
bbc8dc27cc date->datum.on 2015-04-14 18:15:18 +02:00
Andreas Stephanides
3a747cb04f date on 2015-04-14 18:08:27 +02:00
Andreas Stephanides
6cc2dad611 date.en 2015-04-14 18:05:39 +02:00
Andreas Stephanides
659653606a move translation for date.on 2015-04-14 18:03:21 +02:00
Andreas Stephanides
34852650d9 Merge branch 'master' of github.com:fetsite/fetsite 2015-04-14 17:58:28 +02:00
Andreas Stephanides
b02dcad387 add a treeview 2015-04-14 17:56:35 +02:00
404b6a858b Merge branch 'master' of https://github.com/fetsite/fetsite 2015-04-10 09:35:28 +02:00
Andreas Stephanides
fdecf48e43 caching 2015-04-10 09:34:59 +02:00
4ac77d6c80 Merge branch 'master' of https://github.com/fetsite/fetsite 2015-04-10 08:48:56 +02:00
Andreas Stephanides
4e8938fdd6 tabs cache #259 fix 2015-04-10 00:15:40 +02:00
61593d9ff4 Merge branch 'master' of https://github.com/fetsite/fetsite 2015-04-09 16:46:38 +02:00
Andreas Stephanides
a729c0ace6 remove empty div 2015-04-09 16:46:03 +02:00
Andreas Stephanides
4f8dd29240 translation meeting 2015-04-09 16:45:54 +02:00
Andreas Stephanides
bd9857c62a tweak neuigkeit sort 2015-04-09 16:45:34 +02:00
Andreas Stephanides
387312f631 #247 2015-04-09 09:14:53 +02:00
Andreas Stephanides
2c6406f268 cache rubrik tabs 2015-04-09 09:14:27 +02:00
Andreas Stephanides
ca4e2ef7cd faq fragezeichen fix 2015-04-09 09:14:01 +02:00
793f8a6a84 Merge branch 'master' of https://github.com/fetsite/fetsite 2015-04-07 23:34:55 +02:00
3a1736c3c5 lva show fix 2015-04-07 23:34:14 +02:00
Andreas Stephanides
88b81be49d new view for beispiel 2015-04-07 23:23:37 +02:00
Andreas Stephanides
5cd9ca9750 meeting new view 2015-04-07 23:23:28 +02:00
Andreas Stephanides
080150f11b attachments has_many for document, neuigkeit, thema 2015-04-07 23:23:14 +02:00
Andreas Stephanides
04b6bcac8a attachments for studium 2015-04-07 23:22:31 +02:00
Andreas Stephanides
6c3c98c919 attachment titlepic for neuigkeit 2015-04-07 23:22:08 +02:00
Andreas Stephanides
0df5e72e15 attachment new version 2015-04-07 23:21:33 +02:00
Andreas Stephanides
b04b23e647 foto exif 2015-04-07 23:19:27 +02:00
Andreas Stephanides
ee137959c4 addcrawlobjects 2015-04-01 00:01:41 +02:00
Andreas Stephanides
bd7aac9bb7 lvs fix 2015-03-30 16:53:00 +02:00
4cd5bffff2 Merge branch 'master' of https://github.com/fetsite/fetsite 2015-03-30 11:24:03 +02:00
32f9e010f8 compact fix 2015-03-30 11:23:49 +02:00
Andreas Stephanides
69c9e346d7 Merge branch 'master' of github.com:fetsite/fetsite 2015-03-30 11:20:54 +02:00
Andreas Stephanides
fe65602b7e fix calentries empty? 2015-03-30 11:19:50 +02:00
Andreas Stephanides
c5fced7176 fix illegal href in div 2015-03-30 11:19:39 +02:00
Andreas Stephanides
5dd021d385 #245 fixed - direkt veröffentlichung von Ankündigungen 2015-03-30 11:19:19 +02:00
7000870853 Merge branch 'master' of https://github.com/fetsite/fetsite
Conflicts:
	app/views/lvas/show.html.erb
2015-03-20 17:29:37 +01:00
f1ba8f7719 fix 404 message for mobile 2015-03-20 17:27:25 +01:00
3d11c09c26 fix lva view 2015-03-20 17:27:12 +01:00
Andreas Stephanides
044d7fc555 lva markup 2015-03-20 17:25:21 +01:00
Andreas Stephanides
c5dd8e9637 higher priority for articles 2015-03-20 17:25:13 +01:00
Andreas Stephanides
e5606ad966 cache menu 2015-03-20 17:24:57 +01:00
Andreas Stephanides
ac9ec1be45 hreflang tag 2015-03-20 17:24:48 +01:00
Andreas Stephanides
5a57062726 remove markup from neuigkeit snippet 2015-03-20 17:24:23 +01:00
Andreas Stephanides
22e782cbee url meta tag 2015-03-16 07:43:04 +01:00
Andreas Stephanides
d58cdb07fb cache key neuigkeitenjs 2015-03-16 07:42:58 +01:00
Andreas Stephanides
4833c8d679 beispiel cache key 2015-03-16 07:42:07 +01:00
Andreas Stephanides
e3faacf586 cache key fix locale calendar 2015-03-15 21:17:46 +01:00
Andreas Stephanides
6a785b55df cache key fix 2015-03-15 21:15:41 +01:00
Andreas Stephanides
e4f54b1ca8 neuigkeit cache 2015-03-15 20:57:26 +01:00
Andreas Stephanides
351174bd17 cahce locale 2015-03-15 20:53:51 +01:00
Andreas Stephanides
99a9ad6c07 cache key fix2 2015-03-15 20:51:20 +01:00
Andreas Stephanides
58f7fb8b27 calentries fix2 2015-03-15 20:17:28 +01:00
Andreas Stephanides
0c643d4347 fix calender cache key 2015-03-15 20:15:36 +01:00
Andreas Stephanides
94c488ce59 FIX calentries cache 2015-03-15 20:10:29 +01:00
Andreas Stephanides
b5884a4ae5 calentries cache key 2015-03-15 20:01:44 +01:00
Andreas Stephanides
012f46d17f calendar cache 2015-03-15 19:52:40 +01:00
Andreas Stephanides
2e9910b4ea style box 2015-03-15 19:50:52 +01:00
Andreas Stephanides
1981efafac themen print + gremien view 2015-03-15 19:50:42 +01:00
Andreas Stephanides
001c2e3070 startpage new 2015-03-15 19:50:17 +01:00
Andreas Stephanides
76c0565a7c documents show toolbar 2015-03-15 19:49:18 +01:00
Andreas Stephanides
27d478281e document styling print version 2015-03-15 13:10:37 +01:00
Andreas Stephanides
34c0374877 meeting style 2015-03-15 13:09:05 +01:00
Andreas Stephanides
3cc9de7d29 Merge branch 'master' of github.com:fetsite/fetsite
Conflicts:
	app/controllers/application_controller.rb
2015-03-09 17:40:52 +01:00
Andreas Stephanides
d5e0d20884 app controler url parameter 2015-03-09 17:39:33 +01:00
63e3d68053 fixes 2015-03-09 17:37:02 +01:00
Andreas Stephanides
c9f58dea34 fix published scope 2015-03-09 00:42:18 +01:00
Andreas Stephanides
8046b1ac7f only published news in sitemap 2015-03-09 00:36:13 +01:00
Andreas Stephanides
1f790c3f9b sitemap news name 2015-03-09 00:04:38 +01:00
Andreas Stephanides
6e9b2b8d7b fix update cache 2015-03-08 22:57:40 +01:00
Andreas Stephanides
b76239c850 neuigkeit relevant date 2015-03-08 22:33:50 +01:00
Andreas Stephanides
badb43c7e3 rubriken tabs 2015-03-08 22:13:30 +01:00
Andreas Stephanides
f2131f7725 lva fix 2015-03-08 22:13:16 +01:00
Andreas Stephanides
9b46f868da thema doku 2015-03-08 22:13:05 +01:00
Andreas Stephanides
d02b3a7e69 calentry neuigkeit order 2015-03-08 22:12:55 +01:00
Andreas Stephanides
fc19206edd gremium tags 2015-03-08 22:11:56 +01:00
Andreas Stephanides
8bf5583e00 caching fuer neuigkeiten and bsp 2015-03-06 16:41:08 +01:00
Andreas Stephanides
bd3c3a25e1 document versions 2015-03-06 16:40:47 +01:00
Andreas Stephanides
06dd5ff5bb 2003 theme inaktive 2015-03-06 16:40:17 +01:00
Andreas Stephanides
f663da2bb0 Imageobject on profile 2015-03-05 16:11:33 +01:00
Andreas Stephanides
89640623be cache update fuer neuigkeit 2015-03-05 15:55:34 +01:00
83eaca3cba ability fix 2015-03-05 15:51:03 +01:00
Andreas Stephanides
02c5cc2d55 neuigkeiten sort und ability 2015-03-04 15:51:44 +01:00
Andreas Stephanides
c01590f36c fetprofile fix 2015-03-04 15:50:53 +01:00
Andreas Stephanides
6736e4cf04 Merge branch 'master' of github.com:fetsite/fetsite 2015-03-03 20:06:14 +01:00
Andreas Stephanides
ee69c09aa4 neuigkeit cache added 2015-03-03 20:06:08 +01:00
0d6e11299a fix neuigkeiten 2015-03-03 18:12:22 +01:00
Andreas Stephanides
8718a77e4f neuigkeit update 2015-03-02 19:12:07 +01:00
Andreas Stephanides
1926c51836 foto update 2015-03-02 19:03:31 +01:00
Andreas Stephanides
97b646ec7d gallery div fix 2015-02-28 17:56:26 +01:00
Andreas Stephanides
c55a2479e8 shareable 2015-02-28 16:22:01 +01:00
Andreas Stephanides
bf774d27eb Merge branch 'master' of github.com:fetsite/fetsite 2015-02-28 15:14:37 +01:00
Andreas Stephanides
97bef49aba fix gallery histitem 2015-02-28 15:14:02 +01:00
fa33d76656 merge Merge branch 'master' of https://github.com/fetsite/fetsite
Conflicts:
	app/views/galleries/show.html.erb
2015-02-28 15:07:50 +01:00
Andreas Stephanides
c71cef48fa do not fix links for themen 2015-02-28 15:02:52 +01:00
Andreas Stephanides
62b6f8ca88 gallery fixes 2015-02-28 15:02:22 +01:00
Andreas Stephanides
f07925701d tinymce relative urls 2015-02-28 15:01:56 +01:00
Andreas Stephanides
be24c23751 gitignore update 2015-02-28 13:31:19 +01:00
Andreas Stephanides
daf258820a gallery foto view history fix 2015-02-28 13:27:40 +01:00
Andreas Stephanides
444db14e98 foto fb button 2015-02-25 17:15:14 +01:00
5c112be55c Merge branch 'master' of https://github.com/fetsite/fetsite 2015-02-25 17:10:44 +01:00
Andreas Stephanides
2f37259a53 gallery og tag 2015-02-25 17:10:27 +01:00
7993b2f543 Merge branch 'master' of https://github.com/fetsite/fetsite 2015-02-25 17:09:44 +01:00
3d21645596 gall2 2015-02-25 17:09:31 +01:00
Andreas Stephanides
819f9885b2 gallery og tag 2015-02-25 17:08:29 +01:00
b158d2cb05 Merge branch 'master' of https://github.com/fetsite/fetsite 2015-02-25 17:01:34 +01:00
Andreas Stephanides
d0732cbc57 gallery og tag 2015-02-25 17:00:43 +01:00
ce9d5fc947 Merge branch 'master' of https://github.com/fetsite/fetsite 2015-02-25 16:34:32 +01:00
Andreas Stephanides
5775c1b419 gallery public 2015-02-25 16:34:12 +01:00
735a9493ab Merge branch 'master' of https://github.com/fetsite/fetsite 2015-02-25 16:19:28 +01:00
3e879d620e gallery shwo 0 2015-02-25 16:19:19 +01:00
Andreas Stephanides
6286e2dadf gallery view 2015-02-25 16:18:35 +01:00
Andreas Stephanides
554c7ef937 ability foto 3 2015-02-25 16:15:06 +01:00
Andreas Stephanides
855117a117 ability foto 2 2015-02-25 16:12:12 +01:00
Andreas Stephanides
0575546603 ability fotogallery 2015-02-25 16:07:55 +01:00
Andreas Stephanides
3b332d5272 sitemap fix 2015-02-25 12:41:33 +01:00
Andreas Stephanides
d2816e2d21 sitemap neuigkeit name 2015-02-25 12:40:06 +01:00
c04c8d8f91 fixes in views 2015-02-25 12:16:17 +01:00
Andreas Stephanides
2f7fcc3ca9 gallery fix double 2015-02-25 12:03:26 +01:00
Thomas Blazek
0d1bf9739a fixed no image on the download-view (data-type -> type) 2015-02-25 12:00:53 +01:00
Thomas Blazek
dbf52f11f9 Merge branch 'master' of https://github.com/andreassteph/fetsite into andi_spinnt 2015-02-25 11:43:02 +01:00
Andreas Stephanides
374f535dac sitemap add themen 2015-02-25 11:42:20 +01:00
Andreas Stephanides
ad375d6c10 neuigkeiten Themen view fix 2015-02-25 11:42:12 +01:00
Andreas Stephanides
564c355d2d fetprofile schema 2015-02-25 11:41:59 +01:00
Andreas Stephanides
e410aef098 foto abiltiy 2015-02-25 11:41:13 +01:00
Thomas Blazek
710ef968dc Merge branch 'master' of https://github.com/andreassteph/fetsite into andi_spinnt 2015-02-25 10:37:12 +01:00
Andreas Stephanides
2ab6be038f neuigkeiten schema.org 2015-02-24 13:50:29 +01:00
Andreas Stephanides
6197f1d15e themen index 2015-02-24 13:50:09 +01:00
Andreas Stephanides
15327c75de alle themen anzeigen 2015-02-24 13:49:29 +01:00
Andreas Stephanides
67d0d19bd7 foto gallery - schema.org und download button 2015-02-24 13:46:43 +01:00
Andreas Stephanides
742962255b show topic default theme 2015-02-23 09:22:07 +01:00
Andreas Stephanides
52a33a027c faq fix 2015-02-23 09:21:54 +01:00
Andreas Stephanides
53ef07ab1a schema.org for neuigkeit 2015-02-23 09:21:48 +01:00
Andreas Stephanides
90f7485c06 themengruppe fix 2015-02-23 09:21:32 +01:00
Andreas Stephanides
63d4e90d72 show sticky topics 2015-02-23 09:21:24 +01:00
Andreas Stephanides
088b3562cc admin fixes 2015-02-23 09:21:14 +01:00
Andreas Stephanides
a0427336c8 sticky topics 2015-02-23 09:19:30 +01:00
Andreas Stephanides
81e97837de filter log fix 2015-02-17 19:31:32 +01:00
e1ffc5ae85 gallery order 2015-02-17 19:04:04 +01:00
e38ec2594d Merge branch 'master' of https://github.com/fetsite/fetsite 2015-02-17 19:02:21 +01:00
743914dc58 Themen show corrected 2015-02-17 19:01:57 +01:00
Andreas Stephanides
1cb6cecf81 Merge branch 'opengraph' 2015-02-17 19:00:37 +01:00
Andreas Stephanides
aa6d291495 admin link 2015-02-17 18:59:58 +01:00
Andreas Stephanides
a82bafd7ac absolut url helper 2015-02-17 18:59:49 +01:00
Andreas Stephanides
415da41236 log file view 2015-02-17 18:59:28 +01:00
Andreas Stephanides
ebe8d1f8df opengraph 2015-02-14 18:24:46 +01:00
Andreas Stephanides
5c8b8dcfe6 fixes 2015-02-14 17:26:37 +01:00
Andreas Stephanides
b4683bd396 rubrik / Themen -> accessible by 2015-02-14 17:26:33 +01:00
Andreas Stephanides
14ebb13bc1 meeting fixes 2015-02-14 17:25:51 +01:00
Andreas Stephanides
195b982ef4 thema show 2015-02-11 20:59:40 +01:00
Andreas Stephanides
29a35f76d8 modify attachments 2015-02-11 20:53:25 +01:00
Andreas Stephanides
5439d33a3c thema show width 2015-02-11 18:54:10 +01:00
Andreas Stephanides
01d8b58777 meta tags für themen 2015-02-11 15:26:29 +01:00
Andreas Stephanides
ddd786994c Merge branch 'master' of github.com:fetsite/fetsite 2015-02-11 01:16:49 +01:00
20240b75de social plugin 2015-02-11 01:14:52 +01:00
Andreas Stephanides
44d35e196f picture url bei neuigkeiten ohne locale und theme 2015-02-10 14:05:20 +01:00
Andreas Stephanides
7326b08729 themen spezifische rollen 2015-02-10 14:04:54 +01:00
Andreas Stephanides
2b483ae9e9 themen auf eigenen seiten anzeigen 2015-02-10 14:04:18 +01:00
Andreas Stephanides
ebf486b347 outdate topics after 7 months 2015-02-09 15:38:38 +01:00
Andreas Stephanides
f1a149908d meetingtyp management 2015-02-09 15:38:21 +01:00
Andreas Stephanides
6c39c40403 precompile blueimp 2015-02-01 20:22:31 +01:00
Thomas Blazek
3720d9cb6b Merge pull request #5 from bernis/master
Fixes bug in Neuigkeiten mobile view, see picture
2015-01-28 12:39:57 +01:00
Bernhard Stampfer
1731714367 Layout changes for blue1
Ist das so ok, oder soll ich besser ein neues theme machen?
2015-01-28 09:35:08 +01:00
Bernhard Stampfer
db0a50acf2 LVA ECTS/Std right-aligned
Uses style="overflow:auto" to keep the Box arround the Modul sized correctly,
even if left and right aligned text uses more than one line.
This seems to hide the bulltes in chromium for some reason (shown in firefox)
2015-01-28 09:18:26 +01:00
Bernhard Stampfer
cdcbce6803 Fixes bug in Neuigkeiten mobile view, see picture
If display width forced header (Rubrik / User+Date) to display in two lines
whole content of Neuigkeit was squeezed to the width of the whitespace left
to the lower line
2015-01-27 17:26:55 +01:00
Thomas Blazek
d91a150d51 addendum 2015-01-27 10:59:09 +01:00
Thomas Blazek
deb8ccf47d started working on menu 2015-01-27 10:58:45 +01:00
Thomas Blazek
6f52496a7a updating beispielupload 2015-01-22 11:19:49 +01:00
Thomas Blazek
0280ebb6a1 Merge pull request #4 from bernis/master
Die spans/offsets + Optische Veränderungen (Hauptseite)
2015-01-21 10:37:48 +01:00
Bernhard Stampfer
a196b56669 Kleinere optische Veränderungen
Bitte umbedingt testen
Etwas größere Maximalbreite des content-wrap (kann man das sauberer ändern?)
5/7 Aufteilung des Contents
Word-wrap in den neuen Beispielen
Einige margins angepasst (oben sind die Boxen jetzt bündig)
2015-01-20 14:58:04 +01:00
Bernhard Stampfer
767df6439b Platzhalter SPAN1s durch OFFSETs ersetzt, reduziert Leerstellen in Mobilansicht
Die span10 mit dem Seiteninhalt wurden von zwei span1 davor und dahinter
zentriert, diese verursachen aber Abstände in der mobilen Ansicht (sind dort
ober und unter dem span10), offset ist denk ich sauberer
2015-01-20 13:05:40 +01:00
Thomas Blazek
028cf58952 started working on beispiel 2015-01-19 18:40:15 +01:00
Thomas Blazek
229a44df4e Alignment/added fix for dropdown 2015-01-19 14:59:14 +01:00
Andreas Stephanides
69b7604761 fix calendar for all 2015-01-18 15:08:18 +01:00
Andreas Stephanides
7a8889dcc4 meeting cont 2015-01-18 14:51:56 +01:00
Andreas Stephanides
b46e19b466 integrate calendar with meetings 2015-01-18 14:32:20 +01:00
Thomas Blazek
e5966bccce I18n korrekturen 2015-01-18 00:30:42 +01:00
Thomas Blazek
7c5ac3b8d7 Merge branch 'master' of https://github.com/fetsite/fetsite 2015-01-18 00:21:19 +01:00
Thomas Blazek
b3000ae542 Show lecturer picture if it exists 2015-01-18 00:19:41 +01:00
Andreas Stephanides
e93b9b7342 Merge branch 'testgallery' 2015-01-17 12:18:14 +01:00
Andreas Stephanides
3c2250b4fc Revert "change meetings"
This reverts commit 585b386e7c.

Conflicts:
	app/controllers/neuigkeiten_controller.rb
2015-01-17 12:16:37 +01:00
edc8f6c2e3 small fixes 2015-01-17 12:04:53 +01:00
057a66966d fix document searchable 2015-01-17 12:04:10 +01:00
Thomas Blazek
9ffebfd4e7 started writing the init script 2015-01-16 15:25:44 +01:00
Thomas Blazek
b7f9cf942b Bildergallerie auf Kurs
Für alle mit löschrechten: 2 Buttons, einer zeigt auf originaldatei,
einer löscht das bild.
2015-01-16 14:41:37 +01:00
Thomas Blazek
9c6038d6dd Gallery show enhancements
a) Worked on better pagination, knows now 25, 50, 100  and "all"
b) Viewer always shows ALL pictures, sorted to fit the order of the
pagination
2015-01-16 12:10:02 +01:00
Thomas Blazek
a9969a6c72 updates 2015-01-16 09:46:01 +01:00
Thomas Blazek
75667ae6ce work in progress 2015-01-16 00:03:09 +01:00
Andreas Stephanides
978d923082 fix blueimp gallery 2015-01-15 16:38:16 +01:00
Andreas Stephanides
c95782744a gemfle update 2015-01-15 16:13:28 +01:00
Andreas Stephanides
fe4d72dcb3 application css scss 2015-01-15 15:57:00 +01:00
Andreas Stephanides
43a551fc28 Merge branch 'master' of https://github.com/Inachos/fetsite into testgallery
Conflicts:
	app/views/layouts/application.html.erb
2015-01-15 15:40:36 +01:00
Thomas Blazek
48e3c1149a added start_topic.yml to gitignore 2015-01-15 15:36:54 +01:00
Thomas Blazek
3dff2d2bbe Fix: Bildergallerie
Bildergallerie läuft jetzt auf Blueimp-gallery.
Viel spaß
2015-01-15 15:36:20 +01:00
Andreas Stephanides
565024c282 blue2 2015-01-15 15:20:19 +01:00
Thomas Blazek
9873c4f1c1 Merge branch 'master' of https://github.com/Inachos/fetsite 2015-01-15 14:38:41 +01:00
Thomas Blazek
f6a95dee57 commit 2015-01-15 14:30:53 +01:00
Thomas Blazek
3a00794851 dfsd 2015-01-15 14:01:16 +01:00
Thomas Blazek
2931ee6cd6 Need to enforce the jquery-fileupload version
0.4.2 broke uploads for me
2015-01-15 12:56:52 +01:00
Thomas Blazek
bcffee7bc9 Merge branch 'master' of https://github.com/fetsite/fetsite 2015-01-14 09:12:56 +01:00
70e34875f1 search results fix 2015-01-14 09:11:09 +01:00
Thomas Blazek
9cc108b2ed Merge branch 'master' of https://github.com/andreassteph/fetsite 2015-01-14 09:10:57 +01:00
1d11b270cf Merge branch 'master' of https://github.com/fetsite/fetsite 2015-01-14 09:08:51 +01:00
Andreas Stephanides
1731d1f3d2 Merge branch 'master' of github.com:fetsite/fetsite 2015-01-14 09:08:05 +01:00
Andreas Stephanides
47b692b243 Suchergebnis darstellung 2015-01-14 09:07:34 +01:00
Thomas Blazek
f95c8469e3 Merge branch 'master' of https://github.com/fetsite/fetsite 2015-01-12 16:54:21 +01:00
Thomas Blazek
25cf052f95 Merge pull request #212 from bernis/master
Sprache/Login im Menü rechtsbündig
2015-01-12 12:26:29 +01:00
Thomas Blazek
85d2bb5bf9 Check for 0 themen 2015-01-11 22:18:31 +01:00
Thomas Blazek
79ba089b70 Merge branch 'master' of https://github.com/Inachos/fetsite
Conflicts:
	Gemfile.lock
	config/routes.rb
2015-01-11 22:18:05 +01:00
Bernhard Stampfer
c879189705 Sprache/Login im Menü rechtsbündig 2015-01-05 18:37:05 +01:00
5b0840a7d2 Merge branch 'master' of https://github.com/fetsite/fetsite 2015-01-04 16:31:51 +01:00
Andreas Stephanides
fd20bd5c90 ability agenda sehen 2015-01-04 16:31:19 +01:00
edecf20a44 Merge branch 'master' of https://github.com/fetsite/fetsite 2015-01-04 16:26:38 +01:00
Andreas Stephanides
940e7211d2 fix meeting auth 2015-01-04 16:25:44 +01:00
40739523c2 fix document typ 2015-01-03 11:40:25 +01:00
81f1db8ff6 Merge remote-tracking branch 'origin' 2015-01-03 10:54:48 +01:00
3799e5f842 configuration for production 2015-01-03 10:52:34 +01:00
Andreas Stephanides
aa080a1eec Buttons doument show 2015-01-03 10:49:41 +01:00
Andreas Stephanides
0cca373f33 document views 2015-01-03 10:08:00 +01:00
Andreas Stephanides
d72f78488d document/meeting updates 2015-01-03 10:06:58 +01:00
Andreas Stephanides
de8802c34a Merge branch 'master' into documentmeeting 2014-12-18 07:50:16 +01:00
52ec22646b Merge branch 'master' of https://github.com/fetsite/fetsite 2014-12-17 17:01:13 +01:00
Andreas Stephanides
9307acf29f fix2 2014-12-17 17:00:50 +01:00
1b3aeadba7 Merge branch 'master' of https://github.com/fetsite/fetsite 2014-12-17 16:58:41 +01:00
Andreas Stephanides
8232b0d0c0 faqs fix 2014-12-17 16:58:24 +01:00
33c1cc6fea Merge branch 'master' of https://github.com/fetsite/fetsite 2014-12-17 16:57:34 +01:00
Andreas Stephanides
bf7111816f faqs 2014-12-17 16:57:13 +01:00
5fdfc944e7 Merge branch 'master' of https://github.com/fetsite/fetsite 2014-12-17 16:51:09 +01:00
Andreas Stephanides
3cddab7276 extend whitelist sanitze 2014-12-17 16:44:34 +01:00
Andreas Stephanides
349753106e gitignore data.yml 2014-12-17 16:42:06 +01:00
Andreas Stephanides
5e6a32c244 yaml_db added 2014-12-17 16:41:42 +01:00
Andreas Stephanides
afb4508e71 updated tinymce config 2014-12-17 16:41:33 +01:00
Andreas Stephanides
d26ab277af merge errors 2014-12-16 09:23:47 +01:00
Andreas Stephanides
881df624b3 Merge remote-tracking branch 'origin/documentmeeting' into documentmeeting
Conflicts:
	app/controllers/documents_controller.rb
	app/controllers/meetings_controller.rb
	app/models/ability.rb
	app/models/document.rb
	app/models/meeting.rb
	app/models/meetingtyp.rb
	app/views/documents/_document.html.erb
	app/views/documents/_nested_form.html.erb
	app/views/documents/edit.js.erb
	app/views/documents/new.js.erb
	app/views/meetings/_meeting.html.erb
	app/views/themen/_small.html.erb
	config/routes.rb
2014-12-16 09:00:43 +01:00
Andreas Stephanides
07944bce89 meeting 2014-12-14 21:30:21 +01:00
Andreas Stephanides
aa98919e88 searchable 2014-12-14 21:30:09 +01:00
Andreas Stephanides
a9ef5c14ba meeting ix 2014-12-12 15:24:20 +01:00
Andreas Stephanides
e411a98b4e Treffen sichtbar 2014-12-08 22:58:22 +01:00
Andreas Stephanides
ab396c002e meeting views 2014-12-08 22:58:21 +01:00
Andreas Stephanides
b259c1080a merge 2014-12-08 22:58:21 +01:00
Andreas Stephanides
87dd70ea44 meetings added, documents added 2014-12-08 22:58:21 +01:00
Andreas Stephanides
c2ea1782ff documents 2014-12-08 22:58:21 +01:00
60d8c6754c send to all 2014-12-08 18:45:10 +01:00
Andreas Stephanides
6ad5a76cc8 logo2014 2014-12-08 17:17:18 +01:00
Andreas Stephanides
cba52fccc2 Merge branch 'master' of github.com:fetsite/fetsite 2014-12-08 17:12:11 +01:00
Andreas Stephanides
2bc428456c logo2014 added , sitemap fix 2014-12-08 17:08:26 +01:00
41d6407093 Merge branch 'master' of https://github.com/fetsite/fetsite 2014-12-08 16:14:28 +01:00
d17e5330e9 sitemap update 2014-12-08 16:14:15 +01:00
Andreas Stephanides
34891f09bf themengruppen statt themen ind der sitmap 2014-12-08 16:09:00 +01:00
Andreas Stephanides
ad6fc74303 whenever 2014-12-08 14:58:29 +01:00
Andreas Stephanides
276496635f extend sitemap 2014-12-08 14:29:01 +01:00
Andreas Stephanides
bd3c6054fb sitemap generator 2014-12-08 13:42:34 +01:00
Andreas Stephanides
71b63187fa fix order 1 2014-12-05 15:04:18 +01:00
Andreas Stephanides
ec82bc5edd themengruppen-themen-reverse 2014-12-05 14:52:15 +01:00
Andreas Stephanides
f0bb4654b4 Merge branch 'master' of github.com:fetsite/fetsite 2014-12-05 14:50:04 +01:00
f90a545fe6 themen reverse 2014-12-05 14:47:54 +01:00
Andreas Stephanides
282d16c086 reformat searchable 2014-12-02 23:29:19 +01:00
2df6f7745e Fix SunSpot and minor fix in calentry 2014-12-02 12:03:14 +01:00
Andreas Stephanides
85c6985a06 lva nlink fix 2014-11-28 20:48:22 +01:00
Andreas Stephanides
dc124e3810 weitere classen durchsuchen 2014-11-28 14:27:44 +01:00
Andreas Stephanides
e9245919c3 ignore log 2014-11-28 14:27:44 +01:00
Andreas Stephanides
a41f964a84 sunspot install 2014-11-28 14:27:44 +01:00
Andreas Stephanides
e49d30a627 Merge branch 'comments' of github.com:andreassteph/fetsite into comments 2014-11-28 14:26:28 +01:00
Andreas Stephanides
80790dcada Revert "beispielcontroller fix :show_comments"
This reverts commit 4815f57a83.
2014-11-28 14:22:43 +01:00
Andreas Stephanides
699517fb56 Revert "removecomments"
This reverts commit 6ee1468ce3.
2014-11-28 14:22:43 +01:00
Andreas Stephanides
741a3abb6d meetings added, documents added 2014-11-26 20:36:04 +01:00
Andreas Stephanides
3a8f84d9b4 Merge branch 'master' of github.com:fetsite/fetsite 2014-11-24 13:43:48 +01:00
Andreas Stephanides
3aafa0cc4e facebook publish fix 2014-11-24 13:43:30 +01:00
Andreas Stephanides
9bef57284e remove article_author 2014-11-24 13:34:56 +01:00
c4e63eac6e neuigkeit mailer host parameter fix 2014-11-20 12:08:39 +01:00
Andreas Stephanides
684d198470 neuigkeit mail host parameter 2014-11-20 11:58:02 +01:00
Andreas Stephanides
8178898db2 link fix news mailer 2014-11-20 11:49:33 +01:00
Andreas Stephanides
1a6c8422b3 neuigkeit mailer text 2014-11-20 11:44:52 +01:00
Andreas Stephanides
65cb400126 documents 2014-11-20 11:40:49 +01:00
Andreas Stephanides
c49ec5e736 calentry js interface 2014-11-16 14:30:04 +01:00
Andreas Stephanides
4c47919543 nlink-modul 2014-11-15 12:53:58 +01:00
Andreas Stephanides
5ee1b68d6e fetprofile picture url 2014-11-13 10:33:19 +01:00
Andreas Stephanides
fd4bd81e96 fetprofile path 2014-11-13 10:19:26 +01:00
Andreas Stephanides
02eba03439 Merge branch 'master' of github.com:fetsite/fetsite
Conflicts:
	app/controllers/application_controller.rb
2014-11-10 20:23:47 +01:00
Andreas Stephanides
24c76a7f5d login fix 2014-11-10 20:20:36 +01:00
9f61769425 app controller 2014-11-08 11:17:53 +01:00
e7933eb7ad Merge branch 'master' of https://github.com/fetsite/fetsite
Conflicts:
	app/views/neuigkeiten/show.html.erb
2014-11-08 11:08:43 +01:00
0308eeaa47 fix picture url 2014-11-08 11:07:55 +01:00
Andreas Stephanides
68fb657c97 meta tag link fix 2014-11-08 11:02:02 +01:00
Andreas Stephanides
e1ee0bc7f9 studieninterface,title 2014-11-08 11:00:42 +01:00
Andreas Stephanides
483fc37345 studium info, modulgruppen 2014-11-08 10:38:22 +01:00
Andreas Stephanides
2a35a29bf5 metaimage neuigkeit nil 2014-11-08 10:30:27 +01:00
Andreas Stephanides
8aa52bc83c redirect after sign in 2014-11-08 10:30:01 +01:00
Andreas Stephanides
5b52a13a4c #180 fixed 2014-10-31 15:07:05 +01:00
Andreas Stephanides
ecb555bc06 #183 fixed 2014-10-31 15:00:46 +01:00
Andreas Stephanides
0463cf57fd meta tag fix 2014-10-30 12:16:27 +01:00
Andreas Stephanides
2855b72bb6 fix public thema 2014-10-29 13:44:17 +01:00
b0abb75d6b thma fix 2014-10-29 13:27:34 +01:00
Andreas Stephanides
6dfeafecb5 nur public thmen wenn themengruppe public 2014-10-29 13:22:18 +01:00
c709202644 Merge branch 'master' of https://github.com/fetsite/fetsite 2014-10-28 16:54:13 +01:00
Andreas Stephanides
dce5acefeb no robots 2014-10-28 16:53:07 +01:00
Andreas Stephanides
bff600a896 remove hallo welt 2014-10-28 08:44:19 +01:00
Andreas Stephanides
2688bca831 calentry inline form 2014-10-28 08:43:44 +01:00
7f831f8c7a Merge branch 'master' of https://github.com/fetsite/fetsite 2014-10-27 15:40:48 +01:00
Andreas Stephanides
2622ed1513 neuigkeiten max_width 2014-10-27 15:40:26 +01:00
Andreas Stephanides
9a2bf17e81 fetprofile redesign 2014-10-27 15:40:12 +01:00
a5294ae7a7 Merge branch 'master' of https://github.com/fetsite/fetsite 2014-10-27 14:57:27 +01:00
Andreas Stephanides
9c5063b047 fix search form 2014-10-27 14:49:48 +01:00
Andreas Stephanides
378f6c4894 meta data 2014-10-27 14:49:42 +01:00
Andreas Stephanides
27d5d2cda2 hide gallery 2014-10-27 14:49:28 +01:00
Andreas Stephanides
1e34dd4533 meta_tag no theme url 2014-10-27 14:08:30 +01:00
Andreas Stephanides
d1c8002f3b Revert "beispielcontroller fix :show_comments"
This reverts commit 4815f57a83.
2014-10-27 13:00:50 +01:00
Andreas Stephanides
d20c968fa4 Revert "removecomments"
This reverts commit 6ee1468ce3.
2014-10-27 13:00:50 +01:00
Andreas Stephanides
58417fd59f try to fix gallery 2014-10-27 13:00:03 +01:00
b3182c0d97 Merge branch 'master' of https://github.com/fetsite/fetsite 2014-10-26 13:16:06 +01:00
Andreas Stephanides
f000e91b6d #182 links versteckt 2014-10-26 13:15:12 +01:00
Andreas Stephanides
b4f9e793c3 fix link dialog #181 2014-10-26 13:14:37 +01:00
8b5df8d1f4 Merge branch 'master' of https://github.com/fetsite/fetsite 2014-10-21 13:31:46 +02:00
Andreas Stephanides
42ecb7dbcb themen scope+ fix search 2014-10-21 13:29:42 +02:00
Andreas Stephanides
ba8a20c3d1 sanitize 2014-10-21 13:29:14 +02:00
Andreas Stephanides
88b1a53fc7 Rate Beispiele text 2014-10-21 13:28:59 +02:00
Andreas Stephanides
54a2aee4c3 translate lva 2014-10-20 16:10:37 +02:00
c90aa756bc Merge branch 'master' of https://github.com/fetsite/fetsite 2014-10-19 22:22:03 +02:00
Andreas Stephanides
cd1982afc6 hard hardcoded host news mailer 2014-10-19 22:21:53 +02:00
7a80700219 Merge branch 'master' of https://github.com/fetsite/fetsite 2014-10-19 22:20:08 +02:00
Andreas Stephanides
a73a9b9594 hardcoded host 2014-10-19 22:19:44 +02:00
11d3081624 Merge branch 'master' of https://github.com/fetsite/fetsite 2014-10-19 22:16:47 +02:00
Andreas Stephanides
6a2be58a73 default host für mailer 2014-10-19 22:16:34 +02:00
529707ff5d Merge branch 'master' of https://github.com/fetsite/fetsite 2014-10-19 22:11:42 +02:00
Andreas Stephanides
c218e298a6 news mailer 2014-10-19 22:11:30 +02:00
0df979b7b7 Merge branch 'master' of https://github.com/fetsite/fetsite 2014-10-19 22:09:49 +02:00
Andreas Stephanides
a337e2a589 host request fix2 2014-10-19 22:09:34 +02:00
98c600bc22 Merge branch 'master' of https://github.com/fetsite/fetsite 2014-10-19 22:07:36 +02:00
Andreas Stephanides
4d34375cdc request host -> controller news_mailer 2014-10-19 22:04:06 +02:00
95b6028066 Merge branch 'master' of https://github.com/fetsite/fetsite 2014-10-19 22:02:17 +02:00
Andreas Stephanides
7247d67a64 Merge branch 'master' of https://github.com/HausdorffHimself/fetsite 2014-10-19 21:59:29 +02:00
Andreas Stephanides
e548933cbd neuigkeit thumb 2014-10-19 21:59:11 +02:00
Andreas Deutschmann
d321123d49 Fix Gremien Überschrift ohne Beschreibungen 2014-10-19 21:57:51 +02:00
Andreas Deutschmann
309d10bc39 Gremien "Alle Gremien" entfernt 2014-10-19 21:41:14 +02:00
Andreas Stephanides
3254cc86e8 sort & paginate nlinks @ gremium 2014-10-19 21:04:38 +02:00
a6f8c453ab Merge branch 'master' of https://github.com/fetsite/fetsite 2014-10-19 20:47:03 +02:00
e705e5a563 Merge branch 'master' of https://github.com/fetsite/fetsite 2014-10-19 20:45:47 +02:00
Andreas Stephanides
8a93f460ca default startpage 2014-10-19 20:41:22 +02:00
Andreas Stephanides
5b81cbcdad blue1 startpage 2014-10-19 20:39:21 +02:00
Andreas Stephanides
2b09735989 lva typ PR 2014-10-19 20:39:00 +02:00
Andreas Stephanides
6343896744 showversions, Neuigkeit 2014-10-19 19:50:24 +02:00
Andreas Stephanides
7436c5c01e rechte für actions versions neuigkeiten 2014-10-19 19:49:33 +02:00
Andreas Stephanides
ad751c0837 button ausblenden wenn nicht eingeloggt 2014-10-19 19:29:29 +02:00
a6a34f5974 Merge branch 'master' of https://github.com/fetsite/fetsite 2014-10-19 19:25:56 +02:00
Andreas Stephanides
96ef48cb31 is updated button für themen 2014-10-19 19:25:34 +02:00
dfcfc8892e Merge branch 'master' of https://github.com/fetsite/fetsite 2014-10-19 18:43:02 +02:00
Andreas Stephanides
fd248947f1 add semester 2014-10-19 18:42:25 +02:00
88249c1771 Merge branch 'master' of https://github.com/fetsite/fetsite 2014-10-19 17:59:36 +02:00
Andreas Stephanides
faf3151de0 lva Beispiele translate 2014-10-19 17:59:19 +02:00
6f1e819482 Merge branch 'master' of https://github.com/fetsite/fetsite 2014-10-19 17:50:06 +02:00
Andreas Stephanides
caa6c0ee4a html fix lva semester 2014-10-19 17:46:10 +02:00
d48e9fe026 Merge branch 'master' of https://github.com/fetsite/fetsite 2014-10-19 17:44:03 +02:00
Andreas Stephanides
ba8b7920ea lva semester fix 2014-10-19 17:43:47 +02:00
7581ee99e2 Merge branch 'master' of https://github.com/fetsite/fetsite 2014-10-19 17:39:10 +02:00
Andreas Stephanides
9cbe9942e3 modulname fix 2014-10-19 17:38:47 +02:00
6cbb761fc7 Merge branch 'master' of https://github.com/fetsite/fetsite 2014-10-19 17:36:30 +02:00
Andreas Stephanides
6613df4b55 lvamodul_fix 2014-10-19 17:36:03 +02:00
9cf06cc02f Merge branch 'master' of https://github.com/fetsite/fetsite 2014-10-19 17:16:56 +02:00
Andreas Stephanides
4fd089a096 fix lva show 2014-10-19 17:16:38 +02:00
ee40680230 Merge branch 'master' of https://github.com/fetsite/fetsite 2014-10-19 17:10:56 +02:00
Andreas Stephanides
2de81b5cc7 translate lva 2014-10-19 17:10:04 +02:00
Andreas Stephanides
1394dfc58c rm gemfile.lock 2014-10-19 17:00:05 +02:00
cea69a84fb Merge branch 'master' of https://github.com/fetsite/fetsite 2014-10-19 16:35:42 +02:00
Andreas Stephanides
e81c263ba0 is_wiki fix thmen 2014-10-19 16:35:23 +02:00
b8013a47fd merge gemfile.lock 2014-10-19 16:30:04 +02:00
Andreas Stephanides
55b8e17242 datum vom bsp 2014-10-19 16:29:09 +02:00
a696da2fa2 Merge branch 'master' of https://github.com/fetsite/fetsite 2014-10-19 16:17:38 +02:00
Andreas Stephanides
e7ffb850d5 calentry edit 2014-10-19 16:16:55 +02:00
Andreas Stephanides
e7bc4276db beispielform 2014-10-19 16:16:00 +02:00
74c1877500 Merge branch 'master' of https://github.com/fetsite/fetsite
Conflicts:
	Gemfile.lock
2014-10-19 16:04:38 +02:00
Andreas Stephanides
2fbd277e21 can manage lecturer 2014-10-19 16:03:58 +02:00
a40e5307bf Merge branch 'master' of https://github.com/fetsite/fetsite
Conflicts:
	Gemfile.lock
2014-10-19 15:45:59 +02:00
Andreas Stephanides
94d9653ae2 neuigkeiten show fix 2014-10-19 15:44:19 +02:00
Andreas Stephanides
64f6c86e0f modulgruppen / semesteransicht 2014-10-19 15:42:08 +02:00
Andreas Stephanides
d609b4a5ff metatag neuigkeit 2014-10-19 15:41:50 +02:00
Andreas Stephanides
de77bce5ca order beispiel 2014-10-19 15:41:31 +02:00
Andreas Stephanides
71d1595bac remove refresh button 2014-10-19 15:41:08 +02:00
Andreas Stephanides
327ee73c7a Remove Gemfile.lock 2014-10-17 10:24:48 +02:00
c64e2f9e5a merge fiy 2014-10-17 10:21:04 +02:00
Andreas Stephanides
46490d73bf Merge branch 'master' of github.com:andreassteph/fetsite 2014-10-17 10:18:00 +02:00
Andreas Stephanides
9007cb33c5 header studium show seitentitel 2014-10-17 10:17:24 +02:00
Andreas Stephanides
0aa28cf26c small fix neue verknüpfung dialog 2014-10-17 10:17:24 +02:00
Andreas Stephanides
47dd9d78dc remove wiki gems 2014-10-17 10:17:24 +02:00
Andreas Stephanides
d083d00bbb rmeove wiki 2014-10-17 10:17:24 +02:00
Andreas Stephanides
fcc2c5105c glock 2014-10-17 10:17:24 +02:00
Andreas Stephanides
6639011968 thmen sanitize 2014-10-17 10:17:24 +02:00
Andreas Stephanides
a785cc0bc5 beispielcontroller fix :show_comments 2014-10-17 10:17:24 +02:00
Andreas Stephanides
116d0562d9 removecomments 2014-10-17 10:17:24 +02:00
Andreas Stephanides
1f2cc5d202 meta tags neuigkeit 2014-10-17 10:17:24 +02:00
Andreas Stephanides
a8dd419f9e pagination update 2014-10-17 10:17:24 +02:00
Andreas Stephanides
fc48959e48 nlink fix 2014-10-17 10:17:23 +02:00
Andreas Stephanides
a65f1a8926 lva paper_trail fix 2014-10-17 10:17:23 +02:00
Andreas Stephanides
c40804b5cb membership gremium scope 2014-10-17 10:17:23 +02:00
Andreas Stephanides
f8d00e7b4f beispielsammlungs link 2014-10-17 10:17:23 +02:00
Andreas Stephanides
30a80edb3d datetimepicker fix 2014-10-17 10:17:23 +02:00
Andreas Stephanides
c929025cb6 birthday nil fix 2014-10-17 10:17:23 +02:00
Andreas Stephanides
fce2b0a02a themengruppe verwalten fix link 2014-10-17 10:17:23 +02:00
Andreas Stephanides
974fcaf3d0 Title für rubrik 2014-10-17 10:17:23 +02:00
Andreas Stephanides
7a7128aa32 Pagination fix 2014-10-17 10:17:23 +02:00
Andreas Stephanides
0658a8b423 fetprofiles 2014-10-17 10:17:23 +02:00
1d00b07719 pagination bootstrap update layout 2014-10-17 10:17:23 +02:00
753d4e212f commentslayout fix 2014-10-17 10:17:23 +02:00
0dfc58f125 gemlock 2014-10-17 10:17:23 +02:00
190a69e0ae comments_spec 2014-10-17 10:17:23 +02:00
7d56d10431 comments 2014-10-17 10:17:23 +02:00
2b562fd7e0 Interface Neuigkeiten & Attachment 2014-10-17 10:17:22 +02:00
ed5b2b8685 thmen nur rendern wenn erlaubt 2014-10-17 10:17:22 +02:00
371309ea7b geburtstag anzeigen 2014-10-17 10:17:22 +02:00
5bf20e1a98 contact page new 2014-10-17 10:17:22 +02:00
Andreas Stephanides
d26c11b93f header studium show seitentitel 2014-10-17 10:09:40 +02:00
Andreas Stephanides
599ec23167 small fix neue verknüpfung dialog 2014-10-17 10:09:24 +02:00
Andreas Stephanides
35a95c0922 remove wiki gems 2014-10-16 22:00:58 +02:00
Andreas Stephanides
e1d5cc8d7b rmeove wiki 2014-10-16 21:50:41 +02:00
Andreas Stephanides
629c7941cf glock 2014-10-16 21:44:29 +02:00
Andreas Stephanides
33b30119ea thmen sanitize 2014-10-16 21:44:22 +02:00
Andreas Stephanides
4815f57a83 beispielcontroller fix :show_comments 2014-10-14 13:29:48 +02:00
Andreas Stephanides
6ee1468ce3 removecomments 2014-10-04 12:09:56 +02:00
Andreas Stephanides
6a4d2ff536 meta tags neuigkeit 2014-10-04 09:49:19 +02:00
Andreas Stephanides
fbd51caf3e pagination update 2014-09-24 14:39:59 +02:00
Andreas Stephanides
3365303b61 nlink fix 2014-09-14 18:32:31 +02:00
Andreas Stephanides
017e3cb8c1 lva paper_trail fix 2014-09-14 18:32:03 +02:00
Andreas Stephanides
e8576d532f membership gremium scope 2014-09-14 18:30:56 +02:00
Andreas Stephanides
b11773ac85 beispielsammlungs link 2014-09-14 18:29:29 +02:00
Andreas Stephanides
6c8bd756e5 datetimepicker fix 2014-09-14 12:37:23 +02:00
Andreas Stephanides
4135260421 birthday nil fix 2014-09-14 02:09:16 +02:00
Andreas Stephanides
853bc1e5da themengruppe verwalten fix link 2014-09-14 02:00:21 +02:00
Andreas Stephanides
900f15285d Title für rubrik 2014-09-13 18:14:42 +02:00
Andreas Stephanides
b66a60a215 Pagination fix 2014-09-13 18:14:27 +02:00
Andreas Stephanides
4a635000ce Merge remote-tracking branch 'origin/paginate' into extrafeature 2014-09-13 16:52:01 +02:00
Andreas Stephanides
9869acfc4a Merge remote-tracking branch 'origin/master' into extrafeature 2014-09-13 16:36:31 +02:00
Andreas Stephanides
f5da3ac3dc fetprofiles 2014-09-13 16:35:10 +02:00
Andreas Stephanides
f0e5c0b192 Merge remote-tracking branch 'origin' 2014-09-08 22:30:45 +02:00
Andreas Stephanides
d9c7d48142 Merge branch 'fetsite' 2014-09-08 22:30:12 +02:00
Thomas Blazek
bb3229e826 Merge branch 'master' of https://github.com/thisisaname/fetsite
Conflicts:
	app/controllers/neuigkeiten_controller.rb
	config/routes.rb
2014-08-27 15:31:52 +02:00
Sai
585b386e7c change meetings 2014-08-27 15:22:47 +02:00
c87ce13045 pagination bootstrap update layout 2014-08-21 16:29:29 +05:30
bfb4d54244 commentslayout fix 2014-08-13 15:02:48 +05:30
b409244246 gemlock 2014-08-11 14:39:27 +05:30
3f9d61289c comments_spec 2014-08-11 14:39:27 +05:30
1871c64e6c comments 2014-08-11 14:39:27 +05:30
f5beed1264 UnLike added 2014-08-11 14:39:27 +05:30
658ce0ed27 manage bsp 2014-08-11 14:39:26 +05:30
af9da058ab Interface Neuigkeiten & Attachment 2014-08-11 14:38:14 +05:30
360f6880fe rechte fuer attachment 2014-07-26 08:45:21 +02:00
fabacd6c83 UnLike added 2014-07-24 09:22:57 +02:00
d2f269f15b manage bsp 2014-07-24 09:22:06 +02:00
3347ac89d9 thmen nur rendern wenn erlaubt 2014-07-23 22:57:40 +05:30
74546b1d8d geburtstag anzeigen 2014-07-23 22:57:25 +05:30
caebc36644 contact page new 2014-07-23 22:57:14 +05:30
4de0cfcd26 neue bsp text 2014-07-21 23:56:21 +05:30
bd4f84e7ec ability rework 2014-07-21 23:41:56 +05:30
44a0dc2f98 voteable 2014-07-21 23:41:44 +05:30
e8252fbf16 Beispiele als ZIP Datei 2014-07-19 18:41:50 +05:30
c52e5192c0 upfix 2014-07-18 01:03:23 +05:30
d1d1e6c7e1 uploader fixes 2014-07-18 01:03:14 +05:30
f8a5b57050 Merge branch 'master' of http://github.com/fetsite/fetsite 2014-07-17 17:40:43 +05:30
a0a0306c23 mail to current user 2014-07-17 17:40:36 +05:30
dce0b1507e uploader 2014-07-17 14:08:58 +02:00
3572cb8d01 Merge branch 'master' of http://github.com/andreassteph/fetsite 2014-07-16 06:00:39 +02:00
8d347886c7 Gremium deletes memberships if deleted 2014-07-16 06:00:14 +02:00
6c92fd8607 abilities und beispiel delete 2014-07-16 00:24:34 +05:30
3291ca364b #162 edit_lvas 2014-07-16 00:24:21 +05:30
62facba744 Merge branch 'master' of http://github.com/fetsite/fetsite 2014-07-14 20:41:38 +05:30
111e703274 studien 2014-07-14 20:41:29 +05:30
d823dea5c2 error fixes 2014-07-14 17:09:26 +02:00
adaf924fd7 Merge branch 'master' of http://github.com/fetsite/fetsite 2014-07-09 23:51:38 +05:30
38394df7c3 etforum link 2014-07-09 23:49:48 +05:30
397721f89e Merge branch 'master' of https://github.com/fetsite/fetsite
Conflicts:
	app/views/themen/_form.html.erb
2014-07-09 20:18:07 +02:00
4bc7c4b001 Interface fixes icons,colors 2014-07-09 22:44:42 +05:30
9bd786d053 design neue Farben & icons 2014-07-05 19:20:47 +05:30
6a730c7411 for error 2014-07-04 06:44:48 +02:00
520ce0c6ed Form themen fix1 2014-07-04 06:37:43 +02:00
527743c4c1 tinmce update 2014-07-03 21:31:27 +05:30
d72ece824c Mailer fuer Neuigkeiten added 2014-07-02 12:06:11 +02:00
38716d7a58 neuigkeiten form 2014-06-28 18:11:46 +05:30
b76818eaab fix neuigkeit_path 2014-06-26 10:47:29 +02:00
ee8f2d0076 themessticker, cleanup routes 2014-06-25 23:09:05 +05:30
2ba920331a profile form fixed, themen isdraft 2014-06-24 16:32:00 +05:30
a86d7482f1 Merge branch 'master' of http://github.com/fetsite/fetsite 2014-06-24 16:31:08 +05:30
87bc66f7df sort themen 2014-06-24 13:00:24 +02:00
c1469c5964 home fix 2014-06-24 12:59:49 +02:00
3a8ccdd205 Oberfläche aufräumen... 2014-06-24 13:53:38 +05:30
a87990c338 Zeit formatiert
Datetimepicker fixed, Speichern und weiter
2014-06-21 16:36:30 +05:30
6c9a1b51c4 themen interface cleanup1 2014-06-21 14:53:16 +05:30
6fdee8a7d6 datetimepicker 2014-06-21 14:52:45 +05:30
2df0d89b61 facebookpublish,themen fixes 2014-06-20 00:15:45 +05:30
61510a8891 gemfile 2014-06-15 18:03:57 +05:30
b1c46a3dc3 error fixes 2014-06-14 14:16:16 +02:00
Andreas Stephanides
b0c3c5a08c Merge branch 'master' of github.com:fetsite/fetsite into fetsite 2013-08-25 13:54:50 +02:00
593 changed files with 20299 additions and 3579 deletions

32
.gitignore vendored
View File

@@ -1,3 +1,11 @@
/test2.pdf
/test.pdf
/output.json
/ignore
/app/views/neuigkeiten/_compact.bak.html.erb
/config/crawl_config.yml
/db/data.yml
/db/data_*.yml
/db/.#initdebug.rb
/usergroup.ldif
/newuser.ldif
@@ -5,6 +13,7 @@
/config/omniauth_secrets.yml
/config/database.yml
/config/initializers/omniauth_secrets.rb
/config/databas*
# See http://help.github.com/ignore-files/ for more about ignoring files.
#
# If you find yourself ignoring temporary files generated by your text editor
@@ -19,18 +28,35 @@
/db/schema.rb
/db/structure.sql
/config/initializers/devise.rb
Gemfile.lock
# Ignore all logfiles and tempfiles.
/log/*.log
/tmp
/config/initializers/devise.rb
/app/doc/*
/bin/*
/sbin/*
console
/server
/public/uploads/
/public/sitemap*
/public/assets/
/vendor/*
/bak/*
/solr/*
/log/*
*#
Gemfile.lock
/config/database.yml
/config/start_topic.yml
/config/contact_topic.yml
/config/etherpad/APIKEY.*
/config/page.yml
.#*
.*
!/.gitignore
*.pid
/doc/app
coverage/*

135
Gemfile
View File

@@ -1,27 +1,31 @@
source 'https://rubygems.org'
gem 'rake', '~>12.3'
#gem 'rails', '3.2.13'
gem 'rails', '~>4.0'
gem 'rails', '3.2.13'
gem 'sprockets', '2.2.2'
gem 'webrick', '1.3.1'
gem 'sprockets'#, '2.2.2'
gem 'webrick'#, '1.3.1'
# Bundle edge Rails instead:
# gem 'rails', :git => 'git://github.com/rails/rails.git'
gem 'mysql2'
gem 'sqlite3'
gem 'mysql2'#, '~>0.3.10'
gem 'sqlite3', '~>1.3.0'
gem 'execjs', '~>1.4.0'
gem 'sanitize'
gem 'sanitize', :git=>'git://github.com/rgrove/sanitize'
# Gems used only for assets and not required
# in production environments by default.
gem 'sass-rails', '~> 3.2'
gem 'coffee-rails', '~> 3.2.1'
gem 'bootstrap-sass','~> 2.3.2.1'
gem 'sass-rails', '~> 5.0'
gem 'coffee-rails', '~> 4.2.2'
gem 'bootstrap'#,'~> 3.4'
group :assets do
#group :assets do
# See https://github.com/sstephenson/execjs#readme for more supported runtimes
gem 'therubyracer', :platforms => :ruby
gem 'uglifier', '>= 1.0.3'
end
# gem 'therubyracer', :platforms => :ruby
gem 'mini_racer'
gem 'uglifier'#, '>= 1.0.3'
#end
gem 'active_record_query_trace'
gem 'jquery-rails'
@@ -32,8 +36,8 @@ gem 'jquery-rails'
# gem 'jbuilder'
# Use unicorn as the app server
# gem 'unicorn'
# gem 'unicorn', '~>5.4' #4.8.0'
gem 'puma'
# Deploy with Capistran
# gem 'capistrano'
@@ -42,57 +46,106 @@ gem 'jquery-rails'
# Formbuilder for easier form generation
gem 'formtastic', '~>2.2.1'
gem 'formtastic-bootstrap', '~>2.1.3' #, :git => "git://github.com/mjbellantoni/formtastic-bootstrap.git"
gem 'formtastic', '~>3.1'
# gem 'formtastic-bootstrap', '~>2.1.3' #, :git => "git://github.com/mjbellantoni/formtastic-bootstrap.git"
gem 'formtastic-bootstrap', '~>3.0.0' #, :git => "git://github.com/mjbellantoni/formtastic-bootstrap.git"
# TinyMCE
gem "tinymce-rails" , '~>3.5.8'
gem "tinymce-rails" , '~>4.1.0'
# Internationalisierung
#gem "globalize3" ,'~>3.0.4'
gem "globalize" ,'~>3.0.4'#,:git =>'git://github.com/globalize/globalize.git'
gem "globalize" ,'~>5.1'#,:git =>'git://github.com/globalize/globalize.git'
gem 'globalize-versioning'
gem 'globalize-accessors'
# Version controll
gem "paper_trail" , '>=2.7.0', :git=>'git://github.com/airblade/paper_trail.git'
gem "paper_trail" # , '~>3.0.5i'#, :git=>'git://github.com/airblade/paper_trail.git'
# User management
gem "devise" ,'~>2.2.3'
gem "omniauth"
gem "omniauth-facebook"
gem "omniauth-ldap"
gem "devise" #,'~>2.2.3'
gem "omniauth" , '~>1.6'
gem "omniauth-facebook" #, '~>2.0.0'
gem "omniauth-ldap" #, '~>1.0.4'
gem "fb_graph" #,'~>2.7.17'
gem "meta-tags"
# Roles for users
gem "rolify"
gem "rolify" # , '~>4.0.0'
# Abilities
gem "cancan"
gem "cancan" #, '~>1.6.0'
# Fileupload
gem 'paperclip' ,'~>3.4.0'
gem 'paperclip' #,'~>3.4.0'
gem 'git'
gem 'haml'
gem 'RedCloth'
gem 'wikicloth'
gem 'gollum-lib'
#gem 'RedCloth'
#gem 'wikicloth'
#gem 'gollum-lib'
gem 'awesome_nested_set'
gem 'annotate', ">=2.5.0"
gem 'carrierwave', "~>0.9.0"
gem 'annotate' #, "~>2.6.0"
gem 'carrierwave'#, "~>0.9.0"
group :development, :test do
gem 'factory_girl_rails'
gem 'rspec-rails'
gem 'factory_bot_rails'#,"~>4.5.0"
gem 'minitest'#, "~>4.7.5"
gem 'progress_bar'
gem 'rspec-core'#, '~>3.8.0'
gem 'rspec-support'#, '~>3.3.0'
gem 'rspec-rails'#, '~>3.3.0'
gem 'rspec-collection_matchers'#, '~>1.1.2'
gem 'rspec-activemodel-mocks'#, '~>1.0.1'
gem 'rspec-html-matchers'#, '~>0.7.0'
gem 'rspec-expectations'#, '~>3.3.1'
gem 'capybara'#, '~>2.5.0'
gem 'simplecov'
end
gem "simple_calendar", "~> 0.1.9"
gem "simple_calendar"#, "~> 0.1.9"
gem 'rmagick'
gem 'bootstrap-addons-rails'
gem "jquery-fileupload-rails"
gem "jquery-ui-rails","~> 4.1.1"
gem "jquery-fileupload-rails"#, "0.4.1"
gem "jquery-ui-rails" #,"~> 4.1.0"
gem "font-awesome-rails"
gem "jquery-datetimepicker-rails"
# gem "jquery-sortable-rails"
gem "seed_dump", "~> 0.5.3"
gem "seed_dump"#, "~> 0.5.3"
#gem "themes_for_rails" ,:git =>'git://github.com/tkriplean/themes_for_rails.git'
#gem "themes_for_rails", :git=> 'git://github.com/lucasefe/themes_for_rails.git'
gem 'themes_for_rails'
#gem 'themes_for_rails'
gem 'themes_on_rails'
gem 'rubyzip'
gem 'acts_as_votable'
gem 'kaminari'
gem 'bootstrap-kaminari-views', :git=>'git://github.com/matenia/bootstrap-kaminari-views.git'
#gem 'will_paginate', :git=>'git://github.com/mislav/will_paginate.git'
#gem 'bootstrap-will_paginate'
gem 'sunspot_rails'
gem 'sunspot_solr'
gem 'sitemap_generator'
gem 'whenever'
gem 'yaml_db'
gem 'etherpad-lite'
gem 'opengraph_parser'
# Image gallery
gem 'blueimp-gallery'
gem 'blueimp-gallery-rails'
gem 'shareable'
gem 'sunspot_test'
# needed because of RAILS 4
gem 'protected_attributes'
gem 'actionpack-action_caching'

View File

@@ -1,302 +1,512 @@
GIT
remote: git://github.com/airblade/paper_trail.git
revision: 802b7d4ead71703860fcb9befc2c9b2ee05a8b9f
remote: git://github.com/matenia/bootstrap-kaminari-views.git
revision: 9df61d400fc144c3f33d65f3f97e4867b8e68273
specs:
paper_trail (3.0.0)
activerecord (>= 3.0, < 5.0)
activesupport (>= 3.0, < 5.0)
bootstrap-kaminari-views (0.0.5)
kaminari (>= 0.13)
rails (>= 3.1)
GIT
remote: git://github.com/rgrove/sanitize
revision: 424f02f4fd279e650117d32388d0840097dbc4c9
specs:
sanitize (5.0.0)
crass (~> 1.0.2)
nokogiri (>= 1.8.0)
nokogumbo (~> 2.0)
GEM
remote: https://rubygems.org/
specs:
RedCloth (4.2.9)
actionmailer (3.2.13)
actionpack (= 3.2.13)
mail (~> 2.5.3)
actionpack (3.2.13)
activemodel (= 3.2.13)
activesupport (= 3.2.13)
builder (~> 3.0.0)
actionmailer (4.2.11)
actionpack (= 4.2.11)
actionview (= 4.2.11)
activejob (= 4.2.11)
mail (~> 2.5, >= 2.5.4)
rails-dom-testing (~> 1.0, >= 1.0.5)
actionpack (4.2.11)
actionview (= 4.2.11)
activesupport (= 4.2.11)
rack (~> 1.6)
rack-test (~> 0.6.2)
rails-dom-testing (~> 1.0, >= 1.0.5)
rails-html-sanitizer (~> 1.0, >= 1.0.2)
actionpack-action_caching (1.2.0)
actionpack (>= 4.0.0, < 6)
actionview (4.2.11)
activesupport (= 4.2.11)
builder (~> 3.1)
erubis (~> 2.7.0)
journey (~> 1.0.4)
rack (~> 1.4.5)
rack-cache (~> 1.2)
rack-test (~> 0.6.1)
sprockets (~> 2.2.1)
activemodel (3.2.13)
activesupport (= 3.2.13)
builder (~> 3.0.0)
activerecord (3.2.13)
activemodel (= 3.2.13)
activesupport (= 3.2.13)
arel (~> 3.0.2)
tzinfo (~> 0.3.29)
activeresource (3.2.13)
activemodel (= 3.2.13)
activesupport (= 3.2.13)
activesupport (3.2.13)
i18n (= 0.6.1)
multi_json (~> 1.0)
annotate (2.6.1)
activerecord (>= 2.3.0)
rake (>= 0.8.7)
arel (3.0.3)
awesome_nested_set (2.1.6)
activerecord (>= 3.0.0)
bcrypt-ruby (3.1.2)
rails-dom-testing (~> 1.0, >= 1.0.5)
rails-html-sanitizer (~> 1.0, >= 1.0.3)
active_record_query_trace (1.5.4)
activejob (4.2.11)
activesupport (= 4.2.11)
globalid (>= 0.3.0)
activemodel (4.2.11)
activesupport (= 4.2.11)
builder (~> 3.1)
activerecord (4.2.11)
activemodel (= 4.2.11)
activesupport (= 4.2.11)
arel (~> 6.0)
activesupport (4.2.11)
i18n (~> 0.7)
minitest (~> 5.1)
thread_safe (~> 0.3, >= 0.3.4)
tzinfo (~> 1.1)
acts_as_votable (0.12.0)
addressable (2.6.0)
public_suffix (>= 2.0.2, < 4.0)
aes_key_wrap (1.0.1)
annotate (2.7.4)
activerecord (>= 3.2, < 6.0)
rake (>= 10.4, < 13.0)
arel (6.0.4)
attr_required (1.0.1)
autoprefixer-rails (9.5.0)
execjs
awesome_nested_set (3.1.4)
activerecord (>= 4.0.0, < 5.3)
bcrypt (3.1.12)
bindata (2.4.4)
blueimp-gallery (2.11.0.1)
railties (>= 3.1.0)
blueimp-gallery-rails (2.7.0)
railties (>= 3.0, < 5.0)
bootstrap (4.3.1)
autoprefixer-rails (>= 9.1.0)
popper_js (>= 1.14.3, < 2)
sassc-rails (>= 2.0.0)
bootstrap-addons-rails (0.1.2)
rails
bootstrap-sass (2.3.2.2)
sass (~> 3.2)
builder (3.0.4)
builder (3.2.3)
cancan (1.6.10)
carrierwave (0.9.0)
activemodel (>= 3.2.0)
activesupport (>= 3.2.0)
json (>= 1.7)
charlock_holmes (0.6.9.4)
climate_control (0.0.3)
activesupport (>= 3.0)
cocaine (0.5.3)
climate_control (>= 0.0.3, < 1.0)
coffee-rails (3.2.2)
capybara (3.13.2)
addressable
mini_mime (>= 0.1.3)
nokogiri (~> 1.8)
rack (>= 1.6.0)
rack-test (>= 0.6.3)
regexp_parser (~> 1.2)
xpath (~> 3.2)
carrierwave (1.3.1)
activemodel (>= 4.0.0)
activesupport (>= 4.0.0)
mime-types (>= 1.16)
chronic (0.10.2)
climate_control (0.2.0)
coffee-rails (4.2.2)
coffee-script (>= 2.2.0)
railties (~> 3.2.0)
coffee-script (2.2.0)
railties (>= 4.0.0)
coffee-script (2.4.1)
coffee-script-source
execjs
coffee-script-source (1.6.3)
devise (2.2.8)
bcrypt-ruby (~> 3.0)
coffee-script-source (1.12.2)
concurrent-ruby (1.1.4)
crass (1.0.4)
devise (4.6.1)
bcrypt (~> 3.0)
orm_adapter (~> 0.1)
railties (~> 3.1)
warden (~> 1.2.1)
diff-lcs (1.2.5)
railties (>= 4.1.0, < 6.0)
responders
warden (~> 1.2.3)
diff-lcs (1.3)
docile (1.3.1)
domain_name (0.5.20180417)
unf (>= 0.0.5, < 1.0.0)
erubis (2.7.0)
execjs (1.4.0)
etherpad-lite (0.3.0)
rest-client (>= 1.6)
execjs (1.4.1)
multi_json (~> 1.0)
expression_parser (0.9.0)
factory_girl (4.3.0)
activesupport (>= 3.0.0)
factory_girl_rails (4.3.0)
factory_girl (~> 4.3.0)
railties (>= 3.0.0)
faraday (0.8.8)
multipart-post (~> 1.2.0)
font-awesome-rails (4.0.3.1)
railties (>= 3.2, < 5.0)
formtastic (2.2.1)
actionpack (>= 3.0)
formtastic-bootstrap (2.1.3)
formtastic (~> 2.2)
git (1.2.6)
github-markup (0.7.5)
gitlab-grit (2.6.0)
charlock_holmes (~> 0.6.9)
diff-lcs (~> 1.1)
mime-types (~> 1.15)
posix-spawn (~> 0.3.6)
globalize (3.0.4)
activemodel (>= 3.0.0, < 4.0.0)
activerecord (>= 3.0.0, < 4.0.0)
globalize-versioning (0.1.0.alpha.1)
globalize (>= 3, < 5)
paper_trail (~> 3.0.0)
gollum-lib (2.0.0)
github-markup (>= 0.7.5, < 1.0.0)
gitlab-grit (= 2.6.0)
nokogiri (~> 1.6.0)
rouge (~> 1.3.1)
sanitize (~> 2.0.6)
stringex (~> 2.1.0)
haml (4.0.5)
factory_bot (5.0.2)
activesupport (>= 4.2.0)
factory_bot_rails (5.0.1)
factory_bot (~> 5.0.0)
railties (>= 4.2.0)
faraday (0.15.4)
multipart-post (>= 1.2, < 3)
fb_graph (2.7.17)
httpclient (>= 2.4)
multi_json (>= 1.3)
rack-oauth2 (>= 0.14.4)
tzinfo
ffi (1.10.0)
font-awesome-rails (4.7.0.4)
railties (>= 3.2, < 6.0)
formtastic (3.1.5)
actionpack (>= 3.2.13)
formtastic-bootstrap (3.0.0)
formtastic (>= 2.2)
git (1.5.0)
globalid (0.4.2)
activesupport (>= 4.2.0)
globalize (5.2.0)
activemodel (>= 4.2, < 5.3)
activerecord (>= 4.2, < 5.3)
request_store (~> 1.0)
globalize-accessors (0.1.5)
globalize (>= 3)
globalize-versioning (0.2.0)
activemodel (>= 3.2.0, < 5)
activerecord (>= 3.2.0, < 5)
globalize (>= 3.0.4, < 6)
paper_trail (>= 3.0.0, < 5)
haml (5.0.4)
temple (>= 0.8.0)
tilt
hashie (2.0.5)
hike (1.2.3)
httpauth (0.2.0)
i18n (0.6.1)
journey (1.0.4)
jquery-fileupload-rails (0.4.1)
hashie (3.6.0)
highline (2.0.1)
http-cookie (1.0.3)
domain_name (~> 0.5)
httpclient (2.8.3)
i18n (0.9.5)
concurrent-ruby (~> 1.0)
jquery-datetimepicker-rails (2.4.1.0)
jquery-fileupload-rails (1.0.0)
actionpack (>= 3.1)
railties (>= 3.1)
jquery-rails (3.0.4)
railties (>= 3.0, < 5.0)
sassc
jquery-rails (4.3.3)
rails-dom-testing (>= 1, < 3)
railties (>= 4.2.0)
thor (>= 0.14, < 2.0)
jquery-ui-rails (4.1.1)
railties (>= 3.1.0)
json (1.8.1)
jwt (0.1.8)
multi_json (>= 1.5)
libv8 (3.16.14.3)
mail (2.5.4)
mime-types (~> 1.16)
treetop (~> 1.4.8)
mime-types (1.25.1)
mini_portile (0.5.2)
multi_json (1.8.4)
multipart-post (1.2.0)
mysql2 (0.3.14)
net-ldap (0.3.1)
nokogiri (1.6.1)
mini_portile (~> 0.5.0)
oauth2 (0.8.1)
faraday (~> 0.8)
httpauth (~> 0.1)
jwt (~> 0.1.4)
multi_json (~> 1.0)
rack (~> 1.2)
omniauth (1.1.4)
hashie (>= 1.2, < 3)
rack
omniauth-facebook (1.5.1)
omniauth-oauth2 (~> 1.1.0)
omniauth-ldap (1.0.4)
net-ldap (~> 0.3.1)
omniauth (~> 1.0)
pyu-ruby-sasl (~> 0.0.3.1)
rubyntlm (~> 0.1.1)
omniauth-oauth2 (1.1.1)
oauth2 (~> 0.8.0)
jquery-ui-rails (6.0.1)
railties (>= 3.2.16)
json (2.1.0)
json-jwt (1.10.0)
activesupport (>= 4.2)
aes_key_wrap
bindata
jwt (2.1.0)
kaminari (1.1.1)
activesupport (>= 4.1.0)
kaminari-actionview (= 1.1.1)
kaminari-activerecord (= 1.1.1)
kaminari-core (= 1.1.1)
kaminari-actionview (1.1.1)
actionview
kaminari-core (= 1.1.1)
kaminari-activerecord (1.1.1)
activerecord
kaminari-core (= 1.1.1)
kaminari-core (1.1.1)
libv8 (6.7.288.46.1)
loofah (2.2.3)
crass (~> 1.0.2)
nokogiri (>= 1.5.9)
mail (2.7.1)
mini_mime (>= 0.1.1)
meta-tags (2.11.1)
actionpack (>= 3.2.0, < 6.1)
mime-types (3.2.2)
mime-types-data (~> 3.2015)
mime-types-data (3.2018.0812)
mimemagic (0.3.3)
mini_mime (1.0.1)
mini_portile2 (2.4.0)
mini_racer (0.2.4)
libv8 (>= 6.3)
minitest (5.11.3)
multi_json (1.13.1)
multi_xml (0.6.0)
multipart-post (2.0.0)
mysql2 (0.5.2)
net-ldap (0.16.1)
netrc (0.11.0)
nokogiri (1.10.1)
mini_portile2 (~> 2.4.0)
nokogumbo (2.0.1)
nokogiri (~> 1.8, >= 1.8.4)
oauth2 (1.4.1)
faraday (>= 0.8, < 0.16.0)
jwt (>= 1.0, < 3.0)
multi_json (~> 1.3)
multi_xml (~> 0.5)
rack (>= 1.2, < 3)
omniauth (1.9.0)
hashie (>= 3.4.6, < 3.7.0)
rack (>= 1.6.2, < 3)
omniauth-facebook (5.0.0)
omniauth-oauth2 (~> 1.2)
omniauth-ldap (1.0.5)
net-ldap (~> 0.12)
omniauth (~> 1.0)
pyu-ruby-sasl (~> 0.0.3.2)
rubyntlm (~> 0.3.4)
omniauth-oauth2 (1.6.0)
oauth2 (~> 1.1)
omniauth (~> 1.9)
opengraph_parser (0.2.3)
addressable
nokogiri
options (2.3.2)
orm_adapter (0.5.0)
paperclip (3.4.2)
activemodel (>= 3.0.0)
activerecord (>= 3.0.0)
activesupport (>= 3.0.0)
cocaine (~> 0.5.0)
paper_trail (4.2.0)
activerecord (>= 3.0, < 6.0)
activesupport (>= 3.0, < 6.0)
request_store (~> 1.1)
paperclip (6.1.0)
activemodel (>= 4.2.0)
activesupport (>= 4.2.0)
mime-types
polyglot (0.3.3)
posix-spawn (0.3.8)
mimemagic (~> 0.3.0)
terrapin (~> 0.6.0)
popper_js (1.14.5)
pr_geohash (1.0.0)
progress_bar (1.3.0)
highline (>= 1.6, < 3)
options (~> 2.3.0)
protected_attributes (1.1.4)
activemodel (>= 4.0.1, < 5.0)
public_suffix (3.0.3)
puma (3.12.0)
pyu-ruby-sasl (0.0.3.3)
rack (1.4.5)
rack-cache (1.2)
rack (>= 0.4)
rack-ssl (1.3.3)
rack (1.6.11)
rack-oauth2 (1.9.3)
activesupport
attr_required
httpclient
json-jwt (>= 1.9.0)
rack
rack-test (0.6.2)
rack-test (0.6.3)
rack (>= 1.0)
rails (3.2.13)
actionmailer (= 3.2.13)
actionpack (= 3.2.13)
activerecord (= 3.2.13)
activeresource (= 3.2.13)
activesupport (= 3.2.13)
bundler (~> 1.0)
railties (= 3.2.13)
railties (3.2.13)
actionpack (= 3.2.13)
activesupport (= 3.2.13)
rack-ssl (~> 1.3.2)
rails (4.2.11)
actionmailer (= 4.2.11)
actionpack (= 4.2.11)
actionview (= 4.2.11)
activejob (= 4.2.11)
activemodel (= 4.2.11)
activerecord (= 4.2.11)
activesupport (= 4.2.11)
bundler (>= 1.3.0, < 2.0)
railties (= 4.2.11)
sprockets-rails
rails-deprecated_sanitizer (1.0.3)
activesupport (>= 4.2.0.alpha)
rails-dom-testing (1.0.9)
activesupport (>= 4.2.0, < 5.0)
nokogiri (~> 1.6)
rails-deprecated_sanitizer (>= 1.0.1)
rails-html-sanitizer (1.0.4)
loofah (~> 2.2, >= 2.2.2)
railties (4.2.11)
actionpack (= 4.2.11)
activesupport (= 4.2.11)
rake (>= 0.8.7)
rdoc (~> 3.4)
thor (>= 0.14.6, < 2.0)
rake (10.1.1)
rdoc (3.12.2)
json (~> 1.4)
ref (1.0.5)
rinku (1.7.3)
rmagick (2.13.2)
rolify (3.2.0)
rouge (1.3.4)
rspec-core (2.14.7)
rspec-expectations (2.14.4)
diff-lcs (>= 1.1.3, < 2.0)
rspec-mocks (2.14.4)
rspec-rails (2.14.1)
actionpack (>= 3.0)
thor (>= 0.18.1, < 2.0)
rake (12.3.2)
rb-fsevent (0.10.3)
rb-inotify (0.10.0)
ffi (~> 1.0)
regexp_parser (1.3.0)
request_store (1.4.1)
rack (>= 1.4)
responders (2.4.1)
actionpack (>= 4.2.0, < 6.0)
railties (>= 4.2.0, < 6.0)
rest-client (2.0.2)
http-cookie (>= 1.0.2, < 2.0)
mime-types (>= 1.16, < 4.0)
netrc (~> 0.8)
rmagick (2.16.0)
rolify (5.2.0)
rsolr (2.2.1)
builder (>= 2.1.2)
faraday (>= 0.9.0)
rspec (3.8.0)
rspec-core (~> 3.8.0)
rspec-expectations (~> 3.8.0)
rspec-mocks (~> 3.8.0)
rspec-activemodel-mocks (1.1.0)
activemodel (>= 3.0)
activesupport (>= 3.0)
rspec-mocks (>= 2.99, < 4.0)
rspec-collection_matchers (1.1.3)
rspec-expectations (>= 2.99.0.beta1)
rspec-core (3.8.0)
rspec-support (~> 3.8.0)
rspec-expectations (3.8.2)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.8.0)
rspec-html-matchers (0.9.1)
nokogiri (~> 1)
rspec (>= 3.0.0.a, < 4)
rspec-mocks (3.8.0)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.8.0)
rspec-rails (3.8.2)
actionpack (>= 3.0)
activesupport (>= 3.0)
railties (>= 3.0)
rspec-core (~> 2.14.0)
rspec-expectations (~> 2.14.0)
rspec-mocks (~> 2.14.0)
rubyntlm (0.1.1)
sanitize (2.0.6)
nokogiri (>= 1.4.4)
sass (3.2.13)
sass-rails (3.2.6)
railties (~> 3.2.0)
sass (>= 3.1.10)
tilt (~> 1.3)
seed_dump (0.5.3)
simple_calendar (0.1.9)
rspec-core (~> 3.8.0)
rspec-expectations (~> 3.8.0)
rspec-mocks (~> 3.8.0)
rspec-support (~> 3.8.0)
rspec-support (3.8.0)
rubyntlm (0.3.4)
rubyzip (1.2.2)
sass (3.7.3)
sass-listen (~> 4.0.0)
sass-listen (4.0.0)
rb-fsevent (~> 0.9, >= 0.9.4)
rb-inotify (~> 0.9, >= 0.9.7)
sass-rails (5.0.7)
railties (>= 4.0.0, < 6)
sass (~> 3.1)
sprockets (>= 2.8, < 4.0)
sprockets-rails (>= 2.0, < 4.0)
tilt (>= 1.1, < 3)
sassc (2.0.1)
ffi (~> 1.9)
rake
sassc-rails (2.1.0)
railties (>= 4.0.0)
sassc (>= 2.0)
sprockets (> 3.0)
sprockets-rails
tilt
seed_dump (3.3.1)
activerecord (>= 4)
activesupport (>= 4)
shareable (1.1.4)
actionpack (>= 3.0.0)
activesupport (>= 3.0.0)
simple_calendar (2.3.0)
rails (>= 3.0)
sprockets (2.2.2)
hike (~> 1.2)
multi_json (~> 1.0)
rack (~> 1.0)
tilt (~> 1.1, != 1.3.0)
sqlite3 (1.3.8)
stringex (2.1.2)
themes_for_rails (0.5.1)
rails (>= 3.0.0)
therubyracer (0.12.0)
libv8 (~> 3.16.14.0)
ref
thor (0.18.1)
tilt (1.4.1)
tinymce-rails (3.5.8)
simplecov (0.16.1)
docile (~> 1.1)
json (>= 1.8, < 3)
simplecov-html (~> 0.10.0)
simplecov-html (0.10.2)
sitemap_generator (6.0.2)
builder (~> 3.0)
sprockets (3.7.2)
concurrent-ruby (~> 1.0)
rack (> 1, < 3)
sprockets-rails (3.2.1)
actionpack (>= 4.0)
activesupport (>= 4.0)
sprockets (>= 3.0.0)
sqlite3 (1.3.13)
sunspot (2.3.0)
pr_geohash (~> 1.0)
rsolr (>= 1.1.1, < 3)
sunspot_rails (2.3.0)
rails (>= 3)
sunspot (= 2.3.0)
sunspot_solr (2.3.0)
sunspot_test (0.4.1)
sunspot_rails (>= 2.1.1)
sunspot_solr
temple (0.8.0)
terrapin (0.6.0)
climate_control (>= 0.0.3, < 1.0)
themes_on_rails (0.4.0)
rails (>= 3.2)
thor (0.20.3)
thread_safe (0.3.6)
tilt (2.0.9)
tinymce-rails (4.1.10)
railties (>= 3.1.1)
treetop (1.4.15)
polyglot
polyglot (>= 0.3.1)
tzinfo (0.3.38)
uglifier (2.4.0)
execjs (>= 0.3.0)
json (>= 1.8.0)
warden (1.2.3)
tzinfo (1.2.5)
thread_safe (~> 0.1)
uglifier (4.1.20)
execjs (>= 0.3.0, < 3)
unf (0.1.4)
unf_ext
unf_ext (0.0.7.5)
warden (1.2.7)
rack (>= 1.0)
webrick (1.3.1)
<<<<<<< Updated upstream
wikicloth (0.8.1)
builder
expression_parser
rinku
webrick (1.4.2)
whenever (0.10.0)
chronic (>= 0.6.3)
xpath (3.2.0)
nokogiri (~> 1.8)
yaml_db (0.7.0)
rails (>= 3.0)
rake (>= 0.8.7)
PLATFORMS
ruby
DEPENDENCIES
RedCloth
annotate (>= 2.5.0)
actionpack-action_caching
active_record_query_trace
acts_as_votable
annotate
awesome_nested_set
blueimp-gallery
blueimp-gallery-rails
bootstrap
bootstrap-addons-rails
bootstrap-sass (~> 2.3.2.1)
bootstrap-kaminari-views!
cancan
carrierwave (~> 0.9.0)
coffee-rails (~> 3.2.1)
devise (~> 2.2.3)
capybara
carrierwave
coffee-rails (~> 4.2.2)
devise
etherpad-lite
execjs (~> 1.4.0)
factory_girl_rails
factory_bot_rails
fb_graph
font-awesome-rails
formtastic (~> 2.2.1)
formtastic-bootstrap (~> 2.1.3)
formtastic (~> 3.1)
formtastic-bootstrap (~> 3.0.0)
git
globalize (~> 3.0.4)
globalize (~> 5.1)
globalize-accessors
globalize-versioning
gollum-lib
haml
jquery-datetimepicker-rails
jquery-fileupload-rails
jquery-rails
jquery-ui-rails (~> 4.1.1)
jquery-ui-rails
kaminari
meta-tags
mini_racer
minitest
mysql2
omniauth
omniauth (~> 1.6)
omniauth-facebook
omniauth-ldap
paper_trail (>= 2.7.0)!
paperclip (~> 3.4.0)
rails (= 3.2.13)
opengraph_parser
paper_trail
paperclip
progress_bar
protected_attributes
puma
rails (~> 4.0)
rake (~> 12.3)
rmagick
rolify
rspec-activemodel-mocks
rspec-collection_matchers
rspec-core
rspec-expectations
rspec-html-matchers
rspec-rails
sanitize
sass-rails (~> 3.2)
seed_dump (~> 0.5.3)
simple_calendar (~> 0.1.9)
sprockets (= 2.2.2)
sqlite3
themes_for_rails
therubyracer
tinymce-rails (~> 3.5.8)
uglifier (>= 1.0.3)
webrick (= 1.3.1)
wikicloth
rspec-support
rubyzip
sanitize!
sass-rails (~> 5.0)
seed_dump
shareable
simple_calendar
simplecov
sitemap_generator
sprockets
sqlite3 (~> 1.3.0)
sunspot_rails
sunspot_solr
sunspot_test
themes_on_rails
tinymce-rails (~> 4.1.0)
uglifier
webrick
whenever
yaml_db
BUNDLED WITH
1.16.6

25
README Normal file
View File

@@ -0,0 +1,25 @@
SETUP:
install ruby 2.1.10
install requirements
apt-get ...
mkdir /srv/fetsite
cd /srv/fetsite
copy / fetch Gemfile
make User fetsite
bundle install
# Config Files kopieren:
cp /srv/fetsite/config/omniout_secrets.yml.example /srv/fetsite/config/omniout_secrets.yml
cp /srv/fetsite/config/omniout_secrets.yml.example /srv/fetsite/config/omniout_secrets.yml
touch crawler_config.yml
# Datenbank erstellen
rake db:migrate

11
README_productive.md Normal file
View File

@@ -0,0 +1,11 @@
install ruby/fetsite requirements
do all the rvm stuff
apt-get install git
chown fetsite /srv
su fetsite
cd /srv

Binary file not shown.

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,537 @@
<!DOCTYPE html>
<html>
<head>
<title>Flaticon WebFont</title>
<link rel="stylesheet" type="text/css" href="flaticon.css">
<meta charset="UTF-8">
<style>
body {
font-family: sans-serif;
line-height: 1.5;
font-size: 16px;
padding: 20px;
color:#333;
}
* {
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
margin: 0;
padding: 0;
}
[class^="flaticon-"]:before, [class*=" flaticon-"]:before, [class^="flaticon-"]:after, [class*=" flaticon-"]:after {
font-family: Flaticon;
font-size: 30px;
font-style: normal;
margin-left: 20px;
color: #333;
}
.image p {
font-size: 12px;
margin: 0px;
clear: none;
width: 300px;
line-height: 40px;
}
.text {
float: left;
font-size:14px;
margin-top: 15px;
}
.text ul {
margin-left:0px;
color:#111;
margin-bottom:20px;
}
.text .ex {
font-size:12px;
color:#666;
margin-left:35px;
display:block;
}
.text ul li {
margin-top:10px;
list-style:none;
}
.num {
background:#66A523;
color:#fff;
border-radius:20px;
padding:1px;
display:inline-block;
width:22px;
height:22px;
text-align:center;
margin-right: 5px;
}
.text ul strong {
font-weight:normal;
color:#000;
}
.image {
width: 280px;
float: left;
margin-bottom: 15px;
margin-right: 30px;
}
#glyphs {
clear: both;
}
.image p:nth-child(even) i {
clear: none;
}
.glyph {
display: inline-block;
width: 120px;
margin: 10px;
text-align: center;
vertical-align: top;
background: #FFF;
}
.glyph .glyph-icon {
padding: 10px;
display: block;
font-family:"Flaticon";
font-size: 64px;
line-height: 1;
}
.glyph .glyph-icon:before {
font-size: 64px;
color: #666;
margin-left: 0;
}
.class-name {
font-size: 12px;
}
.author-name {
font-size: 10px;
}
a{
color: #66A523;
}
.instructions {
font-style:italic;
font-size:22px;
margin-bottom:10px;
}
.iconsuse {
font-size:22px;
font-style:italic;
padding-top:20px;
margin-top:20px;
border-top:1px solid #bbb;
}
.usetitle {
margin-bottom: 10px;
font-size: 20px;
font-style: italic;
}
.class-name:last-child {
font-size: 10px;
color:#888;
}
.class-name:last-child a {
font-size: 10px;
color:#555;
}
.class-name:last-child a:hover {
color:#66A523;
}
.glyph > input {
display: block;
width: 100px;
margin: 5px auto;
text-align: center;
font-size: 12px;
cursor: text;
}
.glyph > input.icon-input {
font-family:"Flaticon";
font-size: 16px;
margin-bottom: 10px;
}
h1.logo {
font-size: 40px;
letter-spacing: -1px;
margin-top: -16px;
text-transform: lowercase;
border-bottom:1px solid #bbb;
}
h1.logo strong {
font-size: 16px;
font-family:sans-serif;
font-weight:normal;
color:#333;
}
h1.logo a {
color:#34302d;
text-decoration: none;
}
h1.logo a span {
color:#66A523;
}
#footer {
padding-top:40px;
clear:both;
text-align:center;
}
#footer a {
color:#66A523;
}
textarea {
margin: 0px;
width: 800px;
height: 150px;
border: 1px solid #CCC;
resize: none;
background: #EEE;
}
.author-link, .attrDiv a{
font-size: 12px;
color: #333;
text-decoration: none;
}
.external {
display: block;
}
.attrDiv {
font-size: 12px;
}
.attribution {
border-top: 1px solid #AAA;
margin: 10px 0;
padding-top: 15px;
}
</style>
</head>
<body>
<header>
<h1 class="logo">
<a href="http://www.flaticon.com">
<span>FLAT</span>ICON</a>
<strong>Font Demo</strong>
</h1>
</header>
<section class="demo">
<div class="text">
<div class="instructions">Instructions:</div>
<ul>
<li>
<p>
<span class="num">1</span>Copy the "Fonts" files and CSS files to your website CSS folder.
</li>
<li>
<p>
<span class="num">2</span>Add the CSS link to your website source code on header.
<br />
<span class="ex">&lt;head&gt;
<br/>...
<br/>&lt;link rel="stylesheet" type="text/css" href="your_website_domain/css_root/flaticon.css"&gt;
<br/>...
<br/>&lt;/head&gt;</span>
</li>
<li>
<p>
<span class="num">3</span>Use the icon class on "display:inline" elements:
<br />
<span class="ex">Use example: &lt;i class=&quot;flaticon-airplane49&quot;&gt;&lt;/i&gt; or &lt;span class=&quot;flaticon-airplane49&quot;&gt;&lt;/span&gt;</span>
</li>
</ul>
</div>
</section>
<section id="glyphs"><div class="glyph">
<div class="glyph-icon flaticon-accident3"></div>
<div class="class-name">.flaticon-accident3</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/man-with-arm-injury_18026">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-alphabet3"></div>
<div class="class-name">.flaticon-alphabet3</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/alphabet-letters-a-b-and-c_27482">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-angel"></div>
<div class="class-name">.flaticon-angel</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/angel-face_75956">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-angry"></div>
<div class="class-name">.flaticon-angry</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/discontent-boy-face_75489">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-angry2"></div>
<div class="class-name">.flaticon-angry2</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/shouting-boy_75490">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-angry23"></div>
<div class="class-name">.flaticon-angry23</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/angry-emoticon-face-with-opened-mouth-in-rounded-square-outline_42818">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-angry40"></div>
<div class="class-name">.flaticon-angry40</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/anger-face_75495">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-angry41"></div>
<div class="class-name">.flaticon-angry41</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/boy-with-anger-face_75595">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-animal203"></div>
<div class="class-name">.flaticon-animal203</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/fish-with-four-bubbles_85113">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-annulled3"></div>
<div class="class-name">.flaticon-annulled3</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/annulled-emoticon-square-face_42874">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-bandaid"></div>
<div class="class-name">.flaticon-bandaid</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/band-aid-forming-a-cross-mark_26590">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-battery88"></div>
<div class="class-name">.flaticon-battery88</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/battery-charging-with-solar-panel_34518">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-book97"></div>
<div class="class-name">.flaticon-book97</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/book-with-bookmark_27478">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-boy11"></div>
<div class="class-name">.flaticon-boy11</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/boy-raising-hand-for-question_27472">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-boy12"></div>
<div class="class-name">.flaticon-boy12</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/boy-reading-a-book_27474">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-business57"></div>
<div class="class-name">.flaticon-business57</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/business-man_33563">SimpleIcon</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-camouflage"></div>
<div class="class-name">.flaticon-camouflage</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/boy-with-concealing-face_75457">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-car65"></div>
<div class="class-name">.flaticon-car65</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/car-in-black-side-view_26352">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-certificate7"></div>
<div class="class-name">.flaticon-certificate7</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/certificate-award_27477">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-checklist4"></div>
<div class="class-name">.flaticon-checklist4</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/checklist-on-a-paper-with-a-pencil_48746">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-circuit4"></div>
<div class="class-name">.flaticon-circuit4</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/circuit-print-for-electronic-products_34643">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-confused4"></div>
<div class="class-name">.flaticon-confused4</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/confusion-boy-face_75505">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-cpu"></div>
<div class="class-name">.flaticon-cpu</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/cpu_31005">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-cpu1"></div>
<div class="class-name">.flaticon-cpu1</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/cpu_31046">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-cry1"></div>
<div class="class-name">.flaticon-cry1</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/weeping-face_75409">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-cry2"></div>
<div class="class-name">.flaticon-cry2</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/boy-face-weep_75533">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-crying7"></div>
<div class="class-name">.flaticon-crying7</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/crying-emoticon-rounded-square-face_42888">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-customerservice10"></div>
<div class="class-name">.flaticon-customerservice10</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/_"></a></div></div><div class="glyph">
<div class="glyph-icon flaticon-doubt3"></div>
<div class="class-name">.flaticon-doubt3</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/doubt-on-emoticon-square-face_42908">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-doubts1"></div>
<div class="class-name">.flaticon-doubts1</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/doubt-face-with-glasses_75535">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-drinks48"></div>
<div class="class-name">.flaticon-drinks48</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/cocktail-coconut_85120">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-education6"></div>
<div class="class-name">.flaticon-education6</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/education-diploma_27485">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-election3"></div>
<div class="class-name">.flaticon-election3</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/election-envelopes-and-box_48761">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-electronic51"></div>
<div class="class-name">.flaticon-electronic51</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/electronic-printed-circuit-with-lines-and-circles_34740">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-emoticon101"></div>
<div class="class-name">.flaticon-emoticon101</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/emoticon-in-love-face-with-heart-shaped-eyes-in-square-outline_42899">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-emoticon82"></div>
<div class="class-name">.flaticon-emoticon82</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/emoticon-square-smile_42815">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-emoticon83"></div>
<div class="class-name">.flaticon-emoticon83</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/emoticon-square-face-with-curved-mouth-expression_42819">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-emoticon98"></div>
<div class="class-name">.flaticon-emoticon98</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/emoticon-square-face-with-closed-eyes-and-mouth-of-straight-lines_42890">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-emoticons11"></div>
<div class="class-name">.flaticon-emoticons11</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/emoticons-square-face-with-sunglasses_42845">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-family4"></div>
<div class="class-name">.flaticon-family4</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/family-of-three_27506">OCHA</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-fear3"></div>
<div class="class-name">.flaticon-fear3</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/afraid-boy-face_75487">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-first21"></div>
<div class="class-name">.flaticon-first21</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/first-aid-case_33485">SimpleIcon</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-fright"></div>
<div class="class-name">.flaticon-fright</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/boy-face-with-fear_75531">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-furious3"></div>
<div class="class-name">.flaticon-furious3</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/furious-emoticon-square-face_42872">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-graduate2"></div>
<div class="class-name">.flaticon-graduate2</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/graduate-boy-reading-a-book_27473">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-group58"></div>
<div class="class-name">.flaticon-group58</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/group-of-three-men-standing-side-by-side-hugging-each-other_47352">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-handshake3"></div>
<div class="class-name">.flaticon-handshake3</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/employment-deal_69165">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-hatchback"></div>
<div class="class-name">.flaticon-hatchback</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/hatchback-car-silhouette_26561">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-help9"></div>
<div class="class-name">.flaticon-help9</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/customer-service_78935">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-house77"></div>
<div class="class-name">.flaticon-house77</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/house-with-solar-panel-installed_34550">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-illness1"></div>
<div class="class-name">.flaticon-illness1</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/nausea-boy-face_75421">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-inadequacy"></div>
<div class="class-name">.flaticon-inadequacy</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/inadequacy_75396">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-incompetence"></div>
<div class="class-name">.flaticon-incompetence</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/boy-with-inadequacy-face_75559">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-indifferent"></div>
<div class="class-name">.flaticon-indifferent</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/indifference-face_75404">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-kiss3"></div>
<div class="class-name">.flaticon-kiss3</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/boy-kissing_75399">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-laughing7"></div>
<div class="class-name">.flaticon-laughing7</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/laughter-boy-face_75534">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-laughing8"></div>
<div class="class-name">.flaticon-laughing8</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/laughter-face_75970">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-lifesaver28"></div>
<div class="class-name">.flaticon-lifesaver28</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/life-vest_85132">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-lively"></div>
<div class="class-name">.flaticon-lively</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/friskiness-boy-face_75532">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-love2"></div>
<div class="class-name">.flaticon-love2</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/boy-with-love-face_75451">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-mad1"></div>
<div class="class-name">.flaticon-mad1</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/offense-face_75965">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-man282"></div>
<div class="class-name">.flaticon-man282</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/man-talking-by-speaker_46770">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-manager3"></div>
<div class="class-name">.flaticon-manager3</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/management-group_71041">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-medical43"></div>
<div class="class-name">.flaticon-medical43</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/medical-date-reminder-calendar-daily-page-interface-symbol-with-first-aid-cross_42954">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-mobile26"></div>
<div class="class-name">.flaticon-mobile26</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/mobile-tool_23621">Icomoon</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-moustaches1"></div>
<div class="class-name">.flaticon-moustaches1</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/boy-with-moustache-and-up-eyebrow_75456">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-mute24"></div>
<div class="class-name">.flaticon-mute24</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/mute-emoticon-square-face_42868">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-mute3"></div>
<div class="class-name">.flaticon-mute3</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/silence-face_75408">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-navigation28"></div>
<div class="class-name">.flaticon-navigation28</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/radar-working_85141">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-nerd6"></div>
<div class="class-name">.flaticon-nerd6</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/nerd-happy-smiling-face-in-rounded-square-face_42863">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-nervous"></div>
<div class="class-name">.flaticon-nervous</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/nerve-boy-face_75483">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-owl9"></div>
<div class="class-name">.flaticon-owl9</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/owl-wearing-graduation-hat_27471">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-palmtrees1"></div>
<div class="class-name">.flaticon-palmtrees1</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/_"></a></div></div><div class="glyph">
<div class="glyph-icon flaticon-panic1"></div>
<div class="class-name">.flaticon-panic1</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/fright-boy-face_75442">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-pencil32"></div>
<div class="class-name">.flaticon-pencil32</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/pencil-and-paintbrush_27476">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-pirate5"></div>
<div class="class-name">.flaticon-pirate5</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/pirate-emoticon-face-with-one-covered-eye-in-square-outline_42905">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-plus13"></div>
<div class="class-name">.flaticon-plus13</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/mathematic-symbol_5156">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-protection24"></div>
<div class="class-name">.flaticon-protection24</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/big-sunglasses_85149">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-robot30"></div>
<div class="class-name">.flaticon-robot30</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/robot-design_48717">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-robotic2"></div>
<div class="class-name">.flaticon-robotic2</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/robotic-arm-ios-7-interface-symbol_22464">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-rough"></div>
<div class="class-name">.flaticon-rough</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/abrupt-boy-face_75448">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-sad34"></div>
<div class="class-name">.flaticon-sad34</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/sad-suffering-crying-emoticon-face_42811">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-sad35"></div>
<div class="class-name">.flaticon-sad35</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/sad-sleepy-emoticon-face-square_42812">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-sad37"></div>
<div class="class-name">.flaticon-sad37</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/sad-emoticon-square-face_42833">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-sad38"></div>
<div class="class-name">.flaticon-sad38</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/sad-rounded-square-emoticon_42849">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-sad39"></div>
<div class="class-name">.flaticon-sad39</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/sad-face-in-rounded-square_42901">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-sad74"></div>
<div class="class-name">.flaticon-sad74</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/sadness-boy-face_75441">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-sad75"></div>
<div class="class-name">.flaticon-sad75</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/boy-with-sadness-face_75493">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-sad77"></div>
<div class="class-name">.flaticon-sad77</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/sorrow-face_75968">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-scary"></div>
<div class="class-name">.flaticon-scary</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/fear-face_75536">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-serious3"></div>
<div class="class-name">.flaticon-serious3</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/seriousness-boy-face_75500">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-severe"></div>
<div class="class-name">.flaticon-severe</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/serious-boy-face_75443">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-silhouette121"></div>
<div class="class-name">.flaticon-silhouette121</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/black-user-shape_16612">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-singing4"></div>
<div class="class-name">.flaticon-singing4</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/singing-emoticon-square-face_42869">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-sleep1"></div>
<div class="class-name">.flaticon-sleep1</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/boy-with-sleeping-face_75562">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-sleepness"></div>
<div class="class-name">.flaticon-sleepness</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/boy-with-fatigue-face_75597">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-sleepy6"></div>
<div class="class-name">.flaticon-sleepy6</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/sleepy-emoticon-square-face_42820">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-smile31"></div>
<div class="class-name">.flaticon-smile31</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/boy-smiling_75418">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-smile32"></div>
<div class="class-name">.flaticon-smile32</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/very-happy-boy-face_75482">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-smile33"></div>
<div class="class-name">.flaticon-smile33</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/boy-with-smiling-face_75558">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-smiley41"></div>
<div class="class-name">.flaticon-smiley41</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/smiley-of-square-face-shape_42865">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-smiley42"></div>
<div class="class-name">.flaticon-smiley42</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/smiley-square-face_42878">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-smiling35"></div>
<div class="class-name">.flaticon-smiling35</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/smiling-happy-emoticon-square-face-with-eyes-like-stars_42871">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-smiling36"></div>
<div class="class-name">.flaticon-smiling36</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/smiling-emoticon-square-face_42877">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-solar12"></div>
<div class="class-name">.flaticon-solar12</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/solar-powered-house-building-with-solar-panels-on-the-roof_34541">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-spring13"></div>
<div class="class-name">.flaticon-spring13</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/spring-square-notepad_27481">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-square103"></div>
<div class="class-name">.flaticon-square103</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/square-emoticon-angry-face_42875">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-stars53"></div>
<div class="class-name">.flaticon-stars53</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/win-face_75957">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-student12"></div>
<div class="class-name">.flaticon-student12</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/student-smiling-emoticon-square-face_42886">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-study7"></div>
<div class="class-name">.flaticon-study7</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/nerd-boy-face_75486">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-stupor"></div>
<div class="class-name">.flaticon-stupor</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/stupor-boy-face_75492">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-surprise5"></div>
<div class="class-name">.flaticon-surprise5</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/boy-with-shock-face_75594">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-surprised"></div>
<div class="class-name">.flaticon-surprised</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/surprise-face_75967">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-surprised19"></div>
<div class="class-name">.flaticon-surprised19</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/surprised-emoticon-square-face-with-open-eyes-and-mouth_42835">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-surprised21"></div>
<div class="class-name">.flaticon-surprised21</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/surprised-square-face-with-eyes-and-mouth-opened_42893">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-surveillance1"></div>
<div class="class-name">.flaticon-surveillance1</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/surveillance-camera_32029">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-suspicions"></div>
<div class="class-name">.flaticon-suspicions</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/boy-with-suspicious-face_75599">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-sweat1"></div>
<div class="class-name">.flaticon-sweat1</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/shock-face-with-drop_75596">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-sweating3"></div>
<div class="class-name">.flaticon-sweating3</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/sweating-emoticon-square-face_42894">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-tears"></div>
<div class="class-name">.flaticon-tears</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/boy-face-with-tear_75530">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-telephone45"></div>
<div class="class-name">.flaticon-telephone45</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/old-telephone-ringing_15914">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-think7"></div>
<div class="class-name">.flaticon-think7</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/man-thinking_76818">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-timidity"></div>
<div class="class-name">.flaticon-timidity</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/humility-face_75966">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-tongue1"></div>
<div class="class-name">.flaticon-tongue1</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/inadequacy-boy-face_75450">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-tongue2"></div>
<div class="class-name">.flaticon-tongue2</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/unconcious-boy-face_75496">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-two128"></div>
<div class="class-name">.flaticon-two128</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/two-books-with-apple-on-top_27480">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-two210"></div>
<div class="class-name">.flaticon-two210</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/two-persons-talking-sharing-sitting-on-a-table_47024">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-users53"></div>
<div class="class-name">.flaticon-users53</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/user-with-tie_74229">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-very7"></div>
<div class="class-name">.flaticon-very7</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/very-angry-emoticon-square-face_42898">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-wink"></div>
<div class="class-name">.flaticon-wink</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/boy-winking_75598">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-wink9"></div>
<div class="class-name">.flaticon-wink9</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/wink-face-square_42830">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-winking9"></div>
<div class="class-name">.flaticon-winking9</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/winking-emoticon-smiling-face-with-tongue-out-of-the-mouth-in-square-rounded-outline-shape_42861">Freepik</a></div></div><div class="glyph">
<div class="glyph-icon flaticon-winners1"></div>
<div class="class-name">.flaticon-winners1</div><div class="author-name">Author: <a href="http://www.flaticon.com/free-icon/winners-ribbon_27475">Freepik</a></div></div></section>
<section class="attribution">
<div class="usetitle">License and attribution:</div><div class="attrDiv">Font generated by <a href="http://www.flaticon.com">flaticon.com</a>
under <a href="http://creativecommons.org/licenses/by/3.0/">CC BY</a>. The authors are: <a href="http://www.freepik.com">Freepik</a>, <a href="http://www.simpleicon.com">SimpleIcon</a>, <a href="http://"></a>, <a href="http://www.unocha.org">OCHA</a>, <a href="http://www.icomoon.io">Icomoon</a>.</div><div class="usetitle">Copy the Attribution License:</div>
<textarea onclick="this.focus();this.select();">Font generated by &lt;a href=&quot;http://www.flaticon.com&quot;&gt;flaticon.com&lt;/a&gt;
under &lt;a href=&quot;http://creativecommons.org/licenses/by/3.0/&quot;&gt;CC BY&lt;/a&gt;. The authors are: &lt;a href=&quot;http://www.freepik.com&quot;&gt;Freepik&lt;/a&gt;, &lt;a href=&quot;http://www.simpleicon.com&quot;&gt;SimpleIcon&lt;/a&gt;, &lt;a href=&quot;http://&quot;&gt;&lt;/a&gt;, &lt;a href=&quot;http://www.unocha.org&quot;&gt;OCHA&lt;/a&gt;, &lt;a href=&quot;http://www.icomoon.io&quot;&gt;Icomoon&lt;/a&gt;.</textarea>
</section>
<section class="iconsuse">
<div class="usetitle">Examples:</div>
<div class="image"><p>&lt;i class=&quot;flaticon-accident3&quot;&gt;&lt;/i&gt; <i class="flaticon-accident3"></i></p><p>&lt;i class=&quot;flaticon-alphabet3&quot;&gt;&lt;/i&gt; <i class="flaticon-alphabet3"></i></p><p>&lt;i class=&quot;flaticon-angel&quot;&gt;&lt;/i&gt; <i class="flaticon-angel"></i></p><p>&lt;i class=&quot;flaticon-angry&quot;&gt;&lt;/i&gt; <i class="flaticon-angry"></i></p><p>&lt;i class=&quot;flaticon-angry2&quot;&gt;&lt;/i&gt; <i class="flaticon-angry2"></i></p></div><div class="image"><p>&lt;span class=&quot;flaticon-angry23&quot;&gt;&lt;/span&gt; <span class="flaticon-angry23"></span></p><p>&lt;span class=&quot;flaticon-angry40&quot;&gt;&lt;/span&gt; <span class="flaticon-angry40"></span></p><p>&lt;span class=&quot;flaticon-angry41&quot;&gt;&lt;/span&gt; <span class="flaticon-angry41"></span></p><p>&lt;span class=&quot;flaticon-animal203&quot;&gt;&lt;/span&gt; <span class="flaticon-animal203"></span></p><p>&lt;span class=&quot;flaticon-annulled3&quot;&gt;&lt;/span&gt; <span class="flaticon-annulled3"></span></p></div><div class="image"><p>&lt;span class=&quot;flaticon-bandaid&quot;&gt;&lt;/span&gt; <span class="flaticon-bandaid"></span></p><p>&lt;i class=&quot;flaticon-battery88&quot;&gt;&lt;/i&gt; <i class="flaticon-battery88"></i></p><p>&lt;i class=&quot;flaticon-book97&quot;&gt;&lt;/i&gt; <i class="flaticon-book97"></i></p><p>&lt;i class=&quot;flaticon-boy11&quot;&gt;&lt;/i&gt; <i class="flaticon-boy11"></i></p><p>&lt;i class=&quot;flaticon-boy12&quot;&gt;&lt;/i&gt; <i class="flaticon-boy12"></i></p></div><div class="image"><p>&lt;span class=&quot;flaticon-business57&quot;&gt;&lt;/span&gt; <span class="flaticon-business57"></span></p><p>&lt;span class=&quot;flaticon-camouflage&quot;&gt;&lt;/span&gt; <span class="flaticon-camouflage"></span></p><p>&lt;span class=&quot;flaticon-car65&quot;&gt;&lt;/span&gt; <span class="flaticon-car65"></span></p><p>&lt;span class=&quot;flaticon-certificate7&quot;&gt;&lt;/span&gt; <span class="flaticon-certificate7"></span></p><p>&lt;span class=&quot;flaticon-checklist4&quot;&gt;&lt;/span&gt; <span class="flaticon-checklist4"></span></p></div><div class="image"></div>
</section>
<div id="footer">
<div>Generated by <a href="http://www.flaticon.com">flaticon.com</a>
</div>
</div>
</body>
</html>

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

Binary file not shown.

View File

@@ -12,38 +12,31 @@
//
//= require jquery
//= require jquery_ujs
//= require jquery.ui.all
//= require jquery-ui/core
// require jquery.ui.draggable
// require jquery.ui.sortable
// require jquery.ui.gallery
// require jquery.sortable
// require jquery-ui
//= require_tree .
//= require tinymce-jquery
//= require bootstrap
//= require bootstrap/colorpicker
//= require bootstrap/datepicker
//= require bootstrap/load-image.min
//= require bootstrap/image-gallery.min
//= require jquery-fileupload
// require jquery.remotipart
//= require jquery.datetimepicker
//= require_tree .
function insertAttachment(url,name) {
var ext = url.split('.').pop().toLowerCase();
var img_ext = [ "jpg", "png", "bmp" , "jpeg" ];
// if ( img_ext.indexOf(ext) > -1) {
// tinymce.activeEditor.setContent(tinymce.activeEditor.getContent({format : 'raw'}) + "<img src=\"" + url + "\" title=\"" + name + "\">");
// }
// else {
// tinymce.activeEditor.setContent(tinymce.activeEditor.getContent({format : 'raw'}) + "<a href=\"" + url + "\">" + name +"</a>");
// }
if ( img_ext.indexOf(ext) > -1) {
tinymce.activeEditor.execCommand('mceInsertContent', false, "<img src=\"" + url + "\" title=\"" + name + "\">");
}
else {
tinymce.activeEditor.execCommand('mceInsertContent', false, "<a href=\"" + url + "\">" + name +"</a>");
}
}
function insertIcon_ffi1(name) {
tinymce.activeEditor.execCommand('mceInsertContent',false,'<span class="'+name+'">&nbsp;</span>&nbsp;')
}

View File

@@ -0,0 +1,12 @@
/**
* @preserve
* Project: Bootstrap Hover Dropdown
* Author: Cameron Spear
* Version: v2.0.11
* Contributors: Mattia Larentis
* Dependencies: Bootstrap's Dropdown plugin, jQuery
* Description: A simple plugin to enable Bootstrap dropdowns to active on hover and provide a nice user experience.
* License: MIT
* Homepage: http://cameronspear.com/blog/bootstrap-dropdown-on-hover-plugin/
*/
!function($,n,e){var o=$();$.fn.dropdownHover=function(e){return"ontouchstart"in document?this:(o=o.add(this.parent()),this.each(function(){function t(e){o.find(":focus").blur(),h.instantlyCloseOthers===!0&&o.removeClass("open"),n.clearTimeout(c),i.addClass("open"),r.trigger(a)}var r=$(this),i=r.parent(),d={delay:500,instantlyCloseOthers:!0},s={delay:$(this).data("delay"),instantlyCloseOthers:$(this).data("close-others")},a="show.bs.dropdown",u="hide.bs.dropdown",h=$.extend(!0,{},d,e,s),c;i.hover(function(n){return i.hasClass("open")||r.is(n.target)?void t(n):!0},function(){c=n.setTimeout(function(){i.removeClass("open"),r.trigger(u)},h.delay)}),r.hover(function(n){return i.hasClass("open")||i.is(n.target)?void t(n):!0}),i.find(".dropdown-submenu").each(function(){var e=$(this),o;e.hover(function(){n.clearTimeout(o),e.children(".dropdown-menu").show(),e.siblings().children(".dropdown-menu").hide()},function(){var t=e.children(".dropdown-menu");o=n.setTimeout(function(){t.hide()},h.delay)})})}))},$(document).ready(function(){$('[data-hover="dropdown"]').dropdownHover()})}(jQuery,this);

View File

@@ -0,0 +1,3 @@
# Place all the behaviors and hooks related to the matching controller here.
# All this logic will automatically be available in application.js.
# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/

View File

@@ -0,0 +1,402 @@
/*
Highcharts JS v4.1.7 (2015-06-26)
(c) 2009-2014 Torstein Honsi
License: www.highcharts.com/license
*/
(function(){function z(){var a,b=arguments,c,d={},e=function(a,b){var c,d;typeof a!=="object"&&(a={});for(d in b)b.hasOwnProperty(d)&&(c=b[d],a[d]=c&&typeof c==="object"&&Object.prototype.toString.call(c)!=="[object Array]"&&d!=="renderTo"&&typeof c.nodeType!=="number"?e(a[d]||{},c):b[d]);return a};b[0]===!0&&(d=b[1],b=Array.prototype.slice.call(b,2));c=b.length;for(a=0;a<c;a++)d=e(d,b[a]);return d}function D(a,b){return parseInt(a,b||10)}function Da(a){return typeof a==="string"}function da(a){return a&&
typeof a==="object"}function Ha(a){return Object.prototype.toString.call(a)==="[object Array]"}function ra(a){return typeof a==="number"}function Ea(a){return W.log(a)/W.LN10}function ia(a){return W.pow(10,a)}function ja(a,b){for(var c=a.length;c--;)if(a[c]===b){a.splice(c,1);break}}function q(a){return a!==y&&a!==null}function J(a,b,c){var d,e;if(Da(b))q(c)?a.setAttribute(b,c):a&&a.getAttribute&&(e=a.getAttribute(b));else if(q(b)&&da(b))for(d in b)a.setAttribute(d,b[d]);return e}function sa(a){return Ha(a)?
a:[a]}function L(a,b){if(ya&&!ca&&b&&b.opacity!==y)b.filter="alpha(opacity="+b.opacity*100+")";x(a.style,b)}function $(a,b,c,d,e){a=B.createElement(a);b&&x(a,b);e&&L(a,{padding:0,border:P,margin:0});c&&L(a,c);d&&d.appendChild(a);return a}function ka(a,b){var c=function(){return y};c.prototype=new a;x(c.prototype,b);return c}function Ia(a,b){return Array((b||2)+1-String(a).length).join(0)+a}function Wa(a){return(eb&&eb(a)||ob||0)*6E4}function Ja(a,b){for(var c="{",d=!1,e,f,g,h,i,j=[];(c=a.indexOf(c))!==
-1;){e=a.slice(0,c);if(d){f=e.split(":");g=f.shift().split(".");i=g.length;e=b;for(h=0;h<i;h++)e=e[g[h]];if(f.length)f=f.join(":"),g=/\.([0-9])/,h=T.lang,i=void 0,/f$/.test(f)?(i=(i=f.match(g))?i[1]:-1,e!==null&&(e=A.numberFormat(e,i,h.decimalPoint,f.indexOf(",")>-1?h.thousandsSep:""))):e=Oa(f,e)}j.push(e);a=a.slice(c+1);c=(d=!d)?"}":"{"}j.push(a);return j.join("")}function pb(a){return W.pow(10,V(W.log(a)/W.LN10))}function qb(a,b,c,d,e){var f,g=a,c=p(c,1);f=a/c;b||(b=[1,2,2.5,5,10],d===!1&&(c===
1?b=[1,2,5,10]:c<=0.1&&(b=[1/c])));for(d=0;d<b.length;d++)if(g=b[d],e&&g*c>=a||!e&&f<=(b[d]+(b[d+1]||b[d]))/2)break;g*=c;return g}function rb(a,b){var c=a.length,d,e;for(e=0;e<c;e++)a[e].ss_i=e;a.sort(function(a,c){d=b(a,c);return d===0?a.ss_i-c.ss_i:d});for(e=0;e<c;e++)delete a[e].ss_i}function Pa(a){for(var b=a.length,c=a[0];b--;)a[b]<c&&(c=a[b]);return c}function Fa(a){for(var b=a.length,c=a[0];b--;)a[b]>c&&(c=a[b]);return c}function Qa(a,b){for(var c in a)a[c]&&a[c]!==b&&a[c].destroy&&a[c].destroy(),
delete a[c]}function Ra(a){fb||(fb=$(Ka));a&&fb.appendChild(a);fb.innerHTML=""}function la(a,b){var c="Highcharts error #"+a+": www.highcharts.com/errors/"+a;if(b)throw c;K.console&&console.log(c)}function ea(a){return parseFloat(a.toPrecision(14))}function Sa(a,b){za=p(a,b.animation)}function Db(){var a=T.global,b=a.useUTC,c=b?"getUTC":"get",d=b?"setUTC":"set";Aa=a.Date||window.Date;ob=b&&a.timezoneOffset;eb=b&&a.getTimezoneOffset;gb=function(a,c,d,h,i,j){var k;b?(k=Aa.UTC.apply(0,arguments),k+=
Wa(k)):k=(new Aa(a,c,p(d,1),p(h,0),p(i,0),p(j,0))).getTime();return k};sb=c+"Minutes";tb=c+"Hours";ub=c+"Day";Xa=c+"Date";Ya=c+"Month";Za=c+"FullYear";Eb=d+"Milliseconds";Fb=d+"Seconds";Gb=d+"Minutes";Hb=d+"Hours";vb=d+"Date";wb=d+"Month";xb=d+"FullYear"}function Q(){}function Ta(a,b,c,d){this.axis=a;this.pos=b;this.type=c||"";this.isNew=!0;!c&&!d&&this.addLabel()}function Ib(a,b,c,d,e){var f=a.chart.inverted;this.axis=a;this.isNegative=c;this.options=b;this.x=d;this.total=null;this.points={};this.stack=
e;this.alignOptions={align:b.align||(f?c?"left":"right":"center"),verticalAlign:b.verticalAlign||(f?"middle":c?"bottom":"top"),y:p(b.y,f?4:c?14:-6),x:p(b.x,f?c?-6:6:0)};this.textAlign=b.textAlign||(f?c?"right":"left":"center")}var y,B=document,K=window,W=Math,r=W.round,V=W.floor,ta=W.ceil,u=W.max,C=W.min,O=W.abs,X=W.cos,aa=W.sin,ma=W.PI,ha=ma*2/360,Ba=navigator.userAgent,Jb=K.opera,ya=/(msie|trident)/i.test(Ba)&&!Jb,hb=B.documentMode===8,ib=/AppleWebKit/.test(Ba),La=/Firefox/.test(Ba),Kb=/(Mobile|Android|Windows Phone)/.test(Ba),
Ca="http://www.w3.org/2000/svg",ca=!!B.createElementNS&&!!B.createElementNS(Ca,"svg").createSVGRect,Ob=La&&parseInt(Ba.split("Firefox/")[1],10)<4,fa=!ca&&!ya&&!!B.createElement("canvas").getContext,$a,ab,Lb={},yb=0,fb,T,Oa,za,zb,E,na=function(){return y},Y=[],bb=0,Ka="div",P="none",Pb=/^[0-9]+$/,jb=["plotTop","marginRight","marginBottom","plotLeft"],Qb="stroke-width",Aa,gb,ob,eb,sb,tb,ub,Xa,Ya,Za,Eb,Fb,Gb,Hb,vb,wb,xb,M={},A;A=K.Highcharts=K.Highcharts?la(16,!0):{};A.seriesTypes=M;var x=A.extend=function(a,
b){var c;a||(a={});for(c in b)a[c]=b[c];return a},p=A.pick=function(){var a=arguments,b,c,d=a.length;for(b=0;b<d;b++)if(c=a[b],c!==y&&c!==null)return c},cb=A.wrap=function(a,b,c){var d=a[b];a[b]=function(){var a=Array.prototype.slice.call(arguments);a.unshift(d);return c.apply(this,a)}};Oa=function(a,b,c){if(!q(b)||isNaN(b))return"Invalid date";var a=p(a,"%Y-%m-%d %H:%M:%S"),d=new Aa(b-Wa(b)),e,f=d[tb](),g=d[ub](),h=d[Xa](),i=d[Ya](),j=d[Za](),k=T.lang,l=k.weekdays,d=x({a:l[g].substr(0,3),A:l[g],
d:Ia(h),e:h,w:g,b:k.shortMonths[i],B:k.months[i],m:Ia(i+1),y:j.toString().substr(2,2),Y:j,H:Ia(f),I:Ia(f%12||12),l:f%12||12,M:Ia(d[sb]()),p:f<12?"AM":"PM",P:f<12?"am":"pm",S:Ia(d.getSeconds()),L:Ia(r(b%1E3),3)},A.dateFormats);for(e in d)for(;a.indexOf("%"+e)!==-1;)a=a.replace("%"+e,typeof d[e]==="function"?d[e](b):d[e]);return c?a.substr(0,1).toUpperCase()+a.substr(1):a};E={millisecond:1,second:1E3,minute:6E4,hour:36E5,day:864E5,week:6048E5,month:24192E5,year:314496E5};A.numberFormat=function(a,b,
c,d){var e=T.lang,a=+a||0,f=b===-1?C((a.toString().split(".")[1]||"").length,20):isNaN(b=O(b))?2:b,b=c===void 0?e.decimalPoint:c,d=d===void 0?e.thousandsSep:d,e=a<0?"-":"",c=String(D(a=O(a).toFixed(f))),g=c.length>3?c.length%3:0;return e+(g?c.substr(0,g)+d:"")+c.substr(g).replace(/(\d{3})(?=\d)/g,"$1"+d)+(f?b+O(a-c).toFixed(f).slice(2):"")};zb={init:function(a,b,c){var b=b||"",d=a.shift,e=b.indexOf("C")>-1,f=e?7:3,g,b=b.split(" "),c=[].concat(c),h,i,j=function(a){for(g=a.length;g--;)a[g]==="M"&&a.splice(g+
1,0,a[g+1],a[g+2],a[g+1],a[g+2])};e&&(j(b),j(c));a.isArea&&(h=b.splice(b.length-6,6),i=c.splice(c.length-6,6));if(d<=c.length/f&&b.length===c.length)for(;d--;)c=[].concat(c).splice(0,f).concat(c);a.shift=0;if(b.length)for(a=c.length;b.length<a;)d=[].concat(b).splice(b.length-f,f),e&&(d[f-6]=d[f-2],d[f-5]=d[f-1]),b=b.concat(d);h&&(b=b.concat(h),c=c.concat(i));return[b,c]},step:function(a,b,c,d){var e=[],f=a.length;if(c===1)e=d;else if(f===b.length&&c<1)for(;f--;)d=parseFloat(a[f]),e[f]=isNaN(d)?a[f]:
c*parseFloat(b[f]-d)+d;else e=b;return e}};(function(a){K.HighchartsAdapter=K.HighchartsAdapter||a&&{init:function(b){var c=a.fx;a.extend(a.easing,{easeOutQuad:function(a,b,c,g,h){return-g*(b/=h)*(b-2)+c}});a.each(["cur","_default","width","height","opacity"],function(b,e){var f=c.step,g;e==="cur"?f=c.prototype:e==="_default"&&a.Tween&&(f=a.Tween.propHooks[e],e="set");(g=f[e])&&(f[e]=function(a){var c,a=b?a:this;if(a.prop!=="align")return c=a.elem,c.attr?c.attr(a.prop,e==="cur"?y:a.now):g.apply(this,
arguments)})});cb(a.cssHooks.opacity,"get",function(a,b,c){return b.attr?b.opacity||0:a.call(this,b,c)});this.addAnimSetter("d",function(a){var c=a.elem,f;if(!a.started)f=b.init(c,c.d,c.toD),a.start=f[0],a.end=f[1],a.started=!0;c.attr("d",b.step(a.start,a.end,a.pos,c.toD))});this.each=Array.prototype.forEach?function(a,b){return Array.prototype.forEach.call(a,b)}:function(a,b){var c,g=a.length;for(c=0;c<g;c++)if(b.call(a[c],a[c],c,a)===!1)return c};a.fn.highcharts=function(){var a="Chart",b=arguments,
c,g;if(this[0]){Da(b[0])&&(a=b[0],b=Array.prototype.slice.call(b,1));c=b[0];if(c!==y)c.chart=c.chart||{},c.chart.renderTo=this[0],new A[a](c,b[1]),g=this;c===y&&(g=Y[J(this[0],"data-highcharts-chart")])}return g}},addAnimSetter:function(b,c){a.Tween?a.Tween.propHooks[b]={set:c}:a.fx.step[b]=c},getScript:a.getScript,inArray:a.inArray,adapterRun:function(b,c){return a(b)[c]()},grep:a.grep,map:function(a,c){for(var d=[],e=0,f=a.length;e<f;e++)d[e]=c.call(a[e],a[e],e,a);return d},offset:function(b){return a(b).offset()},
addEvent:function(b,c,d){a(b).bind(c,d)},removeEvent:function(b,c,d){var e=B.removeEventListener?"removeEventListener":"detachEvent";B[e]&&b&&!b[e]&&(b[e]=function(){});a(b).unbind(c,d)},fireEvent:function(b,c,d,e){var f=a.Event(c),g="detached"+c,h;!ya&&d&&(delete d.layerX,delete d.layerY,delete d.returnValue);x(f,d);b[c]&&(b[g]=b[c],b[c]=null);a.each(["preventDefault","stopPropagation"],function(a,b){var c=f[b];f[b]=function(){try{c.call(f)}catch(a){b==="preventDefault"&&(h=!0)}}});a(b).trigger(f);
b[g]&&(b[c]=b[g],b[g]=null);e&&!f.isDefaultPrevented()&&!h&&e(f)},washMouseEvent:function(a){var c=a.originalEvent||a;if(c.pageX===y)c.pageX=a.pageX,c.pageY=a.pageY;return c},animate:function(b,c,d){var e=a(b);if(!b.style)b.style={};if(c.d)b.toD=c.d,c.d=1;e.stop();c.opacity!==y&&b.attr&&(c.opacity+="px");b.hasAnim=1;e.animate(c,d)},stop:function(b){b.hasAnim&&a(b).stop()}}})(K.jQuery);var U=K.HighchartsAdapter,F=U||{};U&&U.init.call(U,zb);var kb=F.adapterRun,Rb=F.getScript,Ma=F.inArray,o=A.each=F.each,
lb=F.grep,Sb=F.offset,Ua=F.map,H=F.addEvent,Z=F.removeEvent,I=F.fireEvent,Tb=F.washMouseEvent,mb=F.animate,db=F.stop;T={colors:"#7cb5ec,#434348,#90ed7d,#f7a35c,#8085e9,#f15c80,#e4d354,#2b908f,#f45b5b,#91e8e1".split(","),symbols:["circle","diamond","square","triangle","triangle-down"],lang:{loading:"Loading...",months:"January,February,March,April,May,June,July,August,September,October,November,December".split(","),shortMonths:"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec".split(","),weekdays:"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday".split(","),
decimalPoint:".",numericSymbols:"k,M,G,T,P,E".split(","),resetZoom:"Reset zoom",resetZoomTitle:"Reset zoom level 1:1",thousandsSep:" "},global:{useUTC:!0,canvasToolsURL:"http://code.highcharts.com/4.1.7/modules/canvas-tools.js",VMLRadialGradientURL:"http://code.highcharts.com/4.1.7/gfx/vml-radial-gradient.png"},chart:{borderColor:"#4572A7",borderRadius:0,defaultSeriesType:"line",ignoreHiddenSeries:!0,spacing:[10,10,15,10],backgroundColor:"#FFFFFF",plotBorderColor:"#C0C0C0",resetZoomButton:{theme:{zIndex:20},
position:{align:"right",x:-10,y:10}}},title:{text:"Chart title",align:"center",margin:15,style:{color:"#333333",fontSize:"18px"}},subtitle:{text:"",align:"center",style:{color:"#555555"}},plotOptions:{line:{allowPointSelect:!1,showCheckbox:!1,animation:{duration:1E3},events:{},lineWidth:2,marker:{lineWidth:0,radius:4,lineColor:"#FFFFFF",states:{hover:{enabled:!0,lineWidthPlus:1,radiusPlus:2},select:{fillColor:"#FFFFFF",lineColor:"#000000",lineWidth:2}}},point:{events:{}},dataLabels:{align:"center",
formatter:function(){return this.y===null?"":A.numberFormat(this.y,-1)},style:{color:"contrast",fontSize:"11px",fontWeight:"bold",textShadow:"0 0 6px contrast, 0 0 3px contrast"},verticalAlign:"bottom",x:0,y:0,padding:5},cropThreshold:300,pointRange:0,states:{hover:{lineWidthPlus:1,marker:{},halo:{size:10,opacity:0.25}},select:{marker:{}}},stickyTracking:!0,turboThreshold:1E3}},labels:{style:{position:"absolute",color:"#3E576F"}},legend:{enabled:!0,align:"center",layout:"horizontal",labelFormatter:function(){return this.name},
borderColor:"#909090",borderRadius:0,navigation:{activeColor:"#274b6d",inactiveColor:"#CCC"},shadow:!1,itemStyle:{color:"#333333",fontSize:"12px",fontWeight:"bold"},itemHoverStyle:{color:"#000"},itemHiddenStyle:{color:"#CCC"},itemCheckboxStyle:{position:"absolute",width:"13px",height:"13px"},symbolPadding:5,verticalAlign:"bottom",x:0,y:0,title:{style:{fontWeight:"bold"}}},loading:{labelStyle:{fontWeight:"bold",position:"relative",top:"45%"},style:{position:"absolute",backgroundColor:"white",opacity:0.5,
textAlign:"center"}},tooltip:{enabled:!0,animation:ca,backgroundColor:"rgba(249, 249, 249, .85)",borderWidth:1,borderRadius:3,dateTimeLabelFormats:{millisecond:"%A, %b %e, %H:%M:%S.%L",second:"%A, %b %e, %H:%M:%S",minute:"%A, %b %e, %H:%M",hour:"%A, %b %e, %H:%M",day:"%A, %b %e, %Y",week:"Week from %A, %b %e, %Y",month:"%B %Y",year:"%Y"},footerFormat:"",headerFormat:'<span style="font-size: 10px">{point.key}</span><br/>',pointFormat:'<span style="color:{point.color}">\u25CF</span> {series.name}: <b>{point.y}</b><br/>',
shadow:!0,snap:Kb?25:10,style:{color:"#333333",cursor:"default",fontSize:"12px",padding:"8px",whiteSpace:"nowrap"}},credits:{enabled:!0,text:"Highcharts.com",href:"http://www.highcharts.com",position:{align:"right",x:-10,verticalAlign:"bottom",y:-5},style:{cursor:"pointer",color:"#909090",fontSize:"9px"}}};var ba=T.plotOptions,U=ba.line;Db();var Ub=/rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]?(?:\.[0-9]+)?)\s*\)/,Vb=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/,
Wb=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/,oa=function(a){var b=[],c,d;(function(a){a&&a.stops?d=Ua(a.stops,function(a){return oa(a[1])}):(c=Ub.exec(a))?b=[D(c[1]),D(c[2]),D(c[3]),parseFloat(c[4],10)]:(c=Vb.exec(a))?b=[D(c[1],16),D(c[2],16),D(c[3],16),1]:(c=Wb.exec(a))&&(b=[D(c[1]),D(c[2]),D(c[3]),1])})(a);return{get:function(c){var f;d?(f=z(a),f.stops=[].concat(f.stops),o(d,function(a,b){f.stops[b]=[f.stops[b][0],a.get(c)]})):f=b&&!isNaN(b[0])?c==="rgb"?"rgb("+b[0]+","+
b[1]+","+b[2]+")":c==="a"?b[3]:"rgba("+b.join(",")+")":a;return f},brighten:function(a){if(d)o(d,function(b){b.brighten(a)});else if(ra(a)&&a!==0){var c;for(c=0;c<3;c++)b[c]+=D(a*255),b[c]<0&&(b[c]=0),b[c]>255&&(b[c]=255)}return this},rgba:b,setOpacity:function(a){b[3]=a;return this},raw:a}};Q.prototype={opacity:1,textProps:"fontSize,fontWeight,fontFamily,fontStyle,color,lineHeight,width,textDecoration,textShadow".split(","),init:function(a,b){this.element=b==="span"?$(b):B.createElementNS(Ca,b);
this.renderer=a},animate:function(a,b,c){b=p(b,za,!0);db(this);if(b){b=z(b,{});if(c)b.complete=c;mb(this,a,b)}else this.attr(a),c&&c();return this},colorGradient:function(a,b,c){var d=this.renderer,e,f,g,h,i,j,k,l,m,n,v=[];a.linearGradient?f="linearGradient":a.radialGradient&&(f="radialGradient");if(f){g=a[f];h=d.gradients;j=a.stops;m=c.radialReference;Ha(g)&&(a[f]=g={x1:g[0],y1:g[1],x2:g[2],y2:g[3],gradientUnits:"userSpaceOnUse"});f==="radialGradient"&&m&&!q(g.gradientUnits)&&(g=z(g,{cx:m[0]-m[2]/
2+g.cx*m[2],cy:m[1]-m[2]/2+g.cy*m[2],r:g.r*m[2],gradientUnits:"userSpaceOnUse"}));for(n in g)n!=="id"&&v.push(n,g[n]);for(n in j)v.push(j[n]);v=v.join(",");h[v]?a=h[v].attr("id"):(g.id=a="highcharts-"+yb++,h[v]=i=d.createElement(f).attr(g).add(d.defs),i.stops=[],o(j,function(a){a[1].indexOf("rgba")===0?(e=oa(a[1]),k=e.get("rgb"),l=e.get("a")):(k=a[1],l=1);a=d.createElement("stop").attr({offset:a[0],"stop-color":k,"stop-opacity":l}).add(i);i.stops.push(a)}));c.setAttribute(b,"url("+d.url+"#"+a+")")}},
applyTextShadow:function(a){var b=this.element,c,d=a.indexOf("contrast")!==-1,e={},f=this.renderer.forExport||b.style.textShadow!==y&&!ya;if(d)e.textShadow=a=a.replace(/contrast/g,this.renderer.getContrast(b.style.fill));if(ib)e.textRendering="geometricPrecision";f?L(b,e):(this.fakeTS=!0,this.ySetter=this.xSetter,c=[].slice.call(b.getElementsByTagName("tspan")),o(a.split(/\s?,\s?/g),function(a){var d=b.firstChild,e,f,a=a.split(" ");e=a[a.length-1];(f=a[a.length-2])&&o(c,function(a,c){var g;c===0&&
(a.setAttribute("x",b.getAttribute("x")),c=b.getAttribute("y"),a.setAttribute("y",c||0),c===null&&b.setAttribute("y",0));g=a.cloneNode(1);J(g,{"class":"highcharts-text-shadow",fill:e,stroke:e,"stroke-opacity":1/u(D(f),3),"stroke-width":f,"stroke-linejoin":"round"});b.insertBefore(g,d)})}))},attr:function(a,b){var c,d,e=this.element,f,g=this,h;typeof a==="string"&&b!==y&&(c=a,a={},a[c]=b);if(typeof a==="string")g=(this[a+"Getter"]||this._defaultGetter).call(this,a,e);else{for(c in a){d=a[c];h=!1;this.symbolName&&
/^(x|y|width|height|r|start|end|innerR|anchorX|anchorY)/.test(c)&&(f||(this.symbolAttr(a),f=!0),h=!0);if(this.rotation&&(c==="x"||c==="y"))this.doTransform=!0;h||(this[c+"Setter"]||this._defaultSetter).call(this,d,c,e);this.shadows&&/^(width|height|visibility|x|y|d|transform|cx|cy|r)$/.test(c)&&this.updateShadows(c,d)}if(this.doTransform)this.updateTransform(),this.doTransform=!1}return g},updateShadows:function(a,b){for(var c=this.shadows,d=c.length;d--;)c[d].setAttribute(a,a==="height"?u(b-(c[d].cutHeight||
0),0):a==="d"?this.d:b)},addClass:function(a){var b=this.element,c=J(b,"class")||"";c.indexOf(a)===-1&&J(b,"class",c+" "+a);return this},symbolAttr:function(a){var b=this;o("x,y,r,start,end,width,height,innerR,anchorX,anchorY".split(","),function(c){b[c]=p(a[c],b[c])});b.attr({d:b.renderer.symbols[b.symbolName](b.x,b.y,b.width,b.height,b)})},clip:function(a){return this.attr("clip-path",a?"url("+this.renderer.url+"#"+a.id+")":P)},crisp:function(a){var b,c={},d,e=a.strokeWidth||this.strokeWidth||0;
d=r(e)%2/2;a.x=V(a.x||this.x||0)+d;a.y=V(a.y||this.y||0)+d;a.width=V((a.width||this.width||0)-2*d);a.height=V((a.height||this.height||0)-2*d);a.strokeWidth=e;for(b in a)this[b]!==a[b]&&(this[b]=c[b]=a[b]);return c},css:function(a){var b=this.styles,c={},d=this.element,e,f,g="";e=!b;if(a&&a.color)a.fill=a.color;if(b)for(f in a)a[f]!==b[f]&&(c[f]=a[f],e=!0);if(e){e=this.textWidth=a&&a.width&&d.nodeName.toLowerCase()==="text"&&D(a.width)||this.textWidth;b&&(a=x(b,c));this.styles=a;e&&(fa||!ca&&this.renderer.forExport)&&
delete a.width;if(ya&&!ca)L(this.element,a);else{b=function(a,b){return"-"+b.toLowerCase()};for(f in a)g+=f.replace(/([A-Z])/g,b)+":"+a[f]+";";J(d,"style",g)}e&&this.added&&this.renderer.buildText(this)}return this},on:function(a,b){var c=this,d=c.element;ab&&a==="click"?(d.ontouchstart=function(a){c.touchEventFired=Aa.now();a.preventDefault();b.call(d,a)},d.onclick=function(a){(Ba.indexOf("Android")===-1||Aa.now()-(c.touchEventFired||0)>1100)&&b.call(d,a)}):d["on"+a]=b;return this},setRadialReference:function(a){this.element.radialReference=
a;return this},translate:function(a,b){return this.attr({translateX:a,translateY:b})},invert:function(){this.inverted=!0;this.updateTransform();return this},updateTransform:function(){var a=this.translateX||0,b=this.translateY||0,c=this.scaleX,d=this.scaleY,e=this.inverted,f=this.rotation,g=this.element;e&&(a+=this.attr("width"),b+=this.attr("height"));a=["translate("+a+","+b+")"];e?a.push("rotate(90) scale(-1,1)"):f&&a.push("rotate("+f+" "+(g.getAttribute("x")||0)+" "+(g.getAttribute("y")||0)+")");
(q(c)||q(d))&&a.push("scale("+p(c,1)+" "+p(d,1)+")");a.length&&g.setAttribute("transform",a.join(" "))},toFront:function(){var a=this.element;a.parentNode.appendChild(a);return this},align:function(a,b,c){var d,e,f,g,h={};e=this.renderer;f=e.alignedObjects;if(a){if(this.alignOptions=a,this.alignByTranslate=b,!c||Da(c))this.alignTo=d=c||"renderer",ja(f,this),f.push(this),c=null}else a=this.alignOptions,b=this.alignByTranslate,d=this.alignTo;c=p(c,e[d],e);d=a.align;e=a.verticalAlign;f=(c.x||0)+(a.x||
0);g=(c.y||0)+(a.y||0);if(d==="right"||d==="center")f+=(c.width-(a.width||0))/{right:1,center:2}[d];h[b?"translateX":"x"]=r(f);if(e==="bottom"||e==="middle")g+=(c.height-(a.height||0))/({bottom:1,middle:2}[e]||1);h[b?"translateY":"y"]=r(g);this[this.placed?"animate":"attr"](h);this.placed=!0;this.alignAttr=h;return this},getBBox:function(a){var b,c=this.renderer,d,e=this.rotation,f=this.element,g=this.styles,h=e*ha;d=this.textStr;var i,j=f.style,k,l;d!==y&&(l=["",e||0,g&&g.fontSize,f.style.width].join(","),
l=d===""||Pb.test(d)?"num:"+d.toString().length+l:d+l);l&&!a&&(b=c.cache[l]);if(!b){if(f.namespaceURI===Ca||c.forExport){try{k=this.fakeTS&&function(a){o(f.querySelectorAll(".highcharts-text-shadow"),function(b){b.style.display=a})},La&&j.textShadow?(i=j.textShadow,j.textShadow=""):k&&k(P),b=f.getBBox?x({},f.getBBox()):{width:f.offsetWidth,height:f.offsetHeight},i?j.textShadow=i:k&&k("")}catch(m){}if(!b||b.width<0)b={width:0,height:0}}else b=this.htmlGetBBox();if(c.isSVG){a=b.width;d=b.height;if(ya&&
g&&g.fontSize==="11px"&&d.toPrecision(3)==="16.9")b.height=d=14;if(e)b.width=O(d*aa(h))+O(a*X(h)),b.height=O(d*X(h))+O(a*aa(h))}c.cache[l]=b}return b},show:function(a){a&&this.element.namespaceURI===Ca?this.element.removeAttribute("visibility"):this.attr({visibility:a?"inherit":"visible"});return this},hide:function(){return this.attr({visibility:"hidden"})},fadeOut:function(a){var b=this;b.animate({opacity:0},{duration:a||150,complete:function(){b.attr({y:-9999})}})},add:function(a){var b=this.renderer,
c=this.element,d;if(a)this.parentGroup=a;this.parentInverted=a&&a.inverted;this.textStr!==void 0&&b.buildText(this);this.added=!0;if(!a||a.handleZ||this.zIndex)d=this.zIndexSetter();d||(a?a.element:b.box).appendChild(c);if(this.onAdd)this.onAdd();return this},safeRemoveChild:function(a){var b=a.parentNode;b&&b.removeChild(a)},destroy:function(){var a=this,b=a.element||{},c=a.shadows,d=a.renderer.isSVG&&b.nodeName==="SPAN"&&a.parentGroup,e,f;b.onclick=b.onmouseout=b.onmouseover=b.onmousemove=b.point=
null;db(a);if(a.clipPath)a.clipPath=a.clipPath.destroy();if(a.stops){for(f=0;f<a.stops.length;f++)a.stops[f]=a.stops[f].destroy();a.stops=null}a.safeRemoveChild(b);for(c&&o(c,function(b){a.safeRemoveChild(b)});d&&d.div&&d.div.childNodes.length===0;)b=d.parentGroup,a.safeRemoveChild(d.div),delete d.div,d=b;a.alignTo&&ja(a.renderer.alignedObjects,a);for(e in a)delete a[e];return null},shadow:function(a,b,c){var d=[],e,f,g=this.element,h,i,j,k;if(a){i=p(a.width,3);j=(a.opacity||0.15)/i;k=this.parentInverted?
"(-1,-1)":"("+p(a.offsetX,1)+", "+p(a.offsetY,1)+")";for(e=1;e<=i;e++){f=g.cloneNode(0);h=i*2+1-2*e;J(f,{isShadow:"true",stroke:a.color||"black","stroke-opacity":j*e,"stroke-width":h,transform:"translate"+k,fill:P});if(c)J(f,"height",u(J(f,"height")-h,0)),f.cutHeight=h;b?b.element.appendChild(f):g.parentNode.insertBefore(f,g);d.push(f)}this.shadows=d}return this},xGetter:function(a){this.element.nodeName==="circle"&&(a={x:"cx",y:"cy"}[a]||a);return this._defaultGetter(a)},_defaultGetter:function(a){a=
p(this[a],this.element?this.element.getAttribute(a):null,0);/^[\-0-9\.]+$/.test(a)&&(a=parseFloat(a));return a},dSetter:function(a,b,c){a&&a.join&&(a=a.join(" "));/(NaN| {2}|^$)/.test(a)&&(a="M 0 0");c.setAttribute(b,a);this[b]=a},dashstyleSetter:function(a){var b;if(a=a&&a.toLowerCase()){a=a.replace("shortdashdotdot","3,1,1,1,1,1,").replace("shortdashdot","3,1,1,1").replace("shortdot","1,1,").replace("shortdash","3,1,").replace("longdash","8,3,").replace(/dot/g,"1,3,").replace("dash","4,3,").replace(/,$/,
"").split(",");for(b=a.length;b--;)a[b]=D(a[b])*this["stroke-width"];a=a.join(",").replace("NaN","none");this.element.setAttribute("stroke-dasharray",a)}},alignSetter:function(a){this.element.setAttribute("text-anchor",{left:"start",center:"middle",right:"end"}[a])},opacitySetter:function(a,b,c){this[b]=a;c.setAttribute(b,a)},titleSetter:function(a){var b=this.element.getElementsByTagName("title")[0];b||(b=B.createElementNS(Ca,"title"),this.element.appendChild(b));b.appendChild(B.createTextNode(String(p(a),
"").replace(/<[^>]*>/g,"")))},textSetter:function(a){if(a!==this.textStr)delete this.bBox,this.textStr=a,this.added&&this.renderer.buildText(this)},fillSetter:function(a,b,c){typeof a==="string"?c.setAttribute(b,a):a&&this.colorGradient(a,b,c)},zIndexSetter:function(a,b){var c=this.renderer,d=this.parentGroup,c=(d||c).element||c.box,e,f,g=this.element,h;e=this.added;var i;q(a)&&(g.setAttribute(b,a),a=+a,this[b]===a&&(e=!1),this[b]=a);if(e){if((a=this.zIndex)&&d)d.handleZ=!0;d=c.childNodes;for(i=0;i<
d.length&&!h;i++)if(e=d[i],f=J(e,"zIndex"),e!==g&&(D(f)>a||!q(a)&&q(f)))c.insertBefore(g,e),h=!0;h||c.appendChild(g)}return h},_defaultSetter:function(a,b,c){c.setAttribute(b,a)}};Q.prototype.yGetter=Q.prototype.xGetter;Q.prototype.translateXSetter=Q.prototype.translateYSetter=Q.prototype.rotationSetter=Q.prototype.verticalAlignSetter=Q.prototype.scaleXSetter=Q.prototype.scaleYSetter=function(a,b){this[b]=a;this.doTransform=!0};Q.prototype["stroke-widthSetter"]=Q.prototype.strokeSetter=function(a,
b,c){this[b]=a;if(this.stroke&&this["stroke-width"])this.strokeWidth=this["stroke-width"],Q.prototype.fillSetter.call(this,this.stroke,"stroke",c),c.setAttribute("stroke-width",this["stroke-width"]),this.hasStroke=!0;else if(b==="stroke-width"&&a===0&&this.hasStroke)c.removeAttribute("stroke"),this.hasStroke=!1};var ua=function(){this.init.apply(this,arguments)};ua.prototype={Element:Q,init:function(a,b,c,d,e){var f=location,g,d=this.createElement("svg").attr({version:"1.1"}).css(this.getStyle(d));
g=d.element;a.appendChild(g);a.innerHTML.indexOf("xmlns")===-1&&J(g,"xmlns",Ca);this.isSVG=!0;this.box=g;this.boxWrapper=d;this.alignedObjects=[];this.url=(La||ib)&&B.getElementsByTagName("base").length?f.href.replace(/#.*?$/,"").replace(/([\('\)])/g,"\\$1").replace(/ /g,"%20"):"";this.createElement("desc").add().element.appendChild(B.createTextNode("Created with Highcharts 4.1.7"));this.defs=this.createElement("defs").add();this.forExport=e;this.gradients={};this.cache={};this.setSize(b,c,!1);var h;
if(La&&a.getBoundingClientRect)this.subPixelFix=b=function(){L(a,{left:0,top:0});h=a.getBoundingClientRect();L(a,{left:ta(h.left)-h.left+"px",top:ta(h.top)-h.top+"px"})},b(),H(K,"resize",b)},getStyle:function(a){return this.style=x({fontFamily:'"Lucida Grande", "Lucida Sans Unicode", Arial, Helvetica, sans-serif',fontSize:"12px"},a)},isHidden:function(){return!this.boxWrapper.getBBox().width},destroy:function(){var a=this.defs;this.box=null;this.boxWrapper=this.boxWrapper.destroy();Qa(this.gradients||
{});this.gradients=null;if(a)this.defs=a.destroy();this.subPixelFix&&Z(K,"resize",this.subPixelFix);return this.alignedObjects=null},createElement:function(a){var b=new this.Element;b.init(this,a);return b},draw:function(){},buildText:function(a){for(var b=a.element,c=this,d=c.forExport,e=p(a.textStr,"").toString(),f=e.indexOf("<")!==-1,g=b.childNodes,h,i,j=J(b,"x"),k=a.styles,l=a.textWidth,m=k&&k.lineHeight,n=k&&k.textShadow,v=k&&k.textOverflow==="ellipsis",s=g.length,S=l&&!a.added&&this.box,N=function(a){return m?
D(m):c.fontMetrics(/(px|em)$/.test(a&&a.style.fontSize)?a.style.fontSize:k&&k.fontSize||c.style.fontSize||12,a).h},t=function(a){return a.replace(/&lt;/g,"<").replace(/&gt;/g,">")};s--;)b.removeChild(g[s]);!f&&!n&&!v&&e.indexOf(" ")===-1?b.appendChild(B.createTextNode(t(e))):(h=/<.*style="([^"]+)".*>/,i=/<.*href="(http[^"]+)".*>/,S&&S.appendChild(b),e=f?e.replace(/<(b|strong)>/g,'<span style="font-weight:bold">').replace(/<(i|em)>/g,'<span style="font-style:italic">').replace(/<a/g,"<span").replace(/<\/(b|strong|i|em|a)>/g,
"</span>").split(/<br.*?>/g):[e],e[e.length-1]===""&&e.pop(),o(e,function(e,f){var g,m=0,e=e.replace(/<span/g,"|||<span").replace(/<\/span>/g,"</span>|||");g=e.split("|||");o(g,function(e){if(e!==""||g.length===1){var n={},s=B.createElementNS(Ca,"tspan"),p;h.test(e)&&(p=e.match(h)[1].replace(/(;| |^)color([ :])/,"$1fill$2"),J(s,"style",p));i.test(e)&&!d&&(J(s,"onclick",'location.href="'+e.match(i)[1]+'"'),L(s,{cursor:"pointer"}));e=t(e.replace(/<(.|\n)*?>/g,"")||" ");if(e!==" "){s.appendChild(B.createTextNode(e));
if(m)n.dx=0;else if(f&&j!==null)n.x=j;J(s,n);b.appendChild(s);!m&&f&&(!ca&&d&&L(s,{display:"block"}),J(s,"dy",N(s)));if(l){for(var n=e.replace(/([^\^])-/g,"$1- ").split(" "),o=g.length>1||f||n.length>1&&k.whiteSpace!=="nowrap",S,w,q,u=[],y=N(s),r=1,x=a.rotation,z=e,C=z.length;(o||v)&&(n.length||u.length);)a.rotation=0,S=a.getBBox(!0),q=S.width,!ca&&c.forExport&&(q=c.measureSpanWidth(s.firstChild.data,a.styles)),S=q>l,w===void 0&&(w=S),v&&w?(C/=2,z===""||!S&&C<0.5?n=[]:(S&&(w=!0),z=e.substring(0,z.length+
(S?-1:1)*ta(C)),n=[z+(l>3?"…":"")],s.removeChild(s.firstChild))):!S||n.length===1?(n=u,u=[],n.length&&(r++,s=B.createElementNS(Ca,"tspan"),J(s,{dy:y,x:j}),p&&J(s,"style",p),b.appendChild(s)),q>l&&(l=q)):(s.removeChild(s.firstChild),u.unshift(n.pop())),n.length&&s.appendChild(B.createTextNode(n.join(" ").replace(/- /g,"-")));w&&a.attr("title",a.textStr);a.rotation=x}m++}}})}),S&&S.removeChild(b),n&&a.applyTextShadow&&a.applyTextShadow(n))},getContrast:function(a){a=oa(a).rgba;return a[0]+a[1]+a[2]>
384?"#000000":"#FFFFFF"},button:function(a,b,c,d,e,f,g,h,i){var j=this.label(a,b,c,i,null,null,null,null,"button"),k=0,l,m,n,v,s,p,a={x1:0,y1:0,x2:0,y2:1},e=z({"stroke-width":1,stroke:"#CCCCCC",fill:{linearGradient:a,stops:[[0,"#FEFEFE"],[1,"#F6F6F6"]]},r:2,padding:5,style:{color:"black"}},e);n=e.style;delete e.style;f=z(e,{stroke:"#68A",fill:{linearGradient:a,stops:[[0,"#FFF"],[1,"#ACF"]]}},f);v=f.style;delete f.style;g=z(e,{stroke:"#68A",fill:{linearGradient:a,stops:[[0,"#9BD"],[1,"#CDF"]]}},g);
s=g.style;delete g.style;h=z(e,{style:{color:"#CCC"}},h);p=h.style;delete h.style;H(j.element,ya?"mouseover":"mouseenter",function(){k!==3&&j.attr(f).css(v)});H(j.element,ya?"mouseout":"mouseleave",function(){k!==3&&(l=[e,f,g][k],m=[n,v,s][k],j.attr(l).css(m))});j.setState=function(a){(j.state=k=a)?a===2?j.attr(g).css(s):a===3&&j.attr(h).css(p):j.attr(e).css(n)};return j.on("click",function(){k!==3&&d.call(j)}).attr(e).css(x({cursor:"default"},n))},crispLine:function(a,b){a[1]===a[4]&&(a[1]=a[4]=
r(a[1])-b%2/2);a[2]===a[5]&&(a[2]=a[5]=r(a[2])+b%2/2);return a},path:function(a){var b={fill:P};Ha(a)?b.d=a:da(a)&&x(b,a);return this.createElement("path").attr(b)},circle:function(a,b,c){a=da(a)?a:{x:a,y:b,r:c};b=this.createElement("circle");b.xSetter=function(a){this.element.setAttribute("cx",a)};b.ySetter=function(a){this.element.setAttribute("cy",a)};return b.attr(a)},arc:function(a,b,c,d,e,f){if(da(a))b=a.y,c=a.r,d=a.innerR,e=a.start,f=a.end,a=a.x;a=this.symbol("arc",a||0,b||0,c||0,c||0,{innerR:d||
0,start:e||0,end:f||0});a.r=c;return a},rect:function(a,b,c,d,e,f){var e=da(a)?a.r:e,g=this.createElement("rect"),a=da(a)?a:a===y?{}:{x:a,y:b,width:u(c,0),height:u(d,0)};if(f!==y)a.strokeWidth=f,a=g.crisp(a);if(e)a.r=e;g.rSetter=function(a){J(this.element,{rx:a,ry:a})};return g.attr(a)},setSize:function(a,b,c){var d=this.alignedObjects,e=d.length;this.width=a;this.height=b;for(this.boxWrapper[p(c,!0)?"animate":"attr"]({width:a,height:b});e--;)d[e].align()},g:function(a){var b=this.createElement("g");
return q(a)?b.attr({"class":"highcharts-"+a}):b},image:function(a,b,c,d,e){var f={preserveAspectRatio:P};arguments.length>1&&x(f,{x:b,y:c,width:d,height:e});f=this.createElement("image").attr(f);f.element.setAttributeNS?f.element.setAttributeNS("http://www.w3.org/1999/xlink","href",a):f.element.setAttribute("hc-svg-href",a);return f},symbol:function(a,b,c,d,e,f){var g,h=this.symbols[a],h=h&&h(r(b),r(c),d,e,f),i=/^url\((.*?)\)$/,j,k;if(h)g=this.path(h),x(g,{symbolName:a,x:b,y:c,width:d,height:e}),
f&&x(g,f);else if(i.test(a))k=function(a,b){a.element&&(a.attr({width:b[0],height:b[1]}),a.alignByTranslate||a.translate(r((d-b[0])/2),r((e-b[1])/2)))},j=a.match(i)[1],a=Lb[j]||f&&f.width&&f.height&&[f.width,f.height],g=this.image(j).attr({x:b,y:c}),g.isImg=!0,a?k(g,a):(g.attr({width:0,height:0}),$("img",{onload:function(){k(g,Lb[j]=[this.width,this.height])},src:j}));return g},symbols:{circle:function(a,b,c,d){var e=0.166*c;return["M",a+c/2,b,"C",a+c+e,b,a+c+e,b+d,a+c/2,b+d,"C",a-e,b+d,a-e,b,a+c/
2,b,"Z"]},square:function(a,b,c,d){return["M",a,b,"L",a+c,b,a+c,b+d,a,b+d,"Z"]},triangle:function(a,b,c,d){return["M",a+c/2,b,"L",a+c,b+d,a,b+d,"Z"]},"triangle-down":function(a,b,c,d){return["M",a,b,"L",a+c,b,a+c/2,b+d,"Z"]},diamond:function(a,b,c,d){return["M",a+c/2,b,"L",a+c,b+d/2,a+c/2,b+d,a,b+d/2,"Z"]},arc:function(a,b,c,d,e){var f=e.start,c=e.r||c||d,g=e.end-0.001,d=e.innerR,h=e.open,i=X(f),j=aa(f),k=X(g),g=aa(g),e=e.end-f<ma?0:1;return["M",a+c*i,b+c*j,"A",c,c,0,e,1,a+c*k,b+c*g,h?"M":"L",a+d*
k,b+d*g,"A",d,d,0,e,0,a+d*i,b+d*j,h?"":"Z"]},callout:function(a,b,c,d,e){var f=C(e&&e.r||0,c,d),g=f+6,h=e&&e.anchorX,e=e&&e.anchorY,i;i=["M",a+f,b,"L",a+c-f,b,"C",a+c,b,a+c,b,a+c,b+f,"L",a+c,b+d-f,"C",a+c,b+d,a+c,b+d,a+c-f,b+d,"L",a+f,b+d,"C",a,b+d,a,b+d,a,b+d-f,"L",a,b+f,"C",a,b,a,b,a+f,b];h&&h>c&&e>b+g&&e<b+d-g?i.splice(13,3,"L",a+c,e-6,a+c+6,e,a+c,e+6,a+c,b+d-f):h&&h<0&&e>b+g&&e<b+d-g?i.splice(33,3,"L",a,e+6,a-6,e,a,e-6,a,b+f):e&&e>d&&h>a+g&&h<a+c-g?i.splice(23,3,"L",h+6,b+d,h,b+d+6,h-6,b+d,a+
f,b+d):e&&e<0&&h>a+g&&h<a+c-g&&i.splice(3,3,"L",h-6,b,h,b-6,h+6,b,c-f,b);return i}},clipRect:function(a,b,c,d){var e="highcharts-"+yb++,f=this.createElement("clipPath").attr({id:e}).add(this.defs),a=this.rect(a,b,c,d,0).add(f);a.id=e;a.clipPath=f;a.count=0;return a},text:function(a,b,c,d){var e=fa||!ca&&this.forExport,f={};if(d&&!this.forExport)return this.html(a,b,c);f.x=Math.round(b||0);if(c)f.y=Math.round(c);if(a||a===0)f.text=a;a=this.createElement("text").attr(f);e&&a.css({position:"absolute"});
if(!d)a.xSetter=function(a,b,c){var d=c.getElementsByTagName("tspan"),e,f=c.getAttribute(b),m;for(m=0;m<d.length;m++)e=d[m],e.getAttribute(b)===f&&e.setAttribute(b,a);c.setAttribute(b,a)};return a},fontMetrics:function(a,b){var c,d,a=a||this.style.fontSize;b&&K.getComputedStyle&&(b=b.element||b,a=(c=K.getComputedStyle(b,""))&&c.fontSize);a=/px/.test(a)?D(a):/em/.test(a)?parseFloat(a)*12:12;c=a<24?a+3:r(a*1.2);d=r(c*0.8);return{h:c,b:d,f:a}},rotCorr:function(a,b,c){var d=a;b&&c&&(d=u(d*X(b*ha),4));
return{x:-a/3*aa(b*ha),y:d}},label:function(a,b,c,d,e,f,g,h,i){function j(){var a,b;a=v.element.style;p=(ga===void 0||u===void 0||n.styles.textAlign)&&q(v.textStr)&&v.getBBox();n.width=(ga||p.width||0)+2*t+w;n.height=(u||p.height||0)+2*t;A=t+m.fontMetrics(a&&a.fontSize,v).b;if(D){if(!s)a=r(-N*t)+B,b=(h?-A:0)+B,n.box=s=d?m.symbol(d,a,b,n.width,n.height,G):m.rect(a,b,n.width,n.height,0,G[Qb]),s.attr("fill",P).add(n);s.isImg||s.attr(x({width:r(n.width),height:r(n.height)},G));G=null}}function k(){var a=
n.styles,a=a&&a.textAlign,b=w+t*(1-N),c;c=h?0:A;if(q(ga)&&p&&(a==="center"||a==="right"))b+={center:0.5,right:1}[a]*(ga-p.width);if(b!==v.x||c!==v.y)v.attr("x",b),c!==y&&v.attr("y",c);v.x=b;v.y=c}function l(a,b){s?s.attr(a,b):G[a]=b}var m=this,n=m.g(i),v=m.text("",0,0,g).attr({zIndex:1}),s,p,N=0,t=3,w=0,ga,u,Ab,C,B=0,G={},A,D;n.onAdd=function(){v.add(n);n.attr({text:a||a===0?a:"",x:b,y:c});s&&q(e)&&n.attr({anchorX:e,anchorY:f})};n.widthSetter=function(a){ga=a};n.heightSetter=function(a){u=a};n.paddingSetter=
function(a){if(q(a)&&a!==t)t=n.padding=a,k()};n.paddingLeftSetter=function(a){q(a)&&a!==w&&(w=a,k())};n.alignSetter=function(a){N={left:0,center:0.5,right:1}[a]};n.textSetter=function(a){a!==y&&v.textSetter(a);j();k()};n["stroke-widthSetter"]=function(a,b){a&&(D=!0);B=a%2/2;l(b,a)};n.strokeSetter=n.fillSetter=n.rSetter=function(a,b){b==="fill"&&a&&(D=!0);l(b,a)};n.anchorXSetter=function(a,b){e=a;l(b,r(a)-B-Ab)};n.anchorYSetter=function(a,b){f=a;l(b,a-C)};n.xSetter=function(a){n.x=a;N&&(a-=N*((ga||
p.width)+t));Ab=r(a);n.attr("translateX",Ab)};n.ySetter=function(a){C=n.y=r(a);n.attr("translateY",C)};var F=n.css;return x(n,{css:function(a){if(a){var b={},a=z(a);o(n.textProps,function(c){a[c]!==y&&(b[c]=a[c],delete a[c])});v.css(b)}return F.call(n,a)},getBBox:function(){return{width:p.width+2*t,height:p.height+2*t,x:p.x-t,y:p.y-t}},shadow:function(a){s&&s.shadow(a);return n},destroy:function(){Z(n.element,"mouseenter");Z(n.element,"mouseleave");v&&(v=v.destroy());s&&(s=s.destroy());Q.prototype.destroy.call(n);
n=m=j=k=l=null}})}};$a=ua;x(Q.prototype,{htmlCss:function(a){var b=this.element;if(b=a&&b.tagName==="SPAN"&&a.width)delete a.width,this.textWidth=b,this.updateTransform();if(a&&a.textOverflow==="ellipsis")a.whiteSpace="nowrap",a.overflow="hidden";this.styles=x(this.styles,a);L(this.element,a);return this},htmlGetBBox:function(){var a=this.element;if(a.nodeName==="text")a.style.position="absolute";return{x:a.offsetLeft,y:a.offsetTop,width:a.offsetWidth,height:a.offsetHeight}},htmlUpdateTransform:function(){if(this.added){var a=
this.renderer,b=this.element,c=this.translateX||0,d=this.translateY||0,e=this.x||0,f=this.y||0,g=this.textAlign||"left",h={left:0,center:0.5,right:1}[g],i=this.shadows,j=this.styles;L(b,{marginLeft:c,marginTop:d});i&&o(i,function(a){L(a,{marginLeft:c+1,marginTop:d+1})});this.inverted&&o(b.childNodes,function(c){a.invertChild(c,b)});if(b.tagName==="SPAN"){var k=this.rotation,l,m=D(this.textWidth),n=[k,g,b.innerHTML,this.textWidth].join(",");if(n!==this.cTT){l=a.fontMetrics(b.style.fontSize).b;q(k)&&
this.setSpanRotation(k,h,l);i=p(this.elemWidth,b.offsetWidth);if(i>m&&/[ \-]/.test(b.textContent||b.innerText))L(b,{width:m+"px",display:"block",whiteSpace:j&&j.whiteSpace||"normal"}),i=m;this.getSpanCorrection(i,l,h,k,g)}L(b,{left:e+(this.xCorr||0)+"px",top:f+(this.yCorr||0)+"px"});if(ib)l=b.offsetHeight;this.cTT=n}}else this.alignOnAdd=!0},setSpanRotation:function(a,b,c){var d={},e=ya?"-ms-transform":ib?"-webkit-transform":La?"MozTransform":Jb?"-o-transform":"";d[e]=d.transform="rotate("+a+"deg)";
d[e+(La?"Origin":"-origin")]=d.transformOrigin=b*100+"% "+c+"px";L(this.element,d)},getSpanCorrection:function(a,b,c){this.xCorr=-a*c;this.yCorr=-b}});x(ua.prototype,{html:function(a,b,c){var d=this.createElement("span"),e=d.element,f=d.renderer;d.textSetter=function(a){a!==e.innerHTML&&delete this.bBox;e.innerHTML=this.textStr=a};d.xSetter=d.ySetter=d.alignSetter=d.rotationSetter=function(a,b){b==="align"&&(b="textAlign");d[b]=a;d.htmlUpdateTransform()};d.attr({text:a,x:r(b),y:r(c)}).css({position:"absolute",
fontFamily:this.style.fontFamily,fontSize:this.style.fontSize});e.style.whiteSpace="nowrap";d.css=d.htmlCss;if(f.isSVG)d.add=function(a){var b,c=f.box.parentNode,j=[];if(this.parentGroup=a){if(b=a.div,!b){for(;a;)j.push(a),a=a.parentGroup;o(j.reverse(),function(a){var d,e=J(a.element,"class");e&&(e={className:e});b=a.div=a.div||$(Ka,e,{position:"absolute",left:(a.translateX||0)+"px",top:(a.translateY||0)+"px"},b||c);d=b.style;x(a,{translateXSetter:function(b,c){d.left=b+"px";a[c]=b;a.doTransform=
!0},translateYSetter:function(b,c){d.top=b+"px";a[c]=b;a.doTransform=!0},visibilitySetter:function(a,b){d[b]=a}})})}}else b=c;b.appendChild(e);d.added=!0;d.alignOnAdd&&d.htmlUpdateTransform();return d};return d}});if(!ca&&!fa){F={init:function(a,b){var c=["<",b,' filled="f" stroked="f"'],d=["position: ","absolute",";"],e=b===Ka;(b==="shape"||e)&&d.push("left:0;top:0;width:1px;height:1px;");d.push("visibility: ",e?"hidden":"visible");c.push(' style="',d.join(""),'"/>');if(b)c=e||b==="span"||b==="img"?
c.join(""):a.prepVML(c),this.element=$(c);this.renderer=a},add:function(a){var b=this.renderer,c=this.element,d=b.box,d=a?a.element||a:d;a&&a.inverted&&b.invertChild(c,d);d.appendChild(c);this.added=!0;this.alignOnAdd&&!this.deferUpdateTransform&&this.updateTransform();if(this.onAdd)this.onAdd();return this},updateTransform:Q.prototype.htmlUpdateTransform,setSpanRotation:function(){var a=this.rotation,b=X(a*ha),c=aa(a*ha);L(this.element,{filter:a?["progid:DXImageTransform.Microsoft.Matrix(M11=",b,
", M12=",-c,", M21=",c,", M22=",b,", sizingMethod='auto expand')"].join(""):P})},getSpanCorrection:function(a,b,c,d,e){var f=d?X(d*ha):1,g=d?aa(d*ha):0,h=p(this.elemHeight,this.element.offsetHeight),i;this.xCorr=f<0&&-a;this.yCorr=g<0&&-h;i=f*g<0;this.xCorr+=g*b*(i?1-c:c);this.yCorr-=f*b*(d?i?c:1-c:1);e&&e!=="left"&&(this.xCorr-=a*c*(f<0?-1:1),d&&(this.yCorr-=h*c*(g<0?-1:1)),L(this.element,{textAlign:e}))},pathToVML:function(a){for(var b=a.length,c=[];b--;)if(ra(a[b]))c[b]=r(a[b]*10)-5;else if(a[b]===
"Z")c[b]="x";else if(c[b]=a[b],a.isArc&&(a[b]==="wa"||a[b]==="at"))c[b+5]===c[b+7]&&(c[b+7]+=a[b+7]>a[b+5]?1:-1),c[b+6]===c[b+8]&&(c[b+8]+=a[b+8]>a[b+6]?1:-1);return c.join(" ")||"x"},clip:function(a){var b=this,c;a?(c=a.members,ja(c,b),c.push(b),b.destroyClip=function(){ja(c,b)},a=a.getCSS(b)):(b.destroyClip&&b.destroyClip(),a={clip:hb?"inherit":"rect(auto)"});return b.css(a)},css:Q.prototype.htmlCss,safeRemoveChild:function(a){a.parentNode&&Ra(a)},destroy:function(){this.destroyClip&&this.destroyClip();
return Q.prototype.destroy.apply(this)},on:function(a,b){this.element["on"+a]=function(){var a=K.event;a.target=a.srcElement;b(a)};return this},cutOffPath:function(a,b){var c,a=a.split(/[ ,]/);c=a.length;if(c===9||c===11)a[c-4]=a[c-2]=D(a[c-2])-10*b;return a.join(" ")},shadow:function(a,b,c){var d=[],e,f=this.element,g=this.renderer,h,i=f.style,j,k=f.path,l,m,n,v;k&&typeof k.value!=="string"&&(k="x");m=k;if(a){n=p(a.width,3);v=(a.opacity||0.15)/n;for(e=1;e<=3;e++){l=n*2+1-2*e;c&&(m=this.cutOffPath(k.value,
l+0.5));j=['<shape isShadow="true" strokeweight="',l,'" filled="false" path="',m,'" coordsize="10 10" style="',f.style.cssText,'" />'];h=$(g.prepVML(j),null,{left:D(i.left)+p(a.offsetX,1),top:D(i.top)+p(a.offsetY,1)});if(c)h.cutOff=l+1;j=['<stroke color="',a.color||"black",'" opacity="',v*e,'"/>'];$(g.prepVML(j),null,null,h);b?b.element.appendChild(h):f.parentNode.insertBefore(h,f);d.push(h)}this.shadows=d}return this},updateShadows:na,setAttr:function(a,b){hb?this.element[a]=b:this.element.setAttribute(a,
b)},classSetter:function(a){this.element.className=a},dashstyleSetter:function(a,b,c){(c.getElementsByTagName("stroke")[0]||$(this.renderer.prepVML(["<stroke/>"]),null,null,c))[b]=a||"solid";this[b]=a},dSetter:function(a,b,c){var d=this.shadows,a=a||[];this.d=a.join&&a.join(" ");c.path=a=this.pathToVML(a);if(d)for(c=d.length;c--;)d[c].path=d[c].cutOff?this.cutOffPath(a,d[c].cutOff):a;this.setAttr(b,a)},fillSetter:function(a,b,c){var d=c.nodeName;if(d==="SPAN")c.style.color=a;else if(d!=="IMG")c.filled=
a!==P,this.setAttr("fillcolor",this.renderer.color(a,c,b,this))},opacitySetter:na,rotationSetter:function(a,b,c){c=c.style;this[b]=c[b]=a;c.left=-r(aa(a*ha)+1)+"px";c.top=r(X(a*ha))+"px"},strokeSetter:function(a,b,c){this.setAttr("strokecolor",this.renderer.color(a,c,b))},"stroke-widthSetter":function(a,b,c){c.stroked=!!a;this[b]=a;ra(a)&&(a+="px");this.setAttr("strokeweight",a)},titleSetter:function(a,b){this.setAttr(b,a)},visibilitySetter:function(a,b,c){a==="inherit"&&(a="visible");this.shadows&&
o(this.shadows,function(c){c.style[b]=a});c.nodeName==="DIV"&&(a=a==="hidden"?"-999em":0,hb||(c.style[b]=a?"visible":"hidden"),b="top");c.style[b]=a},xSetter:function(a,b,c){this[b]=a;b==="x"?b="left":b==="y"&&(b="top");this.updateClipping?(this[b]=a,this.updateClipping()):c.style[b]=a},zIndexSetter:function(a,b,c){c.style[b]=a}};A.VMLElement=F=ka(Q,F);F.prototype.ySetter=F.prototype.widthSetter=F.prototype.heightSetter=F.prototype.xSetter;var Na={Element:F,isIE8:Ba.indexOf("MSIE 8.0")>-1,init:function(a,
b,c,d){var e;this.alignedObjects=[];d=this.createElement(Ka).css(x(this.getStyle(d),{position:"relative"}));e=d.element;a.appendChild(d.element);this.isVML=!0;this.box=e;this.boxWrapper=d;this.cache={};this.setSize(b,c,!1);if(!B.namespaces.hcv){B.namespaces.add("hcv","urn:schemas-microsoft-com:vml");try{B.createStyleSheet().cssText="hcv\\:fill, hcv\\:path, hcv\\:shape, hcv\\:stroke{ behavior:url(#default#VML); display: inline-block; } "}catch(f){B.styleSheets[0].cssText+="hcv\\:fill, hcv\\:path, hcv\\:shape, hcv\\:stroke{ behavior:url(#default#VML); display: inline-block; } "}}},
isHidden:function(){return!this.box.offsetWidth},clipRect:function(a,b,c,d){var e=this.createElement(),f=da(a);return x(e,{members:[],count:0,left:(f?a.x:a)+1,top:(f?a.y:b)+1,width:(f?a.width:c)-1,height:(f?a.height:d)-1,getCSS:function(a){var b=a.element,c=b.nodeName,a=a.inverted,d=this.top-(c==="shape"?b.offsetTop:0),e=this.left,b=e+this.width,f=d+this.height,d={clip:"rect("+r(a?e:d)+"px,"+r(a?f:b)+"px,"+r(a?b:f)+"px,"+r(a?d:e)+"px)"};!a&&hb&&c==="DIV"&&x(d,{width:b+"px",height:f+"px"});return d},
updateClipping:function(){o(e.members,function(a){a.element&&a.css(e.getCSS(a))})}})},color:function(a,b,c,d){var e=this,f,g=/^rgba/,h,i,j=P;a&&a.linearGradient?i="gradient":a&&a.radialGradient&&(i="pattern");if(i){var k,l,m=a.linearGradient||a.radialGradient,n,v,s,p,N,t="",a=a.stops,w,ga=[],q=function(){h=['<fill colors="'+ga.join(",")+'" opacity="',s,'" o:opacity2="',v,'" type="',i,'" ',t,'focus="100%" method="any" />'];$(e.prepVML(h),null,null,b)};n=a[0];w=a[a.length-1];n[0]>0&&a.unshift([0,n[1]]);
w[0]<1&&a.push([1,w[1]]);o(a,function(a,b){g.test(a[1])?(f=oa(a[1]),k=f.get("rgb"),l=f.get("a")):(k=a[1],l=1);ga.push(a[0]*100+"% "+k);b?(s=l,p=k):(v=l,N=k)});if(c==="fill")if(i==="gradient")c=m.x1||m[0]||0,a=m.y1||m[1]||0,n=m.x2||m[2]||0,m=m.y2||m[3]||0,t='angle="'+(90-W.atan((m-a)/(n-c))*180/ma)+'"',q();else{var j=m.r,u=j*2,y=j*2,r=m.cx,x=m.cy,C=b.radialReference,z,j=function(){C&&(z=d.getBBox(),r+=(C[0]-z.x)/z.width-0.5,x+=(C[1]-z.y)/z.height-0.5,u*=C[2]/z.width,y*=C[2]/z.height);t='src="'+T.global.VMLRadialGradientURL+
'" size="'+u+","+y+'" origin="0.5,0.5" position="'+r+","+x+'" color2="'+N+'" ';q()};d.added?j():d.onAdd=j;j=p}else j=k}else if(g.test(a)&&b.tagName!=="IMG")f=oa(a),h=["<",c,' opacity="',f.get("a"),'"/>'],$(this.prepVML(h),null,null,b),j=f.get("rgb");else{j=b.getElementsByTagName(c);if(j.length)j[0].opacity=1,j[0].type="solid";j=a}return j},prepVML:function(a){var b=this.isIE8,a=a.join("");b?(a=a.replace("/>",' xmlns="urn:schemas-microsoft-com:vml" />'),a=a.indexOf('style="')===-1?a.replace("/>",' style="display:inline-block;behavior:url(#default#VML);" />'):
a.replace('style="','style="display:inline-block;behavior:url(#default#VML);')):a=a.replace("<","<hcv:");return a},text:ua.prototype.html,path:function(a){var b={coordsize:"10 10"};Ha(a)?b.d=a:da(a)&&x(b,a);return this.createElement("shape").attr(b)},circle:function(a,b,c){var d=this.symbol("circle");if(da(a))c=a.r,b=a.y,a=a.x;d.isCircle=!0;d.r=c;return d.attr({x:a,y:b})},g:function(a){var b;a&&(b={className:"highcharts-"+a,"class":"highcharts-"+a});return this.createElement(Ka).attr(b)},image:function(a,
b,c,d,e){var f=this.createElement("img").attr({src:a});arguments.length>1&&f.attr({x:b,y:c,width:d,height:e});return f},createElement:function(a){return a==="rect"?this.symbol(a):ua.prototype.createElement.call(this,a)},invertChild:function(a,b){var c=this,d=b.style,e=a.tagName==="IMG"&&a.style;L(a,{flip:"x",left:D(d.width)-(e?D(e.top):1),top:D(d.height)-(e?D(e.left):1),rotation:-90});o(a.childNodes,function(b){c.invertChild(b,a)})},symbols:{arc:function(a,b,c,d,e){var f=e.start,g=e.end,h=e.r||c||
d,c=e.innerR,d=X(f),i=aa(f),j=X(g),k=aa(g);if(g-f===0)return["x"];f=["wa",a-h,b-h,a+h,b+h,a+h*d,b+h*i,a+h*j,b+h*k];e.open&&!c&&f.push("e","M",a,b);f.push("at",a-c,b-c,a+c,b+c,a+c*j,b+c*k,a+c*d,b+c*i,"x","e");f.isArc=!0;return f},circle:function(a,b,c,d,e){e&&(c=d=2*e.r);e&&e.isCircle&&(a-=c/2,b-=d/2);return["wa",a,b,a+c,b+d,a+c,b+d/2,a+c,b+d/2,"e"]},rect:function(a,b,c,d,e){return ua.prototype.symbols[!q(e)||!e.r?"square":"callout"].call(0,a,b,c,d,e)}}};A.VMLRenderer=F=function(){this.init.apply(this,
arguments)};F.prototype=z(ua.prototype,Na);$a=F}ua.prototype.measureSpanWidth=function(a,b){var c=B.createElement("span"),d;d=B.createTextNode(a);c.appendChild(d);L(c,b);this.box.appendChild(c);d=c.offsetWidth;Ra(c);return d};var Mb;if(fa)A.CanVGRenderer=F=function(){Ca="http://www.w3.org/1999/xhtml"},F.prototype.symbols={},Mb=function(){function a(){var a=b.length,d;for(d=0;d<a;d++)b[d]();b=[]}var b=[];return{push:function(c,d){b.length===0&&Rb(d,a);b.push(c)}}}(),$a=F;Ta.prototype={addLabel:function(){var a=
this.axis,b=a.options,c=a.chart,d=a.categories,e=a.names,f=this.pos,g=b.labels,h=a.tickPositions,i=f===h[0],j=f===h[h.length-1],e=d?p(d[f],e[f],f):f,d=this.label,h=h.info,k;a.isDatetimeAxis&&h&&(k=b.dateTimeLabelFormats[h.higherRanks[f]||h.unitName]);this.isFirst=i;this.isLast=j;b=a.labelFormatter.call({axis:a,chart:c,isFirst:i,isLast:j,dateTimeLabelFormat:k,value:a.isLog?ea(ia(e)):e});q(d)?d&&d.attr({text:b}):(this.labelLength=(this.label=d=q(b)&&g.enabled?c.renderer.text(b,0,0,g.useHTML).css(z(g.style)).add(a.labelGroup):
null)&&d.getBBox().width,this.rotation=0)},getLabelSize:function(){return this.label?this.label.getBBox()[this.axis.horiz?"height":"width"]:0},handleOverflow:function(a){var b=this.axis,c=a.x,d=b.chart.chartWidth,e=b.chart.spacing,f=p(b.labelLeft,C(b.pos,e[3])),e=p(b.labelRight,u(b.pos+b.len,d-e[1])),g=this.label,h=this.rotation,i={left:0,center:0.5,right:1}[b.labelAlign],j=g.getBBox().width,k=b.slotWidth,l=1,m,n={};if(h)h<0&&c-i*j<f?m=r(c/X(h*ha)-f):h>0&&c+i*j>e&&(m=r((d-c)/X(h*ha)));else if(d=c+
(1-i)*j,c-i*j<f?k=a.x+k*(1-i)-f:d>e&&(k=e-a.x+k*i,l=-1),k=C(b.slotWidth,k),k<b.slotWidth&&b.labelAlign==="center"&&(a.x+=l*(b.slotWidth-k-i*(b.slotWidth-C(j,k)))),j>k||b.autoRotation&&g.styles.width)m=k;if(m){n.width=m;if(!b.options.labels.style.textOverflow)n.textOverflow="ellipsis";g.css(n)}},getPosition:function(a,b,c,d){var e=this.axis,f=e.chart,g=d&&f.oldChartHeight||f.chartHeight;return{x:a?e.translate(b+c,null,null,d)+e.transB:e.left+e.offset+(e.opposite?(d&&f.oldChartWidth||f.chartWidth)-
e.right-e.left:0),y:a?g-e.bottom+e.offset-(e.opposite?e.height:0):g-e.translate(b+c,null,null,d)-e.transB}},getLabelPosition:function(a,b,c,d,e,f,g,h){var i=this.axis,j=i.transA,k=i.reversed,l=i.staggerLines,m=i.tickRotCorr||{x:0,y:0},c=p(e.y,m.y+(i.side===2?8:-(c.getBBox().height/2))),a=a+e.x+m.x-(f&&d?f*j*(k?-1:1):0),b=b+c-(f&&!d?f*j*(k?1:-1):0);l&&(b+=g/(h||1)%l*(i.labelOffset/l));return{x:a,y:r(b)}},getMarkPath:function(a,b,c,d,e,f){return f.crispLine(["M",a,b,"L",a+(e?0:-c),b+(e?c:0)],d)},render:function(a,
b,c){var d=this.axis,e=d.options,f=d.chart.renderer,g=d.horiz,h=this.type,i=this.label,j=this.pos,k=e.labels,l=this.gridLine,m=h?h+"Grid":"grid",n=h?h+"Tick":"tick",v=e[m+"LineWidth"],s=e[m+"LineColor"],o=e[m+"LineDashStyle"],N=e[n+"Length"],m=e[n+"Width"]||0,t=e[n+"Color"],w=e[n+"Position"],n=this.mark,ga=k.step,q=!0,u=d.tickmarkOffset,r=this.getPosition(g,j,u,b),x=r.x,r=r.y,z=g&&x===d.pos+d.len||!g&&r===d.pos?-1:1,c=p(c,1);this.isActive=!0;if(v){j=d.getPlotLinePath(j+u,v*z,b,!0);if(l===y){l={stroke:s,
"stroke-width":v};if(o)l.dashstyle=o;if(!h)l.zIndex=1;if(b)l.opacity=0;this.gridLine=l=v?f.path(j).attr(l).add(d.gridGroup):null}if(!b&&l&&j)l[this.isNew?"attr":"animate"]({d:j,opacity:c})}if(m&&N)w==="inside"&&(N=-N),d.opposite&&(N=-N),h=this.getMarkPath(x,r,N,m*z,g,f),n?n.animate({d:h,opacity:c}):this.mark=f.path(h).attr({stroke:t,"stroke-width":m,opacity:c}).add(d.axisGroup);if(i&&!isNaN(x))i.xy=r=this.getLabelPosition(x,r,i,g,k,u,a,ga),this.isFirst&&!this.isLast&&!p(e.showFirstLabel,1)||this.isLast&&
!this.isFirst&&!p(e.showLastLabel,1)?q=!1:g&&!d.isRadial&&!k.step&&!k.rotation&&!b&&c!==0&&this.handleOverflow(r),ga&&a%ga&&(q=!1),q&&!isNaN(r.y)?(r.opacity=c,i[this.isNew?"attr":"animate"](r),this.isNew=!1):i.attr("y",-9999)},destroy:function(){Qa(this,this.axis)}};A.PlotLineOrBand=function(a,b){this.axis=a;if(b)this.options=b,this.id=b.id};A.PlotLineOrBand.prototype={render:function(){var a=this,b=a.axis,c=b.horiz,d=a.options,e=d.label,f=a.label,g=d.width,h=d.to,i=d.from,j=q(i)&&q(h),k=d.value,
l=d.dashStyle,m=a.svgElem,n=[],v,s=d.color,p=d.zIndex,o=d.events,t={},w=b.chart.renderer;b.isLog&&(i=Ea(i),h=Ea(h),k=Ea(k));if(g){if(n=b.getPlotLinePath(k,g),t={stroke:s,"stroke-width":g},l)t.dashstyle=l}else if(j){n=b.getPlotBandPath(i,h,d);if(s)t.fill=s;if(d.borderWidth)t.stroke=d.borderColor,t["stroke-width"]=d.borderWidth}else return;if(q(p))t.zIndex=p;if(m)if(n)m.animate({d:n},null,m.onGetPath);else{if(m.hide(),m.onGetPath=function(){m.show()},f)a.label=f=f.destroy()}else if(n&&n.length&&(a.svgElem=
m=w.path(n).attr(t).add(),o))for(v in d=function(b){m.on(b,function(c){o[b].apply(a,[c])})},o)d(v);if(e&&q(e.text)&&n&&n.length&&b.width>0&&b.height>0){e=z({align:c&&j&&"center",x:c?!j&&4:10,verticalAlign:!c&&j&&"middle",y:c?j?16:10:j?6:-4,rotation:c&&!j&&90},e);if(!f){t={align:e.textAlign||e.align,rotation:e.rotation};if(q(p))t.zIndex=p;a.label=f=w.text(e.text,0,0,e.useHTML).attr(t).css(e.style).add()}b=[n[1],n[4],j?n[6]:n[1]];j=[n[2],n[5],j?n[7]:n[2]];n=Pa(b);c=Pa(j);f.align(e,!1,{x:n,y:c,width:Fa(b)-
n,height:Fa(j)-c});f.show()}else f&&f.hide();return a},destroy:function(){ja(this.axis.plotLinesAndBands,this);delete this.axis;Qa(this)}};var va=A.Axis=function(){this.init.apply(this,arguments)};va.prototype={defaultOptions:{dateTimeLabelFormats:{millisecond:"%H:%M:%S.%L",second:"%H:%M:%S",minute:"%H:%M",hour:"%H:%M",day:"%e. %b",week:"%e. %b",month:"%b '%y",year:"%Y"},endOnTick:!1,gridLineColor:"#D8D8D8",labels:{enabled:!0,style:{color:"#606060",cursor:"default",fontSize:"11px"},x:0,y:15},lineColor:"#C0D0E0",
lineWidth:1,minPadding:0.01,maxPadding:0.01,minorGridLineColor:"#E0E0E0",minorGridLineWidth:1,minorTickColor:"#A0A0A0",minorTickLength:2,minorTickPosition:"outside",startOfWeek:1,startOnTick:!1,tickColor:"#C0D0E0",tickLength:10,tickmarkPlacement:"between",tickPixelInterval:100,tickPosition:"outside",tickWidth:1,title:{align:"middle",style:{color:"#707070"}},type:"linear"},defaultYAxisOptions:{endOnTick:!0,gridLineWidth:1,tickPixelInterval:72,showLastLabel:!0,labels:{x:-8,y:3},lineWidth:0,maxPadding:0.05,
minPadding:0.05,startOnTick:!0,tickWidth:0,title:{rotation:270,text:"Values"},stackLabels:{enabled:!1,formatter:function(){return A.numberFormat(this.total,-1)},style:z(ba.line.dataLabels.style,{color:"#000000"})}},defaultLeftAxisOptions:{labels:{x:-15,y:null},title:{rotation:270}},defaultRightAxisOptions:{labels:{x:15,y:null},title:{rotation:90}},defaultBottomAxisOptions:{labels:{autoRotation:[-45],x:0,y:null},title:{rotation:0}},defaultTopAxisOptions:{labels:{autoRotation:[-45],x:0,y:-15},title:{rotation:0}},
init:function(a,b){var c=b.isX;this.horiz=a.inverted?!c:c;this.coll=(this.isXAxis=c)?"xAxis":"yAxis";this.opposite=b.opposite;this.side=b.side||(this.horiz?this.opposite?0:2:this.opposite?1:3);this.setOptions(b);var d=this.options,e=d.type;this.labelFormatter=d.labels.formatter||this.defaultLabelFormatter;this.userOptions=b;this.minPixelPadding=0;this.chart=a;this.reversed=d.reversed;this.zoomEnabled=d.zoomEnabled!==!1;this.categories=d.categories||e==="category";this.names=this.names||[];this.isLog=
e==="logarithmic";this.isDatetimeAxis=e==="datetime";this.isLinked=q(d.linkedTo);this.ticks={};this.labelEdge=[];this.minorTicks={};this.plotLinesAndBands=[];this.alternateBands={};this.len=0;this.minRange=this.userMinRange=d.minRange||d.maxZoom;this.range=d.range;this.offset=d.offset||0;this.stacks={};this.oldStacks={};this.min=this.max=null;this.crosshair=p(d.crosshair,sa(a.options.tooltip.crosshairs)[c?0:1],!1);var f,d=this.options.events;Ma(this,a.axes)===-1&&(c&&!this.isColorAxis?a.axes.splice(a.xAxis.length,
0,this):a.axes.push(this),a[this.coll].push(this));this.series=this.series||[];if(a.inverted&&c&&this.reversed===y)this.reversed=!0;this.removePlotLine=this.removePlotBand=this.removePlotBandOrLine;for(f in d)H(this,f,d[f]);if(this.isLog)this.val2lin=Ea,this.lin2val=ia},setOptions:function(a){this.options=z(this.defaultOptions,this.isXAxis?{}:this.defaultYAxisOptions,[this.defaultTopAxisOptions,this.defaultRightAxisOptions,this.defaultBottomAxisOptions,this.defaultLeftAxisOptions][this.side],z(T[this.coll],
a))},defaultLabelFormatter:function(){var a=this.axis,b=this.value,c=a.categories,d=this.dateTimeLabelFormat,e=T.lang.numericSymbols,f=e&&e.length,g,h=a.options.labels.format,a=a.isLog?b:a.tickInterval;if(h)g=Ja(h,this);else if(c)g=b;else if(d)g=Oa(d,b);else if(f&&a>=1E3)for(;f--&&g===y;)c=Math.pow(1E3,f+1),a>=c&&b*10%c===0&&e[f]!==null&&(g=A.numberFormat(b/c,-1)+e[f]);g===y&&(g=O(b)>=1E4?A.numberFormat(b,-1):A.numberFormat(b,-1,y,""));return g},getSeriesExtremes:function(){var a=this,b=a.chart;a.hasVisibleSeries=
!1;a.dataMin=a.dataMax=a.ignoreMinPadding=a.ignoreMaxPadding=null;a.buildStacks&&a.buildStacks();o(a.series,function(c){if(c.visible||!b.options.chart.ignoreHiddenSeries){var d;d=c.options.threshold;var e;a.hasVisibleSeries=!0;a.isLog&&d<=0&&(d=null);if(a.isXAxis){if(d=c.xData,d.length)a.dataMin=C(p(a.dataMin,d[0]),Pa(d)),a.dataMax=u(p(a.dataMax,d[0]),Fa(d))}else{c.getExtremes();e=c.dataMax;c=c.dataMin;if(q(c)&&q(e))a.dataMin=C(p(a.dataMin,c),c),a.dataMax=u(p(a.dataMax,e),e);if(q(d))if(a.dataMin>=
d)a.dataMin=d,a.ignoreMinPadding=!0;else if(a.dataMax<d)a.dataMax=d,a.ignoreMaxPadding=!0}}})},translate:function(a,b,c,d,e,f){var g=this.linkedParent||this,h=1,i=0,j=d?g.oldTransA:g.transA,d=d?g.oldMin:g.min,k=g.minPixelPadding,e=(g.doPostTranslate||g.isLog&&e)&&g.lin2val;if(!j)j=g.transA;if(c)h*=-1,i=g.len;g.reversed&&(h*=-1,i-=h*(g.sector||g.len));b?(a=a*h+i,a-=k,a=a/j+d,e&&(a=g.lin2val(a))):(e&&(a=g.val2lin(a)),f==="between"&&(f=0.5),a=h*(a-d)*j+i+h*k+(ra(f)?j*f*g.pointRange:0));return a},toPixels:function(a,
b){return this.translate(a,!1,!this.horiz,null,!0)+(b?0:this.pos)},toValue:function(a,b){return this.translate(a-(b?0:this.pos),!0,!this.horiz,null,!0)},getPlotLinePath:function(a,b,c,d,e){var f=this.chart,g=this.left,h=this.top,i,j,k=c&&f.oldChartHeight||f.chartHeight,l=c&&f.oldChartWidth||f.chartWidth,m;i=this.transB;var n=function(a,b,c){if(a<b||a>c)d?a=C(u(b,a),c):m=!0;return a},e=p(e,this.translate(a,null,null,c)),a=c=r(e+i);i=j=r(k-e-i);isNaN(e)?m=!0:this.horiz?(i=h,j=k-this.bottom,a=c=n(a,
g,g+this.width)):(a=g,c=l-this.right,i=j=n(i,h,h+this.height));return m&&!d?null:f.renderer.crispLine(["M",a,i,"L",c,j],b||1)},getLinearTickPositions:function(a,b,c){var d,e=ea(V(b/a)*a),f=ea(ta(c/a)*a),g=[];if(b===c&&ra(b))return[b];for(b=e;b<=f;){g.push(b);b=ea(b+a);if(b===d)break;d=b}return g},getMinorTickPositions:function(){var a=this.options,b=this.tickPositions,c=this.minorTickInterval,d=[],e,f=this.min;e=this.max;var g=e-f;if(g&&g/c<this.len/3)if(this.isLog){a=b.length;for(e=1;e<a;e++)d=d.concat(this.getLogTickPositions(c,
b[e-1],b[e],!0))}else if(this.isDatetimeAxis&&a.minorTickInterval==="auto")d=d.concat(this.getTimeTicks(this.normalizeTimeTickInterval(c),f,e,a.startOfWeek));else for(b=f+(b[0]-f)%c;b<=e;b+=c)d.push(b);this.trimTicks(d);return d},adjustForMinRange:function(){var a=this.options,b=this.min,c=this.max,d,e=this.dataMax-this.dataMin>=this.minRange,f,g,h,i,j;if(this.isXAxis&&this.minRange===y&&!this.isLog)q(a.min)||q(a.max)?this.minRange=null:(o(this.series,function(a){i=a.xData;for(g=j=a.xIncrement?1:
i.length-1;g>0;g--)if(h=i[g]-i[g-1],f===y||h<f)f=h}),this.minRange=C(f*5,this.dataMax-this.dataMin));if(c-b<this.minRange){var k=this.minRange;d=(k-c+b)/2;d=[b-d,p(a.min,b-d)];if(e)d[2]=this.dataMin;b=Fa(d);c=[b+k,p(a.max,b+k)];if(e)c[2]=this.dataMax;c=Pa(c);c-b<k&&(d[0]=c-k,d[1]=p(a.min,c-k),b=Fa(d))}this.min=b;this.max=c},setAxisTranslation:function(a){var b=this,c=b.max-b.min,d=b.axisPointRange||0,e,f=0,g=0,h=b.linkedParent,i=!!b.categories,j=b.transA,k=b.isXAxis;if(k||i||d)if(h?(f=h.minPointOffset,
g=h.pointRangePadding):o(b.series,function(a){var h=i?1:k?a.pointRange:b.axisPointRange||0,j=a.options.pointPlacement,v=a.closestPointRange;h>c&&(h=0);d=u(d,h);b.single||(f=u(f,Da(j)?0:h/2),g=u(g,j==="on"?0:h));!a.noSharedTooltip&&q(v)&&(e=q(e)?C(e,v):v)}),h=b.ordinalSlope&&e?b.ordinalSlope/e:1,b.minPointOffset=f*=h,b.pointRangePadding=g*=h,b.pointRange=C(d,c),k)b.closestPointRange=e;if(a)b.oldTransA=j;b.translationSlope=b.transA=j=b.len/(c+g||1);b.transB=b.horiz?b.left:b.bottom;b.minPixelPadding=
j*f},setTickInterval:function(a){var b=this,c=b.chart,d=b.options,e=b.isLog,f=b.isDatetimeAxis,g=b.isXAxis,h=b.isLinked,i=d.maxPadding,j=d.minPadding,k=d.tickInterval,l=d.tickPixelInterval,m=b.categories;!f&&!m&&!h&&this.getTickAmount();h?(b.linkedParent=c[b.coll][d.linkedTo],c=b.linkedParent.getExtremes(),b.min=p(c.min,c.dataMin),b.max=p(c.max,c.dataMax),d.type!==b.linkedParent.options.type&&la(11,1)):(b.min=p(b.userMin,d.min,b.dataMin),b.max=p(b.userMax,d.max,b.dataMax));if(e)!a&&C(b.min,p(b.dataMin,
b.min))<=0&&la(10,1),b.min=ea(Ea(b.min)),b.max=ea(Ea(b.max));if(b.range&&q(b.max))b.userMin=b.min=u(b.min,b.max-b.range),b.userMax=b.max,b.range=null;b.beforePadding&&b.beforePadding();b.adjustForMinRange();if(!m&&!b.axisPointRange&&!b.usePercentage&&!h&&q(b.min)&&q(b.max)&&(c=b.max-b.min)){if(!q(d.min)&&!q(b.userMin)&&j&&(b.dataMin<0||!b.ignoreMinPadding))b.min-=c*j;if(!q(d.max)&&!q(b.userMax)&&i&&(b.dataMax>0||!b.ignoreMaxPadding))b.max+=c*i}if(ra(d.floor))b.min=u(b.min,d.floor);if(ra(d.ceiling))b.max=
C(b.max,d.ceiling);b.tickInterval=b.min===b.max||b.min===void 0||b.max===void 0?1:h&&!k&&l===b.linkedParent.options.tickPixelInterval?k=b.linkedParent.tickInterval:p(k,this.tickAmount?(b.max-b.min)/u(this.tickAmount-1,1):void 0,m?1:(b.max-b.min)*l/u(b.len,l));g&&!a&&o(b.series,function(a){a.processData(b.min!==b.oldMin||b.max!==b.oldMax)});b.setAxisTranslation(!0);b.beforeSetTickPositions&&b.beforeSetTickPositions();if(b.postProcessTickInterval)b.tickInterval=b.postProcessTickInterval(b.tickInterval);
if(b.pointRange)b.tickInterval=u(b.pointRange,b.tickInterval);a=p(d.minTickInterval,b.isDatetimeAxis&&b.closestPointRange);if(!k&&b.tickInterval<a)b.tickInterval=a;if(!f&&!e&&!k)b.tickInterval=qb(b.tickInterval,null,pb(b.tickInterval),p(d.allowDecimals,!(b.tickInterval>0.5&&b.tickInterval<5&&b.max>1E3&&b.max<9999)),!!this.tickAmount);if(!this.tickAmount&&this.len)b.tickInterval=b.unsquish();this.setTickPositions()},setTickPositions:function(){var a=this.options,b,c=a.tickPositions,d=a.tickPositioner,
e=a.startOnTick,f=a.endOnTick,g;this.tickmarkOffset=this.categories&&a.tickmarkPlacement==="between"&&this.tickInterval===1?0.5:0;this.minorTickInterval=a.minorTickInterval==="auto"&&this.tickInterval?this.tickInterval/5:a.minorTickInterval;this.tickPositions=b=c&&c.slice();if(!b&&(this.tickPositions=b=this.isDatetimeAxis?this.getTimeTicks(this.normalizeTimeTickInterval(this.tickInterval,a.units),this.min,this.max,a.startOfWeek,this.ordinalPositions,this.closestPointRange,!0):this.isLog?this.getLogTickPositions(this.tickInterval,
this.min,this.max):this.getLinearTickPositions(this.tickInterval,this.min,this.max),d&&(d=d.apply(this,[this.min,this.max]))))this.tickPositions=b=d;if(!this.isLinked)this.trimTicks(b,e,f),this.min===this.max&&q(this.min)&&!this.tickAmount&&(g=!0,this.min-=0.5,this.max+=0.5),this.single=g,!c&&!d&&this.adjustTickAmount()},trimTicks:function(a,b,c){var d=a[0],e=a[a.length-1],f=this.minPointOffset||0;b?this.min=d:this.min-f>d&&a.shift();c?this.max=e:this.max+f<e&&a.pop();a.length===0&&q(d)&&a.push((e+
d)/2)},getTickAmount:function(){var a={},b,c=this.options,d=c.tickAmount,e=c.tickPixelInterval;!q(c.tickInterval)&&this.len<e&&!this.isRadial&&!this.isLog&&c.startOnTick&&c.endOnTick&&(d=2);!d&&this.chart.options.chart.alignTicks!==!1&&c.alignTicks!==!1&&(o(this.chart[this.coll],function(c){var d=c.options,e=c.horiz,d=[e?d.left:d.top,e?d.width:d.height,d.pane].join(",");a[d]?c.series.length&&(b=!0):a[d]=1}),b&&(d=ta(this.len/e)+1));if(d<4)this.finalTickAmt=d,d=5;this.tickAmount=d},adjustTickAmount:function(){var a=
this.tickInterval,b=this.tickPositions,c=this.tickAmount,d=this.finalTickAmt,e=b&&b.length;if(e<c){for(;b.length<c;)b.push(ea(b[b.length-1]+a));this.transA*=(e-1)/(c-1);this.max=b[b.length-1]}else e>c&&(this.tickInterval*=2,this.setTickPositions());if(q(d)){for(a=c=b.length;a--;)(d===3&&a%2===1||d<=2&&a>0&&a<c-1)&&b.splice(a,1);this.finalTickAmt=y}},setScale:function(){var a=this.stacks,b,c,d,e;this.oldMin=this.min;this.oldMax=this.max;this.oldAxisLength=this.len;this.setAxisSize();e=this.len!==this.oldAxisLength;
o(this.series,function(a){if(a.isDirtyData||a.isDirty||a.xAxis.isDirty)d=!0});if(e||d||this.isLinked||this.forceRedraw||this.userMin!==this.oldUserMin||this.userMax!==this.oldUserMax){if(!this.isXAxis)for(b in a)for(c in a[b])a[b][c].total=null,a[b][c].cum=0;this.forceRedraw=!1;this.getSeriesExtremes();this.setTickInterval();this.oldUserMin=this.userMin;this.oldUserMax=this.userMax;if(!this.isDirty)this.isDirty=e||this.min!==this.oldMin||this.max!==this.oldMax}else if(!this.isXAxis){if(this.oldStacks)a=
this.stacks=this.oldStacks;for(b in a)for(c in a[b])a[b][c].cum=a[b][c].total}},setExtremes:function(a,b,c,d,e){var f=this,g=f.chart,c=p(c,!0);o(f.series,function(a){delete a.kdTree});e=x(e,{min:a,max:b});I(f,"setExtremes",e,function(){f.userMin=a;f.userMax=b;f.eventArgs=e;f.isDirtyExtremes=!0;c&&g.redraw(d)})},zoom:function(a,b){var c=this.dataMin,d=this.dataMax,e=this.options;this.allowZoomOutside||(q(c)&&a<=C(c,p(e.min,c))&&(a=y),q(d)&&b>=u(d,p(e.max,d))&&(b=y));this.displayBtn=a!==y||b!==y;this.setExtremes(a,
b,!1,y,{trigger:"zoom"});return!0},setAxisSize:function(){var a=this.chart,b=this.options,c=b.offsetLeft||0,d=this.horiz,e=p(b.width,a.plotWidth-c+(b.offsetRight||0)),f=p(b.height,a.plotHeight),g=p(b.top,a.plotTop),b=p(b.left,a.plotLeft+c),c=/%$/;c.test(f)&&(f=parseFloat(f)/100*a.plotHeight);c.test(g)&&(g=parseFloat(g)/100*a.plotHeight+a.plotTop);this.left=b;this.top=g;this.width=e;this.height=f;this.bottom=a.chartHeight-f-g;this.right=a.chartWidth-e-b;this.len=u(d?e:f,0);this.pos=d?b:g},getExtremes:function(){var a=
this.isLog;return{min:a?ea(ia(this.min)):this.min,max:a?ea(ia(this.max)):this.max,dataMin:this.dataMin,dataMax:this.dataMax,userMin:this.userMin,userMax:this.userMax}},getThreshold:function(a){var b=this.isLog,c=b?ia(this.min):this.min,b=b?ia(this.max):this.max;a===null?a=b<0?b:c:c>a?a=c:b<a&&(a=b);return this.translate(a,0,1,0,1)},autoLabelAlign:function(a){a=(p(a,0)-this.side*90+720)%360;return a>15&&a<165?"right":a>195&&a<345?"left":"center"},unsquish:function(){var a=this.ticks,b=this.options.labels,
c=this.horiz,d=this.tickInterval,e=d,f=this.len/(((this.categories?1:0)+this.max-this.min)/d),g,h=b.rotation,i=this.chart.renderer.fontMetrics(b.style.fontSize,a[0]&&a[0].label),j,k=Number.MAX_VALUE,l,m=function(a){a/=f||1;a=a>1?ta(a):1;return a*d};c?(l=q(h)?[h]:f<p(b.autoRotationLimit,80)&&!b.staggerLines&&!b.step&&b.autoRotation)&&o(l,function(a){var b;if(a===h||a&&a>=-90&&a<=90)j=m(O(i.h/aa(ha*a))),b=j+O(a/360),b<k&&(k=b,g=a,e=j)}):e=m(i.h);this.autoRotation=l;this.labelRotation=g;return e},renderUnsquish:function(){var a=
this.chart,b=a.renderer,c=this.tickPositions,d=this.ticks,e=this.options.labels,f=this.horiz,g=a.margin,h=this.categories?c.length:c.length-1,i=this.slotWidth=f&&!e.step&&!e.rotation&&(this.staggerLines||1)*a.plotWidth/h||!f&&(g[3]&&g[3]-a.spacing[3]||a.chartWidth*0.33),j=u(1,r(i-2*(e.padding||5))),k={},g=b.fontMetrics(e.style.fontSize,d[0]&&d[0].label),h=e.style.textOverflow,l,m=0;if(!Da(e.rotation))k.rotation=e.rotation;if(this.autoRotation)o(c,function(a){if((a=d[a])&&a.labelLength>m)m=a.labelLength}),
m>j&&m>g.h?k.rotation=this.labelRotation:this.labelRotation=0;else if(i&&(l={width:j+"px"},!h)){l.textOverflow="clip";for(i=c.length;!f&&i--;)if(j=c[i],j=d[j].label)if(j.styles.textOverflow==="ellipsis"&&j.css({textOverflow:"clip"}),j.getBBox().height>this.len/c.length-(g.h-g.f))j.specCss={textOverflow:"ellipsis"}}if(k.rotation&&(l={width:(m>a.chartHeight*0.5?a.chartHeight*0.33:a.chartHeight)+"px"},!h))l.textOverflow="ellipsis";this.labelAlign=k.align=e.align||this.autoLabelAlign(this.labelRotation);
o(c,function(a){var b=(a=d[a])&&a.label;if(b)l&&b.css(z(l,b.specCss)),delete b.specCss,b.attr(k),a.rotation=k.rotation});this.tickRotCorr=b.rotCorr(g.b,this.labelRotation||0,this.side===2)},hasData:function(){return this.hasVisibleSeries||q(this.min)&&q(this.max)&&!!this.tickPositions},getOffset:function(){var a=this,b=a.chart,c=b.renderer,d=a.options,e=a.tickPositions,f=a.ticks,g=a.horiz,h=a.side,i=b.inverted?[1,0,3,2][h]:h,j,k,l=0,m,n=0,v=d.title,s=d.labels,S=0,N=b.axisOffset,b=b.clipOffset,t=[-1,
1,1,-1][h],w;j=a.hasData();a.showAxis=k=j||p(d.showEmpty,!0);a.staggerLines=a.horiz&&s.staggerLines;if(!a.axisGroup)a.gridGroup=c.g("grid").attr({zIndex:d.gridZIndex||1}).add(),a.axisGroup=c.g("axis").attr({zIndex:d.zIndex||2}).add(),a.labelGroup=c.g("axis-labels").attr({zIndex:s.zIndex||7}).addClass("highcharts-"+a.coll.toLowerCase()+"-labels").add();if(j||a.isLinked){if(o(e,function(b){f[b]?f[b].addLabel():f[b]=new Ta(a,b)}),a.renderUnsquish(),o(e,function(b){if(h===0||h===2||{1:"left",3:"right"}[h]===
a.labelAlign)S=u(f[b].getLabelSize(),S)}),a.staggerLines)S*=a.staggerLines,a.labelOffset=S}else for(w in f)f[w].destroy(),delete f[w];if(v&&v.text&&v.enabled!==!1){if(!a.axisTitle)a.axisTitle=c.text(v.text,0,0,v.useHTML).attr({zIndex:7,rotation:v.rotation||0,align:v.textAlign||{low:"left",middle:"center",high:"right"}[v.align]}).addClass("highcharts-"+this.coll.toLowerCase()+"-title").css(v.style).add(a.axisGroup),a.axisTitle.isNew=!0;if(k)l=a.axisTitle.getBBox()[g?"height":"width"],m=v.offset,n=
q(m)?0:p(v.margin,g?5:10);a.axisTitle[k?"show":"hide"]()}a.offset=t*p(d.offset,N[h]);a.tickRotCorr=a.tickRotCorr||{x:0,y:0};c=h===2?a.tickRotCorr.y:0;g=S+n+(S&&t*(g?p(s.y,a.tickRotCorr.y+8):s.x)-c);a.axisTitleMargin=p(m,g);N[h]=u(N[h],a.axisTitleMargin+l+t*a.offset,g);l=V(d.lineWidth/2)*2;d.offset&&(l=u(0,l-d.offset));b[i]=u(b[i],l)},getLinePath:function(a){var b=this.chart,c=this.opposite,d=this.offset,e=this.horiz,f=this.left+(c?this.width:0)+d,d=b.chartHeight-this.bottom-(c?this.height:0)+d;c&&
(a*=-1);return b.renderer.crispLine(["M",e?this.left:f,e?d:this.top,"L",e?b.chartWidth-this.right:f,e?d:b.chartHeight-this.bottom],a)},getTitlePosition:function(){var a=this.horiz,b=this.left,c=this.top,d=this.len,e=this.options.title,f=a?b:c,g=this.opposite,h=this.offset,i=e.x||0,j=e.y||0,k=D(e.style.fontSize||12),d={low:f+(a?0:d),middle:f+d/2,high:f+(a?d:0)}[e.align],b=(a?c+this.height:b)+(a?1:-1)*(g?-1:1)*this.axisTitleMargin+(this.side===2?k:0);return{x:a?d+i:b+(g?this.width:0)+h+i,y:a?b+j-(g?
this.height:0)+h:d+j}},render:function(){var a=this,b=a.chart,c=b.renderer,d=a.options,e=a.isLog,f=a.isLinked,g=a.tickPositions,h=a.axisTitle,i=a.ticks,j=a.minorTicks,k=a.alternateBands,l=d.stackLabels,m=d.alternateGridColor,n=a.tickmarkOffset,v=d.lineWidth,s,p=b.hasRendered&&q(a.oldMin)&&!isNaN(a.oldMin),N=a.showAxis,t,w;a.labelEdge.length=0;a.overlap=!1;o([i,j,k],function(a){for(var b in a)a[b].isActive=!1});if(a.hasData()||f){a.minorTickInterval&&!a.categories&&o(a.getMinorTickPositions(),function(b){j[b]||
(j[b]=new Ta(a,b,"minor"));p&&j[b].isNew&&j[b].render(null,!0);j[b].render(null,!1,1)});if(g.length&&(o(g,function(b,c){if(!f||b>=a.min&&b<=a.max)i[b]||(i[b]=new Ta(a,b)),p&&i[b].isNew&&i[b].render(c,!0,0.1),i[b].render(c)}),n&&(a.min===0||a.single)))i[-1]||(i[-1]=new Ta(a,-1,null,!0)),i[-1].render(-1);m&&o(g,function(b,c){if(c%2===0&&b<a.max)k[b]||(k[b]=new A.PlotLineOrBand(a)),t=b+n,w=g[c+1]!==y?g[c+1]+n:a.max,k[b].options={from:e?ia(t):t,to:e?ia(w):w,color:m},k[b].render(),k[b].isActive=!0});if(!a._addedPlotLB)o((d.plotLines||
[]).concat(d.plotBands||[]),function(b){a.addPlotBandOrLine(b)}),a._addedPlotLB=!0}o([i,j,k],function(a){var c,d,e=[],f=za?za.duration||500:0,g=function(){for(d=e.length;d--;)a[e[d]]&&!a[e[d]].isActive&&(a[e[d]].destroy(),delete a[e[d]])};for(c in a)if(!a[c].isActive)a[c].render(c,!1,0),a[c].isActive=!1,e.push(c);a===k||!b.hasRendered||!f?g():f&&setTimeout(g,f)});if(v)s=a.getLinePath(v),a.axisLine?a.axisLine.animate({d:s}):a.axisLine=c.path(s).attr({stroke:d.lineColor,"stroke-width":v,zIndex:7}).add(a.axisGroup),
a.axisLine[N?"show":"hide"]();if(h&&N)h[h.isNew?"attr":"animate"](a.getTitlePosition()),h.isNew=!1;l&&l.enabled&&a.renderStackTotals();a.isDirty=!1},redraw:function(){this.render();o(this.plotLinesAndBands,function(a){a.render()});o(this.series,function(a){a.isDirty=!0})},destroy:function(a){var b=this,c=b.stacks,d,e=b.plotLinesAndBands;a||Z(b);for(d in c)Qa(c[d]),c[d]=null;o([b.ticks,b.minorTicks,b.alternateBands],function(a){Qa(a)});for(a=e.length;a--;)e[a].destroy();o("stackTotalGroup,axisLine,axisTitle,axisGroup,cross,gridGroup,labelGroup".split(","),
function(a){b[a]&&(b[a]=b[a].destroy())});this.cross&&this.cross.destroy()},drawCrosshair:function(a,b){var c,d=this.crosshair,e=d.animation;if(!this.crosshair||(q(b)||!p(this.crosshair.snap,!0))===!1||b&&b.series&&b.series[this.coll]!==this)this.hideCrosshair();else if(p(d.snap,!0)?q(b)&&(c=this.isXAxis?b.plotX:this.len-b.plotY):c=this.horiz?a.chartX-this.pos:this.len-a.chartY+this.pos,c=this.isRadial?this.getPlotLinePath(this.isXAxis?b.x:p(b.stackY,b.y))||null:this.getPlotLinePath(null,null,null,
null,c)||null,c===null)this.hideCrosshair();else if(this.cross)this.cross.attr({visibility:"visible"})[e?"animate":"attr"]({d:c},e);else{e=this.categories&&!this.isRadial;e={"stroke-width":d.width||(e?this.transA:1),stroke:d.color||(e?"rgba(155,200,255,0.2)":"#C0C0C0"),zIndex:d.zIndex||2};if(d.dashStyle)e.dashstyle=d.dashStyle;this.cross=this.chart.renderer.path(c).attr(e).add()}},hideCrosshair:function(){this.cross&&this.cross.hide()}};x(va.prototype,{getPlotBandPath:function(a,b){var c=this.getPlotLinePath(b,
null,null,!0),d=this.getPlotLinePath(a,null,null,!0);d&&c&&d.toString()!==c.toString()?d.push(c[4],c[5],c[1],c[2]):d=null;return d},addPlotBand:function(a){return this.addPlotBandOrLine(a,"plotBands")},addPlotLine:function(a){return this.addPlotBandOrLine(a,"plotLines")},addPlotBandOrLine:function(a,b){var c=(new A.PlotLineOrBand(this,a)).render(),d=this.userOptions;c&&(b&&(d[b]=d[b]||[],d[b].push(a)),this.plotLinesAndBands.push(c));return c},removePlotBandOrLine:function(a){for(var b=this.plotLinesAndBands,
c=this.options,d=this.userOptions,e=b.length;e--;)b[e].id===a&&b[e].destroy();o([c.plotLines||[],d.plotLines||[],c.plotBands||[],d.plotBands||[]],function(b){for(e=b.length;e--;)b[e].id===a&&ja(b,b[e])})}});va.prototype.getTimeTicks=function(a,b,c,d){var e=[],f={},g=T.global.useUTC,h,i=new Aa(b-Wa(b)),j=a.unitRange,k=a.count;if(q(b)){i[Eb](j>=E.second?0:k*V(i.getMilliseconds()/k));if(j>=E.second)i[Fb](j>=E.minute?0:k*V(i.getSeconds()/k));if(j>=E.minute)i[Gb](j>=E.hour?0:k*V(i[sb]()/k));if(j>=E.hour)i[Hb](j>=
E.day?0:k*V(i[tb]()/k));if(j>=E.day)i[vb](j>=E.month?1:k*V(i[Xa]()/k));j>=E.month&&(i[wb](j>=E.year?0:k*V(i[Ya]()/k)),h=i[Za]());j>=E.year&&(h-=h%k,i[xb](h));if(j===E.week)i[vb](i[Xa]()-i[ub]()+p(d,1));b=1;if(ob||eb)i=i.getTime(),i=new Aa(i+Wa(i));h=i[Za]();for(var d=i.getTime(),l=i[Ya](),m=i[Xa](),n=(E.day+(g?Wa(i):i.getTimezoneOffset()*6E4))%E.day;d<c;)e.push(d),j===E.year?d=gb(h+b*k,0):j===E.month?d=gb(h,l+b*k):!g&&(j===E.day||j===E.week)?d=gb(h,l,m+b*k*(j===E.day?1:7)):d+=j*k,b++;e.push(d);o(lb(e,
function(a){return j<=E.hour&&a%E.day===n}),function(a){f[a]="day"})}e.info=x(a,{higherRanks:f,totalRange:j*k});return e};va.prototype.normalizeTimeTickInterval=function(a,b){var c=b||[["millisecond",[1,2,5,10,20,25,50,100,200,500]],["second",[1,2,5,10,15,30]],["minute",[1,2,5,10,15,30]],["hour",[1,2,3,4,6,8,12]],["day",[1,2]],["week",[1,2]],["month",[1,2,3,4,6]],["year",null]],d=c[c.length-1],e=E[d[0]],f=d[1],g;for(g=0;g<c.length;g++)if(d=c[g],e=E[d[0]],f=d[1],c[g+1]&&a<=(e*f[f.length-1]+E[c[g+1][0]])/
2)break;e===E.year&&a<5*e&&(f=[1,2,5]);c=qb(a/e,f,d[0]==="year"?u(pb(a/e),1):1);return{unitRange:e,count:c,unitName:d[0]}};va.prototype.getLogTickPositions=function(a,b,c,d){var e=this.options,f=this.len,g=[];if(!d)this._minorAutoInterval=null;if(a>=0.5)a=r(a),g=this.getLinearTickPositions(a,b,c);else if(a>=0.08)for(var f=V(b),h,i,j,k,l,e=a>0.3?[1,2,4]:a>0.15?[1,2,4,6,8]:[1,2,3,4,5,6,7,8,9];f<c+1&&!l;f++){i=e.length;for(h=0;h<i&&!l;h++)j=Ea(ia(f)*e[h]),j>b&&(!d||k<=c)&&k!==y&&g.push(k),k>c&&(l=!0),
k=j}else if(b=ia(b),c=ia(c),a=e[d?"minorTickInterval":"tickInterval"],a=p(a==="auto"?null:a,this._minorAutoInterval,(c-b)*(e.tickPixelInterval/(d?5:1))/((d?f/this.tickPositions.length:f)||1)),a=qb(a,null,pb(a)),g=Ua(this.getLinearTickPositions(a,b,c),Ea),!d)this._minorAutoInterval=a/5;if(!d)this.tickInterval=a;return g};var Nb=A.Tooltip=function(){this.init.apply(this,arguments)};Nb.prototype={init:function(a,b){var c=b.borderWidth,d=b.style,e=D(d.padding);this.chart=a;this.options=b;this.crosshairs=
[];this.now={x:0,y:0};this.isHidden=!0;this.label=a.renderer.label("",0,0,b.shape||"callout",null,null,b.useHTML,null,"tooltip").attr({padding:e,fill:b.backgroundColor,"stroke-width":c,r:b.borderRadius,zIndex:8}).css(d).css({padding:0}).add().attr({y:-9999});fa||this.label.shadow(b.shadow);this.shared=b.shared},destroy:function(){if(this.label)this.label=this.label.destroy();clearTimeout(this.hideTimer);clearTimeout(this.tooltipTimeout)},move:function(a,b,c,d){var e=this,f=e.now,g=e.options.animation!==
!1&&!e.isHidden&&(O(a-f.x)>1||O(b-f.y)>1),h=e.followPointer||e.len>1;x(f,{x:g?(2*f.x+a)/3:a,y:g?(f.y+b)/2:b,anchorX:h?y:g?(2*f.anchorX+c)/3:c,anchorY:h?y:g?(f.anchorY+d)/2:d});e.label.attr(f);if(g)clearTimeout(this.tooltipTimeout),this.tooltipTimeout=setTimeout(function(){e&&e.move(a,b,c,d)},32)},hide:function(a){var b=this;clearTimeout(this.hideTimer);if(!this.isHidden)this.hideTimer=setTimeout(function(){b.label.fadeOut();b.isHidden=!0},p(a,this.options.hideDelay,500))},getAnchor:function(a,b){var c,
d=this.chart,e=d.inverted,f=d.plotTop,g=d.plotLeft,h=0,i=0,j,k,a=sa(a);c=a[0].tooltipPos;this.followPointer&&b&&(b.chartX===y&&(b=d.pointer.normalize(b)),c=[b.chartX-d.plotLeft,b.chartY-f]);c||(o(a,function(a){j=a.series.yAxis;k=a.series.xAxis;h+=a.plotX+(!e&&k?k.left-g:0);i+=(a.plotLow?(a.plotLow+a.plotHigh)/2:a.plotY)+(!e&&j?j.top-f:0)}),h/=a.length,i/=a.length,c=[e?d.plotWidth-i:h,this.shared&&!e&&a.length>1&&b?b.chartY-f:e?d.plotHeight-h:i]);return Ua(c,r)},getPosition:function(a,b,c){var d=this.chart,
e=this.distance,f={},g=c.h||0,h,i=["y",d.chartHeight,b,c.plotY+d.plotTop],j=["x",d.chartWidth,a,c.plotX+d.plotLeft],k=p(c.ttBelow,d.inverted&&!c.negative||!d.inverted&&c.negative),l=function(a,b,c,d){var h=c<d-e,i=d+e+c<b,j=d-e-c;d+=e;if(k&&i)f[a]=d;else if(!k&&h)f[a]=j;else if(h)f[a]=j-g<0?j:j-g;else if(i)f[a]=d+g+c>b?d:d+g;else return!1},m=function(a,b,c,d){if(d<e||d>b-e)return!1;else f[a]=d<c/2?1:d>b-c/2?b-c-2:d-c/2},n=function(a){var b=i;i=j;j=b;h=a},v=function(){l.apply(0,i)!==!1?m.apply(0,j)===
!1&&!h&&(n(!0),v()):h?f.x=f.y=0:(n(!0),v())};(d.inverted||this.len>1)&&n();v();return f},defaultFormatter:function(a){var b=this.points||sa(this),c;c=[a.tooltipFooterHeaderFormatter(b[0])];c=c.concat(a.bodyFormatter(b));c.push(a.tooltipFooterHeaderFormatter(b[0],!0));return c.join("")},refresh:function(a,b){var c=this.chart,d=this.label,e=this.options,f,g,h,i={},j,k=[];j=e.formatter||this.defaultFormatter;var i=c.hoverPoints,l,m=this.shared;clearTimeout(this.hideTimer);this.followPointer=sa(a)[0].series.tooltipOptions.followPointer;
h=this.getAnchor(a,b);f=h[0];g=h[1];m&&(!a.series||!a.series.noSharedTooltip)?(c.hoverPoints=a,i&&o(i,function(a){a.setState()}),o(a,function(a){a.setState("hover");k.push(a.getLabelConfig())}),i={x:a[0].category,y:a[0].y},i.points=k,this.len=k.length,a=a[0]):i=a.getLabelConfig();j=j.call(i,this);i=a.series;this.distance=p(i.tooltipOptions.distance,16);j===!1?this.hide():(this.isHidden&&(db(d),d.attr("opacity",1).show()),d.attr({text:j}),l=e.borderColor||a.color||i.color||"#606060",d.attr({stroke:l}),
this.updatePosition({plotX:f,plotY:g,negative:a.negative,ttBelow:a.ttBelow,h:h[2]||0}),this.isHidden=!1);I(c,"tooltipRefresh",{text:j,x:f+c.plotLeft,y:g+c.plotTop,borderColor:l})},updatePosition:function(a){var b=this.chart,c=this.label,c=(this.options.positioner||this.getPosition).call(this,c.width,c.height,a);this.move(r(c.x),r(c.y||0),a.plotX+b.plotLeft,a.plotY+b.plotTop)},getXDateFormat:function(a,b,c){var d,b=b.dateTimeLabelFormats,e=c&&c.closestPointRange,f,g={millisecond:15,second:12,minute:9,
hour:6,day:3},h,i="millisecond";if(e){h=Oa("%m-%d %H:%M:%S.%L",a.x);for(f in E){if(e===E.week&&+Oa("%w",a.x)===c.options.startOfWeek&&h.substr(6)==="00:00:00.000"){f="week";break}else if(E[f]>e){f=i;break}else if(g[f]&&h.substr(g[f])!=="01-01 00:00:00.000".substr(g[f]))break;f!=="week"&&(i=f)}f&&(d=b[f])}else d=b.day;return d||b.year},tooltipFooterHeaderFormatter:function(a,b){var c=b?"footer":"header",d=a.series,e=d.tooltipOptions,f=e.xDateFormat,g=d.xAxis,h=g&&g.options.type==="datetime"&&ra(a.key),
c=e[c+"Format"];h&&!f&&(f=this.getXDateFormat(a,e,g));h&&f&&(c=c.replace("{point.key}","{point.key:"+f+"}"));return Ja(c,{point:a,series:d})},bodyFormatter:function(a){return Ua(a,function(a){var c=a.series.tooltipOptions;return(c.pointFormatter||a.point.tooltipFormatter).call(a.point,c.pointFormat)})}};var pa;ab=B.documentElement.ontouchstart!==y;var Va=A.Pointer=function(a,b){this.init(a,b)};Va.prototype={init:function(a,b){var c=b.chart,d=c.events,e=fa?"":c.zoomType,c=a.inverted,f;this.options=
b;this.chart=a;this.zoomX=f=/x/.test(e);this.zoomY=e=/y/.test(e);this.zoomHor=f&&!c||e&&c;this.zoomVert=e&&!c||f&&c;this.hasZoom=f||e;this.runChartClick=d&&!!d.click;this.pinchDown=[];this.lastValidTouch={};if(A.Tooltip&&b.tooltip.enabled)a.tooltip=new Nb(a,b.tooltip),this.followTouchMove=p(b.tooltip.followTouchMove,!0);this.setDOMEvents()},normalize:function(a,b){var c,d,a=a||window.event,a=Tb(a);if(!a.target)a.target=a.srcElement;d=a.touches?a.touches.length?a.touches.item(0):a.changedTouches[0]:
a;if(!b)this.chartPosition=b=Sb(this.chart.container);d.pageX===y?(c=u(a.x,a.clientX-b.left),d=a.y):(c=d.pageX-b.left,d=d.pageY-b.top);return x(a,{chartX:r(c),chartY:r(d)})},getCoordinates:function(a){var b={xAxis:[],yAxis:[]};o(this.chart.axes,function(c){b[c.isXAxis?"xAxis":"yAxis"].push({axis:c,value:c.toValue(a[c.horiz?"chartX":"chartY"])})});return b},runPointActions:function(a){var b=this.chart,c=b.series,d=b.tooltip,e=d?d.shared:!1,f=b.hoverPoint,g=b.hoverSeries,h,i=b.chartWidth,j,k,l=[],m,
n;if(!e&&!g)for(h=0;h<c.length;h++)if(c[h].directTouch||!c[h].options.stickyTracking)c=[];!e&&g&&g.directTouch&&f?m=f:(o(c,function(b){j=b.noSharedTooltip&&e;k=!e&&b.directTouch;b.visible&&!j&&!k&&p(b.options.enableMouseTracking,!0)&&(n=b.searchPoint(a,!j&&b.kdDimensions===1))&&l.push(n)}),o(l,function(a){if(a&&typeof a.dist==="number"&&a.dist<i)i=a.dist,m=a}));if(m&&(m!==this.prevKDPoint||d&&d.isHidden)){if(e&&!m.series.noSharedTooltip){for(h=l.length;h--;)(l[h].clientX!==m.clientX||l[h].series.noSharedTooltip)&&
l.splice(h,1);l.length&&d&&d.refresh(l,a);o(l,function(b){if(b!==m)b.onMouseOver(a)});(g&&g.directTouch&&f||m).onMouseOver(a)}else d&&d.refresh(m,a),m.onMouseOver(a);this.prevKDPoint=m}else c=g&&g.tooltipOptions.followPointer,d&&c&&!d.isHidden&&(c=d.getAnchor([{}],a),d.updatePosition({plotX:c[0],plotY:c[1]}));if(d&&!this._onDocumentMouseMove)this._onDocumentMouseMove=function(a){if(Y[pa])Y[pa].pointer.onDocumentMouseMove(a)},H(B,"mousemove",this._onDocumentMouseMove);o(b.axes,function(b){b.drawCrosshair(a,
p(m,f))})},reset:function(a,b){var c=this.chart,d=c.hoverSeries,e=c.hoverPoint,f=c.hoverPoints,g=c.tooltip,h=g&&g.shared?f:e;(a=a&&g&&h)&&sa(h)[0].plotX===y&&(a=!1);if(a)g.refresh(h),e&&(e.setState(e.state,!0),o(c.axes,function(a){p(a.options.crosshair&&a.options.crosshair.snap,!0)?a.drawCrosshair(null,e):a.hideCrosshair()}));else{if(e)e.onMouseOut();f&&o(f,function(a){a.setState()});if(d)d.onMouseOut();g&&g.hide(b);if(this._onDocumentMouseMove)Z(B,"mousemove",this._onDocumentMouseMove),this._onDocumentMouseMove=
null;o(c.axes,function(a){a.hideCrosshair()});this.hoverX=c.hoverPoints=c.hoverPoint=null}},scaleGroups:function(a,b){var c=this.chart,d;o(c.series,function(e){d=a||e.getPlotBox();e.xAxis&&e.xAxis.zoomEnabled&&(e.group.attr(d),e.markerGroup&&(e.markerGroup.attr(d),e.markerGroup.clip(b?c.clipRect:null)),e.dataLabelsGroup&&e.dataLabelsGroup.attr(d))});c.clipRect.attr(b||c.clipBox)},dragStart:function(a){var b=this.chart;b.mouseIsDown=a.type;b.cancelClick=!1;b.mouseDownX=this.mouseDownX=a.chartX;b.mouseDownY=
this.mouseDownY=a.chartY},drag:function(a){var b=this.chart,c=b.options.chart,d=a.chartX,e=a.chartY,f=this.zoomHor,g=this.zoomVert,h=b.plotLeft,i=b.plotTop,j=b.plotWidth,k=b.plotHeight,l,m=this.mouseDownX,n=this.mouseDownY,v=c.panKey&&a[c.panKey+"Key"];d<h?d=h:d>h+j&&(d=h+j);e<i?e=i:e>i+k&&(e=i+k);this.hasDragged=Math.sqrt(Math.pow(m-d,2)+Math.pow(n-e,2));if(this.hasDragged>10){l=b.isInsidePlot(m-h,n-i);if(b.hasCartesianSeries&&(this.zoomX||this.zoomY)&&l&&!v&&!this.selectionMarker)this.selectionMarker=
b.renderer.rect(h,i,f?1:j,g?1:k,0).attr({fill:c.selectionMarkerFill||"rgba(69,114,167,0.25)",zIndex:7}).add();this.selectionMarker&&f&&(d-=m,this.selectionMarker.attr({width:O(d),x:(d>0?0:d)+m}));this.selectionMarker&&g&&(d=e-n,this.selectionMarker.attr({height:O(d),y:(d>0?0:d)+n}));l&&!this.selectionMarker&&c.panning&&b.pan(a,c.panning)}},drop:function(a){var b=this,c=this.chart,d=this.hasPinched;if(this.selectionMarker){var e={xAxis:[],yAxis:[],originalEvent:a.originalEvent||a},f=this.selectionMarker,
g=f.attr?f.attr("x"):f.x,h=f.attr?f.attr("y"):f.y,i=f.attr?f.attr("width"):f.width,j=f.attr?f.attr("height"):f.height,k;if(this.hasDragged||d)o(c.axes,function(c){if(c.zoomEnabled&&q(c.min)&&(d||b[{xAxis:"zoomX",yAxis:"zoomY"}[c.coll]])){var f=c.horiz,n=a.type==="touchend"?c.minPixelPadding:0,v=c.toValue((f?g:h)+n),f=c.toValue((f?g+i:h+j)-n);e[c.coll].push({axis:c,min:C(v,f),max:u(v,f)});k=!0}}),k&&I(c,"selection",e,function(a){c.zoom(x(a,d?{animation:!1}:null))});this.selectionMarker=this.selectionMarker.destroy();
d&&this.scaleGroups()}if(c)L(c.container,{cursor:c._cursor}),c.cancelClick=this.hasDragged>10,c.mouseIsDown=this.hasDragged=this.hasPinched=!1,this.pinchDown=[]},onContainerMouseDown:function(a){a=this.normalize(a);a.preventDefault&&a.preventDefault();this.dragStart(a)},onDocumentMouseUp:function(a){Y[pa]&&Y[pa].pointer.drop(a)},onDocumentMouseMove:function(a){var b=this.chart,c=this.chartPosition,a=this.normalize(a,c);c&&!this.inClass(a.target,"highcharts-tracker")&&!b.isInsidePlot(a.chartX-b.plotLeft,
a.chartY-b.plotTop)&&this.reset()},onContainerMouseLeave:function(){var a=Y[pa];if(a)a.pointer.reset(),a.pointer.chartPosition=null},onContainerMouseMove:function(a){var b=this.chart;pa=b.index;a=this.normalize(a);a.returnValue=!1;b.mouseIsDown==="mousedown"&&this.drag(a);(this.inClass(a.target,"highcharts-tracker")||b.isInsidePlot(a.chartX-b.plotLeft,a.chartY-b.plotTop))&&!b.openMenu&&this.runPointActions(a)},inClass:function(a,b){for(var c;a;){if(c=J(a,"class"))if(c.indexOf(b)!==-1)return!0;else if(c.indexOf("highcharts-container")!==
-1)return!1;a=a.parentNode}},onTrackerMouseOut:function(a){var b=this.chart.hoverSeries,c=(a=a.relatedTarget||a.toElement)&&a.point&&a.point.series;if(b&&!b.options.stickyTracking&&!this.inClass(a,"highcharts-tooltip")&&c!==b)b.onMouseOut()},onContainerClick:function(a){var b=this.chart,c=b.hoverPoint,d=b.plotLeft,e=b.plotTop,a=this.normalize(a);a.originalEvent=a;b.cancelClick||(c&&this.inClass(a.target,"highcharts-tracker")?(I(c.series,"click",x(a,{point:c})),b.hoverPoint&&c.firePointEvent("click",
a)):(x(a,this.getCoordinates(a)),b.isInsidePlot(a.chartX-d,a.chartY-e)&&I(b,"click",a)))},setDOMEvents:function(){var a=this,b=a.chart.container;b.onmousedown=function(b){a.onContainerMouseDown(b)};b.onmousemove=function(b){a.onContainerMouseMove(b)};b.onclick=function(b){a.onContainerClick(b)};H(b,"mouseleave",a.onContainerMouseLeave);bb===1&&H(B,"mouseup",a.onDocumentMouseUp);if(ab)b.ontouchstart=function(b){a.onContainerTouchStart(b)},b.ontouchmove=function(b){a.onContainerTouchMove(b)},bb===1&&
H(B,"touchend",a.onDocumentTouchEnd)},destroy:function(){var a;Z(this.chart.container,"mouseleave",this.onContainerMouseLeave);bb||(Z(B,"mouseup",this.onDocumentMouseUp),Z(B,"touchend",this.onDocumentTouchEnd));clearInterval(this.tooltipTimeout);for(a in this)this[a]=null}};x(A.Pointer.prototype,{pinchTranslate:function(a,b,c,d,e,f){(this.zoomHor||this.pinchHor)&&this.pinchTranslateDirection(!0,a,b,c,d,e,f);(this.zoomVert||this.pinchVert)&&this.pinchTranslateDirection(!1,a,b,c,d,e,f)},pinchTranslateDirection:function(a,
b,c,d,e,f,g,h){var i=this.chart,j=a?"x":"y",k=a?"X":"Y",l="chart"+k,m=a?"width":"height",n=i["plot"+(a?"Left":"Top")],v,s,p=h||1,o=i.inverted,t=i.bounds[a?"h":"v"],w=b.length===1,q=b[0][l],u=c[0][l],r=!w&&b[1][l],y=!w&&c[1][l],x,c=function(){!w&&O(q-r)>20&&(p=h||O(u-y)/O(q-r));s=(n-u)/p+q;v=i["plot"+(a?"Width":"Height")]/p};c();b=s;b<t.min?(b=t.min,x=!0):b+v>t.max&&(b=t.max-v,x=!0);x?(u-=0.8*(u-g[j][0]),w||(y-=0.8*(y-g[j][1])),c()):g[j]=[u,y];o||(f[j]=s-n,f[m]=v);f=o?1/p:p;e[m]=v;e[j]=b;d[o?a?"scaleY":
"scaleX":"scale"+k]=p;d["translate"+k]=f*n+(u-f*q)},pinch:function(a){var b=this,c=b.chart,d=b.pinchDown,e=a.touches,f=e.length,g=b.lastValidTouch,h=b.hasZoom,i=b.selectionMarker,j={},k=f===1&&(b.inClass(a.target,"highcharts-tracker")&&c.runTrackerClick||b.runChartClick),l={};if(f>1)b.initiated=!0;h&&b.initiated&&!k&&a.preventDefault();Ua(e,function(a){return b.normalize(a)});if(a.type==="touchstart")o(e,function(a,b){d[b]={chartX:a.chartX,chartY:a.chartY}}),g.x=[d[0].chartX,d[1]&&d[1].chartX],g.y=
[d[0].chartY,d[1]&&d[1].chartY],o(c.axes,function(a){if(a.zoomEnabled){var b=c.bounds[a.horiz?"h":"v"],d=a.minPixelPadding,e=a.toPixels(p(a.options.min,a.dataMin)),f=a.toPixels(p(a.options.max,a.dataMax)),g=C(e,f),e=u(e,f);b.min=C(a.pos,g-d);b.max=u(a.pos+a.len,e+d)}}),b.res=!0;else if(d.length){if(!i)b.selectionMarker=i=x({destroy:na},c.plotBox);b.pinchTranslate(d,e,j,i,l,g);b.hasPinched=h;b.scaleGroups(j,l);if(!h&&b.followTouchMove&&f===1)this.runPointActions(b.normalize(a));else if(b.res)b.res=
!1,this.reset(!1,0)}},touch:function(a,b){var c=this.chart;pa=c.index;a.touches.length===1?(a=this.normalize(a),c.isInsidePlot(a.chartX-c.plotLeft,a.chartY-c.plotTop)&&!c.openMenu?(b&&this.runPointActions(a),this.pinch(a)):b&&this.reset()):a.touches.length===2&&this.pinch(a)},onContainerTouchStart:function(a){this.touch(a,!0)},onContainerTouchMove:function(a){this.touch(a)},onDocumentTouchEnd:function(a){Y[pa]&&Y[pa].pointer.drop(a)}});if(K.PointerEvent||K.MSPointerEvent){var wa={},Bb=!!K.PointerEvent,
Xb=function(){var a,b=[];b.item=function(a){return this[a]};for(a in wa)wa.hasOwnProperty(a)&&b.push({pageX:wa[a].pageX,pageY:wa[a].pageY,target:wa[a].target});return b},Cb=function(a,b,c,d){a=a.originalEvent||a;if((a.pointerType==="touch"||a.pointerType===a.MSPOINTER_TYPE_TOUCH)&&Y[pa])d(a),d=Y[pa].pointer,d[b]({type:c,target:a.currentTarget,preventDefault:na,touches:Xb()})};x(Va.prototype,{onContainerPointerDown:function(a){Cb(a,"onContainerTouchStart","touchstart",function(a){wa[a.pointerId]={pageX:a.pageX,
pageY:a.pageY,target:a.currentTarget}})},onContainerPointerMove:function(a){Cb(a,"onContainerTouchMove","touchmove",function(a){wa[a.pointerId]={pageX:a.pageX,pageY:a.pageY};if(!wa[a.pointerId].target)wa[a.pointerId].target=a.currentTarget})},onDocumentPointerUp:function(a){Cb(a,"onDocumentTouchEnd","touchend",function(a){delete wa[a.pointerId]})},batchMSEvents:function(a){a(this.chart.container,Bb?"pointerdown":"MSPointerDown",this.onContainerPointerDown);a(this.chart.container,Bb?"pointermove":
"MSPointerMove",this.onContainerPointerMove);a(B,Bb?"pointerup":"MSPointerUp",this.onDocumentPointerUp)}});cb(Va.prototype,"init",function(a,b,c){a.call(this,b,c);this.hasZoom&&L(b.container,{"-ms-touch-action":P,"touch-action":P})});cb(Va.prototype,"setDOMEvents",function(a){a.apply(this);(this.hasZoom||this.followTouchMove)&&this.batchMSEvents(H)});cb(Va.prototype,"destroy",function(a){this.batchMSEvents(Z);a.call(this)})}var nb=A.Legend=function(a,b){this.init(a,b)};nb.prototype={init:function(a,
b){var c=this,d=b.itemStyle,e=b.itemMarginTop||0;this.options=b;if(b.enabled)c.itemStyle=d,c.itemHiddenStyle=z(d,b.itemHiddenStyle),c.itemMarginTop=e,c.padding=d=p(b.padding,8),c.initialItemX=d,c.initialItemY=d-5,c.maxItemWidth=0,c.chart=a,c.itemHeight=0,c.symbolWidth=p(b.symbolWidth,16),c.pages=[],c.render(),H(c.chart,"endResize",function(){c.positionCheckboxes()})},colorizeItem:function(a,b){var c=this.options,d=a.legendItem,e=a.legendLine,f=a.legendSymbol,g=this.itemHiddenStyle.color,c=b?c.itemStyle.color:
g,h=b?a.legendColor||a.color||"#CCC":g,g=a.options&&a.options.marker,i={fill:h},j;d&&d.css({fill:c,color:c});e&&e.attr({stroke:h});if(f){if(g&&f.isMarker)for(j in i.stroke=h,g=a.convertAttribs(g),g)d=g[j],d!==y&&(i[j]=d);f.attr(i)}},positionItem:function(a){var b=this.options,c=b.symbolPadding,b=!b.rtl,d=a._legendItemPos,e=d[0],d=d[1],f=a.checkbox;(a=a.legendGroup)&&a.element&&a.translate(b?e:this.legendWidth-e-2*c-4,d);if(f)f.x=e,f.y=d},destroyItem:function(a){var b=a.checkbox;o(["legendItem","legendLine",
"legendSymbol","legendGroup"],function(b){a[b]&&(a[b]=a[b].destroy())});b&&Ra(a.checkbox)},destroy:function(){var a=this.group,b=this.box;if(b)this.box=b.destroy();if(a)this.group=a.destroy()},positionCheckboxes:function(a){var b=this.group.alignAttr,c,d=this.clipHeight||this.legendHeight;if(b)c=b.translateY,o(this.allItems,function(e){var f=e.checkbox,g;f&&(g=c+f.y+(a||0)+3,L(f,{left:b.translateX+e.checkboxOffset+f.x-20+"px",top:g+"px",display:g>c-6&&g<c+d-6?"":P}))})},renderTitle:function(){var a=
this.padding,b=this.options.title,c=0;if(b.text){if(!this.title)this.title=this.chart.renderer.label(b.text,a-3,a-4,null,null,null,null,null,"legend-title").attr({zIndex:1}).css(b.style).add(this.group);a=this.title.getBBox();c=a.height;this.offsetWidth=a.width;this.contentGroup.attr({translateY:c})}this.titleHeight=c},setText:function(a){var b=this.options;a.legendItem.attr({text:b.labelFormat?Ja(b.labelFormat,a):b.labelFormatter.call(a)})},renderItem:function(a){var b=this.chart,c=b.renderer,d=
this.options,e=d.layout==="horizontal",f=this.symbolWidth,g=d.symbolPadding,h=this.itemStyle,i=this.itemHiddenStyle,j=this.padding,k=e?p(d.itemDistance,20):0,l=!d.rtl,m=d.width,n=d.itemMarginBottom||0,v=this.itemMarginTop,s=this.initialItemX,o=a.legendItem,q=a.series&&a.series.drawLegendSymbol?a.series:a,t=q.options,t=this.createCheckboxForItem&&t&&t.showCheckbox,w=d.useHTML;if(!o){a.legendGroup=c.g("legend-item").attr({zIndex:1}).add(this.scrollGroup);a.legendItem=o=c.text("",l?f+g:-g,this.baseline||
0,w).css(z(a.visible?h:i)).attr({align:l?"left":"right",zIndex:2}).add(a.legendGroup);if(!this.baseline)this.fontMetrics=c.fontMetrics(h.fontSize,o),this.baseline=this.fontMetrics.f+3+v,o.attr("y",this.baseline);q.drawLegendSymbol(this,a);this.setItemEvents&&this.setItemEvents(a,o,w,h,i);this.colorizeItem(a,a.visible);t&&this.createCheckboxForItem(a)}this.setText(a);c=o.getBBox();f=a.checkboxOffset=d.itemWidth||a.legendItemWidth||f+g+c.width+k+(t?20:0);this.itemHeight=g=r(a.legendItemHeight||c.height);
if(e&&this.itemX-s+f>(m||b.chartWidth-2*j-s-d.x))this.itemX=s,this.itemY+=v+this.lastLineHeight+n,this.lastLineHeight=0;this.maxItemWidth=u(this.maxItemWidth,f);this.lastItemY=v+this.itemY+n;this.lastLineHeight=u(g,this.lastLineHeight);a._legendItemPos=[this.itemX,this.itemY];e?this.itemX+=f:(this.itemY+=v+g+n,this.lastLineHeight=g);this.offsetWidth=m||u((e?this.itemX-s-k:f)+j,this.offsetWidth)},getAllItems:function(){var a=[];o(this.chart.series,function(b){var c=b.options;if(p(c.showInLegend,!q(c.linkedTo)?
y:!1,!0))a=a.concat(b.legendItems||(c.legendType==="point"?b.data:b))});return a},adjustMargins:function(a,b){var c=this.chart,d=this.options,e=d.align[0]+d.verticalAlign[0]+d.layout[0];this.display&&!d.floating&&o([/(lth|ct|rth)/,/(rtv|rm|rbv)/,/(rbh|cb|lbh)/,/(lbv|lm|ltv)/],function(f,g){f.test(e)&&!q(a[g])&&(c[jb[g]]=u(c[jb[g]],c.legend[(g+1)%2?"legendHeight":"legendWidth"]+[1,-1,-1,1][g]*d[g%2?"x":"y"]+p(d.margin,12)+b[g]))})},render:function(){var a=this,b=a.chart,c=b.renderer,d=a.group,e,f,
g,h,i=a.box,j=a.options,k=a.padding,l=j.borderWidth,m=j.backgroundColor;a.itemX=a.initialItemX;a.itemY=a.initialItemY;a.offsetWidth=0;a.lastItemY=0;if(!d)a.group=d=c.g("legend").attr({zIndex:7}).add(),a.contentGroup=c.g().attr({zIndex:1}).add(d),a.scrollGroup=c.g().add(a.contentGroup);a.renderTitle();e=a.getAllItems();rb(e,function(a,b){return(a.options&&a.options.legendIndex||0)-(b.options&&b.options.legendIndex||0)});j.reversed&&e.reverse();a.allItems=e;a.display=f=!!e.length;a.lastLineHeight=0;
o(e,function(b){a.renderItem(b)});g=(j.width||a.offsetWidth)+k;h=a.lastItemY+a.lastLineHeight+a.titleHeight;h=a.handleOverflow(h);h+=k;if(l||m){if(i){if(g>0&&h>0)i[i.isNew?"attr":"animate"](i.crisp({width:g,height:h})),i.isNew=!1}else a.box=i=c.rect(0,0,g,h,j.borderRadius,l||0).attr({stroke:j.borderColor,"stroke-width":l||0,fill:m||P}).add(d).shadow(j.shadow),i.isNew=!0;i[f?"show":"hide"]()}a.legendWidth=g;a.legendHeight=h;o(e,function(b){a.positionItem(b)});f&&d.align(x({width:g,height:h},j),!0,
"spacingBox");b.isResizing||this.positionCheckboxes()},handleOverflow:function(a){var b=this,c=this.chart,d=c.renderer,e=this.options,f=e.y,f=c.spacingBox.height+(e.verticalAlign==="top"?-f:f)-this.padding,g=e.maxHeight,h,i=this.clipRect,j=e.navigation,k=p(j.animation,!0),l=j.arrowSize||12,m=this.nav,n=this.pages,v=this.padding,s,q=this.allItems,N=function(a){i.attr({height:a});if(b.contentGroup.div)b.contentGroup.div.style.clip="rect("+v+"px,9999px,"+(v+a)+"px,0)"};e.layout==="horizontal"&&(f/=2);
g&&(f=C(f,g));n.length=0;if(a>f){this.clipHeight=h=u(f-20-this.titleHeight-v,0);this.currentPage=p(this.currentPage,1);this.fullHeight=a;o(q,function(a,b){var c=a._legendItemPos[1],d=r(a.legendItem.getBBox().height),e=n.length;if(!e||c-n[e-1]>h&&(s||c)!==n[e-1])n.push(s||c),e++;b===q.length-1&&c+d-n[e-1]>h&&n.push(c);c!==s&&(s=c)});if(!i)i=b.clipRect=d.clipRect(0,v,9999,0),b.contentGroup.clip(i);N(h);if(!m)this.nav=m=d.g().attr({zIndex:1}).add(this.group),this.up=d.symbol("triangle",0,0,l,l).on("click",
function(){b.scroll(-1,k)}).add(m),this.pager=d.text("",15,10).css(j.style).add(m),this.down=d.symbol("triangle-down",0,0,l,l).on("click",function(){b.scroll(1,k)}).add(m);b.scroll(0);a=f}else if(m)N(c.chartHeight),m.hide(),this.scrollGroup.attr({translateY:1}),this.clipHeight=0;return a},scroll:function(a,b){var c=this.pages,d=c.length,e=this.currentPage+a,f=this.clipHeight,g=this.options.navigation,h=g.activeColor,g=g.inactiveColor,i=this.pager,j=this.padding;e>d&&(e=d);if(e>0)b!==y&&Sa(b,this.chart),
this.nav.attr({translateX:j,translateY:f+this.padding+7+this.titleHeight,visibility:"visible"}),this.up.attr({fill:e===1?g:h}).css({cursor:e===1?"default":"pointer"}),i.attr({text:e+"/"+d}),this.down.attr({x:18+this.pager.getBBox().width,fill:e===d?g:h}).css({cursor:e===d?"default":"pointer"}),c=-c[e-1]+this.initialItemY,this.scrollGroup.animate({translateY:c}),this.currentPage=e,this.positionCheckboxes(c)}};Na=A.LegendSymbolMixin={drawRectangle:function(a,b){var c=a.options.symbolHeight||a.fontMetrics.f;
b.legendSymbol=this.chart.renderer.rect(0,a.baseline-c+1,a.symbolWidth,c,a.options.symbolRadius||0).attr({zIndex:3}).add(b.legendGroup)},drawLineMarker:function(a){var b=this.options,c=b.marker,d;d=a.symbolWidth;var e=this.chart.renderer,f=this.legendGroup,a=a.baseline-r(a.fontMetrics.b*0.3),g;if(b.lineWidth){g={"stroke-width":b.lineWidth};if(b.dashStyle)g.dashstyle=b.dashStyle;this.legendLine=e.path(["M",0,a,"L",d,a]).attr(g).add(f)}if(c&&c.enabled!==!1)b=c.radius,this.legendSymbol=d=e.symbol(this.symbol,
d/2-b,a-b,2*b,2*b).add(f),d.isMarker=!0}};(/Trident\/7\.0/.test(Ba)||La)&&cb(nb.prototype,"positionItem",function(a,b){var c=this,d=function(){b._legendItemPos&&a.call(c,b)};d();setTimeout(d)});F=A.Chart=function(){this.init.apply(this,arguments)};F.prototype={callbacks:[],init:function(a,b){var c,d=a.series;a.series=null;c=z(T,a);c.series=a.series=d;this.userOptions=a;d=c.chart;this.margin=this.splashArray("margin",d);this.spacing=this.splashArray("spacing",d);var e=d.events;this.bounds={h:{},v:{}};
this.callback=b;this.isResizing=0;this.options=c;this.axes=[];this.series=[];this.hasCartesianSeries=d.showAxes;var f=this,g;f.index=Y.length;Y.push(f);bb++;d.reflow!==!1&&H(f,"load",function(){f.initReflow()});if(e)for(g in e)H(f,g,e[g]);f.xAxis=[];f.yAxis=[];f.animation=fa?!1:p(d.animation,!0);f.pointCount=f.colorCounter=f.symbolCounter=0;f.firstRender()},initSeries:function(a){var b=this.options.chart;(b=M[a.type||b.type||b.defaultSeriesType])||la(17,!0);b=new b;b.init(this,a);return b},isInsidePlot:function(a,
b,c){var d=c?b:a,a=c?a:b;return d>=0&&d<=this.plotWidth&&a>=0&&a<=this.plotHeight},redraw:function(a){var b=this.axes,c=this.series,d=this.pointer,e=this.legend,f=this.isDirtyLegend,g,h,i=this.hasCartesianSeries,j=this.isDirtyBox,k=c.length,l=k,m=this.renderer,n=m.isHidden(),p=[];Sa(a,this);n&&this.cloneRenderTo();for(this.layOutTitles();l--;)if(a=c[l],a.options.stacking&&(g=!0,a.isDirty)){h=!0;break}if(h)for(l=k;l--;)if(a=c[l],a.options.stacking)a.isDirty=!0;o(c,function(a){a.isDirty&&a.options.legendType===
"point"&&(a.updateTotals&&a.updateTotals(),f=!0)});if(f&&e.options.enabled)e.render(),this.isDirtyLegend=!1;g&&this.getStacks();if(i&&!this.isResizing)this.maxTicks=null,o(b,function(a){a.setScale()});this.getMargins();i&&(o(b,function(a){a.isDirty&&(j=!0)}),o(b,function(a){if(a.isDirtyExtremes)a.isDirtyExtremes=!1,p.push(function(){I(a,"afterSetExtremes",x(a.eventArgs,a.getExtremes()));delete a.eventArgs});(j||g)&&a.redraw()}));j&&this.drawChartBox();o(c,function(a){a.isDirty&&a.visible&&(!a.isCartesian||
a.xAxis)&&a.redraw()});d&&d.reset(!0);m.draw();I(this,"redraw");n&&this.cloneRenderTo(!0);o(p,function(a){a.call()})},get:function(a){var b=this.axes,c=this.series,d,e;for(d=0;d<b.length;d++)if(b[d].options.id===a)return b[d];for(d=0;d<c.length;d++)if(c[d].options.id===a)return c[d];for(d=0;d<c.length;d++){e=c[d].points||[];for(b=0;b<e.length;b++)if(e[b].id===a)return e[b]}return null},getAxes:function(){var a=this,b=this.options,c=b.xAxis=sa(b.xAxis||{}),b=b.yAxis=sa(b.yAxis||{});o(c,function(a,
b){a.index=b;a.isX=!0});o(b,function(a,b){a.index=b});c=c.concat(b);o(c,function(b){new va(a,b)})},getSelectedPoints:function(){var a=[];o(this.series,function(b){a=a.concat(lb(b.points||[],function(a){return a.selected}))});return a},getSelectedSeries:function(){return lb(this.series,function(a){return a.selected})},getStacks:function(){var a=this;o(a.yAxis,function(a){if(a.stacks&&a.hasVisibleSeries)a.oldStacks=a.stacks});o(a.series,function(b){if(b.options.stacking&&(b.visible===!0||a.options.chart.ignoreHiddenSeries===
!1))b.stackKey=b.type+p(b.options.stack,"")})},setTitle:function(a,b,c){var g;var d=this,e=d.options,f;f=e.title=z(e.title,a);g=e.subtitle=z(e.subtitle,b),e=g;o([["title",a,f],["subtitle",b,e]],function(a){var b=a[0],c=d[b],e=a[1],a=a[2];c&&e&&(d[b]=c=c.destroy());a&&a.text&&!c&&(d[b]=d.renderer.text(a.text,0,0,a.useHTML).attr({align:a.align,"class":"highcharts-"+b,zIndex:a.zIndex||4}).css(a.style).add())});d.layOutTitles(c)},layOutTitles:function(a){var b=0,c=this.title,d=this.subtitle,e=this.options,
f=e.title,e=e.subtitle,g=this.renderer,h=this.spacingBox.width-44;if(c&&(c.css({width:(f.width||h)+"px"}).align(x({y:g.fontMetrics(f.style.fontSize,c).b-3},f),!1,"spacingBox"),!f.floating&&!f.verticalAlign))b=c.getBBox().height;d&&(d.css({width:(e.width||h)+"px"}).align(x({y:b+(f.margin-13)+g.fontMetrics(f.style.fontSize,d).b},e),!1,"spacingBox"),!e.floating&&!e.verticalAlign&&(b=ta(b+d.getBBox().height)));c=this.titleOffset!==b;this.titleOffset=b;if(!this.isDirtyBox&&c)this.isDirtyBox=c,this.hasRendered&&
p(a,!0)&&this.isDirtyBox&&this.redraw()},getChartSize:function(){var a=this.options.chart,b=a.width,a=a.height,c=this.renderToClone||this.renderTo;if(!q(b))this.containerWidth=kb(c,"width");if(!q(a))this.containerHeight=kb(c,"height");this.chartWidth=u(0,b||this.containerWidth||600);this.chartHeight=u(0,p(a,this.containerHeight>19?this.containerHeight:400))},cloneRenderTo:function(a){var b=this.renderToClone,c=this.container;a?b&&(this.renderTo.appendChild(c),Ra(b),delete this.renderToClone):(c&&
c.parentNode===this.renderTo&&this.renderTo.removeChild(c),this.renderToClone=b=this.renderTo.cloneNode(0),L(b,{position:"absolute",top:"-9999px",display:"block"}),b.style.setProperty&&b.style.setProperty("display","block","important"),B.body.appendChild(b),c&&b.appendChild(c))},getContainer:function(){var a,b=this.options.chart,c,d,e;this.renderTo=a=b.renderTo;e="highcharts-"+yb++;if(Da(a))this.renderTo=a=B.getElementById(a);a||la(13,!0);c=D(J(a,"data-highcharts-chart"));!isNaN(c)&&Y[c]&&Y[c].hasRendered&&
Y[c].destroy();J(a,"data-highcharts-chart",this.index);a.innerHTML="";!b.skipClone&&!a.offsetWidth&&this.cloneRenderTo();this.getChartSize();c=this.chartWidth;d=this.chartHeight;this.container=a=$(Ka,{className:"highcharts-container"+(b.className?" "+b.className:""),id:e},x({position:"relative",overflow:"hidden",width:c+"px",height:d+"px",textAlign:"left",lineHeight:"normal",zIndex:0,"-webkit-tap-highlight-color":"rgba(0,0,0,0)"},b.style),this.renderToClone||a);this._cursor=a.style.cursor;this.renderer=
b.forExport?new ua(a,c,d,b.style,!0):new $a(a,c,d,b.style);fa&&this.renderer.create(this,a,c,d);this.renderer.chartIndex=this.index},getMargins:function(a){var b=this.spacing,c=this.margin,d=this.titleOffset;this.resetMargins();if(d&&!q(c[0]))this.plotTop=u(this.plotTop,d+this.options.title.margin+b[0]);this.legend.adjustMargins(c,b);this.extraBottomMargin&&(this.marginBottom+=this.extraBottomMargin);this.extraTopMargin&&(this.plotTop+=this.extraTopMargin);a||this.getAxisMargins()},getAxisMargins:function(){var a=
this,b=a.axisOffset=[0,0,0,0],c=a.margin;a.hasCartesianSeries&&o(a.axes,function(a){a.getOffset()});o(jb,function(d,e){q(c[e])||(a[d]+=b[e])});a.setChartSize()},reflow:function(a){var b=this,c=b.options.chart,d=b.renderTo,e=c.width||kb(d,"width"),f=c.height||kb(d,"height"),c=a?a.target:K,d=function(){if(b.container)b.setSize(e,f,!1),b.hasUserSize=null};if(!b.hasUserSize&&!b.isPrinting&&e&&f&&(c===K||c===B)){if(e!==b.containerWidth||f!==b.containerHeight)clearTimeout(b.reflowTimeout),a?b.reflowTimeout=
setTimeout(d,100):d();b.containerWidth=e;b.containerHeight=f}},initReflow:function(){var a=this,b=function(b){a.reflow(b)};H(K,"resize",b);H(a,"destroy",function(){Z(K,"resize",b)})},setSize:function(a,b,c){var d=this,e,f,g;d.isResizing+=1;g=function(){d&&I(d,"endResize",null,function(){d.isResizing-=1})};Sa(c,d);d.oldChartHeight=d.chartHeight;d.oldChartWidth=d.chartWidth;if(q(a))d.chartWidth=e=u(0,r(a)),d.hasUserSize=!!e;if(q(b))d.chartHeight=f=u(0,r(b));(za?mb:L)(d.container,{width:e+"px",height:f+
"px"},za);d.setChartSize(!0);d.renderer.setSize(e,f,c);d.maxTicks=null;o(d.axes,function(a){a.isDirty=!0;a.setScale()});o(d.series,function(a){a.isDirty=!0});d.isDirtyLegend=!0;d.isDirtyBox=!0;d.layOutTitles();d.getMargins();d.redraw(c);d.oldChartHeight=null;I(d,"resize");za===!1?g():setTimeout(g,za&&za.duration||500)},setChartSize:function(a){var b=this.inverted,c=this.renderer,d=this.chartWidth,e=this.chartHeight,f=this.options.chart,g=this.spacing,h=this.clipOffset,i,j,k,l;this.plotLeft=i=r(this.plotLeft);
this.plotTop=j=r(this.plotTop);this.plotWidth=k=u(0,r(d-i-this.marginRight));this.plotHeight=l=u(0,r(e-j-this.marginBottom));this.plotSizeX=b?l:k;this.plotSizeY=b?k:l;this.plotBorderWidth=f.plotBorderWidth||0;this.spacingBox=c.spacingBox={x:g[3],y:g[0],width:d-g[3]-g[1],height:e-g[0]-g[2]};this.plotBox=c.plotBox={x:i,y:j,width:k,height:l};d=2*V(this.plotBorderWidth/2);b=ta(u(d,h[3])/2);c=ta(u(d,h[0])/2);this.clipBox={x:b,y:c,width:V(this.plotSizeX-u(d,h[1])/2-b),height:u(0,V(this.plotSizeY-u(d,h[2])/
2-c))};a||o(this.axes,function(a){a.setAxisSize();a.setAxisTranslation()})},resetMargins:function(){var a=this;o(jb,function(b,c){a[b]=p(a.margin[c],a.spacing[c])});a.axisOffset=[0,0,0,0];a.clipOffset=[0,0,0,0]},drawChartBox:function(){var a=this.options.chart,b=this.renderer,c=this.chartWidth,d=this.chartHeight,e=this.chartBackground,f=this.plotBackground,g=this.plotBorder,h=this.plotBGImage,i=a.borderWidth||0,j=a.backgroundColor,k=a.plotBackgroundColor,l=a.plotBackgroundImage,m=a.plotBorderWidth||
0,n,p=this.plotLeft,o=this.plotTop,q=this.plotWidth,u=this.plotHeight,t=this.plotBox,w=this.clipRect,r=this.clipBox;n=i+(a.shadow?8:0);if(i||j)if(e)e.animate(e.crisp({width:c-n,height:d-n}));else{e={fill:j||P};if(i)e.stroke=a.borderColor,e["stroke-width"]=i;this.chartBackground=b.rect(n/2,n/2,c-n,d-n,a.borderRadius,i).attr(e).addClass("highcharts-background").add().shadow(a.shadow)}if(k)f?f.animate(t):this.plotBackground=b.rect(p,o,q,u,0).attr({fill:k}).add().shadow(a.plotShadow);if(l)h?h.animate(t):
this.plotBGImage=b.image(l,p,o,q,u).add();w?w.animate({width:r.width,height:r.height}):this.clipRect=b.clipRect(r);if(m)g?g.animate(g.crisp({x:p,y:o,width:q,height:u,strokeWidth:-m})):this.plotBorder=b.rect(p,o,q,u,0,-m).attr({stroke:a.plotBorderColor,"stroke-width":m,fill:P,zIndex:1}).add();this.isDirtyBox=!1},propFromSeries:function(){var a=this,b=a.options.chart,c,d=a.options.series,e,f;o(["inverted","angular","polar"],function(g){c=M[b.type||b.defaultSeriesType];f=a[g]||b[g]||c&&c.prototype[g];
for(e=d&&d.length;!f&&e--;)(c=M[d[e].type])&&c.prototype[g]&&(f=!0);a[g]=f})},linkSeries:function(){var a=this,b=a.series;o(b,function(a){a.linkedSeries.length=0});o(b,function(b){var d=b.options.linkedTo;if(Da(d)&&(d=d===":previous"?a.series[b.index-1]:a.get(d)))d.linkedSeries.push(b),b.linkedParent=d})},renderSeries:function(){o(this.series,function(a){a.translate();a.render()})},renderLabels:function(){var a=this,b=a.options.labels;b.items&&o(b.items,function(c){var d=x(b.style,c.style),e=D(d.left)+
a.plotLeft,f=D(d.top)+a.plotTop+12;delete d.left;delete d.top;a.renderer.text(c.html,e,f).attr({zIndex:2}).css(d).add()})},render:function(){var a=this.axes,b=this.renderer,c=this.options,d,e,f,g;this.setTitle();this.legend=new nb(this,c.legend);this.getStacks();this.getMargins(!0);this.setChartSize();d=this.plotWidth;e=this.plotHeight-=13;o(a,function(a){a.setScale()});this.getAxisMargins();f=d/this.plotWidth>1.1;g=e/this.plotHeight>1.1;if(f||g)this.maxTicks=null,o(a,function(a){(a.horiz&&f||!a.horiz&&
g)&&a.setTickInterval(!0)}),this.getMargins();this.drawChartBox();this.hasCartesianSeries&&o(a,function(a){a.render()});if(!this.seriesGroup)this.seriesGroup=b.g("series-group").attr({zIndex:3}).add();this.renderSeries();this.renderLabels();this.showCredits(c.credits);this.hasRendered=!0},showCredits:function(a){if(a.enabled&&!this.credits)this.credits=this.renderer.text(a.text,0,0).on("click",function(){if(a.href)location.href=a.href}).attr({align:a.position.align,zIndex:8}).css(a.style).add().align(a.position)},
destroy:function(){var a=this,b=a.axes,c=a.series,d=a.container,e,f=d&&d.parentNode;I(a,"destroy");Y[a.index]=y;bb--;a.renderTo.removeAttribute("data-highcharts-chart");Z(a);for(e=b.length;e--;)b[e]=b[e].destroy();for(e=c.length;e--;)c[e]=c[e].destroy();o("title,subtitle,chartBackground,plotBackground,plotBGImage,plotBorder,seriesGroup,clipRect,credits,pointer,scroller,rangeSelector,legend,resetZoomButton,tooltip,renderer".split(","),function(b){var c=a[b];c&&c.destroy&&(a[b]=c.destroy())});if(d)d.innerHTML=
"",Z(d),f&&Ra(d);for(e in a)delete a[e]},isReadyToRender:function(){var a=this;return!ca&&K==K.top&&B.readyState!=="complete"||fa&&!K.canvg?(fa?Mb.push(function(){a.firstRender()},a.options.global.canvasToolsURL):B.attachEvent("onreadystatechange",function(){B.detachEvent("onreadystatechange",a.firstRender);B.readyState==="complete"&&a.firstRender()}),!1):!0},firstRender:function(){var a=this,b=a.options,c=a.callback;if(a.isReadyToRender()){a.getContainer();I(a,"init");a.resetMargins();a.setChartSize();
a.propFromSeries();a.getAxes();o(b.series||[],function(b){a.initSeries(b)});a.linkSeries();I(a,"beforeRender");if(A.Pointer)a.pointer=new Va(a,b);a.render();a.renderer.draw();c&&c.apply(a,[a]);o(a.callbacks,function(b){a.index!==y&&b.apply(a,[a])});I(a,"load");a.cloneRenderTo(!0)}},splashArray:function(a,b){var c=b[a],c=da(c)?c:[c,c,c,c];return[p(b[a+"Top"],c[0]),p(b[a+"Right"],c[1]),p(b[a+"Bottom"],c[2]),p(b[a+"Left"],c[3])]}};var Yb=A.CenteredSeriesMixin={getCenter:function(){var a=this.options,
b=this.chart,c=2*(a.slicedOffset||0),d=b.plotWidth-2*c,b=b.plotHeight-2*c,e=a.center,e=[p(e[0],"50%"),p(e[1],"50%"),a.size||"100%",a.innerSize||0],f=C(d,b),g,h;for(g=0;g<4;++g)h=e[g],a=g<2||g===2&&/%$/.test(h),e[g]=(/%$/.test(h)?[d,b,f,e[2]][g]*parseFloat(h)/100:parseFloat(h))+(a?c:0);return e}},Ga=function(){};Ga.prototype={init:function(a,b,c){this.series=a;this.color=a.color;this.applyOptions(b,c);this.pointAttr={};if(a.options.colorByPoint&&(b=a.options.colors||a.chart.options.colors,this.color=
this.color||b[a.colorCounter++],a.colorCounter===b.length))a.colorCounter=0;a.chart.pointCount++;return this},applyOptions:function(a,b){var c=this.series,d=c.options.pointValKey||c.pointValKey,a=Ga.prototype.optionsToObject.call(this,a);x(this,a);this.options=this.options?x(this.options,a):a;if(d)this.y=this[d];if(this.x===y&&c)this.x=b===y?c.autoIncrement():b;return this},optionsToObject:function(a){var b={},c=this.series,d=c.options.keys,e=d||c.pointArrayMap||["y"],f=e.length,g=0,h=0;if(typeof a===
"number"||a===null)b[e[0]]=a;else if(Ha(a)){if(!d&&a.length>f){c=typeof a[0];if(c==="string")b.name=a[0];else if(c==="number")b.x=a[0];g++}for(;h<f;)b[e[h++]]=a[g++]}else if(typeof a==="object"){b=a;if(a.dataLabels)c._hasPointLabels=!0;if(a.marker)c._hasPointMarkers=!0}return b},destroy:function(){var a=this.series.chart,b=a.hoverPoints,c;a.pointCount--;if(b&&(this.setState(),ja(b,this),!b.length))a.hoverPoints=null;if(this===a.hoverPoint)this.onMouseOut();if(this.graphic||this.dataLabel)Z(this),
this.destroyElements();this.legendItem&&a.legend.destroyItem(this);for(c in this)this[c]=null},destroyElements:function(){for(var a="graphic,dataLabel,dataLabelUpper,group,connector,shadowGroup".split(","),b,c=6;c--;)b=a[c],this[b]&&(this[b]=this[b].destroy())},getLabelConfig:function(){return{x:this.category,y:this.y,key:this.name||this.category,series:this.series,point:this,percentage:this.percentage,total:this.total||this.stackTotal}},tooltipFormatter:function(a){var b=this.series,c=b.tooltipOptions,
d=p(c.valueDecimals,""),e=c.valuePrefix||"",f=c.valueSuffix||"";o(b.pointArrayMap||["y"],function(b){b="{point."+b;if(e||f)a=a.replace(b+"}",e+b+"}"+f);a=a.replace(b+"}",b+":,."+d+"f}")});return Ja(a,{point:this,series:this.series})},firePointEvent:function(a,b,c){var d=this,e=this.series.options;(e.point.events[a]||d.options&&d.options.events&&d.options.events[a])&&this.importEvents();a==="click"&&e.allowPointSelect&&(c=function(a){d.select&&d.select(null,a.ctrlKey||a.metaKey||a.shiftKey)});I(this,
a,b,c)}};var R=A.Series=function(){};R.prototype={isCartesian:!0,type:"line",pointClass:Ga,sorted:!0,requireSorting:!0,pointAttrToOptions:{stroke:"lineColor","stroke-width":"lineWidth",fill:"fillColor",r:"radius"},axisTypes:["xAxis","yAxis"],colorCounter:0,parallelArrays:["x","y"],init:function(a,b){var c=this,d,e,f=a.series,g=function(a,b){return p(a.options.index,a._i)-p(b.options.index,b._i)};c.chart=a;c.options=b=c.setOptions(b);c.linkedSeries=[];c.bindAxes();x(c,{name:b.name,state:"",pointAttr:{},
visible:b.visible!==!1,selected:b.selected===!0});if(fa)b.animation=!1;e=b.events;for(d in e)H(c,d,e[d]);if(e&&e.click||b.point&&b.point.events&&b.point.events.click||b.allowPointSelect)a.runTrackerClick=!0;c.getColor();c.getSymbol();o(c.parallelArrays,function(a){c[a+"Data"]=[]});c.setData(b.data,!1);if(c.isCartesian)a.hasCartesianSeries=!0;f.push(c);c._i=f.length-1;rb(f,g);this.yAxis&&rb(this.yAxis.series,g);o(f,function(a,b){a.index=b;a.name=a.name||"Series "+(b+1)})},bindAxes:function(){var a=
this,b=a.options,c=a.chart,d;o(a.axisTypes||[],function(e){o(c[e],function(c){d=c.options;if(b[e]===d.index||b[e]!==y&&b[e]===d.id||b[e]===y&&d.index===0)c.series.push(a),a[e]=c,c.isDirty=!0});!a[e]&&a.optionalAxis!==e&&la(18,!0)})},updateParallelArrays:function(a,b){var c=a.series,d=arguments;o(c.parallelArrays,typeof b==="number"?function(d){var f=d==="y"&&c.toYData?c.toYData(a):a[d];c[d+"Data"][b]=f}:function(a){Array.prototype[b].apply(c[a+"Data"],Array.prototype.slice.call(d,2))})},autoIncrement:function(){var a=
this.options,b=this.xIncrement,c,d=a.pointIntervalUnit,b=p(b,a.pointStart,0);this.pointInterval=c=p(this.pointInterval,a.pointInterval,1);if(d==="month"||d==="year")a=new Aa(b),a=d==="month"?+a[wb](a[Ya]()+c):+a[xb](a[Za]()+c),c=a-b;this.xIncrement=b+c;return b},getSegments:function(){var a=-1,b=[],c,d=this.points,e=d.length;if(e)if(this.options.connectNulls){for(c=e;c--;)d[c].y===null&&d.splice(c,1);d.length&&(b=[d])}else o(d,function(c,g){c.y===null?(g>a+1&&b.push(d.slice(a+1,g)),a=g):g===e-1&&
b.push(d.slice(a+1,g+1))});this.segments=b},setOptions:function(a){var b=this.chart,c=b.options.plotOptions,b=b.userOptions||{},d=b.plotOptions||{},e=c[this.type];this.userOptions=a;c=z(e,c.series,a);this.tooltipOptions=z(T.tooltip,T.plotOptions[this.type].tooltip,b.tooltip,d.series&&d.series.tooltip,d[this.type]&&d[this.type].tooltip,a.tooltip);e.marker===null&&delete c.marker;this.zoneAxis=c.zoneAxis;a=this.zones=(c.zones||[]).slice();if((c.negativeColor||c.negativeFillColor)&&!c.zones)a.push({value:c[this.zoneAxis+
"Threshold"]||c.threshold||0,color:c.negativeColor,fillColor:c.negativeFillColor});a.length&&q(a[a.length-1].value)&&a.push({color:this.color,fillColor:this.fillColor});return c},getCyclic:function(a,b,c){var d=this.userOptions,e="_"+a+"Index",f=a+"Counter";b||(q(d[e])?b=d[e]:(d[e]=b=this.chart[f]%c.length,this.chart[f]+=1),b=c[b]);this[a]=b},getColor:function(){this.options.colorByPoint||this.getCyclic("color",this.options.color||ba[this.type].color,this.chart.options.colors)},getSymbol:function(){var a=
this.options.marker;this.getCyclic("symbol",a.symbol,this.chart.options.symbols);if(/^url/.test(this.symbol))a.radius=0},drawLegendSymbol:Na.drawLineMarker,setData:function(a,b,c,d){var e=this,f=e.points,g=f&&f.length||0,h,i=e.options,j=e.chart,k=null,l=e.xAxis,m=l&&!!l.categories,n=i.turboThreshold,v=this.xData,s=this.yData,q=(h=e.pointArrayMap)&&h.length,a=a||[];h=a.length;b=p(b,!0);if(d!==!1&&h&&g===h&&!e.cropped&&!e.hasGroupedData&&e.visible)o(a,function(a,b){f[b].update&&f[b].update(a,!1,null,
!1)});else{e.xIncrement=null;e.pointRange=m?1:i.pointRange;e.colorCounter=0;o(this.parallelArrays,function(a){e[a+"Data"].length=0});if(n&&h>n){for(c=0;k===null&&c<h;)k=a[c],c++;if(ra(k)){m=p(i.pointStart,0);i=p(i.pointInterval,1);for(c=0;c<h;c++)v[c]=m,s[c]=a[c],m+=i;e.xIncrement=m}else if(Ha(k))if(q)for(c=0;c<h;c++)i=a[c],v[c]=i[0],s[c]=i.slice(1,q+1);else for(c=0;c<h;c++)i=a[c],v[c]=i[0],s[c]=i[1];else la(12)}else for(c=0;c<h;c++)if(a[c]!==y&&(i={series:e},e.pointClass.prototype.applyOptions.apply(i,
[a[c]]),e.updateParallelArrays(i,c),m&&i.name))l.names[i.x]=i.name;Da(s[0])&&la(14,!0);e.data=[];e.options.data=a;for(c=g;c--;)f[c]&&f[c].destroy&&f[c].destroy();if(l)l.minRange=l.userMinRange;e.isDirty=e.isDirtyData=j.isDirtyBox=!0;c=!1}b&&j.redraw(c)},processData:function(a){var b=this.xData,c=this.yData,d=b.length,e;e=0;var f,g,h=this.xAxis,i,j=this.options;i=j.cropThreshold;var k=this.isCartesian,l,m;if(k&&!this.isDirty&&!h.isDirty&&!this.yAxis.isDirty&&!a)return!1;if(h)a=h.getExtremes(),l=a.min,
m=a.max;if(k&&this.sorted&&(!i||d>i||this.forceCrop))if(b[d-1]<l||b[0]>m)b=[],c=[];else if(b[0]<l||b[d-1]>m)e=this.cropData(this.xData,this.yData,l,m),b=e.xData,c=e.yData,e=e.start,f=!0;for(i=b.length-1;i>=0;i--)d=b[i]-b[i-1],d>0&&(g===y||d<g)?g=d:d<0&&this.requireSorting&&la(15);this.cropped=f;this.cropStart=e;this.processedXData=b;this.processedYData=c;if(j.pointRange===null)this.pointRange=g||1;this.closestPointRange=g},cropData:function(a,b,c,d){var e=a.length,f=0,g=e,h=p(this.cropShoulder,1),
i;for(i=0;i<e;i++)if(a[i]>=c){f=u(0,i-h);break}for(;i<e;i++)if(a[i]>d){g=i+h;break}return{xData:a.slice(f,g),yData:b.slice(f,g),start:f,end:g}},generatePoints:function(){var a=this.options.data,b=this.data,c,d=this.processedXData,e=this.processedYData,f=this.pointClass,g=d.length,h=this.cropStart||0,i,j=this.hasGroupedData,k,l=[],m;if(!b&&!j)b=[],b.length=a.length,b=this.data=b;for(m=0;m<g;m++)i=h+m,j?l[m]=(new f).init(this,[d[m]].concat(sa(e[m]))):(b[i]?k=b[i]:a[i]!==y&&(b[i]=k=(new f).init(this,
a[i],d[m])),l[m]=k),l[m].index=i;if(b&&(g!==(c=b.length)||j))for(m=0;m<c;m++)if(m===h&&!j&&(m+=g),b[m])b[m].destroyElements(),b[m].plotX=y;this.data=b;this.points=l},getExtremes:function(a){var b=this.yAxis,c=this.processedXData,d,e=[],f=0;d=this.xAxis.getExtremes();var g=d.min,h=d.max,i,j,k,l,a=a||this.stackedYData||this.processedYData;d=a.length;for(l=0;l<d;l++)if(j=c[l],k=a[l],i=k!==null&&k!==y&&(!b.isLog||k.length||k>0),j=this.getExtremesFromAll||this.options.getExtremesFromAll||this.cropped||
(c[l+1]||j)>=g&&(c[l-1]||j)<=h,i&&j)if(i=k.length)for(;i--;)k[i]!==null&&(e[f++]=k[i]);else e[f++]=k;this.dataMin=Pa(e);this.dataMax=Fa(e)},translate:function(){this.processedXData||this.processData();this.generatePoints();for(var a=this.options,b=a.stacking,c=this.xAxis,d=c.categories,e=this.yAxis,f=this.points,g=f.length,h=!!this.modifyValue,i=a.pointPlacement,j=i==="between"||ra(i),k=a.threshold,l=a.startFromThreshold?k:0,m,n,v,o=Number.MAX_VALUE,a=0;a<g;a++){var r=f[a],x=r.x,t=r.y;n=r.low;var w=
b&&e.stacks[(this.negStacks&&t<(l?0:k)?"-":"")+this.stackKey];if(e.isLog&&t!==null&&t<=0)r.y=t=null,la(10);r.plotX=m=C(u(-1E5,c.translate(x,0,0,0,1,i,this.type==="flags")),1E5);if(b&&this.visible&&w&&w[x])w=w[x],t=w.points[this.index+","+a],n=t[0],t=t[1],n===l&&(n=p(k,e.min)),e.isLog&&n<=0&&(n=null),r.total=r.stackTotal=w.total,r.percentage=w.total&&r.y/w.total*100,r.stackY=t,w.setOffset(this.pointXOffset||0,this.barW||0);r.yBottom=q(n)?e.translate(n,0,1,0,1):null;h&&(t=this.modifyValue(t,r));r.plotY=
n=typeof t==="number"&&t!==Infinity?C(u(-1E5,e.translate(t,0,1,0,1)),1E5):y;r.isInside=n!==y&&n>=0&&n<=e.len&&m>=0&&m<=c.len;r.clientX=j?c.translate(x,0,0,0,1):m;r.negative=r.y<(k||0);r.category=d&&d[r.x]!==y?d[r.x]:r.x;a&&(o=C(o,O(m-v)));v=m}this.closestPointRangePx=o;this.getSegments()},setClip:function(a){var b=this.chart,c=b.renderer,d=b.inverted,e=this.clipBox,f=e||b.clipBox,g=this.sharedClipKey||["_sharedClip",a&&a.duration,a&&a.easing,f.height].join(","),h=b[g],i=b[g+"m"];if(!h){if(a)f.width=
0,b[g+"m"]=i=c.clipRect(-99,d?-b.plotLeft:-b.plotTop,99,d?b.chartWidth:b.chartHeight);b[g]=h=c.clipRect(f)}a&&(h.count+=1);if(this.options.clip!==!1)this.group.clip(a||e?h:b.clipRect),this.markerGroup.clip(i),this.sharedClipKey=g;a||(h.count-=1,h.count<=0&&g&&b[g]&&(e||(b[g]=b[g].destroy()),b[g+"m"]&&(b[g+"m"]=b[g+"m"].destroy())))},animate:function(a){var b=this.chart,c=this.options.animation,d;if(c&&!da(c))c=ba[this.type].animation;a?this.setClip(c):(d=this.sharedClipKey,(a=b[d])&&a.animate({width:b.plotSizeX},
c),b[d+"m"]&&b[d+"m"].animate({width:b.plotSizeX+99},c),this.animate=null)},afterAnimate:function(){this.setClip();I(this,"afterAnimate")},drawPoints:function(){var a,b=this.points,c=this.chart,d,e,f,g,h,i,j,k,l=this.options.marker,m=this.pointAttr[""],n,v,o,r=this.markerGroup,q=p(l.enabled,this.xAxis.isRadial,this.closestPointRangePx>2*l.radius);if(l.enabled!==!1||this._hasPointMarkers)for(f=b.length;f--;)if(g=b[f],d=V(g.plotX),e=g.plotY,k=g.graphic,n=g.marker||{},v=!!g.marker,a=q&&n.enabled===y||
n.enabled,o=g.isInside,a&&e!==y&&!isNaN(e)&&g.y!==null)if(a=g.pointAttr[g.selected?"select":""]||m,h=a.r,i=p(n.symbol,this.symbol),j=i.indexOf("url")===0,k)k[o?"show":"hide"](!0).animate(x({x:d-h,y:e-h},k.symbolName?{width:2*h,height:2*h}:{}));else{if(o&&(h>0||j))g.graphic=c.renderer.symbol(i,d-h,e-h,2*h,2*h,v?n:l).attr(a).add(r)}else if(k)g.graphic=k.destroy()},convertAttribs:function(a,b,c,d){var e=this.pointAttrToOptions,f,g,h={},a=a||{},b=b||{},c=c||{},d=d||{};for(f in e)g=e[f],h[f]=p(a[g],b[f],
c[f],d[f]);return h},getAttribs:function(){var a=this,b=a.options,c=ba[a.type].marker?b.marker:b,d=c.states,e=d.hover,f,g=a.color,h=a.options.negativeColor;f={stroke:g,fill:g};var i=a.points||[],j,k=[],l,m=a.pointAttrToOptions;l=a.hasPointSpecificOptions;var n=c.lineColor,p=c.fillColor;j=b.turboThreshold;var s=a.zones,r=a.zoneAxis||"y",u;b.marker?(e.radius=e.radius||c.radius+e.radiusPlus,e.lineWidth=e.lineWidth||c.lineWidth+e.lineWidthPlus):(e.color=e.color||oa(e.color||g).brighten(e.brightness).get(),
e.negativeColor=e.negativeColor||oa(e.negativeColor||h).brighten(e.brightness).get());k[""]=a.convertAttribs(c,f);o(["hover","select"],function(b){k[b]=a.convertAttribs(d[b],k[""])});a.pointAttr=k;g=i.length;if(!j||g<j||l)for(;g--;){j=i[g];if((c=j.options&&j.options.marker||j.options)&&c.enabled===!1)c.radius=0;if(s.length){l=0;for(f=s[l];j[r]>=f.value;)f=s[++l];j.color=j.fillColor=f.color}l=b.colorByPoint||j.color;if(j.options)for(u in m)q(c[m[u]])&&(l=!0);if(l){c=c||{};l=[];d=c.states||{};f=d.hover=
d.hover||{};if(!b.marker)f.color=f.color||!j.options.color&&e[j.negative&&h?"negativeColor":"color"]||oa(j.color).brighten(f.brightness||e.brightness).get();f={color:j.color};if(!p)f.fillColor=j.color;if(!n)f.lineColor=j.color;c.hasOwnProperty("color")&&!c.color&&delete c.color;l[""]=a.convertAttribs(x(f,c),k[""]);l.hover=a.convertAttribs(d.hover,k.hover,l[""]);l.select=a.convertAttribs(d.select,k.select,l[""])}else l=k;j.pointAttr=l}},destroy:function(){var a=this,b=a.chart,c=/AppleWebKit\/533/.test(Ba),
d,e=a.data||[],f,g,h;I(a,"destroy");Z(a);o(a.axisTypes||[],function(b){if(h=a[b])ja(h.series,a),h.isDirty=h.forceRedraw=!0});a.legendItem&&a.chart.legend.destroyItem(a);for(d=e.length;d--;)(f=e[d])&&f.destroy&&f.destroy();a.points=null;clearTimeout(a.animationTimeout);for(g in a)a[g]instanceof Q&&!a[g].survive&&(d=c&&g==="group"?"hide":"destroy",a[g][d]());if(b.hoverSeries===a)b.hoverSeries=null;ja(b.series,a);for(g in a)delete a[g]},getSegmentPath:function(a){var b=this,c=[],d=b.options.step;o(a,
function(e,f){var g=e.plotX,h=e.plotY,i;b.getPointSpline?c.push.apply(c,b.getPointSpline(a,e,f)):(c.push(f?"L":"M"),d&&f&&(i=a[f-1],d==="right"?c.push(i.plotX,h):d==="center"?c.push((i.plotX+g)/2,i.plotY,(i.plotX+g)/2,h):c.push(g,i.plotY)),c.push(e.plotX,e.plotY))});return c},getGraphPath:function(){var a=this,b=[],c,d=[];o(a.segments,function(e){c=a.getSegmentPath(e);e.length>1?b=b.concat(c):d.push(e[0])});a.singlePoints=d;return a.graphPath=b},drawGraph:function(){var a=this,b=this.options,c=[["graph",
b.lineColor||this.color,b.dashStyle]],d=b.lineWidth,e=b.linecap!=="square",f=this.getGraphPath(),g=this.fillGraph&&this.color||P;o(this.zones,function(d,e){c.push(["zoneGraph"+e,d.color||a.color,d.dashStyle||b.dashStyle])});o(c,function(c,i){var j=c[0],k=a[j];if(k)db(k),k.animate({d:f});else if((d||g)&&f.length)k={stroke:c[1],"stroke-width":d,fill:g,zIndex:1},c[2]?k.dashstyle=c[2]:e&&(k["stroke-linecap"]=k["stroke-linejoin"]="round"),a[j]=a.chart.renderer.path(f).attr(k).add(a.group).shadow(i<2&&
b.shadow)})},applyZones:function(){var a=this,b=this.chart,c=b.renderer,d=this.zones,e,f,g=this.clips||[],h,i=this.graph,j=this.area,k=u(b.chartWidth,b.chartHeight),l=this[(this.zoneAxis||"y")+"Axis"],m,n=l.reversed,v=b.inverted,s=l.horiz,q,x,t,w=!1;if(d.length&&(i||j))i&&i.hide(),j&&j.hide(),m=l.getExtremes(),o(d,function(d,o){e=n?s?b.plotWidth:0:s?0:l.toPixels(m.min);e=C(u(p(f,e),0),k);f=C(u(r(l.toPixels(p(d.value,m.max),!0)),0),k);w&&(e=f=l.toPixels(m.max));q=Math.abs(e-f);x=C(e,f);t=u(e,f);if(l.isXAxis){if(h=
{x:v?t:x,y:0,width:q,height:k},!s)h.x=b.plotHeight-h.x}else if(h={x:0,y:v?t:x,width:k,height:q},s)h.y=b.plotWidth-h.y;b.inverted&&c.isVML&&(h=l.isXAxis?{x:0,y:n?x:t,height:h.width,width:b.chartWidth}:{x:h.y-b.plotLeft-b.spacingBox.x,y:0,width:h.height,height:b.chartHeight});g[o]?g[o].animate(h):(g[o]=c.clipRect(h),i&&a["zoneGraph"+o].clip(g[o]),j&&a["zoneArea"+o].clip(g[o]));w=d.value>m.max}),this.clips=g},invertGroups:function(){function a(){var a={width:b.yAxis.len,height:b.xAxis.len};o(["group",
"markerGroup"],function(c){b[c]&&b[c].attr(a).invert()})}var b=this,c=b.chart;if(b.xAxis)H(c,"resize",a),H(b,"destroy",function(){Z(c,"resize",a)}),a(),b.invertGroups=a},plotGroup:function(a,b,c,d,e){var f=this[a],g=!f;g&&(this[a]=f=this.chart.renderer.g(b).attr({visibility:c,zIndex:d||0.1}).add(e));f[g?"attr":"animate"](this.getPlotBox());return f},getPlotBox:function(){var a=this.chart,b=this.xAxis,c=this.yAxis;if(a.inverted)b=c,c=this.xAxis;return{translateX:b?b.left:a.plotLeft,translateY:c?c.top:
a.plotTop,scaleX:1,scaleY:1}},render:function(){var a=this,b=a.chart,c,d=a.options,e=(c=d.animation)&&!!a.animate&&b.renderer.isSVG&&p(c.duration,500)||0,f=a.visible?"visible":"hidden",g=d.zIndex,h=a.hasRendered,i=b.seriesGroup;c=a.plotGroup("group","series",f,g,i);a.markerGroup=a.plotGroup("markerGroup","markers",f,g,i);e&&a.animate(!0);a.getAttribs();c.inverted=a.isCartesian?b.inverted:!1;a.drawGraph&&(a.drawGraph(),a.applyZones());o(a.points,function(a){a.redraw&&a.redraw()});a.drawDataLabels&&
a.drawDataLabels();a.visible&&a.drawPoints();a.drawTracker&&a.options.enableMouseTracking!==!1&&a.drawTracker();b.inverted&&a.invertGroups();d.clip!==!1&&!a.sharedClipKey&&!h&&c.clip(b.clipRect);e&&a.animate();if(!h)e?a.animationTimeout=setTimeout(function(){a.afterAnimate()},e):a.afterAnimate();a.isDirty=a.isDirtyData=!1;a.hasRendered=!0},redraw:function(){var a=this.chart,b=this.isDirtyData,c=this.isDirty,d=this.group,e=this.xAxis,f=this.yAxis;d&&(a.inverted&&d.attr({width:a.plotWidth,height:a.plotHeight}),
d.animate({translateX:p(e&&e.left,a.plotLeft),translateY:p(f&&f.top,a.plotTop)}));this.translate();this.render();b&&I(this,"updatedData");(c||b)&&delete this.kdTree},kdDimensions:1,kdAxisArray:["clientX","plotY"],searchPoint:function(a,b){var c=this.xAxis,d=this.yAxis,e=this.chart.inverted;return this.searchKDTree({clientX:e?c.len-a.chartY+c.pos:a.chartX-c.pos,plotY:e?d.len-a.chartX+d.pos:a.chartY-d.pos},b)},buildKDTree:function(){function a(b,d,g){var h,i;if(i=b&&b.length)return h=c.kdAxisArray[d%
g],b.sort(function(a,b){return a[h]-b[h]}),i=Math.floor(i/2),{point:b[i],left:a(b.slice(0,i),d+1,g),right:a(b.slice(i+1),d+1,g)}}function b(){var b=lb(c.points,function(a){return a.y!==null});c.kdTree=a(b,d,d)}var c=this,d=c.kdDimensions;delete c.kdTree;c.options.kdSync?b():setTimeout(b)},searchKDTree:function(a,b){function c(a,b,j,k){var l=b.point,m=d.kdAxisArray[j%k],n,p,o=l;p=q(a[e])&&q(l[e])?Math.pow(a[e]-l[e],2):null;n=q(a[f])&&q(l[f])?Math.pow(a[f]-l[f],2):null;n=(p||0)+(n||0);l.dist=q(n)?Math.sqrt(n):
Number.MAX_VALUE;l.distX=q(p)?Math.sqrt(p):Number.MAX_VALUE;m=a[m]-l[m];n=m<0?"left":"right";p=m<0?"right":"left";b[n]&&(n=c(a,b[n],j+1,k),o=n[g]<o[g]?n:l);b[p]&&Math.sqrt(m*m)<o[g]&&(a=c(a,b[p],j+1,k),o=a[g]<o[g]?a:o);return o}var d=this,e=this.kdAxisArray[0],f=this.kdAxisArray[1],g=b?"distX":"dist";this.kdTree||this.buildKDTree();if(this.kdTree)return c(a,this.kdTree,this.kdDimensions,this.kdDimensions)}};Ib.prototype={destroy:function(){Qa(this,this.axis)},render:function(a){var b=this.options,
c=b.format,c=c?Ja(c,this):b.formatter.call(this);this.label?this.label.attr({text:c,visibility:"hidden"}):this.label=this.axis.chart.renderer.text(c,null,null,b.useHTML).css(b.style).attr({align:this.textAlign,rotation:b.rotation,visibility:"hidden"}).add(a)},setOffset:function(a,b){var c=this.axis,d=c.chart,e=d.inverted,f=c.reversed,f=this.isNegative&&!f||!this.isNegative&&f,g=c.translate(c.usePercentage?100:this.total,0,0,0,1),c=c.translate(0),c=O(g-c),h=d.xAxis[0].translate(this.x)+a,i=d.plotHeight,
f={x:e?f?g:g-c:h,y:e?i-h-b:f?i-g-c:i-g,width:e?c:b,height:e?b:c};if(e=this.label)e.align(this.alignOptions,null,f),f=e.alignAttr,e[this.options.crop===!1||d.isInsidePlot(f.x,f.y)?"show":"hide"](!0)}};va.prototype.buildStacks=function(){var a=this.series,b=p(this.options.reversedStacks,!0),c=a.length;if(!this.isXAxis){for(this.usePercentage=!1;c--;)a[b?c:a.length-c-1].setStackedPoints();if(this.usePercentage)for(c=0;c<a.length;c++)a[c].setPercentStacks()}};va.prototype.renderStackTotals=function(){var a=
this.chart,b=a.renderer,c=this.stacks,d,e,f=this.stackTotalGroup;if(!f)this.stackTotalGroup=f=b.g("stack-labels").attr({visibility:"visible",zIndex:6}).add();f.translate(a.plotLeft,a.plotTop);for(d in c)for(e in a=c[d],a)a[e].render(f)};R.prototype.setStackedPoints=function(){if(this.options.stacking&&!(this.visible!==!0&&this.chart.options.chart.ignoreHiddenSeries!==!1)){var a=this.processedXData,b=this.processedYData,c=[],d=b.length,e=this.options,f=e.threshold,g=e.startFromThreshold?f:0,h=e.stack,
e=e.stacking,i=this.stackKey,j="-"+i,k=this.negStacks,l=this.yAxis,m=l.stacks,n=l.oldStacks,o,s,q,r,t,w;for(r=0;r<d;r++){t=a[r];w=b[r];q=this.index+","+r;s=(o=k&&w<(g?0:f))?j:i;m[s]||(m[s]={});if(!m[s][t])n[s]&&n[s][t]?(m[s][t]=n[s][t],m[s][t].total=null):m[s][t]=new Ib(l,l.options.stackLabels,o,t,h);s=m[s][t];s.points[q]=[p(s.cum,g)];e==="percent"?(o=o?i:j,k&&m[o]&&m[o][t]?(o=m[o][t],s.total=o.total=u(o.total,s.total)+O(w)||0):s.total=ea(s.total+(O(w)||0))):s.total=ea(s.total+(w||0));s.cum=p(s.cum,
g)+(w||0);s.points[q].push(s.cum);c[r]=s.cum}if(e==="percent")l.usePercentage=!0;this.stackedYData=c;l.oldStacks={}}};R.prototype.setPercentStacks=function(){var a=this,b=a.stackKey,c=a.yAxis.stacks,d=a.processedXData;o([b,"-"+b],function(b){var e;for(var f=d.length,g,h;f--;)if(g=d[f],e=(h=c[b]&&c[b][g])&&h.points[a.index+","+f],g=e)h=h.total?100/h.total:0,g[0]=ea(g[0]*h),g[1]=ea(g[1]*h),a.stackedYData[f]=g[1]})};x(F.prototype,{addSeries:function(a,b,c){var d,e=this;a&&(b=p(b,!0),I(e,"addSeries",
{options:a},function(){d=e.initSeries(a);e.isDirtyLegend=!0;e.linkSeries();b&&e.redraw(c)}));return d},addAxis:function(a,b,c,d){var e=b?"xAxis":"yAxis",f=this.options;new va(this,z(a,{index:this[e].length,isX:b}));f[e]=sa(f[e]||{});f[e].push(a);p(c,!0)&&this.redraw(d)},showLoading:function(a){var b=this,c=b.options,d=b.loadingDiv,e=c.loading,f=function(){d&&L(d,{left:b.plotLeft+"px",top:b.plotTop+"px",width:b.plotWidth+"px",height:b.plotHeight+"px"})};if(!d)b.loadingDiv=d=$(Ka,{className:"highcharts-loading"},
x(e.style,{zIndex:10,display:P}),b.container),b.loadingSpan=$("span",null,e.labelStyle,d),H(b,"redraw",f);b.loadingSpan.innerHTML=a||c.lang.loading;if(!b.loadingShown)L(d,{opacity:0,display:""}),mb(d,{opacity:e.style.opacity},{duration:e.showDuration||0}),b.loadingShown=!0;f()},hideLoading:function(){var a=this.options,b=this.loadingDiv;b&&mb(b,{opacity:0},{duration:a.loading.hideDuration||100,complete:function(){L(b,{display:P})}});this.loadingShown=!1}});x(Ga.prototype,{update:function(a,b,c,d){function e(){f.applyOptions(a);
if(f.y===null&&h)f.graphic=h.destroy();if(da(a)&&!Ha(a))f.redraw=function(){if(h)if(a&&a.marker&&a.marker.symbol)f.graphic=h.destroy();else h.attr(f.pointAttr[f.state||""])[f.visible===!1?"hide":"show"]();if(a&&a.dataLabels&&f.dataLabel)f.dataLabel=f.dataLabel.destroy();f.redraw=null};i=f.index;g.updateParallelArrays(f,i);if(l&&f.name)l[f.x]=f.name;k.data[i]=f.options;g.isDirty=g.isDirtyData=!0;if(!g.fixedBox&&g.hasCartesianSeries)j.isDirtyBox=!0;if(k.legendType==="point")j.isDirtyLegend=!0;b&&j.redraw(c)}
var f=this,g=f.series,h=f.graphic,i,j=g.chart,k=g.options,l=g.xAxis&&g.xAxis.names,b=p(b,!0);d===!1?e():f.firePointEvent("update",{options:a},e)},remove:function(a,b){this.series.removePoint(Ma(this,this.series.data),a,b)}});x(R.prototype,{addPoint:function(a,b,c,d){var e=this,f=e.options,g=e.data,h=e.graph,i=e.area,j=e.chart,k=e.xAxis&&e.xAxis.names,l=h&&h.shift||0,m=["graph","area"],h=f.data,n,v=e.xData;Sa(d,j);if(c){for(d=e.zones.length;d--;)m.push("zoneGraph"+d,"zoneArea"+d);o(m,function(a){if(e[a])e[a].shift=
l+1})}if(i)i.isArea=!0;b=p(b,!0);i={series:e};e.pointClass.prototype.applyOptions.apply(i,[a]);m=i.x;d=v.length;if(e.requireSorting&&m<v[d-1])for(n=!0;d&&v[d-1]>m;)d--;e.updateParallelArrays(i,"splice",d,0,0);e.updateParallelArrays(i,d);if(k&&i.name)k[m]=i.name;h.splice(d,0,a);n&&(e.data.splice(d,0,null),e.processData());f.legendType==="point"&&e.generatePoints();c&&(g[0]&&g[0].remove?g[0].remove(!1):(g.shift(),e.updateParallelArrays(i,"shift"),h.shift()));e.isDirty=!0;e.isDirtyData=!0;b&&(e.getAttribs(),
j.redraw())},removePoint:function(a,b,c){var d=this,e=d.data,f=e[a],g=d.points,h=d.chart,i=function(){e.length===g.length&&g.splice(a,1);e.splice(a,1);d.options.data.splice(a,1);d.updateParallelArrays(f||{series:d},"splice",a,1);f&&f.destroy();d.isDirty=!0;d.isDirtyData=!0;b&&h.redraw()};Sa(c,h);b=p(b,!0);f?f.firePointEvent("remove",null,i):i()},remove:function(a,b){var c=this,d=c.chart,a=p(a,!0);if(!c.isRemoving)c.isRemoving=!0,I(c,"remove",null,function(){c.destroy();d.isDirtyLegend=d.isDirtyBox=
!0;d.linkSeries();a&&d.redraw(b)});c.isRemoving=!1},update:function(a,b){var c=this,d=this.chart,e=this.userOptions,f=this.type,g=M[f].prototype,h=["group","markerGroup","dataLabelsGroup"],i;if(a.type&&a.type!==f||a.zIndex!==void 0)h.length=0;o(h,function(a){h[a]=c[a];delete c[a]});a=z(e,{animation:!1,index:this.index,pointStart:this.xData[0]},{data:this.options.data},a);this.remove(!1);for(i in g)this[i]=y;x(this,M[a.type||f].prototype);o(h,function(a){c[a]=h[a]});this.init(d,a);d.linkSeries();p(b,
!0)&&d.redraw(!1)}});x(va.prototype,{update:function(a,b){var c=this.chart,a=c.options[this.coll][this.options.index]=z(this.userOptions,a);this.destroy(!0);this._addedPlotLB=this.chart._labelPanes=y;this.init(c,x(a,{events:y}));c.isDirtyBox=!0;p(b,!0)&&c.redraw()},remove:function(a){for(var b=this.chart,c=this.coll,d=this.series,e=d.length;e--;)d[e]&&d[e].remove(!1);ja(b.axes,this);ja(b[c],this);b.options[c].splice(this.options.index,1);o(b[c],function(a,b){a.options.index=b});this.destroy();b.isDirtyBox=
!0;p(a,!0)&&b.redraw()},setTitle:function(a,b){this.update({title:a},b)},setCategories:function(a,b){this.update({categories:a},b)}});var xa=ka(R);M.line=xa;ba.area=z(U,{threshold:0});var qa=ka(R,{type:"area",getSegments:function(){var a=this,b=[],c=[],d=[],e=this.xAxis,f=this.yAxis,g=f.stacks[this.stackKey],h={},i,j,k=this.points,l=this.options.connectNulls,m,n;if(this.options.stacking&&!this.cropped){for(m=0;m<k.length;m++)h[k[m].x]=k[m];for(n in g)g[n].total!==null&&d.push(+n);d.sort(function(a,
b){return a-b});o(d,function(b){var d=0,k;if(!l||h[b]&&h[b].y!==null)if(h[b])c.push(h[b]);else{for(m=a.index;m<=f.series.length;m++)if(k=g[b].points[m+","+b]){d=k[1];break}i=e.translate(b);j=f.toPixels(d,!0);c.push({y:null,plotX:i,clientX:i,plotY:j,yBottom:j,onMouseOver:na})}});c.length&&b.push(c)}else R.prototype.getSegments.call(this),b=this.segments;this.segments=b},getSegmentPath:function(a){var b=R.prototype.getSegmentPath.call(this,a),c=[].concat(b),d,e=this.options;d=b.length;var f=this.yAxis.getThreshold(e.threshold),
g;d===3&&c.push("L",b[1],b[2]);if(e.stacking&&!this.closedStacks)for(d=a.length-1;d>=0;d--)g=p(a[d].yBottom,f),d<a.length-1&&e.step&&c.push(a[d+1].plotX,g),c.push(a[d].plotX,g);else this.closeSegment(c,a,f);this.areaPath=this.areaPath.concat(c);return b},closeSegment:function(a,b,c){a.push("L",b[b.length-1].plotX,c,"L",b[0].plotX,c)},drawGraph:function(){this.areaPath=[];R.prototype.drawGraph.apply(this);var a=this,b=this.areaPath,c=this.options,d=[["area",this.color,c.fillColor]];o(this.zones,function(b,
f){d.push(["zoneArea"+f,b.color||a.color,b.fillColor||c.fillColor])});o(d,function(d){var f=d[0],g=a[f];g?g.animate({d:b}):a[f]=a.chart.renderer.path(b).attr({fill:p(d[2],oa(d[1]).setOpacity(p(c.fillOpacity,0.75)).get()),zIndex:0}).add(a.group)})},drawLegendSymbol:Na.drawRectangle});M.area=qa;ba.spline=z(U);xa=ka(R,{type:"spline",getPointSpline:function(a,b,c){var d=b.plotX,e=b.plotY,f=a[c-1],g=a[c+1],h,i,j,k;if(f&&g){a=f.plotY;j=g.plotX;var g=g.plotY,l;h=(1.5*d+f.plotX)/2.5;i=(1.5*e+a)/2.5;j=(1.5*
d+j)/2.5;k=(1.5*e+g)/2.5;l=(k-i)*(j-d)/(j-h)+e-k;i+=l;k+=l;i>a&&i>e?(i=u(a,e),k=2*e-i):i<a&&i<e&&(i=C(a,e),k=2*e-i);k>g&&k>e?(k=u(g,e),i=2*e-k):k<g&&k<e&&(k=C(g,e),i=2*e-k);b.rightContX=j;b.rightContY=k}c?(b=["C",f.rightContX||f.plotX,f.rightContY||f.plotY,h||d,i||e,d,e],f.rightContX=f.rightContY=null):b=["M",d,e];return b}});M.spline=xa;ba.areaspline=z(ba.area);qa=qa.prototype;xa=ka(xa,{type:"areaspline",closedStacks:!0,getSegmentPath:qa.getSegmentPath,closeSegment:qa.closeSegment,drawGraph:qa.drawGraph,
drawLegendSymbol:Na.drawRectangle});M.areaspline=xa;ba.column=z(U,{borderColor:"#FFFFFF",borderRadius:0,groupPadding:0.2,marker:null,pointPadding:0.1,minPointLength:0,cropThreshold:50,pointRange:null,states:{hover:{brightness:0.1,shadow:!1,halo:!1},select:{color:"#C0C0C0",borderColor:"#000000",shadow:!1}},dataLabels:{align:null,verticalAlign:null,y:null},startFromThreshold:!0,stickyTracking:!1,tooltip:{distance:6},threshold:0});xa=ka(R,{type:"column",pointAttrToOptions:{stroke:"borderColor",fill:"color",
r:"borderRadius"},cropShoulder:0,directTouch:!0,trackerGroups:["group","dataLabelsGroup"],negStacks:!0,init:function(){R.prototype.init.apply(this,arguments);var a=this,b=a.chart;b.hasRendered&&o(b.series,function(b){if(b.type===a.type)b.isDirty=!0})},getColumnMetrics:function(){var a=this,b=a.options,c=a.xAxis,d=a.yAxis,e=c.reversed,f,g={},h,i=0;b.grouping===!1?i=1:o(a.chart.series,function(b){var c=b.options,e=b.yAxis;if(b.type===a.type&&b.visible&&d.len===e.len&&d.pos===e.pos)c.stacking?(f=b.stackKey,
g[f]===y&&(g[f]=i++),h=g[f]):c.grouping!==!1&&(h=i++),b.columnIndex=h});var c=C(O(c.transA)*(c.ordinalSlope||b.pointRange||c.closestPointRange||c.tickInterval||1),c.len),j=c*b.groupPadding,k=(c-2*j)/i,l=b.pointWidth,b=q(l)?(k-l)/2:k*b.pointPadding,l=p(l,k-2*b);return a.columnMetrics={width:l,offset:b+(j+((e?i-(a.columnIndex||0):a.columnIndex)||0)*k-c/2)*(e?-1:1)}},translate:function(){var a=this,b=a.chart,c=a.options,d=a.borderWidth=p(c.borderWidth,a.closestPointRange*a.xAxis.transA<2?0:1),e=a.yAxis,
f=a.translatedThreshold=e.getThreshold(c.threshold),g=p(c.minPointLength,5),h=a.getColumnMetrics(),i=h.width,j=a.barW=u(i,1+2*d),k=a.pointXOffset=h.offset,l=-(d%2?0.5:0),m=d%2?0.5:1;b.inverted&&(f-=0.5,b.renderer.isVML&&(m+=1));c.pointPadding&&(j=ta(j));R.prototype.translate.apply(a);o(a.points,function(c){var d=p(c.yBottom,f),h=999+O(d),h=C(u(-h,c.plotY),e.len+h),o=c.plotX+k,q=j,t=C(h,d),w,x;w=u(h,d)-t;O(w)<g&&g&&(w=g,x=!e.reversed&&!c.negative||e.reversed&&c.negative,t=r(O(t-f)>g?d-g:f-(x?g:0)));
c.barX=o;c.pointWidth=i;q=r(o+q)+l;o=r(o)+l;q-=o;d=O(t)<0.5;w=C(r(t+w)+m,9E4);t=r(t)+m;w-=t;d&&(t-=1,w+=1);c.tooltipPos=b.inverted?[e.len+e.pos-b.plotLeft-h,a.xAxis.len-o-q/2,w]:[o+q/2,h+e.pos-b.plotTop,w];c.shapeType="rect";c.shapeArgs={x:o,y:t,width:q,height:w}})},getSymbol:na,drawLegendSymbol:Na.drawRectangle,drawGraph:na,drawPoints:function(){var a=this,b=this.chart,c=a.options,d=b.renderer,e=c.animationLimit||250,f,g;o(a.points,function(h){var i=h.plotY,j=h.graphic;if(i!==y&&!isNaN(i)&&h.y!==
null)f=h.shapeArgs,i=q(a.borderWidth)?{"stroke-width":a.borderWidth}:{},g=h.pointAttr[h.selected?"select":""]||a.pointAttr[""],j?(db(j),j.attr(i)[b.pointCount<e?"animate":"attr"](z(f))):h.graphic=d[h.shapeType](f).attr(i).attr(g).add(a.group).shadow(c.shadow,null,c.stacking&&!c.borderRadius);else if(j)h.graphic=j.destroy()})},animate:function(a){var b=this.yAxis,c=this.options,d=this.chart.inverted,e={};if(ca)a?(e.scaleY=0.001,a=C(b.pos+b.len,u(b.pos,b.toPixels(c.threshold))),d?e.translateX=a-b.len:
e.translateY=a,this.group.attr(e)):(e.scaleY=1,e[d?"translateX":"translateY"]=b.pos,this.group.animate(e,this.options.animation),this.animate=null)},remove:function(){var a=this,b=a.chart;b.hasRendered&&o(b.series,function(b){if(b.type===a.type)b.isDirty=!0});R.prototype.remove.apply(a,arguments)}});M.column=xa;ba.bar=z(ba.column);qa=ka(xa,{type:"bar",inverted:!0});M.bar=qa;ba.scatter=z(U,{lineWidth:0,marker:{enabled:!0},tooltip:{headerFormat:'<span style="color:{series.color}">\u25CF</span> <span style="font-size: 10px;"> {series.name}</span><br/>',
pointFormat:"x: <b>{point.x}</b><br/>y: <b>{point.y}</b><br/>"}});qa=ka(R,{type:"scatter",sorted:!1,requireSorting:!1,noSharedTooltip:!0,trackerGroups:["group","markerGroup","dataLabelsGroup"],takeOrdinalPosition:!1,kdDimensions:2,drawGraph:function(){this.options.lineWidth&&R.prototype.drawGraph.call(this)}});M.scatter=qa;ba.pie=z(U,{borderColor:"#FFFFFF",borderWidth:1,center:[null,null],clip:!1,colorByPoint:!0,dataLabels:{distance:30,enabled:!0,formatter:function(){return this.point.name},x:0},
ignoreHiddenPoint:!0,legendType:"point",marker:null,size:null,showInLegend:!1,slicedOffset:10,states:{hover:{brightness:0.1,shadow:!1}},stickyTracking:!1,tooltip:{followPointer:!0}});U={type:"pie",isCartesian:!1,pointClass:ka(Ga,{init:function(){Ga.prototype.init.apply(this,arguments);var a=this,b;x(a,{visible:a.visible!==!1,name:p(a.name,"Slice")});b=function(b){a.slice(b.type==="select")};H(a,"select",b);H(a,"unselect",b);return a},setVisible:function(a,b){var c=this,d=c.series,e=d.chart,f=d.options.ignoreHiddenPoint,
b=p(b,f);if(a!==c.visible){c.visible=c.options.visible=a=a===y?!c.visible:a;d.options.data[Ma(c,d.data)]=c.options;o(["graphic","dataLabel","connector","shadowGroup"],function(b){if(c[b])c[b][a?"show":"hide"](!0)});c.legendItem&&e.legend.colorizeItem(c,a);!a&&c.state==="hover"&&c.setState("");if(f)d.isDirty=!0;b&&e.redraw()}},slice:function(a,b,c){var d=this.series;Sa(c,d.chart);p(b,!0);this.sliced=this.options.sliced=a=q(a)?a:!this.sliced;d.options.data[Ma(this,d.data)]=this.options;a=a?this.slicedTranslation:
{translateX:0,translateY:0};this.graphic.animate(a);this.shadowGroup&&this.shadowGroup.animate(a)},haloPath:function(a){var b=this.shapeArgs,c=this.series.chart;return this.sliced||!this.visible?[]:this.series.chart.renderer.symbols.arc(c.plotLeft+b.x,c.plotTop+b.y,b.r+a,b.r+a,{innerR:this.shapeArgs.r,start:b.start,end:b.end})}}),requireSorting:!1,directTouch:!0,noSharedTooltip:!0,trackerGroups:["group","dataLabelsGroup"],axisTypes:[],pointAttrToOptions:{stroke:"borderColor","stroke-width":"borderWidth",
fill:"color"},getColor:na,animate:function(a){var b=this,c=b.points,d=b.startAngleRad;if(!a)o(c,function(a){var c=a.graphic,g=a.shapeArgs;c&&(c.attr({r:a.startR||b.center[3]/2,start:d,end:d}),c.animate({r:g.r,start:g.start,end:g.end},b.options.animation))}),b.animate=null},setData:function(a,b,c,d){R.prototype.setData.call(this,a,!1,c,d);this.processData();this.generatePoints();p(b,!0)&&this.chart.redraw(c)},updateTotals:function(){var a,b=0,c=this.points,d=c.length,e,f=this.options.ignoreHiddenPoint;
for(a=0;a<d;a++)e=c[a],b+=f&&!e.visible?0:e.y;this.total=b;for(a=0;a<d;a++)e=c[a],e.percentage=b>0&&(e.visible||!f)?e.y/b*100:0,e.total=b},generatePoints:function(){R.prototype.generatePoints.call(this);this.updateTotals()},translate:function(a){this.generatePoints();var b=0,c=this.options,d=c.slicedOffset,e=d+c.borderWidth,f,g,h,i=c.startAngle||0,j=this.startAngleRad=ma/180*(i-90),i=(this.endAngleRad=ma/180*(p(c.endAngle,i+360)-90))-j,k=this.points,l=c.dataLabels.distance,c=c.ignoreHiddenPoint,m,
n=k.length,o;if(!a)this.center=a=this.getCenter();this.getX=function(b,c){h=W.asin(C((b-a[1])/(a[2]/2+l),1));return a[0]+(c?-1:1)*X(h)*(a[2]/2+l)};for(m=0;m<n;m++){o=k[m];f=j+b*i;if(!c||o.visible)b+=o.percentage/100;g=j+b*i;o.shapeType="arc";o.shapeArgs={x:a[0],y:a[1],r:a[2]/2,innerR:a[3]/2,start:r(f*1E3)/1E3,end:r(g*1E3)/1E3};h=(g+f)/2;h>1.5*ma?h-=2*ma:h<-ma/2&&(h+=2*ma);o.slicedTranslation={translateX:r(X(h)*d),translateY:r(aa(h)*d)};f=X(h)*a[2]/2;g=aa(h)*a[2]/2;o.tooltipPos=[a[0]+f*0.7,a[1]+g*
0.7];o.half=h<-ma/2||h>ma/2?1:0;o.angle=h;e=C(e,l/2);o.labelPos=[a[0]+f+X(h)*l,a[1]+g+aa(h)*l,a[0]+f+X(h)*e,a[1]+g+aa(h)*e,a[0]+f,a[1]+g,l<0?"center":o.half?"right":"left",h]}},drawGraph:null,drawPoints:function(){var a=this,b=a.chart.renderer,c,d,e=a.options.shadow,f,g,h;if(e&&!a.shadowGroup)a.shadowGroup=b.g("shadow").add(a.group);o(a.points,function(i){d=i.graphic;g=i.shapeArgs;f=i.shadowGroup;if(e&&!f)f=i.shadowGroup=b.g("shadow").add(a.shadowGroup);c=i.sliced?i.slicedTranslation:{translateX:0,
translateY:0};f&&f.attr(c);if(d)d.animate(x(g,c));else{h={"stroke-linejoin":"round"};if(!i.visible)h.visibility="hidden";i.graphic=d=b[i.shapeType](g).setRadialReference(a.center).attr(i.pointAttr[i.selected?"select":""]).attr(h).attr(c).add(a.group).shadow(e,f)}})},searchPoint:na,sortByAngle:function(a,b){a.sort(function(a,d){return a.angle!==void 0&&(d.angle-a.angle)*b})},drawLegendSymbol:Na.drawRectangle,getCenter:Yb.getCenter,getSymbol:na};U=ka(R,U);M.pie=U;R.prototype.drawDataLabels=function(){var a=
this,b=a.options,c=b.cursor,d=b.dataLabels,e=a.points,f,g,h=a.hasRendered||0,i,j,k=a.chart.renderer;if(d.enabled||a._hasPointLabels)a.dlProcessOptions&&a.dlProcessOptions(d),j=a.plotGroup("dataLabelsGroup","data-labels",d.defer?"hidden":"visible",d.zIndex||6),p(d.defer,!0)&&(j.attr({opacity:+h}),h||H(a,"afterAnimate",function(){a.visible&&j.show();j[b.animation?"animate":"attr"]({opacity:1},{duration:200})})),g=d,o(e,function(e){var h,n=e.dataLabel,o,s,r=e.connector,u=!0,t,w={};f=e.dlOptions||e.options&&
e.options.dataLabels;h=p(f&&f.enabled,g.enabled);if(n&&!h)e.dataLabel=n.destroy();else if(h){d=z(g,f);t=d.style;h=d.rotation;o=e.getLabelConfig();i=d.format?Ja(d.format,o):d.formatter.call(o,d);t.color=p(d.color,t.color,a.color,"black");if(n)if(q(i))n.attr({text:i}),u=!1;else{if(e.dataLabel=n=n.destroy(),r)e.connector=r.destroy()}else if(q(i)){n={fill:d.backgroundColor,stroke:d.borderColor,"stroke-width":d.borderWidth,r:d.borderRadius||0,rotation:h,padding:d.padding,zIndex:1};if(t.color==="contrast")w.color=
d.inside||d.distance<0||b.stacking?k.getContrast(e.color||a.color):"#000000";if(c)w.cursor=c;for(s in n)n[s]===y&&delete n[s];n=e.dataLabel=k[h?"text":"label"](i,0,-999,d.shape,null,null,d.useHTML).attr(n).css(x(t,w)).add(j).shadow(d.shadow)}n&&a.alignDataLabel(e,n,d,null,u)}})};R.prototype.alignDataLabel=function(a,b,c,d,e){var f=this.chart,g=f.inverted,h=p(a.plotX,-999),i=p(a.plotY,-999),j=b.getBBox(),k=f.renderer.fontMetrics(c.style.fontSize).b,l=this.visible&&(a.series.forceDL||f.isInsidePlot(h,
r(i),g)||d&&f.isInsidePlot(h,g?d.x+1:d.y+d.height-1,g));if(l)d=x({x:g?f.plotWidth-i:h,y:r(g?f.plotHeight-h:i),width:0,height:0},d),x(c,{width:j.width,height:j.height}),c.rotation?(a=f.renderer.rotCorr(k,c.rotation),b[e?"attr":"animate"]({x:d.x+c.x+d.width/2+a.x,y:d.y+c.y+d.height/2}).attr({align:c.align})):(b.align(c,null,d),g=b.alignAttr,p(c.overflow,"justify")==="justify"?this.justifyDataLabel(b,c,g,j,d,e):p(c.crop,!0)&&(l=f.isInsidePlot(g.x,g.y)&&f.isInsidePlot(g.x+j.width,g.y+j.height)),c.shape&&
b.attr({anchorX:a.plotX,anchorY:a.plotY}));if(!l)b.attr({y:-999}),b.placed=!1};R.prototype.justifyDataLabel=function(a,b,c,d,e,f){var g=this.chart,h=b.align,i=b.verticalAlign,j,k,l=a.box?0:a.padding||0;j=c.x+l;if(j<0)h==="right"?b.align="left":b.x=-j,k=!0;j=c.x+d.width-l;if(j>g.plotWidth)h==="left"?b.align="right":b.x=g.plotWidth-j,k=!0;j=c.y+l;if(j<0)i==="bottom"?b.verticalAlign="top":b.y=-j,k=!0;j=c.y+d.height-l;if(j>g.plotHeight)i==="top"?b.verticalAlign="bottom":b.y=g.plotHeight-j,k=!0;if(k)a.placed=
!f,a.align(b,null,e)};if(M.pie)M.pie.prototype.drawDataLabels=function(){var a=this,b=a.data,c,d=a.chart,e=a.options.dataLabels,f=p(e.connectorPadding,10),g=p(e.connectorWidth,1),h=d.plotWidth,i=d.plotHeight,j,k,l=p(e.softConnector,!0),m=e.distance,n=a.center,q=n[2]/2,s=n[1],x=m>0,y,t,w,z=[[],[]],B,A,D,F,G,E=[0,0,0,0],L=function(a,b){return b.y-a.y};if(a.visible&&(e.enabled||a._hasPointLabels)){R.prototype.drawDataLabels.apply(a);o(b,function(a){a.dataLabel&&a.visible&&z[a.half].push(a)});for(F=2;F--;){var I=
[],M=[],H=z[F],K=H.length,J;if(K){a.sortByAngle(H,F-0.5);for(G=b=0;!b&&H[G];)b=H[G]&&H[G].dataLabel&&(H[G].dataLabel.getBBox().height||21),G++;if(m>0){t=C(s+q+m,d.plotHeight);for(G=u(0,s-q-m);G<=t;G+=b)I.push(G);t=I.length;if(K>t){c=[].concat(H);c.sort(L);for(G=K;G--;)c[G].rank=G;for(G=K;G--;)H[G].rank>=t&&H.splice(G,1);K=H.length}for(G=0;G<K;G++){c=H[G];w=c.labelPos;c=9999;var Q,P;for(P=0;P<t;P++)Q=O(I[P]-w[1]),Q<c&&(c=Q,J=P);if(J<G&&I[G]!==null)J=G;else for(t<K-G+J&&I[G]!==null&&(J=t-K+G);I[J]===
null;)J++;M.push({i:J,y:I[J]});I[J]=null}M.sort(L)}for(G=0;G<K;G++){c=H[G];w=c.labelPos;y=c.dataLabel;D=c.visible===!1?"hidden":"inherit";c=w[1];if(m>0){if(t=M.pop(),J=t.i,A=t.y,c>A&&I[J+1]!==null||c<A&&I[J-1]!==null)A=C(u(0,c),d.plotHeight)}else A=c;B=e.justify?n[0]+(F?-1:1)*(q+m):a.getX(A===s-q-m||A===s+q+m?c:A,F);y._attr={visibility:D,align:w[6]};y._pos={x:B+e.x+({left:f,right:-f}[w[6]]||0),y:A+e.y-10};y.connX=B;y.connY=A;if(this.options.size===null)t=y.width,B-t<f?E[3]=u(r(t-B+f),E[3]):B+t>h-
f&&(E[1]=u(r(B+t-h+f),E[1])),A-b/2<0?E[0]=u(r(-A+b/2),E[0]):A+b/2>i&&(E[2]=u(r(A+b/2-i),E[2]))}}}if(Fa(E)===0||this.verifyDataLabelOverflow(E))this.placeDataLabels(),x&&g&&o(this.points,function(b){j=b.connector;w=b.labelPos;if((y=b.dataLabel)&&y._pos&&b.visible)D=y._attr.visibility,B=y.connX,A=y.connY,k=l?["M",B+(w[6]==="left"?5:-5),A,"C",B,A,2*w[2]-w[4],2*w[3]-w[5],w[2],w[3],"L",w[4],w[5]]:["M",B+(w[6]==="left"?5:-5),A,"L",w[2],w[3],"L",w[4],w[5]],j?(j.animate({d:k}),j.attr("visibility",D)):b.connector=
j=a.chart.renderer.path(k).attr({"stroke-width":g,stroke:e.connectorColor||b.color||"#606060",visibility:D}).add(a.dataLabelsGroup);else if(j)b.connector=j.destroy()})}},M.pie.prototype.placeDataLabels=function(){o(this.points,function(a){var b=a.dataLabel;if(b&&a.visible)(a=b._pos)?(b.attr(b._attr),b[b.moved?"animate":"attr"](a),b.moved=!0):b&&b.attr({y:-999})})},M.pie.prototype.alignDataLabel=na,M.pie.prototype.verifyDataLabelOverflow=function(a){var b=this.center,c=this.options,d=c.center,e=c.minSize||
80,f=e,g;d[0]!==null?f=u(b[2]-u(a[1],a[3]),e):(f=u(b[2]-a[1]-a[3],e),b[0]+=(a[3]-a[1])/2);d[1]!==null?f=u(C(f,b[2]-u(a[0],a[2])),e):(f=u(C(f,b[2]-a[0]-a[2]),e),b[1]+=(a[0]-a[2])/2);f<b[2]?(b[2]=f,b[3]=/%$/.test(c.innerSize||0)?f*parseFloat(c.innerSize||0)/100:parseFloat(c.innerSize||0),this.translate(b),o(this.points,function(a){if(a.dataLabel)a.dataLabel._pos=null}),this.drawDataLabels&&this.drawDataLabels()):g=!0;return g};if(M.column)M.column.prototype.alignDataLabel=function(a,b,c,d,e){var f=
this.chart.inverted,g=a.series,h=a.dlBox||a.shapeArgs,i=p(a.below,a.plotY>p(this.translatedThreshold,g.yAxis.len)),j=p(c.inside,!!this.options.stacking);if(h&&(d=z(h),f&&(d={x:g.yAxis.len-d.y-d.height,y:g.xAxis.len-d.x-d.width,width:d.height,height:d.width}),!j))f?(d.x+=i?0:d.width,d.width=0):(d.y+=i?d.height:0,d.height=0);c.align=p(c.align,!f||j?"center":i?"right":"left");c.verticalAlign=p(c.verticalAlign,f||j?"middle":i?"top":"bottom");R.prototype.alignDataLabel.call(this,a,b,c,d,e)};(function(a){var b=
a.Chart,c=a.each,d=a.pick,e=HighchartsAdapter.addEvent;b.prototype.callbacks.push(function(a){function b(){var e=[];c(a.series,function(a){var b=a.options.dataLabels;(b.enabled||a._hasPointLabels)&&!b.allowOverlap&&a.visible&&c(a.points,function(a){if(a.dataLabel)a.dataLabel.labelrank=d(a.labelrank,a.shapeArgs&&a.shapeArgs.height),e.push(a.dataLabel)})});a.hideOverlappingLabels(e)}b();e(a,"redraw",b)});b.prototype.hideOverlappingLabels=function(a){var b=a.length,c,d,e,k;for(d=0;d<b;d++)if(c=a[d])c.oldOpacity=
c.opacity,c.newOpacity=1;a.sort(function(a,b){return b.labelrank-a.labelrank});for(d=0;d<b;d++){e=a[d];for(c=d+1;c<b;++c)if(k=a[c],e&&k&&e.placed&&k.placed&&e.newOpacity!==0&&k.newOpacity!==0&&!(k.alignAttr.x>e.alignAttr.x+e.width||k.alignAttr.x+k.width<e.alignAttr.x||k.alignAttr.y>e.alignAttr.y+e.height||k.alignAttr.y+k.height<e.alignAttr.y))(e.labelrank<k.labelrank?e:k).newOpacity=0}for(d=0;d<b;d++)if(c=a[d]){if(c.oldOpacity!==c.newOpacity&&c.placed)c.alignAttr.opacity=c.newOpacity,c[c.isOld&&c.newOpacity?
"animate":"attr"](c.alignAttr);c.isOld=!0}}})(A);U=A.TrackerMixin={drawTrackerPoint:function(){var a=this,b=a.chart,c=b.pointer,d=a.options.cursor,e=d&&{cursor:d},f=function(a){for(var c=a.target,d;c&&!d;)d=c.point,c=c.parentNode;if(d!==y&&d!==b.hoverPoint)d.onMouseOver(a)};o(a.points,function(a){if(a.graphic)a.graphic.element.point=a;if(a.dataLabel)a.dataLabel.element.point=a});if(!a._hasTracking)o(a.trackerGroups,function(b){if(a[b]&&(a[b].addClass("highcharts-tracker").on("mouseover",f).on("mouseout",
function(a){c.onTrackerMouseOut(a)}).css(e),ab))a[b].on("touchstart",f)}),a._hasTracking=!0},drawTrackerGraph:function(){var a=this,b=a.options,c=b.trackByArea,d=[].concat(c?a.areaPath:a.graphPath),e=d.length,f=a.chart,g=f.pointer,h=f.renderer,i=f.options.tooltip.snap,j=a.tracker,k=b.cursor,l=k&&{cursor:k},k=a.singlePoints,m,n=function(){if(f.hoverSeries!==a)a.onMouseOver()},p="rgba(192,192,192,"+(ca?1.0E-4:0.002)+")";if(e&&!c)for(m=e+1;m--;)d[m]==="M"&&d.splice(m+1,0,d[m+1]-i,d[m+2],"L"),(m&&d[m]===
"M"||m===e)&&d.splice(m,0,"L",d[m-2]+i,d[m-1]);for(m=0;m<k.length;m++)e=k[m],d.push("M",e.plotX-i,e.plotY,"L",e.plotX+i,e.plotY);j?j.attr({d:d}):(a.tracker=h.path(d).attr({"stroke-linejoin":"round",visibility:a.visible?"visible":"hidden",stroke:p,fill:c?p:P,"stroke-width":b.lineWidth+(c?0:2*i),zIndex:2}).add(a.group),o([a.tracker,a.markerGroup],function(a){a.addClass("highcharts-tracker").on("mouseover",n).on("mouseout",function(a){g.onTrackerMouseOut(a)}).css(l);if(ab)a.on("touchstart",n)}))}};if(M.column)xa.prototype.drawTracker=
U.drawTrackerPoint;if(M.pie)M.pie.prototype.drawTracker=U.drawTrackerPoint;if(M.scatter)qa.prototype.drawTracker=U.drawTrackerPoint;x(nb.prototype,{setItemEvents:function(a,b,c,d,e){var f=this;(c?b:a.legendGroup).on("mouseover",function(){a.setState("hover");b.css(f.options.itemHoverStyle)}).on("mouseout",function(){b.css(a.visible?d:e);a.setState()}).on("click",function(b){var c=function(){a.setVisible()},b={browserEvent:b};a.firePointEvent?a.firePointEvent("legendItemClick",b,c):I(a,"legendItemClick",
b,c)})},createCheckboxForItem:function(a){a.checkbox=$("input",{type:"checkbox",checked:a.selected,defaultChecked:a.selected},this.options.itemCheckboxStyle,this.chart.container);H(a.checkbox,"click",function(b){I(a.series||a,"checkboxClick",{checked:b.target.checked,item:a},function(){a.select()})})}});T.legend.itemStyle.cursor="pointer";x(F.prototype,{showResetZoom:function(){var a=this,b=T.lang,c=a.options.chart.resetZoomButton,d=c.theme,e=d.states,f=c.relativeTo==="chart"?null:"plotBox";this.resetZoomButton=
a.renderer.button(b.resetZoom,null,null,function(){a.zoomOut()},d,e&&e.hover).attr({align:c.position.align,title:b.resetZoomTitle}).add().align(c.position,!1,f)},zoomOut:function(){var a=this;I(a,"selection",{resetSelection:!0},function(){a.zoom()})},zoom:function(a){var b,c=this.pointer,d=!1,e;!a||a.resetSelection?o(this.axes,function(a){b=a.zoom()}):o(a.xAxis.concat(a.yAxis),function(a){var e=a.axis,h=e.isXAxis;if(c[h?"zoomX":"zoomY"]||c[h?"pinchX":"pinchY"])b=e.zoom(a.min,a.max),e.displayBtn&&
(d=!0)});e=this.resetZoomButton;if(d&&!e)this.showResetZoom();else if(!d&&da(e))this.resetZoomButton=e.destroy();b&&this.redraw(p(this.options.chart.animation,a&&a.animation,this.pointCount<100))},pan:function(a,b){var c=this,d=c.hoverPoints,e;d&&o(d,function(a){a.setState()});o(b==="xy"?[1,0]:[1],function(b){var d=a[b?"chartX":"chartY"],h=c[b?"xAxis":"yAxis"][0],i=c[b?"mouseDownX":"mouseDownY"],j=(h.pointRange||0)/2,k=h.getExtremes(),l=h.toValue(i-d,!0)+j,j=h.toValue(i+c[b?"plotWidth":"plotHeight"]-
d,!0)-j,i=i>d;if(h.series.length&&(i||l>C(k.dataMin,k.min))&&(!i||j<u(k.dataMax,k.max)))h.setExtremes(l,j,!1,!1,{trigger:"pan"}),e=!0;c[b?"mouseDownX":"mouseDownY"]=d});e&&c.redraw(!1);L(c.container,{cursor:"move"})}});x(Ga.prototype,{select:function(a,b){var c=this,d=c.series,e=d.chart,a=p(a,!c.selected);c.firePointEvent(a?"select":"unselect",{accumulate:b},function(){c.selected=c.options.selected=a;d.options.data[Ma(c,d.data)]=c.options;c.setState(a&&"select");b||o(e.getSelectedPoints(),function(a){if(a.selected&&
a!==c)a.selected=a.options.selected=!1,d.options.data[Ma(a,d.data)]=a.options,a.setState(""),a.firePointEvent("unselect")})})},onMouseOver:function(a){var b=this.series,c=b.chart,d=c.tooltip,e=c.hoverPoint;if(c.hoverSeries!==b)b.onMouseOver();if(e&&e!==this)e.onMouseOut();if(this.series)this.firePointEvent("mouseOver"),d&&(!d.shared||b.noSharedTooltip)&&d.refresh(this,a),this.setState("hover"),c.hoverPoint=this},onMouseOut:function(){var a=this.series.chart,b=a.hoverPoints;this.firePointEvent("mouseOut");
if(!b||Ma(this,b)===-1)this.setState(),a.hoverPoint=null},importEvents:function(){if(!this.hasImportedEvents){var a=z(this.series.options.point,this.options).events,b;this.events=a;for(b in a)H(this,b,a[b]);this.hasImportedEvents=!0}},setState:function(a,b){var c=this.plotX,d=this.plotY,e=this.series,f=e.options.states,g=ba[e.type].marker&&e.options.marker,h=g&&!g.enabled,i=g&&g.states[a],j=i&&i.enabled===!1,k=e.stateMarkerGraphic,l=this.marker||{},m=e.chart,n=e.halo,o,a=a||"";o=this.pointAttr[a]||
e.pointAttr[a];if(!(a===this.state&&!b||this.selected&&a!=="select"||f[a]&&f[a].enabled===!1||a&&(j||h&&i.enabled===!1)||a&&l.states&&l.states[a]&&l.states[a].enabled===!1)){if(this.graphic)g=g&&this.graphic.symbolName&&o.r,this.graphic.attr(z(o,g?{x:c-g,y:d-g,width:2*g,height:2*g}:{})),k&&k.hide();else{if(a&&i)if(g=i.radius,l=l.symbol||e.symbol,k&&k.currentSymbol!==l&&(k=k.destroy()),k)k[b?"animate":"attr"]({x:c-g,y:d-g});else if(l)e.stateMarkerGraphic=k=m.renderer.symbol(l,c-g,d-g,2*g,2*g).attr(o).add(e.markerGroup),
k.currentSymbol=l;if(k)k[a&&m.isInsidePlot(c,d,m.inverted)?"show":"hide"](),k.element.point=this}if((c=f[a]&&f[a].halo)&&c.size){if(!n)e.halo=n=m.renderer.path().add(m.seriesGroup);n.attr(x({fill:oa(this.color||e.color).setOpacity(c.opacity).get()},c.attributes))[b?"animate":"attr"]({d:this.haloPath(c.size)})}else n&&n.attr({d:[]});this.state=a}},haloPath:function(a){var b=this.series,c=b.chart,d=b.getPlotBox(),e=c.inverted;return c.renderer.symbols.circle(d.translateX+(e?b.yAxis.len-this.plotY:this.plotX)-
a,d.translateY+(e?b.xAxis.len-this.plotX:this.plotY)-a,a*2,a*2)}});x(R.prototype,{onMouseOver:function(){var a=this.chart,b=a.hoverSeries;if(b&&b!==this)b.onMouseOut();this.options.events.mouseOver&&I(this,"mouseOver");this.setState("hover");a.hoverSeries=this},onMouseOut:function(){var a=this.options,b=this.chart,c=b.tooltip,d=b.hoverPoint;b.hoverSeries=null;if(d)d.onMouseOut();this&&a.events.mouseOut&&I(this,"mouseOut");c&&!a.stickyTracking&&(!c.shared||this.noSharedTooltip)&&c.hide();this.setState()},
setState:function(a){var b=this.options,c=this.graph,d=b.states,e=b.lineWidth,b=0,a=a||"";if(this.state!==a&&(this.state=a,!(d[a]&&d[a].enabled===!1)&&(a&&(e=d[a].lineWidth||e+(d[a].lineWidthPlus||0)),c&&!c.dashstyle))){a={"stroke-width":e};for(c.attr(a);this["zoneGraph"+b];)this["zoneGraph"+b].attr(a),b+=1}},setVisible:function(a,b){var c=this,d=c.chart,e=c.legendItem,f,g=d.options.chart.ignoreHiddenSeries,h=c.visible;f=(c.visible=a=c.userOptions.visible=a===y?!h:a)?"show":"hide";o(["group","dataLabelsGroup",
"markerGroup","tracker"],function(a){if(c[a])c[a][f]()});if(d.hoverSeries===c||(d.hoverPoint&&d.hoverPoint.series)===c)c.onMouseOut();e&&d.legend.colorizeItem(c,a);c.isDirty=!0;c.options.stacking&&o(d.series,function(a){if(a.options.stacking&&a.visible)a.isDirty=!0});o(c.linkedSeries,function(b){b.setVisible(a,!1)});if(g)d.isDirtyBox=!0;b!==!1&&d.redraw();I(c,f)},show:function(){this.setVisible(!0)},hide:function(){this.setVisible(!1)},select:function(a){this.selected=a=a===y?!this.selected:a;if(this.checkbox)this.checkbox.checked=
a;I(this,a?"select":"unselect")},drawTracker:U.drawTrackerGraph});x(A,{Color:oa,Point:Ga,Tick:Ta,Renderer:$a,SVGElement:Q,SVGRenderer:ua,arrayMin:Pa,arrayMax:Fa,charts:Y,dateFormat:Oa,error:la,format:Ja,pathAnim:zb,getOptions:function(){return T},hasBidiBug:Ob,isTouchDevice:Kb,setOptions:function(a){T=z(!0,T,a);Db();return T},addEvent:H,removeEvent:Z,createElement:$,discardElement:Ra,css:L,each:o,map:Ua,merge:z,splat:sa,extendClass:ka,pInt:D,svg:ca,canvas:fa,vml:!ca&&!fa,product:"Highcharts",version:"4.1.7"})})();
/*
Highcharts JS v4.1.7 (2015-06-26)
Exporting module
(c) 2010-2014 Torstein Honsi
License: www.highcharts.com/license
*/
(function(f){var z=f.Chart,s=f.addEvent,A=f.removeEvent,B=HighchartsAdapter.fireEvent,j=f.createElement,p=f.discardElement,u=f.css,l=f.merge,m=f.each,q=f.extend,E=f.splat,F=Math.max,k=document,C=window,G=f.isTouchDevice,H=f.Renderer.prototype.symbols,r=f.getOptions(),x;q(r.lang,{printChart:"Print chart",downloadPNG:"Download PNG image",downloadJPEG:"Download JPEG image",downloadPDF:"Download PDF document",downloadSVG:"Download SVG vector image",contextButtonTitle:"Chart context menu"});r.navigation=
{menuStyle:{border:"1px solid #A0A0A0",background:"#FFFFFF",padding:"5px 0"},menuItemStyle:{padding:"0 10px",background:"none",color:"#303030",fontSize:G?"14px":"11px"},menuItemHoverStyle:{background:"#4572A5",color:"#FFFFFF"},buttonOptions:{symbolFill:"#E0E0E0",symbolSize:14,symbolStroke:"#666",symbolStrokeWidth:3,symbolX:12.5,symbolY:10.5,align:"right",buttonSpacing:3,height:22,theme:{fill:"white",stroke:"none"},verticalAlign:"top",width:24}};r.exporting={type:"image/png",url:"http://export.highcharts.com/",
buttons:{contextButton:{menuClassName:"highcharts-contextmenu",symbol:"menu",_titleKey:"contextButtonTitle",menuItems:[{textKey:"printChart",onclick:function(){this.print()}},{separator:!0},{textKey:"downloadPNG",onclick:function(){this.exportChart()}},{textKey:"downloadJPEG",onclick:function(){this.exportChart({type:"image/jpeg"})}},{textKey:"downloadPDF",onclick:function(){this.exportChart({type:"application/pdf"})}},{textKey:"downloadSVG",onclick:function(){this.exportChart({type:"image/svg+xml"})}}]}}};
f.post=function(b,a,e){var c,b=j("form",l({method:"post",action:b,enctype:"multipart/form-data"},e),{display:"none"},k.body);for(c in a)j("input",{type:"hidden",name:c,value:a[c]},null,b);b.submit();p(b)};q(z.prototype,{sanitizeSVG:function(b){return b.replace(/zIndex="[^"]+"/g,"").replace(/isShadow="[^"]+"/g,"").replace(/symbolName="[^"]+"/g,"").replace(/jQuery[0-9]+="[^"]+"/g,"").replace(/url\([^#]+#/g,"url(#").replace(/<svg /,'<svg xmlns:xlink="http://www.w3.org/1999/xlink" ').replace(/ (NS[0-9]+\:)?href=/g,
" xlink:href=").replace(/\n/," ").replace(/<\/svg>.*?$/,"</svg>").replace(/(fill|stroke)="rgba\(([ 0-9]+,[ 0-9]+,[ 0-9]+),([ 0-9\.]+)\)"/g,'$1="rgb($2)" $1-opacity="$3"').replace(/&nbsp;/g," ").replace(/&shy;/g,"­").replace(/<IMG /g,"<image ").replace(/<(\/?)TITLE>/g,"<$1title>").replace(/height=([^" ]+)/g,'height="$1"').replace(/width=([^" ]+)/g,'width="$1"').replace(/hc-svg-href="([^"]+)">/g,'xlink:href="$1"/>').replace(/ id=([^" >]+)/g,' id="$1"').replace(/class=([^" >]+)/g,'class="$1"').replace(/ transform /g,
" ").replace(/:(path|rect)/g,"$1").replace(/style="([^"]+)"/g,function(a){return a.toLowerCase()})},getSVG:function(b){var a=this,e,c,g,y,h,d=l(a.options,b);if(!k.createElementNS)k.createElementNS=function(a,b){return k.createElement(b)};c=j("div",null,{position:"absolute",top:"-9999em",width:a.chartWidth+"px",height:a.chartHeight+"px"},k.body);g=a.renderTo.style.width;h=a.renderTo.style.height;g=d.exporting.sourceWidth||d.chart.width||/px$/.test(g)&&parseInt(g,10)||600;h=d.exporting.sourceHeight||
d.chart.height||/px$/.test(h)&&parseInt(h,10)||400;q(d.chart,{animation:!1,renderTo:c,forExport:!0,width:g,height:h});d.exporting.enabled=!1;delete d.data;d.series=[];m(a.series,function(a){y=l(a.options,{animation:!1,enableMouseTracking:!1,showCheckbox:!1,visible:a.visible});y.isInternal||d.series.push(y)});b&&m(["xAxis","yAxis"],function(a){m(E(b[a]),function(b,c){d[a][c]=l(d[a][c],b)})});e=new f.Chart(d,a.callback);m(["xAxis","yAxis"],function(b){m(a[b],function(a,d){var c=e[b][d],g=a.getExtremes(),
h=g.userMin,g=g.userMax;c&&(h!==void 0||g!==void 0)&&c.setExtremes(h,g,!0,!1)})});g=e.container.innerHTML;d=null;e.destroy();p(c);g=this.sanitizeSVG(g);return g=g.replace(/(url\(#highcharts-[0-9]+)&quot;/g,"$1").replace(/&quot;/g,"'")},getSVGForExport:function(b,a){var e=this.options.exporting;return this.getSVG(l({chart:{borderRadius:0}},e.chartOptions,a,{exporting:{sourceWidth:b&&b.sourceWidth||e.sourceWidth,sourceHeight:b&&b.sourceHeight||e.sourceHeight}}))},exportChart:function(b,a){var e=this.getSVGForExport(b,
a),b=l(this.options.exporting,b);f.post(b.url,{filename:b.filename||"chart",type:b.type,width:b.width||0,scale:b.scale||2,svg:e},b.formAttributes)},print:function(){var b=this,a=b.container,e=[],c=a.parentNode,g=k.body,f=g.childNodes;if(!b.isPrinting)b.isPrinting=!0,B(b,"beforePrint"),m(f,function(a,b){if(a.nodeType===1)e[b]=a.style.display,a.style.display="none"}),g.appendChild(a),C.focus(),C.print(),setTimeout(function(){c.appendChild(a);m(f,function(a,b){if(a.nodeType===1)a.style.display=e[b]});
b.isPrinting=!1;B(b,"afterPrint")},1E3)},contextMenu:function(b,a,e,c,g,f,h){var d=this,l=d.options.navigation,D=l.menuItemStyle,n=d.chartWidth,o=d.chartHeight,k="cache-"+b,i=d[k],t=F(g,f),v,w,p,r=function(a){d.pointer.inClass(a.target,b)||w()};if(!i)d[k]=i=j("div",{className:b},{position:"absolute",zIndex:1E3,padding:t+"px"},d.container),v=j("div",null,q({MozBoxShadow:"3px 3px 10px #888",WebkitBoxShadow:"3px 3px 10px #888",boxShadow:"3px 3px 10px #888"},l.menuStyle),i),w=function(){u(i,{display:"none"});
h&&h.setState(0);d.openMenu=!1},s(i,"mouseleave",function(){p=setTimeout(w,500)}),s(i,"mouseenter",function(){clearTimeout(p)}),s(document,"mouseup",r),s(d,"destroy",function(){A(document,"mouseup",r)}),m(a,function(a){if(a){var b=a.separator?j("hr",null,null,v):j("div",{onmouseover:function(){u(this,l.menuItemHoverStyle)},onmouseout:function(){u(this,D)},onclick:function(){w();a.onclick&&a.onclick.apply(d,arguments)},innerHTML:a.text||d.options.lang[a.textKey]},q({cursor:"pointer"},D),v);d.exportDivElements.push(b)}}),
d.exportDivElements.push(v,i),d.exportMenuWidth=i.offsetWidth,d.exportMenuHeight=i.offsetHeight;a={display:"block"};e+d.exportMenuWidth>n?a.right=n-e-g-t+"px":a.left=e-t+"px";c+f+d.exportMenuHeight>o&&h.alignOptions.verticalAlign!=="top"?a.bottom=o-c-t+"px":a.top=c+f-t+"px";u(i,a);d.openMenu=!0},addButton:function(b){var a=this,e=a.renderer,c=l(a.options.navigation.buttonOptions,b),g=c.onclick,k=c.menuItems,h,d,m={stroke:c.symbolStroke,fill:c.symbolFill},j=c.symbolSize||12;if(!a.btnCount)a.btnCount=
0;if(!a.exportDivElements)a.exportDivElements=[],a.exportSVGElements=[];if(c.enabled!==!1){var n=c.theme,o=n.states,p=o&&o.hover,o=o&&o.select,i;delete n.states;g?i=function(){g.apply(a,arguments)}:k&&(i=function(){a.contextMenu(d.menuClassName,k,d.translateX,d.translateY,d.width,d.height,d);d.setState(2)});c.text&&c.symbol?n.paddingLeft=f.pick(n.paddingLeft,25):c.text||q(n,{width:c.width,height:c.height,padding:0});d=e.button(c.text,0,0,i,n,p,o).attr({title:a.options.lang[c._titleKey],"stroke-linecap":"round"});
d.menuClassName=b.menuClassName||"highcharts-menu-"+a.btnCount++;c.symbol&&(h=e.symbol(c.symbol,c.symbolX-j/2,c.symbolY-j/2,j,j).attr(q(m,{"stroke-width":c.symbolStrokeWidth||1,zIndex:1})).add(d));d.add().align(q(c,{width:d.width,x:f.pick(c.x,x)}),!0,"spacingBox");x+=(d.width+c.buttonSpacing)*(c.align==="right"?-1:1);a.exportSVGElements.push(d,h)}},destroyExport:function(b){var b=b.target,a,e;for(a=0;a<b.exportSVGElements.length;a++)if(e=b.exportSVGElements[a])e.onclick=e.ontouchstart=null,b.exportSVGElements[a]=
e.destroy();for(a=0;a<b.exportDivElements.length;a++)e=b.exportDivElements[a],A(e,"mouseleave"),b.exportDivElements[a]=e.onmouseout=e.onmouseover=e.ontouchstart=e.onclick=null,p(e)}});H.menu=function(b,a,e,c){return["M",b,a+2.5,"L",b+e,a+2.5,"M",b,a+c/2+0.5,"L",b+e,a+c/2+0.5,"M",b,a+c-1.5,"L",b+e,a+c-1.5]};z.prototype.callbacks.push(function(b){var a,e=b.options.exporting,c=e.buttons;x=0;if(e.enabled!==!1){for(a in c)b.addButton(c[a]);s(b,"destroy",b.destroyExport)}})})(Highcharts);
/*
Highcharts JS v4.1.7 (2015-06-26)
(c) 2009-2014 Torstein Honsi
License: www.highcharts.com/license
*/
(function(k,D){function K(a,b,c){this.init.call(this,a,b,c)}var P=k.arrayMin,Q=k.arrayMax,t=k.each,H=k.extend,o=k.merge,R=k.map,q=k.pick,x=k.pInt,p=k.getOptions().plotOptions,h=k.seriesTypes,v=k.extendClass,L=k.splat,u=k.wrap,M=k.Axis,y=k.Tick,I=k.Point,S=k.Pointer,T=k.CenteredSeriesMixin,z=k.TrackerMixin,s=k.Series,w=Math,E=w.round,B=w.floor,N=w.max,U=k.Color,r=function(){};H(K.prototype,{init:function(a,b,c){var d=this,e=d.defaultOptions;d.chart=b;d.options=a=o(e,b.angular?{background:{}}:void 0,
a);(a=a.background)&&t([].concat(L(a)).reverse(),function(a){var b=a.backgroundColor,g=c.userOptions,a=o(d.defaultBackgroundOptions,a);if(b)a.backgroundColor=b;a.color=a.backgroundColor;c.options.plotBands.unshift(a);g.plotBands=g.plotBands||[];g.plotBands.unshift(a)})},defaultOptions:{center:["50%","50%"],size:"85%",startAngle:0},defaultBackgroundOptions:{shape:"circle",borderWidth:1,borderColor:"silver",backgroundColor:{linearGradient:{x1:0,y1:0,x2:0,y2:1},stops:[[0,"#FFF"],[1,"#DDD"]]},from:-Number.MAX_VALUE,
innerRadius:0,to:Number.MAX_VALUE,outerRadius:"105%"}});var G=M.prototype,y=y.prototype,V={getOffset:r,redraw:function(){this.isDirty=!1},render:function(){this.isDirty=!1},setScale:r,setCategories:r,setTitle:r},O={isRadial:!0,defaultRadialGaugeOptions:{labels:{align:"center",x:0,y:null},minorGridLineWidth:0,minorTickInterval:"auto",minorTickLength:10,minorTickPosition:"inside",minorTickWidth:1,tickLength:10,tickPosition:"inside",tickWidth:2,title:{rotation:0},zIndex:2},defaultRadialXOptions:{gridLineWidth:1,
labels:{align:null,distance:15,x:0,y:null},maxPadding:0,minPadding:0,showLastLabel:!1,tickLength:0},defaultRadialYOptions:{gridLineInterpolation:"circle",labels:{align:"right",x:-3,y:-2},showLastLabel:!1,title:{x:4,text:null,rotation:90}},setOptions:function(a){a=this.options=o(this.defaultOptions,this.defaultRadialOptions,a);if(!a.plotBands)a.plotBands=[]},getOffset:function(){G.getOffset.call(this);this.chart.axisOffset[this.side]=0;this.center=this.pane.center=T.getCenter.call(this.pane)},getLinePath:function(a,
b){var c=this.center,b=q(b,c[2]/2-this.offset);return this.chart.renderer.symbols.arc(this.left+c[0],this.top+c[1],b,b,{start:this.startAngleRad,end:this.endAngleRad,open:!0,innerR:0})},setAxisTranslation:function(){G.setAxisTranslation.call(this);if(this.center)this.transA=this.isCircular?(this.endAngleRad-this.startAngleRad)/(this.max-this.min||1):this.center[2]/2/(this.max-this.min||1),this.minPixelPadding=this.isXAxis?this.transA*this.minPointOffset:0},beforeSetTickPositions:function(){this.autoConnect&&
(this.max+=this.categories&&1||this.pointRange||this.closestPointRange||0)},setAxisSize:function(){G.setAxisSize.call(this);if(this.isRadial){this.center=this.pane.center=k.CenteredSeriesMixin.getCenter.call(this.pane);if(this.isCircular)this.sector=this.endAngleRad-this.startAngleRad;this.len=this.width=this.height=this.center[2]*q(this.sector,1)/2}},getPosition:function(a,b){return this.postTranslate(this.isCircular?this.translate(a):0,q(this.isCircular?b:this.translate(a),this.center[2]/2)-this.offset)},
postTranslate:function(a,b){var c=this.chart,d=this.center,a=this.startAngleRad+a;return{x:c.plotLeft+d[0]+Math.cos(a)*b,y:c.plotTop+d[1]+Math.sin(a)*b}},getPlotBandPath:function(a,b,c){var d=this.center,e=this.startAngleRad,f=d[2]/2,i=[q(c.outerRadius,"100%"),c.innerRadius,q(c.thickness,10)],g=/%$/,l,m=this.isCircular;this.options.gridLineInterpolation==="polygon"?d=this.getPlotLinePath(a).concat(this.getPlotLinePath(b,!0)):(a=Math.max(a,this.min),b=Math.min(b,this.max),m||(i[0]=this.translate(a),
i[1]=this.translate(b)),i=R(i,function(a){g.test(a)&&(a=x(a,10)*f/100);return a}),c.shape==="circle"||!m?(a=-Math.PI/2,b=Math.PI*1.5,l=!0):(a=e+this.translate(a),b=e+this.translate(b)),d=this.chart.renderer.symbols.arc(this.left+d[0],this.top+d[1],i[0],i[0],{start:Math.min(a,b),end:Math.max(a,b),innerR:q(i[1],i[0]-i[2]),open:l}));return d},getPlotLinePath:function(a,b){var c=this,d=c.center,e=c.chart,f=c.getPosition(a),i,g,l;c.isCircular?l=["M",d[0]+e.plotLeft,d[1]+e.plotTop,"L",f.x,f.y]:c.options.gridLineInterpolation===
"circle"?(a=c.translate(a))&&(l=c.getLinePath(0,a)):(t(e.xAxis,function(a){a.pane===c.pane&&(i=a)}),l=[],a=c.translate(a),d=i.tickPositions,i.autoConnect&&(d=d.concat([d[0]])),b&&(d=[].concat(d).reverse()),t(d,function(f,c){g=i.getPosition(f,a);l.push(c?"L":"M",g.x,g.y)}));return l},getTitlePosition:function(){var a=this.center,b=this.chart,c=this.options.title;return{x:b.plotLeft+a[0]+(c.x||0),y:b.plotTop+a[1]-{high:0.5,middle:0.25,low:0}[c.align]*a[2]+(c.y||0)}}};u(G,"init",function(a,b,c){var j;
var d=b.angular,e=b.polar,f=c.isX,i=d&&f,g,l;l=b.options;var m=c.pane||0;if(d){if(H(this,i?V:O),g=!f)this.defaultRadialOptions=this.defaultRadialGaugeOptions}else if(e)H(this,O),this.defaultRadialOptions=(g=f)?this.defaultRadialXOptions:o(this.defaultYAxisOptions,this.defaultRadialYOptions);a.call(this,b,c);if(!i&&(d||e)){a=this.options;if(!b.panes)b.panes=[];this.pane=(j=b.panes[m]=b.panes[m]||new K(L(l.pane)[m],b,this),m=j);m=m.options;b.inverted=!1;l.chart.zoomType=null;this.startAngleRad=b=(m.startAngle-
90)*Math.PI/180;this.endAngleRad=l=(q(m.endAngle,m.startAngle+360)-90)*Math.PI/180;this.offset=a.offset||0;if((this.isCircular=g)&&c.max===D&&l-b===2*Math.PI)this.autoConnect=!0}});u(y,"getPosition",function(a,b,c,d,e){var f=this.axis;return f.getPosition?f.getPosition(c):a.call(this,b,c,d,e)});u(y,"getLabelPosition",function(a,b,c,d,e,f,i,g,l){var m=this.axis,j=f.y,n=20,h=f.align,A=(m.translate(this.pos)+m.startAngleRad+Math.PI/2)/Math.PI*180%360;m.isRadial?(a=m.getPosition(this.pos,m.center[2]/
2+q(f.distance,-25)),f.rotation==="auto"?d.attr({rotation:A}):j===null&&(j=m.chart.renderer.fontMetrics(d.styles.fontSize).b-d.getBBox().height/2),h===null&&(m.isCircular?(this.label.getBBox().width>m.len*m.tickInterval/(m.max-m.min)&&(n=0),h=A>n&&A<180-n?"left":A>180+n&&A<360-n?"right":"center"):h="center",d.attr({align:h})),a.x+=f.x,a.y+=j):a=a.call(this,b,c,d,e,f,i,g,l);return a});u(y,"getMarkPath",function(a,b,c,d,e,f,i){var g=this.axis;g.isRadial?(a=g.getPosition(this.pos,g.center[2]/2+d),b=
["M",b,c,"L",a.x,a.y]):b=a.call(this,b,c,d,e,f,i);return b});p.arearange=o(p.area,{lineWidth:1,marker:null,threshold:null,tooltip:{pointFormat:'<span style="color:{series.color}">\u25CF</span> {series.name}: <b>{point.low}</b> - <b>{point.high}</b><br/>'},trackByArea:!0,dataLabels:{align:null,verticalAlign:null,xLow:0,xHigh:0,yLow:0,yHigh:0},states:{hover:{halo:!1}}});h.arearange=v(h.area,{type:"arearange",pointArrayMap:["low","high"],toYData:function(a){return[a.low,a.high]},pointValKey:"low",deferTranslatePolar:!0,
highToXY:function(a){var b=this.chart,c=this.xAxis.postTranslate(a.rectPlotX,this.yAxis.len-a.plotHigh);a.plotHighX=c.x-b.plotLeft;a.plotHigh=c.y-b.plotTop},getSegments:function(){var a=this;t(a.points,function(b){if(!a.options.connectNulls&&(b.low===null||b.high===null))b.y=null;else if(b.low===null&&b.high!==null)b.y=b.high});s.prototype.getSegments.call(this)},translate:function(){var a=this,b=a.yAxis;h.area.prototype.translate.apply(a);t(a.points,function(a){var d=a.low,e=a.high,f=a.plotY;e===
null&&d===null?a.y=null:d===null?(a.plotLow=a.plotY=null,a.plotHigh=b.translate(e,0,1,0,1)):e===null?(a.plotLow=f,a.plotHigh=null):(a.plotLow=f,a.plotHigh=b.translate(e,0,1,0,1))});this.chart.polar&&t(this.points,function(c){a.highToXY(c)})},getSegmentPath:function(a){var b,c=[],d=a.length,e=s.prototype.getSegmentPath,f,i;i=this.options;var g=i.step;for(b=HighchartsAdapter.grep(a,function(a){return a.plotLow!==null});d--;)f=a[d],f.plotHigh!==null&&c.push({plotX:f.plotHighX||f.plotX,plotY:f.plotHigh});
a=e.call(this,b);if(g)g===!0&&(g="left"),i.step={left:"right",center:"center",right:"left"}[g];c=e.call(this,c);i.step=g;i=[].concat(a,c);this.chart.polar||(c[0]="L");this.areaPath=this.areaPath.concat(a,c);return i},drawDataLabels:function(){var a=this.data,b=a.length,c,d=[],e=s.prototype,f=this.options.dataLabels,i=f.align,g,l,m=this.chart.inverted;if(f.enabled||this._hasPointLabels){for(c=b;c--;)if(g=a[c])if(l=g.plotHigh>g.plotLow,g.y=g.high,g._plotY=g.plotY,g.plotY=g.plotHigh,d[c]=g.dataLabel,
g.dataLabel=g.dataLabelUpper,g.below=l,m){if(!i)f.align=l?"right":"left";f.x=f.xHigh}else f.y=f.yHigh;e.drawDataLabels&&e.drawDataLabels.apply(this,arguments);for(c=b;c--;)if(g=a[c])if(l=g.plotHigh>g.plotLow,g.dataLabelUpper=g.dataLabel,g.dataLabel=d[c],g.y=g.low,g.plotY=g._plotY,g.below=!l,m){if(!i)f.align=l?"left":"right";f.x=f.xLow}else f.y=f.yLow;e.drawDataLabels&&e.drawDataLabels.apply(this,arguments)}f.align=i},alignDataLabel:function(){h.column.prototype.alignDataLabel.apply(this,arguments)},
setStackedPoints:r,getSymbol:r,drawPoints:r});p.areasplinerange=o(p.arearange);h.areasplinerange=v(h.arearange,{type:"areasplinerange",getPointSpline:h.spline.prototype.getPointSpline});(function(){var a=h.column.prototype;p.columnrange=o(p.column,p.arearange,{lineWidth:1,pointRange:null});h.columnrange=v(h.arearange,{type:"columnrange",translate:function(){var b=this,c=b.yAxis,d;a.translate.apply(b);t(b.points,function(a){var f=a.shapeArgs,i=b.options.minPointLength,g;a.tooltipPos=null;a.plotHigh=
d=c.translate(a.high,0,1,0,1);a.plotLow=a.plotY;g=d;a=a.plotY-d;Math.abs(a)<i?(i-=a,a+=i,g-=i/2):a<0&&(a*=-1,g-=a);f.height=a;f.y=g})},directTouch:!0,trackerGroups:["group","dataLabelsGroup"],drawGraph:r,pointAttrToOptions:a.pointAttrToOptions,drawPoints:a.drawPoints,drawTracker:a.drawTracker,animate:a.animate,getColumnMetrics:a.getColumnMetrics})})();p.gauge=o(p.line,{dataLabels:{enabled:!0,defer:!1,y:15,borderWidth:1,borderColor:"silver",borderRadius:3,crop:!1,verticalAlign:"top",zIndex:2},dial:{},
pivot:{},tooltip:{headerFormat:""},showInLegend:!1});z={type:"gauge",pointClass:v(I,{setState:function(a){this.state=a}}),angular:!0,drawGraph:r,fixedBox:!0,forceDL:!0,trackerGroups:["group","dataLabelsGroup"],translate:function(){var a=this.yAxis,b=this.options,c=a.center;this.generatePoints();t(this.points,function(d){var e=o(b.dial,d.dial),f=x(q(e.radius,80))*c[2]/200,i=x(q(e.baseLength,70))*f/100,g=x(q(e.rearLength,10))*f/100,l=e.baseWidth||3,m=e.topWidth||1,j=b.overshoot,n=a.startAngleRad+a.translate(d.y,
null,null,null,!0);j&&typeof j==="number"?(j=j/180*Math.PI,n=Math.max(a.startAngleRad-j,Math.min(a.endAngleRad+j,n))):b.wrap===!1&&(n=Math.max(a.startAngleRad,Math.min(a.endAngleRad,n)));n=n*180/Math.PI;d.shapeType="path";d.shapeArgs={d:e.path||["M",-g,-l/2,"L",i,-l/2,f,-m/2,f,m/2,i,l/2,-g,l/2,"z"],translateX:c[0],translateY:c[1],rotation:n};d.plotX=c[0];d.plotY=c[1]})},drawPoints:function(){var a=this,b=a.yAxis.center,c=a.pivot,d=a.options,e=d.pivot,f=a.chart.renderer;t(a.points,function(c){var b=
c.graphic,e=c.shapeArgs,m=e.d,j=o(d.dial,c.dial);b?(b.animate(e),e.d=m):c.graphic=f[c.shapeType](e).attr({stroke:j.borderColor||"none","stroke-width":j.borderWidth||0,fill:j.backgroundColor||"black",rotation:e.rotation}).add(a.group)});c?c.animate({translateX:b[0],translateY:b[1]}):a.pivot=f.circle(0,0,q(e.radius,5)).attr({"stroke-width":e.borderWidth||0,stroke:e.borderColor||"silver",fill:e.backgroundColor||"black"}).translate(b[0],b[1]).add(a.group)},animate:function(a){var b=this;if(!a)t(b.points,
function(a){var d=a.graphic;d&&(d.attr({rotation:b.yAxis.startAngleRad*180/Math.PI}),d.animate({rotation:a.shapeArgs.rotation},b.options.animation))}),b.animate=null},render:function(){this.group=this.plotGroup("group","series",this.visible?"visible":"hidden",this.options.zIndex,this.chart.seriesGroup);s.prototype.render.call(this);this.group.clip(this.chart.clipRect)},setData:function(a,b){s.prototype.setData.call(this,a,!1);this.processData();this.generatePoints();q(b,!0)&&this.chart.redraw()},
drawTracker:z&&z.drawTrackerPoint};h.gauge=v(h.line,z);p.boxplot=o(p.column,{fillColor:"#FFFFFF",lineWidth:1,medianWidth:2,states:{hover:{brightness:-0.3}},threshold:null,tooltip:{pointFormat:'<span style="color:{point.color}">\u25CF</span> <b> {series.name}</b><br/>Maximum: {point.high}<br/>Upper quartile: {point.q3}<br/>Median: {point.median}<br/>Lower quartile: {point.q1}<br/>Minimum: {point.low}<br/>'},whiskerLength:"50%",whiskerWidth:2});h.boxplot=v(h.column,{type:"boxplot",pointArrayMap:["low","q1",
"median","q3","high"],toYData:function(a){return[a.low,a.q1,a.median,a.q3,a.high]},pointValKey:"high",pointAttrToOptions:{fill:"fillColor",stroke:"color","stroke-width":"lineWidth"},drawDataLabels:r,translate:function(){var a=this.yAxis,b=this.pointArrayMap;h.column.prototype.translate.apply(this);t(this.points,function(c){t(b,function(b){c[b]!==null&&(c[b+"Plot"]=a.translate(c[b],0,1,0,1))})})},drawPoints:function(){var a=this,b=a.points,c=a.options,d=a.chart.renderer,e,f,i,g,l,m,j,n,h,A,k,J,p,o,
u,r,v,s,w,x,z,y,F=a.doQuartiles!==!1,C=parseInt(a.options.whiskerLength,10)/100;t(b,function(b){h=b.graphic;z=b.shapeArgs;k={};o={};r={};y=b.color||a.color;if(b.plotY!==D)if(e=b.pointAttr[b.selected?"selected":""],v=z.width,s=B(z.x),w=s+v,x=E(v/2),f=B(F?b.q1Plot:b.lowPlot),i=B(F?b.q3Plot:b.lowPlot),g=B(b.highPlot),l=B(b.lowPlot),k.stroke=b.stemColor||c.stemColor||y,k["stroke-width"]=q(b.stemWidth,c.stemWidth,c.lineWidth),k.dashstyle=b.stemDashStyle||c.stemDashStyle,o.stroke=b.whiskerColor||c.whiskerColor||
y,o["stroke-width"]=q(b.whiskerWidth,c.whiskerWidth,c.lineWidth),r.stroke=b.medianColor||c.medianColor||y,r["stroke-width"]=q(b.medianWidth,c.medianWidth,c.lineWidth),j=k["stroke-width"]%2/2,n=s+x+j,A=["M",n,i,"L",n,g,"M",n,f,"L",n,l],F&&(j=e["stroke-width"]%2/2,n=B(n)+j,f=B(f)+j,i=B(i)+j,s+=j,w+=j,J=["M",s,i,"L",s,f,"L",w,f,"L",w,i,"L",s,i,"z"]),C&&(j=o["stroke-width"]%2/2,g+=j,l+=j,p=["M",n-x*C,g,"L",n+x*C,g,"M",n-x*C,l,"L",n+x*C,l]),j=r["stroke-width"]%2/2,m=E(b.medianPlot)+j,u=["M",s,m,"L",w,
m],h)b.stem.animate({d:A}),C&&b.whiskers.animate({d:p}),F&&b.box.animate({d:J}),b.medianShape.animate({d:u});else{b.graphic=h=d.g().add(a.group);b.stem=d.path(A).attr(k).add(h);if(C)b.whiskers=d.path(p).attr(o).add(h);if(F)b.box=d.path(J).attr(e).add(h);b.medianShape=d.path(u).attr(r).add(h)}})},setStackedPoints:r});p.errorbar=o(p.boxplot,{color:"#000000",grouping:!1,linkedTo:":previous",tooltip:{pointFormat:'<span style="color:{point.color}">\u25CF</span> {series.name}: <b>{point.low}</b> - <b>{point.high}</b><br/>'},
whiskerWidth:null});h.errorbar=v(h.boxplot,{type:"errorbar",pointArrayMap:["low","high"],toYData:function(a){return[a.low,a.high]},pointValKey:"high",doQuartiles:!1,drawDataLabels:h.arearange?h.arearange.prototype.drawDataLabels:r,getColumnMetrics:function(){return this.linkedParent&&this.linkedParent.columnMetrics||h.column.prototype.getColumnMetrics.call(this)}});p.waterfall=o(p.column,{lineWidth:1,lineColor:"#333",dashStyle:"dot",borderColor:"#333",dataLabels:{inside:!0},states:{hover:{lineWidthPlus:0}}});
h.waterfall=v(h.column,{type:"waterfall",upColorProp:"fill",pointValKey:"y",translate:function(){var a=this.options,b=this.yAxis,c,d,e,f,i,g,l,m,j,n=a.threshold,k=a.stacking;h.column.prototype.translate.apply(this);l=m=n;d=this.points;for(c=0,a=d.length;c<a;c++){e=d[c];g=this.processedYData[c];f=e.shapeArgs;j=(i=k&&b.stacks[(this.negStacks&&g<n?"-":"")+this.stackKey])?i[e.x].points[this.index+","+c]:[0,g];if(e.isSum)e.y=g;else if(e.isIntermediateSum)e.y=g-m;i=N(l,l+e.y)+j[0];f.y=b.translate(i,0,1);
if(e.isSum)f.y=b.translate(j[1],0,1),f.height=Math.min(b.translate(j[0],0,1),b.len)-f.y;else if(e.isIntermediateSum)f.y=b.translate(j[1],0,1),f.height=Math.min(b.translate(m,0,1),b.len)-f.y,m=j[1];else{if(l!==0)f.height=g>0?b.translate(l,0,1)-f.y:b.translate(l,0,1)-b.translate(l-g,0,1);l+=g}f.height<0&&(f.y+=f.height,f.height*=-1);e.plotY=f.y=E(f.y)-this.borderWidth%2/2;f.height=N(E(f.height),0.001);e.yBottom=f.y+f.height;f=e.plotY+(e.negative?f.height:0);this.chart.inverted?e.tooltipPos[0]=b.len-
f:e.tooltipPos[1]=f}},processData:function(a){var b=this.yData,c=this.options.data,d,e=b.length,f,i,g,l,m,j;i=f=g=l=this.options.threshold||0;for(j=0;j<e;j++)m=b[j],d=c&&c[j]?c[j]:{},m==="sum"||d.isSum?b[j]=i:m==="intermediateSum"||d.isIntermediateSum?b[j]=f:(i+=m,f+=m),g=Math.min(i,g),l=Math.max(i,l);s.prototype.processData.call(this,a);this.dataMin=g;this.dataMax=l},toYData:function(a){if(a.isSum)return a.x===0?null:"sum";else if(a.isIntermediateSum)return a.x===0?null:"intermediateSum";return a.y},
getAttribs:function(){h.column.prototype.getAttribs.apply(this,arguments);var a=this,b=a.options,c=b.states,d=b.upColor||a.color,b=k.Color(d).brighten(0.1).get(),e=o(a.pointAttr),f=a.upColorProp;e[""][f]=d;e.hover[f]=c.hover.upColor||b;e.select[f]=c.select.upColor||d;t(a.points,function(b){if(!b.options.color)b.y>0?(b.pointAttr=e,b.color=d):b.pointAttr=a.pointAttr})},getGraphPath:function(){var a=this.data,b=a.length,c=E(this.options.lineWidth+this.borderWidth)%2/2,d=[],e,f,i;for(i=1;i<b;i++)f=a[i].shapeArgs,
e=a[i-1].shapeArgs,f=["M",e.x+e.width,e.y+c,"L",f.x,e.y+c],a[i-1].y<0&&(f[2]+=e.height,f[5]+=e.height),d=d.concat(f);return d},getExtremes:r,drawGraph:s.prototype.drawGraph});p.polygon=o(p.scatter,{marker:{enabled:!1}});h.polygon=v(h.scatter,{type:"polygon",fillGraph:!0,getSegmentPath:function(a){return s.prototype.getSegmentPath.call(this,a).concat("z")},drawGraph:s.prototype.drawGraph,drawLegendSymbol:k.LegendSymbolMixin.drawRectangle});p.bubble=o(p.scatter,{dataLabels:{formatter:function(){return this.point.z},
inside:!0,verticalAlign:"middle"},marker:{lineColor:null,lineWidth:1},minSize:8,maxSize:"20%",states:{hover:{halo:{size:5}}},tooltip:{pointFormat:"({point.x}, {point.y}), Size: {point.z}"},turboThreshold:0,zThreshold:0,zoneAxis:"z"});z=v(I,{haloPath:function(){return I.prototype.haloPath.call(this,this.shapeArgs.r+this.series.options.states.hover.halo.size)},ttBelow:!1});h.bubble=v(h.scatter,{type:"bubble",pointClass:z,pointArrayMap:["y","z"],parallelArrays:["x","y","z"],trackerGroups:["group","dataLabelsGroup"],
bubblePadding:!0,zoneAxis:"z",pointAttrToOptions:{stroke:"lineColor","stroke-width":"lineWidth",fill:"fillColor"},applyOpacity:function(a){var b=this.options.marker,c=q(b.fillOpacity,0.5),a=a||b.fillColor||this.color;c!==1&&(a=U(a).setOpacity(c).get("rgba"));return a},convertAttribs:function(){var a=s.prototype.convertAttribs.apply(this,arguments);a.fill=this.applyOpacity(a.fill);return a},getRadii:function(a,b,c,d){var e,f,i,g=this.zData,l=[],m=this.options.sizeBy!=="width";for(f=0,e=g.length;f<
e;f++)i=b-a,i=i>0?(g[f]-a)/(b-a):0.5,m&&i>=0&&(i=Math.sqrt(i)),l.push(w.ceil(c+i*(d-c))/2);this.radii=l},animate:function(a){var b=this.options.animation;if(!a)t(this.points,function(a){var d=a.graphic,a=a.shapeArgs;d&&a&&(d.attr("r",1),d.animate({r:a.r},b))}),this.animate=null},translate:function(){var a,b=this.data,c,d,e=this.radii;h.scatter.prototype.translate.call(this);for(a=b.length;a--;)c=b[a],d=e?e[a]:0,d>=this.minPxSize/2?(c.shapeType="circle",c.shapeArgs={x:c.plotX,y:c.plotY,r:d},c.dlBox=
{x:c.plotX-d,y:c.plotY-d,width:2*d,height:2*d}):c.shapeArgs=c.plotY=c.dlBox=D},drawLegendSymbol:function(a,b){var c=x(a.itemStyle.fontSize)/2;b.legendSymbol=this.chart.renderer.circle(c,a.baseline-c,c).attr({zIndex:3}).add(b.legendGroup);b.legendSymbol.isMarker=!0},drawPoints:h.column.prototype.drawPoints,alignDataLabel:h.column.prototype.alignDataLabel,buildKDTree:r,applyZones:r});M.prototype.beforePadding=function(){var a=this,b=this.len,c=this.chart,d=0,e=b,f=this.isXAxis,i=f?"xData":"yData",g=
this.min,l={},m=w.min(c.plotWidth,c.plotHeight),j=Number.MAX_VALUE,n=-Number.MAX_VALUE,h=this.max-g,k=b/h,p=[];t(this.series,function(b){var g=b.options;if(b.bubblePadding&&(b.visible||!c.options.chart.ignoreHiddenSeries))if(a.allowZoomOutside=!0,p.push(b),f)t(["minSize","maxSize"],function(a){var b=g[a],f=/%$/.test(b),b=x(b);l[a]=f?m*b/100:b}),b.minPxSize=l.minSize,b=b.zData,b.length&&(j=q(g.zMin,w.min(j,w.max(P(b),g.displayNegative===!1?g.zThreshold:-Number.MAX_VALUE))),n=q(g.zMax,w.max(n,Q(b))))});
t(p,function(a){var b=a[i],c=b.length,m;f&&a.getRadii(j,n,l.minSize,l.maxSize);if(h>0)for(;c--;)typeof b[c]==="number"&&(m=a.radii[c],d=Math.min((b[c]-g)*k-m,d),e=Math.max((b[c]-g)*k+m,e))});p.length&&h>0&&q(this.options.min,this.userMin)===D&&q(this.options.max,this.userMax)===D&&(e-=b,k*=(b+d-e)/b,this.min+=d/k,this.max+=e/k)};(function(){function a(a,b,c){a.call(this,b,c);if(this.chart.polar)this.closeSegment=function(a){var b=this.xAxis.center;a.push("L",b[0],b[1])},this.closedStacks=!0}function b(a,
b){var c=this.chart,d=this.options.animation,e=this.group,j=this.markerGroup,n=this.xAxis.center,h=c.plotLeft,k=c.plotTop;if(c.polar){if(c.renderer.isSVG)d===!0&&(d={}),b?(c={translateX:n[0]+h,translateY:n[1]+k,scaleX:0.001,scaleY:0.001},e.attr(c),j&&j.attr(c)):(c={translateX:h,translateY:k,scaleX:1,scaleY:1},e.animate(c,d),j&&j.animate(c,d),this.animate=null)}else a.call(this,b)}var c=s.prototype,d=S.prototype,e;c.searchPointByAngle=function(a){var b=this.chart,c=this.xAxis.pane.center;return this.searchKDTree({clientX:180+
Math.atan2(a.chartX-c[0]-b.plotLeft,a.chartY-c[1]-b.plotTop)*(-180/Math.PI)})};u(c,"buildKDTree",function(a){if(this.chart.polar)this.kdByAngle?this.searchPoint=this.searchPointByAngle:this.kdDimensions=2;a.apply(this)});c.toXY=function(a){var b,c=this.chart,d=a.plotX;b=a.plotY;a.rectPlotX=d;a.rectPlotY=b;b=this.xAxis.postTranslate(a.plotX,this.yAxis.len-b);a.plotX=a.polarPlotX=b.x-c.plotLeft;a.plotY=a.polarPlotY=b.y-c.plotTop;this.kdByAngle?(c=(d/Math.PI*180+this.xAxis.pane.options.startAngle)%360,
c<0&&(c+=360),a.clientX=c):a.clientX=a.plotX};h.area&&u(h.area.prototype,"init",a);h.areaspline&&u(h.areaspline.prototype,"init",a);h.spline&&u(h.spline.prototype,"getPointSpline",function(a,b,c,d){var e,j,n,h,k,p,o;if(this.chart.polar){e=c.plotX;j=c.plotY;a=b[d-1];n=b[d+1];this.connectEnds&&(a||(a=b[b.length-2]),n||(n=b[1]));if(a&&n)h=a.plotX,k=a.plotY,b=n.plotX,p=n.plotY,h=(1.5*e+h)/2.5,k=(1.5*j+k)/2.5,n=(1.5*e+b)/2.5,o=(1.5*j+p)/2.5,b=Math.sqrt(Math.pow(h-e,2)+Math.pow(k-j,2)),p=Math.sqrt(Math.pow(n-
e,2)+Math.pow(o-j,2)),h=Math.atan2(k-j,h-e),k=Math.atan2(o-j,n-e),o=Math.PI/2+(h+k)/2,Math.abs(h-o)>Math.PI/2&&(o-=Math.PI),h=e+Math.cos(o)*b,k=j+Math.sin(o)*b,n=e+Math.cos(Math.PI+o)*p,o=j+Math.sin(Math.PI+o)*p,c.rightContX=n,c.rightContY=o;d?(c=["C",a.rightContX||a.plotX,a.rightContY||a.plotY,h||e,k||j,e,j],a.rightContX=a.rightContY=null):c=["M",e,j]}else c=a.call(this,b,c,d);return c});u(c,"translate",function(a){var b=this.chart;a.call(this);if(b.polar&&(this.kdByAngle=b.tooltip&&b.tooltip.shared,
!this.preventPostTranslate)){a=this.points;for(b=a.length;b--;)this.toXY(a[b])}});u(c,"getSegmentPath",function(a,b){var c=this.points;if(this.chart.polar&&this.options.connectEnds!==!1&&b[b.length-1]===c[c.length-1]&&c[0].y!==null)this.connectEnds=!0,b=[].concat(b,[c[0]]);return a.call(this,b)});u(c,"animate",b);if(h.column)e=h.column.prototype,u(e,"animate",b),u(e,"translate",function(a){var b=this.xAxis,c=this.yAxis.len,d=b.center,e=b.startAngleRad,j=this.chart.renderer,h,k;this.preventPostTranslate=
!0;a.call(this);if(b.isRadial){b=this.points;for(k=b.length;k--;)h=b[k],a=h.barX+e,h.shapeType="path",h.shapeArgs={d:j.symbols.arc(d[0],d[1],c-h.plotY,null,{start:a,end:a+h.pointWidth,innerR:c-q(h.yBottom,c)})},this.toXY(h),h.tooltipPos=[h.plotX,h.plotY],h.ttBelow=h.plotY>d[1]}}),u(e,"alignDataLabel",function(a,b,d,e,h,j){if(this.chart.polar){a=b.rectPlotX/Math.PI*180;if(e.align===null)e.align=a>20&&a<160?"left":a>200&&a<340?"right":"center";if(e.verticalAlign===null)e.verticalAlign=a<45||a>315?"bottom":
a>135&&a<225?"top":"middle";c.alignDataLabel.call(this,b,d,e,h,j)}else a.call(this,b,d,e,h,j)});u(d,"getCoordinates",function(a,b){var c=this.chart,d={xAxis:[],yAxis:[]};c.polar?t(c.axes,function(a){var e=a.isXAxis,f=a.center,h=b.chartX-f[0]-c.plotLeft,f=b.chartY-f[1]-c.plotTop;d[e?"xAxis":"yAxis"].push({axis:a,value:a.translate(e?Math.PI-Math.atan2(h,f):Math.sqrt(Math.pow(h,2)+Math.pow(f,2)),!0)})}):d=a.call(this,b);return d})})()})(Highcharts);

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,3 @@
# Place all the behaviors and hooks related to the matching controller here.
# All this logic will automatically be available in application.js.
# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/

View File

@@ -0,0 +1,3 @@
# Place all the behaviors and hooks related to the matching controller here.
# All this logic will automatically be available in application.js.
# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/

View File

@@ -1,3 +1,7 @@
# Place all the behaviors and hooks related to the matching controller here.
# All this logic will automatically be available in application.js.
# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/
$ ->
`$('.datetimepicker').datetimepicker({format: 'd.m.Y H:i', startDate: (!($(this).attr("value")==undefined))? $(this).attr("value"): '' })`
return

View File

@@ -0,0 +1,17 @@
$ ->
if $('#infinite-scrolling').size() > 0
more_posts_url = $('.pagination .next_page a').attr('href')
b=$(document).height() - $(window).height() - 260
if more_posts_url && $(window).scrollTop() > b
$('.pagination').html('<b> Loading...</b>')
$.getScript more_posts_url
$(window).on 'scroll', ->
more_posts_url = $('.pagination .next_page a').attr('href')
b=$(document).height() - $(window).height() - 260
if more_posts_url && $(window).scrollTop() > b
$('.pagination').html('<b> Loading...</b>')
$.getScript more_posts_url
return
return

View File

@@ -0,0 +1,9 @@
/*
Sticky-kit v1.1.2 | WTFPL | Leaf Corcoran 2015 | http://leafo.net
*/
(function(){var b,f;b=this.jQuery||window.jQuery;f=b(window);b.fn.stick_in_parent=function(d){var A,w,J,n,B,K,p,q,k,E,t;null==d&&(d={});t=d.sticky_class;B=d.inner_scrolling;E=d.recalc_every;k=d.parent;q=d.offset_top;p=d.spacer;w=d.bottoming;null==q&&(q=0);null==k&&(k=void 0);null==B&&(B=!0);null==t&&(t="is_stuck");A=b(document);null==w&&(w=!0);J=function(a,d,n,C,F,u,r,G){var v,H,m,D,I,c,g,x,y,z,h,l;if(!a.data("sticky_kit")){a.data("sticky_kit",!0);I=A.height();g=a.parent();null!=k&&(g=g.closest(k));
if(!g.length)throw"failed to find stick parent";v=m=!1;(h=null!=p?p&&a.closest(p):b("<div />"))&&h.css("position",a.css("position"));x=function(){var c,f,e;if(!G&&(I=A.height(),c=parseInt(g.css("border-top-width"),10),f=parseInt(g.css("padding-top"),10),d=parseInt(g.css("padding-bottom"),10),n=g.offset().top+c+f,C=g.height(),m&&(v=m=!1,null==p&&(a.insertAfter(h),h.detach()),a.css({position:"",top:"",width:"",bottom:""}).removeClass(t),e=!0),F=a.offset().top-(parseInt(a.css("margin-top"),10)||0)-q,
u=a.outerHeight(!0),r=a.css("float"),h&&h.css({width:a.outerWidth(!0),height:u,display:a.css("display"),"vertical-align":a.css("vertical-align"),"float":r}),e))return l()};x();if(u!==C)return D=void 0,c=q,z=E,l=function(){var b,l,e,k;if(!G&&(e=!1,null!=z&&(--z,0>=z&&(z=E,x(),e=!0)),e||A.height()===I||x(),e=f.scrollTop(),null!=D&&(l=e-D),D=e,m?(w&&(k=e+u+c>C+n,v&&!k&&(v=!1,a.css({position:"fixed",bottom:"",top:c}).trigger("sticky_kit:unbottom"))),e<F&&(m=!1,c=q,null==p&&("left"!==r&&"right"!==r||a.insertAfter(h),
h.detach()),b={position:"",width:"",top:""},a.css(b).removeClass(t).trigger("sticky_kit:unstick")),B&&(b=f.height(),u+q>b&&!v&&(c-=l,c=Math.max(b-u,c),c=Math.min(q,c),m&&a.css({top:c+"px"})))):e>F&&(m=!0,b={position:"fixed",top:c},b.width="border-box"===a.css("box-sizing")?a.outerWidth()+"px":a.width()+"px",a.css(b).addClass(t),null==p&&(a.after(h),"left"!==r&&"right"!==r||h.append(a)),a.trigger("sticky_kit:stick")),m&&w&&(null==k&&(k=e+u+c>C+n),!v&&k)))return v=!0,"static"===g.css("position")&&g.css({position:"relative"}),
a.css({position:"absolute",bottom:d,top:"auto"}).trigger("sticky_kit:bottom")},y=function(){x();return l()},H=function(){G=!0;f.off("touchmove",l);f.off("scroll",l);f.off("resize",y);b(document.body).off("sticky_kit:recalc",y);a.off("sticky_kit:detach",H);a.removeData("sticky_kit");a.css({position:"",bottom:"",top:"",width:""});g.position("position","");if(m)return null==p&&("left"!==r&&"right"!==r||a.insertAfter(h),h.remove()),a.removeClass(t)},f.on("touchmove",l),f.on("scroll",l),f.on("resize",
y),b(document.body).on("sticky_kit:recalc",y),a.on("sticky_kit:detach",H),setTimeout(l,0)}};n=0;for(K=this.length;n<K;n++)d=this[n],J(b(d));return this}}).call(this);

View File

@@ -0,0 +1,3 @@
# Place all the behaviors and hooks related to the matching controller here.
# All this logic will automatically be available in application.js.
# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/

View File

@@ -0,0 +1,3 @@
# Place all the behaviors and hooks related to the matching controller here.
# All this logic will automatically be available in application.js.
# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/

View File

@@ -0,0 +1,3 @@
# Place all the behaviors and hooks related to the matching controller here.
# All this logic will automatically be available in application.js.
# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/

View File

@@ -11,21 +11,40 @@
*
*= require_self
* require_tree .
*= require blueimp-gallery-all
*= require jquery.fileupload-ui
*= require jquery.datetimepicker
*= require jquery-ui/dialog
*= require jquery-ui/autocomplete
*= require jquery-ui/progressbar
*= require jquery-ui/tabs
* require 'bootstrap'
* require 'neuigkeiten'
*/
// Colorshema #0A64A4
$color_prim: #071672;
$color_schema_1: #006599;
$color_schema_2: #630CE8;
$color_schema_3: #FF0021;
$color_schema_4: #E8820C;
$color_schema_5: #FFF30D;
$color_schema_1_dark: darken($color_schema_1, 10%);
$color_schema_2_dark: darken($color_schema_2, 10%);
$color_schema_3_dark: darken($color_schema_3, 10%);
$color_schema_4_dark: darken($color_schema_4, 10%);
$color_schema_5_dark: darken($color_schema_5, 10%);
$color_prim: $color_schema_1_dark; // #006599; //071672;
$color_prim_light: lighten($color_prim ,10%);
$color_prim_vlight: lighten($color_prim ,30%);
$color_prim_dark: darken($color_prim ,10%);
$color_prim_vdark: darken($color_prim ,30%);
$color_cont: FFDB73;
$color_cont_light:FFDB73;
$color_cont: $color_schema_3;
$color_cont_light:lighten($color_cont ,10%);
$linkColor: $color_prim;
$linkColorHover: $color_schema_1;
$white: #FFFFFF;
$bodyBackground: #EEE;
@@ -36,7 +55,7 @@ $bodyBackground: #EEE;
$navbarBackground: #EEE;//$color_prim;
$navbarText: $color_prim;
$navbarLinkColor: $color_prim;
$navbarLinkColorHover: $color_prim_dark;
$navbarLinkColorHover: $color_schema_1;
$dropdownLinkColor: black;
$navbar-default-brand-color: black;
$navbarBrandColor:black;
@@ -45,7 +64,7 @@ $navbarBrandColor:black;
$navbarBackgroundHighlight: #EEE;
//$navbarBackgroundHighlight:#FFFFFF;
$navbarLinkBackgroundHover:#FFBE00;
$navbarLinkBackgroundHover: darken($navbarBackground,10%);
@@ -54,32 +73,30 @@ $infoText:#03406A;
$sansFontFamily: Helvetica, Arial;
@import 'bootstrap';
@import 'bootstrap-responsive';
//@import 'bootstrap-responsive';
@import 'bootstrap/image-gallery';
@import 'font-awesome';
@import 'neuigkeiten';
@import 'themengruppen';
div.header {
display: block;
// background: url('../../../../header1.png') no-repeat;
// background-color:white;// $color_prim;
// background-position: right;
vertical-align:middle;
float:left;
color:#000;
padding-left:87px;
padding-top:0px;
overflow:visible;
height:45px;
height:45px;
margin-bottom: 0 px
}
div.header h1 {
padding:0;
margin:4px;
font-size:20px;
line-height:32px;
margin:4px;
font-size:20px;
line-height:32px;
}
div.header img {
//top:2px;
@@ -90,13 +107,17 @@ border-bottom: $color_prim solid 3px;
}
div.headerrow {
}
$contentdiv-background:none;
$contentdiv-background:none;
$navbar-li-minwidth: 0;
$box-border: lightgray solid 1px;
$box-border: #ccc solid 1px;
$box-border-radius:0px;
$box-background: white;
@import 'layout';
@import 'linkboxes';
@import 'calendars';
@import 'formtastic-bootstrap'

View File

@@ -1,147 +0,0 @@
/*
* This is a manifest file that'll be compiled into application.css, which will include all the files
* listed below.
*
* Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
* or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path.
*
* You're free to add application-wide styles to this file and they'll appear at the top of the
* compiled file, but it's generally better to create a new file per style scope.
*
*= require_self
* require_tree .
*= require 'calendars'
*= require jquery.fileupload-ui
* require 'bootstrap'
*/
// Colorshema #0A64A4
$color_prim: #0A64A4;
$color_prim_light: #0B65A5;
$color_prim_vlight: #2B85C5;
$color_cont: FFDB73;
$color_cont_light:FFDB73;
$linkColor: #03006E;
$white: #FFFFFF;
$bodyBackground: $white;
$navbarBackground: $color_cont;
$navbarBackground: #FFFFFF;
$navbarBackgroundHighlight:lighten($navbarBackground,30%);
//$navbarBackgroundHighlight:#FFFFFF;
$navbarLinkBackgroundHover:#FFBE00;
$navbarLinkBackgroundHover: lighten(#cccccc,10%);
$infoBackground:#65A5D1;
$infoText:#03406A;
$sansFontFamily: Helvetica, Arial;
@import 'bootstrap';
@import 'bootstrap-responsive';
@import 'bootstrap/image-gallery';
@import 'font-awesome';
h1 {
font-size: 23px
}
h2 {
font-size: 19px
}
body,html {
padding:0;
margin:0;
}
a:hover {
text-decoration:none;
}
div.header {
display: block;
// background: url('/header1.png') no-repeat;
background-color: #FFF;
background-position: right;
border-bottom:1px solid black;
height:41px;
color:#000;
padding-left:87px;
padding-top:0px;
overflow:hidden;
margin-bottom: 20px
}
div.header h1 {
padding:0;
margin:4px;
font-size:20px;
line-height:32px;
}
#menudiv {
width:100%;
}
.navbar .nav li {
min-width:100%;
}
.navbar .nav .divider {
border-style: solid;
border-width: 1px 0px 0px 0px;
border-color: grey;
min-width: 100%;
}
.navbar .navbar-inner
{
border:none;
box-shadow:none;
}
#contentdiv
{
background: #FFFFFF
}
#contentdiv .container-fluid
{
padding:0;
}
a.linkbox, div.contentbox
{
display:block;
padding:5px;
border-radius: 10px;
border: lightgray solid 1px;
}
a.linkbox:hover
{
box-shadow: 1px 1px 2px 2px lightgray;
}
a.linkbox li
{
}
ul.linkbox-list li
{
margin-bottom:10px;
}
ul.linkbox-list
{
max-width:70em;
}
div.contentbox
{
margin: 5px;
}
.navbar .nav li {
min-width:100%;
background:44F;
}

View File

@@ -0,0 +1,786 @@
@font-face {
font-family: "ffi1";
src: url("/assets/flatfeticon.eot");
src: url("/assets/flatfeticon.eot#iefix") format("embedded-opentype"),
url("/assets/flatfeticon.woff") format("woff"),
url("/assets/flatfeticon.ttf") format("truetype"),
url("/assets/flatfeticon.svg") format("svg");
font-weight: normal;
font-style: normal;
}
[class^="ffi1-"]:before, [class*=" ffi1-"]:before,
[class^="ffi1-"]:after, [class*=" ffi1-"]:after {
font-family: ffi1;
font-style: normal;
margin-left: 4px;
font-weight:normal;
}
.ffi1-academic:before {
content: "\e000";
}
.ffi1-apple:before {
content: "\e001";
}
.ffi1-auricular6:before {
content: "\e002";
}
.ffi1-bag2:before {
content: "\e003";
}
.ffi1-bald34:before {
content: "\e004";
}
.ffi1-balloons2:before {
content: "\e005";
}
.ffi1-banes:before {
content: "\e006";
}
.ffi1-bar1:before {
content: "\e007";
}
.ffi1-black268:before {
content: "\e008";
}
.ffi1-book119:before {
content: "\e009";
}
.ffi1-book135:before {
content: "\e00a";
}
.ffi1-book137:before {
content: "\e00b";
}
.ffi1-book139:before {
content: "\e00c";
}
.ffi1-books17:before {
content: "\e00d";
}
.ffi1-books19:before {
content: "\e00e";
}
.ffi1-books20:before {
content: "\e00f";
}
.ffi1-books30:before {
content: "\e010";
}
.ffi1-books8:before {
content: "\e011";
}
.ffi1-boy21:before {
content: "\e012";
}
.ffi1-bricks2:before {
content: "\e013";
}
.ffi1-briefcase32:before {
content: "\e014";
}
.ffi1-businessman216:before {
content: "\e015";
}
.ffi1-businessman217:before {
content: "\e016";
}
.ffi1-businessman56:before {
content: "\e017";
}
.ffi1-businessman65:before {
content: "\e018";
}
.ffi1-businessmen32:before {
content: "\e019";
}
.ffi1-calculator40:before {
content: "\e01a";
}
.ffi1-calendar130:before {
content: "\e01b";
}
.ffi1-call36:before {
content: "\e01c";
}
.ffi1-call7:before {
content: "\e01d";
}
.ffi1-candy1:before {
content: "\e01e";
}
.ffi1-candy10:before {
content: "\e01f";
}
.ffi1-career:before {
content: "\e020";
}
.ffi1-certificate2:before {
content: "\e021";
}
.ffi1-checkboxmark:before {
content: "\e022";
}
.ffi1-chemistry:before {
content: "\e023";
}
.ffi1-chemistry1:before {
content: "\e024";
}
.ffi1-circular114:before {
content: "\e025";
}
.ffi1-circular116:before {
content: "\e026";
}
.ffi1-class6:before {
content: "\e027";
}
.ffi1-classroom:before {
content: "\e028";
}
.ffi1-cleaning1:before {
content: "\e029";
}
.ffi1-clipboard44:before {
content: "\e02a";
}
.ffi1-close13:before {
content: "\e02b";
}
.ffi1-cocktail15:before {
content: "\e02c";
}
.ffi1-cocktail7:before {
content: "\e02d";
}
.ffi1-coffee20:before {
content: "\e02e";
}
.ffi1-coins24:before {
content: "\e02f";
}
.ffi1-colors3:before {
content: "\e030";
}
.ffi1-comfortable:before {
content: "\e031";
}
.ffi1-comments16:before {
content: "\e032";
}
.ffi1-compass58:before {
content: "\e033";
}
.ffi1-computer135:before {
content: "\e034";
}
.ffi1-computer136:before {
content: "\e035";
}
.ffi1-computers:before {
content: "\e036";
}
.ffi1-connected20:before {
content: "\e037";
}
.ffi1-contacts1:before {
content: "\e038";
}
.ffi1-copy12:before {
content: "\e039";
}
.ffi1-croissant1:before {
content: "\e03a";
}
.ffi1-data39:before {
content: "\e03b";
}
.ffi1-data45:before {
content: "\e03c";
}
.ffi1-delivered:before {
content: "\e03d";
}
.ffi1-delivery35:before {
content: "\e03e";
}
.ffi1-descendant1:before {
content: "\e03f";
}
.ffi1-diploma:before {
content: "\e040";
}
.ffi1-dislike:before {
content: "\e041";
}
.ffi1-dna9:before {
content: "\e042";
}
.ffi1-domain1:before {
content: "\e043";
}
.ffi1-drink24:before {
content: "\e044";
}
.ffi1-dwelling1:before {
content: "\e045";
}
.ffi1-earth23:before {
content: "\e046";
}
.ffi1-ecological2:before {
content: "\e047";
}
.ffi1-edit12:before {
content: "\e048";
}
.ffi1-education14:before {
content: "\e049";
}
.ffi1-education17:before {
content: "\e04a";
}
.ffi1-education20:before {
content: "\e04b";
}
.ffi1-educational8:before {
content: "\e04c";
}
.ffi1-educative1:before {
content: "\e04d";
}
.ffi1-electric6:before {
content: "\e04e";
}
.ffi1-electrical7:before {
content: "\e04f";
}
.ffi1-electronic32:before {
content: "\e050";
}
.ffi1-electronic51:before {
content: "\e051";
}
.ffi1-elegant8:before {
content: "\e052";
}
.ffi1-email20:before {
content: "\e053";
}
.ffi1-facebook1:before {
content: "\e054";
}
.ffi1-facebook30:before {
content: "\e055";
}
.ffi1-female188:before {
content: "\e056";
}
.ffi1-female189:before {
content: "\e057";
}
.ffi1-female218:before {
content: "\e058";
}
.ffi1-food23:before {
content: "\e059";
}
.ffi1-fork27:before {
content: "\e05a";
}
.ffi1-gears3:before {
content: "\e05b";
}
.ffi1-gingerbread:before {
content: "\e05c";
}
.ffi1-girl16:before {
content: "\e05d";
}
.ffi1-glass15:before {
content: "\e05e";
}
.ffi1-good2:before {
content: "\e05f";
}
.ffi1-graduate11:before {
content: "\e060";
}
.ffi1-graduate8:before {
content: "\e061";
}
.ffi1-graduate9:before {
content: "\e062";
}
.ffi1-graduates2:before {
content: "\e063";
}
.ffi1-graduation20:before {
content: "\e064";
}
.ffi1-graduation25:before {
content: "\e065";
}
.ffi1-grocery10:before {
content: "\e066";
}
.ffi1-halloween10:before {
content: "\e067";
}
.ffi1-hammer7:before {
content: "\e068";
}
.ffi1-hand132:before {
content: "\e069";
}
.ffi1-handbag6:before {
content: "\e06a";
}
.ffi1-hands-shake:before {
content: "\e06b";
}
.ffi1-handshake1:before {
content: "\e06c";
}
.ffi1-hardbound:before {
content: "\e06d";
}
.ffi1-head21:before {
content: "\e06e";
}
.ffi1-hierarchical:before {
content: "\e06f";
}
.ffi1-homework:before {
content: "\e070";
}
.ffi1-hot31:before {
content: "\e071";
}
.ffi1-hot50:before {
content: "\e072";
}
.ffi1-house25:before {
content: "\e073";
}
.ffi1-important:before {
content: "\e074";
}
.ffi1-index3:before {
content: "\e075";
}
.ffi1-instructor:before {
content: "\e076";
}
.ffi1-italian1:before {
content: "\e077";
}
.ffi1-job:before {
content: "\e078";
}
.ffi1-judge:before {
content: "\e079";
}
.ffi1-keys:before {
content: "\e07a";
}
.ffi1-kids1:before {
content: "\e07b";
}
.ffi1-kindergarden:before {
content: "\e07c";
}
.ffi1-laptop88:before {
content: "\e07d";
}
.ffi1-lecture1:before {
content: "\e07e";
}
.ffi1-lecture2:before {
content: "\e07f";
}
.ffi1-like3:before {
content: "\e080";
}
.ffi1-live2:before {
content: "\e081";
}
.ffi1-magnifier12:before {
content: "\e082";
}
.ffi1-magnifier13:before {
content: "\e083";
}
.ffi1-male103:before {
content: "\e084";
}
.ffi1-man183:before {
content: "\e085";
}
.ffi1-man204:before {
content: "\e086";
}
.ffi1-man315:before {
content: "\e087";
}
.ffi1-man388:before {
content: "\e088";
}
.ffi1-man397:before {
content: "\e089";
}
.ffi1-man82:before {
content: "\e08a";
}
.ffi1-men9:before {
content: "\e08b";
}
.ffi1-milk8:before {
content: "\e08c";
}
.ffi1-mirrors:before {
content: "\e08d";
}
.ffi1-money13:before {
content: "\e08e";
}
.ffi1-mop1:before {
content: "\e08f";
}
.ffi1-mop2:before {
content: "\e090";
}
.ffi1-movie19:before {
content: "\e091";
}
.ffi1-multiple25:before {
content: "\e092";
}
.ffi1-news:before {
content: "\e093";
}
.ffi1-newspaper9:before {
content: "\e094";
}
.ffi1-note20:before {
content: "\e095";
}
.ffi1-open127:before {
content: "\e096";
}
.ffi1-open135:before {
content: "\e097";
}
.ffi1-open160:before {
content: "\e098";
}
.ffi1-open161:before {
content: "\e099";
}
.ffi1-owl10:before {
content: "\e09a";
}
.ffi1-package8:before {
content: "\e09b";
}
.ffi1-paperclip14:before {
content: "\e09c";
}
.ffi1-party:before {
content: "\e09d";
}
.ffi1-party1:before {
content: "\e09e";
}
.ffi1-pen38:before {
content: "\e09f";
}
.ffi1-pen39:before {
content: "\e0a0";
}
.ffi1-pen43:before {
content: "\e0a1";
}
.ffi1-pencil54:before {
content: "\e0a2";
}
.ffi1-pencil66:before {
content: "\e0a3";
}
.ffi1-pens:before {
content: "\e0a4";
}
.ffi1-people30:before {
content: "\e0a5";
}
.ffi1-personal5:before {
content: "\e0a6";
}
.ffi1-persong:before {
content: "\e0a7";
}
.ffi1-persons8:before {
content: "\e0a8";
}
.ffi1-phone25:before {
content: "\e0a9";
}
.ffi1-pie46:before {
content: "\e0aa";
}
.ffi1-plate7:before {
content: "\e0ab";
}
.ffi1-plug12:before {
content: "\e0ac";
}
.ffi1-plugin:before {
content: "\e0ad";
}
.ffi1-power20:before {
content: "\e0ae";
}
.ffi1-power48:before {
content: "\e0af";
}
.ffi1-printer11:before {
content: "\e0b0";
}
.ffi1-printer70:before {
content: "\e0b1";
}
.ffi1-professor17:before {
content: "\e0b2";
}
.ffi1-professor4:before {
content: "\e0b3";
}
.ffi1-professor5:before {
content: "\e0b4";
}
.ffi1-professor7:before {
content: "\e0b5";
}
.ffi1-pumpkin2:before {
content: "\e0b6";
}
.ffi1-puzzle25:before {
content: "\e0b7";
}
.ffi1-question41:before {
content: "\e0b8";
}
.ffi1-question42:before {
content: "\e0b9";
}
.ffi1-quiz:before {
content: "\e0ba";
}
.ffi1-regular2:before {
content: "\e0bb";
}
.ffi1-remove9:before {
content: "\e0bc";
}
.ffi1-resistor1:before {
content: "\e0bd";
}
.ffi1-ruler14:before {
content: "\e0be";
}
.ffi1-running5:before {
content: "\e0bf";
}
.ffi1-sandwich:before {
content: "\e0c0";
}
.ffi1-scales2:before {
content: "\e0c1";
}
.ffi1-school31:before {
content: "\e0c2";
}
.ffi1-school35:before {
content: "\e0c3";
}
.ffi1-school6:before {
content: "\e0c4";
}
.ffi1-science2:before {
content: "\e0c5";
}
.ffi1-scissors3:before {
content: "\e0c6";
}
.ffi1-search4:before {
content: "\e0c7";
}
.ffi1-search54:before {
content: "\e0c8";
}
.ffi1-services:before {
content: "\e0c9";
}
.ffi1-serving1:before {
content: "\e0ca";
}
.ffi1-setting:before {
content: "\e0cb";
}
.ffi1-sheep1:before {
content: "\e0cc";
}
.ffi1-shop3:before {
content: "\e0cd";
}
.ffi1-shopping66:before {
content: "\e0ce";
}
.ffi1-shopping8:before {
content: "\e0cf";
}
.ffi1-soccer32:before {
content: "\e0d0";
}
.ffi1-social19:before {
content: "\e0d1";
}
.ffi1-speech84:before {
content: "\e0d2";
}
.ffi1-square74:before {
content: "\e0d3";
}
.ffi1-stack21:before {
content: "\e0d4";
}
.ffi1-stopwatch6:before {
content: "\e0d5";
}
.ffi1-store:before {
content: "\e0d6";
}
.ffi1-student13:before {
content: "\e0d7";
}
.ffi1-student15:before {
content: "\e0d8";
}
.ffi1-student40:before {
content: "\e0d9";
}
.ffi1-students3:before {
content: "\e0da";
}
.ffi1-students5:before {
content: "\e0db";
}
.ffi1-students6:before {
content: "\e0dc";
}
.ffi1-students7:before {
content: "\e0dd";
}
.ffi1-sweet8:before {
content: "\e0de";
}
.ffi1-tags2:before {
content: "\e0df";
}
.ffi1-tags3:before {
content: "\e0e0";
}
.ffi1-talking2:before {
content: "\e0e1";
}
.ffi1-teacher12:before {
content: "\e0e2";
}
.ffi1-teacher13:before {
content: "\e0e3";
}
.ffi1-teacher4:before {
content: "\e0e4";
}
.ffi1-teacher8:before {
content: "\e0e5";
}
.ffi1-teacher9:before {
content: "\e0e6";
}
.ffi1-test17:before {
content: "\e0e7";
}
.ffi1-text87:before {
content: "\e0e8";
}
.ffi1-textile:before {
content: "\e0e9";
}
.ffi1-three115:before {
content: "\e0ea";
}
.ffi1-thumb31:before {
content: "\e0eb";
}
.ffi1-toilet1:before {
content: "\e0ec";
}
.ffi1-tools:before {
content: "\e0ed";
}
.ffi1-two174:before {
content: "\e0ee";
}
.ffi1-two185:before {
content: "\e0ef";
}
.ffi1-two28:before {
content: "\e0f0";
}
.ffi1-users1:before {
content: "\e0f1";
}
.ffi1-users2:before {
content: "\e0f2";
}
.ffi1-users5:before {
content: "\e0f3";
}
.ffi1-users6:before {
content: "\e0f4";
}
.ffi1-verified9:before {
content: "\e0f5";
}
.ffi1-view2:before {
content: "\e0f6";
}
.ffi1-wifi10:before {
content: "\e0f7";
}
.ffi1-wind15:before {
content: "\e0f8";
}
.ffi1-winners2:before {
content: "\e0f9";
}
.ffi1-woman83:before {
content: "\e0fa";
}
.ffi1-worker12:before {
content: "\e0fb";
}
.ffi1-worker2:before {
content: "\e0fc";
}
.ffi1-worker4:before {
content: "\e0fd";
}
.ffi1-workers:before {
content: "\e0fe";
}
.ffi1-writing17:before {
content: "\e0ff";
}

View File

@@ -0,0 +1,415 @@
@font-face {
font-family: "ffi2";
src: url("/assets/flatfeticon2.eot");
src: url("/assets/flatfeticon2.eot#iefix") format("embedded-opentype"),
url("/assets/flatfeticon2.woff") format("woff"),
url("/assets/flatfeticon2.ttf") format("truetype"),
url("/assets/flatfeticon2.svg") format("svg");
font-weight: normal;
font-style: normal;
}
[class^="ffi2-"]:before, [class*=" ffi2-"]:before,
[class^="ffi2-"]:after, [class*=" ffi2-"]:after {
font-family: ffi2;
font-size: normal;
font-style: normal;
margin-left: 4px;
}.ffi2-accident3:before {
content: "\e000";
}
.ffi2-alphabet3:before {
content: "\e001";
}
.ffi2-angel:before {
content: "\e002";
}
.ffi2-angry:before {
content: "\e003";
}
.ffi2-angry2:before {
content: "\e004";
}
.ffi2-angry23:before {
content: "\e005";
}
.ffi2-angry40:before {
content: "\e006";
}
.ffi2-angry41:before {
content: "\e007";
}
.ffi2-animal203:before {
content: "\e008";
}
.ffi2-annulled3:before {
content: "\e009";
}
.ffi2-bandaid:before {
content: "\e00a";
}
.ffi2-battery88:before {
content: "\e00b";
}
.ffi2-book97:before {
content: "\e00c";
}
.ffi2-boy11:before {
content: "\e00d";
}
.ffi2-boy12:before {
content: "\e00e";
}
.ffi2-business57:before {
content: "\e00f";
}
.ffi2-camouflage:before {
content: "\e010";
}
.ffi2-car65:before {
content: "\e011";
}
.ffi2-certificate7:before {
content: "\e012";
}
.ffi2-checklist4:before {
content: "\e013";
}
.ffi2-circuit4:before {
content: "\e014";
}
.ffi2-confused4:before {
content: "\e015";
}
.ffi2-cpu:before {
content: "\e016";
}
.ffi2-cpu1:before {
content: "\e017";
}
.ffi2-cry1:before {
content: "\e018";
}
.ffi2-cry2:before {
content: "\e019";
}
.ffi2-crying7:before {
content: "\e01a";
}
.ffi2-customerservice10:before {
content: "\e01b";
}
.ffi2-doubt3:before {
content: "\e01c";
}
.ffi2-doubts1:before {
content: "\e01d";
}
.ffi2-drinks48:before {
content: "\e01e";
}
.ffi2-education6:before {
content: "\e01f";
}
.ffi2-election3:before {
content: "\e020";
}
.ffi2-electronic51:before {
content: "\e021";
}
.ffi2-emoticon101:before {
content: "\e022";
}
.ffi2-emoticon82:before {
content: "\e023";
}
.ffi2-emoticon83:before {
content: "\e024";
}
.ffi2-emoticon98:before {
content: "\e025";
}
.ffi2-emoticons11:before {
content: "\e026";
}
.ffi2-family4:before {
content: "\e027";
}
.ffi2-fear3:before {
content: "\e028";
}
.ffi2-first21:before {
content: "\e029";
}
.ffi2-fright:before {
content: "\e02a";
}
.ffi2-furious3:before {
content: "\e02b";
}
.ffi2-graduate2:before {
content: "\e02c";
}
.ffi2-group58:before {
content: "\e02d";
}
.ffi2-handshake3:before {
content: "\e02e";
}
.ffi2-hatchback:before {
content: "\e02f";
}
.ffi2-help9:before {
content: "\e030";
}
.ffi2-house77:before {
content: "\e031";
}
.ffi2-illness1:before {
content: "\e032";
}
.ffi2-inadequacy:before {
content: "\e033";
}
.ffi2-incompetence:before {
content: "\e034";
}
.ffi2-indifferent:before {
content: "\e035";
}
.ffi2-kiss3:before {
content: "\e036";
}
.ffi2-laughing7:before {
content: "\e037";
}
.ffi2-laughing8:before {
content: "\e038";
}
.ffi2-lifesaver28:before {
content: "\e039";
}
.ffi2-lively:before {
content: "\e03a";
}
.ffi2-love2:before {
content: "\e03b";
}
.ffi2-mad1:before {
content: "\e03c";
}
.ffi2-man282:before {
content: "\e03d";
}
.ffi2-manager3:before {
content: "\e03e";
}
.ffi2-medical43:before {
content: "\e03f";
}
.ffi2-mobile26:before {
content: "\e040";
}
.ffi2-moustaches1:before {
content: "\e041";
}
.ffi2-mute24:before {
content: "\e042";
}
.ffi2-mute3:before {
content: "\e043";
}
.ffi2-navigation28:before {
content: "\e044";
}
.ffi2-nerd6:before {
content: "\e045";
}
.ffi2-nervous:before {
content: "\e046";
}
.ffi2-owl9:before {
content: "\e047";
}
.ffi2-palmtrees1:before {
content: "\e048";
}
.ffi2-panic1:before {
content: "\e049";
}
.ffi2-pencil32:before {
content: "\e04a";
}
.ffi2-pirate5:before {
content: "\e04b";
}
.ffi2-plus13:before {
content: "\e04c";
}
.ffi2-protection24:before {
content: "\e04d";
}
.ffi2-robot30:before {
content: "\e04e";
}
.ffi2-robotic2:before {
content: "\e04f";
}
.ffi2-rough:before {
content: "\e050";
}
.ffi2-sad34:before {
content: "\e051";
}
.ffi2-sad35:before {
content: "\e052";
}
.ffi2-sad37:before {
content: "\e053";
}
.ffi2-sad38:before {
content: "\e054";
}
.ffi2-sad39:before {
content: "\e055";
}
.ffi2-sad74:before {
content: "\e056";
}
.ffi2-sad75:before {
content: "\e057";
}
.ffi2-sad77:before {
content: "\e058";
}
.ffi2-scary:before {
content: "\e059";
}
.ffi2-serious3:before {
content: "\e05a";
}
.ffi2-severe:before {
content: "\e05b";
}
.ffi2-silhouette121:before {
content: "\e05c";
}
.ffi2-singing4:before {
content: "\e05d";
}
.ffi2-sleep1:before {
content: "\e05e";
}
.ffi2-sleepness:before {
content: "\e05f";
}
.ffi2-sleepy6:before {
content: "\e060";
}
.ffi2-smile31:before {
content: "\e061";
}
.ffi2-smile32:before {
content: "\e062";
}
.ffi2-smile33:before {
content: "\e063";
}
.ffi2-smiley41:before {
content: "\e064";
}
.ffi2-smiley42:before {
content: "\e065";
}
.ffi2-smiling35:before {
content: "\e066";
}
.ffi2-smiling36:before {
content: "\e067";
}
.ffi2-solar12:before {
content: "\e068";
}
.ffi2-spring13:before {
content: "\e069";
}
.ffi2-square103:before {
content: "\e06a";
}
.ffi2-stars53:before {
content: "\e06b";
}
.ffi2-student12:before {
content: "\e06c";
}
.ffi2-study7:before {
content: "\e06d";
}
.ffi2-stupor:before {
content: "\e06e";
}
.ffi2-surprise5:before {
content: "\e06f";
}
.ffi2-surprised:before {
content: "\e070";
}
.ffi2-surprised19:before {
content: "\e071";
}
.ffi2-surprised21:before {
content: "\e072";
}
.ffi2-surveillance1:before {
content: "\e073";
}
.ffi2-suspicions:before {
content: "\e074";
}
.ffi2-sweat1:before {
content: "\e075";
}
.ffi2-sweating3:before {
content: "\e076";
}
.ffi2-tears:before {
content: "\e077";
}
.ffi2-telephone45:before {
content: "\e078";
}
.ffi2-think7:before {
content: "\e079";
}
.ffi2-timidity:before {
content: "\e07a";
}
.ffi2-tongue1:before {
content: "\e07b";
}
.ffi2-tongue2:before {
content: "\e07c";
}
.ffi2-two128:before {
content: "\e07d";
}
.ffi2-two210:before {
content: "\e07e";
}
.ffi2-users53:before {
content: "\e07f";
}
.ffi2-very7:before {
content: "\e080";
}
.ffi2-wink:before {
content: "\e081";
}
.ffi2-wink9:before {
content: "\e082";
}
.ffi2-winking9:before {
content: "\e083";
}
.ffi2-winners1:before {
content: "\e084";
}

View File

@@ -2,39 +2,6 @@
// They will automatically be included in application.css.
// You can use Sass (SCSS) here: http://sass-lang.com/
//.modal.fade {
// top: -25%;
// transition: opacity 0.3s linear 0s, top 0.3s ease-out 0s;
//}
//.modal-gallery {
// max-height: none;
// outline: medium none;
// width: auto;
//}
//.modal {
// color: #333333;
//}
//.hide {
// display: none;
//}
//.modal {
//background-clip: padding-box;
// background-color: #FFFFFF;
// border: 1px solid rgba(0, 0, 0, 0.3);
//border-radius: 6px 6px 6px 6px;
// box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
// left: 50%;
// margin-left: -280px;
// outline: medium none;
// position: fixed;
// top: 10%;;
// z-index: 1050;
//}
//.fade {
// opacity: 0;
// transition: opacity 0.15s linear 0s;
//}
div.gallery-block
{
padding: 10px;

View File

@@ -0,0 +1,134 @@
html {
background-color: #fff;
overflow: hidden;
}
body {
display: flex;
flex-flow: wrap;
height: 100vh;
justify-content: space-between;
flex-direction: column;
}
.header {
height: 200px;
width: 100%
}
svg {
padding-top: 2em;
}
.impulsPath {
fill: none;
stroke: #04669c;
stroke-miterlimit: 1;
stroke-width: 6px;
stroke-dasharray: 1946.243;
stroke-dashoffset: 0;
stroke-linejoin: round;
stroke-linecap: round;
animation: dash 10s ease-out infinite;
animation-direction: normal;
}
.FET-logotext-stroke {
fill: #fff;
}
#FET-logotext {
opacity: 0;
animation: logotext 10s ease-in infinite;
}
.content-area {
height: auto;
width: 100%;
}
.footer {
width: 100%;
height: 150px;
background-color: #04669c;
padding-bottom: 10px;
display: flex;
flex-wrap: nowrap;
justify-content: space-between;
color: #fff;
flex-basis: bottom;
}
.footer h3,
p {
margin: 0;
padding: 0 20px;
font-family: Helvetica, Arial;
letter-spacing: 0.1em;
}
.footer h3 {
padding-top: 20px;
}
.footer .adress {
margin: auto;
text-align: left;
}
.footer .contact {
margin: auto;
text-align: center;
}
.footer .servicecontainer{
display: inline-flex;
margin: auto;
}
.footer .servicecontainer .servicetime {
margin: auto;
text-align: right;
}
.footer .servicecontainer .servicetime #time {
font-size: 0.7em
}
.footer .servicecontainer .servicestatus{
margin: auto;
width:20px;
height: 100vh; /* height: 100%;*/
padding-right: 30px;
background-color: #fff;
}
/*K E Y F R A M E S*/
@keyframes dash {
from {
stroke-dashoffset: 1946.243;
opacity: 0;
stroke-width: 0.5;
}
to {
opacity: 1;
stroke-dashoffset: 0;
stroke-width: 5px;
}
}
@keyframes logotext {
from {
opacity: 0;
}
to {
opacity: 1;
}
}

View File

@@ -1,3 +1,13 @@
@import 'blueimp-gallery-all';
.left
{
float: left;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
/* etc. */
}
h1 {
font-size: 23px
}
@@ -6,6 +16,17 @@ h2 {
font-size: 19px
}
h3 {
font-size: 16px
}
h4 {
font-size: 14px
}
body,html {
padding:0;
margin:0;
@@ -15,52 +36,24 @@ a:hover {
text-decoration:none;
}
@import 'tinymce';
@import 'fetlogo';
@import 'flatfeticon1';
@import 'flatfeticon2';
ul.linkbox-list
{
max-width:70em;
}
a.linkbox, div.contentbox
{
display:block;
padding:5px;
border-radius:$box-border-radius;
border: $box-border;
background: $box-background;
}
a.linkbox:hover
{
box-shadow: 1px 1px 2px 2px lightgray;
}
a.linkbox li
{
}
ul.linkbox-list li
{
margin-bottom:10px;
}
div.contentbox
{
margin: 5px;
}
div.content-column {
max-width:70em;
max-width:70em;
}
div.content-wrap {
margin-left:auto;
margin-right:auto;
margin-left:auto;
margin-right:auto;
}
#contentdiv
@@ -91,3 +84,81 @@ div.smallspan {
}
form.inline div {
float:left;}
form.inline input {
}
form.inline {
float:clear; }
@import 'tinymce';
a.flag-true { color: $color_schema_3_dark}
a.flag-true.flag-goodquality-true { color: green}
a.flag-true.flag-template-true {color: $color_schema_1_dark}
a.flag-false { color: #CCC}
ul.ui-menu
{list-style-type:none;
}
ul.ui-menu > li > a
{
padding:2px;
padding-left:10px;
cursor: pointer;
}
a.choice-true
{font-weight: bold;}
a.choice-false
{color:grey}
ul.choice-list
{list-style-type: none;
margin:0;
}
ul.choice-list > li
{
}
ul.choice-list > li > a {
line-height:normal;
}
ul.choice-list > li > a > i {
font-size:3em;
}
ul.choice-list > li > a.btn > i {
font-size:1em;
}
a.choice > i {font-size: 32px}
span.highcharts-axis-labels > i {
font-size:32px}
div.toolbar-inline > div.dropdown
{ display:inline;
}
div.btn-toolbar > div.dropdown > ul.dropdown-menu
{ font-size: small;
}
.fa-stack {
height: 1em;}
.fa-stack-sm > .fa-stack
{postion:relative;
top:-7px;
width:2em;
}
.fa-stack-sm {
height:1em;
line-height:1em;
width:1em;
height:1em;
}
.btn.stacked {
padding-left:4px;
padding-right:4px;
}

View File

@@ -0,0 +1,61 @@
ul.linkbox-list
{
max-width:70em;
margin-left:auto;
margin-right:auto;
}
a.linkbox, div.contentbox
{
display:block;
padding:5px;
border-radius:$box-border-radius;
border: $box-border;
background: $box-background;
}
a.linkbox:hover{ box-shadow: 1px 1px 2px 2px lightgray; }
a.linkbox.color-1 { color:$color_schema_1; }
a.linkbox.color-2 { color:$color_schema_2; }
a.linkbox.color-3 { color:$color_schema_3; }
a.linkbox.color-4 { color:$color_schema_4;}
a.linkbox.color-5 { color:$color_schema_5;}
a.color-1-dark { color:$color_schema_1_dark; }
a.color-2-dark { color:$color_schema_2_dark; }
a.color-3-dark { color:$color_schema_3_dark;}
a.color-4-dark { color:$color_schema_4_dark;}
a.color-5-dark { color:$color_schema_5_dark;}
a.color-1-dark:hover { color:$color_schema_1; }
a.color-2-dark:hover { color:$color_schema_2; }
a.color-3-dark:hover { color:$color_schema_3; }
a.color-4-dark:hover { color:$color_schema_4; }
a.color-5-dark:hover { color:$color_schema_5; }
a.linkbox li { }
ul.linkbox-list li {
margin-bottom:10px;
}
ul.linklist {
max-width:100%;
padding:0;
margin:5px;
}
ul.linklist li {
list-style:none;
margin-bottom:2px;
}
ul.linklist li a i{
vertical-align:middle;
margin-right:6px;
font-size:2em;}
span.linklist a {
padding:5px;
border-radius:$box-border-radius;
border: $box-border;
background: $box-background;
display:block;
float:left;
}

View File

@@ -0,0 +1,3 @@
// Place all the styles related to the meetings controller here.
// They will automatically be included in application.css.
// You can use Sass (SCSS) here: http://sass-lang.com/

View File

@@ -0,0 +1,3 @@
// Place all the styles related to the meetingtyps controller here.
// They will automatically be included in application.css.
// You can use Sass (SCSS) here: http://sass-lang.com/

View File

@@ -12,3 +12,7 @@ padding:10px;
div .neuigkeit_block:hover {
box-shadow: 1px 1px 2px 2px lightgray;
}
a.unpublished div.media{
background: rgb(255, 188, 99);
}

View File

@@ -0,0 +1,19 @@
@page :first {
@bottom-right-corner {
content: none
}
}
@page {
@top-center {
content: element(heading);
}
@left-top {
}
@bottom-right-corner {
content: counter(page)
}
}
#rh {
position: running(header);
}

View File

@@ -0,0 +1,3 @@
// Place all the styles related to the Survey::answers controller here.
// They will automatically be included in application.css.
// You can use Sass (SCSS) here: http://sass-lang.com/

View File

@@ -0,0 +1,3 @@
// Place all the styles related to the Survey::choices controller here.
// They will automatically be included in application.css.
// You can use Sass (SCSS) here: http://sass-lang.com/

View File

@@ -0,0 +1,3 @@
// Place all the styles related to the Survey::questions controller here.
// They will automatically be included in application.css.
// You can use Sass (SCSS) here: http://sass-lang.com/

View File

@@ -1,22 +1,19 @@
// Place all the styles related to the themengruppen controller here.
// They will automatically be included in application.css.
// You can use Sass (SCSS) here: http://sass-lang.com/
div.themengruppe
{padding:10px;
margin:2px;
border-radius: 10px;
min-width:13em;
border: #91B4FF solid 0px;
height: 90%
}
a.themengruppe:hover
{
box-shadow: 1px 1px 2px 2px lightgray;
}
a.themengruppe
div.sticker
{
width: 90%;
border-radius: 5px;
text-align: center;
padding: 5px;
display:block;
margin:auto;
}
div.sticker-red
{ border:solid red;
}
div.sticker-yellow
{ background: yellow;
}

View File

@@ -1,93 +0,0 @@
/*
* This is a manifest file that'll be compiled into application.css, which will include all the files
* listed below.
*
* Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
* or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path.
*
* You're free to add application-wide styles to this file and they'll appear at the top of the
* compiled file, but it's generally better to create a new file per style scope.
*
*= require_self
* require_tree .
*= require jquery.fileupload-ui
* require 'bootstrap'
* require 'neuigkeiten'
*/
// Colorshema #0A64A4
$color_prim: #7070a0;
$color_prim_light: lighten($color_prim ,10%);
$color_prim_vlight: lighten($color_prim ,30%);
$color_prim_dark: darken($color_prim ,10%);
$color_prim_vdark: darken($color_prim ,30%);
$color_cont: FFDB73;
$color_cont_light:FFDB73;
$linkColor: $color_prim_vdark;
$white: #FFFFFF;
$bodyBackground: #EEE;
$navbarBackground: $color_prim;
$navbarText: black;
$navbarLinkColor: $color_prim_vdark;
$navbarLinkColorHover: black;
$dropdownLinkColor: black;
$navbar-default-brand-color: black;
$navbarBrandColor:black;
$navbarBackgroundHighlight: $color_prim;
//$navbarBackgroundHighlight:#FFFFFF;
$navbarLinkBackgroundHover:#FFBE00;
$navbarLinkBackgroundHover: darken($navbarBackground,10%);
$infoBackground:#65A5D1;
$infoText:#03406A;
$sansFontFamily: Helvetica, Arial;
@import 'bootstrap';
@import 'bootstrap-responsive';
@import 'bootstrap/image-gallery';
@import 'neuigkeiten';
@import 'font-awesome';
div.header {
display: block;
// background: url('../../../../header1.png') no-repeat;
// background-color:white;// $color_prim;
background-position: right;
border-bottom:1px solid black;
float:left;
color:#000;
padding-left:87px;
padding-top:0px;
// overflow:hidden;
margin-bottom: 0 px
}
div.header h1 {
padding:0;
margin:4px;
font-size:20px;
line-height:32px;
}
div.headerrow {
background: $color_prim
}
$contentdiv-background:none;
$navbar-li-minwidth: 0;
$box-border: lightgray solid 1px;
$box-border-radius:8px;
$box-background: white;
@import 'layout';
@import 'calendars';

View File

@@ -1,5 +0,0 @@
@import "bootstrap/responsive";
@media (max-width: 979px){
.earlymax {
min-width: 100%;
}}

View File

@@ -1,4 +0,0 @@
#content
{
background:red;
}

View File

@@ -1,114 +0,0 @@
/*
* This is a manifest file that'll be compiled into application.css, which will include all the files
* listed below.
*
* Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
* or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path.
*
* You're free to add application-wide styles to this file and they'll appear at the top of the
* compiled file, but it's generally better to create a new file per style scope.
*
*= require_self
* require_tree .
*= require jquery.fileupload-ui
* require 'bootstrap'
* require 'neuigkeiten'
*/
// Colorshema #0A64A4
$color_prim: #071672;
$color_prim_light: lighten($color_prim ,10%);
$color_prim_vlight: lighten($color_prim ,30%);
$color_prim_dark: darken($color_prim ,10%);
$color_prim_vdark: darken($color_prim ,30%);
$color_cont: FFDB73;
$color_cont_light:FFDB73;
$linkColor: $color_prim;
$white: #FFFFFF;
$bodyBackground: #EEE;
$navbarBackground: $color_prim;
$navbarText: $white;
$navbarLinkColor: $white;
$navbarLinkColorHover: white;
$dropdownLinkColor: black;
$navbar-default-brand-color: black;
$navbarBrandColor:black;
$navbarBackgroundHighlight: $color_prim;
//$navbarBackgroundHighlight:#FFFFFF;
$navbarLinkBackgroundHover:#FFBE00;
$navbarLinkBackgroundHover: darken($navbarBackground,10%);
$infoBackground:#65A5D1;
$infoText:#03406A;
@font-face {
font-family: 'ayuma2yk';
src:font-url('Ayuma2yk.ttf');}
@font-face {
font-family: 'cmunrm';
src: font-url('cmunrm.eot');
src: font-url('cmunrm.eot') format('embedded-opentype'),
font-url('cmunrm.woff') format('woff'),
font-url('cmunrm.ttf') format('truetype'),
font-url('cmunrm.svg') format('svg');
font-weight: normal;
font-style: normal;
}
$sansFontFamily: cmunrm, Helvetica, Arial;
@import 'bootstrap';
@import 'bootstrap-responsive';
@import 'bootstrap/image-gallery';
@import 'font-awesome';
@import 'neuigkeiten';
@import 'fetlogo';
#menudiv {
font-family: ayuma2yk;
}
div.header {
display: block;
// background: url('../../../../header1.png') no-repeat;
// background-color:white;// $color_prim;
background-position: right;
font-family: ayuma2yk;
// border-bottom:1px solid black;
float:left;
color:#000;
padding-left:87px;
padding-top:0px;
// overflow:hidden;
margin-bottom: 0 px
}
div.header h1 {
padding:0;
margin:4px;
font-size:20px;
line-height:32px;
}
div.headerrow {
background: $color_prim
}
$contentdiv-background:none;
$navbar-li-minwidth: 0;
$box-border: lightgray solid 1px;
$box-border-radius:0px;
$box-background: white;
@import 'layout';
@import 'calendars';

View File

@@ -1,76 +0,0 @@
/*
* This is a manifest file that'll be compiled into application.css, which will include all the files
* listed below.
*
* Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
* or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path.
*
* You're free to add application-wide styles to this file and they'll appear at the top of the
* compiled file, but it's generally better to create a new file per style scope.
*
*= require_self
* require_tree .
*= require jquery.fileupload-ui
* require 'bootstrap'
* require 'neuigkeiten'
*/
$color_prim: #0A64A4;
$color_prim_light: #0B65A5;
$color_prim_vlight: #2B85C5;
$color_cont: FFDB73;
$color_cont_light:FFDB73;
$linkColor: #03006E;
$white: #FFFFFF;
$bodyBackground: $white;
$navbarBackground: $color_cont;
$navbarBackground: #FFFFFF;
$navbarBackgroundHighlight:lighten($navbarBackground,30%);
//$navbarBackgroundHighlight:#FFFFFF;
$navbarLinkBackgroundHover:#FFBE00;
$navbarLinkBackgroundHover: lighten(#cccccc,10%);
$infoBackground:#65A5D1;
$infoText:#03406A;
$sansFontFamily: Helvetica, Arial;
@import 'bootstrap';
@import 'bootstrap-responsive';
@import 'bootstrap/image-gallery';
@import 'font-awesome';
@import 'neuigkeiten';
div.header {
display: block;
// background: url('/header1.png') no-repeat;
background-color: #FFF;
background-position: right;
border-bottom:1px solid black;
height:41px;
color:#000;
padding-left:87px;
padding-top:0px;
overflow:hidden;
margin-bottom: 20px
}
div.header h1 {
padding:0;
margin:4px;
font-size:20px;
line-height:32px;
}
div.headerrow {
background: $white
}
$navbar-li-minwidth: 100%;
$contentdiv-background:none;
$box-border: lightgray solid 1px;
$box-border-radius:8px;
$box-background: white;
@import 'layout';
@import 'calendars';

View File

@@ -0,0 +1,22 @@
i.mce-i-fa {
font: 400 17px/1 FontAwesome;
padding: 0;
vertical-align: middle;
speak: none;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
margin-left: -2px;
padding-right: 2px
}
i.fa-red { color:red; }
.mc-important {
color: red;
font-weight:bold;
text-align: center;
}
div.article {
border: thin dotted black;
}
@import 'flatfeticon1'

View File

@@ -1,27 +1,74 @@
class ApplicationController < ActionController::Base
protect_from_forgery
before_filter :set_i18n_locale_from_params
protected
theme :get_theme
def set_i18n_locale_from_params
if params[:locale]
if I18n.available_locales.include?(params[:locale].to_sym)
I18n.locale=params[:locale].to_sym
session[:locale] = params[:locale]
else
flash.now[:notice]= "#{params[:locale]} translation not available"
logger.error flash.now[:notice]
end
end
end
def get_theme
if ThemesForRails.available_theme_names.include?(params[:theme])
params[:theme]
http_header=request.env['HTTP_ACCEPT_LANGUAGE']
unless http_header.nil?
ht= http_header.scan(/^de|en/).first
else
ht=nil
end
I18n.locale = session[:locale] || I18n.default_locale
# removed ht from selection add || ht to check http header
else
"blue1"
end
session[:locale] = I18n.locale
end
def after_sign_in_path_for(resource)
sign_in_url = new_user_session_path(:only_path => false, :protocol => 'http')
if request.referer == sign_in_url
super
else
stored_location_for(resource) || root_path
end
end
rescue_from CanCan::AccessDenied do |exception|
if user_signed_in?
flash[:error] = "Not authorized to view this page"
session[:user_return_to] = nil
respond_to do |format|
format.html {redirect_to root_url}
format.js {render text:"alert(\"Not authorized to do this\");", status: 401}
end
else
flash[:error] = "You must first login to view this page"
session[:user_return_to] = request.url
return redirect_to "/users/sign_in"
end
end
def get_theme
u=current_user
if ! u.try(:preferredtheme).nil? and ThemesForRails.available_theme_names.include?(u.preferredtheme)
u.preferredtheme
else
"blue2"
end
end
def current_ability
@current_ability ||= Ability.new(current_user, request, params[:key])
end
def default_url_options
{locale: I18n.locale, theme: theme_name, ansicht: nil}
{locale: nil, theme: nil , ansicht: nil} # I18n.locale
end
end

View File

@@ -3,7 +3,7 @@ class AttachmentsController < ApplicationController
# GET /attachments.json
load_and_authorize_resource
def index
@attachments = Attachment.all
# @attachments = Attachment.all
respond_to do |format|
format.html # index.html.erb
@@ -11,23 +11,47 @@ class AttachmentsController < ApplicationController
end
end
# GET /attachments/1
# GET /attachments/1.json
# GET
# sets the titlepic flag for one attachment for one parent object
def set_titlepic
@attachment = Attachment.find(params[:id])
if @attachment.image? # if attachment is an Image set flag
@attachment.parent.attachments.update_all("flag_titlepic=0")
@attachment.flag_titlepic=true
@attachment.save
end
respond_to do |format|
format.html {
redirect_to @attachment}
format.js {
@parent=@attachment.parent
@attachments=@parent.attachments
render :refresh_list
}
end
end
# GET refresh_list
# refresh the attachment list for a parent object
def refresh_list
@parent = params[:parent_type].constantize.find(params[:parent_id])
@attachments=@parent.attachments
respond_to do |format|
format.js
end
end
#get /attachments/ID
def show
@attachment = Attachment.find(params[:id])
respond_to do |format|
format.html # show.html.erb
format.json { render json: @attachment }
end
end
# GET /attachments/new
# GET /attachments/new.json
def new
@attachment = Attachment.new
@thema = Thema.find(params[:thema_id])
@attachment.thema = @thema
@attachment.thema = @thema
respond_to do |format|
format.html # new.html.erb
@@ -49,10 +73,8 @@ class AttachmentsController < ApplicationController
@thema = Thema.find_by_id(params[:thema_id])
# logger.info "gg"
@attachment.thema = @thema
@attachment.name=@attachment.datei.filename
@action="create"
@attachment.name=@attachment.datei.filename
@action="create"
# logger.info "sdf"
respond_to do |format|
if @attachment.save
@@ -77,11 +99,11 @@ class AttachmentsController < ApplicationController
# PUT /attachments/1.json
def update
@attachment = Attachment.find(params[:id])
@thema = @attachment.thema
@parent= @attachment.parent
respond_to do |format|
if @attachment.update_attributes(params[:attachment])
format.html { redirect_to @thema, notice: 'Attachment was successfully updated.' }
format.html { redirect_to @parent, notice: 'Attachment was successfully updated.' }
format.json { head :no_content }
format.js {@attachment=Attachment.new; render action:"create"}
else

View File

@@ -1,14 +1,19 @@
class BeispieleController < ApplicationController
# GET /beispiele
# GET /beispiele.json
load_and_authorize_resource
def index
@beispiele = Beispiel.all
respond_to do |format|
format.html # index.html.erb
format.json { render json: @beispiele }
end
load_and_authorize_resource
include LikeVoteable
acts_as_flagable
def index
# unless params[:lva_id].nil?
# @beispiele= Lva.find(params[:lva_id]).beispiele.accessible_by(current_ability, :show)
# else
# @beispiele = Beispiel.accessible_by(current_ability, :show)
# end
# respond_to do |format|
# format.html # index.html.erb
# format.json { render json: @beispiele }
# end
end
# GET /beispiele/1
@@ -16,7 +21,10 @@ class BeispieleController < ApplicationController
def show
# @lva = params([:lva]) unless params([:lva]).nil?
@beispiel = Beispiel.find(params[:id])
redirect_to @beispiel.lva
respond_to do |format|
format.html { redirect_to lva_path(@beispiel.lva , show_comments: params[:show_comments])}
format.js
end
end
# GET /beispiele/new
@@ -24,6 +32,7 @@ class BeispieleController < ApplicationController
def new
@beispiel = Beispiel.new
@beispiel.lva = Lva.find_by_id(params[:lva_id])
@beispiel.flag_delete=false
@backlink = @beispiel.lva.nil? ? root_url : lva_path(@beispiel.lva)
respond_to do |format|
format.html # new.html.erb
@@ -31,6 +40,23 @@ class BeispieleController < ApplicationController
end
end
def set_lecturer
@beispiel = Beispiel.find(params[:id])
@beispiel.lecturer = Lecturer.find(params[:beispiel][:lecturer_id])
@beispiel.save
if @beispiel.save
format.html { redirect_to @backlink, notice: 'Beispiel was successfully updated.' }
format.js {render text: "alert(\"updated\");"}
format.json { head :no_content }
else
format.html { render action: "edit" }
format.js
format.json { render json: @beispiel.errors, status: :unprocessable_entity }
end
end
# GET /beispiele/1/edit
def edit
@beispiel = Beispiel.find(params[:id])
@@ -42,30 +68,44 @@ class BeispieleController < ApplicationController
logger.info "Creating Beispiel..."
@lva = Lva.find_by_id(params[:lva_id])
params.delete(:lva_id)
params[:beispiel][:flag_delete]=false
@beispiel = Beispiel.new(params[:beispiel])
@beispiel.lva=@lva
logger.info "New Beispiel: #{params.inspect}"
@beispiel.flag_delete=false
logger.info "New Beispiel: #{params.inspect}"
@beispiel.name=@beispiel.beispieldatei.filename
logger.info "New Beispiel: #{@beispiel.attributes.inspect}"
# @backlink = @beispiel.lva.nil? ? root_url : lva_path(@beispiel.lva)
@beispiel.name=@beispiel.beispieldatei.filename
logger.info "New Beispiel: #{@beispiel.attributes.inspect}"
@beispiel.datum=Time.now
respond_to do |format|
if @beispiel.save
format.html {
render :json => [@beispiel.to_jq_upload].to_json,
:content_type => 'text/html',
:layout => false
}
format.json { render json: {files: [@beispiel.to_jq_upload]}, status: :created, location: [@lva, @beispiel] }
# format.html { redirect_to @backlink, notice: 'Beispiel was successfully created.' }
# format.json { render json: @beispiel, status: :created, location: @beispiel }
unless @lva.nil?
@beispiel.lva=@lva
@beispiel.datum=Time.now
if @beispiel.save
format.html {
render :json => [@beispiel.to_jq_upload].to_json,
:content_type => 'text/html',
:layout => false
}
format.json { render json: {files: [@beispiel.to_jq_upload]}, status: :created, location: [@lva, @beispiel] }
# format.html { redirect_to @backlink, notice: 'Beispiel was successfully created.' }
# format.json { render json: @beispiel, status: :created, location: @beispiel }
else
format.html { render action: "new" }
format.json { render json: @beispiel.errors, status: :unprocessable_entity }
end
else
format.html { render action: "new" }
format.json { render json: @beispiel.errors, status: :unprocessable_entity }
if @beispiel.update_attributes(params[:beispiel])
@backlink = Lva.find(@beispiel.lva)
format.html { redirect_to @backlink, notice: 'Beispiel was successfully uploaded.'}
format.json { head :no_content }
else
format.html { render action: "new" }
format.json { render json: @beispiel.errors, status: :unprocessable_entity }
end
end
end
end
@@ -74,11 +114,14 @@ class BeispieleController < ApplicationController
def update
@beispiel = Beispiel.find(params[:id])
@beispiel.name=@beispiel.beispieldatei.to_s.split('/').last
@backlink = @beispiel.lva.nil? ? root_url : lva_path(@beispiel.lva)
@backlink = @beispiel.lva.nil? ? root_url : lva_path(@beispiel.lva)
params[:beispiel].delete :beispieldatei
params[:beispiel].delete :beispieldatei_cache
@lva = @beispiel.lva
respond_to do |format|
if @beispiel.update_attributes(params[:beispiel])
format.html { redirect_to @backlink, notice: 'Beispiel was successfully updated.' }
format.js {render action: "show"}
format.json { head :no_content }
else
format.html { render action: "edit" }
@@ -91,7 +134,7 @@ class BeispieleController < ApplicationController
# DELETE /beispiele/1.json
def destroy
@beispiel = Beispiel.find(params[:id])
@backlink = @beispiel.lva.nil? ? root_url : lva_path(@beispiel.lva)
@backlink = @beispiel.lva.nil? ? root_url : lva_path(@beispiel.lva)
@beispiel.destroy
respond_to do |format|

View File

@@ -3,12 +3,13 @@ class CalendarsController < ApplicationController
# GET /calendars.json
load_and_authorize_resource
def index
@calendars = Calendar.all
@calentries = Calentry.all
@calendars = Calendar.accessible_by(current_ability,:show)
@calentries =@calendars.map{|c| c.calentries }.flatten
respond_to do |format|
format.html # index.html.erb
format.json { render json: @calendars }
format.ics
end
end
@@ -37,6 +38,11 @@ class CalendarsController < ApplicationController
# GET /calendars/1/edit
def edit
@calendar = Calendar.find(params[:id])
respond_to do |format|
format.html # new.html.erb
format.js
end
end
# POST /calendars

View File

@@ -2,14 +2,13 @@ class CalentriesController < ApplicationController
# GET /calentries
# GET /calentries.json
load_and_authorize_resource
# def index
# @calentries = Calentry.all
def index
# respond_to do |format|
# format.html # index.html.erb
# format.json { render json: @calentries }
# end
# end
respond_to do |format|
format.html {redirect_to rubriken_path}
end
end
# GET /calentries/1
# GET /calentries/1.json
@@ -25,36 +24,43 @@ class CalentriesController < ApplicationController
# GET /calentries/new
# GET /calentries/new.json
# def new
# @calentry = Calentry.new
# respond_to do |format|
# format.html # new.html.erb
# format.json { render json: @calentry }
# end
# end
def new
@calentry = Calentry.new
@calentry.object=params[:object_type].constantize.find(params[:object_id])
@calentry.typ=1
respond_to do |format|
format.html # new.html.erb
format.json { render json: @calentry }
format.js
end
end
# GET /calentries/1/edit
#def edit
# @calentry = Calentry.find(params[:id])
# end
def edit
@calentry = Calentry.find(params[:id])
respond_to do |format|
format.html
format.js
end
end
# POST /calentries
# POST /calentries.json
# def create
# @calentry = Calentry.new(params[:calentry])
def create
@calentry = Calentry.new(params[:calentry])
# respond_to do |format|
# if @calentry.save
# format.html { redirect_to @calentry, notice: 'Calentry was successfully created.' }
# format.json { render json: @calentry, status: :created, location: @calentry }
# else
# format.html { render action: "new" }
# format.json { render json: @calentry.errors, status: :unprocessable_entity }
# end
# end
# end
respond_to do |format|
if @calentry.save
format.html { redirect_to @calentry, notice: 'Calentry was successfully created.' }
format.json { render json: @calentry, status: :created, location: @calentry }
format.js
else
format.html { render action: "new" }
format.json { render json: @calentry.errors, status: :unprocessable_entity }
format.js { render action: "new" }
end
end
end
# PUT /calentries/1
# PUT /calentries/1.json
@@ -65,9 +71,11 @@ class CalentriesController < ApplicationController
if @calentry.update_attributes(params[:calentry])
format.html { redirect_to @calentry, notice: 'Calentry was successfully updated.' }
format.json { head :no_content }
format.js
else
format.html { render action: "edit" }
format.json { render json: @calentry.errors, status: :unprocessable_entity }
format.js { render action: "edit"}
end
end
end
@@ -75,12 +83,16 @@ class CalentriesController < ApplicationController
# DELETE /calentries/1
# DELETE /calentries/1.json
def destroy
logger.info("-------------delete------------------")
@calentry = Calentry.find(params[:id])
@calentry_id = params[:id]
@object=@calentry.object
@calentry.destroy
respond_to do |format|
format.html { redirect_to calentries_url }
format.html { redirect_to @object}
format.json { head :no_content }
format.js
end
end
end

View File

@@ -0,0 +1,100 @@
class CommentsController < ApplicationController
load_and_authorize_resource
before_filter :decode_commentable_type
def index
@commentable=params[:commentable_type].constantize.find(params[:commentable_id]) unless params[:commentable_type].nil? or params[:commentable_id].nil?
if @commentable.nil?
render status: 404
else
@comments=@commentable.comments.order(:created_at).roots.accessible_by(current_ability, :show).page(params[:page]).per(Comment::NUM[params[:commentable_type]]).reverse_order
respond_to do |format|
format.js
end
end
end
def hide
@commentable=params[:commentable_type].constantize.find(params[:commentable_id]) unless params[:commentable_type].nil? or params[:commentable_id].nil?
respond_to do |format|
format.js
end
end
def show
@comment = Comment.find(params[:id])
respond_to do |format|
format.js
format.html {redirect_to @comment.commentable}
end
end
def new
@comment = Comment.new
@comment.commentable=params[:commentable_type].constantize.find(params[:commentable_id]) unless params[:commentable_type].nil? or params[:commentable_id].nil?
authorize! :comment, @comment.commentable
respond_to do |format|
format.js
end
end
# GET /comments/1/edit
def edit
@comment = Comment.find(params[:id])
end
# POST /comments
# POST /comments.json
def create
params_new= params[:comment].select {|i| !["commentable_id", "commentable_type"].include?(i)}
c = params[:comment][:commentable_type].constantize.find(params[:comment][:commentable_id]) unless params[:comment][:commentable_type].nil? or params[:comment][:commentable_id].nil?
authorize! :comment, c
@comment = Comment.build_for(c, current_user,"", params_new)
@commentable=c
if @comment.parent_object.class==Comment
@comments= @comment.parent_object.children
else
@comments=@comment.parent_object.comments.order(:created_at).roots.page(params[:page]).per(Comment::NUM[params[:commentable_type]]).reverse_order
end
respond_to do |format|
if @comment
format.js
else
format.js {render action:"new"}
end
end
end
# PUT /comments/1
# PUT /comments/1.json
def update
params[:comment].select! {|i| !["commentable_id", "commentable_type"].include?(i)}
@comment = Comment.find(params[:id])
@comment.commentable=params[:comment][:commentable_type].constantize.find(params[:comment][:commentable_id]) unless params[:comment][:commentable_type].nil? or params[:comment][:commentable_id].nil?
respond_to do |format|
if @comment.update_attributes(params[:comment])
format.html { redirect_to @comment.commentable, notice: 'Comment was successfully updated.' }
else
format.html { render action: "edit" }
end
end
end
# DELETE /comments/1
# DELETE /comments/1.json
def destroy
@comment = Comment.find(params[:id])
@commentable=@comment.commentable
@comment.destroy
@comments=@commentable.comments.order(:created_at).roots.page(params[:page]).per(Comment::NUM[params[:commentable_type]]).reverse_order
respond_to do |format|
format.js
end
end
private
def decode_commentable_type
params[:commentable_type].gsub!("_","::") unless params[:commentable_type].nil?
end
end

View File

@@ -4,4 +4,6 @@ class ConfigController < ApplicationController
end
def choose_contact_topics
end
end

View File

@@ -0,0 +1,36 @@
class CrawlerController < ApplicationController
def index
authorize! :doadmin, User
@crawlobjs=Crawlobject.where(:objtype=>5).order(:published_at).reverse_order
@crawlobjs_etit=Crawlobject.where(:objtype=>6).order(:published_at).reverse_order
end
def load_attachments
authorize! :doadmin, User
c = Crawlobject.find(params[:id])
if c.has_attachments?
c.load_attachments
end
respond_to do |format|
format.html {redirect_to c.something}
format.js
end
end
def move_to_news
authorize! :doadmin, User
co=Crawlobject.find(params[:id])
if co.objtype == 5 || co.objtype==6
co.move_to_neuigkeit(User.find(Rails.configuration.crawlconfig[co.objtype]["user_id"]), Rubrik.find(Rails.configuration.crawlconfig[co.objtype]["rubrik_id"]))
redirect_to co.something
end
end
def do_crawl_news
Crawlobject.crawl_news(5)
Crawlobject.crawl_news(6)
redirect_to action: :index
end
end

View File

@@ -0,0 +1,174 @@
class DocumentsController < ApplicationController
# require('etherpad-lite')
load_and_authorize_resource
def index
respond_to do |format|
format.html {redirect_to rubriken_path}
end
end
def new
@document=Document.new
@parent=params[:parent_type].constantize.find(params[:parent_id])
@document.parent=@parent
@document.typ = 1
respond_to do |format|
format.js
end
end
def edit
@document = Document.find(params[:id])
@parent=@document.parent
respond_to do |format|
format.js
format.html
end
end
def sanitize
@document = Document.find(params[:id])
@document.sanitize
@parent=@document.parent
render :edit
end
def show
@document = Document.find(params[:id])
respond_to do |format|
format.pdf { send_file @document.create_pdf.path }
format.html
end
end
def dump_to_etherpad
@document = Document.find(params[:id])
@document.dump_to_etherpad
@document.save
# author = ether.author('author_1')
# pad=group.pad(@document.etherpadkey)
# pad.html='<div>'+@document.text+'</div>'
redirect_to action: :show
end
def read_from_etherpad
@document = Document.find(params[:id])
@document.read_from_etherpad
@document.save
render :show
end
def write_etherpad
@document = Document.find(params[:id])
ether=Document.ether
author = Document.ether.author("fetsite_"+current_user.uid, :name => current_user.text)
session[:ep_sessions]={} if session[:ep_sessions].nil?
group=@document.ep_group
sess = session[:ep_sessions][group.id] ? ether.get_session(session[:ep_sessions][group.id]) : group.create_session(author, 300)
if sess.expired?
sess.delete
sess = group.create_session(author, 300)
end
session[:ep_sessions][group.id] = sess.id
# Set the EtherpadLite session cookie. This will automatically be picked up by the jQuery plugin's iframe.
cookies[:sessionID] = {value: sess.id.to_s, domain: %w(.fet.at), expires: 5.hour.from_now}
#cookies[:sessionID] = {:value => sess.id}
cookies[:sessionID]= {value: sess.id, expires: 5.hour.from_now}
# cookies[:sdf]=sess.id
# pad=ether.pad(@document.etherpadkey)
# redirect_to "http://www.fet.at/etherpad/p/"+@document.ep_pad.id
#render :write
end
def write
@document = Document.find(params[:id])
if @document.is_etherpad? && params[:versionid].nil?
redirect_to action: :write_etherpad
else
unless params[:versionid].nil?
v=@document.versions.find(params[:versionid])
if v.reify.nil?
v=v.next
end
@document=v.reify
end
@parent=@document.parent
respond_to do |format|
format.html {render :edit}
end
end
end
def create
@document = Document.new(params[:document])
@parent=@document.parent
respond_to do |format|
if @document.save
# format.html { redirect_to @document, notice: 'Document was successfully created.' }
#format.json { render json: @document, status: :created, location: @document }
format.js
else
# format.html { render action: "new" }
# format.json { render json: @document.errors, status: :unprocessable_entity }
format.js { render action: "new" }
end
end
end
def update
@document = Document.find(params[:id])
@parent=@document.parent
respond_to do |format|
if @document.update_attributes(params[:document])
format.html { redirect_to @document, notice: 'Document was successfully updated.' }
format.json { head :no_content }
format.js
else
# format.html { render action: "edit" }
# format.json { render json: @document.errors, status: :unprocessable_entity }
format.js { render action: "edit"}
end
end
end
def destroy
logger.info("-------------delete------------------")
@document = Document.find(params[:id])
@parent=@document.parent
@document_id = params[:id]
@document.destroy
respond_to do |format|
#format.html { redirect_to @object}
#format.json { head :no_content }
format.js
end
end
def search
unless params['query'].nil? || params['query'].empty?
@results = Document.search do
fulltext params['query'] do
fields :name, :text, :meeting
highlight :text,:name,:meeting
end
end
@res=[]
@results.results.each do |r|
@res << r if can?(:show,r)
end
end
respond_to do |format|
format.html { redirect_to action: :intern}
format.js
end
end
end

View File

@@ -0,0 +1,22 @@
class EmailsController < ApplicationController
before_filter :authorize
def index
end
def daily_reminder
ActionMailer::Base.default_url_options[:host] = request.host_with_port
@mail =NewsMailer.daily_reminder(current_user.id)
if params[:send]
usr=User.where(:flag_getemails => true)
usr.each do |u|
NewsMailer.daily_reminder(current_user.id).deliver
end
end
render layout: false
end
protected
def authorize
authorize! :emails, User
end
end

View File

@@ -7,17 +7,19 @@ class FetprofilesController < ApplicationController
@fetprofiles = Fetprofile.active.order(:vorname,:nachname)
@fetprofiles = Fetprofile.order(:vorname,:nachname) if params[:filter]== "all"
@fetprofiles = Fetprofile.where(:active=>false).order(:vorname,:nachname) if params[:filter]== "notactive"
@fetprofiles = Fetprofile.where(:active=>false).order(:nachname,:vorname) if params[:filter]== "notactive"
@gremientabs = Gremium.tabs
@toolbar_elements << {:hicon=>'icon-plus', :text=> I18n.t('profile.new_profile'),:path => new_fetprofile_path(@fetprofile) } if can? :new, @fetprofile
respond_to do |format|
format.html # index.html.erb
end
end
end
def internlist
@fetprofiles = Fetprofile.order(:vorname,:nachname)
end
end
# GET /fetprofiles/1
# GET /fetprofiles/1.json
@@ -87,7 +89,18 @@ class FetprofilesController < ApplicationController
respond_to do |format|
if @fetprofile.update_attributes(params[:fetprofile])
format.html { redirect_to @fetprofile, notice: 'Fetprofile was successfully updated.' }
format.html {
unless params[:button]=="continue" || params[:commit]=="continue"
redirect_to @fetprofile, notice: 'profile was successfully updated.'
else
@memberships=@fetprofile.memberships.order(:typ)
@memberships<< Membership.new
@memberships<< Membership.new
@memberships<< Membership.new
render action: "edit", notice: 'profile was successfully updated.'
end
}
format.json { head :no_content }
else
@memberships=@fetprofile.memberships.order(:typ)

View File

@@ -1,5 +1,6 @@
class FotosController < ApplicationController
before_filter {@toolbar_elements=[]}
load_and_authorize_resource
# GET /fotos
# GET /fotos.json
def index
@@ -15,9 +16,22 @@ class FotosController < ApplicationController
# GET /fotos/1.json
def show
@foto = Foto.find(params[:id])
@gallery=@foto.gallery
@openfotoid=@foto.id
@pppage=params[:pppage].to_i % 4
@pppage_array = [ 25 , 50 , 100, 10000]
@page = params[:page].nil? ? 1 : params[:page].to_i
@fotos_p = @gallery.fotos.page(@page).per(@pppage_array[@pppage])
@fotos_n = @gallery.fotos- @fotos_p
respond_to do |format|
format.html # show.html.erb
format.html {
if params[:plain]
render "show", layout: false
else
render "galleries/show" #controller: :galleries, action: :show #gallery_path(@foto.gallery,:params=>{fotoid: @foto.id})
end
}
format.json { render json: @foto }
end
end
@@ -87,10 +101,11 @@ class FotosController < ApplicationController
# DELETE /fotos/1.json
def destroy
@foto = Foto.find(params[:id])
gallery = @foto.gallery_id
@foto.destroy
respond_to do |format|
format.html { redirect_to galleries_url }
format.html { redirect_to gallery_path(gallery) }
format.json { head :no_content }
end
end

View File

@@ -6,7 +6,7 @@ class GalleriesController < ApplicationController
# GET /galleries.json
def index
@galleries = Gallery.all
@toolbar_elements << {:hicon => 'icon-plus', :text => I18n.t('fotos.new-gallery'), :path => new_gallery_path }
@toolbar_elements << {:hicon => 'icon-plus', :text => I18n.t('fotos.new-gallery'), :path => new_gallery_path } if can? :new, Gallery
respond_to do |format|
format.html # index.html.erb
@@ -19,25 +19,57 @@ class GalleriesController < ApplicationController
def show
@gallery = Gallery.find(params[:id])
@pppage_array = [ 25 , 50 , 100 ] #defines number & size of picture chunks
@pppage_array = [ 25 , 50 , 100, 10000] #defines number & size of picture chunks
@pppage = 0 #starting index of pppage_array
if params[:pppage].to_i <= 2 && params[:pppage].to_i >= 0
if !params[:pppage].nil? && params[:pppage].to_i <= 3 && params[:pppage].to_i >= 0
@pppage = params[:pppage].to_i
end
@page = params[:page].nil? ? 1 : params[:page].to_i
# @fotos = Foto.where(:gallery_id => params[:id]).limit(@pppage_array[@pppage]).offset(@pppage_array[@pppage]*(@page-1))
# @fotos = Foto.where(:gallery_id => params[:id]).limit(@pppage_array[@pppage]).offset(@pppage_array[@pppage]*(@page-1))
@fotos = Foto.where(:gallery_id => params[:id])
@pages = (Foto.where(:gallery_id => params[:id]).count/(@pppage_array[@pppage])+1)
@showind=[]
@showind.fill(0,@pppage_array[@pppage]){ |i| i+ @pppage_array[@pppage]*(@page-1)} # Hier ausrechnen welche angezeigt werden sollen
@toolbar_elements << {:hicon=>'icon-plus', :text=> I18n.t('fotos.new-fotos'), :path=>new_gallery_foto_path(@gallery)}
@toolbar_elements << {:hicon=>'icon-pencil', :text => I18n.t('common.edit'), :path=>edit_gallery_path(@gallery)}
unless params[:fotoid].nil?
foto_ind = @fotos.find_index(Foto.find(params[:fotoid]))
# @page=(@fotos.count/foto_ind).to_i+1
@openfotoid=params[:fotoid]
else
@openfotoid=0
end
if @fotos.nil? || @fotos.empty?
@fotos_p = []
@fotos_n = []
@pages = 1
else
if @pppage_array[@pppage] != "all"
@fotos_p = @fotos.page(@page).per(@pppage_array[@pppage])
@fotos_n = @fotos- @fotos_p
@foto_ind = @fotos.find_index(@fotos_p.first)
@fotos_n = @fotos_n.rotate(@foto_ind)
@pages = (Foto.where(:gallery_id => params[:id]).count/(@pppage_array[@pppage])+1)
else
@fotos_p = @fotos
@fotos_n = []
@pages = 1
end
end
# Hier ausrechnen welche angezeigt werden sollen
@toolbar_elements << {:hicon=>'icon-plus', :text=> I18n.t('fotos.new-fotos'), :path=>new_gallery_foto_path(@gallery)} if can? :create, @gallery
@toolbar_elements << {:hicon=>'icon-pencil', :text => I18n.t('common.edit'), :path=>edit_gallery_path(@gallery)} if can? :edit, @gallery
@toolbar_elements << {:hicon=>'icon-arrow-left', :text=>I18n.t('common.back'), :path=>galleries_path()}
@toolbar_elements << {:hicon => 'icon-remove-circle', :text => I18n.t('common.delete'), :path => gallery_path(@gallery),:confirm=>'Sure?', :method=>:delete} if can? :delete, Gallery
respond_to do |format|
format.html # show.html.erb
format.html {
if @fotos.nil? || @fotos.empty?
redirect_to new_gallery_foto_path(@gallery)
end
}
format.json { render json: @gallery }
end
end
@@ -56,6 +88,7 @@ class GalleriesController < ApplicationController
# GET /galleries/1/edit
def edit
@gallery = Gallery.find(params[:id])
@fotos_old = @gallery.fotos
end
# POST /galleries
@@ -81,6 +114,10 @@ class GalleriesController < ApplicationController
@foto = Foto.new
respond_to do |format|
if @gallery.update_attributes(params[:gallery])
Foto.where(:gallery_id=>nil).each do |tbd|
tbd.destroy
end
format.html { redirect_to @gallery, notice: 'Gallery was successfully updated.' }
format.json { head :no_content }
else

View File

@@ -2,7 +2,7 @@ class GremienController < ApplicationController
# GET /gremien
# GET /gremien.json
load_and_authorize_resource
before_filter {@toolbar_elements=[]}
before_filter {@toolbar_elements=[]}
def verwalten
@gremien = Gremium.all
@gremientabs=Gremium.tabs
@@ -33,8 +33,8 @@ class GremienController < ApplicationController
def show
@gremium = Gremium.find(params[:id])
@gremientabs=Gremium.tabs
@memberships=@gremium.memberships.active.includes(:fetprofile).order(:typ,"fetprofiles.vorname","fetprofiles.nachname")
@memberships=@gremium.memberships.visible_in_gremium
@nlinks = @gremium.nlinks.page(params[:page]).per(5)
respond_to do |format|
format.html # show.html.erb
format.json { render json: @gremium }
@@ -85,7 +85,17 @@ class GremienController < ApplicationController
respond_to do |format|
if @gremium.update_attributes(params[:gremium])
format.html { redirect_to @gremium, notice: 'Gremium was successfully updated.' }
format.html {
unless params[:button]=="continue" || params[:commit]=="continue"
redirect_to @gremium, notice: 'Gremium was successfully updated.'
else
@memberships=@gremium.memberships.order(:typ)
@memberships<< Membership.new
@memberships<< Membership.new
@memberships<< Membership.new
render action: "edit", notice: 'gremium was successfully updated.'
end
}
format.json { head :no_content }
else
format.html { render action: "edit" }
@@ -95,7 +105,8 @@ class GremienController < ApplicationController
end
# DELETE /gremien/1
# DELETE /gremien/1.json
#
#
def destroy
@gremium = Gremium.find(params[:id])
@gremium.destroy

View File

@@ -1,18 +1,60 @@
class HomeController < ApplicationController
def index
@beispiele = Beispiel.last([Beispiel.count, 3].min)
@neuigkeiten = Neuigkeit.recent
@neuigkeiten = Neuigkeit.accessible_by(current_ability, :show).limit(10)
if Thema.count>0
t=YAML.load_file("#{::Rails.root.to_s}/config/start_topic.yml")
@rubriken= Rubrik.accessible_by(current_ability, :show)
params[:month]= Date.today.month if params[:month].nil?
params[:year]= Date.today.year if params[:year].nil?
@calentries= (@rubriken.map {|r| r.calendar}).collect(&:calentries).flatten.select {|c| c.object !=nil}
@starttopic= @themen = Thema.where(:id=>t).first
else
@starttopic=@themen = nil
end
@stickythemen = Thema.where(:sticky_startpage=>true)
end
def dev
end
def infoscreen
authorize! :infoscreen, User
@neuigkeiten = Neuigkeit.accessible_by(current_ability, :show).where(flag_infoscreen: true)
render layout: false
end
def kontakt
t=YAML.load_file("#{::Rails.root.to_s}/config/contact_topic.yml")
@themen = Thema.where(:id=>t)
end
def treeview
authorize! :doadmin, User
@themengruppen = Themengruppe.order(:priority).reverse
@themengruppen += Themengruppe.intern.order(:priority).reverse
end
def intern
authorize! :seeintern, User
@neuigkeiten = Neuigkeit.intern.recent
@themengruppen=Themengruppe.intern
@themengruppen=Themengruppe.intern.order(:priority).reverse
end
def admin
authorize! :doadmin, User
t=YAML.load_file("#{::Rails.root.to_s}/config/contact_topic.yml")
@kontaktthemen = Thema.where(:id=>t)
end
def log
authorize! :doadmin, User
lines = params[:lines]
if Rails.env == "production"
@logs = `tail -n #{lines} log/production.log | grep -v 'actionpack\\|railties\\|activesupport\\|::Translation'`
else
@logs = `tail -n #{lines} log/development.log | grep -v 'actionpack\\|railties\\|activesupport\\|::Translation'`
end
end
def startdev
render 'setup_fetsite_dev'
@@ -20,11 +62,33 @@ class HomeController < ApplicationController
def linksnotimplemented
render 'links_notimplemented'
end
def search
unless params['query'].nil? || params['query'].empty?
@neuigkeiten=Neuigkeit.search(params['query'])
@fetprofiles = Fetprofile.search(params['query'])
@themen=Thema.search(params['query'])
@results = Sunspot.search Neuigkeit,Rubrik, Fetprofile, Thema, Themengruppe, Lva, Studium, Modul, Modulgruppe, Gremium, Document do
fulltext params['query']
end
@neuigkeiten=[];
if can?(:showintern, Neuigkeit)
#@neuigkeiten=Neuigkeit.search(params['query'])
else
# @neuigkeiten =Neuigkeit.search(params['query']).public
end
@res=[]
@results.results.each do |r|
@res << r if can?(:show,r)
end
# @fetprofiles = Fetprofile.search(params['query'])
@fetprofiles=[]
# if can?(:showintern, Neuigkeit)
# @themen=Thema.search(params['query'])
# else
# @themen=Thema.search(params['query']).public
# end
@themen=[]
else
@neuigkeiten=[]
@fetprofiles=[]
@@ -35,4 +99,22 @@ class HomeController < ApplicationController
format.js
end
end
def language
redirect_to :back
rescue ActionController::RedirectBackError
redirect_to :root
end
def choose_contact_topics
authorize! :doadmin, User
t=YAML.load_file("#{::Rails.root.to_s}/config/contact_topic.yml")
unless params[:themen].nil?
t=([t].flatten+params[:themen]).uniq
end
unless params[:rmthema].nil?
t=t-[params[:rmthema]]
end
File.open("config/contact_topic.yml",'w'){|f| f.write(t.to_yaml)}
redirect_to admin_home_index_path
end
end

View File

@@ -1,7 +1,12 @@
class LvasController < ApplicationController
# GET /lvas
before_filter :load_toolbar, :only => [:show]
require 'zip'
before_filter :load_toolbar, :only => [:verwalten]
load_and_authorize_resource
before_filter :load_studien
def load_studien
@studien = Studium.accessible_by(current_ability, :show)
end
def index
@lvas = Lva.all
@toolbar_elements=[{:hicon=>'icon-plus-sign',:text =>I18n.t('lva.add'),:path => new_lva_path}]
@@ -9,24 +14,60 @@ class LvasController < ApplicationController
{:hicon=>'icon-list', :text=>I18n.t("modul.list"),:path=>moduls_path},
{:hicon=>'icon-list', :text=>I18n.t("lva.list"),:path=>lvas_path}]
end
def beispiel_sammlung
@lva = Lva.find_by_id(params[:id])
filename = 'beispiel_sammlung_' + @lva.lvanr.to_s + '_' + l(Date.today).to_s + '.zip'
temp_file = Tempfile.new(filename)
begin
Zip::OutputStream.open(temp_file) { |zos| }
Zip::File.open(temp_file.path, Zip::File::CREATE) do |zip|
i=1
@lva.beispiele.each do |bsp|
zip.add(i.to_s + '_' + File.basename(bsp.beispieldatei.current_path), bsp.beispieldatei.current_path)
i = i + 1
end
end
#Read the binary data from the file
zip_data = File.read(temp_file.path)
send_data(zip_data, :type => 'application/zip', :filename => filename)
ensure
#Close and delete the temp file
temp_file.close
temp_file.unlink
end
end
# GET /lvas/1
def show
@lva = Lva.find_by_id(params[:id])
@beispiel=Beispiel.new
@beispiele_all=@lva.beispiele.order(:datum).accessible_by(current_ability, :show)
@beispiele = @lva.beispiele.not_flag_badquality.not_flag_delete.order(:lecturer_id,:datum).accessible_by(current_ability, :show)
@beispiele_badQ = @lva.beispiele.flag_badquality.not_flag_delete.order(:datum).accessible_by(current_ability, :show)
@beispiele_deleted = @lva.beispiele.flag_delete.order(:datum).accessible_by(current_ability, :show)
@toolbar_elements =[]
@toolbar_elements<<{:hicon=>'icon-pencil', :icon=>:pencil,:text =>I18n.t('common.manage'),:path => verwalten_lva_path(@lva)} if can? :verwalten, @lva
@crawlobjects = @lva.crawlobjects.roots.accessible_by(current_ability)
@questions=@lva.questions.accessible_by(current_ability,:show)
end
def verwalten
@lva = Lva.find_by_id(params[:id])
@beispiel=Beispiel.new
@beispiele_all=@lva.beispiele.order(:datum).accessible_by(current_ability, :show)
@beispiele = @lva.beispiele.not_flag_badquality.not_flag_delete.order(:lecturer_id,:datum).accessible_by(current_ability, :show)
@beispiele_badQ = @lva.beispiele.flag_badquality.not_flag_delete.order(:datum).accessible_by(current_ability, :show)
@beispiele_deleted = @lva.beispiele.flag_delete.order(:datum).accessible_by(current_ability, :show)
render :show
end
# GET /lvas/new
# GET /lvas/new.json
def new
@lva = Lva.new
modul=Modul.find_by_id(params[:modul_id])
@lva.modul<<modul unless modul.nil? #
end
# GET /lvas/1/edit
def edit
@lva = Lva.find(params[:id])
@semester = @lva.modul.map(&:modulgruppen).flatten.map(&:studium).map(&:semester).flatten.uniq
@@ -36,13 +77,13 @@ class LvasController < ApplicationController
@lva = Lva.find_by_id(params[:id])
@lvatiss = Lva.new
@lvatiss.lvanr=@lva.lvanr
@lvatiss.load_tissdata("-2013W")
@lvatiss.load_tissdata
end
def load_tiss
@lva = Lva.find_by_id(params[:id])
@lva.load_tissdata("-2013W")
@lva.load_tissdata
if @lva.save
redirect_to @lva , notice: 'Lva von TISS geladen.'
else
@@ -77,7 +118,6 @@ class LvasController < ApplicationController
def destroy
@lva = Lva.find(params[:id])
@lva.destroy
respond_to do |format|
format.html { redirect_to lvas_url }
end
@@ -89,11 +129,7 @@ private
@toolbar_elements =[]
@toolbar_elements<<{:hicon=>'icon-pencil', :icon=>:pencil,:text =>I18n.t('common.edit'),:path => edit_lva_path(@lva)} if can? :edit, @lva
@toolbar_elements << {:hicon=>'icon-remove-circle', :text=>"Tissvergleichladen", :path=> compare_tiss_lva_path(@lva)} if can? :compare_tiss, @lva
@toolbar_elements << {:hicon=>'icon-remove-circle', :text=>I18n.t('common.delete'), :path=> lva_path(@lva), :method=>:delete, :confirm=>'Sure?' } if can? :delete, @lva
@toolbar_elements << {:hicon=>'icon-remove-circle', :text=>I18n.t('lva.delete'), :path=> lva_path(@lva), :method=>:delete, :confirm=>t('lva.deletesure') } if can? :delete, @lva
end
end

View File

@@ -0,0 +1,140 @@
class MeetingsController < ApplicationController
load_and_authorize_resource
def index
parent=params[:parent_type].constantize.find(params[:parent_id])
unless parent.nil?
#authorize! :show, parent
if params[:filter]=="upcomming"
@meetings=parent.meetings.upcomming
else
@meetings=parent.meetings
end
@parent=parent
end
respond_to do |format|
format.html {redirect_to rubriken_path}
format.js
end
end
def announce
m=Meeting.find(params[:id])
m.create_announcement(current_user)
m.save
@meeting=Meeting.find(params[:id])
respond_to do |format|
format.html {redirect_to m.parent}
format.js {render action: :show}
end
end
def show
m=Meeting.find(params[:id])
respond_to do |format|
format.html {
if can?(:show, m.parent)
redirect_to m.parent
else
if can?(:show, m.neuigkeit) && !m.neuigkeit.nil?
redirect_to m.neuigkeit
else
redirect_to m.parent
end
end
}
format.js
end
end
def new
@meeting=Meeting.new
@meeting.parent=params[:parent_type].constantize.find(params[:parent_id])
@parent=@meeting.parent
@meeting.calentry=Calentry.new
@meeting.calentry.typ = 2
respond_to do |format|
format.js
end
end
def create_protocol
@meeting = Meeting.find(params[:id])
@meeting.create_protocol
@meeting.save
respond_to do |format|
format.js {render action: :show}
end
end
def create_agenda
@meeting = Meeting.find(params[:id])
@meeting.create_agenda
respond_to do |format|
format.js {render action: :show}
end
end
def edit
@meeting = Meeting.find(params[:id])
@parent=@meeting.parent
respond_to do |format|
format.js
end
end
def create
@meeting = Meeting.new(params[:meeting])
@parent=@meeting.parent
#@meeting.assign_attributes(params[:meeting])
respond_to do |format|
if @meeting.save
# format.html { redirect_to @meeting, notice: 'Meeting was successfully created.' }
#format.json { render json: @meeting, status: :created, location: @meeting }
format.js
else
# format.html { render action: "new" }
# format.json { render json: @meeting.errors, status: :unprocessable_entity }
format.js { render action: "new" }
end
end
end
def update
@meeting = Meeting.find(params[:id])
@parent=@meeting.parent
respond_to do |format|
if @meeting.update_attributes(params[:meeting])
format.html { redirect_to @meeting, notice: 'Meeting was successfully updated.' }
format.json { head :no_content }
format.js
else
# format.html
# format.json { render json: @meeting.errors, status: :unprocessable_entity }
format.js { render action: "edit" }
end
end
end
def destroy
logger.info("-------------delete------------------")
@meeting = Meeting.find(params[:id])
@parent=@meeting.parent
@meeting_id = params[:id]
@meeting.destroy
respond_to do |format|
#format.html { redirect_to @object}
#format.json { head :no_content }
format.js
end
end
end

View File

@@ -0,0 +1,76 @@
class MeetingtypsController < ApplicationController
load_and_authorize_resource
def index
@meetingtyps=Meetingtyp.all
end
def show
redirect_to action: :index
end
def edit
@meetingtyp = Meetingtyp.find(params[:id])
end
def new
@meetingtyp=Meetingtyp.new
end
def create_protocol_and_agenda
@meetingtyp = Meetingtyp.find(params[:id])
if @meetingtyp.agenda.nil?
d=Document.new
d.typ=11
d.name="Agendavorlage"
d.save
@meetingtyp.agenda=d
end
if @meetingtyp.protocol.nil?
d=Document.new
d.typ=10
d.name="Protokollvorlage"
d.save
@meetingtyp.protocol=d
end
redirect_to action: :index
end
def create
@meetingtyp = Meetingtyp.new(params[:meetingtyp])
@meetingtyp.assign_attributes(params[:meetingtyp])
respond_to do |format|
if @meetingtyp.save
format.html { redirect_to @meetingtyp, notice: 'Meeting was successfully created.' }
#format.json { render json: @meeting, status: :created, location: @meeting }
format.js
else
format.html { render action: "new" }
# format.json { render json: @meeting.errors, status: :unprocessable_entity }
format.js { render action: "new" }
end
end
end
def update
@meetingtyp = Meetingtyp.find(params[:id])
respond_to do |format|
if @meetingtyp.update_attributes(params[:meetingtyp])
format.html { redirect_to @meetingtyp, notice: 'Meeting was successfully updated.' }
# format.json { head :no_content }
format.js
else
format.html { render action: "edit" }
# format.json { render json: @meeting.errors, status: :unprocessable_entity }
format.js { render action: "edit" }
end
end
end
def destroy
@meetingtyp = Meeting.find(params[:id])
@meetingtyp.destroy
respond_to do |format|
format.html { redirect_to action: :index}
end
end
end

View File

@@ -4,7 +4,13 @@ class ModulgruppenController < ApplicationController
before_filter :load_toolbar_show, :only=>[:show] # Toolbar für show erstellen
load_and_authorize_resource
before_filter :load_studien
def load_studien
@studien = Studium.accessible_by(current_ability, :show)
end
def index
@studien = Studium.accessible_by(current_ability, :show)
@modulgruppen = Modulgruppe.all
if !params[:studium_id].nil?
@studium=Studium.find(params[:studium_id])
@@ -16,6 +22,8 @@ class ModulgruppenController < ApplicationController
# GET /modulgruppen/1
def show
@modulgruppe = Modulgruppe.find(params[:id])
@studien = Studium.accessible_by(current_ability, :show)
@studium = Studium.find(@modulgruppe.studium_id)
if !params[:studium_id].nil?
@studium=Studium.find(params[:studium_id])
@@ -25,6 +33,8 @@ class ModulgruppenController < ApplicationController
# GET /modulgruppen/new
def new
@studien = Studium.accessible_by(current_ability, :show)
@modulgruppe = Modulgruppe.new
if !params[:studium_id].nil?
@modulgruppe.studium_id=(params[:studium_id])
@@ -39,6 +49,8 @@ class ModulgruppenController < ApplicationController
# GET /modulgruppen/1/edit
def edit
@studien = Studium.accessible_by(current_ability, :show)
@modulgruppe = Modulgruppe.find(params[:id])
if !params[:studium_id].nil?
@studium=Studium.find(params[:studium_id])
@@ -97,11 +109,11 @@ class ModulgruppenController < ApplicationController
end
def load_toolbar_show
@toolbar_elements = [ {:text=>'Zurück', :path=>studium_path(@modulgruppe.studium, :ansicht=>:modulgruppenansicht)}]
@toolbar_elements << {:hicon=>'icon-plus-sign', :text=>I18n.t('modulgruppe.addmodule'), :path=>new_bulk_moduls_path(:modulgruppen_id=>@modulgruppe.id)}
@toolbar_elements << {:hicon=>'icon-plus-sign', :text=>I18n.t('modulgruppe.addmodule'), :path=>new_bulk_moduls_path(:modulgruppen_id=>@modulgruppe.id)} if can? :new ,Modul
@toolbar_elements << {:hicon=>'icon-plus-sign', :text=>I18n.t('modulgruppe.addmodul'), :path=>new_modul_path(:modulgruppen_id=>@modulgruppe.id)}
@toolbar_elements << {:hicon=>'icon-pencil', :text=>I18n.t('modulgruppe.edit'), :path=>edit_modulgruppe_path(@modulgruppe)}
@toolbar_elements << {:hicon=>'icon-remove-circle', :text=> I18n.t('common.delete'),:path => modulgruppe_path(@modulgruppe, :ansicht=>:modulgruppenansicht), :method=> :delete,:confirm=>'Sure?' }
@toolbar_elements << {:hicon=>'icon-plus-sign', :text=>I18n.t('modulgruppe.addmodul'), :path=>new_modul_path(:modulgruppen_id=>@modulgruppe.id)} if can? :new, Modul
@toolbar_elements << {:hicon=>'icon-pencil', :text=>I18n.t('modulgruppe.edit'), :path=>edit_modulgruppe_path(@modulgruppe)} if can? :edit, @modulgruppe
@toolbar_elements << {:hicon=>'icon-remove-circle', :text=> I18n.t('common.delete'),:path => modulgruppe_path(@modulgruppe, :ansicht=>:modulgruppenansicht), :method=> :delete,:confirm=>'Sure?' }if can? :delete, Modulgruppe
end

View File

@@ -7,6 +7,10 @@ class ModulsController < ApplicationController
before_filter :load_toolbar_index, :only=>[:index] # Toolbar für index erstellen
load_and_authorize_resource
before_filter :load_studien
def load_studien
@studien = Studium.accessible_by(current_ability, :show)
end
def index
@moduls = Modul.all
if @moduls
@@ -121,13 +125,13 @@ end
def show_tiss
@lvas=[];
@semester = @modul.modulgruppen.flatten.map(&:studium).map(&:semester).flatten.uniq
@semester = @modul.modulgruppen.flatten.map(&:studium).map(&:semester).uniq
params["lvas"].to_a.each do |l|
unless l.last["lvanr"].empty?
l=l.last
lva=Lva.new
lva.lvanr=l["lvanr"]
lva.load_tissdata("-"+ l["sem"])
lva.load_tissdata
lva.modul<<@modul
@lvas<<lva #
end
@@ -175,11 +179,12 @@ end
end
def load_toolbar_show
@toolbar_elements = [{:hicon=>'icon-plus-sign', :text=>I18n.t("lva.add"), :path=>new_lva_path(:modul_id =>@modul.id)}]
@toolbar_elements << {:hicon=>'icon-pencil', :text=>"Lvas bearbeiten", :path=>edit_lvas_modul_path(@modul)}
@toolbar_elements << {:hicon=>'icon-plus-sign', :text=>"ADD FROM TISS", :path=>load_tiss_modul_path(:modul_id =>@modul.id)}
@toolbar_elements << {:hicon=>'icon-pencil', :text=>I18n.t("modul.edit"), :path=>edit_modul_path(@modul)}
@toolbar_elements << {:hicon=>'icon-remove-circle', :text=>I18n.t("common.delete"),:path=>@modul , :method=>:delete , :data=>{:confirm =>'Are you sure'}}
@toolbar_elements=[]
@toolbar_elements << {:hicon=>'icon-plus-sign', :text=>I18n.t("lva.add"), :path=>new_lva_path(:modul_id =>@modul.id)} if can? :new, Lva
@toolbar_elements << {:hicon=>'icon-pencil', :text=>"Lvas bearbeiten", :path=>edit_lvas_modul_path(@modul)} if can? :edit, Lva
@toolbar_elements << {:hicon=>'icon-plus-sign', :text=>"ADD FROM TISS", :path=>load_tiss_modul_path(:modul_id =>@modul.id)} if can? :load_tiss, Modul
@toolbar_elements << {:hicon=>'icon-pencil', :text=>I18n.t("modul.edit"), :path=>edit_modul_path(@modul)} if can? :edit, @modul
@toolbar_elements << {:hicon=>'icon-remove-circle', :text=>I18n.t("common.delete"),:path=>@modul , :method=>:delete , :data=>{:confirm =>'Are you sure'}} if can? :delete, @modul
@topbar_elements = [{:hicon=>'icon-list', :text=>I18n.t("modul.list"),:path=>moduls_path}]
@tb=[]
@@ -188,8 +193,9 @@ end
def load_toolbar_index
@toolbar_elements = [{:hicon=>'icon-plus-sign', :text=>I18n.t("modul.add"), :path=>new_modul_path}]
@topbar_elements =[{:hicon=>'icon-list', :text=>I18n.t("studien.allestudien"),:path=>studien_path}]
@toolbar_elements = []
@topbar_elements<<{:hicon=>'icon-plus-sign', :text=>I18n.t("modul.add"), :path=>new_modul_path} if can? :new , Modul
@topbar_elements<< {:hicon=>'icon-list', :text=>I18n.t("studien.allestudien"),:path=>studien_path}
@topbar_elements<<{:hicon=>'icon-list', :text=>I18n.t("modul.list"),:path=>moduls_path}
@topbar_elements<<{:hicon=>'icon-list', :text=>I18n.t("lva.list"),:path=>lvas_path}

View File

@@ -1,24 +1,35 @@
# -*- coding: utf-8 -*-
class NeuigkeitenController < ApplicationController
before_filter :load_toolbar_elements, :only=>[:show,:find_link]
before_filter :load_toolbar_elements_edit, :only=>[:edit]
acts_as_flagable
load_and_authorize_resource
def default_url_options
super
# super.merge({host: request.host_with_port})
end
def show
@neuigkeit = Neuigkeit.find(params[:id])
@rubrik=@neuigkeit.rubrik
@rubrik = @neuigkeit.rubrik
@questions = @neuigkeit.questions.accessible_by(current_ability,:show)
if can?(:shownonpublic, Rubrik)
@rubriken = Rubrik.all
else
@rubriken = Rubrik.where(:public=>true)
end
if !params[:version].nil?
if !params[:version].nil? && can?(:showversions, Neuigkeit)
@neuigkeit.assign_attributes(@neuigkeit.translation.versions.reverse[params[:version].to_i].reify.attributes.select{|k,v| @neuigkeit.translated_attribute_names.include? k.to_sym })
end
@calentries1=@neuigkeit.calentries
respond_to do |format|
format.html
format.js
end
end
@@ -35,11 +46,11 @@ class NeuigkeitenController < ApplicationController
if params[:calentry_id].nil?
ce = Calentry.new(:start=>Time.now, :ende=>1.hour.from_now, :typ=>1, :calendar=>@neuigkeit.rubrik.calendar)
else
ce=Calentry.find(params[:calentry_id])
ce = Calentry.find(params[:calentry_id])
end
@calentry=ce
ce.object=@neuigkeit
@neuigkeit.calentry=ce
@neuigkeit.calentries<<ce
@neuigkeit.save
render 'edit'
@@ -49,51 +60,136 @@ class NeuigkeitenController < ApplicationController
@neuigkeit = Neuigkeit.find(params[:id])
@neuigkeit.reverse_publish
@neuigkeit.save
@questions = @neuigkeit.questions.accessible_by(current_ability,:show)
if params[:verwalten]
redirect_to verwalten_rubrik_path(@neuigkeit.rubrik)
else
respond_to do |format|
format.html { redirect_to rubrik_neuigkeit_path(@neuigkeit.rubrik,@neuigkeit)}
format.js { render partial: "show"}
end
redirect_to rubrik_neuigkeit_path(@neuigkeit.rubrik,@neuigkeit)
end
end
def publish
@neuigkeit = Neuigkeit.find(params[:id])
@neuigkeit.publish
@neuigkeit.save
if params[:verwalten]
redirect_to verwalten_rubrik_path(@neuigkeit.rubrik)
end
redirect_to rubrik_neuigkeit_path(@neuigkeit.rubrik,@neuigkeit)
end
@questions = @neuigkeit.questions.accessible_by(current_ability,:show)
if params[:verwalten]
redirect_to verwalten_rubrik_path(@neuigkeit.rubrik)
else
respond_to do |format|
format.html { redirect_to rubrik_neuigkeit_path(@neuigkeit.rubrik,@neuigkeit)}
format.js { render partial: "show"}
end
end
end
def publish_to_facebook
@neuigkeit = Neuigkeit.find(params[:id])
unless @neuigkeit.picture.url.nil?
picture_url=URI(root_url)
picture_url.path=@neuigkeit.picture.url(:locale=>nil, :theme=>nil)
end
unless @neuigkeit.published?
redirect_to [@neuigkeit.rubrik,@neuigkeit], notice: 'Neuigkeit muss veröffentlicht sein um sie auf Facebook zu posten.'
else
page=YAML.load_file("#{::Rails.root.to_s}/config/page.yml")
# page.feed!(:access_token=>page.access_token, :message=>@neuigkeit.text_first_words, :name=>@neuigkeit.title, :link=>rubrik_neuigkeit_url(@neuigkeit.rubrik, @neuigkeit)+".html", :picture=>@neuigkeit.picture.url)
page.feed!(:access_token=>page.access_token, :message=>@neuigkeit.text_first_words, :name=>@neuigkeit.title, :link=>rubrik_neuigkeit_url(@neuigkeit.rubrik, @neuigkeit)+".html")# , :picture=>picture_url)
redirect_to [@neuigkeit.rubrik,@neuigkeit], notice: 'Neuigkeit auf Facebook gepostet'
end
end
def mail_to_fet
ActionMailer::Base.default_url_options[:host] = request.host_with_port
@neuigkeit = Neuigkeit.find(params[:id])
authorize! :publish, @neuigkeit
unless @neuigkeit.published?
redirect_to [@neuigkeit.rubrik,@neuigkeit], notice: 'Neuigkeit muss veröffentlicht sein um sie als Mail zu versenden.'
else
NewsMailer.neuigkeit_mail("all@fet.at", params[:id]).deliver
redirect_to [@neuigkeit.rubrik,@neuigkeit], notice: 'Neuigkeit versendet'
end
end
def mail_preview
ActionMailer::Base.default_url_options[:host] = request.host_with_port
@neuigkeit = Neuigkeit.find(params[:id])
@user=current_user
@ability=Ability.new(@user)
@mail = NewsMailer.neuigkeit_mail("all@fet.at", params[:id])
authorize! :publish, @neuigkeit
render layout: false
end
def newsletter_preview
authorize! :publish, Neuigkeit
@neuigkeiten=Neuigkeit.accessible_by(current_ability).where("cache_order<2")
render template: "news_mailer/daily_newsletter", layout: false
end
def edit
@neuigkeit = Neuigkeit.find(params[:id])
@neuigkeit.no_fallbacks=true
@rubrik=@neuigkeit.rubrik
@calentries= @neuigkeit.calentries
@calentries<< Calentry.new
end
def find_link
@rubrik=@neuigkeit.rubrik
if can?(:shownonpublic, Rubrik)
if can?(:shownonpublic, Rubrik)
@rubriken = Rubrik.all
else
@rubriken = Rubrik.where(:public=>true)
end
@calentries1=@neuigkeit.calentries
@nlink_search = Neuigkeit::LINKTYPES.clone
nlink_search = Neuigkeit::LINKTYPES.clone
nlink_search.collect!{|t| t.constantize}
@nlink_search.collect!{|t| t.constantize}
@nlink_search.collect!{|t| t.search(params[:query]).limit(2)}
# @nlink_search.collect!{|t| t.search(params[:query]).limit(2)}
@results= Sunspot.search nlink_search do
fulltext params[:query]
end
respond_to do |format|
format.html { render action:"show" }
format.js
end
@nlink_search.flatten!
render action:"show"
end
def create_link
Nlink.create(:link=>params[:link_type].constantize.find(params[:link_id]),:neuigkeit=>Neuigkeit.find(params[:id]))
redirect_to action:"show"
def create_link
@neuigkeit = Neuigkeit.find(params[:id])
Nlink.create(:link=>params[:link_type].constantize.find(params[:link_id]),:neuigkeit=>Neuigkeit.find(params[:id]))
@nlinks=@neuigkeit.nlinks
respond_to do |format|
format.html { redirect_to action:"show" }
format.js
end
end
def delete_link
@neuigkeit = Neuigkeit.find(params[:id])
@nlink = @neuigkeit.nlinks.find(params[:nlink_id])
@nlink.destroy
respond_to do |format|
format.html { redirect_to @neuigkeit }
format.js
end
end
def create
@@ -131,21 +227,30 @@ class NeuigkeitenController < ApplicationController
format.html { redirect_to rubrik }
end
end
end
private
def load_toolbar_elements
@neuigkeit=Neuigkeit.find(params[:id])
@toolbar_elements=[]
@toolbar_elements << {:hicon=>'icon-plus', :text=> I18n.t('neuigkeit.publish'),:path => publish_rubrik_neuigkeit_path(@neuigkeit.rubrik,@neuigkeit),:confirm=>'Sure?' } if can?(:publish, @neuigkeit) && @neuigkeit.published?
@toolbar_elements << {:hicon=>'icon-minus', :text=> I18n.t('neuigkeit.unpublish'),:path => unpublish_rubrik_neuigkeit_path(@neuigkeit.rubrik,@neuigkeit),:confirm=>'Sure?' } if can?(:unpublish, @neuigkeit) && !@neuigkeit.published?
actions=[]
actions << {:hicon=>'icon-plus', :text=> I18n.t('neuigkeit.publish'),:path => publish_rubrik_neuigkeit_path(@neuigkeit.rubrik,@neuigkeit),:confirm=> I18n.t('neuigkeit.publish_sure') } if can?(:publish, @neuigkeit) && !@neuigkeit.published?
actions << {:hicon=>'ffi1-facebook1', :text=> I18n.t('neuigkeit.publishfb'),:path => publish_to_facebook_rubrik_neuigkeit_path(@neuigkeit.rubrik,@neuigkeit),:confirm=>I18n.t('neuigkeit.publishfb_sure') } if can?(:publish, @neuigkeit) && @neuigkeit.published?
actions << {:hicon=>'icon-facebook', :text=> I18n.t('neuigkeit.publishfetmail'),:path => mail_to_fet_rubrik_neuigkeit_path(@neuigkeit.rubrik,@neuigkeit),:confirm=>I18n.t('neuigkeit.publishfetmail_sure') } if can?(:publish, @neuigkeit) && @neuigkeit.published?
actions << {:hicon=>'icon-minus', :text=> I18n.t('neuigkeit.unpublish'),:path => unpublish_rubrik_neuigkeit_path(@neuigkeit.rubrik,@neuigkeit),:confirm=> I18n.t('neuigkeit.unpublish_sure') } if can?(:unpublish, @neuigkeit) && @neuigkeit.published?
@toolbar_elements << {:text=>I18n.t('common.edit'),:path=>edit_rubrik_neuigkeit_path(@neuigkeit.rubrik,@neuigkeit),:icon=>:pencil} if can? :edit, @neuigkeit.rubrik
if can?(:showversions, Neuigkeit)
@versions= @neuigkeit.translation.versions.select([:created_at]).reverse
@toolbar_elements <<{:path=>rubrik_neuigkeit_path(@neuigkeit.rubrik,@neuigkeit),:method=>:versions,:versions=>@versions}
@toolbar_elements << {:hicon=>'icon-remove-circle', :text=> I18n.t('common.delete'),:path => rubrik_neuigkeit_path(@neuigkeit.rubrik,@neuigkeit), :method=> :delete,:confirm=>'Sure?' } if can? :delete, @neuigkeit
end
actions << {:hicon=>'icon-remove-circle', :text=> I18n.t('common.delete'),:path => rubrik_neuigkeit_path(@neuigkeit.rubrik,@neuigkeit), :method=> :delete,:confirm=>'Sure?' } if can? :delete, @neuigkeit
@toolbar_elements << {:text => "action", :method => :dropdown, :elements=> actions} unless actions.empty?
end

View File

@@ -2,42 +2,53 @@ class RubrikenController < ApplicationController
before_filter {@toolbar_elements=[]}
load_and_authorize_resource
def index
if can?(:shownonpublic, Rubrik)
@rubriken = Rubrik.all
else
@rubriken = Rubrik.where(:public=>true)
# if can?(:showintern, Rubrik)
# @rubriken = Rubrik.all
# @neuigkeiten = Neuigkeit.page(params[:page]).per(3)
# else
# @rubriken = Rubrik.where(:public=>true)
# @neuigkeiten = Neuigkeit.public.published.page(params[:page]).per(3)
# end
params[:month]= Date.today.month if params[:month].nil?
params[:year]= Date.today.year if params[:year].nil?
@rubriken= Rubrik.accessible_by(current_ability, :show)
@neuigkeiten = Neuigkeit.accessible_by(current_ability, :list).page(params[:page]).per(3)
@calentries= (@rubriken.map {|r| r.calendar.calentries.of_month(Date.new(params[:year].to_i,params[:month].to_i,1))}).flatten.select {|c| c.object !=nil}
respond_to do |format|
format.html
format.js {render action: :show}
end
@neuigkeiten = @rubriken.collect(&:neuigkeiten).map(&:recent).flatten
@calentries= @rubriken.collect(&:calentries).flatten
end
def intern
end
def show
if can?(:shownonpublic, Rubrik)
@rubriken = Rubrik.all
else
@rubriken = Rubrik.where(:public=>true)
end
@rubriken= Rubrik.accessible_by(current_ability, :show)
@rubrik = Rubrik.find(params[:id])
@moderatoren=User.with_role(:newsmoderator,@rubrik)
@calentries= @rubrik.calentries
if can?(:showunpublished, Neuigkeit)
@neuigkeiten = @rubrik.neuigkeiten
else
@neuigkeiten = @rubrik.neuigkeiten.published
end
params[:month]= Date.today.month if params[:month].nil?
params[:year]= Date.today.year if params[:year].nil?
@calentries= @rubrik.calendar.calentries.select {|c| c.object !=nil}
@neuigkeiten = @rubrik.neuigkeiten.accessible_by(current_ability, :list).page(params[:page]).per(3)
@toolbar_elements << {:text=>I18n.t('neuigkeit.new.title'), :path=> new_rubrik_neuigkeit_path(@rubrik),:hicon=>'icon-plus-sign'} if can? :verwalten, @rubrik
@toolbar_elements << {:text=>I18n.t('common.verwalten'), :path=>verwalten_rubrik_path(@rubrik),:icon=>:pencil} if can? :verwalten, @rubrik
respond_to do |format|
format.html
format.js
end
end
def new
@rubrik = Rubrik.new
end
def edit

View File

@@ -3,17 +3,17 @@ class StudienController < ApplicationController
# before_filter :authorize, :only => :verwalten
load_and_authorize_resource
def index
@studien = Studium.all
@studien = Studium.accessible_by(current_ability, :show)
@topbar_elements=[{:hicon=>'icon-list', :text=>I18n.t("studien.allestudien"),:path=>studien_path}]
@topbar_elements<<{:hicon=>'icon-list', :text=>I18n.t("modul.list"),:path=>moduls_path}
@topbar_elements<<{:hicon=>'icon-list', :text=>I18n.t("lva.list"),:path=>lvas_path}
@toolbar_elements<<{:icon =>:plus, :hicon=>'icon-plus-sign', :text=> I18n.t('studien.new') ,:path=>new_studium_path }
@toolbar_elements<<{:icon =>:plus, :hicon=>'icon-plus-sign', :text=> I18n.t('studien.new') ,:path=>new_studium_path } if can? :new, Studium
# @toolbar_elements<<{:text=> I18n.t('modulgruppe.show.link') ,:path=>modulgruppen_path }
end
def show
@studium= Studium.find(params[:id])
@studien = Studium.accessible_by(current_ability, :show)
@studienphasen=[]
[1, 2 ,3].each do |ph|
modulgruppen_phase=@studium.modulgruppen.where(:phase=>ph)
@@ -31,14 +31,14 @@ class StudienController < ApplicationController
end
@studienphasen << {:modulgruppen=>modulgruppen, :phase => ph}.merge(opts)
end
@toolbar_elements=[]
@toolbar_elements=[{:icon=>:plus, :hicon =>'icon-plus-sign' ,:text=> I18n.t('studien.new') , :path => new_studium_path(@studium) },
{:icon=>:pencil, :hicon=>'icon-pencil',:text =>I18n.t('common.edit'),:path => edit_studium_path(@studium)},
{:icon=>:pencil, :hicon=>'icon-pencil',:text =>I18n.t('common.edit'),:path => edit_lvas_studium_path(@studium)},
{:hicon=>'icon-remove-circle', :text=> I18n.t('common.delete'),:path => studium_path(@studium), :method=> :delete,:confirm=>'Sure?' }]
@toolbar_modulgruppen =[ {:hicon=>'icon-plus-sign', :text=> I18n.t('modulgruppe.new'), :path=>new_studium_modulgruppe_path(@studium)},
{:hicon=>'icon-list', :text => I18n.t('modulgruppe.list'), :path=>modulgruppen_path}]
@toolbar_elements<<{:icon=>:pencil, :hicon=>'icon-pencil',:text =>I18n.t('common.edit'),:path => edit_studium_path(@studium)} if can? :edit, Studium
@toolbar_elements<<{:icon=>:pencil, :hicon=>'icon-pencil',:text =>I18n.t('lva.editlvas'),:path => edit_lvas_studium_path(@studium)} if can? :edit_lvas, Studium
@toolbar_elements<<{:hicon=>'icon-remove-circle', :text=> I18n.t('common.delete'),:path => studium_path(@studium), :method=> :delete,:confirm=>'Sure?' } if can? :delete, Studium
@toolbar_modulgruppen =[]
@toolbar_modulgruppen << {:hicon=>'icon-plus-sign', :text=> I18n.t('modulgruppe.new'), :path=>new_studium_modulgruppe_path(@studium)} if can? :new, Modulgruppe
#@toolbar_modulgruppen << {:hicon=>'icon-list', :text => I18n.t('modulgruppe.list'), :path=>modulgruppen_path} if can? :index, Modulgruppe
case params[:ansicht]
when 'semesteransicht'
when 'infoansicht'
@@ -49,18 +49,21 @@ class StudienController < ApplicationController
end
def new
@studien = Studium.accessible_by(current_ability, :show)
@studium = Studium.new
end
def edit
@studien = Studium.accessible_by(current_ability, :show)
@studium = Studium.find(params[:id])
@toolbar_elements=[{:text => I18n.t('studien.anzeigen') , :path => url_for(@studium) }]
@toolbar_elements<<{:text =>I18n.t('studien.allestudien'),:path=>studien_path(@studium)}
end
def edit_lvas
@studien = Studium.accessible_by(current_ability, :show)
@studium = Studium.find(params[:id])
@lvas=@studium.lvas
@lvas=@studium.lvas.uniq
@semester=@studium.semester
@toolbar_elements=[{:text => I18n.t('studien.anzeigen') , :path => url_for(@studium) }]
@toolbar_elements<<{:text =>I18n.t('studien.allestudien'),:path=>studien_path(@studium)}
@@ -83,6 +86,7 @@ class StudienController < ApplicationController
def update
@studium = Studium.find(params[:id])
@studien = Studium.accessible_by(current_ability, :show)
logger.info "params: #{params[:studium].inspect}"
if @studium.update_attributes(params[:studium])
if @studium.lvas.map(&:valid?).all?
@@ -106,7 +110,8 @@ class StudienController < ApplicationController
def verwalten
@new_params={:std_verw=>params[:std_verw], :mg_verw=>params[:mg_verw], :m_verw=>params[:m_verw], :lva_verw=>params[:lva_verw], :b_verw=>params[:b_verw], :lec_verw=>params[:lec_verw]}
if @new_params.values.compact.empty?
@studien=Studium.all
@modulgruppen=Modulgruppe.all
@module=Modul.all
@lvas=Lva.all

View File

@@ -0,0 +1,103 @@
class Survey::ChoicesController < ApplicationController
# GET /survey/choices
# GET /survey/choices.json
load_and_authorize_resource
def index
@survey_choices = Survey::Choice.all
respond_to do |format|
format.html # index.html.erb
format.json { render json: @survey_choices }
end
end
# GET /survey/choices/1
# GET /survey/choices/1.json
def show
@survey_choice = Survey::Choice.find(params[:id])
respond_to do |format|
format.html {redirect_to @survey_choice.question}
format.json { render json: @survey_choice }
format.js
end
end
# GET /survey/choices/new
# GET /survey/choices/new.json
def new
@question= Survey::Question.find(params[:question_id])
@choice=Survey::Choice.new
@choice.question=@question
respond_to do |format|
format.js
format.html # new.html.erb
format.json { render json: @survey_choice }
end
end
# GET /survey/choices/1/edit
def edit
@choice = Survey::Choice.find(params[:id])
respond_to do |format|
format.html
format.js
end
end
# POST /survey/choices
# POST /survey/choices.json
include PluginsHelper
def create
@survey_choice = Survey::Choice.new(params[:survey_choice])
@divid = divid_for(@survey_choice)
respond_to do |format|
if @survey_choice.save
format.html { redirect_to @survey_choice, notice: 'Choice was successfully created.' }
format.json { render json: @survey_choice, status: :created, location: @survey_choice }
format.js
else
format.html { render action: "new" }
format.json { render json: @survey_choice.errors, status: :unprocessable_entity }
end
end
end
# PUT /survey/choices/1
# PUT /survey/choices/1.json
def update
@survey_choice = Survey::Choice.find(params[:id])
respond_to do |format|
if @survey_choice.update_attributes(params[:survey_choice])
format.html { redirect_to @survey_choice, notice: 'Choice was successfully updated.' }
format.json { head :no_content }
else
format.html { render action: "edit" }
format.json { render json: @survey_choice.errors, status: :unprocessable_entity }
5 end
end
end
# DELETE /survey/choices/1
# DELETE /survey/choices/1.json
def destroy
@survey_choice = Survey::Choice.find(params[:id])
if @survey_choice.answers.count>0
redirect_to action: :show
else
@divid = divid_for(@survey_choice)
@survey_choice.destroy
respond_to do |format|
format.html { redirect_to survey_choices_url }
format.json { head :no_content }
format.js
end
end
end
end

View File

@@ -0,0 +1,104 @@
class Survey::QuestionsController < ApplicationController
# GET /survey/questions
# GET /survey/questions.json
load_and_authorize_resource
acts_as_flagable
def index
@survey_questions = Survey::Question.all
respond_to do |format|
format.html # index.html.erb
end
end
def answer
@survey_question = Survey::Question.find(params[:id])
if (params[:key].nil? || params[:key].empty?)
user = current_user
else
k=Key.find_by_uuid(params[:key] )
if k.is_valid && k.typ==3 && k.parent == @survey_question
user = k.user
end
end
@survey_question.do_answer(params[:survey_question][:selected],user)
respond_to do |format|
format.html { redirect_to action: :show}
format.js { render action: :show}
end
end
# GET /survey/questions/1
# GET /survey/questions/1.json
def create_from_template
@template = Survey::Question.find(params[:id])
parent= params[:parent_type].constantize.find(params[:parent_id])
@survey_question = @template.copy_from_template_for(parent)
@survey_question.user=current_user
render action: :show
end
def show
@survey_question = Survey::Question.find(params[:id])
respond_to do |format|
format.html # show.html.erb
end
end
# GET /survey/questions/new
# GET /survey/questions/new.json
def new
@survey_question = Survey::Question.new
@parent=params[:parent_type].constantize.find(params[:parent_id])
@survey_question.parent=@parent
respond_to do |format|
format.html # new.html.erb
end
end
# GET /survey/questions/1/edit
def edit
@survey_question = Survey::Question.find(params[:id])
end
# POST /survey/questions
# POST /survey/questions.json
def create
@survey_question = Survey::Question.new(params[:survey_question])
@survey_question.user=current_user
respond_to do |format|
if @survey_question.save
format.html { redirect_to @survey_question, notice: 'Question was successfully created.' }
else
format.html { render action: "new" }
end
end
end
# PUT /survey/questions/1
# PUT /survey/questions/1.json
def update
@survey_question = Survey::Question.find(params[:id])
@survey_question.user=current_user
@survey_question.save
respond_to do |format|
if @survey_question.update_attributes(params[:survey_question])
format.html { redirect_to @survey_question, notice: 'Question was successfully updated.' }
else
format.html { render action: "edit" }
end
end
end
# DELETE /survey/questions/1
# DELETE /survey/questions/1.json
def destroy
@survey_question = Survey::Question.find(params[:id])
@survey_question.destroy
respond_to do |format|
format.html { redirect_to survey_questions_url }
end
end
end

View File

@@ -1,44 +1,62 @@
class ThemenController < ApplicationController
# GET /themen
# GET /themen.json
load_and_authorize_resource
def index
@themen = Thema.all
respond_to do |format|
format.html # index.html.erb
format.json { render json: @themen }
end
@themen = Thema.accessible_by(current_ability,:show).where(:isdraft=>false)
@themen_drafts = Thema.accessible_by(current_ability,:show).where(:isdraft=>true)
@themen_outdated =Thema.accessible_by(current_ability,:show).outdated
end
# GET /themen/1
# GET /themen/1.json
def show
@thema = Thema.find(params[:id])
@fragen=@thema.fragen
@toolbar_elements = [{:icon=>:pencil, :hicon=>'icon-pencil', :text=>"Verwalten", :path=>verwalten_thema_path(@thema)}]
@toolbar_elements = [{:icon=>:pencil, :hicon=>'icon-pencil', :text=>I18n.t('thema.edit'), :path=>edit_thema_path(@thema)}]
@toolbar_elements = [{:icon=>:pencil, :hicon=>'icon-pencil', :text=>I18n.t("thema.manage"), :path=>verwalten_thema_path(@thema)}]
@toolbar_elements << [{:icon=>:pencil, :hicon=>'icon-pencil', :text=>I18n.t('thema.edit'), :path=>edit_thema_path(@thema)}]
@toolbar_elements << {:hicon=>'icon-remove-circle', :text=>I18n.t('thema.remove'), :path=>thema_path(@thema), :method=>:delete, :confirm=>I18n.t('thema.sure')}
respond_to do |format|
format.html {
redirect_to :controller=>'themengruppen', :id=>@thema.themengruppe.id, :action=>:show, :anchor=> "thema_"+params[:id].to_s
# redirect_to :controller=>'themengruppen', :id=>@thema.themengruppe.id, :action=>:show, :anchor=> "thema_"+params[:id].to_s
}
format.js
end
end
def sanitize
require 'sanitize'
@thema = Thema.find(params[:id])
@fragen = @thema.fragen
trans_icons= lambda do |env|
node=env[:node]
node_name=env[:node_name]
return if env[:is_whitelisted] || !node.element?
return unless node_name == 'span'
# return unless node["class"] =~ /.*ffi.*/
Sanitize.node!(node,{:elements=>["span"],:attributes=>{"span"=>["class","style"]},:css=>{:properties=>["color"]}})
{:node_whitelist=>[node]}
end
@thema.text = Sanitize.fragment(@thema.text, {:elements=>['table','tr','td','p','h1','h2','h3','h4','h5','a','th','img','ul','li','i','b','em','pre','code'],:attributes=>{'p'=>['class'],'table'=>['class'],'a'=>['href','data'],'img'=>['src','width','height'],:all=>['class']},:css=>{:properties=>['float']},:transformers=>[trans_icons]})
# # #
# #
# #
#
# @thema.text = @thema.text.sanitize
render :edit
end
def version
@thema = Thema.find(params[:id])
end
def verwalten
@thema = Thema.find(params[:id])
@attachment=Attachment.new
@fragen=@thema.fragen
@toolbar_elements = [{:icon=>:pencil, :hicon=>'icon-pencil', :text=>"Verwalten", :path=>verwalten_thema_path(@thema)}]
@toolbar_elements = [{:icon=>:pencil, :hicon=>'icon-pencil', :text=>I18n.t('thema.edit'), :path=>edit_thema_path(@thema)}]
@toolbar_elements <<{ :hicon=>'icon-leaf', :text=>"Sanitize", :path=>sanitize_thema_path(@thema)}
@toolbar_elements << {:hicon=>'icon-remove-circle', :text=>I18n.t('thema.remove'), :path=>thema_path(@thema), :method=>:delete, :confirm=>I18n.t('thema.sure')}
end
@@ -57,13 +75,11 @@ class ThemenController < ApplicationController
# GET /themen/1/edit
def edit
@thema = Thema.find(params[:id])
unless ( @thema.wikiname.nil? || @thema.wikiname.empty? )
redirect_to edit_wiki_path(Wiki.find(@thema.id))
return
end
respond_to do |format|
format.html
format.js
format.js { @themen= @thema.themengruppe.themen }
end
end
@@ -71,28 +87,43 @@ class ThemenController < ApplicationController
# POST /themen.json
def create
@thema = Thema.new(params[:thema])
@themen = @thema.themengruppe.themen.order(:priority).reverse
@themen = @thema.themengruppe.themen.order(:priority).reverse
respond_to do |format|
if @thema.save
format.html { redirect_to @thema, notice: 'Thema was successfully created.' }
@themen = @thema.themengruppe.themen.order(:priority).reverse
format.html { redirect_to @thema, notice: I18n.t("thema.created") }
format.json { render json: @thema, status: :created, location: @thema }
format.js {render action: "update"}
else
@themen = @thema.themengruppe.themen.order(:priority).reverse
format.html { render action: "new" }
format.json { render json: @thema.errors, status: :unprocessable_entity }
format.js { render action: "edit" }
end
end
end
def fragen
def is_updated
@thema = Thema.find(params[:id])
@thema.translation.touch
redirect_to @thema
end
def fragen
@thema = Thema.find(params[:id])
@fragen=@thema.fragen
respond_to do |format|
format.js
end
end
def attachments
def documents
@thema = Thema.find(params[:id])
@documents=@thema.documents
respond_to do |format|
format.js
end
end
def attachments
@thema = Thema.find(params[:id])
@attachments=@thema.attachments
@attachment=Attachment.new
@@ -104,10 +135,19 @@ class ThemenController < ApplicationController
# PUT /themen/1.json
def update
@thema = Thema.find(params[:id])
@themen = @thema.themengruppe.themen.order(:priority).reverse
@themen = @thema.themengruppe.themen.order(:priority).reverse
@thema.assign_attributes(params[:thema])
# @thema.fix_links(request.host_with_port)
respond_to do |format|
if @thema.update_attributes(params[:thema])
format.html { redirect_to @thema, notice: 'Thema was successfully updated.' }
if @thema.save
format.html {
if params["button"]=="continue"
render action: "edit", notice: I18n.t("thema.updated")
else
redirect_to @thema, notice: I18n.t("thema.updated")
end
}
format.json { head :no_content }
format.js
else
@@ -123,7 +163,7 @@ class ThemenController < ApplicationController
def destroy
@thema = Thema.find(params[:id])
@thema.destroy
@themen = @thema.themengruppe.themen.order(:priority).reverse
respond_to do |format|
format.html { redirect_to themengruppe_path(@thema.themengruppe) }
format.json { head :no_content }

View File

@@ -3,9 +3,10 @@ class ThemengruppenController < ApplicationController
# GET /themengruppen.json
load_and_authorize_resource
def index
@themengruppen = Themengruppe.public.order(:priority).reverse
@toolbar_elements = [{:icon=>:plus, :hicon=>'icon-plus-sign', :text=>I18n.t('themengruppe.new'), :path=>new_themengruppe_path()}]
@toolbar_elements = [{:icon=>:plus, :hicon=>'icon-plus-sign', :text=>I18n.t('common.verwalten'), :path=>verwalten_all_themengruppen_path()}]
@themengruppen = Themengruppe.accessible_by(current_ability, :show).not_intern.includes(:themen)
@toolbar_elements = []
@toolbar_elements << {:icon=>:plus, :hicon=>'icon-plus-sign', :text=>I18n.t('themengruppe.new'), :path=>new_themengruppe_path()} if can? :new, Themengruppe
@toolbar_elements << {:icon=>:plus, :hicon=>'icon-plus-sign', :text=>I18n.t('themengruppe.manage_all'), :path=>verwalten_all_themengruppen_path()} if can? :verwalten_all, Themengruppe
respond_to do |format|
format.html # index.html.erb
@@ -13,7 +14,7 @@ class ThemengruppenController < ApplicationController
end
end
def faqs
@themengruppen = Themengruppe.order("themengruppen.priority").includes(:themen,{themen: :fragen}).order("themen.priority").reverse
@themengruppen = Themengruppe.accessible_by(current_ability, :show).order("themengruppen.priority").includes(:themen,{themen: :fragen}).order("themen.priority")
end
@@ -21,7 +22,7 @@ class ThemengruppenController < ApplicationController
# GET /themengruppen/1.json
def show
@themengruppe = Themengruppe.find(params[:id])
@themen = @themengruppe.themen.order(:priority).reverse
@themen=@themengruppe.themen.accessible_by(current_ability, :show)
@toolbar_elements = []
@toolbar_elements << {:icon=>:pencil, :hicon=>'icon-pencil', :text=>I18n.t("themengruppe.manage"), :path=>themengruppe_verwalten_path(@themengruppe)} if can? :edit, @themengruppe
@@ -48,19 +49,20 @@ class ThemengruppenController < ApplicationController
@themengruppe = Themengruppe.find(params[:id])
end
def verwalten_all
@themengruppen =Themengruppe.order(:priority).reverse
@themengruppen =Themengruppe.public.order(:priority).reverse
@themengruppen_intern =Themengruppe.intern.order(:priority).reverse
@toolbar_elements = [{:icon=>:plus, :hicon=>'icon-plus-sign', :text=>I18n.t('themengruppe.new'), :path=>new_themengruppe_path()}]
end
end
def verwalten
@themengruppe = Themengruppe.find(params[:themengruppe_id])
@themen = @themengruppe.themen.order(:priority).reverse
@themengruppe = Themengruppe.find(params[:themengruppe_id])
@themen = @themengruppe.themen
@toolbar_elements =[]
@toolbar_elements << {:text=>I18n.t('themengruppe.show'), :path=>themengruppe_path(@themengruppe)} if can? :show, @themengruppe
@toolbar_elements << {:icon=>:pencil, :hicon=>'icon-pencil', :text=>I18n.t('themengruppe.edit'), :path=>edit_themengruppe_path(@themengruppe)} if can? :edit, @themengruppe
@toolbar_elements << {:icon=>:plus, :hicon=>'icon-plus-sign', :text=>I18n.t('thema.add'), :path=>new_themengruppe_thema_path(@themengruppe)} if can? :new, Themengruppe
@toolbar_elements << {:icon=>:plus, :hicon=>'icon-plus-sign', :text=>I18n.t('thema.add'), :path=>new_themengruppe_thema_path(@themengruppe), :remote=>true} if can? :new, Thema
@toolbar_elements << {:hicon=>'icon-remove-circle',:text=>I18n.t('themengruppe.remove'), :path=>themengruppe_path(@themengruppe), :method=>:delete,:confirm=>I18n.t('themengruppe.sure')} if can? :delete, @themengruppe
end
def sort_themengruppen
@@ -122,9 +124,7 @@ class ThemengruppenController < ApplicationController
format.json { render json: @themengruppe.errors, status: :unprocessable_entity }
end
end
end
# DELETE /themengruppen/1
end # DELETE /themengruppen/1
# DELETE /themengruppen/1.json
def destroy
@themengruppe = Themengruppe.find(params[:id])

View File

@@ -1,15 +1,29 @@
class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
skip_before_filter :verify_authenticity_token
def failure
# flash[:notice] = "Failure #{Hash.new(request.env)} #{Hash.new(params)}"
#redirect_to new_user_registration_url , :notice=>"Omniauth Login failed"
super
end
def facebook
skip_before_filter :verify_authenticity_token
def failure
# flash[:notice] = "Failure #{Hash.new(request.env)} #{Hash.new(params)}"
#redirect_to new_user_registration_url , :notice=>"Omniauth Login failed"
super
end
def developer
if Rails.env.development?
@user= User.find_for_developer_oauth(request.env["omniauth.auth"],current_user)
if @user
sign_in_and_redirect @user, event: :authentication
else
redirect_to new_user_registration_url
end
else
flash[:notice]=flash[:notice] + "Still not logged in "
redirect_to new_user_registration_url
end
end
def facebook
# You need to implement the method below in your model (e.g. app/models/user.rb)
@user = User.find_for_facebook_oauth(request.env["omniauth.auth"], current_user)
data=request.env["omniauth.auth"]
session[:fbuser_access_token]=data.credentials.token
if @user
sign_in_and_redirect @user, :event => :authentication #this will throw if @user is not activated
@@ -21,7 +35,7 @@ def facebook
end
def ldap
logger.debug current_user.to_s
logger.debug current_user.to_s
@user=User.find_for_ldap_oauth(request.env["omniauth.auth"],current_user)
# @user=User.find_for_ldap_oauth(session["devise.ldap_data"],current_user)
# @user=User.first

View File

@@ -1,8 +1,22 @@
class UsersController < ApplicationController
def index
authorize!(:index,User)
@users = User.all
end
def show
@user=User.find(params[:id])
authorize!(:show, @user)
end
def set_preferred_theme
@user=User.find(params[:id])
authorize!(:set_preferred_theme, @user)
@user.preferredtheme=params[:theme]
@user.save
redirect_to root_url
end
def add_role
authorize!(:add_role, User)
@user= User.find(params[:id])
if (params[:role]=="fetuser" && can?(:addfetuser,User))
@user.add_role(params[:role])
@@ -12,9 +26,24 @@ class UsersController < ApplicationController
end
redirect_to users_url
end
def fb_set_default_publish_page
authorize!(:doadmin, User)
if Fetsite::Application.config.facebookconfig_enabled
if params["page"].nil? || !(current_user.provider=="facebook")
redirect_to intern_home_index_path
else
@fbu=FbGraph::User.new(current_user.uid.to_s).fetch(:access_token=>session["fbuser_access_token"])
File.open("config/page.yml",'w'){|f| f.write(@fbu.accounts(:access_token=>session["fbuser_access_token"]).select { |p| p.name == params["page"] }.first.to_yaml)}
logger.info @fbu.to_s
logger.info "FbGraph Access" + session["fbuser_access_token"]
redirect_to admin_home_index_path
end
end
end
def all_update
authorize! :doadmin,User
params[:users].each do |id,u|
user=User.find(id)
user.fetprofile = Fetprofile.find(u[:fetprofile_id].to_i) if u[:fetprofile_id].to_i>0
@@ -26,7 +55,6 @@ class UsersController < ApplicationController
def do_confirm
@user= User.find(params[:id])
@user.confirm!
redirect_to users_url
end
end

View File

@@ -1,46 +0,0 @@
class WikisController < ApplicationController
load_and_authorize_resource
def show
@wiki = Wiki.find(params[:id])
@fragen = @wiki.fragen
@toolbar_elements = [{:icon=>:pencil, :hicon=>'icon-pencil', :text=>I18n.t('wiki.edit'), :path=>verwalten_wiki_path(@wiki)}]
end
def wiki
@wiki = Wiki.find_or_init(params[:name])
@fragen = @wiki.fragen
@toolbar_elements = []
# @toolbar_elements = [{:icon=>:pencil, :hicon=>'icon-pencil', :text=>I18n.t('wiki.edit'), :path=>verwalten_wiki_path(@wiki)}]
redirect_to wiki_path(@wiki)
end
def edit
@wiki = Wiki.find(params[:id])
respond_to do |format|
format.html
format.js
end
end
def update
@wiki = Wiki.find(params[:id])
@themen = @wiki.themengruppe.themen.order(:priority).reverse
@wiki.raw_data=params[:wiki][:raw_data]
respond_to do |format|
if @wiki.update_attributes(params[:wiki])
format.html { redirect_to verwalten_thema_path(@wiki), notice: 'Thema was successfully updated.' }
format.json { head :no_content }
format.js
else
format.html { render action: "edit" }
format.json { render json: @wiki.errors, status: :unprocessable_entity }
format.js { render action: "edit" }
end
end
end
end

View File

@@ -1,13 +1,89 @@
module ApplicationHelper
def current_url1(overwrite={})
url_for :params => params.merge(overwrite).except(:controller,:action,:ansicht)
def cache_array_key(array,prefix="")
return "empty_array" if array.nil? or array.empty?
prefix+array.map{|c| c.id}.join('_')+"_"+array.max{|c|c.updated_at.to_i}.updated_at.try(:utc).to_s+"_"+I18n.locale.to_s
# array.map{|c| c.id}.join('')+"_"+array.map{|c|c.try(:updated_at).try(:utc).to_s}.join('') +"_"+I18n.locale.to_s
end
def clean_calendar(cal)
cal.rubrik.meetingtyps.each do |mt|
mt.meetings.each do |m|
m.calentry.calendar=cal
end
end
end
def strip_control_chars(value)
value.chars.inject("") do |str, char|
unless char.ascii_only? && (char.ord < 32 || char.ord == 127)
str << char
end
str
end
end
def convert_topic_to_meeting(t,mt)
m=Meeting.new_with_date_and_typ(t,t.title.to_date+16.hour,mt)
m.save
m.create_protocol
m.protocol.text=t.text
m.protocol.save
m.update_time_from_protocol
m.save
t.meetings << m
t.save
end
def current_url1(overwrite={})
url_for :params => params.merge(overwrite).except(:controller,:action,:ansicht)
end
def switch_locale_url(target_locale)
current_url1({:locale=>target_locale}) .sub "/"+I18n.locale.to_s+"/", "/"+target_locale.to_s+"/"
# current_url1({:locale=>target_locale}) .sub "/"+I18n.locale.to_s+"/", "/"+target_locale.to_s+"/"
language_path(locale: target_locale)
end
def ffi1_icon (name)
content_tag("i", "", class: "ficon ffi1-" + name )
end
def ffi2_icon (name)
content_tag("i","", class: "ficon ffi2-"+name )
end
def ff_icon (name)
content_tag("i","", class: "ficon "+name )
end
def fa_stack(icon1, icon2)
h_1 = content_tag("span", content_tag("i","", class: "ficon "+" fa-"+icon1+" fa fa-stack-1x" ) + content_tag("i","", class: "ficon "+" fa-"+icon2+" fa fa-stack-2x" ),class: "fa-stack ")
h_2 = content_tag("span", h_1 ,class: "fa-stack-sm")
h_2
end
def ffi1_list
y=YAML.load_file("#{::Rails.root.to_s}/config/flatfeticon1.yml")
y["ffi1"]
end
def ffi2_list
y=YAML.load_file("#{::Rails.root.to_s}/config/flatfeticon2.yml")
y["ffi2"]
end
def fa_list
y=YAML.load_file("#{::Rails.root.to_s}/config/fontawesome.yml")
y["fa"]
end
def tinymce_icon_choice
s=""
ffi1_list.each do |i|
s=s+'<a onclick="insertIcon_ffi1(\'ffi1-'+i+'\')">'+ffi1_icon(i)+'</a>'
end
raw(s)
end
def toolbar_html(elemente)
html = ""
limiter = " | "
@@ -47,4 +123,46 @@ module ApplicationHelper
end
raw(html)
end
def absurl(path)
if path.nil?
return nil
end
url=URI(root_url)
url.path=path
return url
end
def get_theme_help(u)
# if params[:theme]== "default" || params[:theme]=="2003" || params[:theme].nil?
# params[:theme]="blue1"
# end
if ! u.try(:preferredtheme).nil? and ThemesForRails.available_theme_names.include?(u.preferredtheme)
u.preferredtheme
else
"blue1"
end
end
def like_dislike_for(obj)
out=""
if can?(:like, obj)
out += link_to ffi1_icon("like3")+" like" + "("+obj.get_likes.size.to_s+")", url_for([:like, obj]),title: "liked by " + ((current_user.liked?(obj)) ? ("you and " + ((obj.get_likes.size - 1).to_s + " others")) : obj.get_likes.size.to_s), remote: true
else
out += "liked by " + obj.get_likes.size.to_s
end
if can?(:dislike, obj)
out += link_to ffi1_icon("dislike")+" dislike" + "("+obj.get_dislikes.size.to_s+")", url_for([:dislike, obj]),title:"disliked by " + ((current_user.disliked?(obj)) ? ("you and " + ((obj.get_dislikes.size - 1).to_s + " others")) : obj.get_dislikes.size.to_s) , remote: true
else
out += "disliked by " + obj.get_dislikes.size.to_s
end
raw(out)
end
def li_tag(content)
content_tag("li", content)
end
def meta_itemprop(itemprop, content)
tag("meta", itemprop: itemprop, content: content)
end
end

View File

@@ -1,2 +1,21 @@
module AttachmentsHelper
def render_attachments_for(p)
a= Attachment.new
a.parent=p
render(partial:"attachments/attachment_list", object: p.attachments, locals: {editor: (can?(:edit, p)), parent: p} )+ ((can?(:edit, p))? (render partial:"attachments/form_bulk2", object: a ): "")
end
def render_attachments_list_for(p)
a= Attachment.new
a.parent=p
render(partial:"attachments/attachment_list", object: p.attachments, locals: {editor: (can?(:edit, p)), parent: p} )
end
def render_new_attachments_for(p, text="", options={})
a= Attachment.new
a.parent=p
((can?(:edit, p))? (render partial:"attachments/form_bulk2", object: a ): "")
end
end

View File

@@ -1,2 +1,9 @@
module CalentriesHelper
def render_calentries_for(p)
calentry_list=p.calentries
render(partial: "calentries/calentry_list", object: calentry_list, locals:{parent: p})
end
def new_calentry_div(p)
content_tag("div", "", id: divid_for(p, "new_calentry"))
end
end

View File

@@ -0,0 +1,8 @@
module CommentsHelper
def wrapid_for(o)
divid_for(o,"comments")
end
def render_comments_for(o)
render partial: "comments/comments_block", object: o
end
end

View File

@@ -0,0 +1,4 @@
module CrawlobjectHelper
end

View File

View File

@@ -0,0 +1,3 @@
module MailerHelper
end

View File

@@ -0,0 +1,2 @@
module MeetingsHelper
end

View File

@@ -0,0 +1,2 @@
module MeetingtypsHelper
end

View File

@@ -1,2 +1,5 @@
module NeuigkeitenHelper # :nodoc:
def send_daily_newsletter(user)
NewsMailer.daily_newsletter(user.id).deliver
end
end

View File

@@ -0,0 +1,14 @@
module PluginsHelper
def divid_for(obj,suffix="")
if obj.nil?
""
else
obj.class.to_s.downcase.gsub("::","_")+ "_" + suffix.downcase + "_" + obj.id.to_s
end
end
def div_tag_for(o,&block)
content = capture(&block)
content_tag(:div, content, :id=>divid_for(o))
end
end

View File

@@ -0,0 +1,2 @@
module Survey::AnswersHelper
end

View File

@@ -0,0 +1,2 @@
module Survey::ChoicesHelper
end

View File

@@ -0,0 +1,5 @@
module Survey::QuestionsHelper
def new_question_for(obj,t="Neue Frage")
render partial: "survey/questions/new_question", locals: {question_templates: Survey::Question.templates, parent: obj, text: t}
end
end

View File

@@ -0,0 +1,28 @@
class CheckboxAutocompleteInput < FormtasticBootstrap::Inputs::CheckBoxesInput
def input_html_options
super
#super.merge(:class => "input-append date")
end
def html_options
super
#super.merge(:default => Date.today)
end
def wrapper_html_options
super.merge(:class=>"")
#super.merge(:class=>"datepicker",'date-date-format'.to_sym=>"%d.%m.%Y")
end
def controls_wrapper_html_options
super.merge(:class=> "datepicker date input-append", 'data-date'.to_sym =>I18n.l(Date.today()).to_s, 'data-date-format'.to_sym=>I18n.t('date.formats.default-picker'))
end
def to_html
bootstrap_wrapping do
builder.text_field(method, input_html_options) + 'sdf'
end
end
def options
super
#d.merge(:class=>"datepicker")
#super.merge(:append_content=>'<span class="add-on input-append"
#super.merge(:append_content=>'<span class="add-on" ><i class="icon-th"></i></span>')
end
end

View File

@@ -0,0 +1,32 @@
class DatetimepickerInput < FormtasticBootstrap::Inputs::StringInput
def input_html_options
s=super
value=builder.object.send(method)
value=I18n.l(value) unless value.nil?
super.merge(:class => "datetimepicker",:value=>value)
end
def html_options
super
end
def wrapper_html_options
super.merge(:class=>"")
#super.merge(:class=>"datepicker",'date-date-format'.to_sym=>"%d.%m.%Y")
end
def controls_wrapper_html_options
super.merge(:class=> " date input-append", 'data-date'.to_sym =>I18n.l(Date.today()).to_s, 'data-date-format'.to_sym=>I18n.t('date.formats.default-picker'))
end
def to_html
bootstrap_wrapping do
builder.text_field(method, input_html_options) +
'<span class="add-on" ><i class="icon-th"></i></span>'.html_safe()
end
end
def options
super
#d.merge(:class=>"datepicker")
#super.merge(:append_content=>'<span class="add-on input-append"
#super.merge(:append_content=>'<span class="add-on" ><i class="icon-th"></i></span>')
end
end

View File

@@ -0,0 +1,162 @@
# A formtastic input which incorporates carrierwave uploader functionality.
#
# Intelligently adds the cache field, displays and links to the current
# value if there is one, adds a class to the wrapper when replacing an
# existing value, allows removing an existing value with the checkbox
# taking into account validation requirements.
#
# There are several options:
#
# * Toggle the replacement field with `replaceable: true/false`.
# * The replace file label is translatable as `replace_label` or using option `replace_label: "value"` (like `label`).
# * Toggle the remove checkbox with `removable: true/false` (`true` overrides `required`).
# * The remove checkbox label is translatable as `remove_label` or using option `remove_label: "value"` (like `label`).
# * Override existing file display and links using `existing_html` and `existing_link_html` (like `wrapper_html`).
#
# Example: `form.input :file, as: "uploader"`
#
# Copyright (c) Samuel Cochran 2012, under the [MIT license](http://www.opensource.org/licenses/mit-license).
class UploaderInput < Formtastic::Inputs::FileInput
def linkable?
options[:linkable] != false
end
def replaceable?
options[:replaceable] != false
end
def removable?
options[:removable] != false and (options[:removable] == true or not required?)
end
def method_present?
if object.respond_to?("#{method}?")
object.send("#{method}?")
else
object.send(method).present?
end
end
def method_changed?
if object.respond_to? "#{method}_changed?"
object.send "#{method}_changed?"
else
false
end
end
def method_was_present?
if not method_changed?
method_present?
else
object.send("#{method}_was").present?
end
end
def wrapper_html_options
super.tap do |options|
options[:class] << " replaceable" if replaceable?
options[:class] << " removable" if removable?
options[:class] << " present" if method_present?
options[:class] << " changed" if method_changed?
options[:class] << " was_present" if method_was_present?
end
end
def cache_html
if method_changed?
builder.hidden_field("#{method}_cache")
end or "".html_safe
end
def file_html
builder.file_field(method, input_html_options)
end
def existing_html_options
expand_html_options(options[:existing_html]) do |opts|
opts[:class] << "existing"
end
end
def existing_link_html_options
expand_html_options(options[:existing_link_html]) do |opts|
opts[:class] << "existing"
end
end
def existing_html
if method_present?
# TODO: Add classes based on mime type for icons, etc.
existing = template.content_tag(:span, template.image_tag( object.send(method).thumb), existing_html_options)
template.link_to_if linkable?, existing, object.send(method).url, existing_link_html_options
end or "".html_safe
end
def replace_label_html
template.content_tag(:label, class: "replace_label") do
template.content_tag(:span, localized_string(method, "Replace #{method.to_s.titleize}", :replace_label))
end
end
def replace_html
if replaceable?
replace_label_html <<
file_html
end or "".html_safe
end
def remove_html
if removable?
template.content_tag(:label, class: "remove_label") do
template.check_box_tag("#{object_name}[remove_#{method}]", "1", false, id: "#{sanitized_object_name}_remove_#{sanitized_method_name}") <<
# XXX: There are probably better ways to do these translations using defaults.
template.content_tag(:span, localized_string(method, "Remove #{method.to_s.titleize}", :remove_label))
end
end or "".html_safe
end
def to_html
input_wrapping do
label_html <<
cache_html <<
if method_was_present?
existing_html <<
replace_html <<
remove_html
else
existing_html <<
file_html
end
end
end
protected
def expand_html_options opts
(opts || {}).dup.tap do |opts|
opts[:class] =
case opts[:class]
when Array
opts[:class].dup
when nil
[]
else
[opts[:class].to_s]
end
opts[:data] =
case opts[:data]
when Hash
opts[:data].dup
when nil
{}
else
{"" => opts[:data].to_s}
end
yield opts if block_given?
opts[:class] = opts[:class].join(' ')
end
end
end

View File

@@ -0,0 +1,44 @@
# -*- coding: utf-8 -*-
class NewsMailer < ActionMailer::Base
default from: "salzamt@fet.at"
helper :plugins
def neuigkeit_mail(email, neuigkeit_id)
@neuigkeit= Neuigkeit.find(neuigkeit_id)
@user=User.first
@ability=Ability.new(@user)
subject = @neuigkeit.title
subject = subject.to_s + " email: " + email.to_s if Rails.env=="development"
email = "andis@fet.at" if Rails.env=="development"
email="andis@fet.at"
mail(to: email, subject: subject)
render locals: {current_user: User.first}
end
def daily_newsletter(user_id)
user=User.find(user_id)
self.message.perform_deliveries = false unless user.flag_getemails
ability= Ability.new(user)
@neuigkeiten=Neuigkeit.accessible_by(ability).published_scope.where("cache_order<2")
end
def daily_reminder(user_id)
user=User.find(user_id)
@user=user
self.message.perform_deliveries = false unless user.flag_getemails
@ability = Ability.new(user)
@calentries = Calentry.of_month(Date.today).limit(100)
# @neuigkeiten=Neuigkeit.accessiblße_by(ability).published_scope.where("cache_order<2")
mail(to: user.email, content_type: "text/html", subject: "sdf")
render locals: {c_user: user}
end
private
include CanCan::ControllerAdditions
def current_user
@user
end
def current_ability
@ability
end
end

View File

@@ -1,88 +1,247 @@
# -*- coding: utf-8 -*-
require 'ipaddr'
class Ability
include CanCan::Ability
def initialize(user)
# Define abilities for the passed in user here. For example:
#
# if user.admin?
# can :manage, :all
# else
# can :read, :all
# end
# The first argument to `can` is the action you are giving the user permission to do.
# If you pass :manage it will apply to every action. Other common actions here are
# :read, :create, :update and :destroy.
#
# The second argument is the resource the user can perform the action on. If you pass
# :all it will apply to every resource. Otherwise pass a Ruby class of the resource.
#
# The third argument is an optional hash of conditions to further filter the objects.
# For example, here the user can only update published articles.
#
# can :update, Article, :published => true
#
# See the wiki for details: https://github.com/ryanb/cancan/wiki/Defining-Abilitiescan :manage, :all
def initialize(user,request=nil,key=nil)
tunet=IPAddr.new("128.131.95.0/24")
local=IPAddr.new("127.0.0.1")
loggedin=!(user.nil?)
unless key.nil?
k=Key.find_by_uuid(key)
if !k.nil? && k.is_valid && k.typ == 0
user=k.user
end
end
user ||= User.new # guest user (not logged in)
if (user.has_role?("fetuser") || user.has_role?("fetadmin") || tunet.include?(IPAddr.new(request.remote_ip)) || local.include?(IPAddr.new(request.remote_ip)))
can :infoscreen, User
end
user ||= User.new # guest user (not logged in)
if( user.has_role?("fetuser") || user.has_role?("fetadmin"))
can [:show,:answer, :create,:new, :create_from_template, :flag], Survey::Question
can [:edit, :update, :flag_delete], Survey::Question, :flag_locked=>false
can :flag_locked, Survey::Question, :user_id=>user.id
can [:show,:new], Survey::Choice
can [:edit,:update, :delete,:create], Survey::Choice, :question=>{:flag_locked=>false}
can :manage, Survey::Answer
end
if user.has_role?("fetadmin")
can [:delete,:flag_template], Survey::Question
end
#---------------------------------------------------
can [:index,:hide], Comment
can :show, Comment
# For Debug allow everything
# Remove this line in production environment and for testing user management
# can :manage, :all
can :addfetuser, User
can :addfetadmin, User
if loggedin
can [:create,:new], Comment
can [:comment], Comment
end
can [:show, :index], Studium
can [:show, :index], Modulgruppe
# can :manage, Comment
unless user.has_role?("fetadmin")
cannot :delete, Comment
cannot :destroy, Comment
end
#-----------------------------------------------------
# Rechteverwaltung fuer Studien Modul
can [:show, :index], Studium, :visible=>true
can [:show], Modulgruppe
can [:show, :index], Modul
can [:show, :index], Lva
can [:show,:index], Gallery
can [:show, :index,:faqs], Themengruppe
can [:show], Thema
can [:create], Beispiel
can [:show, :index, :beispiel_sammlung], Lva
can [:create, :show], Beispiel, flag_delete: false
if loggedin
can :like, Beispiel
can :dislike, Beispiel
end
if ((user.has_role?("moderator",Beispiel)) || user.has_role?("fetuser") || user.has_role?("fetadmin"))
can :flag, Beispiel
can [:create, :show], Beispiel, flag_delete: true
can [:edit, :update], Beispiel
can :flag, Beispiel
can :set_lecturer, Beispiel
can :flag_delete, Beispiel
can :flag_goodquality, Beispiel
can :flag_badquality, Beispiel
end
if (user.has_role?("moderator",Lva))
can [:verwalten, :edit, :compare_tiss, :load_tiss, :update], Lva
end
if( user.has_role?("fetuser") || user.has_role?("fetadmin"))
can :manage, Modulgruppe
can :manage, Modul
can :manage, Lva
can :manage, Studium
#can :manage, Beispiel
can :comment, Beispiel
can :manage, Lecturer
end
unless user.has_role?("fetadmin")
cannot :delete, Studium
cannot :delete, Modulgruppe
cannot :delete, Modul
end
if user.has_role?("fetadmin")
can [:index, :parse, :show], Crawlobject
end
#-----------------------------------------------------
# Rechteverwaltung fuer Informationen
can [:show, :index,:faqs], Themengruppe, :public=>true
can [:show], Thema, :isdraft=>false, :themengruppe=>{:public=>true}
can :show, Frage
if loggedin
end
if( user.has_role?("fetuser") || user.has_role?("fetadmin"))
can :manage, Frage
can :showdraft , Thema
can :showintern, Thema
can :manage, Thema
can [:index, :faqs, :show,:new,:edit, :verwalten_all, :verwalten, :sort_themengruppen, :sort_themen, :create, :update ], Themengruppe
can :manage, Attachment
end
can [:update,:edit,:verwalten, :showdraft], Thema, :id=>Thema.with_role(:editor, user).pluck(:id)
can [:index, :faqs, :show,:new,:edit, :verwalten_all, :verwalten, :sort_themengruppen, :sort_themen, :create, :update, :delete], Thema, :themengruppe_id=>Themengruppe.with_role(:admin,user).pluck(:id)
can :delete, Themengruppe, :id=>Themengruppe.with_role(:admin,user).pluck(:id)
if user.has_role?("fetadmin")
can :delete, Themengruppe
can :delete, Thema
end
unless user.has_role?("fetadmin")
cannot :delete, Themengruppe
cannot :delete, Thema
end
#-----------------------------------------------------
# Rechteverwaltung fuer Fotos
# can [:show,:index], Gallery, :intern=>false
can [:show,:index], Gallery
can :show, Foto
if loggedin
end
if( user.has_role?("fetuser") || user.has_role?("fetadmin"))
can :manage, Gallery
can :manage, Foto
end
unless user.has_role?("fetadmin")
cannot :delete, Gallery
end
#-----------------------------------------------------
# Rechteverwaltung fuer Mitarbeiter
can [:show, :index], Fetprofile
can [:show, :index],Gremium
# Rechteverwaltung fuer Studien Modul
if loggedin
end
if( user.has_role?("fetuser") || user.has_role?("fetadmin"))
can :manage, Fetprofile
can :manage, Gremium
can :manage, Membership
end
unless user.has_role?("fetadmin")
cannot :delete, Fetprofile
cannot :delete ,Gremium
end
#-----------------------------------------------------
# Rechteverwaltung fuer Neuigkeiten
can :index, Rubrik
can [:show], Rubrik, :public=>true
can [:list], Neuigkeit, :cache_is_published=>true, :rubrik=>{:public=>true}
can :show, Neuigkeit, :cache_is_published=>true, :rubrik=>{:public=>true}
if loggedin
can :show, :id => user.id
end
if( user.has_role?("fetuser") || user.has_role?("fetadmin"))
can :showversions, Neuigkeit
can :showintern, Neuigkeit
can :showintern, Rubrik
can :seeintern, User
can :set_preferred_theme, user
can :list, Neuigkeit
can :shownonpublic, Rubrik
can :manage, Nlink
end
if user.has_role?("newsadmin") || user.has_role?("fetadmin")
can :addmoderator, Rubrik
end
if user.has_role?("fetadmin")
can :addfetuser, User
can :addfetadmin, User
can :add_role, User
can :show, User
can :index, User
can :edit, User
can :manage, User
can :set_preferred_theme, User
end
if user.has_role?("newsadmin") || user.has_role?( "fetadmin") || user.has_role?( "fetuser")
can :manage, Rubrik
can :manage, Neuigkeit
can :showunpublished, Neuigkeit
end
unless user.has_role?("fetadmin")
cannot :delete, Rubrik
cannot :delete, Neuigkeit
end
# Calendar
if( user.has_role?("fetuser") || user.has_role?("fetadmin"))
can [:show, :edit, :update,:new,:create,:write, :write_etherpad, :read_from_etherpad, :dump_to_etherpad, :search], Document
can :manage, Meeting
can :manage, Meetingtyp
end
if user.has_role?("fetadmin")
can :manage, Document
end
if loggedin
end
can :show, Document, :typ=>11
unless user.has_role?( "fetadmin")
cannot :delete, Document
cannot :delete, Meeting
end
if user.has_role?( "fetadmin")
can :manage, Meetingtyp
end
# Rechteverwaltung Kalender
can [:show, :index], Calendar, :public => true
can [:showics], Calendar
can [:show], Calentry
if( user.has_role?("fetuser") || user.has_role?("fetadmin"))
can :manage,:all
can :manage, Modulgruppe
# can [:show], Calentry
if (!k.nil? && k.typ==1 && (k.user.has_role?("fetuser")||k.user.has_role?("fetadmin")))
if k.parent.nil?
can [:show,:index], Calendar
else
can [:show], Calendar, id: k.parent_id
end
end
if( user.has_role?("fetuser") || user.has_role?("fetadmin"))
can [:show,:index], Calendar
can [:edit, :update,:new,:create,:verwalten], Calendar
can [:edit, :update,:new,:create,:verwalten], Calentry
can [:edit, :update,:new,:create,:verwalten,:delete], Calentry
end
if( user.has_role?("fetadmin"))
can [:delete],Calendar
can [:delete],Calentry
can :doadmin, User
end
# Rechteverwaltung fuer Neuigkeiten
# can :write, Neuigkeit if user.has_role?("newsmoderator", Neuigkeit.rubrik)
if user.has_role?("newsadmin") || user.has_role?("fetadmin")
can :addmoderator, Rubrik
end
can [:show,:index], Rubrik, :public=>true
can :show, Neuigkeit, :rubrik=>{:public=>true}
if user.has_role?("newsadmin") || user.has_role?( "fetadmin") || user.has_role?( "fetuser")
can :manage, Rubrik
can :manage, Neuigkeit
can :shownonpublic, Rubrik
can :showunpublished, Neuigkeit
can :seeintern, User
end
if user.has_role?("fetadmin")
can :emails,User
end
end
end

View File

@@ -12,11 +12,23 @@
class Attachment < ActiveRecord::Base
has_paper_trail
attr_accessible :name, :datei, :datei_cache
attr_accessible :name, :datei, :datei_cache,:flag_titlepic,:parent_id, :parent_type
belongs_to :thema
mount_uploader :datei, AttachmentUploader
validates :thema, :presence => true
# validates :thema, :presence => true
validates :name, :presence => true
scope :titlepic, ->{where(flag_titlepic: true)}
default_scope { order("LOWER(name)") }
belongs_to :parent, :polymorphic=>true
def image?
# data_ext = datei.file.extension.downcase
# %w(jpg png jpeg).include?(data_ext)
datei.image?(datei.file)
end
def self.parent_attachment_list_id(parent)
"attachments_for_"+parent.class.to_s+"_"+parent.id.to_s
end
def to_jq_upload
{

View File

@@ -13,9 +13,23 @@
class Beispiel < ActiveRecord::Base
has_paper_trail
attr_accessible :desc, :name, :lva_id, :beispieldatei, :beispieldatei_cache, :datum
attr_accessible :desc, :name, :lva_id, :beispieldatei, :beispieldatei_cache, :datum, :lecturer_id
acts_as_votable
acts_as_flagable
belongs_to :lva
mount_uploader :beispieldatei, AttachmentUploader
belongs_to :lecturer
FLAG_ICONS = {"badquality"=>"fa fa-flag","goodquality"=>"fa fa-flag", "delete"=>"fa fa-trash"}
FLAG_CONFIRM={}
scope :not_flag_badquality, ->{where("flag_badquality IS NULL OR flag_badquality=?",false)}
scope :flag_badquality, ->{where("flag_badquality=?",true)}
scope :not_flag_delete, ->{where("flag_delete IS NULL OR flag_delete=?",false)}
scope :flag_delete, ->{where("flag_delete=?",true)}
mount_uploader :beispieldatei, AttachmentUploader
include IsCommentable
validates :beispieldatei, :presence => true
validates :name, :presence => true
validates :lva_id, :presence => true
@@ -33,4 +47,7 @@ class Beispiel < ActiveRecord::Base
"delete_type" => "DELETE"
}
end
def divid
"beispiel_"+id.to_s
end
end

Some files were not shown because too many files have changed in this diff Show More