From 6599ae02e81ac76696e6a9e7fc3cb25798f4f9ec Mon Sep 17 00:00:00 2001 From: Sven Slootweg Date: Tue, 6 Sep 2016 07:02:37 +0200 Subject: [PATCH] Get rid of old code --- LICENSE | 13 - README | 31 - command_daemon/start_tunnel.py | 28 - config.json | 37 - console/master/dropper | 150 --- console/slave/dropper | 6 - docs/api/client.html | 221 ---- docs/api/client.zpy | 230 ---- frontend/api.local.php | 119 -- frontend/authenticators/admin.php | 34 - frontend/authenticators/api/client.php | 57 - frontend/authenticators/vps.php | 59 - frontend/classes/apikey.php | 86 -- frontend/classes/iprange.php | 261 ---- frontend/classes/node.php | 133 -- frontend/classes/setting.php | 43 - frontend/classes/sshconnector.php | 345 ----- frontend/classes/template.php | 46 - frontend/classes/user.php | 122 -- frontend/classes/vps.php | 729 ----------- frontend/cphp | 1 - frontend/cron.15.php | 37 - frontend/includes/.gitignore | 1 - frontend/includes/include.base.php | 39 - .../includes/include.config.api.sample.php | 14 - frontend/includes/include.config.php | 20 - frontend/includes/include.constants.php | 31 - frontend/includes/include.exceptions.php | 62 - frontend/includes/include.misc.php | 229 ---- frontend/includes/include.parsing.php | 94 -- frontend/index.php | 14 - frontend/locales/dutch.lng | 86 -- frontend/locales/english.json | 1 - frontend/locales/english.lng | 342 ----- frontend/locales/romanian.lng | 86 -- frontend/modules/admin/node/add.php | 101 -- frontend/modules/admin/node/list.php | 34 - frontend/modules/admin/node/lookup.php | 67 - frontend/modules/admin/overview/index.php | 16 - frontend/modules/admin/template/add.php | 77 -- frontend/modules/admin/template/list.php | 40 - frontend/modules/admin/user/edit.php | 78 -- frontend/modules/admin/user/list.php | 33 - frontend/modules/admin/user/lookup.php | 71 - frontend/modules/admin/vps/create.php | 213 --- frontend/modules/admin/vps/list.php | 51 - frontend/modules/admin/vps/suspend.php | 75 -- frontend/modules/admin/vps/terminate.php | 77 -- frontend/modules/api/client/vps/list.php | 66 - .../modules/client/vps/action/restart.php | 55 - frontend/modules/client/vps/action/start.php | 56 - frontend/modules/client/vps/action/stop.php | 56 - frontend/modules/client/vps/console.php | 21 - frontend/modules/client/vps/list.php | 58 - frontend/modules/client/vps/lookup.php | 121 -- frontend/modules/client/vps/password.php | 82 -- frontend/modules/client/vps/reinstall.php | 119 -- frontend/modules/error/access.php | 16 - frontend/modules/error/api/access.php | 2 - frontend/modules/shared/login.php | 59 - frontend/modules/shared/logout.php | 33 - frontend/modules/test.php | 83 -- frontend/rewrite.php | 314 ----- frontend/templates/default/admin/main.tpl | 11 - frontend/templates/default/admin/node/add.tpl | 58 - .../templates/default/admin/node/list.tpl | 25 - .../templates/default/admin/node/lookup.tpl | 78 -- .../default/admin/overview/index.tpl | 3 - .../templates/default/admin/template/add.tpl | 26 - .../templates/default/admin/user/edit.tpl | 45 - .../templates/default/admin/user/list.tpl | 31 - .../templates/default/admin/user/lookup.tpl | 93 -- frontend/templates/default/admin/vps/add.tpl | 88 -- frontend/templates/default/admin/vps/list.tpl | 54 - .../templates/default/admin/vps/suspend.tpl | 14 - .../templates/default/admin/vps/terminate.tpl | 18 - .../templates/default/client/vps/console.tpl | 26 - .../default/client/vps/error/notfound.tpl | 1 - .../templates/default/client/vps/list.tpl | 59 - .../templates/default/client/vps/lookup.tpl | 138 -- .../templates/default/client/vps/main.tpl | 19 - .../templates/default/client/vps/password.tpl | 22 - .../default/client/vps/reinstall.tpl | 23 - .../templates/default/shared/error/error.tpl | 4 - .../templates/default/shared/error/info.tpl | 4 - .../default/shared/error/success.tpl | 4 - .../default/shared/error/warning.tpl | 4 - frontend/templates/default/shared/login.tpl | 25 - frontend/templates/default/shared/main.tpl | 39 - .../templates/default/static/css/chosen.css | 397 ------ frontend/templates/default/static/css/cvm.css | 662 ---------- .../static/css/fonts/base/icomoon-webfont.eot | Bin 28264 -> 0 bytes .../static/css/fonts/base/icomoon-webfont.svg | 175 --- .../static/css/fonts/base/icomoon-webfont.ttf | Bin 28084 -> 0 bytes .../css/fonts/base/icomoon-webfont.woff | Bin 18816 -> 0 bytes .../fonts/social/icomoonsocial-webfont.eot | Bin 24832 -> 0 bytes .../fonts/social/icomoonsocial-webfont.svg | 91 -- .../fonts/social/icomoonsocial-webfont.ttf | Bin 24652 -> 0 bytes .../fonts/social/icomoonsocial-webfont.woff | Bin 17452 -> 0 bytes .../default/static/css/img/breadcrumbs-bg.gif | Bin 2276 -> 0 bytes .../default/static/css/img/chosen-sprite.png | Bin 1560 -> 0 bytes .../default/static/css/img/fancybox/blank.gif | Bin 43 -> 0 bytes .../static/css/img/fancybox/fancy_close.png | Bin 1517 -> 0 bytes .../static/css/img/fancybox/fancy_loading.png | Bin 10195 -> 0 bytes .../css/img/fancybox/fancy_nav_left.png | Bin 1446 -> 0 bytes .../css/img/fancybox/fancy_nav_right.png | Bin 1454 -> 0 bytes .../css/img/fancybox/fancy_shadow_e.png | Bin 107 -> 0 bytes .../css/img/fancybox/fancy_shadow_n.png | Bin 106 -> 0 bytes .../css/img/fancybox/fancy_shadow_ne.png | Bin 347 -> 0 bytes .../css/img/fancybox/fancy_shadow_nw.png | Bin 324 -> 0 bytes .../css/img/fancybox/fancy_shadow_s.png | Bin 111 -> 0 bytes .../css/img/fancybox/fancy_shadow_se.png | Bin 352 -> 0 bytes .../css/img/fancybox/fancy_shadow_sw.png | Bin 340 -> 0 bytes .../css/img/fancybox/fancy_shadow_w.png | Bin 103 -> 0 bytes .../css/img/fancybox/fancy_title_left.png | Bin 503 -> 0 bytes .../css/img/fancybox/fancy_title_main.png | Bin 96 -> 0 bytes .../css/img/fancybox/fancy_title_over.png | Bin 70 -> 0 bytes .../css/img/fancybox/fancy_title_right.png | Bin 506 -> 0 bytes .../static/css/img/fancybox/fancybox-x.png | Bin 203 -> 0 bytes .../static/css/img/fancybox/fancybox-y.png | Bin 176 -> 0 bytes .../static/css/img/fancybox/fancybox.png | Bin 15287 -> 0 bytes .../img/fancybox/jquery.easing-1.3.pack.js | 72 - .../css/img/fancybox/jquery.fancybox-1.3.4.js | 1156 ----------------- .../fancybox/jquery.fancybox-1.3.4.pack.js | 46 - .../fancybox/jquery.mousewheel-3.0.4.pack.js | 14 - .../templates/default/static/css/img/grid.png | Bin 1853 -> 0 bytes .../static/css/img/icon-arrow-right.png | Bin 996 -> 0 bytes .../default/static/css/img/icon-check.png | Bin 537 -> 0 bytes .../default/static/css/img/rte/link.png | Bin 343 -> 0 bytes .../default/static/css/img/rte/link_break.png | Bin 657 -> 0 bytes .../static/css/img/rte/picture_empty.png | Bin 463 -> 0 bytes .../static/css/img/rte/text_align_center.png | Bin 234 -> 0 bytes .../static/css/img/rte/text_align_left.png | Bin 209 -> 0 bytes .../static/css/img/rte/text_align_right.png | Bin 209 -> 0 bytes .../default/static/css/img/rte/text_bold.png | Bin 304 -> 0 bytes .../static/css/img/rte/text_italic.png | Bin 223 -> 0 bytes .../static/css/img/rte/text_list_bullets.png | Bin 344 -> 0 bytes .../static/css/img/rte/text_list_numbers.png | Bin 357 -> 0 bytes .../static/css/img/rte/text_strikethrough.png | Bin 269 -> 0 bytes .../static/css/img/rte/text_subscript.png | Bin 422 -> 0 bytes .../static/css/img/rte/text_superscript.png | Bin 421 -> 0 bytes .../static/css/jquery.fancybox-1.3.4.css | 359 ----- .../default/static/css/kickstart-buttons.css | 443 ------- .../default/static/css/kickstart-forms.css | 451 ------- .../default/static/css/kickstart-grid.css | 85 -- .../default/static/css/kickstart-icons.css | 67 - .../default/static/css/kickstart-menus.css | 122 -- .../default/static/css/kickstart.css | 608 --------- .../templates/default/static/css/prettify.css | 1 - .../templates/default/static/css/tiptip.css | 99 -- .../default/static/images/button/restart.png | Bin 2059 -> 0 bytes .../default/static/images/button/start.png | Bin 1039 -> 0 bytes .../default/static/images/button/stop.png | Bin 298 -> 0 bytes .../default/static/images/error/error.png | Bin 4340 -> 0 bytes .../default/static/images/error/info.png | Bin 4403 -> 0 bytes .../default/static/images/error/success.png | Bin 4447 -> 0 bytes .../default/static/images/error/warning.png | Bin 4567 -> 0 bytes .../default/static/images/menu/alerts.png | Bin 410 -> 0 bytes .../default/static/images/menu/api.png | Bin 420 -> 0 bytes .../default/static/images/menu/backup.png | Bin 315 -> 0 bytes .../default/static/images/menu/console.png | Bin 232 -> 0 bytes .../default/static/images/menu/ip.png | Bin 256 -> 0 bytes .../default/static/images/menu/key.png | Bin 363 -> 0 bytes .../default/static/images/menu/lock.png | Bin 396 -> 0 bytes .../default/static/images/menu/overview.png | Bin 357 -> 0 bytes .../default/static/images/menu/reinstall.png | Bin 447 -> 0 bytes .../default/static/images/menu/statistics.png | Bin 279 -> 0 bytes .../default/static/images/menu/user.png | Bin 467 -> 0 bytes .../default/static/images/misc/loading.gif | Bin 493 -> 0 bytes .../default/static/images/misc/logo.png | Bin 5164 -> 0 bytes .../default/static/images/misc/wrench.png | Bin 826 -> 0 bytes .../default/static/images/status/offline.png | Bin 294 -> 0 bytes .../default/static/images/status/online.png | Bin 298 -> 0 bytes .../static/images/status/suspended.png | Bin 294 -> 0 bytes .../default/static/images/status/unknown.png | Bin 378 -> 0 bytes frontend/templates/default/static/js/cvm.js | 72 - .../templates/default/static/js/kickstart.js | 527 -------- .../templates/default/static/js/prettify.js | 28 - frontend/templates/pure/admin/main.tpl | 16 - frontend/templates/pure/admin/node/add.tpl | 50 - frontend/templates/pure/admin/node/list.tpl | 30 - frontend/templates/pure/admin/node/lookup.tpl | 87 -- .../templates/pure/admin/overview/index.tpl | 3 - .../templates/pure/admin/template/add.tpl | 36 - .../templates/pure/admin/template/list.tpl | 56 - frontend/templates/pure/admin/vps/add.tpl | 77 -- frontend/templates/pure/client/vps/list.tpl | 63 - .../templates/pure/shared/error/error.tpl | 4 - frontend/templates/pure/shared/login.tpl | 19 - frontend/templates/pure/shared/main.tpl | 27 - frontend/templates/pure/static/css/cvm.css | 82 -- .../pure/static/css/font-awesome.css | 4 - .../pure/static/fonts/FontAwesome.otf | Bin 62856 -> 0 bytes .../pure/static/fonts/fontawesome-webfont.eot | Bin 38205 -> 0 bytes .../pure/static/fonts/fontawesome-webfont.svg | 414 ------ .../pure/static/fonts/fontawesome-webfont.ttf | Bin 80652 -> 0 bytes .../static/fonts/fontawesome-webfont.woff | Bin 44432 -> 0 bytes .../templates/pure/static/images/logo.png | Bin 5164 -> 0 bytes graphics/icon_alert.svg | 66 - graphics/icon_api.svg | 66 - graphics/icon_backup.xcf | Bin 920 -> 0 bytes graphics/icon_ip.xcf | Bin 1142 -> 0 bytes graphics/icon_key.svg | 65 - graphics/icon_lock.svg | 67 - graphics/icon_overview.xcf | Bin 1396 -> 0 bytes graphics/icon_reinstall.xcf | Bin 2781 -> 0 bytes graphics/icon_statistics.xcf | Bin 1040 -> 0 bytes graphics/icon_webshell.xcf | Bin 1258 -> 0 bytes graphics/loading.xcf | Bin 2038 -> 0 bytes graphics/logo.xcf | Bin 13428 -> 0 bytes graphics/questionmark.svg | 71 - graphics/restart.svg | 61 - graphics/shadow_quota_bars.txt | 1 - graphics/start.svg | 73 -- graphics/stop.svg | 63 - graphics/styles.txt | 21 - graphics/user.svg | 71 - graphics/wrench.svg | 70 - installer/build.sh | 28 - installer/common/setuplib.py | 129 -- installer/master/db_updates/1.sql | 8 - installer/master/db_updates/2.sql | 1 - installer/master/db_updates/3.sql | 1 - installer/master/dump.sql | 91 -- installer/master/install.py | 1 - installer/slave/centos5.repo | 70 - installer/slave/centos6.repo | 70 - installer/slave/command_daemon | 109 -- installer/slave/exporter.py | 101 -- installer/slave/grub_deb7.cfg | 202 --- installer/slave/install.py | 512 -------- installer/slave/post_reboot.py | 94 -- installer/slave/selinux.cfg | 10 - installer/slave/sysctl.conf | 9 - logshell/cvmshell | 26 - logshell/logcmd | 41 - logshell/logshell | 17 - runhelper/runhelper | 26 - sass-watch.sh | 3 - scss/pure/cvm.scss | 185 --- sshd/id_rsa.sshd | 27 - sshd/id_rsa.sshd.pub | 1 - sshd/sshd.py | 39 - tools/locale_convert.py | 21 - tools/pysfx/b64reader.py | 48 - tools/pysfx/gzipreader.py | 47 - tools/pysfx/pysfx.py | 73 -- tools/pysfx/unpack.template | 85 -- 248 files changed, 16006 deletions(-) delete mode 100644 LICENSE delete mode 100644 README delete mode 100755 command_daemon/start_tunnel.py delete mode 100644 config.json delete mode 100755 console/master/dropper delete mode 100755 console/slave/dropper delete mode 100644 docs/api/client.html delete mode 100644 docs/api/client.zpy delete mode 100644 frontend/api.local.php delete mode 100644 frontend/authenticators/admin.php delete mode 100644 frontend/authenticators/api/client.php delete mode 100644 frontend/authenticators/vps.php delete mode 100644 frontend/classes/apikey.php delete mode 100644 frontend/classes/iprange.php delete mode 100644 frontend/classes/node.php delete mode 100644 frontend/classes/setting.php delete mode 100644 frontend/classes/sshconnector.php delete mode 100644 frontend/classes/template.php delete mode 100644 frontend/classes/user.php delete mode 100644 frontend/classes/vps.php delete mode 120000 frontend/cphp delete mode 100644 frontend/cron.15.php delete mode 100644 frontend/includes/.gitignore delete mode 100644 frontend/includes/include.base.php delete mode 100644 frontend/includes/include.config.api.sample.php delete mode 100644 frontend/includes/include.config.php delete mode 100644 frontend/includes/include.constants.php delete mode 100644 frontend/includes/include.exceptions.php delete mode 100644 frontend/includes/include.misc.php delete mode 100644 frontend/includes/include.parsing.php delete mode 100644 frontend/index.php delete mode 100644 frontend/locales/dutch.lng delete mode 100644 frontend/locales/english.json delete mode 100644 frontend/locales/english.lng delete mode 100644 frontend/locales/romanian.lng delete mode 100644 frontend/modules/admin/node/add.php delete mode 100644 frontend/modules/admin/node/list.php delete mode 100644 frontend/modules/admin/node/lookup.php delete mode 100644 frontend/modules/admin/overview/index.php delete mode 100644 frontend/modules/admin/template/add.php delete mode 100644 frontend/modules/admin/template/list.php delete mode 100644 frontend/modules/admin/user/edit.php delete mode 100644 frontend/modules/admin/user/list.php delete mode 100644 frontend/modules/admin/user/lookup.php delete mode 100644 frontend/modules/admin/vps/create.php delete mode 100644 frontend/modules/admin/vps/list.php delete mode 100644 frontend/modules/admin/vps/suspend.php delete mode 100644 frontend/modules/admin/vps/terminate.php delete mode 100644 frontend/modules/api/client/vps/list.php delete mode 100644 frontend/modules/client/vps/action/restart.php delete mode 100644 frontend/modules/client/vps/action/start.php delete mode 100644 frontend/modules/client/vps/action/stop.php delete mode 100644 frontend/modules/client/vps/console.php delete mode 100644 frontend/modules/client/vps/list.php delete mode 100644 frontend/modules/client/vps/lookup.php delete mode 100644 frontend/modules/client/vps/password.php delete mode 100644 frontend/modules/client/vps/reinstall.php delete mode 100644 frontend/modules/error/access.php delete mode 100644 frontend/modules/error/api/access.php delete mode 100644 frontend/modules/shared/login.php delete mode 100644 frontend/modules/shared/logout.php delete mode 100644 frontend/modules/test.php delete mode 100644 frontend/rewrite.php delete mode 100644 frontend/templates/default/admin/main.tpl delete mode 100644 frontend/templates/default/admin/node/add.tpl delete mode 100644 frontend/templates/default/admin/node/list.tpl delete mode 100644 frontend/templates/default/admin/node/lookup.tpl delete mode 100644 frontend/templates/default/admin/overview/index.tpl delete mode 100644 frontend/templates/default/admin/template/add.tpl delete mode 100644 frontend/templates/default/admin/user/edit.tpl delete mode 100644 frontend/templates/default/admin/user/list.tpl delete mode 100644 frontend/templates/default/admin/user/lookup.tpl delete mode 100644 frontend/templates/default/admin/vps/add.tpl delete mode 100644 frontend/templates/default/admin/vps/list.tpl delete mode 100644 frontend/templates/default/admin/vps/suspend.tpl delete mode 100644 frontend/templates/default/admin/vps/terminate.tpl delete mode 100644 frontend/templates/default/client/vps/console.tpl delete mode 100644 frontend/templates/default/client/vps/error/notfound.tpl delete mode 100644 frontend/templates/default/client/vps/list.tpl delete mode 100644 frontend/templates/default/client/vps/lookup.tpl delete mode 100644 frontend/templates/default/client/vps/main.tpl delete mode 100644 frontend/templates/default/client/vps/password.tpl delete mode 100644 frontend/templates/default/client/vps/reinstall.tpl delete mode 100644 frontend/templates/default/shared/error/error.tpl delete mode 100644 frontend/templates/default/shared/error/info.tpl delete mode 100644 frontend/templates/default/shared/error/success.tpl delete mode 100644 frontend/templates/default/shared/error/warning.tpl delete mode 100644 frontend/templates/default/shared/login.tpl delete mode 100644 frontend/templates/default/shared/main.tpl delete mode 100644 frontend/templates/default/static/css/chosen.css delete mode 100644 frontend/templates/default/static/css/cvm.css delete mode 100644 frontend/templates/default/static/css/fonts/base/icomoon-webfont.eot delete mode 100644 frontend/templates/default/static/css/fonts/base/icomoon-webfont.svg delete mode 100644 frontend/templates/default/static/css/fonts/base/icomoon-webfont.ttf delete mode 100644 frontend/templates/default/static/css/fonts/base/icomoon-webfont.woff delete mode 100644 frontend/templates/default/static/css/fonts/social/icomoonsocial-webfont.eot delete mode 100644 frontend/templates/default/static/css/fonts/social/icomoonsocial-webfont.svg delete mode 100644 frontend/templates/default/static/css/fonts/social/icomoonsocial-webfont.ttf delete mode 100644 frontend/templates/default/static/css/fonts/social/icomoonsocial-webfont.woff delete mode 100644 frontend/templates/default/static/css/img/breadcrumbs-bg.gif delete mode 100644 frontend/templates/default/static/css/img/chosen-sprite.png delete mode 100644 frontend/templates/default/static/css/img/fancybox/blank.gif delete mode 100644 frontend/templates/default/static/css/img/fancybox/fancy_close.png delete mode 100644 frontend/templates/default/static/css/img/fancybox/fancy_loading.png delete mode 100644 frontend/templates/default/static/css/img/fancybox/fancy_nav_left.png delete mode 100644 frontend/templates/default/static/css/img/fancybox/fancy_nav_right.png delete mode 100644 frontend/templates/default/static/css/img/fancybox/fancy_shadow_e.png delete mode 100644 frontend/templates/default/static/css/img/fancybox/fancy_shadow_n.png delete mode 100644 frontend/templates/default/static/css/img/fancybox/fancy_shadow_ne.png delete mode 100644 frontend/templates/default/static/css/img/fancybox/fancy_shadow_nw.png delete mode 100644 frontend/templates/default/static/css/img/fancybox/fancy_shadow_s.png delete mode 100644 frontend/templates/default/static/css/img/fancybox/fancy_shadow_se.png delete mode 100644 frontend/templates/default/static/css/img/fancybox/fancy_shadow_sw.png delete mode 100644 frontend/templates/default/static/css/img/fancybox/fancy_shadow_w.png delete mode 100644 frontend/templates/default/static/css/img/fancybox/fancy_title_left.png delete mode 100644 frontend/templates/default/static/css/img/fancybox/fancy_title_main.png delete mode 100644 frontend/templates/default/static/css/img/fancybox/fancy_title_over.png delete mode 100644 frontend/templates/default/static/css/img/fancybox/fancy_title_right.png delete mode 100644 frontend/templates/default/static/css/img/fancybox/fancybox-x.png delete mode 100644 frontend/templates/default/static/css/img/fancybox/fancybox-y.png delete mode 100644 frontend/templates/default/static/css/img/fancybox/fancybox.png delete mode 100644 frontend/templates/default/static/css/img/fancybox/jquery.easing-1.3.pack.js delete mode 100644 frontend/templates/default/static/css/img/fancybox/jquery.fancybox-1.3.4.js delete mode 100644 frontend/templates/default/static/css/img/fancybox/jquery.fancybox-1.3.4.pack.js delete mode 100644 frontend/templates/default/static/css/img/fancybox/jquery.mousewheel-3.0.4.pack.js delete mode 100644 frontend/templates/default/static/css/img/grid.png delete mode 100644 frontend/templates/default/static/css/img/icon-arrow-right.png delete mode 100644 frontend/templates/default/static/css/img/icon-check.png delete mode 100755 frontend/templates/default/static/css/img/rte/link.png delete mode 100755 frontend/templates/default/static/css/img/rte/link_break.png delete mode 100755 frontend/templates/default/static/css/img/rte/picture_empty.png delete mode 100755 frontend/templates/default/static/css/img/rte/text_align_center.png delete mode 100755 frontend/templates/default/static/css/img/rte/text_align_left.png delete mode 100755 frontend/templates/default/static/css/img/rte/text_align_right.png delete mode 100755 frontend/templates/default/static/css/img/rte/text_bold.png delete mode 100755 frontend/templates/default/static/css/img/rte/text_italic.png delete mode 100755 frontend/templates/default/static/css/img/rte/text_list_bullets.png delete mode 100755 frontend/templates/default/static/css/img/rte/text_list_numbers.png delete mode 100755 frontend/templates/default/static/css/img/rte/text_strikethrough.png delete mode 100755 frontend/templates/default/static/css/img/rte/text_subscript.png delete mode 100755 frontend/templates/default/static/css/img/rte/text_superscript.png delete mode 100644 frontend/templates/default/static/css/jquery.fancybox-1.3.4.css delete mode 100644 frontend/templates/default/static/css/kickstart-buttons.css delete mode 100644 frontend/templates/default/static/css/kickstart-forms.css delete mode 100644 frontend/templates/default/static/css/kickstart-grid.css delete mode 100644 frontend/templates/default/static/css/kickstart-icons.css delete mode 100644 frontend/templates/default/static/css/kickstart-menus.css delete mode 100644 frontend/templates/default/static/css/kickstart.css delete mode 100644 frontend/templates/default/static/css/prettify.css delete mode 100644 frontend/templates/default/static/css/tiptip.css delete mode 100644 frontend/templates/default/static/images/button/restart.png delete mode 100644 frontend/templates/default/static/images/button/start.png delete mode 100644 frontend/templates/default/static/images/button/stop.png delete mode 100644 frontend/templates/default/static/images/error/error.png delete mode 100644 frontend/templates/default/static/images/error/info.png delete mode 100644 frontend/templates/default/static/images/error/success.png delete mode 100644 frontend/templates/default/static/images/error/warning.png delete mode 100644 frontend/templates/default/static/images/menu/alerts.png delete mode 100644 frontend/templates/default/static/images/menu/api.png delete mode 100644 frontend/templates/default/static/images/menu/backup.png delete mode 100644 frontend/templates/default/static/images/menu/console.png delete mode 100644 frontend/templates/default/static/images/menu/ip.png delete mode 100644 frontend/templates/default/static/images/menu/key.png delete mode 100644 frontend/templates/default/static/images/menu/lock.png delete mode 100644 frontend/templates/default/static/images/menu/overview.png delete mode 100644 frontend/templates/default/static/images/menu/reinstall.png delete mode 100644 frontend/templates/default/static/images/menu/statistics.png delete mode 100644 frontend/templates/default/static/images/menu/user.png delete mode 100644 frontend/templates/default/static/images/misc/loading.gif delete mode 100644 frontend/templates/default/static/images/misc/logo.png delete mode 100644 frontend/templates/default/static/images/misc/wrench.png delete mode 100644 frontend/templates/default/static/images/status/offline.png delete mode 100644 frontend/templates/default/static/images/status/online.png delete mode 100644 frontend/templates/default/static/images/status/suspended.png delete mode 100644 frontend/templates/default/static/images/status/unknown.png delete mode 100644 frontend/templates/default/static/js/cvm.js delete mode 100644 frontend/templates/default/static/js/kickstart.js delete mode 100644 frontend/templates/default/static/js/prettify.js delete mode 100644 frontend/templates/pure/admin/main.tpl delete mode 100644 frontend/templates/pure/admin/node/add.tpl delete mode 100644 frontend/templates/pure/admin/node/list.tpl delete mode 100644 frontend/templates/pure/admin/node/lookup.tpl delete mode 100644 frontend/templates/pure/admin/overview/index.tpl delete mode 100644 frontend/templates/pure/admin/template/add.tpl delete mode 100644 frontend/templates/pure/admin/template/list.tpl delete mode 100644 frontend/templates/pure/admin/vps/add.tpl delete mode 100644 frontend/templates/pure/client/vps/list.tpl delete mode 100644 frontend/templates/pure/shared/error/error.tpl delete mode 100644 frontend/templates/pure/shared/login.tpl delete mode 100644 frontend/templates/pure/shared/main.tpl delete mode 100644 frontend/templates/pure/static/css/cvm.css delete mode 100644 frontend/templates/pure/static/css/font-awesome.css delete mode 100644 frontend/templates/pure/static/fonts/FontAwesome.otf delete mode 100755 frontend/templates/pure/static/fonts/fontawesome-webfont.eot delete mode 100755 frontend/templates/pure/static/fonts/fontawesome-webfont.svg delete mode 100755 frontend/templates/pure/static/fonts/fontawesome-webfont.ttf delete mode 100755 frontend/templates/pure/static/fonts/fontawesome-webfont.woff delete mode 100644 frontend/templates/pure/static/images/logo.png delete mode 100644 graphics/icon_alert.svg delete mode 100644 graphics/icon_api.svg delete mode 100644 graphics/icon_backup.xcf delete mode 100644 graphics/icon_ip.xcf delete mode 100644 graphics/icon_key.svg delete mode 100644 graphics/icon_lock.svg delete mode 100644 graphics/icon_overview.xcf delete mode 100644 graphics/icon_reinstall.xcf delete mode 100644 graphics/icon_statistics.xcf delete mode 100644 graphics/icon_webshell.xcf delete mode 100644 graphics/loading.xcf delete mode 100644 graphics/logo.xcf delete mode 100644 graphics/questionmark.svg delete mode 100644 graphics/restart.svg delete mode 100644 graphics/shadow_quota_bars.txt delete mode 100644 graphics/start.svg delete mode 100644 graphics/stop.svg delete mode 100644 graphics/styles.txt delete mode 100644 graphics/user.svg delete mode 100644 graphics/wrench.svg delete mode 100755 installer/build.sh delete mode 100644 installer/common/setuplib.py delete mode 100644 installer/master/db_updates/1.sql delete mode 100644 installer/master/db_updates/2.sql delete mode 100644 installer/master/db_updates/3.sql delete mode 100644 installer/master/dump.sql delete mode 100644 installer/master/install.py delete mode 100644 installer/slave/centos5.repo delete mode 100644 installer/slave/centos6.repo delete mode 100644 installer/slave/command_daemon delete mode 100644 installer/slave/exporter.py delete mode 100644 installer/slave/grub_deb7.cfg delete mode 100644 installer/slave/install.py delete mode 100644 installer/slave/post_reboot.py delete mode 100644 installer/slave/selinux.cfg delete mode 100644 installer/slave/sysctl.conf delete mode 100644 logshell/cvmshell delete mode 100755 logshell/logcmd delete mode 100644 logshell/logshell delete mode 100644 runhelper/runhelper delete mode 100755 sass-watch.sh delete mode 100644 scss/pure/cvm.scss delete mode 100644 sshd/id_rsa.sshd delete mode 100644 sshd/id_rsa.sshd.pub delete mode 100644 sshd/sshd.py delete mode 100644 tools/locale_convert.py delete mode 100644 tools/pysfx/b64reader.py delete mode 100644 tools/pysfx/gzipreader.py delete mode 100644 tools/pysfx/pysfx.py delete mode 100644 tools/pysfx/unpack.template diff --git a/LICENSE b/LICENSE deleted file mode 100644 index 45e4a66..0000000 --- a/LICENSE +++ /dev/null @@ -1,13 +0,0 @@ - DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE - Version 2, December 2004 - - Copyright (C) 2004 Sam Hocevar - - Everyone is permitted to copy and distribute verbatim or modified - copies of this license document, and changing it is allowed as long - as the name is changed. - - DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. You just DO WHAT THE FUCK YOU WANT TO. diff --git a/README b/README deleted file mode 100644 index ae12630..0000000 --- a/README +++ /dev/null @@ -1,31 +0,0 @@ -== LICENSE == - -All parts of CVM are licensed under the WTFPL. Other licenses may apply to libraries or components that were incorporated from other projects. -Please read the LICENSE file for the full license text. - - -== USING SHADOW SOURCE FILES == - -Shadow source files are saved JSON objects from the multi-layer CSS3 shadow generator at http://haless.cryto.net/shadow/. To edit a shadow, simply load the string in the applicable text file into the shadow generator, and after editing save the shadow configuration and generate new CSS code. - - -== DIRECTORY STRUCTURE == - -repository root -|- design/ The first design proposal for the user frontend -| |- css/ CSS files for the design proposal -| `- images/ Images for the design proposal -`- graphics/ Original source files for images (.xcf, .svg, ...) and CSS3 shadows (.txt). -`- frontend/ Code for the frontend (this is the actual panel) -| |- classes/ Contains all class definitions -| |- cphp/ Contains the CPHP framework -| | ` components/ Contains additional CPHP components -| |- includes/ Contains all included/required files for the frontend -| |- locales/ Contains all CPHP locale files -| `- templates/ Contains all CPHP template files -`- runhelper/ This directory contains the runhelper script for the slave nodes - -== DEPENDENCIES == - -* autossh -* ... diff --git a/command_daemon/start_tunnel.py b/command_daemon/start_tunnel.py deleted file mode 100755 index a007f42..0000000 --- a/command_daemon/start_tunnel.py +++ /dev/null @@ -1,28 +0,0 @@ -import sys, os, subprocess - -stfu = open("/dev/null", "w") - -def run_command(args): - pr = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE) - data = pr.communicate() - pr.wait() - return pr.returncode - -host = sys.argv[1] -user = sys.argv[2] -port = int(sys.argv[3]) -keyfile = sys.argv[4] -session_key = sys.argv[5] - -if run_command(["ssh", "%s@%s" % (user, host), "-o", "UserKnownHostsFile=/etc/cvm/knownhosts", "-o", "StrictHostKeyChecking=no", "-i", keyfile, "cd /etc/cvm/command_daemon; echo '%s' > session_key && ./command_daemon" % session_key]) == 0: - # Make autossh verify the connection is still alive every 10 seconds. - os.environ["AUTOSSH_POLL"] = "10" - os.environ["AUTOSSH_FIRST_POLL"] = "10" - - if run_command(["autossh", "-f", "-i", keyfile, "-M", str(port + 1), "-o", "UserKnownHostsFile=/etc/cvm/knownhosts", "-o", "StrictHostKeyChecking=no", "%s@%s" % (user, host), "-L", "%s:localhost:3434" % port, "-N"]) == 0: - sys.stdout.write("Tunnel established.\n"); - exit(0) - else: - sys.stderr.write("Failed to establish tunnel.\n") -else: - sys.stderr.write("Failed to start daemon.\n") diff --git a/config.json b/config.json deleted file mode 100644 index 6490d5a..0000000 --- a/config.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "database": { - "driver": "mysql", - "pdo": "true", - "hostname": "localhost", - "username": "root", - "password": "", - "database": "cvm" - }, - "locale": { - "path": "locales", - "extension": "lng", - "default_locale": "english", - "default_timezone": "Europe/Amsterdam" - }, - "memcache": { - "enabled": true, - "compressed": true, - "hostname": "localhost", - "port": 11211 - }, - "class_map": { - "user": "User", - "node": "Node", - "container": "Container", - "template": "Template" - }, - "components": [ - "router", - "errorhandler" - ], - "authentication": { - "salt": "abcdef", - "session_length": 2592000 - }, - "theme": "pure" -} diff --git a/console/master/dropper b/console/master/dropper deleted file mode 100755 index de7af3f..0000000 --- a/console/master/dropper +++ /dev/null @@ -1,150 +0,0 @@ -#!/usr/bin/python - -import socket, sys, termios, tty, select, urllib, urllib2, json, warnings, getpass - -with warnings.catch_warnings(): - warnings.simplefilter("ignore") - import paramiko - -key = "abcde" -endpoint = "http://cvm.local/api.local.php" - -def posix_shell(chan, ctid): - oldtty = termios.tcgetattr(sys.stdin) - - enable_input = False - - try: - tty.setraw(sys.stdin.fileno()) - tty.setcbreak(sys.stdin.fileno()) - chan.settimeout(0.0) - - chan.send('%s\n' % ctid) - - while True: - r, w, e = select.select([chan, sys.stdin], [], []) - if chan in r: - try: - buff = chan.recv(1024) - - if len(buff) == 0: - print '\r\nYou have been logged out of your container. Goodbye!\r\n', - break - - if "entered into" in buff: - # Successfully entered into the container, we can enable user input now. - enable_input = True - - sys.stdout.write(buff) - sys.stdout.flush() - except socket.timeout: - pass - if sys.stdin in r: - if enable_input == True: - buff = sys.stdin.read(1) - - if len(buff) == 0: - break - - chan.send(buff) - - finally: - termios.tcsetattr(sys.stdin, termios.TCSADRAIN, oldtty) - -def open_shell(hostname, user, container): - ssh = paramiko.SSHClient() - ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) - - sshkey = paramiko.RSAKey.from_private_key_file('/etc/cvm/key') - - ssh.connect(hostname, username=user, pkey=sshkey) - - chan = ssh.invoke_shell() - posix_shell(chan, container) - - chan.close() - ssh.close() - -def api_request(parameters, method="GET"): - if method == "GET": - querystring = urllib.urlencode(parameters) - req = urllib2.Request(endpoint + "?" + querystring) - response = urllib2.urlopen(req) - result = response.read() - return json.loads(result) - -def show_list(): - print "" - for key, vps in vpsmap.items(): - node = nodemap[vps['node_id']] - print "%s. %s (%s [%s], %s)" % (key, vps['hostname'], node['name'], node['hostname'], node['physical_location']) - - print "" - choice = raw_input("Make your choice: ") - - try: - current_vps = vpsmap[int(choice)] - current_node = nodemap[current_vps['node_id']] - - open_shell(current_node['hostname'], "vz", current_vps['internal_id']) - except KeyError, ValueError: - print "That was not a valid option. Try again. " - show_list() - except paramiko.AuthenticationException: - print "Could not connect to the node." - exit(1) - -print "#############################################################" -print "### CVM OpenVZ shell dropper ###" -print "#############################################################" -print "" -print "Please enter your VPS panel login details to continue." -print "" -username = raw_input("Username: ") -password = getpass.getpass("Password: ") -print "" - -auth_result = api_request({ - 'key': key, - 'action': "verify_user", - 'username': username, - 'password': password -}) - -if auth_result['data']['correct'] == True: - vpslist = api_request({ - 'key': key, - 'action': "list_vps", - 'userid': auth_result["data"]["userid"] - }) - - print "Select the container you wish to log in to." - print "" - - i = 1 - vpsmap = {} - nodelist = [] - nodemap = {} - - for vps in vpslist["data"]: - vpsmap[i] = vps - - if vps["node_id"] not in nodelist: - nodelist.append(vps["node_id"]) - - i += 1 - - for node in nodelist: - nodemap[node] = api_request({ - 'key': key, - 'action': "node_info", - 'nodeid': node - })['data'] - - show_list() - - exit(0) -else: - print "The supplied login details are invalid." - print "Your session will now be closed." - exit(1) diff --git a/console/slave/dropper b/console/slave/dropper deleted file mode 100755 index 49b28a2..0000000 --- a/console/slave/dropper +++ /dev/null @@ -1,6 +0,0 @@ -#!/usr/bin/python -import sys, subprocess - -ctid = raw_input() -subprocess.call('clear') -subprocess.call(['sudo', 'vzctl', 'enter', ctid]) diff --git a/docs/api/client.html b/docs/api/client.html deleted file mode 100644 index 9784018..0000000 --- a/docs/api/client.html +++ /dev/null @@ -1,221 +0,0 @@ - - - - - - -

CVM Client API Documentation

Table of contents

Overview

The CVM Client API is a more or less RESTful API. That means it uses the standard HTTP 'verbs' like GET, POST, DELETE, etc. to execute certain commands. Authentication takes place per request (there is no concept of 'sessions') through the use of custom HTTP headers. Each API token pair is linked to a particular user, and can only be used for that user. A user can have multiple token pairs. Token pairs can be revoked at any time via the panel.

Authentication

The CVM Client API expects two custom HTTP headers as authentication.
API-Public-Token
This is the public part of your API token pair. It's used to identify who you are.
API-Private-Token
This is the private part of your API token pair. It's used to verify your access.
If no valid token pair is passed on with your request, the server will return a 401 Not Authorized status code.
If your token pair does not have access to the client API, the server will return a 403 Forbidden status code.

Response format

The API responses will always be in JSON format. If errors occurred, an errors key will be present containing an array of errors. If there is a response, a response key will be present containing the response.
Example: Valid API call
Code:
/api/client/vps/list
Output:
{
-    "response": {
-	"vpses": [{
-	    "id": "1",
-	    "virtualization_type": "1",
-	    "hostname": "test-vz.cryto.net",
-	    "guaranteed_ram": "128",
-	    "burstable_ram": "256",
-	    "disk_space": "5000",
-	    "cpu_count": "1",
-	    "traffic_in_limit": "500000000000",
-	    "traffic_out_limit": "500000000000",
-	    "traffic_in_used": "912727849",
-	    "traffic_out_used": "16923948"
-	}, {
-	    "id": "2",
-	    "virtualization_type": "1",
-	    "hostname": "test2.cryto.net",
-	    "guaranteed_ram": "512",
-	    "burstable_ram": "768",
-	    "disk_space": "40000",
-	    "cpu_count": "240",
-	    "traffic_in_limit": "500000000000",
-	    "traffic_out_limit": "500000000000",
-	    "traffic_in_used": "0",
-	    "traffic_out_used": "0"
-	}]
-    }
-}
Example: API call with invalid token pair
Code:
/api/client/vps/list
Output:
{
-    "errors": ["No valid API token pair was specified."]
-}

API Calls

GET /api/client/vps/list
This call will return a list of VPSes associated with the currently authenticated user. It takes no arguments.

Keys in the response objects

id
The numeric ID of this VPS. You will need this in further API calls.
node
The host node that this VPS exists on. You will need this in further node-related API calls.
virtualization_type
The virtualization platform used for this VPS. Right now the only supported value is 1 (OpenVZ).
hostname
The configured hostname of the VPS.
guaranteed_ram
The configured amount of guaranteed RAM, in megabytes.
burstable_ram
The configured amount of burstable RAM, in megabytes. This key may not be present if vSwap is used.
disk_space
The configured amount of disk space, in megabytes.
cpu_count
The amount of configured CPUs (or rather, CPU units) that this VPS has access to.
traffic_limit
The total traffic limit, in bytes. This may not be present, depending on the method of traffic measuring. See the explanation below.
traffic_used
The total amount of traffic used, in bytes. This may not be present, depending on the method of traffic measuring. See the explanation below.
traffic_in_limit
The total incoming traffic limit, in bytes. This may not be present, depending on the method of traffic measuring. See the explanation below.
traffic_in_used
The total amount of incoming traffic used, in bytes. This may not be present, depending on the method of traffic measuring. See the explanation below.
traffic_out_limit
The total outgoing traffic limit, in bytes. This may not be present, depending on the method of traffic measuring. See the explanation below.
traffic_out_used
The total amount of outgoing traffic used, in bytes. This may not be present, depending on the method of traffic measuring. See the explanation below.
Important: If traffic accounting for the VPS is combined (incoming + outgoing), a traffic_limit and traffic_used key will be present. If traffic accounting for the VPS is split, the keys traffic_in_limit, traffic_in_used, traffic_out_limit, and traffic_out_used will be present.
Example: Valid call to /api/client/vps/list
Output:
{
-    "response": {
-	"vpses": [{
-	    "id": "1",
-	    "node": "1",
-	    "virtualization_type": "1",
-	    "hostname": "test-vz.cryto.net",
-	    "guaranteed_ram": "128",
-	    "burstable_ram": "256",
-	    "disk_space": "5000",
-	    "cpu_count": "1",
-	    "traffic_in_limit": "500000000000",
-	    "traffic_out_limit": "500000000000",
-	    "traffic_in_used": "912727849",
-	    "traffic_out_used": "16923948"
-	}, {
-	    "id": "2",
-	    "node": "1",
-	    "virtualization_type": "1",
-	    "hostname": "test2.cryto.net",
-	    "guaranteed_ram": "512",
-	    "burstable_ram": "768",
-	    "disk_space": "40000",
-	    "cpu_count": "2",
-	    "traffic_in_limit": "500000000000",
-	    "traffic_out_limit": "500000000000",
-	    "traffic_in_used": "0",
-	    "traffic_out_used": "0"
-	}]
-    }
-}
- - diff --git a/docs/api/client.zpy b/docs/api/client.zpy deleted file mode 100644 index d04cd9c..0000000 --- a/docs/api/client.zpy +++ /dev/null @@ -1,230 +0,0 @@ -# CVM Client API Documentation - -{TOC} - -## Overview - -The CVM Client API is a more or less RESTful API. That means it uses the standard HTTP 'verbs' like GET, POST, DELETE, etc. to execute certain commands. -Authentication takes place per request (there is no concept of 'sessions') through the use of custom HTTP headers. Each API token pair is linked to a particular -user, and can only be used for that user. A user can have multiple token pairs. Token pairs can be revoked at any time via the panel. - -## Authentication - -The CVM Client API expects two custom HTTP headers as authentication. - -API-Public-Token:: - This is the public part of your API token pair. It's used to identify who you are. - -API-Private-Token:: - This is the private part of your API token pair. It's used to verify your access. - -If no valid token pair is passed on with your request, the server will return a `401 Not Authorized` status code. - -If your token pair does not have access to the client API, the server will return a `403 Forbidden` status code. - -## Response format - -The API responses will always be in JSON format. If errors occurred, an `errors` key will be present containing an array of errors. If there is a response, a `response` key will -be present containing the response. - -@ Valid API call - - $ /api/client/vps/list - - > { - "response": { - "vpses": [{ - "id": "1", - "virtualization_type": "1", - "hostname": "test-vz.cryto.net", - "guaranteed_ram": "128", - "burstable_ram": "256", - "disk_space": "5000", - "cpu_count": "1", - "traffic_in_limit": "500000000000", - "traffic_out_limit": "500000000000", - "traffic_in_used": "912727849", - "traffic_out_used": "16923948" - }, { - "id": "2", - "virtualization_type": "1", - "hostname": "test2.cryto.net", - "guaranteed_ram": "512", - "burstable_ram": "768", - "disk_space": "40000", - "cpu_count": "240", - "traffic_in_limit": "500000000000", - "traffic_out_limit": "500000000000", - "traffic_in_used": "0", - "traffic_out_used": "0" - }] - } - } - -@ API call with invalid token pair - - $ /api/client/vps/list - - > { - "errors": ["No valid API token pair was specified."] - } - -## API Calls - -^ GET /api/client/vps/list - - This call will return a list of VPSes associated with the currently authenticated user. It takes no arguments. - - ### Keys in the response objects - - id:: - The numeric ID of this VPS. You will need this in further API calls. - - node:: - The host node that this VPS exists on. You will need this in further node-related API calls. - - virtualization_type:: - The virtualization platform used for this VPS. Right now the only supported value is `1` (OpenVZ). - - hostname:: - The configured hostname of the VPS. - - guaranteed_ram:: - The configured amount of guaranteed RAM, in __megabytes__. - - burstable_ram:: - The configured amount of burstable RAM, in __megabytes__. **This key may not be present if vSwap is used.** - - disk_space:: - The configured amount of disk space, in __megabytes__. - - cpu_count:: - The amount of configured CPUs (or rather, CPU units) that this VPS has access to. - - traffic_limit:: - The total traffic limit, in __bytes__. **This may not be present, depending on the method of traffic measuring. See the explanation below.** - - traffic_used:: - The total amount of traffic used, in __bytes__. **This may not be present, depending on the method of traffic measuring. See the explanation below.** - - traffic_in_limit:: - The total incoming traffic limit, in __bytes__. **This may not be present, depending on the method of traffic measuring. See the explanation below.** - - traffic_in_used:: - The total amount of incoming traffic used, in __bytes__. **This may not be present, depending on the method of traffic measuring. See the explanation below.** - - traffic_out_limit:: - The total outgoing traffic limit, in __bytes__. **This may not be present, depending on the method of traffic measuring. See the explanation below.** - - traffic_out_used:: - The total amount of outgoing traffic used, in __bytes__. **This may not be present, depending on the method of traffic measuring. See the explanation below.** - - ! If traffic accounting for the VPS is combined (incoming + outgoing), a `traffic_limit` and `traffic_used` key will be present. If traffic accounting for the VPS is split, the keys `traffic_in_limit`, `traffic_in_used`, `traffic_out_limit`, and `traffic_out_used` will be present. - - @ Valid call to /api/client/vps/list - - > { - "response": { - "vpses": [{ - "id": "1", - "node": "1", - "virtualization_type": "1", - "hostname": "test-vz.cryto.net", - "guaranteed_ram": "128", - "burstable_ram": "256", - "disk_space": "5000", - "cpu_count": "1", - "traffic_in_limit": "500000000000", - "traffic_out_limit": "500000000000", - "traffic_in_used": "912727849", - "traffic_out_used": "16923948" - }, { - "id": "2", - "node": "1", - "virtualization_type": "1", - "hostname": "test2.cryto.net", - "guaranteed_ram": "512", - "burstable_ram": "768", - "disk_space": "40000", - "cpu_count": "2", - "traffic_in_limit": "500000000000", - "traffic_out_limit": "500000000000", - "traffic_in_used": "0", - "traffic_out_used": "0" - }] - } - } - -^ GET /api/client/vps/**id**/status - - This returns the current status and metrics for the specified VPS. The response will be a single object. - - ### Arguments - - id:: - The ID of the VPS you wish to retrieve the status for. - - ### Keys in the response object - - traffic_used:: - The total amount of traffic used, in __bytes__. **This may not be present, depending on the method of traffic measuring.** - - traffic_in_used:: - The total amount of incoming traffic used, in __bytes__. **This may not be present, depending on the method of traffic measuring.** - - traffic_out_used:: - The total amount of outgoing traffic used, in __bytes__. **This may not be present, depending on the method of traffic measuring.** - - ram_used:: - The amount of RAM that is currently in use for the VPS, in __bytes__. - - disk_used:: - The amount of disk space currently used by the VPS, in __bytes__. - - status:: - The current status of the VPS. - - running:: - The VPS is active and booted. - - stopped:: - The VPS is active and shut down. - - suspended:: - The VPS is suspended. - - terminated:: - The VPS is terminated. - - unknown:: - The status of the VPS is unknown. This can happen when, for example, the host node can't be reached. - -^ POST /api/client/vps/**id**/start - - Starts the specified VPS. Returns either a `200` status code with an empty response if successful, a `500` status code with an error message if the VPS fails to start, or - a `503` status code with an error message if the host node is unreachable. - - ### Arguments - - id:: - The ID of the VPS you wish to start. - -^ POST /api/client/vps/**id**/stop - - Shuts down the specified VPS. Returns either a `200` status code with an empty response if successful, a `500` status code with an error message if the VPS fails to shut down, - or a `503` status code with an error message if the host node is unreachable. - - ### Arguments - - id:: - The ID of the VPS you wish to stop. - -^ POST /api/client/vps/**id**/restart - - Restarts the specified VPS. Returns either a `200` status code with an empty response if successful, a `500` status code with an error message if the VPS fails to restart, or - a `503` status code with an error message if the host node is unreachable. - - ### Arguments - - id:: - The ID of the VPS you wish to restart. diff --git a/frontend/api.local.php b/frontend/api.local.php deleted file mode 100644 index ef5592c..0000000 --- a/frontend/api.local.php +++ /dev/null @@ -1,119 +0,0 @@ -CachedQuery("SELECT * FROM users WHERE `Username` = :Username", array(":Username" => $_GET['username']))) - { - $sUser = new User($result); - - if($sUser->VerifyPassword($_GET['password']) === true) - { - $return_object = array( - 'correct' => true, - 'userid' => $sUser->sId - ); - $return_success = true; - } - else - { - $return_object = array( - 'correct' => false, - 'userid' => 0 - ); - $return_success = true; - } - } - else - { - $return_object = array( - 'correct' => false, - 'userid' => 0 - ); - } - break; - - case "list_vps": - if(!empty($_GET['userid'])) - { - $result = $database->CachedQuery("SELECT * FROM containers WHERE `UserId` = :UserId", array(":UserId" => $_GET['userid'])); - } - else - { - $result = $database->CachedQuery("SELECT * FROM containers"); - } - - if($result) - { - $sVpses = array(); - - foreach($result->data as $row) - { - $sVps = new Vps($row); - $sVpses[] = array( - 'hostname' => $sVps->sHostname, - 'internal_id' => $sVps->sInternalId, - 'node_id' => $sVps->sNodeId, - 'status' => $sVps->sStatus - ); - } - - $return_object = $sVpses; - $return_success = true; - } - break; - - case "vps_info": - // TODO: return VPS info - break; - - case "node_info": - try - { - $sNode = new Node($_GET['nodeid']); - $return_object = array( - 'name' => $sNode->sName, - 'hostname' => $sNode->sHostname, - 'port' => $sNode->sPort, - 'user' => $sNode->sUser, - 'physical_location' => $sNode->sPhysicalLocation, - 'private_key' => $sNode->sPrivateKey, - 'public_key' => $sNode->sPublicKey, - 'has_custom_key' => $sNode->sHasCustomKey - ); - } - catch (NotFoundException $e) - { - // Silently pass. - } - break; - } -} -else -{ - $return_object = "Authentication failure."; -} - -echo(json_encode(array( - 'status' => $return_success, - 'data' => $return_object -))); diff --git a/frontend/authenticators/admin.php b/frontend/authenticators/admin.php deleted file mode 100644 index ac00348..0000000 --- a/frontend/authenticators/admin.php +++ /dev/null @@ -1,34 +0,0 @@ -uVariables['display_menu'] = true; - -try -{ - $sUser->RequireAccessLevel(20); - - $sRouterAuthenticated = true; -} -catch (InsufficientAccessLevelException $e) -{ - $sMainContents .= NewTemplater::Render("{$sTheme}/shared/error/error", $locale->strings, array( - 'title' => $locale->strings['error-unauthorized-title'], - 'message' => $locale->strings['error-unauthorized-text'] - )); - - $sRouterAuthenticated = false; - - $router->uVariables['display_menu'] = false; -} diff --git a/frontend/authenticators/api/client.php b/frontend/authenticators/api/client.php deleted file mode 100644 index e49be1b..0000000 --- a/frontend/authenticators/api/client.php +++ /dev/null @@ -1,57 +0,0 @@ -CachedQuery("SELECT * FROM api_keys WHERE `PublicToken` = :Token", array(":Token" => $public_token))) -{ - $sApiKey = new ApiKey($result); - - if($sApiKey->VerifyToken($private_token)) - { - if($sApiKey->sKeyType >= API_CLIENT) - { - $sRouterAuthenticated = true; - } - else - { - $sResponseCode = 403; - $sResponse = array( - "errors" => array( - "The specified API token pair does not have access to this API." - ) - ); - } - } - else - { - $sResponseCode = 401; - $sResponse = array( - "errors" => array( - "No valid API token pair was specified." - ) - ); - } -} -else -{ - $sResponseCode = 401; - $sResponse = array( - "errors" => array( - "No valid API token pair was specified." - ) - ); -} diff --git a/frontend/authenticators/vps.php b/frontend/authenticators/vps.php deleted file mode 100644 index aef94ff..0000000 --- a/frontend/authenticators/vps.php +++ /dev/null @@ -1,59 +0,0 @@ -uVariables['display_menu'] = true; - -try -{ - $sVps = new Vps($router->uParameters[1]); - - if($sVps->sUserId != $sUser->sId && $sUser->sAccessLevel < 20) - { - throw new UnauthorizedException("You are not authorized to control this VPS."); - } - - $sRouterAuthenticated = true; - - try - { - $sVps->CheckAllowed(); - } - catch (VpsSuspendedException $e) - { - $sMainContents .= NewTemplater::Render("{$sTheme}/shared/error/warning", $locale->strings, array( - 'title' => $locale->strings['warning-suspended-title'], - 'message' => $locale->strings['warning-suspended-text'] - )); - } - catch (VpsTerminatedException $e) - { - $sMainContents .= NewTemplater::Render("{$sTheme}/shared/error/warning", $locale->strings, array( - 'title' => $locale->strings['warning-terminated-title'], - 'message' => $locale->strings['warning-terminated-text'] - )); - } -} -catch(NotFoundException $e) -{ - $router->uVariables['display_menu'] = false; - $sMainContents = NewTemplater::Render("{$sTheme}/client/vps/error/notfound", $locale->strings, array()); - $sRouterAuthenticated = false; -} -catch(UnauthorizedException $e) -{ - $router->uVariables['display_menu'] = false; - $sRouterAuthenticated = false; -} - diff --git a/frontend/classes/apikey.php b/frontend/classes/apikey.php deleted file mode 100644 index f213b98..0000000 --- a/frontend/classes/apikey.php +++ /dev/null @@ -1,86 +0,0 @@ - array( - 'PublicToken' => "PublicToken", - 'PrivateToken' => "PrivateToken", - 'Salt' => "Salt" - ), - 'numeric' => array( - 'UserId' => "UserId", - 'KeyType' => "KeyType" - ), - 'user' => array( - 'User' => "UserId" - ) - ); - - public function GenerateSalt() - { - $this->uSalt = random_string(10); - } - - public function GenerateHash() - { - if(!empty($this->uSalt)) - { - if(!empty($this->uToken)) - { - $this->uPrivateToken = $this->CreateHash($this->uToken); - } - else - { - throw new MissingDataException("ApiKey object is missing a token."); - } - } - else - { - throw new MissingDataException("ApiKey object is missing a salt."); - } - } - - public function CreateHash($input) - { - global $settings; - $hash = crypt($input, "$5\$rounds=50000\${$this->uSalt}{$settings['salt']}$"); - $parts = explode("$", $hash); - return $parts[4]; - } - - public function VerifyToken($token) - { - if($this->CreateHash($token) == $this->sPrivateToken) - { - return true; - } - else - { - return false; - } - } - - public function SetPrivateToken($token) - { - $this->uToken = $token; - $this->GenerateHash(); - } -} diff --git a/frontend/classes/iprange.php b/frontend/classes/iprange.php deleted file mode 100644 index afed82a..0000000 --- a/frontend/classes/iprange.php +++ /dev/null @@ -1,261 +0,0 @@ -sInput = $input; - - $slashcount = substr_count($input, "/"); - - if($slashcount == 1) - { - /* The input is probably a CIDR range. */ - $this->sInputType = INPUT_TYPE_RANGE; - $this->ValidateRangeFormat(); - - } - elseif($slashcount == 0) - { - /* The input is probably an IP. */ - $this->sInputType = INPUT_TYPE_IP; - $this->ValidateIpFormat(); - } - else - { - throw new InvalidArgumentException("The given input is not a valid IP or IP range."); - } - - if($this->sInputType == INPUT_TYPE_RANGE) - { - if($this->sType == IP_TYPE_IPV6) - { - $this->ExpandIpv6(); - $result = IpRange::ParseRange($this->sIp, $this->sSize, ":", SEGMENT_BITS_IPV6, true); - } - elseif($this->sType == IP_TYPE_IPV4) - { - $result = IpRange::ParseRange($this->sIp, $this->sSize); - } - - $this->sStart = $result['start']; - $this->sEnd = $result['end']; - $this->sCount = $result['count']; - } - else - { - $this->sStart = $this->sIp; - $this->sEnd = $this->sIp; - $this->sCount = 1; - } - } - - private function ValidateRangeFormat() - { - list($ip, $size) = explode("/", $this->sInput, 2); - - if($this->ValidateIpFormat($ip) === true) - { - if(is_numeric($size)) - { - if($this->sType == IP_TYPE_IPV4 && (int)$size >= 0 && (int)$size <= 32) - { - $this->sSize = $size; - return true; - } - elseif($this->sType == IP_TYPE_IPV6 && (int)$size >= 0 && (int)$size <= 128) - { - $this->sSize = $size; - return true; - } - } - } - - /* Fallback case. */ - throw new InvalidArgumentException("The given input is not a valid IP or IP range."); - } - - private function ValidateIpFormat($ip = null) - { - if(is_null($ip)) - { - $ip = $this->sInput; - } - - if(strpos($ip, ".") !== false) - { - // Probably an IPv4 address. - if(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) - { - $this->sType = IP_TYPE_IPV4; - $this->sIp = $ip; - return true; - } - } - elseif(strpos($ip, ":") !== false) - { - // Probably an IPv6 address. - if(filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) - { - $this->sType = IP_TYPE_IPV6; - $this->sIp = $ip; - return true; - } - } - - /* Fallback case. */ - throw new InvalidArgumentException("The given input is not a valid IP or IP range."); - } - - private function ExpandIpv6() - { - // Note: this function does NOT do any validation! - $ip = $this->sIp; - $parts = explode(":", $ip); - $empty_part = false; - $missing = 0; - - foreach($parts as $part) - { - if($part == "") - { - $empty_part = true; - $missing = 1; - } - } - - $available_parts = count($parts) - $missing; - - if($available_parts < 8 || $empty_part === true) - { - $needed = 8 - $available_parts; - - $abbrev_position = strpos($ip, "::"); - - $left = substr($ip, 0, $abbrev_position); - $right = substr($ip, $abbrev_position + 2); - - $left_parts = explode(":", $left); - $right_parts = explode(":", $right); - $filler_parts = array_fill(0, $needed, "0000"); - - $final_array = array_merge($left_parts, $filler_parts); - $final_array = array_merge($final_array, $right_parts); - } - else - { - $final_array = $parts; - } - - foreach($final_array as &$part) - { - $part = str_pad($part, 4, "0", STR_PAD_LEFT); - } - - $this->sIp = implode(":", $final_array); - return true; - } - - public static function ParseRange($start, $size, $delimiter = ".", $segment_bits = 8, $hex = false) - { - $segments = explode($delimiter, $start); - - /* Determine the maximum size of one segment */ - $segment_size = pow(2, $segment_bits); - - /* Calculate the amount of bits in the entire IP address */ - $ip_bits = count($segments) * $segment_bits; - - /* Calculate the total amount of IPs possible for this IP format */ - $total_ips = pow(2, $ip_bits - $size); - - if($hex === true) - { - $segments = array_map("hexdec", $segments); - } - - /* Calculate the maximum size (in IPs) of the currently used IP format */ - $max_size = count($segments) * $segment_bits; - - /* Determine what segment we are going to modify */ - $applicable_segment = floor($size / $segment_bits) + 1; - - /* Ensure that the specified size is possible */ - if($size > $max_size) - { - /* The size exceeds the total space for this type of IP */ - return false; - } - elseif($size == $max_size) - { - /* Only 1 IP. */ - $start_segments = $segments; - } - else - { - /* Determine the amount of IPs for the given size */ - $class_size = pow(2, ($applicable_segment * $segment_bits) - $size); - - /* Round down the applicable segment if necessary to ensure the starting point is valid */ - $segments[$applicable_segment - 1] = floor($segments[$applicable_segment - 1] / $class_size) * $class_size; - - $start_segments = $segments; - - /* Add the amount of IPs (inclusive) to the applicable segment */ - $segments[$applicable_segment - 1] += $class_size - 1; - - /* Set all segments to the right of the applicable segment to the right value. */ - if(count($segments) > $applicable_segment - 1) - { - for($i = $applicable_segment + 1; $i <= count($segments); $i++) - { - $segments[$i - 1] = $segment_size - 1; - $start_segments[$i - 1] = 0; - } - } - } - - if($hex === true) - { - $segments = array_map("dechex", $segments); - $start_segments = array_map("dechex", $start_segments); - } - - return array( - 'start' => implode($delimiter, $start_segments), - 'end' => implode($delimiter, $segments), - 'count' => $total_ips - ); - } -} - -?> diff --git a/frontend/classes/node.php b/frontend/classes/node.php deleted file mode 100644 index 393937a..0000000 --- a/frontend/classes/node.php +++ /dev/null @@ -1,133 +0,0 @@ - array( - 'Name' => "Name", - 'Hostname' => "Hostname", - 'PhysicalLocation' => "PhysicalLocation", - 'PrivateKey' => "CustomPrivateKey", - 'PublicKey' => "CustomPublicKey", - 'User' => "User", - 'TunnelKey' => "TunnelKey" - ), - 'numeric' => array( - 'Port' => "Port", - 'TunnelPort' => "TunnelPort" - ), - 'boolean' => array( - 'HasCustomKey' => "HasCustomKey" - ) - ); - - public $ssh = null; - - protected function EventConstructed() - { - global $settings; - - $this->ssh = new SshConnector(); - - $this->ssh->host = $this->sHostname; - $this->ssh->port = $this->sPort; - $this->ssh->user = $this->sUser; - $this->ssh->tunnel_port = $this->sTunnelPort; - $this->ssh->tunnel_key = $this->sTunnelKey; - $this->ssh->node = $this; - - if($this->HasCustomKey === true) - { - $this->ssh->key = $this->sPrivateKey; - $this->ssh->pubkey = $this->sPublicKey; - } - else - { - $this->ssh->key = $settings['master_privkey']; - $this->ssh->pubkey = $settings['master_pubkey']; - } - } - - public function __get($name) - { - switch($name) - { - case "sRealHostname": - return $this->GetHostname(); - break; - case "sDiskFree": - return $this->GetDiskFree(); - break; - case "sDiskUsed": - return $this->GetDiskUsed(); - break; - default: - return parent::__get($name); - break; - } - } - - public function GetHostname() - { - return $this->ssh->RunCommandCached("hostname", true)->stdout; - } - - public function GetDiskFree() - { - $disk = $this->GetDisk(); - return $disk['free']; - } - - public function GetDiskUsed() - { - $disk = $this->GetDisk(); - return $disk['used']; - } - - public function GetDisk() - { - $result = $this->ssh->RunCommandCached("df -l -x tmpfs", true); - $lines = explode("\n", $result->stdout); - array_shift($lines); - - $total_free = 0; - $total_used = 0; - $total_total = 0; - - foreach($lines as $disk) - { - $disk = trim($disk); - - if(!empty($disk)) - { - $values = split_whitespace($disk); - $total_free += (int)$values[3] / 1024; - $total_used += (int)$values[2] / 1024; - $total_total += ((int)$values[2] + (int)$values[3]) / 1024; - } - } - - return array( - 'free' => $total_free, - 'used' => $total_used, - 'total' => $total_total - ); - } -} diff --git a/frontend/classes/setting.php b/frontend/classes/setting.php deleted file mode 100644 index 330df08..0000000 --- a/frontend/classes/setting.php +++ /dev/null @@ -1,43 +0,0 @@ - array( - "Key" => "Key", - "Value" => "Value" - ), - 'timestamp' => array( - "LastChanged" => "LastChanged" - ) - ); - - public static function ByKey($key, $cache_duration = 60) - { - return Setting::CreateFromQuery("SELECT * FROM settings WHERE `Key` = :Key", array(":Key" => $key), $cache_duration, true); - } - - public function ChangeValue($value) - { - $this->uValue = $value; - $this->uLastChanged = time(); - $this->InsertIntoDatabase(); - } -} diff --git a/frontend/classes/sshconnector.php b/frontend/classes/sshconnector.php deleted file mode 100644 index 5e1d818..0000000 --- a/frontend/classes/sshconnector.php +++ /dev/null @@ -1,345 +0,0 @@ -DoCommand($command, $throw_exception); - } - catch (SshConnectException $e) - { - $error = $e->getMessage(); - $command = implode(" ", $command); - $this->failed = true; - throw new SshConnectException("Could not run command {$command}: Failed to connect: {$error}"); - } - catch (SshAuthException $e) - { - $error = $e->getMessage(); - $command = implode(" ", $command); - $this->failed = true; - throw new SshConnectException("Could not run command {$command}: Failed to authenticate: {$error}"); - } - } - - public function RunCommandCached($command, $throw_exception = false) - { - if(!isset($this->cache[serialize($command)])) - { - $result = $this->RunCommand($command, $throw_exception); - $this->cache[serialize($command)] = $result; - return $result; - } - else - { - return $this->cache[serialize($command)]; - } - } - - public function Connect() - { - /* TODO: TIME_WAIT status for a previous socket on the same port may cause issues - * when attempting to restart the command daemon. There is currently no way - * to detect this from the code, and it makes all subsequent requests fail - * (silently?) because the tunnel is available but nothing is listening on - * the other end. This kind of edge case should be detected and dealt with. - * A browser displays a 'no data received' error in this case. */ - if($this->failed) - { - throw new SshConnectException("A previous connection attempt failed."); - } - - $sHost = escapeshellarg($this->host); - $sUser = escapeshellarg($this->user); - $sPort = $this->tunnel_port = $this->node->uTunnelPort = $this->ChoosePort(); - $sKeyFile = escapeshellarg($this->key); - $this->node->uTunnelKey = $this->tunnel_key = random_string(16); - $sSessionKey = escapeshellarg($this->node->uTunnelKey); - - $command = "python /etc/cvm/start_tunnel.py {$sHost} {$sUser} {$sPort} {$sKeyFile} {$sSessionKey}"; - - cphp_debug_snapshot(array( - "action" => "start tunnel", - "db-tunnelkey" => $this->node->sTunnelKey, - "db-utunnelkey" => $this->node->uTunnelKey, - "ssh-tunnelkey" => $this->tunnel_key, - "arg-tunnelkey" => $sSessionKey - )); - - exec($command, $output, $returncode); - - if($returncode === 0) - { - /* autossh returns before the SSH connection has actually been established. We'll make the - * script sleep until a connection has been established, with a timeout of 10 seconds, after - * which an exception is raised. The polling interval is 100ms. */ - - $start_time = time(); - - while(true) - { - if(time() > $start_time + 10) - { - throw new SshConnectException("The SSH tunnel could not be fully established within the timeout period."); - } - - if($pollsock = @fsockopen("localhost", $this->tunnel_port, $errno, $errstr, 1)) - { - /* The tunnel has been fully established. */ - - fclose($pollsock); - break; - } - - usleep(100000); - } - - cphp_debug_snapshot(array( - "action" => "pre insert db", - "db-tunnelkey" => $this->node->sTunnelKey, - "db-utunnelkey" => $this->node->uTunnelKey, - "ssh-tunnelkey" => $this->tunnel_key, - "arg-tunnelkey" => $sSessionKey - )); - - $this->node->InsertIntoDatabase(); - - cphp_debug_snapshot(array( - "action" => "inserted db", - "db-tunnelkey" => $this->node->sTunnelKey, - "db-utunnelkey" => $this->node->uTunnelKey, - "ssh-tunnelkey" => $this->tunnel_key, - "arg-tunnelkey" => $sSessionKey - )); - - return true; - } - else - { - throw new SshConnectException("Could not establish tunnel to {$this->host}:{$this->port}."); - } - } - - private function ChoosePort() - { - try - { - $sPorts = array(); - - foreach(Node::CreateFromQuery("SELECT * FROM nodes WHERE `TunnelPort` != 0") as $node) - { - $sPorts[] = $node->sTunnelPort; - $sPorts[] = $node->sTunnelPort + 1; - $sPorts[] = $node->sTunnelPort + 2; - } - - /* TODO: Figure out a more intelligent way of choosing ports. */ - $start = max($sPorts) + 1; - } - catch (NotFoundException $e) - { - $start = 2000; - } - - $current = $start; - - while(true) - { - if($current > 65534) - { - /* TODO: We really need to deal with this properly... */ - throw new SshConnectException("No free tunnel ports left."); - } - - if(!$this->TestPort($current)) - { - if(!$this->TestPort($current + 1)) - { - if(!$this->TestPort($current + 2)) - { - break; - } - else - { - $current = $current + 3; - } - } - else - { - $current = $current + 2; - } - } - else - { - $current = $current + 1; - } - } - - return $current; - } - - private function TestPort($port) - { - if($testsock = @fsockopen("localhost", $port, $errno, $errstr, 1)) - { - fclose($testsock); - return true; - } - else - { - return false; - } - } - - private function DoCommand($command, $throw_exception, $allow_retry = true) - { - cphp_debug_snapshot(array( - "action" => "pre run command", - "db-tunnelkey" => $this->node->sTunnelKey, - "db-utunnelkey" => $this->node->uTunnelKey, - "ssh-tunnelkey" => $this->tunnel_key, - "command" => $command, - "allow-retry" => $allow_retry - )); - - $cmd = urlencode(json_encode($command)); - $url = "http://localhost:{$this->tunnel_port}/?key={$this->tunnel_key}&command={$cmd}"; - - /* Setting a HTTP timeout is going to break long-running requests. - * What the hell was I thinking?! - $context = stream_context_create(array( - 'http' => array( - 'timeout' => 2.0 - ) - ));*/ - - $response = @file($url, 0, $context); - - cphp_debug_snapshot(array( - "action" => "post run command", - "db-tunnelkey" => $this->node->sTunnelKey, - "db-utunnelkey" => $this->node->uTunnelKey, - "ssh-tunnelkey" => $this->tunnel_key, - "command" => $command, - "allow-retry" => $allow_retry, - "response" => $response - )); - - if($response === false) - { - /* Determine why the connection failed, and what we need to do to fix it. */ - if($testsock = @fsockopen("localhost", $this->tunnel_port, $errno, $errstr, 1)) - { - /* The socket works fine. */ - fclose($testsock); - - /* Since the socket works but we can't make a request, there is most - * likely a serious problem with the command daemon (stuck, crashed, - * etc.) We'll throw an exception. TODO: Log error. */ - $this->failed = true; - throw new SshCommandException("The command daemon is unavailable."); - } - else - { - /* The tunnel is gone for some reason. Either the connection broke - * and autossh is busy reconnecting, or autossh broke entirely. We - * will attempt to connect to the monitoring port to see if autossh - * is still running or not. */ - if($testsock = @fsockopen("localhost", ($this->tunnel_port + 2), $errno, $errstr, 1)) - { - /* The socket works fine. */ - fclose($testsock); - - /* Most likely autossh is very busy trying to reconnect to the node. We'll throw a - * connection exception for now. TODO: Consider waiting with a specified timeout. */ - $this->failed = true; - throw new SshConnectException("The SSH connection to this node is currently unavailable."); - } - else - { - if($allow_retry) - { - $this->Connect(); - $res = $this->DoCommand($command, $throw_exception, false); - } - else - { - $this->failed = true; - throw new SshConnectException("Could not connect to node."); - /* TODO: Log error, this is probably very bad. */ - } - } - } - } - else - { - $response = json_decode(implode("", $response)); - - $json_error = json_last_error(); - - if($json_error !== JSON_ERROR_NONE) - { - switch($json_last_error) - { - case JSON_ERROR_DEPTH: - $err_msg = "Maximum stack depth exceeded."; - break; - case JSON_ERROR_STATE_MISMATCH: - $err_msg = "Underflow or modes mismatch."; - break; - case JSON_ERROR_CTRL_CHAR: - $err_msg = "Unexpected control character found."; - break; - case JSON_ERROR_SYNTAX: - $err_msg = "Syntax error, malformed JSON."; - break; - case JSON_ERROR_UTF8: - $err_msg = "Malformed UTF-8 characters, possibly incorrectly encoded."; - break; - default: - $err_msg = "Unknown error {$json_error}."; - } - - throw new SshCommandException("An error occurred while decoding the response from the slave: {$err_msg}"); - } - } - - if($response->returncode != 0 && $throw_exception === true) - { - throw new SshExitException("Non-zero exit code returned: {$response->stderr}", $response->returncode); - } - - return $response; - } -} diff --git a/frontend/classes/template.php b/frontend/classes/template.php deleted file mode 100644 index 7bf9c2b..0000000 --- a/frontend/classes/template.php +++ /dev/null @@ -1,46 +0,0 @@ - array( - 'Name' => "Name", - 'TemplateName' => "TemplateName", - 'Description' => "Description" - ), - 'boolean' => array( - 'IsSupported' => "Supported", - 'IsAvailable' => "Available", - 'IsOutdated' => "Outdated" - ) - ); - - function CheckAvailable() - { - if($this->sIsAvailable === true) - { - return true; - } - else - { - throw new TemplateUnavailableException("This template is not available."); - } - } -} diff --git a/frontend/classes/user.php b/frontend/classes/user.php deleted file mode 100644 index 8145729..0000000 --- a/frontend/classes/user.php +++ /dev/null @@ -1,122 +0,0 @@ - array( - 'Username' => "Username", - 'EmailAddress' => "EmailAddress", - 'Hash' => "Hash", - 'Salt' => "Salt" - ), - 'numeric' => array( - 'AccessLevel' => "AccessLevel" - ) - ); - - public $prototype_export = array( - 'Username', - 'EmailAddress', - 'AccessLevel' - ); - - public function __get($name) - { - switch($name) - { - case "sVpsCount": - return $this->GetVpsCount(); - break; - default: - return parent::__get($name); - break; - } - } - - public function GetVpsCount() - { - global $database; - - if($result = $database->CachedQuery("SELECT * FROM containers WHERE `UserId` = :UserId", array(":UserId" => $this->sId))) - { - return count($result->data); - } - else - { - return 0; - } - } - - public function GenerateSalt() - { - $this->uSalt = random_string(10); - } - - public function GenerateHash() - { - if(!empty($this->uSalt)) - { - if(!empty($this->uPassword)) - { - $this->uHash = $this->CreateHash($this->uPassword); - } - else - { - throw new MissingDataException("User object is missing a password."); - } - } - else - { - throw new MissingDataException("User object is missing a salt."); - } - } - - public function CreateHash($input) - { - global $settings; - $hash = crypt($input, "$5\$rounds=50000\${$this->uSalt}{$settings['salt']}$"); - $parts = explode("$", $hash); - return $parts[4]; - } - - public function VerifyPassword($password) - { - if($this->CreateHash($password) == $this->sHash) - { - return true; - } - else - { - return false; - } - } - - public function RequireAccessLevel($level) - { - if($this->sAccessLevel < $level) - { - throw new InsufficientAccessLevelException("You do not have the required access level to perform this action."); - } - else - { - return true; - } - } -} diff --git a/frontend/classes/vps.php b/frontend/classes/vps.php deleted file mode 100644 index e9df5a5..0000000 --- a/frontend/classes/vps.php +++ /dev/null @@ -1,729 +0,0 @@ - array( - 'Hostname' => "Hostname", - 'InternalId' => "InternalId", - 'RootPassword' => "RootPassword" - ), - 'numeric' => array( - 'NodeId' => "NodeId", - 'TemplateId' => "TemplateId", - 'UserId' => "UserId", - 'VirtualizationType' => "VirtualizationType", - 'DiskSpace' => "DiskSpace", - 'GuaranteedRam' => "GuaranteedRam", - 'BurstableRam' => "BurstableRam", - 'CpuCount' => "CpuCount", - 'Status' => "Status", - 'IncomingTrafficUsed' => "IncomingTrafficUsed", - 'IncomingTrafficLast' => "IncomingTrafficLast", - 'OutgoingTrafficUsed' => "OutgoingTrafficUsed", - 'OutgoingTrafficLast' => "OutgoingTrafficLast", - 'IncomingTrafficLimit' => "IncomingTrafficLimit", - 'OutgoingTrafficLimit' => "OutgoingTrafficLimit", - 'TotalTrafficLimit' => "TotalTrafficLimit" - ), - 'timestamp' => array( - "TerminationDate" => "TerminationDate" - ), - 'boolean' => array( - "IsTerminated" => "Terminated" - ), - 'node' => array( - 'Node' => "NodeId" - ), - 'template' => array( - 'Template' => "TemplateId" - ), - 'user' => array( - 'User' => "UserId" - ) - ); - - public function __get($name) - { - switch($name) - { - case "sRamUsed": - return $this->GetRamUsed(); - break; - case "sRamTotal": - return $this->GetRamTotal(); - break; - case "sDiskUsed": - return $this->GetDiskUsed(); - break; - case "sDiskTotal": - return $this->GetDiskTotal(); - break; - case "sBandwidthUsed": - return $this->GetBandwidthUsed(); - break; - case "sCurrentStatus": - return (int)$this->GetCurrentStatus(); - break; - case "sStatusText": - return $this->GetStatusText(); - break; - default: - return parent::__get($name); - break; - } - } - - public function GetBandwidthUsed() - { - return ($this->sOutgoingTrafficUsed + $this->IncomingTrafficUsed) / (1024 * 1024); - } - - public function GetCurrentStatus() - { - if($this->sStatus == CVM_STATUS_SUSPENDED || $this->sStatus == CVM_STATUS_TERMINATED) - { - return $this->sStatus; - } - else - { - try - { - $command = array("sudo", "vzctl", "status", $this->sInternalId); - - $result = $this->sNode->ssh->RunCommandCached($command, false); - - if($result->returncode == 0) - { - $values = split_whitespace($result->stdout); - - if($values[4] == "running") - { - return CVM_STATUS_STARTED; - } - else - { - return CVM_STATUS_STOPPED; - } - } - } - catch (SshCommandException $e) - { - return CVM_STATUS_STOPPED; - } - } - } - - public function GetStatusText() - { - /* TODO: Add several more options: - * - unknown - * - deleted / non-existent - * - terminated - */ - - $status = $this->sCurrentStatus; - - if($status == CVM_STATUS_STARTED) - { - return "running"; - } - elseif($status == CVM_STATUS_STOPPED) - { - return "stopped"; - } - elseif($status == CVM_STATUS_SUSPENDED) - { - return "suspended"; - } - else - { - return "unknown"; - } - } - - public function GetRamUsed() - { - $ram = $this->GetRam(); - return $ram['used']; - } - - public function GetRamTotal() - { - $ram = $this->GetRam(); - return $ram['total']; - } - - public function GetRam() - { - try - { - $result = $this->RunCommandCached("free -m", true); - $lines = explode("\n", $result->stdout); - array_shift($lines); - - $total_free = 0; - $total_used = 0; - $total_total = 0; - - foreach($lines as $line) - { - $line = trim($line); - $values = split_whitespace($line); - - if(trim($values[0]) == "Mem:") - { - $total_total = $values[1]; - $total_used = $values[2]; - $total_free = $values[3]; - } - - } - } - catch (SshCommandException $e) - { - $total_free = 0; - $total_used = 0; - $total_total = 0; - } - - return array( - 'free' => $total_free, - 'used' => $total_used, - 'total' => $total_total - ); - } - - public function GetDiskUsed() - { - $disk = $this->GetDisk(); - return $disk['used']; - } - - public function GetDiskTotal() - { - $disk = $this->GetDisk(); - return $disk['total']; - } - - public function GetDisk() - { - try - { - $result = $this->RunCommandCached("df -l -x tmpfs", true); - $lines = explode("\n", $result->stdout); - array_shift($lines); - - $total_free = 0; - $total_used = 0; - $total_total = 0; - - foreach($lines as $disk) - { - $disk = trim($disk); - - if(!empty($disk)) - { - $values = split_whitespace($disk); - $total_free += (int)$values[3] / 1024; - $total_used += (int)$values[2] / 1024; - $total_total += ((int)$values[2] + (int)$values[3]) / 1024; - } - } - } - catch (SshCommandException $e) - { - $total_free = 0; - $total_used = 0; - $total_total = 0; - } - - return array( - 'free' => $total_free, - 'used' => $total_used, - 'total' => $total_total - ); - } - - public function CheckAllowed() - { - if($this->sStatus == CVM_STATUS_SUSPENDED) - { - throw new VpsSuspendedException("No operations can be performed on this VPS beacuse it is suspended.", 1, $this->sInternalId); - } - elseif($this->sStatus == CVM_STATUS_TERMINATED) - { - throw new VpsTerminatedException("No operations can be performed on this VPS beacuse it is terminated.", 1, $this->sInternalId); - } - else - { - return true; - } - } - - public function SetOptions($options) - { - if(is_array($options)) - { - $command_elements = array("sudo", "vzctl", "set", $this->sInternalId); - - foreach($options as $key => $value) - { - $command_elements[] = "--{$key}"; - $command_elements[] = $value; - } - - $command_elements[] = "--save"; - - $this->sNode->ssh->RunCommand($command_elements, true); - } - else - { - throw new InvalidArgumentException("The option argument to Vps::SetOptions should be an array."); - } - } - - public function RunCommand($command, $throw_exception = false) - { - return $this->sNode->ssh->RunCommand(array("sudo", "vzctl", "exec", $this->sInternalId, $command), $throw_exception); - } - - public function RunCommandCached($command, $throw_exception = false) - { - return $this->sNode->ssh->RunCommandCached(array("sudo", "vzctl", "exec", $this->sInternalId, $command), $throw_exception); - } - - public function Deploy($conf = array()) - { - $sRootPassword = random_string(20); - - $this->uRootPassword = $sRootPassword; - $this->InsertIntoDatabase(); - - $command = array("sudo", "vzctl", "create", $this->sInternalId, "--ostemplate", $this->sTemplate->sTemplateName); - - $result = $this->sNode->ssh->RunCommand($command, false); - - if($result->returncode == 0 && strpos($result->stderr, "ERROR") === false) - { - $this->uStatus = CVM_STATUS_CREATED; - $this->InsertIntoDatabase(); - - $dummy_processes = 1000; - $dummy_files = $this->sGuaranteedRam * 32; - $dummy_sockets = $this->sGuaranteedRam * 3; - - $sKMemSize = (isset($conf['sKMemSize'])) ? $conf['sKMemSize'] : (40 * 1024 * ($dummy_processes / 2)) + ($dummy_files * 384 * 100); - $sKMemSizeLimit = (isset($conf['sKMemSizeLimit'])) ? $conf['sKMemSizeLimit'] : (int)($sKMemSize * 1.1); - $sLockedPages = (isset($conf['sLockedPages'])) ? $conf['sLockedPages'] : $dummy_processes; - $sShmPages = (isset($conf['sShmPages'])) ? $conf['sShmPages'] : $this->sGuaranteedRam . "M"; - $sOomGuarPages = (isset($conf['sOomGuarPages'])) ? $conf['sOomGuarPages'] : $this->sGuaranteedRam . "M"; - $sTcpSock = (isset($conf['sTcpSock'])) ? $conf['sTcpSock'] : $dummy_sockets; - $sOtherSock = (isset($conf['sOtherSock'])) ? $conf['sOtherSock'] : $dummy_sockets; - $sFLock = (isset($conf['sFLock'])) ? $conf['sFLock'] : $dummy_processes; - $sFLockLimit = (isset($conf['sFLockLimit'])) ? $conf['sFLockLimit'] : (int)($sFLock * 1.1); - $sTcpSndBuf = (isset($conf['sTcpSndBuf'])) ? $conf['sTcpSndBuf'] : round($this->sGuaranteedRam * 1024 / 5) . "K"; - $sTcpRcvBuf = (isset($conf['sTcpRcvBuf'])) ? $conf['sTcpRcvBuf'] : round($this->sGuaranteedRam * 1024 / 5) . "K"; - $sOtherBuf = (isset($conf['sOtherBuf'])) ? $conf['sOtherBuf'] : round($this->sGuaranteedRam * 1024 / 5) . "K"; - $sOtherBufLimit = (isset($conf['sOtherBufLimit'])) ? $conf['sOtherBufLimit'] : (int)($sOtherBuf + (2 * $dummy_processes * 16)); - $sTcpSndBufLimit = (isset($conf['sTcpSndBufLimit'])) ? $conf['sTcpSndBufLimit'] : (int)($sTcpSndBuf + (2 * $dummy_processes * 16)); - $sTcpRcvBufLimit = (isset($conf['sTcpRcvBufLimit'])) ? $conf['sTcpRcvBufLimit'] : (int)($sTcpRcvBuf + (2 * $dummy_processes * 16)); - $sDgramBuf = (isset($conf['sDgramBuf'])) ? $conf['sDgramBuf'] : round($this->sGuaranteedRam * 1024 / 5) . "K"; - $sNumFile = (isset($conf['sNumFile'])) ? $conf['sNumFile'] : $dummy_files; - $sNumProc = (isset($conf['sNumProc'])) ? $conf['sNumProc'] : $dummy_processes; - $sDCache = (isset($conf['sDCache'])) ? $conf['sDCache'] : $dummy_files * 384; - $sDCacheLimit = (isset($conf['sDCacheLimit'])) ? $conf['sDCacheLimit'] : (int)($sDCache * 1.1); - $sAvgProc = (isset($conf['sAvgProc'])) ? $conf['sAvgProc'] : $dummy_processes / 2; - - $command = array("sudo", "vzctl", "set", $this->sInternalId, - "--onboot", "yes", - "--setmode", "restart", - "--hostname", $this->sHostname, - "--nameserver", "8.8.8.8", - "--nameserver", "8.8.4.4", - "--numproc", $this->sCpuCount, - "--vmguarpages", "{$this->sGuaranteedRam}M:unlimited", - "--privvmpages", "{$this->sBurstableRam}M:{$this->sBurstableRam}M", - "--quotatime", "0", - "--diskspace", "{$this->sDiskSpace}M:{$this->sDiskSpace}M", - "--userpasswd", "root:{$sRootPassword}", - "--kmemsize", "{$sKMemSize}:{$sKMemSizeLimit}", - "--lockedpages", "{$sLockedPages}:{$sLockedPages}", - "--shmpages", "{$sShmPages}:{$sShmPages}", - "--physpages", "0:unlimited", - "--oomguarpages", "{$sOomGuarPages}:unlimited", - "--numtcpsock", "{$sTcpSock}:{$sTcpSock}", - "--numflock", "{$sFLock}:{$sFLockLimit}", - "--numpty", "32:32", - "--numsiginfo", "512:512", - "--tcpsndbuf", "{$sTcpSndBuf}:{$sTcpSndBufLimit}", - "--tcprcvbuf", "{$sTcpRcvBuf}:{$sTcpRcvBufLimit}", - "--othersockbuf", "{$sOtherBuf}:{$sOtherBufLimit}", - "--dgramrcvbuf", "{$sDgramBuf}:{$sDgramBuf}", - "--numothersock", "{$sOtherSock}:{$sOtherSock}", - "--numfile", "{$sNumFile}:{$sNumFile}", - "--numproc", "{$sNumProc}:{$sNumProc}", - "--dcachesize", "{$sDCache}:{$sDCacheLimit}", - "--numiptent", "128:128", - "--diskinodes", "200000:220000", - "--avnumproc", "{$sAvgProc}:{$sAvgProc}", - "--save" - ); - - /* - This may be useful if we turn out to have a kernel that supports vswap - - $command = shrink_command("vzctl set {$this->sInternalId} - --onboot yes - --setmode restart - --hostname {$this->sHostname} - --nameserver 8.8.8.8 - --nameserver 8.8.4.4 - --numproc {$this->sCpuCount} - --quotatime 0 - --diskspace {$this->sDiskSpace}M:{$this->sDiskSpace}M - --userpasswd root:{$sRootPassword} - --numtcpsock 360:360 - --numflock 188:206 - --numpty 16:16 - --numsiginfo 256:256 - --tcpsndbuf 1720320:2703360 - --tcprcvbuf 1720320:2703360 - --othersockbuf 1126080:2097152 - --dgramrcvbuf 262144:262144 - --numothersock 360:360 - --numfile 9312:9312 - --dcachesize 3409920:3624960 - --numiptent 128:128 - --diskinodes 200000:220000 - --avnumproc 180:180 - --ram {$this->sGuaranteedRam}M - --swap {$this->sBurstableRam}M - --save - ");*/ - - $result = $this->sNode->ssh->RunCommand($command, false); - - if($result->returncode == 0) - { - $this->uStatus = CVM_STATUS_CONFIGURED; - $this->InsertIntoDatabase(); - - return true; - } - else - { - throw new VpsConfigureException($result->stderr, $result->returncode, $this->sInternalId); - } - } - else - { - throw new VpsCreateException($result->stderr, $result->returncode, $this->sInternalId); - } - } - - public function Destroy() - { - if($this->sCurrentStatus == CVM_STATUS_STARTED) - { - $this->Stop(); - } - - $command = array("sudo", "vzctl", "destroy", $this->sInternalId); - $result = $this->sNode->ssh->RunCommand($command, false); - - if($result->returncode == 0) - { - return true; - } - else - { - throw new VpsDestroyException("Destroying VPS failed: {$result->stderr}", $result->returncode, $this->sInternalId); - } - } - - public function Reinstall() - { - try - { - $this->Destroy(); - $this->Deploy(); - } - catch (VpsDestroyException $e) - { - throw new VpsReinstallException("Reinstalling VPS failed during destroying: " . $e->getMessage(), $e->getCode(), $this->sInternalId, $e); - } - catch (VpsCreateException $e) - { - throw new VpsReinstallException("Reinstalling VPS failed during creation: " . $e->getMessage(), $e->getCode(), $this->sInternalId, $e); - } - catch (VpsConfigureException $e) - { - throw new VpsReinstallException("Reinstalling VPS failed during configuration: " . $e->getMessage(), $e->getCode(), $this->sInternalId, $e); - } - } - - public function Start($forced = false) - { - if($this->sStatus == CVM_STATUS_SUSPENDED && $forced == false) - { - throw new VpsSuspendedException("The VPS cannot be started as it is suspended.", 1, $this->sInternalId); - } - elseif($this->sStatus == CVM_STATUS_TERMINATED && $forced == false) - { - throw new VpsTerminatedException("The VPS cannot be started as it is terminated.", 1, $this->sInternalId); - } - else - { - $command = array("sudo", "vzctl", "start", $this->sInternalId); - $result = $this->sNode->ssh->RunCommand($command, false); - - if($result->returncode == 0) - { - $this->uStatus = CVM_STATUS_STARTED; - $this->InsertIntoDatabase(); - return true; - } - else - { - throw new VpsStartException($result->stderr, $result->returncode, $this->sInternalId); - } - } - } - - public function Stop() - { - if($this->sStatus == CVM_STATUS_SUSPENDED) - { - throw new VpsSuspendedException("The VPS cannot be stopped as it is suspended.", 1, $this->sInternalId); - } - elseif($this->sStatus == CVM_STATUS_TERMINATED) - { - throw new VpsTerminatedException("The VPS cannot be stopped as it is terminated.", 1, $this->sInternalId); - } - else - { - $command = array("sudo", "vzctl", "stop", $this->sInternalId); - $result = $this->sNode->ssh->RunCommand($command, false); - - /* vzctl is retarded enough to return code 0 when the command fails because the container isn't running, - * so we'll have to check stderr for specific error strings as well. Come on guys, it's 2012. */ - if($result->returncode == 0 && strpos($result->stderr, "Unable to stop") === false) - { - $this->uStatus = CVM_STATUS_STOPPED; - $this->InsertIntoDatabase(); - return true; - } - else - { - throw new VpsStopException($result->stderr, $result->returncode, $this->sInternalId); - } - } - } - - public function Suspend() - { - if($this->sStatus == CVM_STATUS_SUSPENDED) - { - throw new VpsSuspendException("The VPS is already suspended.", 1, $this->sInternalId); - } - elseif($this->sStatus == CVM_STATUS_TERMINATED) - { - throw new VpsSuspendException("The VPS cannot be suspended because it is already terminated.", 1, $this->sInternalId); - } - else - { - try - { - $this->Stop(); - $this->uStatus = CVM_STATUS_SUSPENDED; - $this->InsertIntoDatabase(); - } - catch (VpsStopException $e) - { - throw new VpsSuspendException("Suspension failed as the VPS could not be stopped.", 1, $this->sInternalId, $e); - } - } - } - - public function Unsuspend() - { - if($this->sStatus == CVM_STATUS_SUSPENDED) - { - try - { - $this->Start(true); - $this->uStatus = CVM_STATUS_STARTED; - $this->InsertIntoDatabase(); - } - catch (VpsStartException $e) - { - throw new VpsUnsuspendException("Unsuspension failed as the VPS could not be started.", 1, $this->sInternalId, $e); - } - } - else - { - throw new VpsUnsuspendException("The VPS is not suspended.", 1, $this->sInternalId); - } - } - - public function Terminate() - { - if($this->sStatus != CVM_STATUS_TERMINATED) - { - try - { - $this->Stop(); - } - catch (VpsStopException $e) - { - /*throw new VpsTerminateException("Termination failed as the VPS could not be stopped.", 1, $this->sInternalId, $e);*/ - /* TODO: Throw warning about being unable to stop it, after checking VPS status. */ - } - - $this->uStatus = CVM_STATUS_TERMINATED; - $this->uTerminationDate = time(); - $this->InsertIntoDatabase(); - } - else - { - throw new VpsTerminateException("The VPS is already terminated.", 1, $this->sInternalId); - } - } - - public function Unterminate() - { - if($this->sStatus == CVM_STATUS_TERMINATED) - { - try - { - $this->Start(true); - } - catch (VpsStartException $e) - { - /*throw new VpsUnterminateException("Untermination failed as the VPS could not be started.", 1, $this->sInternalId, $e);*/ - /* TODO: Throw warning about being unable to start it, after checking VPS status. */ - } - - $this->uStatus = CVM_STATUS_STARTED; - $this->InsertIntoDatabase(); - } - else - { - throw new VpsUnterminateException("The VPS is not terminated.", 1, $this->sInternalId); - } - } - - public function AddIp($ip) - { - $command = array("sudo", "vzctl", "set", $this->sInternalId, "--ipadd", $ip, "--save"); - - $result = $this->sNode->ssh->RunCommand($command, false); - - if($result->returncode == 0) - { - return true; - } - else - { - throw new VpsIpAddException($result->stderr, $result->returncode, $this->sInternalId); - } - } - - public function RemoveIp($ip) - { - $command = array("sudo", "vzctl", "set", $this->sInternalId, "--ipdel", $ip, "--save"); - - $result = $this->sNode->ssh->RunCommand($command, false); - - if($result->returncode == 0) - { - return true; - } - else - { - throw new VpsIpRemoveException($result->stderr, $result->returncode, $this->sInternalId); - } - } - - public function UpdateTraffic() - { - /* TODO: Don't rely on grep, and parse the output in this function itself. Also try to find another way to do this without relying - * on the container at all. */ - $result = $this->sNode->ssh->RunCommand(array("sudo", "vzctl", "exec", $this->sInternalId, "cat /proc/net/dev | grep venet0"), false); - - if($result->returncode == 0) - { - $lines = split_lines($result->stdout); - $values = split_whitespace(str_replace(":", " ", $lines[0])); - - $uIncoming = $values[1]; - $uOutgoing = $values[9]; - - if($uIncoming < (int)$this->sIncomingTrafficLast || $uOutgoing < (int)$this->sOutgoingTrafficLast) - { - // the counter has reset (wrap-around, reboot, etc.) - $uNewIncoming = $uIncoming; - $uNewOutgoing = $uOutgoing; - } - else - { - $uNewIncoming = $uIncoming - $this->sIncomingTrafficLast; - $uNewOutgoing = $uOutgoing - $this->sOutgoingTrafficLast; - } - - $this->uIncomingTrafficUsed = $this->sIncomingTrafficUsed + $uNewIncoming; - $this->uOutgoingTrafficUsed = $this->sOutgoingTrafficUsed + $uNewOutgoing; - - $this->uIncomingTrafficLast = $uIncoming; - $this->uOutgoingTrafficLast = $uOutgoing; - - $this->InsertIntoDatabase(); - } - else - { - throw new VpsTrafficRetrieveException($result->stderr, $result->returncode, $this->sInternalId); - } - } - - public function SetRootPassword($password) - { - if($this->sStatus == CVM_STATUS_SUSPENDED) - { - throw new VpsSuspendedException("The root password cannot be changed, because the VPS is suspended.", 1, $this->sInternalId); - } - elseif($this->sStatus == CVM_STATUS_TERMINATED) - { - throw new VpsTerminatedException("The root password cannot be changed, because the VPS is terminated.", 1, $this->sInternalId); - } - else - { - $this->SetOptions(array( - 'userpasswd' => "root:{$password}" - )); - } - } - - public function EnableTunTap() - { - /* TODO: Finish EnableTunTap function, check whether tun module is available on host */ - $command = array("sudo", "vzctl", "set", $this->sInternalId, "--devnodes", "net/tun:rw", "--save"); - } -} diff --git a/frontend/cphp b/frontend/cphp deleted file mode 120000 index aaeddf6..0000000 --- a/frontend/cphp +++ /dev/null @@ -1 +0,0 @@ -../../cphp \ No newline at end of file diff --git a/frontend/cron.15.php b/frontend/cron.15.php deleted file mode 100644 index 9b68837..0000000 --- a/frontend/cron.15.php +++ /dev/null @@ -1,37 +0,0 @@ -CachedQuery("SELECT * FROM containers")) -{ - foreach($result->data as $row) - { - $sVps = new Vps($row); - - try - { - $sVps->UpdateTraffic(); - } - catch (VpsTrafficRetrieveException $e) - { - if($sVps->sCurrentStatus == CVM_STATUS_STARTED) - { - // This is not supposed to fail, as the VPS is running. - // Something shady going on. - // TODO: Log exception - } - } - } -} diff --git a/frontend/includes/.gitignore b/frontend/includes/.gitignore deleted file mode 100644 index c6dc218..0000000 --- a/frontend/includes/.gitignore +++ /dev/null @@ -1 +0,0 @@ -include.config.api.php diff --git a/frontend/includes/include.base.php b/frontend/includes/include.base.php deleted file mode 100644 index 0a1287d..0000000 --- a/frontend/includes/include.base.php +++ /dev/null @@ -1,39 +0,0 @@ - diff --git a/frontend/includes/include.constants.php b/frontend/includes/include.constants.php deleted file mode 100644 index 8460b29..0000000 --- a/frontend/includes/include.constants.php +++ /dev/null @@ -1,31 +0,0 @@ - diff --git a/frontend/includes/include.exceptions.php b/frontend/includes/include.exceptions.php deleted file mode 100644 index 2e212cc..0000000 --- a/frontend/includes/include.exceptions.php +++ /dev/null @@ -1,62 +0,0 @@ -id = $id; - - parent::__construct($message, $code, $previous); - } - - public function getId() - { - return $this->id; - } -} - -class VpsCreateException extends VpsException {} -class VpsConfigureException extends VpsException {} -class VpsStartException extends VpsException {} -class VpsStopException extends VpsException {} -class VpsSuspendException extends VpsException {} -class VpsUnsuspendException extends VpsException {} -class VpsTerminateException extends VpsException {} -class VpsUnterminateException extends VpsException {} -class VpsSuspendedException extends VpsException {} -class VpsTerminatedException extends VpsException {} -class VpsDestroyException extends VpsException {} -class VpsReinstallException extends VpsException {} -class VpsDeployException extends VpsException {} -class VpsIpAddException extends VpsException {} -class VpsIpRemoveException extends VpsException {} -class VpsTrafficRetrieveException extends VpsException {} - -class UnauthorizedException extends Exception {} -class InsufficientAccessLevelException extends Exception {} -class TemplateUnavailableException extends Exception {} - -class ParsingException extends Exception {} diff --git a/frontend/includes/include.misc.php b/frontend/includes/include.misc.php deleted file mode 100644 index c050620..0000000 --- a/frontend/includes/include.misc.php +++ /dev/null @@ -1,229 +0,0 @@ - $field_error) - { - if(empty($source[$field_name])) - { - $errors[] = $field_error; - } - } - - return $errors; -} - -function array_add(&$array, $value) -{ - /* Why use a separate function to add an item to an array if the $name[] construct exists? - * We only want to add an element to an array if the element isn't in the array yet, hence - * the need for a custom function. - * NOTE: This function works in-place. */ - if(in_array($value, $array) === false) - { - $array[] = $value; - } -} - -function validate_hostname($hostname) -{ - if(preg_match("/^[a-z\d](-*[a-z\d])*(\.[a-z\d](-*[a-z\d])*)*$/", $hostname)) - { - return true; - } - else - { - return false; - } -} - -function first_unused_ctid() -{ - /* [OpenVZ only] This function finds the first valid unused CTID and returns it. */ - global $database; - - $id_list = array(); - $highest = 101; - - /* Collect all known CTIDs and keep track of the highest CTID. */ - if($result = $database->CachedQuery("SELECT `InternalId` FROM containers WHERE `VirtualizationType` = 1", array(), 0)) - { - foreach($result->data as $row) - { - $id = filter_var($row['InternalId'] ,FILTER_VALIDATE_INT); - - if($id !== false) - { - $id_list[] = $id; - - if($id > $highest) - { - $highest = $id; - } - } - } - } - - /* Generate a list of all possible CTIDs between 101 and the highest CTID, and find - * all possible CTIDs that do not exist in the known CTID list. We use array_merge - * because otherwise the array indexes may not start from 0. */ - $all_ids = range(101, $highest, 1); - $missing = array_merge(array_diff($all_ids, $id_list)); - - if(count($missing) > 0) - { - /* Return the first unused CTID. */ - return $missing[0]; - } - else - { - /* All CTIDs up to the highest CTID have been used. We'll just return the CTID - * that is one above the highest known CTID. */ - return $highest + 1; - } -} - -function format_size($input, $multiplier = 1024, $group = false, $decimal_places = 0, $return_array = false) -{ - if($input > pow($multiplier, 8)) - { - $unit = "Y"; - $number = $input / pow($multiplier, 8); - } - elseif($input > pow($multiplier, 7)) - { - $unit = "Z"; - $number = $input / pow($multiplier, 7); - } - elseif($input > pow($multiplier, 6)) - { - $unit = "E"; - $number = $input / pow($multiplier, 6); - } - elseif($input > pow($multiplier, 5)) - { - $unit = "P"; - $number = $input / pow($multiplier, 5); - } - elseif($input > pow($multiplier, 4)) - { - $unit = "T"; - $number = $input / pow($multiplier, 4); - } - elseif($input > pow($multiplier, 3)) - { - $unit = "G"; - $number = $input / pow($multiplier, 3); - } - elseif($input > pow($multiplier, 2)) - { - $unit = "M"; - $number = $input / pow($multiplier, 2); - } - elseif($input > $multiplier) - { - $unit = "K"; - $number = $input / $multiplier; - } - else - { - $unit = ""; - $number = $input; - } - - if($group === true) - { - $number = number_format($number, $decimal_places); - } - else - { - $number = round($number, $decimal_places); - } - - if($return_array == true) - { - return array($number, $unit); - } - else - { - return $number . $unit; - } -} - -function status_code($code) -{ - $codes = array( - 100 => "Continue", - 101 => "Switching Protocols", - 200 => "OK", - 201 => "Created", - 202 => "Accepted", - 203 => "Non-Authoritative Information", - 204 => "No Content", - 205 => "Reset Content", - 206 => "Partial Content", - 300 => "Multiple Choices", - 301 => "Moved Permanently", - 302 => "Moved Temporarily", - 303 => "See Other", - 304 => "Not Modified", - 305 => "Use Proxy", - 400 => "Bad Request", - 401 => "Unauthorized", - 402 => "Payment Required", - 403 => "Forbidden", - 404 => "Not Found", - 405 => "Method Not Allowed", - 406 => "Not Acceptable", - 407 => "Proxy Authentication Required", - 408 => "Request Time-out", - 409 => "Conflict", - 410 => "Gone", - 411 => "Length Required", - 412 => "Precondition Failed", - 413 => "Request Entity Too Large", - 414 => "Request-URI Too Large", - 415 => "Unsupported Media Type", - 418 => "I'm a teapot", - 500 => "Internal Server Error", - 501 => "Not Implemented", - 502 => "Bad Gateway", - 503 => "Service Unavailable", - 504 => "Gateway Time-out", - 505 => "HTTP Version not supported", - ); - - if(array_key_exists($code, $codes)) - { - $text = $codes[$code]; - } - else - { - throw new Exception("The specified HTTP status code does not exist."); - } - - if(strpos(php_sapi_name(), "cgi") !== false) - { - header("Status: {$code} {$text}"); - } - else - { - $protocol = (isset($_SERVER['SERVER_PROTOCOL']) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0'); - header("{$protocol} {$code} {$text}"); - } -} diff --git a/frontend/includes/include.parsing.php b/frontend/includes/include.parsing.php deleted file mode 100644 index 46ee8ca..0000000 --- a/frontend/includes/include.parsing.php +++ /dev/null @@ -1,94 +0,0 @@ - diff --git a/frontend/index.php b/frontend/index.php deleted file mode 100644 index a6b0615..0000000 --- a/frontend/index.php +++ /dev/null @@ -1,14 +0,0 @@ -Help mee! - -userbox-loggedin; Je bent ingelogd als {%?username}. -userbox-account; Accountinstellingen -userbox-list; Mijn VPSen -userbox-logout; Uitloggen - -menu-overview; Overzicht -menu-statistics; Statistieken -menu-reinstall; Herinstalleren -menu-backups; Backups -menu-console; Console -menu-ip; IP-toewijzing -menu-alerts; Notificaties -menu-api; API - -login-username; Gebruikersnaam -login-password; Wachtwoord - -overview-quota-title-disk; Schijfruimte -overview-quota-title-ram; RAM -overview-quota-title-traffic; Dataverkeer -overview-title-configuration; VPS-configuratie -overview-title-status; Status -overview-title-location; Serverlocatie -overview-title-node; Host-server -overview-title-os; Besturingssysteem -overview-title-ipv4; IPv4-adressen -overview-title-ipv6; IPv6-adressen -overview-title-guaranteed; Gegarandeerde RAM -overview-title-burstable; Burstable RAM -overview-title-disk; Schijfruimte -overview-title-traffic; Dataverkeer -overview-title-bandwidth; Bandbreedtte -overview-status-running; Gestart -overview-status-stopped; Gestopt -overview-status-suspended; Geblokkeerd -overview-status-unknown; Onbekend -overview-button-start; Start VPS -overview-button-restart; Herstart VPS -overview-button-stop; Stop VPS - -list-column-hostname; Hostnaam -list-column-platform; Platform -list-column-node; Host-server -list-column-disk; Schijfruimte -list-column-ram; RAM -list-column-template; Sjabloon -list-status-running; Gestart -list-status-stopped; Gestopt -list-status-suspended; Geblokkeerd - -reinstall-warning; Ik begrijp dat bij het herinstalleren van mijn VPS alle gegevens die zich op de VPS bevinden onherroepelijk verloren gaan, en niet hersteld kunnen worden. Er zijn geen verdere bevestigingen, na het aanklikken van onderstaande knop wordt de herinstallatie gestart. Deze kan niet geannuleerd worden. diff --git a/frontend/locales/english.json b/frontend/locales/english.json deleted file mode 100644 index a97dd54..0000000 --- a/frontend/locales/english.json +++ /dev/null @@ -1 +0,0 @@ -{"console-title-port": {"message": "Port", "description": ""}, "toolbar-createuser": {"message": "Create user", "description": ""}, "button-login": {"message": "Login", "description": ""}, "edituser-access": {"message": "Account type", "description": ""}, "error-reinstall-notselected-title": {"message": "No template selected", "description": ""}, "title-overview": {"message": "Overview", "description": ""}, "error-admin-vpses-add-burstable": {"message": "You did not enter a valid burstable RAM specification.", "description": ""}, "title-unauthorized": {"message": "Unauthorized", "description": ""}, "addvps-guaranteed": {"message": "Guaranteed RAM", "description": ""}, "error-start-suspended-title": {"message": "VPS is suspended", "description": ""}, "event-1week-ago": {"message": "1 week ago", "description": ""}, "overview-title-bandwidth": {"message": "Bandwidth", "description": ""}, "error-stop-failed-title": {"message": "VPS failed to stop", "description": ""}, "button-admin-edituser": {"message": "Apply changes", "description": ""}, "addnode-customkeypair": {"message": "Custom keypair", "description": ""}, "console-step2": {"message": "After logging in with the above details, you will have to enter your VPS panel login details, after which you can select a VPS to invoke a root shell on.", "description": ""}, "console-step1": {"message": "To use the out-of-band console, connect through SSH using the following details:", "description": ""}, "error-logout-notloggedin-text": {"message": "You can only logout when you are already logged in.", "description": ""}, "error-reinstall-suspended-text": {"message": "You can not reinstall this VPS, because it is suspended. If you believe this is in error, please contact support.", "description": ""}, "menu-backups": {"message": "Backups", "description": ""}, "error-stop-success-title": {"message": "VPS stopped", "description": ""}, "list-status-unknown": {"message": "Status unknown", "description": ""}, "title-password": {"message": "Set new root password", "description": ""}, "password-field-confirm": {"message": "Confirm password", "description": ""}, "console-title-password": {"message": "Password", "description": ""}, "button-admin-vps-suspend": {"message": "Suspend VPS", "description": ""}, "error-start-terminated-title": {"message": "VPS is terminated", "description": ""}, "addvps-node": {"message": "Node", "description": ""}, "button-reinstall": {"message": "Reinstall", "description": ""}, "error-reinstall-failed-title": {"message": "Reinstallation failed", "description": ""}, "event-minutes-ago": {"message": "%1$d minutes ago", "description": ""}, "reinstall-warning": {"message": "I understand that by reinstalling my VPS, all data on the VPS is permanently lost and cannot be recovered. There will be no further confirmations, after clicking the Reinstall button the reinstallation process cannot be aborted.", "description": ""}, "error-admin-vpses-add-guaranteed": {"message": "You did not enter a valid guaranteed RAM specification.", "description": ""}, "error-admin-user-title": {"message": "That user does not exist", "description": ""}, "error-password-missing-title": {"message": "Fields missing", "description": ""}, "error-admin-nodes-add-hostname": {"message": "You did not fill in a valid hostname.", "description": ""}, "error-logout-success-text": {"message": "You have been successfully logged out. You can now close this page.", "description": ""}, "button-admin-vps-terminate": {"message": "Terminate VPS", "description": ""}, "button-password": {"message": "Set new root password", "description": ""}, "error-admin-vpses-add-hostname": {"message": "You entered an invalid hostname.", "description": ""}, "list-column-hostname": {"message": "Hostname", "description": ""}, "button-admin-addvps": {"message": "Create VPS", "description": ""}, "error-suspend-error-text": {"message": "The VPS could not be suspended.", "description": ""}, "title-admin-nodelist": {"message": "Node overview", "description": ""}, "error-password-nomatch-title": {"message": "Passwords do not match", "description": ""}, "event-weeks-ago": {"message": "%1$d weeks ago", "description": ""}, "admin-overview-message": {"message": "In the future, this page will hold a log of all most recent events. For now, it's just an empty page.", "description": ""}, "error-password-success-text": {"message": "Your new root password was successfully configured. Please ensure to change your root password again from your VPS after logging in.", "description": ""}, "addvps-template": {"message": "Template", "description": ""}, "error-start-terminated-text": {"message": "Your VPS could not be started, as it is terminated.", "description": ""}, "title-admin-vps-terminate": {"message": "Terminate VPS", "description": ""}, "warning-password-title": {"message": "Security warning", "description": ""}, "console-introduction": {"message": "If you cannot access your VPS for some reason, you can use the out-of-band console (also known as shell dropper) to invoke a root shell.", "description": ""}, "overview-status-unknown": {"message": "Unknown", "description": ""}, "overview-quota-title-traffic-outgoing": {"message": "Outgoing traffic", "description": ""}, "error-terminate-error-title": {"message": "Failed to terminate VPS", "description": ""}, "error-start-running-title": {"message": "VPS can't be started", "description": ""}, "error-stop-terminated-title": {"message": "VPS is terminated", "description": ""}, "warning-password-text": {"message": "Configuring your root password through this panel may expose it to the VPS provider. Only use this feature in an emergency situation, and always change your password again afterwards, from within your VPS.", "description": ""}, "list-status-stopped": {"message": "Stopped", "description": ""}, "error-unsuspend-error-title": {"message": "Failed to unsuspend VPS", "description": ""}, "error-restart-start-title": {"message": "VPS failed to start", "description": ""}, "error-reinstall-notfound-title": {"message": "Reinstallation aborted", "description": ""}, "userbox-account": {"message": "Account settings", "description": ""}, "overview-quota-title-traffic-incoming": {"message": "Incoming traffic", "description": ""}, "error-suspended-title": {"message": "This VPS is suspended", "description": ""}, "error-admin-vpses-add-user": {"message": "You did not select a valid user.", "description": ""}, "error-password-missing-text": {"message": "Both fields are required. Please try again.", "description": ""}, "addnode-publickey": {"message": "Public key", "description": ""}, "error-suspend-success-text": {"message": "The VPS has been suspended and can no longer be used by the owner.", "description": ""}, "toolbar-addnode": {"message": "Add node", "description": ""}, "title-admin-addvps": {"message": "Create VPS", "description": ""}, "error-reinstall-success-text": {"message": "Your VPS was successfully reinstalled.", "description": ""}, "error-terminated-title": {"message": "This VPS has been terminated", "description": ""}, "error-password-nomatch-text": {"message": "Both entries must be identical. Please try again.", "description": ""}, "error-form": {"message": "One or more problems occurred.", "description": ""}, "list-status-suspended": {"message": "Suspended", "description": ""}, "event-1day-ago": {"message": "1 day ago", "description": ""}, "overview-status-stopped": {"message": "Stopped", "description": ""}, "admin-title-id": {"message": "User ID", "description": ""}, "overview-title-location": {"message": "Server location", "description": ""}, "event-hours-ago": {"message": "%1$d hours ago", "description": ""}, "warning-suspended-text": {"message": "You cannot change any configuration or perform any actions on this VPS. If you feel this should not be the case, please contact support.", "description": ""}, "edituser-username": {"message": "Username", "description": ""}, "error-unauthorized-title": {"message": "You are not authorized to view this page", "description": ""}, "admin-level-nodeadmin": {"message": "Node administrator", "description": ""}, "error-stop-suspended-title": {"message": "VPS is suspended", "description": ""}, "error-start-suspended-text": {"message": "Your VPS could not be started, as it is currently suspended. If you believe this is in error, please file a support ticket.", "description": ""}, "reinstall-patience": {"message": "(be patient; this may take a while)", "description": ""}, "error-reinstall-unavailable-text": {"message": "The template you selected is not available. Please select a different template.", "description": ""}, "error-terminate-success-text": {"message": "The VPS has been terminated and can no longer be used by the owner.", "description": ""}, "error-reinstall-notselected-text": {"message": "You did not select a template from the list. Please select a template and try again.", "description": ""}, "vps-admin-unsuspend-text": {"message": "Are you sure you wish to unsuspend this VPS? The owner will be able to use it again.", "description": ""}, "menu-ip": {"message": "IP Allocation", "description": ""}, "addnode-location": {"message": "Physical location", "description": ""}, "error-password-invalid-title": {"message": "Failed to configure root password", "description": ""}, "error-password-terminated-text": {"message": "You can not configure the root password for this VPS, because it has been terminated.", "description": ""}, "addvps-burstable": {"message": "Burstable RAM", "description": ""}, "error-unsuspend-success-text": {"message": "The VPS has been unsuspended and can now be used by the owner again.", "description": ""}, "userbox-loggedin": {"message": "You are logged in as {%?username}.", "description": ""}, "vps-admin-terminate": {"message": "Terminate", "description": ""}, "error-notfound-title": {"message": "VPS not found", "description": ""}, "error-password-terminated-title": {"message": "Failed to configure root password", "description": ""}, "error-admin-vpses-add-cpucount": {"message": "You did not enter a valid amount of CPUs.", "description": ""}, "error-stop-stopped-text": {"message": "Your VPS cannot be stopped because it is not running.", "description": ""}, "error-reinstall-unavailable-title": {"message": "Reinstallation aborted", "description": ""}, "error-stop-terminated-text": {"message": "Your VPS could not be stopped, as it is terminated.", "description": ""}, "overview-button-stop": {"message": "Stop VPS", "description": ""}, "title-admin-edituser": {"message": "Edit user", "description": ""}, "login-password": {"message": "Password", "description": ""}, "toolbar-createvps": {"message": "Create VPS", "description": ""}, "error-admin-nodes-add-privatekey": {"message": "You did not upload a valid private key.", "description": ""}, "warning-terminated-text": {"message": "You cannot change any configuration or perform any actions on this VPS, as it is terminated.", "description": ""}, "error-admin-nodes-add-name": {"message": "You did not fill in a valid name.", "description": ""}, "overview-title-traffic": {"message": "Traffic", "description": ""}, "event-1hour-ago": {"message": "1 hour ago", "description": ""}, "overview-status-running": {"message": "Running", "description": ""}, "error-start-success-title": {"message": "VPS started", "description": ""}, "overview-title-traffic-outgoing": {"message": "Outgoing traffic", "description": ""}, "event-now": {"message": "now", "description": ""}, "admin-title-accesslevel": {"message": "Access level", "description": ""}, "error-admin-vpses-add-template": {"message": "You did not select a valid template.", "description": ""}, "overview-title-status": {"message": "Status", "description": ""}, "error-terminate-success-title": {"message": "VPS terminated", "description": ""}, "error-reinstall-terminated-text": {"message": "You can not reinstall this VPS, because it has been terminated.", "description": ""}, "warning-suspended-title": {"message": "This VPS is suspended", "description": ""}, "title-console": {"message": "Out-of-band console", "description": ""}, "overview-title-disk": {"message": "Disk space", "description": ""}, "error-stop-failed-text": {"message": "Your VPS could not be stopped. If this error persists, please file a support ticket.", "description": ""}, "error-stop-suspended-text": {"message": "Your VPS could not be stopped, as it is currently suspended. If you believe this is in error, please file a support ticket.", "description": ""}, "_time": {"message": "%H:%M:%S", "description": ""}, "list-column-nodeid": {"message": "Node ID", "description": ""}, "menu-alerts": {"message": "Alerts", "description": ""}, "button-admin-vps-transfer": {"message": "Transfer VPS", "description": ""}, "login-username": {"message": "Username", "description": ""}, "list-column-location": {"message": "Physical location", "description": ""}, "header-vps-admin": {"message": "Administrative tasks", "description": ""}, "event-seconds-ago": {"message": "%1$d seconds ago", "description": ""}, "menu-admin-users": {"message": "Users", "description": ""}, "overview-title-node": {"message": "Host node", "description": ""}, "overview-button-restart": {"message": "Restart VPS", "description": ""}, "event-days-ago": {"message": "%1$d days ago", "description": ""}, "admin-level-masteradmin": {"message": "Master administrator", "description": ""}, "error-unterminate-success-text": {"message": "The VPS has been unterminated and can now be used by the owner again.", "description": ""}, "addnode-name": {"message": "Name", "description": ""}, "addvps-traffic": {"message": "Traffic allocation", "description": ""}, "menu-admin-vpses": {"message": "VPSes", "description": ""}, "addvps-diskspace": {"message": "Disk space", "description": ""}, "title-admin-vps-unsuspend": {"message": "Unsuspend VPS", "description": ""}, "error-restart-success-title": {"message": "VPS restarted", "description": ""}, "overview-title-guaranteed": {"message": "Guaranteed RAM", "description": ""}, "overview-title-configuration": {"message": "VPS configuration", "description": ""}, "title-login": {"message": "Login to your VPS panel", "description": ""}, "_datetime_short": {"message": "%d/%m/%Y %H:%M:%S", "description": ""}, "console-title-username": {"message": "Username", "description": ""}, "event-1year-ago": {"message": "1 year ago", "description": ""}, "edituser-email": {"message": "Email address", "description": ""}, "menu-admin-overview": {"message": "Overview", "description": ""}, "event-1minutes-ago": {"message": "1 minute ago", "description": ""}, "menu-api": {"message": "API", "description": ""}, "menu-reinstall": {"message": "Reinstall", "description": ""}, "button-admin-vps-unterminate": {"message": "Unterminate VPS", "description": ""}, "event-past": {"message": "in the past", "description": ""}, "list-column-platform": {"message": "Platform", "description": ""}, "vps-admin-suspend": {"message": "Suspend / unsuspend", "description": ""}, "error-suspend-success-title": {"message": "VPS suspended", "description": ""}, "error-unsuspend-error-text": {"message": "The VPS could not be unsuspended.", "description": ""}, "overview-button-start": {"message": "Start VPS", "description": ""}, "error-reinstall-start-title": {"message": "Failed to start", "description": ""}, "addvps-user": {"message": "User", "description": ""}, "error-start-success-text": {"message": "Your VPS was successfully started.", "description": ""}, "error-admin-nodes-add-location": {"message": "You did not fill in a valid physical location.", "description": ""}, "admin-level-enduser": {"message": "End user", "description": ""}, "error-password-suspended-title": {"message": "Failed to configure root password", "description": ""}, "error-start-failed-text": {"message": "Your VPS could not be started. If this error persists, please file a support ticket.", "description": ""}, "overview-title-os": {"message": "Operating system", "description": ""}, "addvps-hostname": {"message": "Hostname (optional)", "description": ""}, "error-login-invalid-text": {"message": "The login details you provided are invalid. Please try again.", "description": ""}, "_locale": {"message": "en_US.UTF-8,en_US", "description": ""}, "password-field-password": {"message": "New root password", "description": ""}, "error-stop-success-text": {"message": "Your VPS was successfully stopped.", "description": ""}, "userbox-admin": {"message": "Administration panel", "description": ""}, "list-status-running": {"message": "Running", "description": ""}, "error-restart-success-text": {"message": "Your VPS was successfully restarted.", "description": ""}, "overview-title-burstable": {"message": "Burstable RAM", "description": ""}, "error-reinstall-success-title": {"message": "Reinstallation succeeded!", "description": ""}, "error-unterminate-success-title": {"message": "VPS unterminated", "description": ""}, "notfound": {"message": "The specified VPS was not found.", "description": ""}, "console-title-hostname": {"message": "Hostname", "description": ""}, "error-admin-nodes-add-upload": {"message": "Something went wrong while processing the uploaded keys. Ensure that the keys directory is writable.", "description": ""}, "title-admin-nodeinfo": {"message": "Node lookup", "description": ""}, "title-admin-vps-transfer": {"message": "Transfer VPS ownership", "description": ""}, "warning-terminated-title": {"message": "This VPS has been terminated", "description": ""}, "error-logout-notloggedin-title": {"message": "You are not logged in", "description": ""}, "event-1second-ago": {"message": "1 second ago", "description": ""}, "header-admin-user-vpses": {"message": "VPSes owned by this user", "description": ""}, "error-login-invalid-title": {"message": "Login failed", "description": ""}, "error-notfound-text": {"message": "The VPS you selected was not found.", "description": ""}, "error-stop-stopped-title": {"message": "VPS can't be stopped", "description": ""}, "admin-level-reseller": {"message": "Reseller", "description": ""}, "error-password-suspended-text": {"message": "You can not configure the root password for this VPS, because it is suspended. If you believe this is in error, please contact support.", "description": ""}, "error-unauthorized-text": {"message": "Your access level is not sufficient or you are not logged in.", "description": ""}, "error-password-invalid-text": {"message": "Your password may be in an invalid format. Try again with a different password.", "description": ""}, "title-reinstall": {"message": "Reinstall your VPS", "description": ""}, "menu-statistics": {"message": "Statistics", "description": ""}, "menu-admin-nodes": {"message": "Nodes", "description": ""}, "error-reinstall-terminated-title": {"message": "Reinstallation aborted", "description": ""}, "admin-title-vpses": {"message": "VPS count", "description": ""}, "title-admin-overview": {"message": "Administrative overview", "description": ""}, "list-column-ram": {"message": "RAM", "description": ""}, "error-restart-terminated-text": {"message": "Your VPS could not be restarted, as it is terminated.", "description": ""}, "button-admin-vps-unsuspend": {"message": "Unsuspend VPS", "description": ""}, "error-terminate-error-text": {"message": "The VPS could not be terminated.", "description": ""}, "title-admin-userlist": {"message": "User overview", "description": ""}, "overview-title-ipv6": {"message": "IPv6 addresses", "description": ""}, "title-admin-vps-suspend": {"message": "Suspend VPS", "description": ""}, "overview-title-ipv4": {"message": "IPv4 addresses", "description": ""}, "addnode-privatekey": {"message": "Private key", "description": ""}, "title-admin-userinfo": {"message": "User lookup", "description": ""}, "error-admin-nodes-add-publickey": {"message": "You did not upload a valid public key.", "description": ""}, "error-reinstall-failed-text": {"message": "Something went wrong during the reinstallation of your VPS. Please try again. If the reinstallation fails again, please contact support.", "description": ""}, "event-1month-ago": {"message": "1 month ago", "description": ""}, "list-column-disk": {"message": "Disk space", "description": ""}, "_datetime_long": {"message": "%A %B %d, %Y %H:%M:%S", "description": ""}, "error-restart-suspended-text": {"message": "Your VPS could not be restarted, as it is currently suspended. If you believe this is in error, please file a support ticket.", "description": ""}, "vps-admin-suspend-text": {"message": "Are you sure you wish to suspend this VPS? The owner will no longer be able to use it, until it is unsuspended!", "description": ""}, "error-reinstall-suspended-title": {"message": "Reinstallation aborted", "description": ""}, "error-start-failed-title": {"message": "VPS failed to start", "description": ""}, "addnode-hostname": {"message": "Hostname", "description": ""}, "error-admin-vpses-add-node": {"message": "You did not select a valid node.", "description": ""}, "userbox-logout": {"message": "Log out", "description": ""}, "error-restart-suspended-title": {"message": "VPS is suspended", "description": ""}, "list-column-template": {"message": "Template", "description": ""}, "header-admin-node-vpses": {"message": "VPSes on this node", "description": ""}, "userbox-list": {"message": "My VPSes", "description": ""}, "error-reinstall-notfound-text": {"message": "The template you selected does not exist (anymore). Please select a different template.", "description": ""}, "error-start-running-text": {"message": "Your VPS cannot be started because it is already running.", "description": ""}, "vps-admin-unterminate-text": {"message": "Are you sure you wish to unterminate this VPS? The owner will be able to use it again.", "description": ""}, "toolbar-editnode": {"message": "Edit node details", "description": ""}, "vps-admin-terminate-text": {"message": "Are you sure you wish to terminate this VPS? The VPS will be suspended immediately, and deleted after several hours. As long as it is not deleted, the termination can be undone.", "description": ""}, "event-future": {"message": "in the future", "description": ""}, "error-reinstall-confirm-text": {"message": "You did not tick the checkbox at the bottom of the page. Please carefully read the warning, tick the checkbox, and try again.", "description": ""}, "_date_short": {"message": "%d/%m/%Y", "description": ""}, "overview-quota-title-ram": {"message": "RAM", "description": ""}, "error-unterminate-error-text": {"message": "The VPS could not be unterminated.", "description": ""}, "error-reinstall-confirm-title": {"message": "Reinstallation aborted", "description": ""}, "overview-quota-title-traffic": {"message": "Traffic", "description": ""}, "button-admin-addnode": {"message": "Add node", "description": ""}, "error-admin-user-text": {"message": "The user you tried to look up does not exist.", "description": ""}, "event-months-ago": {"message": "%1$d months ago", "description": ""}, "overview-quota-title-disk": {"message": "Disk space", "description": ""}, "title-admin-vpslist": {"message": "VPS overview", "description": ""}, "error-restart-terminated-title": {"message": "VPS is terminated", "description": ""}, "menu-overview": {"message": "Overview", "description": ""}, "list-column-node": {"message": "Node", "description": ""}, "title-admin-addnode": {"message": "Add node", "description": ""}, "error-suspend-error-title": {"message": "Failed to suspend VPS", "description": ""}, "error-unsuspend-success-title": {"message": "VPS unsuspended", "description": ""}, "error-password-success-title": {"message": "Password configuration succeeded!", "description": ""}, "menu-password": {"message": "Root Password", "description": ""}, "event-years-ago": {"message": "%1$d years ago", "description": ""}, "admin-title-email": {"message": "Email address", "description": ""}, "addvps-cpucount": {"message": "CPUs", "description": ""}, "error-admin-vpses-add-disk": {"message": "You did not enter a valid disk space specification.", "description": ""}, "admin-title-username": {"message": "Username", "description": ""}, "_date_long": {"message": "%A %B %d, %Y", "description": ""}, "footer": {"message": "CVM is a free and open source VPS control panel. Want to contribute?", "description": ""}, "title-admin-vps-unterminate": {"message": "Unterminate VPS", "description": ""}, "vps-admin-transfer": {"message": "Transfer", "description": ""}, "error-reinstall-start-text": {"message": "The VPS was successfully reinstalled, but it could not be started. If the issue persists, please contact support.", "description": ""}, "error-restart-start-text": {"message": "Your VPS could not be started. If this error persists, please file a support ticket.", "description": ""}, "menu-console": {"message": "Console", "description": ""}, "error-logout-success-title": {"message": "Successfully logged out", "description": ""}, "error-unterminate-error-title": {"message": "Failed to unterminate VPS", "description": ""}, "error-admin-vpses-add-traffic": {"message": "You did not enter a valid traffic allocation specification.", "description": ""}, "overview-status-suspended": {"message": "Suspended", "description": ""}, "overview-title-traffic-incoming": {"message": "Incoming traffic", "description": ""}, "toolbar-edituser": {"message": "Edit user details", "description": ""}} diff --git a/frontend/locales/english.lng b/frontend/locales/english.lng deleted file mode 100644 index 68a2c8e..0000000 --- a/frontend/locales/english.lng +++ /dev/null @@ -1,342 +0,0 @@ -## Basic locale settings -_locale; en_US.UTF-8,en_US -_datetime_short; %d/%m/%Y %H:%M:%S -_datetime_long; %A %B %d, %Y %H:%M:%S -_date_short; %d/%m/%Y -_date_long; %A %B %d, %Y -_time; %H:%M:%S - -## Relative time indications -event-now; now -event-future; in the future -event-past; in the past -event-1second-ago; 1 second ago -event-seconds-ago; %1$d seconds ago -event-1minutes-ago; 1 minute ago -event-minutes-ago; %1$d minutes ago -event-1hour-ago; 1 hour ago -event-hours-ago; %1$d hours ago -event-1day-ago; 1 day ago -event-days-ago; %1$d days ago -event-1week-ago; 1 week ago -event-weeks-ago; %1$d weeks ago -event-1month-ago; 1 month ago -event-months-ago; %1$d months ago -event-1year-ago; 1 year ago -event-years-ago; %1$d years ago - -## Miscellaneous -footer; CVM is a free and open source VPS control panel. Want to contribute? -title-unauthorized; Unauthorized -error-unauthorized-title; You are not authorized to view this page -error-unauthorized-text; Your access level is not sufficient or you are not logged in. -error-notfound-title; VPS not found -error-notfound-text; The VPS you selected was not found. - -## Login -title-login; Login to your VPS panel -error-login-invalid-title; Login failed -error-login-invalid-text; The login details you provided are invalid. Please try again. -login-username; Username -login-password; Password -button-login; Login - -## Logout -error-logout-success-title; Successfully logged out -error-logout-success-text; You have been successfully logged out. You can now close this page. -error-logout-notloggedin-title; You are not logged in -error-logout-notloggedin-text; You can only logout when you are already logged in. - -## User box -userbox-loggedin; You are logged in as {%?username}. -userbox-account; Account settings -userbox-list; My VPSes -userbox-logout; Log out -userbox-admin; Administration panel - -## End user menu items -menu-overview; Overview -menu-statistics; Statistics -menu-reinstall; Reinstall -menu-backups; Backups -menu-console; Console -menu-ip; IP Allocation -menu-alerts; Alerts -menu-api; API -menu-password; Root Password - -## Administration panel menu items -menu-admin-overview; Overview -menu-admin-users; Users -menu-admin-vpses; VPSes -menu-admin-nodes; Nodes -menu-admin-templates; Templates - -## Global warnings and errors -error-form; One or more problems occurred. -warning-suspended-title; This VPS is suspended -warning-suspended-text; You cannot change any configuration or perform any actions on this VPS. If you feel this should not be the case, please contact support. -warning-terminated-title; This VPS has been terminated -warning-terminated-text; You cannot change any configuration or perform any actions on this VPS, as it is terminated. -error-suspended-title; This VPS is suspended -error-terminated-title; This VPS has been terminated - -## VPS overview page -title-overview; Overview -notfound; The specified VPS was not found. -overview-quota-title-disk; Disk space -overview-quota-title-ram; RAM -overview-quota-title-traffic; Traffic -overview-quota-title-traffic-incoming; Incoming traffic -overview-quota-title-traffic-outgoing; Outgoing traffic -overview-title-configuration; VPS configuration -overview-title-status; Status -overview-title-location; Server location -overview-title-node; Host node -overview-title-os; Operating system -overview-title-ipv4; IPv4 addresses -overview-title-ipv6; IPv6 addresses -overview-title-guaranteed; Guaranteed RAM -overview-title-burstable; Burstable RAM -overview-title-disk; Disk space -overview-title-traffic; Traffic -overview-title-traffic-incoming; Incoming traffic -overview-title-traffic-outgoing; Outgoing traffic -overview-title-bandwidth; Bandwidth -overview-status-running; Running -overview-status-stopped; Stopped -overview-status-suspended; Suspended -overview-status-unknown; Unknown -overview-button-start; Start VPS -overview-button-restart; Restart VPS -overview-button-stop; Stop VPS -header-vps-admin; Administrative tasks -vps-admin-suspend; Suspend / unsuspend -vps-admin-transfer; Transfer -vps-admin-terminate; Terminate - -## Start VPS -error-start-success-title; VPS started -error-start-success-text; Your VPS was successfully started. -error-start-suspended-title; VPS is suspended -error-start-suspended-text; Your VPS could not be started, as it is currently suspended. If you believe this is in error, please file a support ticket. -error-start-terminated-title; VPS is terminated -error-start-terminated-text; Your VPS could not be started, as it is terminated. -error-start-failed-title; VPS failed to start -error-start-failed-text; Your VPS could not be started. If this error persists, please file a support ticket. -error-start-running-title; VPS can't be started -error-start-running-text; Your VPS cannot be started because it is already running. - -## Stop VPS -error-stop-success-title; VPS stopped -error-stop-success-text; Your VPS was successfully stopped. -error-stop-suspended-title; VPS is suspended -error-stop-suspended-text; Your VPS could not be stopped, as it is currently suspended. If you believe this is in error, please file a support ticket. -error-stop-terminated-title; VPS is terminated -error-stop-terminated-text; Your VPS could not be stopped, as it is terminated. -error-stop-failed-title; VPS failed to stop -error-stop-failed-text; Your VPS could not be stopped. If this error persists, please file a support ticket. -error-stop-stopped-title; VPS can't be stopped -error-stop-stopped-text; Your VPS cannot be stopped because it is not running. - -## Restart VPS -error-restart-success-title; VPS restarted -error-restart-success-text; Your VPS was successfully restarted. -error-restart-suspended-title; VPS is suspended -error-restart-suspended-text; Your VPS could not be restarted, as it is currently suspended. If you believe this is in error, please file a support ticket. -error-restart-terminated-title; VPS is terminated -error-restart-terminated-text; Your VPS could not be restarted, as it is terminated. -error-restart-start-title; VPS failed to start -error-restart-start-text; Your VPS could not be started. If this error persists, please file a support ticket. - -## Suspend VPS -title-admin-vps-suspend; Suspend VPS -vps-admin-suspend-text; Are you sure you wish to suspend this VPS? The owner will no longer be able to use it, until it is unsuspended! -error-suspend-success-title; VPS suspended -error-suspend-success-text; The VPS has been suspended and can no longer be used by the owner. -error-suspend-error-title; Failed to suspend VPS -error-suspend-error-text; The VPS could not be suspended. -button-admin-vps-suspend; Suspend VPS - -## Unsuspend VPS -title-admin-vps-unsuspend; Unsuspend VPS -vps-admin-unsuspend-text; Are you sure you wish to unsuspend this VPS? The owner will be able to use it again. -error-unsuspend-success-title; VPS unsuspended -error-unsuspend-success-text; The VPS has been unsuspended and can now be used by the owner again. -error-unsuspend-error-title; Failed to unsuspend VPS -error-unsuspend-error-text; The VPS could not be unsuspended. -button-admin-vps-unsuspend; Unsuspend VPS - -## Terminate VPS -title-admin-vps-terminate; Terminate VPS -vps-admin-terminate-text; Are you sure you wish to terminate this VPS? The VPS will be suspended immediately, and deleted after several hours. As long as it is not deleted, the termination can be undone. -error-terminate-success-title; VPS terminated -error-terminate-success-text; The VPS has been terminated and can no longer be used by the owner. -error-terminate-error-title; Failed to terminate VPS -error-terminate-error-text; The VPS could not be terminated. -button-admin-vps-terminate; Terminate VPS - -## Unterminate VPS -title-admin-vps-unterminate; Unterminate VPS -vps-admin-unterminate-text; Are you sure you wish to unterminate this VPS? The owner will be able to use it again. -error-unterminate-success-title; VPS unterminated -error-unterminate-success-text; The VPS has been unterminated and can now be used by the owner again. -error-unterminate-error-title; Failed to unterminate VPS -error-unterminate-error-text; The VPS could not be unterminated. -button-admin-vps-unterminate; Unterminate VPS - -## Transfer VPS -title-admin-vps-transfer; Transfer VPS ownership -button-admin-vps-transfer; Transfer VPS - -## Terminate VPS -title-admin-vps-terminate; Terminate VPS -button-admin-vps-terminate; Terminate VPS - -## Reinstall VPS -title-reinstall; Reinstall your VPS -error-reinstall-success-title; Reinstallation succeeded! -error-reinstall-success-text; Your VPS was successfully reinstalled. -error-reinstall-confirm-title; Reinstallation aborted -error-reinstall-confirm-text; You did not tick the checkbox at the bottom of the page. Please carefully read the warning, tick the checkbox, and try again. -error-reinstall-notfound-title; Reinstallation aborted -error-reinstall-notfound-text; The template you selected does not exist (anymore). Please select a different template. -error-reinstall-notselected-title; No template selected -error-reinstall-notselected-text; You did not select a template from the list. Please select a template and try again. -error-reinstall-unavailable-title; Reinstallation aborted -error-reinstall-unavailable-text; The template you selected is not available. Please select a different template. -error-reinstall-failed-title; Reinstallation failed -error-reinstall-failed-text; Something went wrong during the reinstallation of your VPS. Please try again. If the reinstallation fails again, please contact support. -error-reinstall-start-title; Failed to start -error-reinstall-start-text; The VPS was successfully reinstalled, but it could not be started. If the issue persists, please contact support. -error-reinstall-suspended-title; Reinstallation aborted -error-reinstall-suspended-text; You can not reinstall this VPS, because it is suspended. If you believe this is in error, please contact support. -error-reinstall-terminated-title; Reinstallation aborted -error-reinstall-terminated-text; You can not reinstall this VPS, because it has been terminated. -reinstall-warning; I understand that by reinstalling my VPS, all data on the VPS is permanently lost and cannot be recovered. There will be no further confirmations, after clicking the Reinstall button the reinstallation process cannot be aborted. -reinstall-patience; (be patient; this may take a while) -button-reinstall; Reinstall - -## Change root password -title-password; Set new root password -error-password-success-title; Password configuration succeeded! -error-password-success-text; Your new root password was successfully configured. Please ensure to change your root password again from your VPS after logging in. -error-password-nomatch-title; Passwords do not match -error-password-nomatch-text; Both entries must be identical. Please try again. -error-password-missing-title; Fields missing -error-password-missing-text; Both fields are required. Please try again. -error-password-suspended-title; Failed to configure root password -error-password-suspended-text; You can not configure the root password for this VPS, because it is suspended. If you believe this is in error, please contact support. -error-password-terminated-title; Failed to configure root password -error-password-terminated-text; You can not configure the root password for this VPS, because it has been terminated. -error-password-invalid-title; Failed to configure root password -error-password-invalid-text; Your password may be in an invalid format. Try again with a different password. -warning-password-title; Security warning -warning-password-text; Configuring your root password through this panel may expose it to the VPS provider. Only use this feature in an emergency situation, and always change your password again afterwards, from within your VPS. -password-field-password; New root password -password-field-confirm; Confirm password -button-password; Set new root password - -## Out-of-band console -title-console; Out-of-band console -console-introduction; If you cannot access your VPS for some reason, you can use the out-of-band console (also known as shell dropper) to invoke a root shell. -console-step1; To use the out-of-band console, connect through SSH using the following details: -console-step2; After logging in with the above details, you will have to enter your VPS panel login details, after which you can select a VPS to invoke a root shell on. -console-title-hostname; Hostname -console-title-port; Port -console-title-username; Username -console-title-password; Password - -## User list -title-admin-userlist; User overview -toolbar-createuser; Create user - -## User lookup -title-admin-userinfo; User lookup -error-admin-user-title; That user does not exist -error-admin-user-text; The user you tried to look up does not exist. -toolbar-edituser; Edit user details -admin-title-id; User ID -admin-title-username; Username -admin-title-email; Email address -admin-title-accesslevel; Access level -admin-title-vpses; VPS count -admin-level-enduser; End user -admin-level-reseller; Reseller -admin-level-nodeadmin; Node administrator -admin-level-masteradmin; Master administrator -header-admin-user-vpses; VPSes owned by this user - -## User editing -title-admin-edituser; Edit user -edituser-username; Username -edituser-email; Email address -edituser-access; Account type -button-admin-edituser; Apply changes - -## VPS list -title-admin-vpslist; VPS overview -list-column-hostname; Hostname -list-column-platform; Platform -list-column-node; Node -list-column-disk; Disk space -list-column-ram; RAM -list-column-template; Template -list-column-location; Physical location -list-column-nodeid; Node ID -list-status-running; Running -list-status-stopped; Stopped -list-status-suspended; Suspended -list-status-unknown; Status unknown - -## Node list -title-admin-nodelist; Node overview -toolbar-addnode; Add node - -## Node lookup -title-admin-nodeinfo; Node lookup -toolbar-createvps; Create VPS -toolbar-editnode; Edit node details -header-admin-node-vpses; VPSes on this node - -## Add node -title-admin-addnode; Add node -error-admin-nodes-add-name; You did not fill in a valid name. -error-admin-nodes-add-hostname; You did not fill in a valid hostname. -error-admin-nodes-add-location; You did not fill in a valid physical location. -error-admin-nodes-add-publickey; You did not upload a valid public key. -error-admin-nodes-add-privatekey; You did not upload a valid private key. -error-admin-nodes-add-upload; Something went wrong while processing the uploaded keys. Ensure that the keys directory is writable. -addnode-name; Name -addnode-hostname; Hostname -addnode-location; Physical location -addnode-customkeypair; Custom keypair -addnode-publickey; Public key -addnode-privatekey; Private key -button-admin-addnode; Add node - -## Create VPS -title-admin-addvps; Create VPS -error-admin-vpses-add-node; You did not select a valid node. -error-admin-vpses-add-user; You did not select a valid user. -error-admin-vpses-add-template; You did not select a valid template. -error-admin-vpses-add-disk; You did not enter a valid disk space specification. -error-admin-vpses-add-guaranteed; You did not enter a valid guaranteed RAM specification. -error-admin-vpses-add-burstable; You did not enter a valid burstable RAM specification. -error-admin-vpses-add-cpucount; You did not enter a valid amount of CPUs. -error-admin-vpses-add-traffic; You did not enter a valid traffic allocation specification. -error-admin-vpses-add-hostname; You entered an invalid hostname. -addvps-node; Node -addvps-user; User -addvps-diskspace; Disk space -addvps-guaranteed; Guaranteed RAM -addvps-burstable; Burstable RAM -addvps-cpucount; CPUs -addvps-traffic; Traffic allocation -addvps-hostname; Hostname (optional) -addvps-template; Template -button-admin-addvps; Create VPS - -## Administrative overview -title-admin-overview; Administrative overview -admin-overview-message; In the future, this page will hold a log of all most recent events. For now, it's just an empty page. diff --git a/frontend/locales/romanian.lng b/frontend/locales/romanian.lng deleted file mode 100644 index cb68bb1..0000000 --- a/frontend/locales/romanian.lng +++ /dev/null @@ -1,86 +0,0 @@ -_locale; ro_RO.UTF-8,ro_RO -_datetime_short; %d/%m/%Y %H:%M:%S -_datetime_long; %A %B %d, %Y %H:%M:%S -_date_short; %d/%m/%Y -_date_long; %A %B %d, %Y -_time; %H:%M:%S - -event-now; acum -event-future; in viitor -event-past; in trecut -event-1second-ago; cu o secunda in urma -event-seconds-ago; cu %1$d secunde in urma -event-1minutes-ago; cu un minut in urma -event-minutes-ago; cu %1$d minute in urma -event-1hour-ago; cu o ora in urma -event-hours-ago; cu %1$d ore in urma -event-1day-ago; cu o zi in urma -event-days-ago; cu %1$d zile in urma -event-1week-ago; saptamana trecuta -event-weeks-ago; cu %1$d saptamani in urma -event-1month-ago; luna trecuta -event-months-ago; cu %1$d luni in urma -event-1year-ago; anul trecut -event-years-ago; cu %1$d ani in urma - -title-overview; Prezentare generala -title-login; Autentificare la panoul de VPS -title-reinstall; Reinstalarea VPS-ului - -button-login; Autentificare -button-reinstall; Reinstalare - -notfound; VPS-ul specificat nu a putut fi gasit -footer; CVM este un panou de control pentru VPS-uri, gratuit si open source. Vrei sa contribui? - -userbox-loggedin; Esti logat ca {%?username}. -userbox-account; Setari cont -userbox-list; VPS-urile mele -userbox-logout; Iesire (logout) - -menu-overview; Sumar -menu-statistics; Statistici -menu-reinstall; Reinstalare -menu-backups; Backups -menu-console; Consola -menu-ip; Alocarea IP-urilor -menu-alerts; Alerte -menu-api; API - -login-username; Username -login-password; Parola - -overview-quota-title-disk; Spatiu pe disc -overview-quota-title-ram; RAM -overview-quota-title-traffic; Trafic -overview-title-configuration; Configuratie VPS -overview-title-status; Status -overview-title-location; Locatie server -overview-title-node; Nod gazda -overview-title-os; Sistem de operare -overview-title-ipv4; Adrese IPv4 -overview-title-ipv6; Adrese IPv6 -overview-title-guaranteed; RAM Garantat -overview-title-burstable; RAM burst -overview-title-disk; Spatiu pe disc -overview-title-traffic; Trafic -overview-title-bandwidth; Banda -overview-status-running; Pornit -overview-status-stopped; Oprit -overview-status-suspended; Suspendat -overview-status-unknown; Necunoscut -overview-button-start; Pornire VPS -overview-button-restart; Restart VPS -overview-button-stop; Oprire VPS - -list-column-hostname; Hostname -list-column-platform; Platforma -list-column-node; Gazda -list-column-disk; Spatiu pe disc -list-column-ram; RAM -list-column-template; Template -list-status-running; Activ -list-status-stopped; Oprit -list-status-suspended; Suspendat - -reinstall-warning; Inteleg ca prin reinstalarea VPS-ului, toate datele de pe VPS vor fi permanent pierdute si nu pot fi recuperate. Nu vor mai urma alte confirmari, dupa apasarea butonului Reinstalare procesul de reinstalare nu poate fi intrerupt. diff --git a/frontend/modules/admin/node/add.php b/frontend/modules/admin/node/add.php deleted file mode 100644 index 897d5e7..0000000 --- a/frontend/modules/admin/node/add.php +++ /dev/null @@ -1,101 +0,0 @@ -strings['error-admin-nodes-add-name']; - } - - if(empty($_POST['hostname']) || preg_match(REGEX_HOSTNAME, $_POST['hostname']) === 0) - { - $sErrors[] = $locale->strings['error-admin-nodes-add-hostname']; - } - - if(empty($_POST['location'])) - { - $sErrors[] = $locale->strings['error-admin-nodes-add-location']; - } - - if(isset($_POST['customkey'])) - { - $sKeyId = random_string(20); - - /* TODO: Ensure validity of the custom keys. */ - - if($_FILES["publickey"]["error"] == UPLOAD_ERR_OK) - { - $sPublicKeyName = "{$sKeyId}.public.key"; - } - else - { - $sErrors[] = $locale->strings['error-admin-nodes-add-publickey']; - } - - if($_FILES["privatekey"]["error"] == UPLOAD_ERR_OK) - { - $sPrivateKeyName = "{$sKeyId}.private.key"; - } - else - { - $sErrors[] = $locale->strings['error-admin-nodes-add-privatekey']; - } - } - else - { - $sPublicKeyName = ""; - $sPrivateKeyName = ""; - } - - if(empty($sErrors)) - { - if(isset($_POST['customkey'])) - { - $sSuccess = move_uploaded_file($_FILES['publickey']['tmp_name'], "/etc/cvm/keys/{$sPublicKeyName}") && - move_uploaded_file($_FILES['privatekey']['tmp_name'], "/etc/cvm/keys/{$sPrivateKeyName}"); - if(!$sSuccess) - { - $sErrors[] = $locale->strings['error-admin-nodes-add-upload']; - } - } - else - { - $sSuccess = true; - } - - if($sSuccess) - { - $sNode = new Node(0); - $sNode->uName = $_POST['name']; - $sNode->uHostname = $_POST['hostname']; - $sNode->uPhysicalLocation = $_POST['location']; - $sNode->uHasCustomKey = isset($_POST['customkey']); - $sNode->uPublicKey = $sPublicKeyName; - $sNode->uPrivateKey = $sPrivateKeyName; - $sNode->uUser = "cvm"; - $sNode->uPort = 22; - $sNode->InsertIntoDatabase(); - - redirect("/admin/nodes/"); - } - } -} - -$sPageContents = NewTemplater::Render("{$sTheme}/admin/node/add", $locale->strings, array( - 'errors' => $sErrors -)); diff --git a/frontend/modules/admin/node/list.php b/frontend/modules/admin/node/list.php deleted file mode 100644 index 5c68082..0000000 --- a/frontend/modules/admin/node/list.php +++ /dev/null @@ -1,34 +0,0 @@ -CachedQuery("SELECT * FROM nodes")) -{ - foreach($result->data as $row) - { - $sNode = new Node($row); - - $sNodeList[] = array( - 'id' => $sNode->sId, - 'hostname' => $sNode->sHostname, - 'location' => $sNode->sPhysicalLocation - ); - } -} - -$sPageContents = NewTemplater::Render("{$sTheme}/admin/node/list", $locale->strings, array( - 'nodes' => $sNodeList -)); diff --git a/frontend/modules/admin/node/lookup.php b/frontend/modules/admin/node/lookup.php deleted file mode 100644 index 3d07813..0000000 --- a/frontend/modules/admin/node/lookup.php +++ /dev/null @@ -1,67 +0,0 @@ -uParameters[1]); - - $sVpsList = array(); - - if($result = $database->CachedQuery("SELECT * FROM containers WHERE `NodeId` = :NodeId", array(":NodeId" => $sNode->sId))) - { - foreach($result->data as $row) - { - $sVps = new Vps($row); - - try - { - $sStatus = $sVps->sStatusText; - } - catch (SshException $e) - { - $sStatus = "unknown"; - } - - $sVpsList[] = array( - 'id' => $sVps->sId, - 'hostname' => $sVps->sHostname, - 'node' => $sVps->sNode->sName, - 'node-hostname' => $sVps->sNode->sHostname, - 'template' => $sVps->sTemplate->sName, - 'diskspace' => number_format($sVps->sDiskSpace / 1024), - 'diskspace-unit' => "GB", - 'guaranteed-ram' => $sVps->sGuaranteedRam, - 'guaranteed-ram-unit' => "MB", - 'status' => $sStatus, - 'virtualization-type' => $sVps->sVirtualizationType - ); - } - } - - $sPageContents = NewTemplater::Render("{$sTheme}/admin/node/lookup", $locale->strings, array( - 'id' => $sNode->sId, - 'hostname' => $sNode->sHostname, - 'location' => $sNode->sPhysicalLocation, - 'vpses' => $sVpsList - )); -} -catch (NotFoundException $e) -{ - $sPageContents .= NewTemplater::Render("{$sTheme}/shared/error/error", $locale->strings, array( - 'title' => $locale->strings['error-admin-node-title'], - 'message' => $locale->strings['error-admin-node-text'] - )); -} - diff --git a/frontend/modules/admin/overview/index.php b/frontend/modules/admin/overview/index.php deleted file mode 100644 index b8f6cc2..0000000 --- a/frontend/modules/admin/overview/index.php +++ /dev/null @@ -1,16 +0,0 @@ -strings, array()); diff --git a/frontend/modules/admin/template/add.php b/frontend/modules/admin/template/add.php deleted file mode 100644 index 81a7db0..0000000 --- a/frontend/modules/admin/template/add.php +++ /dev/null @@ -1,77 +0,0 @@ -uMethod == "post") -{ - $handler = new CPHPFormHandler(); - - try - { - $handler - ->RequireKey("filename") - ->RequireKey("name") - ->RequireKey("description") - ->RequireNonEmpty("filename") - ->RequireNonEmpty("name") - ->ValidateCustom("filename", "The specified template file does not exist.", function($key, $value, $args, $handler){ - return file_exists("/etc/cvm/templates/{$value}"); - }) - ->Done(); - - foreach($handler->GetGroupedValues("filename", "name", "description") as $uTemplateData) - { - $sTemplate = new Template(); - $sTemplate->uName = $uTemplateData["name"]; - $sTemplate->uTemplateName = $uTemplateData["filename"]; - $sTemplate->uDescription = $uTemplateData["description"]; - $sTemplate->uIsSupported = true; - $sTemplate->uIsOutdated = false; - $sTemplate->uIsAvailable = true; - $sTemplate->InsertIntoDatabase(); - } - - redirect("/admin/templates/"); - } - catch (FormValidationException $e) - { - var_dump($e->GetOffendingKeys()); - var_dump($e->GetErrors()); - } -} -else -{ - $sUnknownTemplates = array(); - - $handle = opendir("/etc/cvm/templates"); - while(($filename = readdir($handle)) !== false) - { - if($filename != "." && $filename != "..") - { - try - { - Template::CreateFromQuery("SELECT * FROM templates WHERE `TemplateName` = :Filename", array("Filename" => $filename), 0); - } - catch (NotFoundException $e) - { - $sUnknownTemplates[] = $filename; - } - } - } - closedir($handle); - - $sPageContents = NewTemplater::Render("{$sTheme}/admin/template/add", $locale->strings, array( - "templates" => $sUnknownTemplates - )); -} diff --git a/frontend/modules/admin/template/list.php b/frontend/modules/admin/template/list.php deleted file mode 100644 index 90ff6ba..0000000 --- a/frontend/modules/admin/template/list.php +++ /dev/null @@ -1,40 +0,0 @@ - $sTemplate->sId, - "name" => $sTemplate->sName, - "filename" => $sTemplate->sTemplateName, - "description" => $sTemplate->sDescription, - "supported" => $sTemplate->sIsSupported, - "outdated" => $sTemplate->sIsOutdated, - "available" => $sTemplate->sIsAvailable - ); - } -} -catch (NotFoundException $e) -{ - /* pass */ -} - -$sPageContents = NewTemplater::Render("{$sTheme}/admin/template/list", $locale->strings, array( - "templates" => $sTemplates -)); diff --git a/frontend/modules/admin/user/edit.php b/frontend/modules/admin/user/edit.php deleted file mode 100644 index 9cf61e0..0000000 --- a/frontend/modules/admin/user/edit.php +++ /dev/null @@ -1,78 +0,0 @@ -uParameters[1]); -} -catch (NotFoundException $e) -{ - throw new RouterException("Specified user does not exist."); -} - -$sErrors = array(); - -if($router->uMethod == "post") -{ - if(empty($_POST['username']) || preg_match("/^[a-z0-9_.-]+$/i", $_POST['username']) === 0) - { - $sErrors[] = "You did not enter a valid username."; - } - - if(empty($_POST['email']) || filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) === false) - { - $sErrors[] = "You did not enter a valid e-mail address."; - } - - if(empty($_POST['access']) || preg_match("/^[0-9]+$/", $_POST['access']) === 0) - { - $sErrors[] = "You did not specify a valid user type."; - } - else - { - if($sUser->sAccessLevel == 30 && $_POST['access'] < 30) - { - /* This user is a master admin, check if any other master admins exist before lowering - * the permissions of this one, to prevent lock-outs. */ - - try - { - User::CreateFromQuery("SELECT * FROM users WHERE `AccessLevel` = 30 AND `Id` != :Id", array(":Id" => $sUser->sId), 0); - } - catch (NotFoundException $e) - { - $sErrors[] = "You can't remove your master administrator permissions if no other master administrators exist!"; - } - } - } - - if(empty($sErrors)) - { - $sUser->uUsername = $_POST['username']; - $sUser->uEmailAddress = $_POST['email']; - $sUser->uAccessLevel = $_POST['access']; - $sUser->InsertIntoDatabase(); - redirect("/admin/user/{$sUser->sId}/"); - } -} - -$sPageContents = NewTemplater::Render("{$sTheme}/admin/user/edit", $locale->strings, array( - "errors" => $sErrors, - "id" => $router->uParameters[1] -), array( - "username" => $sUser->sUsername, - "email" => $sUser->sEmailAddress, - "access" => $sUser->sAccessLevel -)); diff --git a/frontend/modules/admin/user/list.php b/frontend/modules/admin/user/list.php deleted file mode 100644 index 64cdb0c..0000000 --- a/frontend/modules/admin/user/list.php +++ /dev/null @@ -1,33 +0,0 @@ -CachedQuery("SELECT * FROM users ORDER BY `AccessLevel` DESC"); - -$sUserList = array(); - -foreach($result->data as $row) -{ - $sUserEntry = new User($row); - $sUserList[] = array( - 'id' => $sUserEntry->sId, - 'username' => $sUserEntry->sUsername, - 'email' => $sUserEntry->sEmailAddress, - 'accesslevel' => $sUserEntry->sAccessLevel - ); -} - -$sPageContents = NewTemplater::Render("{$sTheme}/admin/user/list", $locale->strings, array( - 'users' => $sUserList -)); diff --git a/frontend/modules/admin/user/lookup.php b/frontend/modules/admin/user/lookup.php deleted file mode 100644 index bc93165..0000000 --- a/frontend/modules/admin/user/lookup.php +++ /dev/null @@ -1,71 +0,0 @@ -uParameters[1]); - - $sVpsList = array(); - - if($result = $database->CachedQuery("SELECT * FROM containers WHERE `UserId` = :UserId", array(":UserId" => $sUserEntry->sId))) - { - foreach($result->data as $row) - { - $sVps = new Vps($row); - - try - { - $sStatus = $sVps->sStatusText; - } - catch (SshException $e) - { - $sStatus = "unknown"; - } - - $sVpsList[] = array( - 'id' => $sVps->sId, - 'hostname' => $sVps->sHostname, - 'node' => $sVps->sNode->sName, - 'node-hostname' => $sVps->sNode->sHostname, - 'template' => $sVps->sTemplate->sName, - 'diskspace' => number_format($sVps->sDiskSpace / 1024), - 'diskspace-unit' => "GB", - 'guaranteed-ram' => $sVps->sGuaranteedRam, - 'guaranteed-ram-unit' => "MB", - 'status' => $sStatus, - 'virtualization-type' => $sVps->sVirtualizationType - ); - } - } - - $sPageContents = NewTemplater::Render("{$sTheme}/admin/user/lookup", $locale->strings, array( - 'id' => $sUserEntry->sId, - 'username' => $sUserEntry->sUsername, - 'email' => $sUserEntry->sEmailAddress, - 'accesslevel' => $sUserEntry->sAccessLevel, - 'vpscount' => $sUserEntry->sVpsCount, - 'vpses' => $sVpsList - )); -} -catch (NotFoundException $e) -{ - $sPageContents .= NewTemplater::Render("{$sTheme}/shared/error/error", $locale->strings, array( - 'title' => $locale->strings['error-admin-user-title'], - 'message' => $locale->strings['error-admin-user-text'] - )); -} - diff --git a/frontend/modules/admin/vps/create.php b/frontend/modules/admin/vps/create.php deleted file mode 100644 index 37b1e53..0000000 --- a/frontend/modules/admin/vps/create.php +++ /dev/null @@ -1,213 +0,0 @@ - $locale->strings['error-admin-vpses-add-node'], - 'user' => $locale->strings['error-admin-vpses-add-user'], - 'diskspace' => $locale->strings['error-admin-vpses-add-disk'], - 'guaranteed' => $locale->strings['error-admin-vpses-add-guaranteed'], - 'burstable' => $locale->strings['error-admin-vpses-add-burstable'], - 'cpucount' => $locale->strings['error-admin-vpses-add-cpucount'], - 'traffic' => $locale->strings['error-admin-vpses-add-traffic'], - 'template' => $locale->strings['error-admin-vpses-add-template'] - ), $sErrors); - - try - { - $disk_space = parse_size($_POST['diskspace']); - } - catch(ParsingException $e) - { - array_add($sErrors, $locale->strings['error-admin-vpses-add-disk']); - } - - try - { - $guaranteed_ram = parse_size($_POST['guaranteed']); - } - catch(ParsingException $e) - { - array_add($sErrors, $locale->strings['error-admin-vpses-add-guaranteed']); - } - - try - { - $burstable_ram = parse_size($_POST['burstable']); - } - catch(ParsingException $e) - { - array_add($sErrors, $locale->strings['error-admin-vpses-add-burstable']); - } - - try - { - $traffic = parse_size($_POST['traffic']); - } - catch(ParsingException $e) - { - array_add($sErrors, $locale->strings['error-admin-vpses-add-traffic']); - } - - if(is_numeric($_POST['cpucount'])) - { - $cpu_count = (int) $_POST['cpucount']; - } - else - { - array_add($sErrors, $locale->strings['error-admin-vpses-add-cpucount']); - } - - try - { - $node = new Node($_POST['node']); - } - catch(NotFoundException $e) - { - array_add($sErrors, $locale->strings['error-admin-vpses-add-node']); - } - - try - { - $user = new User($_POST['user']); - } - catch(NotFoundException $e) - { - array_add($sErrors, $locale->strings['error-admin-vpses-add-user']); - } - - try - { - $template = new Template($_POST['template']); - } - catch(NotFoundException $e) - { - array_add($sErrors, $locale->strings['error-admin-vpses-add-template']); - } - - if(!empty($_POST['hostname'])) - { - if(validate_hostname($_POST['hostname'])) - { - $hostname = $_POST['hostname']; - } - else - { - array_add($sErrors, $locale->strings['error-admin-vpses-add-hostname']); - } - } - else - { - $hostname = random_string(12); - } - - if(empty($sErrors)) - { - $sVps = new Vps(0); - $sVps->uHostname = $hostname; - $sVps->uInternalId = first_unused_ctid(); - $sVps->uNodeId = $node->sId; - $sVps->uTemplateId = $template->sId; - $sVps->uUserId = $user->sId; - $sVps->uVirtualizationType = CVM_VIRTUALIZATION_OPENVZ; - $sVps->uGuaranteedRam = ($guaranteed_ram / 1024 / 1024); /* MB */ - $sVps->uBurstableRam = ($burstable_ram / 1024 / 1024); /* MB */ - $sVps->uDiskSpace = ($disk_space / 1024 / 1024); /* MB */ - $sVps->uCpuCount = $cpu_count; - $sVps->uStatus = CVM_STATUS_BLANK; - $sVps->uIncomingTrafficLimit = $traffic; - $sVps->uOutgoingTrafficLimit = $traffic; - $sVps->uTotalTrafficLimit = $traffic; - $sVps->InsertIntoDatabase(); - $sVps->Deploy(); - - /* TODO: Flash message. */ - - redirect("/admin/node/{$node->sId}/"); - } -} - -/* This is a bit hacky - there's no better method for this yet. If the node or user has to be - * pre-determined (according to the requested URL), it is stored in the relevant POST variable - * so that the templater will think it was an already selected option, thereby causing the - * desired behaviour: pre-selecting the particular option. */ - -if(!empty($router->uVariables['prefilled_node'])) -{ - $_POST['node'] = $router->uParameters[1]; -} - -if(!empty($router->uVariables['prefilled_user'])) -{ - $_POST['user'] = $router->uParameters[1]; -} - -$result = $database->CachedQuery("SELECT * FROM nodes"); - -$sNodes = array(); - -foreach($result->data as $row) -{ - $sNode = new Node($row); - - $sNodes[] = array( - 'id' => $sNode->sId, - 'name' => $sNode->sName, - 'location' => $sNode->sPhysicalLocation - ); -} - -$sTemplates = array(); - -if($result = $database->CachedQuery("SELECT * FROM templates WHERE `Available` = 1")) -{ - foreach($result->data as $row) - { - $sTemplate = new Template($row); - - $sTemplates[] = array( - 'id' => $sTemplate->sId, - 'name' => $sTemplate->sName - ); - } -} -else -{ - /* TODO: Show an error when no templates are available. */ -} - -$result = $database->CachedQuery("SELECT * FROM users WHERE `AccessLevel` > 0"); - -$sUsers = array(); - -foreach($result->data as $row) -{ - $sUserOption = new User($row); - - $sUsers[] = array( - 'id' => $sUserOption->sId, - 'username' => $sUserOption->sUsername - ); -} - -$sPageContents = NewTemplater::Render("{$sTheme}/admin/vps/add", $locale->strings, array( - 'errors' => $sErrors, - 'nodes' => $sNodes, - 'users' => $sUsers, - 'templates' => $sTemplates -)); diff --git a/frontend/modules/admin/vps/list.php b/frontend/modules/admin/vps/list.php deleted file mode 100644 index e2ce9d6..0000000 --- a/frontend/modules/admin/vps/list.php +++ /dev/null @@ -1,51 +0,0 @@ -CachedQuery("SELECT * FROM containers")) -{ - foreach($result->data as $row) - { - $sVps = new Vps($row); - - try - { - $sStatus = $sVps->sStatusText; - } - catch (SshException $e) - { - $sStatus = "unknown"; - } - - $sVpsList[] = array( - 'id' => $sVps->sId, - 'hostname' => $sVps->sHostname, - 'node' => $sVps->sNode->sName, - 'node-hostname' => $sVps->sNode->sHostname, - 'template' => $sVps->sTemplate->sName, - 'diskspace' => number_format($sVps->sDiskSpace / 1024), - 'diskspace-unit' => "GB", - 'guaranteed-ram' => $sVps->sGuaranteedRam, - 'guaranteed-ram-unit' => "MB", - 'status' => $sStatus, - 'virtualization-type' => $sVps->sVirtualizationType - ); - } -} - -$sPageContents = NewTemplater::Render("{$sTheme}/admin/vps/list", $locale->strings, array( - 'vpses' => $sVpsList -)); diff --git a/frontend/modules/admin/vps/suspend.php b/frontend/modules/admin/vps/suspend.php deleted file mode 100644 index 8d8ba5d..0000000 --- a/frontend/modules/admin/vps/suspend.php +++ /dev/null @@ -1,75 +0,0 @@ -RequireAccessLevel(20); - - $sVps = new Vps($router->uParameters[1]); - - if(isset($_POST['submit'])) - { - if($_POST['action'] == "suspend") - { - $sVps->Suspend(); - - $sMainContents .= NewTemplater::Render("{$sTheme}/shared/error/success", $locale->strings, array( - 'title' => $locale->strings['error-suspend-success-title'], - 'message' => $locale->strings['error-suspend-success-text'] - )); - } - elseif($_POST['action'] == "unsuspend") - { - $sVps->Unsuspend(); - - $sMainContents .= NewTemplater::Render("{$sTheme}/shared/error/success", $locale->strings, array( - 'title' => $locale->strings['error-unsuspend-success-title'], - 'message' => $locale->strings['error-unsuspend-success-text'] - )); - } - - $sVps->RefreshData(); - - /* TODO: Flash message and redirect to VPS lookup page. */ - } - - $sSuspended = ($sVps->sStatus == CVM_STATUS_SUSPENDED) ? true : false; - - $sPageContents = NewTemplater::Render("{$sTheme}/admin/vps/suspend", $locale->strings, array( - 'id' => $sVps->sId, - 'suspended' => $sSuspended - )); -} -catch (NotFoundException $e) -{ - $sMainContents .= NewTemplater::Render("{$sTheme}/shared/error/error", $locale->strings, array( - 'title' => $locale->strings['error-notfound-title'], - 'message' => $locale->strings['error-notfound-text'] - )); -} -catch (VpsSuspendException $e) -{ - $sMainContents .= NewTemplater::Render("{$sTheme}/shared/error/error", $locale->strings, array( - 'title' => $locale->strings['error-suspend-error-title'], - 'message' => $locale->strings['error-suspend-error-text'] - )); -} -catch (VpsUnsuspendException $e) -{ - $sMainContents .= NewTemplater::Render("{$sTheme}/shared/error/error", $locale->strings, array( - 'title' => $locale->strings['error-unsuspend-error-title'], - 'message' => $locale->strings['error-unsuspend-error-text'] - )); -} diff --git a/frontend/modules/admin/vps/terminate.php b/frontend/modules/admin/vps/terminate.php deleted file mode 100644 index 5548850..0000000 --- a/frontend/modules/admin/vps/terminate.php +++ /dev/null @@ -1,77 +0,0 @@ -RequireAccessLevel(30); - - $sVps = new Vps($router->uParameters[1]); - - if(isset($_POST['submit'])) - { - if($_POST['action'] == "terminate") - { - $sVps->Terminate(); - - $sMainContents .= NewTemplater::Render("{$sTheme}/shared/error/success", $locale->strings, array( - 'title' => $locale->strings['error-terminate-success-title'], - 'message' => $locale->strings['error-terminate-success-text'] - )); - } - elseif($_POST['action'] == "unterminate") - { - $sVps->Unterminate(); - - $sMainContents .= NewTemplater::Render("{$sTheme}/shared/error/success", $locale->strings, array( - 'title' => $locale->strings['error-unterminate-success-title'], - 'message' => $locale->strings['error-unterminate-success-text'] - )); - } - - $sVps->RefreshData(); - - /* TODO: Flash message and redirect to VPS lookup page. */ - } - - $sTerminated = ($sVps->sStatus == CVM_STATUS_TERMINATED) ? true : false; - - $sPageContents = NewTemplater::Render("{$sTheme}/admin/vps/terminate", $locale->strings, array( - 'id' => $sVps->sId, - 'terminated' => $sTerminated, - 'can-unterminate' => !$sVps->IsTerminated - )); -} -catch (NotFoundException $e) -{ - $sMainContents .= NewTemplater::Render("{$sTheme}/shared/error/error", $locale->strings, array( - 'title' => $locale->strings['error-notfound-title'], - 'message' => $locale->strings['error-notfound-text'] - )); -} -catch (VpsTerminateException $e) -{ - $sMainContents .= NewTemplater::Render("{$sTheme}/shared/error/error", $locale->strings, array( - 'title' => $locale->strings['error-terminate-error-title'], - 'message' => $locale->strings['error-terminate-error-text'] - )); -} -catch (VpsUnterminateException $e) -{ - $sMainContents .= NewTemplater::Render("{$sTheme}/shared/error/error", $locale->strings, array( - 'title' => $locale->strings['error-unterminate-error-title'], - 'message' => $locale->strings['error-unterminate-error-text'] - )); -} - diff --git a/frontend/modules/api/client/vps/list.php b/frontend/modules/api/client/vps/list.php deleted file mode 100644 index 511feeb..0000000 --- a/frontend/modules/api/client/vps/list.php +++ /dev/null @@ -1,66 +0,0 @@ -CachedQuery("SELECT * FROM containers WHERE `UserId` = :UserId", array(':UserId' => $sApiKey->sUser->sId))) -{ - $sVpses = array(); - - foreach($result->data as $row) - { - $sVps = new Vps($row); - - $sVpsData = array( - 'id' => $sVps->sId, - 'virtualization_type' => $sVps->sVirtualizationType, - 'hostname' => $sVps->sHostname, - 'guaranteed_ram' => $sVps->sGuaranteedRam, - 'burstable_ram' => $sVps->sBurstableRam, - 'disk_space' => $sVps->sDiskSpace, - 'cpu_count' => $sVps->sCpuCount, - 'node' => $sVps->sNodeId - ); - - if($sVps->sTotalTrafficLimit == 0) - { - /* Split traffic accounting */ - $sVpsData['traffic_in_limit'] = $sVps->sIncomingTrafficLimit; - $sVpsData['traffic_out_limit'] = $sVps->sOutgoingTrafficLimit; - $sVpsData['traffic_in_used'] = $sVps->sIncomingTrafficUsed; - $sVpsData['traffic_out_used'] = $sVps->sOutgoingTrafficUsed; - } - else - { - /* Combined traffic accounting */ - $sVpsData['traffic_limit'] = $sVps->sTotalTrafficLimit; - $sVpsData['traffic_used'] = $sVps->sIncomingTrafficUsed + $sVps->sOutgoingTrafficUsed; - } - - $sVpses[] = $sVpsData; - } - - $sResponse = array( - 'response' => array( - 'vpses' => $sVpses - ) - ); -} -else -{ - $sResponse = array( - 'response' => array( - 'vpses' => array() - ) - ); -} diff --git a/frontend/modules/client/vps/action/restart.php b/frontend/modules/client/vps/action/restart.php deleted file mode 100644 index dbde64f..0000000 --- a/frontend/modules/client/vps/action/restart.php +++ /dev/null @@ -1,55 +0,0 @@ -Stop(); - } - catch(VpsStopException $e) - { - // we can make this silently fail, as the only important thing is that it starts again - } - - $sVps->Start(); - $sVps->sCurrentStatus = CVM_STATUS_STARTED; - - $sError .= NewTemplater::Render("{$sTheme}/shared/error/success", $locale->strings, array( - 'title' => $locale->strings['error-stop-restart-success'], - 'message' => $locale->strings['error-stop-restart-success'] - )); -} -catch (VpsSuspendedException $e) -{ - $sError .= NewTemplater::Render("{$sTheme}/shared/error/error", $locale->strings, array( - 'title' => $locale->strings['error-restart-suspended-title'], - 'message' => $locale->strings['error-restart-suspended-text'] - )); -} -catch (VpsTerminatedException $e) -{ - $sError .= NewTemplater::Render("{$sTheme}/shared/error/error", $locale->strings, array( - 'title' => $locale->strings['error-restart-terminated-title'], - 'message' => $locale->strings['error-restart-terminated-text'] - )); -} -catch(VpsStartException $e) -{ - $sError .= NewTemplater::Render("{$sTheme}/shared/error/error", $locale->strings, array( - 'title' => $locale->strings['error-restart-start-title'], - 'message' => $locale->strings['error-restart-start-text'] - )); -} diff --git a/frontend/modules/client/vps/action/start.php b/frontend/modules/client/vps/action/start.php deleted file mode 100644 index 732db7e..0000000 --- a/frontend/modules/client/vps/action/start.php +++ /dev/null @@ -1,56 +0,0 @@ -sCurrentStatus != CVM_STATUS_STARTED) -{ - try - { - $sVps->Start(); - $sVps->sCurrentStatus = CVM_STATUS_STARTED; - - $sError .= NewTemplater::Render("{$sTheme}/shared/error/success", $locale->strings, array( - 'title' => $locale->strings['error-start-success-title'], - 'message' => $locale->strings['error-start-success-text'] - )); - } - catch (VpsSuspendedException $e) - { - $sError .= NewTemplater::Render("{$sTheme}/shared/error/error", $locale->strings, array( - 'title' => $locale->strings['error-start-suspended-title'], - 'message' => $locale->strings['error-start-suspended-text'] - )); - } - catch (VpsTerminatedException $e) - { - $sError .= NewTemplater::Render("{$sTheme}/shared/error/error", $locale->strings, array( - 'title' => $locale->strings['error-start-terminated-title'], - 'message' => $locale->strings['error-start-terminated-text'] - )); - } - catch (VpsStartException $e) - { - $sError .= NewTemplater::Render("{$sTheme}/shared/error/error", $locale->strings, array( - 'title' => $locale->strings['error-start-failed-title'], - 'message' => $locale->strings['error-start-failed-text'] - )); - } -} -else -{ - $sError .= NewTemplater::Render("{$sTheme}/shared/error/error", $locale->strings, array( - 'title' => $locale->strings['error-start-running-title'], - 'message' => $locale->strings['error-start-running-text'] - )); -} diff --git a/frontend/modules/client/vps/action/stop.php b/frontend/modules/client/vps/action/stop.php deleted file mode 100644 index bc7907a..0000000 --- a/frontend/modules/client/vps/action/stop.php +++ /dev/null @@ -1,56 +0,0 @@ -sCurrentStatus != CVM_STATUS_STOPPED) -{ - try - { - $sVps->Stop(); - $sVps->sCurrentStatus = CVM_STATUS_STOPPED; - - $sError .= NewTemplater::Render("{$sTheme}/shared/error/success", $locale->strings, array( - 'title' => $locale->strings['error-stop-success-title'], - 'message' => $locale->strings['error-stop-success-text'] - )); - } - catch (VpsSuspendedException $e) - { - $sError .= NewTemplater::Render("{$sTheme}/shared/error/error", $locale->strings, array( - 'title' => $locale->strings['error-stop-suspended-title'], - 'message' => $locale->strings['error-stop-suspended-text'] - )); - } - catch (VpsTerminatedException $e) - { - $sError .= NewTemplater::Render("{$sTheme}/shared/error/error", $locale->strings, array( - 'title' => $locale->strings['error-stop-terminated-title'], - 'message' => $locale->strings['error-stop-terminated-text'] - )); - } - catch(VpsStopException $e) - { - $sError .= NewTemplater::Render("{$sTheme}/shared/error/error", $locale->strings, array( - 'title' => $locale->strings['error-stop-failed-title'], - 'message' => $locale->strings['error-stop-failed-text'] - )); - } -} -else -{ - $sError .= NewTemplater::Render("{$sTheme}/shared/error/error", $locale->strings, array( - 'title' => $locale->strings['error-stop-stopped-title'], - 'message' => $locale->strings['error-stop-stopped-text'] - )); -} diff --git a/frontend/modules/client/vps/console.php b/frontend/modules/client/vps/console.php deleted file mode 100644 index bb10b77..0000000 --- a/frontend/modules/client/vps/console.php +++ /dev/null @@ -1,21 +0,0 @@ -strings, array( - 'host' => htmlspecialchars($_SERVER['SERVER_NAME']), - 'port' => 22, - 'username' => "vzshell", - 'password' => "vzshell" -)); diff --git a/frontend/modules/client/vps/list.php b/frontend/modules/client/vps/list.php deleted file mode 100644 index ae97d75..0000000 --- a/frontend/modules/client/vps/list.php +++ /dev/null @@ -1,58 +0,0 @@ -CachedQuery("SELECT * FROM containers WHERE `UserId` = :UserId", array(":UserId" => $sUser->sId))) - { - foreach($result->data as $row) - { - $sVps = new Vps($row); - - try - { - $sStatus = $sVps->sStatusText; - } - catch (SshException $e) - { - $sStatus = "unknown"; - } - - $sVpsList[] = array( - 'id' => $sVps->sId, - 'hostname' => $sVps->sHostname, - 'node' => $sVps->sNode->sName, - 'node-hostname' => $sVps->sNode->sHostname, - 'template' => $sVps->sTemplate->sName, - 'diskspace' => number_format($sVps->sDiskSpace / 1024), - 'diskspace-unit' => "GB", - 'guaranteed-ram' => $sVps->sGuaranteedRam, - 'guaranteed-ram-unit' => "MB", - 'status' => $sStatus, - 'virtualization-type' => $sVps->sVirtualizationType - ); - } - } - - $sMainContents = NewTemplater::Render("{$sTheme}/client/vps/list", $locale->strings, array( - 'vpses' => $sVpsList - )); -} -else -{ - redirect("/login"); -} diff --git a/frontend/modules/client/vps/lookup.php b/frontend/modules/client/vps/lookup.php deleted file mode 100644 index ad7248d..0000000 --- a/frontend/modules/client/vps/lookup.php +++ /dev/null @@ -1,121 +0,0 @@ -uVariables['action'])) -{ - if($router->uVariables['action'] == "start") - { - require("modules/client/vps/action/start.php"); - } - elseif($router->uVariables['action'] == "stop") - { - require("modules/client/vps/action/stop.php"); - } - elseif($router->uVariables['action'] == "restart") - { - require("modules/client/vps/action/restart.php"); - } -} - -if($sVps->sTotalTrafficLimit != 0) -{ - $sTrafficLimit = $sVps->sTotalTrafficLimit; - $sTrafficSplit = false; -} -else -{ - $sTrafficLimit = $sVps->sIncomingTrafficLimit + $sVps->sOutgoingTrafficLimit; - $sTrafficSplit = true; -} - -$sVariables = array( - 'id' => $sVps->sId, - 'server-location' => $sVps->sNode->sPhysicalLocation, - 'operating-system' => $sVps->sTemplate->sName, - 'guaranteed-ram' => "{$sVps->sGuaranteedRam}MB", - 'burstable-ram' => "{$sVps->sBurstableRam}MB", - 'disk-space' => "{$sVps->sDiskSpace}MB", - 'total-traffic-limit' => format_size($sVps->sTotalTrafficLimit, 1024, true, 0) . "B", - 'incoming-traffic-limit'=> format_size($sVps->sIncomingTrafficLimit, 1024, true, 0) . "B", - 'outgoing-traffic-limit'=> format_size($sVps->sOutgoingTrafficLimit, 1024, true, 0) . "B", - 'bandwidth-limit' => "100mbit", - 'status' => $sVps->sStatusText, - 'traffic-split' => $sTrafficSplit -); - -if($sTrafficSplit == true) -{ - $sVariables = array_merge($sVariables, array( - 'inbound-used' => number_format(($sVps->sIncomingTrafficUsed) / 1024 / 1024 / 1024, 2), - 'inbound-total' => number_format($sIncomingTrafficLimit / 1024 / 1024 / 1024, 0), - 'inbound-percentage' => number_format(($sVps->sIncomingTrafficUsed) / $sTrafficLimit, 2), - 'inbound-unit' => "GB", - 'outbound-used' => number_format(($sVps->sOutgoingTrafficUsed) / 1024 / 1024 / 1024, 2), - 'outbound-total' => number_format($sOutgoingTrafficLimit / 1024 / 1024 / 1024, 0), - 'outbound-percentage' => number_format(($sVps->sOutgoingTrafficUsed) / $sTrafficLimit, 2), - 'outbound-unit' => "GB" - )); -} -else -{ - $sVariables = array_merge($sVariables, array( - 'traffic-used' => number_format(($sVps->sIncomingTrafficUsed + $sVps->sOutgoingTrafficUsed) / 1024 / 1024 / 1024, 2), - 'traffic-total' => number_format($sTrafficLimit / 1024 / 1024 / 1024, 0), - 'traffic-percentage' => number_format(($sVps->sIncomingTrafficUsed + $sVps->sOutgoingTrafficUsed) / $sTrafficLimit, 2), - 'traffic-unit' => "GB" - )); -} - -try -{ - $sVariables = array_merge($sVariables, array( - 'disk-used' => number_format($sVps->sDiskUsed / 1024, 2), - 'disk-total' => number_format($sVps->sDiskTotal / 1024, 2), - 'disk-percentage' => ($sVps->sDiskTotal == 0) ? 0 : number_format(($sVps->sDiskUsed / $sVps->sDiskTotal) * 100, 2), - 'disk-unit' => "GB" - )); -} -catch (SshExitException $e) -{ - $sVariables = array_merge($sVariables, array( - 'disk-used' => 0, - 'disk-total' => 0, - 'disk-percentage' => 0, - 'disk-unit' => "GB" - )); -} - -try -{ - $sVariables = array_merge($sVariables, array( - 'ram-used' => $sVps->sRamUsed, - 'ram-total' => $sVps->sRamTotal, - 'ram-percentage' => ($sVps->sRamTotal == 0) ? 0 : number_format(($sVps->sRamUsed / $sVps->sRamTotal) * 100, 2), - 'ram-unit' => "MB" - )); -} -catch (SshExitException $e) -{ - $sVariables = array_merge($sVariables, array( - 'ram-used' => 0, - 'ram-total' => 0, - 'ram-percentage' => 0, - 'ram-unit' => "MB" - )); -} - - -$sPageContents = NewTemplater::Render("{$sTheme}/client/vps/lookup", $locale->strings, $sVariables); - diff --git a/frontend/modules/client/vps/password.php b/frontend/modules/client/vps/password.php deleted file mode 100644 index 6df41b5..0000000 --- a/frontend/modules/client/vps/password.php +++ /dev/null @@ -1,82 +0,0 @@ -SetRootPassword($_POST['password']); - - $sPageContents .= NewTemplater::Render("{$sTheme}/shared/error/success", $locale->strings, array( - 'title' => $locale->strings['error-password-success-title'], - 'message' => $locale->strings['error-password-success-text'] - )); - } - else - { - $sPageContents .= NewTemplater::Render("{$sTheme}/shared/error/error", $locale->strings, array( - 'title' => $locale->strings['error-password-nomatch-title'], - 'message' => $locale->strings['error-password-nomatch-text'] - )); - } - } - else - { - $sPageContents .= NewTemplater::Render("{$sTheme}/shared/error/error", $locale->strings, array( - 'title' => $locale->strings['error-password-missing-title'], - 'message' => $locale->strings['error-password-missing-text'] - )); - } - } - catch (VpsSuspendedException $e) - { - $sPageContents .= NewTemplater::Render("{$sTheme}/shared/error/error", $locale->strings, array( - 'title' => $locale->strings['error-password-suspended-title'], - 'message' => $locale->strings['error-password-suspended-text'] - )); - } - catch (VpsTerminatedException $e) - { - $sPageContents .= NewTemplater::Render("{$sTheme}/shared/error/error", $locale->strings, array( - 'title' => $locale->strings['error-password-terminated-title'], - 'message' => $locale->strings['error-password-terminated-text'] - )); - } - catch (SshExitException $e) - { - $sPageContents .= NewTemplater::Render("{$sTheme}/shared/error/error", $locale->strings, array( - 'title' => $locale->strings['error-password-invalid-title'], - 'message' => $locale->strings['error-password-invalid-text'] - )); - } -} - -if($display_form === true) -{ - $sPageContents .= NewTemplater::Render("{$sTheme}/shared/error/warning", $locale->strings, array( - 'title' => $locale->strings['warning-password-title'], - 'message' => $locale->strings['warning-password-text'] - )); - - $sPageContents .= NewTemplater::Render("{$sTheme}/client/vps/password", $locale->strings, array( - 'id' => $sVps->sId - )); -} diff --git a/frontend/modules/client/vps/reinstall.php b/frontend/modules/client/vps/reinstall.php deleted file mode 100644 index 63fb7c6..0000000 --- a/frontend/modules/client/vps/reinstall.php +++ /dev/null @@ -1,119 +0,0 @@ -CheckAllowed(); - $sTemplate = new Template($_POST['template']); - $sTemplate->CheckAvailable(); - - if(isset($_POST['confirm'])) - { - $sVps->uTemplateId = $sTemplate->sId; - $sVps->InsertIntoDatabase(); - $sVps->Reinstall(); - $sVps->Start(); - - $sPageContents .= NewTemplater::Render("{$sTheme}/shared/error/success", $locale->strings, array( - 'title' => $locale->strings['error-reinstall-success-title'], - 'message' => $locale->strings['error-reinstall-success-text'] - )); - } - else - { - $sPageContents .= NewTemplater::Render("{$sTheme}/shared/error/error", $locale->strings, array( - 'title' => $locale->strings['error-reinstall-confirm-title'], - 'message' => $locale->strings['error-reinstall-confirm-text'] - )); - } - } - catch (NotFoundException $e) - { - $sPageContents .= NewTemplater::Render("{$sTheme}/shared/error/error", $locale->strings, array( - 'title' => $locale->strings['error-reinstall-notfound-title'], - 'message' => $locale->strings['error-reinstall-notfound-text'] - )); - } - catch (TemplateUnavailableException $e) - { - $sPageContents .= NewTemplater::Render("{$sTheme}/shared/error/error", $locale->strings, array( - 'title' => $locale->strings['error-reinstall-unavailable-title'], - 'message' => $locale->strings['error-reinstall-unavailable-text'] - )); - } - catch (VpsReinstallException $e) - { - $sPageContents .= NewTemplater::Render("{$sTheme}/shared/error/error", $locale->strings, array( - 'title' => $locale->strings['error-reinstall-failed-title'], - 'message' => $locale->strings['error-reinstall-failed-text'] - )); - } - catch (VpsStartException $e) - { - $sPageContents .= NewTemplater::Render("{$sTheme}/shared/error/error", $locale->strings, array( - 'title' => $locale->strings['error-reinstall-start-title'], - 'message' => $locale->strings['error-reinstall-start-text'] - )); - } - catch (VpsSuspendedException $e) - { - $sPageContents .= NewTemplater::Render("{$sTheme}/shared/error/error", $locale->strings, array( - 'title' => $locale->strings['error-reinstall-suspended-title'], - 'message' => $locale->strings['error-reinstall-suspended-text'] - )); - } - catch (VpsTerminatedException $e) - { - $sPageContents .= NewTemplater::Render("{$sTheme}/shared/error/error", $locale->strings, array( - 'title' => $locale->strings['error-reinstall-terminated-title'], - 'message' => $locale->strings['error-reinstall-terminated-text'] - )); - } - } - else - { - $sPageContents .= NewTemplater::Render("{$sTheme}/shared/error/error", $locale->strings, array( - 'title' => $locale->strings['error-reinstall-notselected-title'], - 'message' => $locale->strings['error-reinstall-notselected-text'] - )); - } -} - -if($display_form === true) -{ - $result = $database->CachedQuery("SELECT * FROM templates WHERE `Available` = '1'"); - - $sTemplateList = array(); - - foreach($result->data as $row) - { - $sTemplate = new Template($row); - $sTemplateList[] = array( - 'id' => $sTemplate->sId, - 'name' => $sTemplate->sName, - 'description' => $sTemplate->sDescription - ); - } - - $sPageContents .= NewTemplater::Render("{$sTheme}/client/vps/reinstall", $locale->strings, array( - 'templates' => $sTemplateList - )); -} diff --git a/frontend/modules/error/access.php b/frontend/modules/error/access.php deleted file mode 100644 index 020fedf..0000000 --- a/frontend/modules/error/access.php +++ /dev/null @@ -1,16 +0,0 @@ -CachedQuery("SELECT * FROM users WHERE `Username` = :Username", array(":Username" => $_POST['username']))) - { - $sLoginUser = new User($result); - - if($sLoginUser->VerifyPassword($_POST['password'])) - { - $_SESSION['userid'] = $sLoginUser->sId; - header("Location: /"); - die(); - } - else - { - $sError .= NewTemplater::Render("{$sTheme}/shared/error/error", $locale->strings, array( - 'title' => $locale->strings['error-login-invalid-title'], - 'message' => $locale->strings['error-login-invalid-text'] - )); - } - } - else - { - $sError .= NewTemplater::Render("{$sTheme}/shared/error/error", $locale->strings, array( - 'title' => $locale->strings['error-login-invalid-title'], - 'message' => $locale->strings['error-login-invalid-text'] - )); - } -} - -$sMainContents = NewTemplater::Render("{$sTheme}/shared/login", $locale->strings, array( - 'error' => $sError, - 'field-username' => $sFieldUsername -)); diff --git a/frontend/modules/shared/logout.php b/frontend/modules/shared/logout.php deleted file mode 100644 index b5d4e6e..0000000 --- a/frontend/modules/shared/logout.php +++ /dev/null @@ -1,33 +0,0 @@ -strings, array( - 'title' => $locale->strings['error-logout-success-title'], - 'message' => $locale->strings['error-logout-success-text'] - )); -} -else -{ - $sError .= NewTemplater::Render("{$sTheme}/shared/error/error", $locale->strings, array( - 'title' => $locale->strings['error-logout-notloggedin-title'], - 'message' => $locale->strings['error-logout-notloggedin-text'] - )); -} diff --git a/frontend/modules/test.php b/frontend/modules/test.php deleted file mode 100644 index 9040635..0000000 --- a/frontend/modules/test.php +++ /dev/null @@ -1,83 +0,0 @@ -sStart != $desired_start) - { - echo("IpRange unit test failed due to sStart mismatch. Expected: {$desired_start}    Actual: {$obj->sStart}
"); - } - - if($obj->sEnd != $desired_end) - { - echo("IpRange unit test failed due to sEnd mismatch. Expected: {$desired_end}    Actual: {$obj->sEnd}
"); - } - - if($obj->sSize != $desired_size) - { - echo("IpRange unit test failed due to sSize mismatch. Expected: {$desired_size}    Actual: {$obj->sSize}
"); - } - - if($obj->sType != $desired_type) - { - echo("IpRange unit test failed due to sType mismatch. Expected: {$desired_type}    Actual: {$obj->sType}
"); - } - - } - catch (Exception $e) - { - echo("IpRange unit test failed due to exception! Input: {$input}    Error message: " . $e->getMessage() . "
"); - } -} - -test_iprange("fe80:0000:0000:0000:e0d3:f0ff:fe28:5f47/64", "fe80:0:0:0:0:0:0:0", "fe80:0:0:0:ffff:ffff:ffff:ffff", 64, 6); -test_iprange("fe80:0000:0000:0000:e0d3:f0ff:fe28:5f47", "fe80:0000:0000:0000:e0d3:f0ff:fe28:5f47", "fe80:0000:0000:0000:e0d3:f0ff:fe28:5f47", 0, 6); -test_iprange("0.0.0.0/1", "0.0.0.0", "127.255.255.255", 1, 4); -test_iprange("162.16.47.0/16", "162.16.0.0", "162.16.255.255", 16, 4); -test_iprange("192.168.1.0/27", "192.168.1.0", "192.168.1.31", 27, 4); -test_iprange("192.168.1.0/32", "192.168.1.0", "192.168.1.0", 32, 4); -test_iprange("192.168.1.0", "192.168.1.0", "192.168.1.0", 0, 4); - -$sVps = new Vps(0); -$sVps->uHostname = "test6.cryto.net"; -$sVps->uInternalId = "110"; -$sVps->uNodeId = 2; -$sVps->uTemplateId = 1; -$sVps->uUserId = 1; -$sVps->uVirtualizationType = CVM_VIRTUALIZATION_OPENVZ; -$sVps->uGuaranteedRam = 256; -$sVps->uBurstableRam = 384; -$sVps->uDiskSpace = 6000; -$sVps->uCpuCount = 1; -$sVps->uStatus = CVM_STATUS_BLANK; -$sVps->uIncomingTrafficLimit = 500000000000; -$sVps->uOutgoingTrafficLimit = 500000000000; -$sVps->uTotalTrafficLimit = 1000000000000; -$sVps->InsertIntoDatabase(); - -$sVps->Deploy(); -*/ -/* -var_dump( - parse_size("15m"), parse_size("24 KB"), parse_size("51"), - parse_size("2 TiB"), parse_size("4.9GiB"), parse_size("0.75GB"), - parse_size("20gb", 1000), parse_size("14.6 TiB", 1000), parse_size("84YB") -); -*/ -/* -var_dump(first_unused_ctid()); -*/ - -//var_dump(format_size(900), format_size(900000), format_size(900000000), format_size(900000000000), format_size(900000000000000), format_size(9000000000000000)); - -$sKey = new ApiKey(0); -$sKey->GenerateSalt(); -$sKey->uPublicToken = random_string(32); -$new_token = random_string(32); -echo($new_token); -$sKey->SetPrivateToken($new_token); -$sKey->uUserId = 1; -$sKey->InsertIntoDatabase(); diff --git a/frontend/rewrite.php b/frontend/rewrite.php deleted file mode 100644 index b0166e4..0000000 --- a/frontend/rewrite.php +++ /dev/null @@ -1,314 +0,0 @@ -theme; - -$sTemplateParameters = array(); - -if(!empty($_SESSION['userid'])) -{ - $sUser = new User($_SESSION['userid']); - $sLoggedIn = true; - $template_global_vars['accesslevel'] = $sUser->sAccessLevel; - $sTemplateParameters = array_merge($sTemplateParameters, array( - 'username' => $sUser->sUsername - )); -} -else -{ - $sUser = new User(0); - $sLoggedIn = false; - $template_global_vars['accesslevel'] = 0; -} - -$sMainContents = ""; -$sMainClass = ""; -$sPageTitle = ""; -$sResponse = array(); -$sResponseCode = 200; - -/* Initialize some variables to ensure that they are available throughout the application. - * Due to the way PHP variable scoping works (and the way CPHP works around this), variables - * are only available at the end of rewrite.php if they were set *before* routing the request. */ -$sVps = null; -$sPageContents = ""; -$router = null; -$sError = null; - -try -{ - $router = new CPHPRouter(); - - $router->ignore_query = true; - - $router->routes = array( - 0 => array( - '^/?$' => "modules/client/vps/list.php", - '^/list/?$' => "modules/client/vps/list.php", - '^/account/?$' => "modules/client/account/index.php", - '^/login/?$' => "modules/shared/login.php", - '^/logout/?$' => "modules/shared/logout.php", - /* Frontpage/overview */ - '^/([0-9]+)/?$' => array( - 'target' => "modules/client/vps/lookup.php", - 'authenticator' => "authenticators/vps.php", - 'auth_error' => "modules/error/access.php", - '_menu' => "vps" - ), - /* VPS - Start */ - '^/([0-9]+)/start/?$' => array( - 'target' => "modules/client/vps/lookup.php", - 'authenticator' => "authenticators/vps.php", - 'auth_error' => "modules/error/access.php", - '_menu' => "vps", - '_action' => "start" - ), - /* VPS - Stop */ - '^/([0-9]+)/stop/?$' => array( - 'target' => "modules/client/vps/lookup.php", - 'authenticator' => "authenticators/vps.php", - 'auth_error' => "modules/error/access.php", - '_menu' => "vps", - '_action' => "stop" - ), - /* VPS - Restart */ - '^/([0-9]+)/restart/?$' => array( - 'target' => "modules/client/vps/lookup.php", - 'authenticator' => "authenticators/vps.php", - 'auth_error' => "modules/error/access.php", - '_menu' => "vps", - '_action' => "restart" - ), - /* VPS - Reinstall */ - '^/([0-9]+)/reinstall/?$' => array( - 'target' => "modules/client/vps/reinstall.php", - 'authenticator' => "authenticators/vps.php", - 'auth_error' => "modules/error/access.php", - '_menu' => "vps" - ), - /* VPS - Change password */ - '^/([0-9]+)/password/?$' => array( - 'target' => "modules/client/vps/password.php", - 'authenticator' => "authenticators/vps.php", - 'auth_error' => "modules/error/access.php", - '_menu' => "vps" - ), - /* VPS - Console */ - '^/([0-9]+)/console/?$' => array( - 'target' => "modules/client/vps/console.php", - 'authenticator' => "authenticators/vps.php", - 'auth_error' => "modules/error/access.php", - '_menu' => "vps" - ), - /* Admin - Overview */ - '^/admin/?$' => array( - 'target' => "modules/admin/overview/index.php", - 'authenticator' => "authenticators/admin.php", - 'auth_error' => "modules/error/access.php", - '_menu' => "admin" - ), - /* Admin - Users - Overview */ - '^/admin/users/?$' => array( - 'target' => "modules/admin/user/list.php", - 'authenticator' => "authenticators/admin.php", - 'auth_error' => "modules/error/access.php", - '_menu' => "admin" - ), - /* Admin - Users - Lookup */ - '^/admin/user/([0-9]+)/?$' => array( - 'target' => "modules/admin/user/lookup.php", - 'authenticator' => "authenticators/admin.php", - 'auth_error' => "modules/error/access.php", - '_menu' => "admin" - ), - /* Admin - Users - Edit */ - '^/admin/user/([0-9]+)/edit/?$' => array( - 'target' => "modules/admin/user/edit.php", - 'authenticator' => "authenticators/admin.php", - 'auth_error' => "modules/error/access.php", - '_menu' => "admin" - ), - /* Admin - Users - Create VPS */ - '^/admin/user/([0-9]+)/add/?$' => array( - 'target' => "modules/admin/vps/create.php", - 'authenticator' => "authenticators/admin.php", - 'auth_error' => "modules/error/access.php", - '_menu' => "admin", - '_prefilled_user' => true - ), - /* Admin - VPSes - Overview */ - '^/admin/vpses/?$' => array( - 'target' => "modules/admin/vps/list.php", - 'authenticator' => "authenticators/admin.php", - 'auth_error' => "modules/error/access.php", - '_menu' => "admin" - ), - /* Admin - VPSes - Create VPS */ - '^/admin/vpses/add/?$' => array( - 'target' => "modules/admin/vps/create.php", - 'authenticator' => "authenticators/admin.php", - 'auth_error' => "modules/error/access.php", - '_menu' => "admin" - ), - /* Admin - VPSes - Suspend */ - '^/admin/vps/([0-9]+)/suspend/?$' => array( - 'target' => "modules/admin/vps/suspend.php", - 'authenticator' => "authenticators/admin.php", - 'auth_error' => "modules/error/access.php", - '_menu' => "admin" - ), - /* Admin - VPSes - Transfer */ - '^/admin/vps/([0-9]+)/transfer/?$' => array( - 'target' => "modules/admin/vps/transfer.php", - 'authenticator' => "authenticators/admin.php", - 'auth_error' => "modules/error/access.php", - '_menu' => "admin" - ), - /* Admin - VPSes - Terminate */ - '^/admin/vps/([0-9]+)/terminate/?$' => array( - 'target' => "modules/admin/vps/terminate.php", - 'authenticator' => "authenticators/admin.php", - 'auth_error' => "modules/error/access.php", - '_menu' => "admin" - ), - /* Admin - Templates - Overview */ - '^/admin/templates/?$' => array( - 'target' => "modules/admin/template/list.php", - 'authenticator' => "authenticators/admin.php", - 'auth_error' => "modules/error/access.php", - '_menu' => "admin" - ), - /* Admin - Templates - Lookup */ - '^/admin/templates/([0-9]+)/?$' => array( - 'target' => "modules/admin/template/lookup.php", - 'authenticator' => "authenticators/admin.php", - 'auth_error' => "modules/error/access.php", - '_menu' => "admin" - ), - /* Admin - Templates - Add */ - '^/admin/templates/add/?$' => array( - 'target' => "modules/admin/template/add.php", - 'authenticator' => "authenticators/admin.php", - 'auth_error' => "modules/error/access.php", - '_menu' => "admin" - ), - /* Admin - Nodes - Overview */ - '^/admin/nodes/?$' => array( - 'target' => "modules/admin/node/list.php", - 'authenticator' => "authenticators/admin.php", - 'auth_error' => "modules/error/access.php", - '_menu' => "admin" - ), - /* Admin - Nodes - Lookup */ - '^/admin/node/([0-9]+)/?$' => array( - 'target' => "modules/admin/node/lookup.php", - 'authenticator' => "authenticators/admin.php", - 'auth_error' => "modules/error/access.php", - '_menu' => "admin" - ), - /* Admin - Nodes - Add */ - '^/admin/nodes/add/?$' => array( - 'target' => "modules/admin/node/add.php", - 'authenticator' => "authenticators/admin.php", - 'auth_error' => "modules/error/access.php", - '_menu' => "admin" - ), - /* Admin - Nodes - Create VPS */ - '^/admin/node/([0-9]+)/add/?$' => array( - 'target' => "modules/admin/vps/create.php", - 'authenticator' => "authenticators/admin.php", - 'auth_error' => "modules/error/access.php", - '_menu' => "admin", - '_prefilled_node' => true - ), - /* API - Client - List VPSes */ - '^/api/client/list' => array( - 'target' => "modules/api/client/vps/list.php", - 'authenticator' => "authenticators/api/client.php", - 'auth_error' => "modules/error/api/access.php", - '_raw' => true - ), - '^/test/?$' => "modules/test.php" - ) - ); - - try - { - $router->RouteRequest(); - } - catch (VpsSuspendedException $e) - { - $sError .= NewTemplater::Render("{$sTheme}/shared/error/error", $locale->strings, array( - 'title' => $locale->strings['error-suspended-title'], - 'message' => $e->getMessage() - )); - } - catch (VpsTerminatedException $e) - { - $sError .= NewTemplater::Render("{$sTheme}/shared/error/error", $locale->strings, array( - 'title' => $locale->strings['error-terminated-title'], - 'message' => $e->getMessage() - )); - } - - if(empty($router->uVariables['raw'])) - { - if(isset($router->uVariables['menu']) && $router->uVariables['menu'] == "vps" && $router->uVariables['display_menu'] === true) - { - $sMainContents .= NewTemplater::Render("{$sTheme}/client/vps/main", $locale->strings, array( - 'error' => $sError, - 'contents' => $sPageContents, - 'id' => $sVps->sId - )); - } - elseif(isset($router->uVariables['menu']) && $router->uVariables['menu'] == "admin" && $router->uVariables['display_menu'] === true) - { - $sMainContents .= NewTemplater::Render("{$sTheme}/admin/main", $locale->strings, array( - 'error' => $sError, - 'contents' => $sPageContents - )); - } - } -} -catch (UnauthorizedException $e) -{ - $sPageTitle = $locale->strings['title-unauthorized']; - - $sMainContents = NewTemplater::Render("{$sTheme}/shared/error/error", $locale->strings, array( - 'title' => $locale->strings['error-unauthorized-title'], - 'message' => $locale->strings['error-unauthorized-text'] - )); -} - -if(empty($router->uVariables['raw'])) -{ - $sTemplateParameters = array_merge($sTemplateParameters, array( - 'logged-in' => $sLoggedIn, - 'title' => $sPageTitle, - 'main' => $sMainContents, - 'menu-visible' => (isset($router->uVariables['menu']) && $router->sAuthenticated === true), - 'generation' => round(microtime(true) - $timing_start, 6) - )); - - echo(NewTemplater::Render("{$sTheme}/shared/main", $locale->strings, $sTemplateParameters)); -} -else -{ - status_code($sResponseCode); - echo(json_encode($sResponse)); -} diff --git a/frontend/templates/default/admin/main.tpl b/frontend/templates/default/admin/main.tpl deleted file mode 100644 index efcf68d..0000000 --- a/frontend/templates/default/admin/main.tpl +++ /dev/null @@ -1,11 +0,0 @@ - - -{%?contents} - -
diff --git a/frontend/templates/default/admin/node/add.tpl b/frontend/templates/default/admin/node/add.tpl deleted file mode 100644 index 6dd92c5..0000000 --- a/frontend/templates/default/admin/node/add.tpl +++ /dev/null @@ -1,58 +0,0 @@ -

{%!title-admin-addnode}

- -{%if isempty|errors == false} -
-
{%!error-form}
-
-
    - {%foreach error in errors} -
  • {%?error}
  • - {%/foreach} -
-
-
-{%/if} - -
-
- - {%input type="text" group="addnode" name="name"} -
-
- -
- - {%input type="text" group="addnode" name="hostname"} -
-
- -
- - {%input type="text" group="addnode" name="location"} -
-
- -
- - {%input type="checkbox" group="addnode" name="customkey" data-enable-group="customkey" class="enabler"} -
-
- -
- - {%input type="file" group="addnode" name="publickey" disabled="disabled"} -
-
- -
- - {%input type="file" group="addnode" name="privatekey" disabled="disabled"} -
-
- -
-
- -
-
-
diff --git a/frontend/templates/default/admin/node/list.tpl b/frontend/templates/default/admin/node/list.tpl deleted file mode 100644 index 10d56b2..0000000 --- a/frontend/templates/default/admin/node/list.tpl +++ /dev/null @@ -1,25 +0,0 @@ - - -

{%!title-admin-nodelist}

- - - - - - - {%foreach node in nodes} - - - - - {%/foreach} -
{%!list-column-hostname}{%!list-column-location}
- - {%?node[hostname]} - - - {%?node[location]} -
diff --git a/frontend/templates/default/admin/node/lookup.tpl b/frontend/templates/default/admin/node/lookup.tpl deleted file mode 100644 index fb7e811..0000000 --- a/frontend/templates/default/admin/node/lookup.tpl +++ /dev/null @@ -1,78 +0,0 @@ - - -

{%!title-admin-nodeinfo}

- - - - - - - - - - - - - - -
{%!list-column-nodeid}{%?id}
{%!list-column-hostname}{%?hostname}
{%!list-column-location}{%?location}
- -

{%!header-admin-node-vpses}

- - - - - - - - - - {%if isset|vpses == true} - {%foreach vps in vpses} - - - - - - - - - {%/foreach} - {%/if} -
{%!list-column-hostname}{%!list-column-platform}{%!list-column-disk}{%!list-column-ram}{%!list-column-template}
- {%if vps[status] == running} - {%!list-status-running} - {%elseif vps[status] == stopped} - {%!list-status-stopped} - {%elseif vps[status] == suspended} - {%!list-status-suspended} - {%else} - {%!list-status-unknown} - {%/if} - - - {%?vps[hostname]} - - - - {%if vps[virtualization-type] == 1} - OpenVZ - {%/if}{%if vps[virtualization-type] == 2} - Xen PV - {%/if}{%if vps[virtualization-type] == 3} - Xen HVM - {%/if}{%if vps[virtualization-type] == 4} - KVM - {%/if} - - - {%?vps[diskspace]} - {%?vps[diskspace-unit]} - - {%?vps[guaranteed-ram]} - {%?vps[guaranteed-ram-unit]} - {%?vps[template]}
diff --git a/frontend/templates/default/admin/overview/index.tpl b/frontend/templates/default/admin/overview/index.tpl deleted file mode 100644 index f83d783..0000000 --- a/frontend/templates/default/admin/overview/index.tpl +++ /dev/null @@ -1,3 +0,0 @@ -

{%!title-admin-overview}

- -

{%!admin-overview-message}

diff --git a/frontend/templates/default/admin/template/add.tpl b/frontend/templates/default/admin/template/add.tpl deleted file mode 100644 index e3e353b..0000000 --- a/frontend/templates/default/admin/template/add.tpl +++ /dev/null @@ -1,26 +0,0 @@ -

Add templates

- -{%if isempty|templates == true} -

- To add new templates, add the corresponding tar.gz files to /etc/cvm/templates on the master node, and reload this page. - New files will be automatically detected, and you will be able to add them as templates from this page. -

- -

- All templates will be automatically synchronized to slave nodes. -

-{%else} -
- {%foreach template in templates} -
-

{%?template}

- -
- - {%input type="text" group="addtemplate" name="name[]"} -
-
-
- {%/foreach} -
-{%/if} diff --git a/frontend/templates/default/admin/user/edit.tpl b/frontend/templates/default/admin/user/edit.tpl deleted file mode 100644 index 6ada2b7..0000000 --- a/frontend/templates/default/admin/user/edit.tpl +++ /dev/null @@ -1,45 +0,0 @@ -

{%!title-admin-edituser}

- -{%if isempty|errors == false} -
-
{%!error-form}
-
-
    - {%foreach error in errors} -
  • {%?error}
  • - {%/foreach} -
-
-
-{%/if} - -
-
- - {%input type="text" group="edituser" name="username"} -
-
- -
- - {%input type="text" group="edituser" name="email"} -
-
- -
- - {%select type="text" group="edituser" name="access"} - {%option value="1" text="{%!admin-level-enduser}"} - - {%option value="20" text="{%!admin-level-nodeadmin}"} - {%option value="30" text="{%!admin-level-masteradmin}"} - {%/select} -
-
- -
-
- -
-
-
diff --git a/frontend/templates/default/admin/user/list.tpl b/frontend/templates/default/admin/user/list.tpl deleted file mode 100644 index 21f9c6f..0000000 --- a/frontend/templates/default/admin/user/list.tpl +++ /dev/null @@ -1,31 +0,0 @@ - - -

{%!title-admin-userlist}

- - - - - - - - {%foreach user in users} - - - - - - {%/foreach} -
{%!admin-title-username}{%!admin-title-email}{%!admin-title-accesslevel}
{%?user[username]}{%?user[email]} - {%if user[accesslevel] == 1} - {%!admin-level-enduser} - {%/if}{%if user[accesslevel] == 10} - {%!admin-level-reseller} - {%/if}{%if user[accesslevel] == 20} - {%!admin-level-nodeadmin} - {%/if}{%if user[accesslevel] == 30} - {%!admin-level-masteradmin} - {%/if} -
diff --git a/frontend/templates/default/admin/user/lookup.tpl b/frontend/templates/default/admin/user/lookup.tpl deleted file mode 100644 index 0a4d217..0000000 --- a/frontend/templates/default/admin/user/lookup.tpl +++ /dev/null @@ -1,93 +0,0 @@ - - -

{%!title-admin-userinfo}

- - - - - - - - - - - - - - - - - - - - - - -
{%!admin-title-id}{%?id}
{%!admin-title-username}{%?username}
{%!admin-title-email}{%?email}
{%!admin-title-accesslevel} - {%if accesslevel == 1} - {%!admin-level-enduser} - {%/if}{%if accesslevel == 10} - {%!admin-level-reseller} - {%/if}{%if accesslevel == 20} - {%!admin-level-nodeadmin} - {%/if}{%if accesslevel == 30} - {%!admin-level-masteradmin} - {%/if} -
{%!admin-title-vpses}{%?vpscount}
- -

{%!header-admin-user-vpses}

- - - - - - - - - - {%foreach vps in vpses} - - - - - - - - {%/foreach} -
{%!list-column-hostname}{%!list-column-platform}{%!list-column-disk}{%!list-column-ram}{%!list-column-template}
- {%if vps[status] == running} - {%!list-status-running} - {%elseif vps[status] == stopped} - {%!list-status-stopped} - {%elseif vps[status] == suspended} - {%!list-status-suspended} - {%else} - {%!list-status-unknown} - {%/if} - - - {%?vps[hostname]} - - - - {%if vps[virtualization-type] == 1} - OpenVZ - {%/if}{%if vps[virtualization-type] == 2} - Xen PV - {%/if}{%if vps[virtualization-type] == 3} - Xen HVM - {%/if}{%if vps[virtualization-type] == 4} - KVM - {%/if} - - - {%?vps[diskspace]} - {%?vps[diskspace-unit]} - - {%?vps[guaranteed-ram]} - {%?vps[guaranteed-ram-unit]} - {%?vps[template]}
diff --git a/frontend/templates/default/admin/vps/add.tpl b/frontend/templates/default/admin/vps/add.tpl deleted file mode 100644 index fc0db22..0000000 --- a/frontend/templates/default/admin/vps/add.tpl +++ /dev/null @@ -1,88 +0,0 @@ -

{%!title-admin-addvps}

- -{%if isempty|errors == false} -
-
{%!error-form}
-
-
    - {%foreach error in errors} -
  • {%?error}
  • - {%/foreach} -
-
-
-{%/if} - -
-
- - {%select group="addvps" name="node"} - {%foreach node in nodes} - {%option value="(?node[id])" text="(?node[name]) ((?node[location]))"} - {%/foreach} - {%/select} -
-
- -
- - {%select group="addvps" name="template"} - {%foreach template in templates} - {%option value="(?template[id])" text="(?template[name])"} - {%/foreach} - {%/select} -
-
- -
- - {%select group="addvps" name="user"} - {%foreach user in users} - {%option value="(?user[id])" text="(?user[username]) (#(?user[id]))"} - {%/foreach} - {%/select} -
-
- -
- - {%input type="text" group="addvps" name="diskspace"} -
-
- -
- - {%input type="text" group="addvps" name="guaranteed"} -
-
- -
- - {%input type="text" group="addvps" name="burstable"} -
-
- -
- - {%input type="text" group="addvps" name="cpucount"} -
-
- -
- - {%input type="text" group="addvps" name="traffic"} -
-
- -
- - {%input type="text" group="addvps" name="hostname"} -
-
- -
-
- -
-
-
diff --git a/frontend/templates/default/admin/vps/list.tpl b/frontend/templates/default/admin/vps/list.tpl deleted file mode 100644 index 031ff96..0000000 --- a/frontend/templates/default/admin/vps/list.tpl +++ /dev/null @@ -1,54 +0,0 @@ -

{%!title-admin-vpslist}

- - - - - - - - - - - {%foreach vps in vpses} - - - - - - - - - {%/foreach} -
{%!list-column-hostname}{%!list-column-platform}{%!list-column-disk}{%!list-column-ram}{%!list-column-template}
- {%if vps[status] == running} - {%!list-status-running} - {%elseif vps[status] == stopped} - {%!list-status-stopped} - {%elseif vps[status] == suspended} - {%!list-status-suspended} - {%else} - {%!list-status-unknown} - {%/if} - - - {%?vps[hostname]} - - - - {%if vps[virtualization-type] == 1} - OpenVZ - {%/if}{%if vps[virtualization-type] == 2} - Xen PV - {%/if}{%if vps[virtualization-type] == 3} - Xen HVM - {%/if}{%if vps[virtualization-type] == 4} - KVM - {%/if} - - - {%?vps[diskspace]} - {%?vps[diskspace-unit]} - - {%?vps[guaranteed-ram]} - {%?vps[guaranteed-ram-unit]} - {%?vps[template]}
diff --git a/frontend/templates/default/admin/vps/suspend.tpl b/frontend/templates/default/admin/vps/suspend.tpl deleted file mode 100644 index 974d940..0000000 --- a/frontend/templates/default/admin/vps/suspend.tpl +++ /dev/null @@ -1,14 +0,0 @@ -
- {%if suspended == false} -

{%!title-admin-vps-suspend}

-

{%!vps-admin-suspend-text}

- - - {%/if}{%if suspended == true} -

{%!title-admin-vps-unsuspend}

-

{%!vps-admin-unsuspend-text}

- - - {%/if} -
- diff --git a/frontend/templates/default/admin/vps/terminate.tpl b/frontend/templates/default/admin/vps/terminate.tpl deleted file mode 100644 index f38842d..0000000 --- a/frontend/templates/default/admin/vps/terminate.tpl +++ /dev/null @@ -1,18 +0,0 @@ -
- {%if terminated == false} -

{%!title-admin-vps-terminate}

-

{%!vps-admin-terminate-text}

- - - {%else} - {%if can-unterminate == true} -

{%!title-admin-vps-unterminate}

-

{%!vps-admin-unterminate-text}

- - - {%else} - Cannot unterminate - {%/if} - {%/if} -
- diff --git a/frontend/templates/default/client/vps/console.tpl b/frontend/templates/default/client/vps/console.tpl deleted file mode 100644 index 6f6fd35..0000000 --- a/frontend/templates/default/client/vps/console.tpl +++ /dev/null @@ -1,26 +0,0 @@ -

{%!title-console}

- -

{%!console-introduction}

- -

{%!console-step1}

- - - - - - - - - - - - - - - - - - -
{%!console-title-hostname}{%?host}
{%!console-title-port}{%?port}
{%!console-title-username}{%?username}
{%!console-title-password}{%?password}
- -

{%!console-step2}

diff --git a/frontend/templates/default/client/vps/error/notfound.tpl b/frontend/templates/default/client/vps/error/notfound.tpl deleted file mode 100644 index 979773e..0000000 --- a/frontend/templates/default/client/vps/error/notfound.tpl +++ /dev/null @@ -1 +0,0 @@ -{%!notfound} diff --git a/frontend/templates/default/client/vps/list.tpl b/frontend/templates/default/client/vps/list.tpl deleted file mode 100644 index c9a465e..0000000 --- a/frontend/templates/default/client/vps/list.tpl +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - - - - - - {%foreach vps in vpses} - - - - - - - - - - {%/foreach} -
{%!list-column-hostname}{%!list-column-platform}{%!list-column-node}{%!list-column-disk}{%!list-column-ram}{%!list-column-template}
- {%if vps[status] == running} - {%!list-status-running} - {%elseif vps[status] == stopped} - {%!list-status-stopped} - {%elseif vps[status] == suspended} - {%!list-status-suspended} - {%else} - {%!list-status-unknown} - {%/if} - - - {%?vps[hostname]} - - - - {%if vps[virtualization-type] == 1} - OpenVZ - {%/if}{%if vps[virtualization-type] == 2} - Xen PV - {%/if}{%if vps[virtualization-type] == 3} - Xen HVM - {%/if}{%if vps[virtualization-type] == 4} - KVM - {%/if} - - - - {%?vps[node]} - ({%?vps[node-hostname]}) - - - {%?vps[diskspace]} - {%?vps[diskspace-unit]} - - {%?vps[guaranteed-ram]} - {%?vps[guaranteed-ram-unit]} - {%?vps[template]}
diff --git a/frontend/templates/default/client/vps/lookup.tpl b/frontend/templates/default/client/vps/lookup.tpl deleted file mode 100644 index 57d501d..0000000 --- a/frontend/templates/default/client/vps/lookup.tpl +++ /dev/null @@ -1,138 +0,0 @@ -

{%!title-overview}

- -
- {%if traffic-split == false} -
-

{%!overview-quota-title-disk}

-
-
-
{%?disk-used}/{%?disk-total}{%?disk-unit}
-
-
-
-

{%!overview-quota-title-ram}

-
-
-
{%?ram-used}/{%?ram-total}{%?ram-unit}
-
-
-
-

{%!overview-quota-title-traffic}

-
-
-
{%?traffic-used}/{%?traffic-total}{%?traffic-unit}
-
-
- {%else} -
-

{%!overview-quota-title-disk}

-
-
-
{%?disk-used}/{%?disk-total}{%?disk-unit}
-
-
-
-

{%!overview-quota-title-ram}

-
-
-
{%?ram-used}/{%?ram-total}{%?ram-unit}
-
-
-
-

{%!overview-quota-title-traffic-incoming}

-
-
-
{%?inbound-used}/{%?inbound-total}{%?inbound-unit}
-
-
-
-

{%!overview-quota-title-traffic-outgoing}

-
-
-
{%?outbound-used}/{%?outbound-total}{%?outbound-unit}
-
-
- {%/if} -
-
- - - -

{%!overview-title-configuration}

- - - - - - - - - - - - - - - - - - - - - {%if total-traffic-limit == "0B"} - - - - - {%else} - - - {%/if} - - - - - - - - - - - - - -
{%!overview-title-status} - {%if status == running} - {%!overview-status-running} - {%/if}{%if status == stopped} - {%!overview-status-stopped} - {%/if}{%if status == suspended} - {%!overview-status-suspended} - {%/if}{%if status == unknown} - {%!overview-status-unknown} - {%/if} - {%!overview-title-os}{%?operating-system}
{%!overview-title-guaranteed}{%?guaranteed-ram}{%!overview-title-burstable}{%?burstable-ram}
{%!overview-title-disk}{%?disk-space}{%!overview-title-bandwidth}{%?bandwidth-limit}
{%!overview-title-traffic-incoming}{%?incoming-traffic-limit}{%!overview-title-traffic-outgoing}{%?outgoing-traffic-limit}{%!overview-title-traffic}{%?total-traffic-limit}
{%!overview-title-location}{%?server-location}
{%!overview-title-ipv4}
{%!overview-title-ipv6}
- -{%if accesslevel >= 20} -

{%!header-vps-admin}

- -
-{%/if} diff --git a/frontend/templates/default/client/vps/main.tpl b/frontend/templates/default/client/vps/main.tpl deleted file mode 100644 index 396a8e5..0000000 --- a/frontend/templates/default/client/vps/main.tpl +++ /dev/null @@ -1,19 +0,0 @@ - - -{%if isset|error == true} - {%?error} -{%/if} - -{%?contents} - -
diff --git a/frontend/templates/default/client/vps/password.tpl b/frontend/templates/default/client/vps/password.tpl deleted file mode 100644 index 85fa7d8..0000000 --- a/frontend/templates/default/client/vps/password.tpl +++ /dev/null @@ -1,22 +0,0 @@ -

{%!title-password}

- - -
-
- - {%input type="text" group="password" name="password"} -
-
- -
- - {%input type="text" group="password" name="confirm"} -
-
- -
-
- -
-
-
diff --git a/frontend/templates/default/client/vps/reinstall.tpl b/frontend/templates/default/client/vps/reinstall.tpl deleted file mode 100644 index b05188d..0000000 --- a/frontend/templates/default/client/vps/reinstall.tpl +++ /dev/null @@ -1,23 +0,0 @@ -

{%!title-reinstall}

- -
- {%foreach template in templates} -
-
- - -
-
{%?template[description]}
-
- {%/foreach} - -
- - -
- -
- -  {%!reinstall-patience} -
-
diff --git a/frontend/templates/default/shared/error/error.tpl b/frontend/templates/default/shared/error/error.tpl deleted file mode 100644 index d3bf12f..0000000 --- a/frontend/templates/default/shared/error/error.tpl +++ /dev/null @@ -1,4 +0,0 @@ -
-
{%?title}
-
{%?message}
-
diff --git a/frontend/templates/default/shared/error/info.tpl b/frontend/templates/default/shared/error/info.tpl deleted file mode 100644 index 99851b7..0000000 --- a/frontend/templates/default/shared/error/info.tpl +++ /dev/null @@ -1,4 +0,0 @@ -
-
{%?title}
-
{%?message}
-
diff --git a/frontend/templates/default/shared/error/success.tpl b/frontend/templates/default/shared/error/success.tpl deleted file mode 100644 index 35a0279..0000000 --- a/frontend/templates/default/shared/error/success.tpl +++ /dev/null @@ -1,4 +0,0 @@ -
-
{%?title}
-
{%?message}
-
diff --git a/frontend/templates/default/shared/error/warning.tpl b/frontend/templates/default/shared/error/warning.tpl deleted file mode 100644 index fcc3721..0000000 --- a/frontend/templates/default/shared/error/warning.tpl +++ /dev/null @@ -1,4 +0,0 @@ -
-
{%?title}
-
{%?message}
-
diff --git a/frontend/templates/default/shared/login.tpl b/frontend/templates/default/shared/login.tpl deleted file mode 100644 index d33c961..0000000 --- a/frontend/templates/default/shared/login.tpl +++ /dev/null @@ -1,25 +0,0 @@ -

{%!title-login}

- -{%?error} - - diff --git a/frontend/templates/default/shared/main.tpl b/frontend/templates/default/shared/main.tpl deleted file mode 100644 index 20cada4..0000000 --- a/frontend/templates/default/shared/main.tpl +++ /dev/null @@ -1,39 +0,0 @@ - - - - CVM - - - - - - - - - -
-
- - {%if logged-in == true} -
-
{%!userbox-loggedin}
- {%if accesslevel >= 20} - {%!userbox-admin} - {%/if} - {%!userbox-account} - {%!userbox-list} - {%!userbox-logout} -
- {%/if} -
- - -
- - - - diff --git a/frontend/templates/default/static/css/chosen.css b/frontend/templates/default/static/css/chosen.css deleted file mode 100644 index 737f3d8..0000000 --- a/frontend/templates/default/static/css/chosen.css +++ /dev/null @@ -1,397 +0,0 @@ -/* @group Base */ -.chzn-container { - font-size: 13px; - position: relative; - display: inline-block; - zoom: 1; - *display: inline; - vertical-align: middle; -} -.chzn-container .chzn-drop { - background: #fff; - border: 1px solid #aaa; - border-top: 0; - position: absolute; - top: 29px; - left: 0; - -webkit-box-shadow: 0 4px 5px rgba(0,0,0,.15); - -moz-box-shadow : 0 4px 5px rgba(0,0,0,.15); - -o-box-shadow : 0 4px 5px rgba(0,0,0,.15); - box-shadow : 0 4px 5px rgba(0,0,0,.15); - z-index: 999; -} -/* @end */ - -/* @group Single Chosen */ -.chzn-container-single .chzn-single { - background-color: #ffffff; - filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#eeeeee', GradientType=0 ); - background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(20%, #ffffff), color-stop(50%, #f6f6f6), color-stop(52%, #eeeeee), color-stop(100%, #f4f4f4)); - background-image: -webkit-linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%); - background-image: -moz-linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%); - background-image: -o-linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%); - background-image: -ms-linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%); - background-image: linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%); - -webkit-border-radius: 5px; - -moz-border-radius : 5px; - border-radius : 5px; - -moz-background-clip : padding; - -webkit-background-clip: padding-box; - background-clip : padding-box; - border: 1px solid #aaaaaa; - -webkit-box-shadow: 0 0 3px #ffffff inset, 0 1px 1px rgba(0,0,0,0.1); - -moz-box-shadow : 0 0 3px #ffffff inset, 0 1px 1px rgba(0,0,0,0.1); - box-shadow : 0 0 3px #ffffff inset, 0 1px 1px rgba(0,0,0,0.1); - display: block; - overflow: hidden; - white-space: nowrap; - position: relative; - height: 23px; - line-height: 24px; - padding: 0 0 0 8px; - color: #444444; - text-decoration: none; -} -.chzn-container-single .chzn-single span { - margin-right: 26px; - display: block; - overflow: hidden; - white-space: nowrap; - -o-text-overflow: ellipsis; - -ms-text-overflow: ellipsis; - text-overflow: ellipsis; -} -.chzn-container-single .chzn-single abbr { - display: block; - position: absolute; - right: 26px; - top: 6px; - width: 12px; - height: 13px; - font-size: 1px; - background: url(img/chosen-sprite.png) right top no-repeat; -} -.chzn-container-single .chzn-single abbr:hover { - background-position: right -11px; -} -.chzn-container-single .chzn-single div { - position: absolute; - right: 0; - top: 0; - display: block; - height: 100%; - width: 18px; -} -.chzn-container-single .chzn-single div b { - background: url('img/chosen-sprite.png') no-repeat 0 0; - display: block; - width: 100%; - height: 100%; -} -.chzn-container-single .chzn-search { - padding: 3px 4px; - position: relative; - margin: 0; - white-space: nowrap; - z-index: 1010; -} -.chzn-container-single .chzn-search input { - background: #fff url('img/chosen-sprite.png') no-repeat 100% -22px; - background: url('img/chosen-sprite.png') no-repeat 100% -22px, -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(1%, #eeeeee), color-stop(15%, #ffffff)); - background: url('img/chosen-sprite.png') no-repeat 100% -22px, -webkit-linear-gradient(top, #eeeeee 1%, #ffffff 15%); - background: url('img/chosen-sprite.png') no-repeat 100% -22px, -moz-linear-gradient(top, #eeeeee 1%, #ffffff 15%); - background: url('img/chosen-sprite.png') no-repeat 100% -22px, -o-linear-gradient(top, #eeeeee 1%, #ffffff 15%); - background: url('img/chosen-sprite.png') no-repeat 100% -22px, -ms-linear-gradient(top, #eeeeee 1%, #ffffff 15%); - background: url('img/chosen-sprite.png') no-repeat 100% -22px, linear-gradient(top, #eeeeee 1%, #ffffff 15%); - margin: 1px 0; - padding: 4px 20px 4px 5px; - outline: 0; - border: 1px solid #aaa; - font-family: sans-serif; - font-size: 1em; - -moz-box-sizing: content-box; - -webkit-box-sizing: content-box; - -ms-box-sizing: content-box; - box-sizing:content-box; -} -.chzn-container-single .chzn-drop { - -webkit-border-radius: 0 0 4px 4px; - -moz-border-radius : 0 0 4px 4px; - border-radius : 0 0 4px 4px; - -moz-background-clip : padding; - -webkit-background-clip: padding-box; - background-clip : padding-box; -} -/* @end */ - -.chzn-container-single-nosearch .chzn-search input { - position: absolute; - left: -9000px; -} - -/* @group Multi Chosen */ -.chzn-container-multi .chzn-choices { - background-color: #fff; - background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(1%, #eeeeee), color-stop(15%, #ffffff)); - background-image: -webkit-linear-gradient(top, #eeeeee 1%, #ffffff 15%); - background-image: -moz-linear-gradient(top, #eeeeee 1%, #ffffff 15%); - background-image: -o-linear-gradient(top, #eeeeee 1%, #ffffff 15%); - background-image: -ms-linear-gradient(top, #eeeeee 1%, #ffffff 15%); - background-image: linear-gradient(top, #eeeeee 1%, #ffffff 15%); - border: 1px solid #aaa; - margin: 0; - padding: 0; - cursor: text; - overflow: hidden; - height: auto !important; - height: 1%; - position: relative; - display:inline-block; - *display:inline; -} -.chzn-container-multi .chzn-choices li { - display:inline-block; - *display:inline; - list-style: none; -} -.chzn-container-multi .chzn-choices .search-field { - white-space: nowrap; - margin: 0; - padding: 0; -} -.chzn-container-multi .chzn-choices .search-field input { - color: #666; - background: transparent !important; - border: 0 !important; - font-family: sans-serif; - font-size: 100%; - height: 15px; - padding: 5px; - margin: 1px 0; - outline: 0; - -webkit-box-shadow: none; - -moz-box-shadow : none; - -o-box-shadow : none; - box-shadow : none; -} -.chzn-container-multi .chzn-choices .search-field .default { - color: #999; -} -.chzn-container-multi .chzn-choices .search-choice { - -webkit-border-radius: 3px; - -moz-border-radius : 3px; - border-radius : 3px; - -moz-background-clip : padding; - -webkit-background-clip: padding-box; - background-clip : padding-box; - background-color: #e4e4e4; - filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f4f4f4', endColorstr='#eeeeee', GradientType=0 ); - background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), color-stop(100%, #eeeeee)); - background-image: -webkit-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%); - background-image: -moz-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%); - background-image: -o-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%); - background-image: -ms-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%); - background-image: linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%); - -webkit-box-shadow: 0 0 2px #ffffff inset, 0 1px 0 rgba(0,0,0,0.05); - -moz-box-shadow : 0 0 2px #ffffff inset, 0 1px 0 rgba(0,0,0,0.05); - box-shadow : 0 0 2px #ffffff inset, 0 1px 0 rgba(0,0,0,0.05); - color: #333; - border: 1px solid #aaaaaa; - line-height: 13px; - padding: 3px 20px 3px 5px; - margin: 3px 0 3px 5px; - position: relative; - cursor: default; -} -.chzn-container-multi .chzn-choices .search-choice-focus { - background: #d4d4d4; -} -.chzn-container-multi .chzn-choices .search-choice .search-choice-close { - display: block; - position: absolute; - right: 3px; - top: 4px; - width: 12px; - height: 13px; - font-size: 1px; - background: url(img/chosen-sprite.png) right top no-repeat; -} -.chzn-container-multi .chzn-choices .search-choice .search-choice-close:hover { - background-position: right -11px; -} -.chzn-container-multi .chzn-choices .search-choice-focus .search-choice-close { - background-position: right -11px; -} -/* @end */ - -/* @group Results */ -.chzn-container .chzn-results { - margin: 0 4px 4px 0; - max-height: 240px; - padding: 0 0 0 4px; - position: relative; - overflow-x: hidden; - overflow-y: auto; -} -.chzn-container-multi .chzn-results { - margin: -1px 0 0; - padding: 0; -} -.chzn-container .chzn-results li { - display: none; - line-height: 15px; - padding: 5px 6px; - margin: 0; - list-style: none; -} -.chzn-container .chzn-results .active-result { - cursor: pointer; - display: list-item; -} -.chzn-container .chzn-results .highlighted { - background-color: #3875d7; - filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#3875d7', endColorstr='#2a62bc', GradientType=0 ); - background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(20%, #3875d7), color-stop(90%, #2a62bc)); - background-image: -webkit-linear-gradient(top, #3875d7 20%, #2a62bc 90%); - background-image: -moz-linear-gradient(top, #3875d7 20%, #2a62bc 90%); - background-image: -o-linear-gradient(top, #3875d7 20%, #2a62bc 90%); - background-image: -ms-linear-gradient(top, #3875d7 20%, #2a62bc 90%); - background-image: linear-gradient(top, #3875d7 20%, #2a62bc 90%); - color: #fff; -} -.chzn-container .chzn-results li em { - background: #feffde; - font-style: normal; -} -.chzn-container .chzn-results .highlighted em { - background: transparent; -} -.chzn-container .chzn-results .no-results { - background: #f4f4f4; - display: list-item; -} -.chzn-container .chzn-results .group-result { - cursor: default; - color: #999; - font-weight: bold; -} -.chzn-container .chzn-results .group-option { - padding-left: 15px; -} -.chzn-container-multi .chzn-drop .result-selected { - display: none; -} -.chzn-container .chzn-results-scroll { - background: white; - margin: 0 4px; - position: absolute; - text-align: center; - width: 321px; /* This should by dynamic with js */ - z-index: 1; -} -.chzn-container .chzn-results-scroll span { - display: inline-block; - height: 17px; - text-indent: -5000px; - width: 9px; -} -.chzn-container .chzn-results-scroll-down { - bottom: 0; -} -.chzn-container .chzn-results-scroll-down span { - background: url('img/chosen-sprite.png') no-repeat -4px -3px; -} -.chzn-container .chzn-results-scroll-up span { - background: url('img/chosen-sprite.png') no-repeat -22px -3px; -} -/* @end */ - -/* @group Active */ -.chzn-container-active .chzn-single { - -webkit-box-shadow: 0 0 5px #6DB9FF; - -moz-box-shadow : 0 0 5px #6DB9FF; - -o-box-shadow : 0 0 5px #6DB9FF; - box-shadow : 0 0 5px #6DB9FF; - border: 1px solid #50B1FE; -} -.chzn-container-active .chzn-single-with-drop { - border: 1px solid #aaa; - -webkit-box-shadow: 0 1px 0 #fff inset; - -moz-box-shadow : 0 1px 0 #fff inset; - -o-box-shadow : 0 1px 0 #fff inset; - box-shadow : 0 1px 0 #fff inset; - background-color: #eee; - filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#eeeeee', endColorstr='#ffffff', GradientType=0 ); - background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(20%, #eeeeee), color-stop(80%, #ffffff)); - background-image: -webkit-linear-gradient(top, #eeeeee 20%, #ffffff 80%); - background-image: -moz-linear-gradient(top, #eeeeee 20%, #ffffff 80%); - background-image: -o-linear-gradient(top, #eeeeee 20%, #ffffff 80%); - background-image: -ms-linear-gradient(top, #eeeeee 20%, #ffffff 80%); - background-image: linear-gradient(top, #eeeeee 20%, #ffffff 80%); - -webkit-border-bottom-left-radius : 0; - -webkit-border-bottom-right-radius: 0; - -moz-border-radius-bottomleft : 0; - -moz-border-radius-bottomright: 0; - border-bottom-left-radius : 0; - border-bottom-right-radius: 0; -} -.chzn-container-active .chzn-single-with-drop div { - background: transparent; - border-left: none; -} -.chzn-container-active .chzn-single-with-drop div b { - background-position: -18px 1px; -} -.chzn-container-active .chzn-choices { - -webkit-box-shadow: 0 0 5px #6DB9FF; - -moz-box-shadow : 0 0 5px #6DB9FF; - -o-box-shadow : 0 0 5px #6DB9FF; - box-shadow : 0 0 5px #6DB9FF; - border: 1px solid #50B1FE; -} -.chzn-container-active .chzn-choices .search-field input { - color: #111 !important; -} -/* @end */ - -/* @group Disabled Support */ -.chzn-disabled { - cursor: default; - opacity:0.5 !important; -} -.chzn-disabled .chzn-single { - cursor: default; -} -.chzn-disabled .chzn-choices .search-choice .search-choice-close { - cursor: default; -} - -/* @group Right to Left */ -.chzn-rtl { text-align: right; } -.chzn-rtl .chzn-single { padding: 0 8px 0 0; overflow: visible; } -.chzn-rtl .chzn-single span { margin-left: 26px; margin-right: 0; direction: rtl; } - -.chzn-rtl .chzn-single div { left: 3px; right: auto; } -.chzn-rtl .chzn-single abbr { - left: 26px; - right: auto; -} -.chzn-rtl .chzn-choices .search-field input { direction: rtl; } -.chzn-rtl .chzn-choices li { float: right; } -.chzn-rtl .chzn-choices .search-choice { padding: 3px 5px 3px 19px; margin: 3px 5px 3px 0; } -.chzn-rtl .chzn-choices .search-choice .search-choice-close { left: 4px; right: auto; background-position: right top;} -.chzn-rtl.chzn-container-single .chzn-results { margin: 0 0 4px 4px; padding: 0 4px 0 0; } -.chzn-rtl .chzn-results .group-option { padding-left: 0; padding-right: 15px; } -.chzn-rtl.chzn-container-active .chzn-single-with-drop div { border-right: none; } -.chzn-rtl .chzn-search input { - background: #fff url('img/chosen-sprite.png') no-repeat -38px -22px; - background: url('img/chosen-sprite.png') no-repeat -38px -22px, -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(1%, #eeeeee), color-stop(15%, #ffffff)); - background: url('img/chosen-sprite.png') no-repeat -38px -22px, -webkit-linear-gradient(top, #eeeeee 1%, #ffffff 15%); - background: url('img/chosen-sprite.png') no-repeat -38px -22px, -moz-linear-gradient(top, #eeeeee 1%, #ffffff 15%); - background: url('img/chosen-sprite.png') no-repeat -38px -22px, -o-linear-gradient(top, #eeeeee 1%, #ffffff 15%); - background: url('img/chosen-sprite.png') no-repeat -38px -22px, -ms-linear-gradient(top, #eeeeee 1%, #ffffff 15%); - background: url('img/chosen-sprite.png') no-repeat -38px -22px, linear-gradient(top, #eeeeee 1%, #ffffff 15%); - padding: 4px 5px 4px 20px; - direction: rtl; -} -/* @end */ diff --git a/frontend/templates/default/static/css/cvm.css b/frontend/templates/default/static/css/cvm.css deleted file mode 100644 index cfdea1a..0000000 --- a/frontend/templates/default/static/css/cvm.css +++ /dev/null @@ -1,662 +0,0 @@ -html, body -{ - font-family: 'Open Sans', sans-serif; - background-color: #E4EAEA; -} - -h1, h2, h3, h4, h5 -{ - margin: 0px; - color: #343352; -} - -h1 -{ - margin-bottom: 7px; -} - -h2 -{ - margin-bottom: 9px; -} - -h3 -{ - font-size: 20px; - margin-top: 8px; - margin-bottom: 3px; -} - -p -{ - margin: 5px 0px; -} - -table -{ - font-size: 15px; - border-spacing: 0px; - width: 100%; -} - -th -{ - text-align: left; - background-color: #31305E; - color: white; - padding: 3px 4px; -} - -td -{ - vertical-align: top; - padding: 4px 4px 0px 4px; -} - -table.vertical th -{ - padding: 3px 7px; -} - -td.vps-status img -{ - margin-top: 3px; -} - -table.vpsinfo, table.console -{ - border: 2px solid #31305E; -} - -table.vertical td -{ - padding: 2px 13px; -} - -table.console -{ - margin: 12px 0px; -} - -table.vpsinfo th -{ - width: 150px; - text-align: right; -} - -table.console th -{ - width: 120px; -} - -table.userinfo th -{ - width: 180px; -} - -table.nodeinfo th -{ - width: 180px; -} - -table.userlist td -{ - padding-bottom: 4px; -} - -.clickable a -{ - color: black; - text-decoration: none; -} - -tr.clickable:hover -{ - background-color: #BABAD0; -} - -.clear -{ - clear: both; -} - -.clickable -{ - cursor: pointer; -} - -.centered -{ - text-align: center; -} - -.padded -{ - padding: 10px 25px; -} - -.spaced -{ - margin-top: 15px; - margin-bottom: 10px; -} - -.preload -{ - width: 1px; - height: 1px; -} - -.wrapper -{ - width: 900px; - margin: 0px auto; -} - -.header -{ - font-size: 40px; - font-weight: bold; -} - -.userbox -{ - font-size: 16px; - font-weight: normal; - float: right; - margin-top: 28px; - text-align: right; -} - -.userbox a, .userbox a:active, .vps-admin a, .vps-admin a:active -{ - display: block; - float: left; - padding: 5px 8px; - margin: 6px 3px 3px 3px; - font-size: 14px; - font-weight: bold; - text-decoration: none; - background-color: #31305E; - color: white; -} - -.userbox a:hover, .vps-admin a:hover -{ - background-color: #15144E; -} - -.main -{ - position: relative; - background-color: #F1F1F1; - padding: 9px 13px; - border: 2px solid #817F9D; - min-height: 400px; -} - -.main.shift -{ - padding-left: 225px; -} - -.sidebar -{ - position: absolute; - top: 16px; - left: 8px; - width: 200px; - background-color: #DCDCDC; -} - -.sidebar a.sidebutton -{ - display: block; - padding: 5px 8px; - text-decoration: none; - color: #343352; - font-size: 18px; - font-weight: bold; - padding-left: 30px; - background-repeat: no-repeat; - background-position: 8px 10px; -} - -.sidebar a.sidebutton:hover -{ - background-color: #CDCCDE; -} - -#button_overview -{ - background-image: url(../images/menu/overview.png); -} - -#button_statistics -{ - background-image: url(../images/menu/statistics.png); -} - -#button_webshell -{ - background-image: url(../images/menu/console.png); -} - -#button_ip -{ - background-image: url(../images/menu/ip.png); -} - -#button_reinstall -{ - background-image: url(../images/menu/reinstall.png); -} - -#button_backup -{ - background-image: url(../images/menu/backup.png); -} - -#button_api -{ - background-image: url(../images/menu/api.png); -} - -#button_alerts -{ - background-image: url(../images/menu/alerts.png); -} - -#button_password -{ - background-image: url(../images/menu/lock.png); -} - -.quota-item -{ - float: left; - width: 203px; - margin-right: 23px; - margin-bottom: 10px; -} - -.quota-bar -{ - position: relative; - border: 1px solid #343352; - width: 100%; - height: 18px; -} - -.quota-bar-inner -{ - background-color: #12005E; - height: 100%; -} - -.quota-bar-label -{ - position: absolute; - top: 0px; - left: 0px; - right: 0px; - bottom: 0px; - font-size: 13px; - font-weight: bold; - color: white; - padding-left: 5px; - /*text-shadow: 0px 0px 3px #000673, 0px 0px 1px #000000, 0px 0px 3px #000000, 0px 0px 2px #000673; - -webkit-text-shadow: 0px 0px 3px #000673, 0px 0px 1px #000000, 0px 0px 3px #000000, 0px 0px 2px #000673; - -moz-text-shadow: 0px 0px 3px #000673, 0px 0px 1px #000000, 0px 0px 3px #000000, 0px 0px 2px #000673; - -o-text-shadow: 0px 0px 3px #000673, 0px 0px 1px #000000, 0px 0px 3px #000000, 0px 0px 2px #000673; - -ms-text-shadow: 0px 0px 3px #000673, 0px 0px 1px #000000, 0px 0px 3px #000000, 0px 0px 2px #000673;*/ - text-shadow: 1px 0px 0px #000673, -1px 0px 0px #000673, 0px 1px 0px #000673, 0px -1px 0px #000673; - -webkit-text-shadow: 1px 0px 0px #000673, -1px 0px 0px #000673, 0px 1px 0px #000673, 0px -1px 0px #000673; - -moz-text-shadow: 1px 0px 0px #000673, -1px 0px 0px #000673, 0px 1px 0px #000673, 0px -1px 0px #000673; - -o-text-shadow: 1px 0px 0px #000673, -1px 0px 0px #000673, 0px 1px 0px #000673, 0px -1px 0px #000673; - -ms-text-shadow: 1px 0px 0px #000673, -1px 0px 0px #000673, 0px 1px 0px #000673, 0px -1px 0px #000673; -} - -.quota-item.wide -{ - width: 316px; -} - -.quota-item.last -{ - margin-right: 0px; -} - -.quota -{ - margin-bottom: 19px; -} - -.infobox -{ - border: 1px solid #B0B0B0; - background-color: #EDEDED; - padding: 6px 9px; -} - -.controlbox -{ - margin-bottom: 23px; -} - -.controlbutton -{ - border: 2px solid #343352; - font-size: 24px; - color: #343352; - text-align: center; - font-weight: bold; - float: left; - text-decoration: none; - padding: 9px; - margin-right: 12px; - width: 189px; -} - -.controlbutton.last -{ - margin-right: 0px; -} - -.controlbutton img -{ - display: block; - margin: 0px auto; -} - -.controlbutton:hover -{ - background-color: #CDD0E1; -} - -.controlbutton.disabled, .constrolbutton.disabled:hover -{ - border: 2px solid #737379; - background-color: #9B9B9B; - cursor: default; -} - -.online -{ - color: #078812; - font-weight: bold; -} - -.offline -{ - color: #A7101C; - font-weight: bold; -} - -.suspended -{ - color: #5B5F6B; - font-weight: bold; -} - -.unknown -{ - color: black; - font-weight: bold; -} - -.footer -{ - font-size: 14px; - margin-top: 4px; -} - -.nodename -{ - font-size: 14px; -} - -.hostname -{ - font-size: 13px; - color: gray; -} - -.unit -{ - color: gray; -} - -/* CPHPErrorHandler styles */ - -.errorhandler -{ - margin: 10px 0px; - padding: 8px 10px; - padding-left: 46px; - background-position: 8px 6px; - background-repeat: no-repeat; - min-height: 24px; -} - -.errorhandler .error-title -{ - font-weight: bold; - font-size: 120%; -} - -.errorhandler.error-error -{ - background-color: #FCCBC9; - border: 1px solid red; - background-image: url(../images/error/error.png); -} - -.errorhandler.error-info -{ - background-color: #C9F6FC; - border: 1px solid blue; - background-image: url(../images/error/info.png); -} - -.errorhandler.error-warning -{ - background-color: #FBFCC9; - border: 1px solid #C5BA00; - background-image: url(../images/error/warning.png); -} - -.errorhandler.error-success -{ - background-color: #DEFCC9; - border: 1px solid #4CC500; - background-image: url(../images/error/success.png); -} - -.errorhandler ul -{ - margin: 0px; - padding-left: 24px; -} - - -input -{ - padding: 4px 6px; -} - -input, label -{ - /*margin-top: 0px !important; - margin-bottom: 0px !important;*/ -} - -button.column -{ - margin-left: 1.6% !important; - margin-right: 1.6% !important; -} - -.template-option -{ - border: 1px solid #31305E; - margin: 11px 0px; -} - -.template-name -{ - background-color: #31305E; - padding: 4px 3px; - color: white; - font-weight: bold; -} - -.template-name input -{ - float: left; - margin-top: 6px; - margin-right: 5px; - vertical-align: middle; -} - -.template-description -{ - padding: 6px 7px; -} - -.confirm-text -{ - padding-left: 24px; - display: block; -} - -.confirm input -{ - float: left; - margin-right: 4px; - margin-top: 7px; -} - -.toolbar -{ - background-color: #DDDDDF; - padding: 3px; - margin-bottom: 8px; - margin-top: 7px; - border: 2px solid #817F9D; - padding-left: 38px; - background-image: url(../images/misc/wrench.png); - background-repeat: no-repeat; - background-position: 4px center; -} - -.toolbar a -{ - display: block; - float: left; - color: white; - padding: 4px 6px; - text-decoration: none; - background-color: #5D5C79; - font-weight: bold; - font-size: 15px; - margin-right: 5px; -} - -.toolbar a:hover -{ - background-color: #4E4D69; -} - -.darkform -{ - margin-bottom: 6px; -} - -form.dark, .darkform -{ - background-color: #31305E; - color: white; - padding: 6px 0.5% 4px 0.5%; - font-size: 15px; - font-weight: bold; - width: 75%; -} - -form.dark label, form .filler, .darkform label -{ - display: block; - float: left; - margin: 3px 1%; - width: 45.8%; -} - -form.dark input, form.dark select, .darkform input -{ - display: block; - float: left; - width: 48%; - border: 0px; - margin: 3px 0.4%; - padding: 4px 2%; - box-sizing: content-box; -} - -form.dark input[type="checkbox"], .darkform input[type="checkbox"] -{ - width: auto; - margin-top: 7px; -} - -form.dark input[type="file"], .darkform input[type="file"] -{ - height: 24px; - font-size: 13px; - margin-top: 4px; - margin-bottom: 0px; - padding: 0px 0px; -} - -form.dark button[type="submit"], .darkform button[type="submit"] -{ - float: right; - margin: 9px 7px 7px 7px; - font-size: 15px; - font-weight: bold; -} - -form.dark .field.disabled, .darkform .field.disabled -{ - background-color: #444452; - color: #B5B5B5; -} - -form.dark .filler a, .darkform .filler a -{ - display: block; - color: white; - font-size: 13px; - margin-top: 12px; -} - -form.dark h3, .darkform h3 -{ - color: #F1F1F1; - margin: 6px 1% 4px 1%; -} - -form.login -{ - width: 40%; - margin: 64px auto; -} - -form.login label, form.login .filler -{ - width: 40.8%; -} - -form.login input -{ - width: 52%; -} diff --git a/frontend/templates/default/static/css/fonts/base/icomoon-webfont.eot b/frontend/templates/default/static/css/fonts/base/icomoon-webfont.eot deleted file mode 100644 index a91cad99ff5f1bd2be4d43e66a02747b396859d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28264 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 diff --git a/frontend/templates/default/static/css/fonts/base/icomoon-webfont.svg b/frontend/templates/default/static/css/fonts/base/icomoon-webfont.svg deleted file mode 100644 index 76a5fa3..0000000 --- a/frontend/templates/default/static/css/fonts/base/icomoon-webfont.svg +++ /dev/null @@ -1,175 +0,0 @@ - - - - -This is a custom SVG webfont generated by Font Squirrel. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/frontend/templates/default/static/css/fonts/base/icomoon-webfont.ttf b/frontend/templates/default/static/css/fonts/base/icomoon-webfont.ttf deleted file mode 100644 index befb0127aab6ea2005ee36775e5059c130e2a61e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28084 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 diff --git a/frontend/templates/default/static/css/fonts/social/icomoonsocial-webfont.eot b/frontend/templates/default/static/css/fonts/social/icomoonsocial-webfont.eot deleted file mode 100644 index 3fc372d3f8ec06266c828a4cd45ab204b7170581..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24832 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 - - - -This is a custom SVG webfont generated by Font Squirrel. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/frontend/templates/default/static/css/fonts/social/icomoonsocial-webfont.ttf b/frontend/templates/default/static/css/fonts/social/icomoonsocial-webfont.ttf deleted file mode 100644 index b595e6825f16d7a7b70d8ebbb5cf17eb5dfdbc3b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24652 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 diff --git a/frontend/templates/default/static/css/fonts/social/icomoonsocial-webfont.woff b/frontend/templates/default/static/css/fonts/social/icomoonsocial-webfont.woff deleted file mode 100644 index c711401d12665d6b8654f7be859daec6a5a326fd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17452 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 diff --git a/frontend/templates/default/static/css/img/fancybox/fancy_loading.png b/frontend/templates/default/static/css/img/fancybox/fancy_loading.png deleted file mode 100644 index 2503017960b3972499d3aa92f89953935ae40934..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10195 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 diff --git a/frontend/templates/default/static/css/img/fancybox/fancy_nav_left.png b/frontend/templates/default/static/css/img/fancybox/fancy_nav_left.png deleted file mode 100644 index ebaa6a4fd34e51575a01da366312c20618985cbc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1446 zcmV;X1zGxuP)R`@usIzf?P{x4#0gFqr~|(;IJySuwjr=+Ar78e&sHZ(Lu;P)*wKU%|U#jmpg5~Q6= zNl8{#mZGz>Q!_F$qJ8n=#Z9x>Jn_n|ZEtTsSzllOW_Wn`!@Rt_=!l4jAl`tKb-5%L zv7js_CMF<1KR>Fcr{|nbr~AR4Y-MG|y0EZdwI6@^^5yrikSZ}TQ5hH*C?{R4Q{?KT zKD6U2SFWfB2M0g0TCEGD5GUP%Y0a>J0W!M1fVuVU?d@ix(YV91PjUK7@OzY8E)OJ~ z&Q30n%8njA8kC)#t?uvd&xMXHQZzI)WQmTB-n1vQM_gQ-{_*3-7UA?*_bJ9=m|W(F zT+IHE$H&L3T3T8zSS*%BTHM>)YZi;eI#;9uNVch|X-go#ckf=VQmKq2-ORBYaGo52 zejyg&!SS;_ltMX3~N9_#ORsfn&tMTp}T$j*yAd)6-A(_4O6g z0=-^ug|9bVkxorbSsNQ0x9sPG&EF`laq6qgf=!d ztnQGKnVtDqz_Vx1Y=Kr=TU+Vx?;nS;5H`1m#Lv%9fqI)#T3Y%!3C+yRSpE-E!h;77 zwm7Z1{&Y;%TkkIqz&m9sAKBbnCkzsHry#@vbY{a-wI?zu7 zloV4Q9NtQWLUAT7Ev=G-*4EZ6|HZd^F*!MDB>C#<>PDGN_5sGi_Yq4ZlG7@css!ck z9};wyN`LrygSGPaaLVfqXl2Z+Nkm;ygvo12>(Bf+YwDwC`Hbwy5foiCI>(Z2*F z+nZVe;)K}P*aF#9Y8tUS3{lK|w(!NULrkdP#x17leSb zXU`h&IIwaw4`8eqNV6{>BDOh|vjhZ0E{e&QDDu0Pe|>%Zmb;{dg@s0w$z&rPA0K~+ zu^J$UblaCq5g(ljxEe?Y`8AmFYt-vOfqZ&;+Eh?bV07kp3Z#jN34Zfk3!OW_7k zM!Hz%fopN!Lja&lI}y+lIZjBszTeT&@!Ra|?DQ)q4Us*EN5ey8M=zh0NVTlX;X`2G z(+8kuN)-Dfn@v@Ns?$arfE9ks%*_0?uCDGc0&cYN@bK_KngiO{r&oDx0_$@6^x5~= zW5Gx^5k=$2z;)mYpdQiR47B2ZEBzOVMD;v(on_N_Z6xdRarMj=Ped`)=n zv4Dh?$k=SYcJSdjDa(58`F?t%ZzxBbaRs;9zaA#)un(S!5dZ)H07*qoM6N<$g4RXF AD*ylh diff --git a/frontend/templates/default/static/css/img/fancybox/fancy_nav_right.png b/frontend/templates/default/static/css/img/fancybox/fancy_nav_right.png deleted file mode 100644 index 873294e969db9160f5ddd4e1ab498ff60b080e3f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1454 zcmV;f1yTBmP)Wa6`&Z+!IVkxf`V#(j>y7#5eg z5*PD+C=wGBwT+F9xi*_^fd=>X_FBba@wz8b0c3ma+OG#c&LYnSBp_4S(*6BG8m#QpsI))yBSw}|WBy?ft)>pk?VIMu|0u-xC@UxO$< zHa9o-0~vR8bXeVyB61x;@W6T@vgyO$TgWvPslhu zJ>BGvFeN3$D2UT9wO!c-2M2E;RvddB6cm(&J}nRg`1!DUaA;_#J})n?kc`&W*6f~w z$XoI8@o`6>)z;Ql1O^7iqc4Qr?IQ^Y2vDQmrd_^#`AagIo}RXO6Tw=o)=2K&OZ?8A zJDVKcH{^2p2j~ms)bf#Ff5Y^8{ZZ7~8Zw%koV0nHJ||9`FbS!%u(0sL`TfAafI}Du zN;}#qfQDkqhr?T=R;!O@W@c89(aOq-SHe5pO)Do4INRL6f8R{+tE;Q)Wir`E=nLN^ zERjf#VBjT`yZ^}0T`IW~brs!I17PDwDHNtJpz(@u7&_Ci&*x`nXGh4eva-_hHlhTo z>wKX6jrLg})!Ef*2q(qH#unh5y~V~`*!#E25W2>+0$@y%jAkE;d^% z7KiBQ=;#CV)c|?K?OZZNymTtyIv@+;=i$b0QLhID@u{gPOF=<_+1^cd)FbceJt|Pr3Z2#UW)pC9hbbpr%#_w3xu>9DucKZSqKjwKC}oa!!=;B zxw)ARh3h~maWUsB$KtMw06>R!GGHKatdM5?eS3TRA2TyEQ!m{-s9LkQG(13d^zuqc z)WBRWF9N%+J^)=)qIgeo*i|*CI?Xfzc;V-hCr|!<<;s9veooizpgD1ug<#0dV!Z diff --git a/frontend/templates/default/static/css/img/fancybox/fancy_shadow_e.png b/frontend/templates/default/static/css/img/fancybox/fancy_shadow_e.png deleted file mode 100644 index 2eda0893649371f8d92b92976d8542cdd1b601ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 107 zcmeAS@N?(olHy`uVBq!ia0vp^B0$W@!3HGnP3ltxQbwLGjv*Y^lSRZuwe#}JO|p{EaWGAM`~zK|Yh zF7SQ+m+Ig>B0@o-N8?trihfzZ+Vp1~`{zf0o*#X0$hUAi%N$P)W1wCJ22WQ%mvv4F FO#q)zAp-ya diff --git a/frontend/templates/default/static/css/img/fancybox/fancy_shadow_ne.png b/frontend/templates/default/static/css/img/fancybox/fancy_shadow_ne.png deleted file mode 100644 index 79f6980a3ba5c43de120d963dbba2516b8f27ac7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 347 zcmV-h0i^zkP)dR9Yb&V8f!h)aDezHAsc|y@|hdQ zYJb}?8~~zFbQ)ku!Ey)KSukutuvdZ@MKMX|x|A3tPyx?YVhN^6z!Mi4Mj2f#%<;nh z2{>?YAzu|{u^;Oq!;f7Z4tPBpJEmZ+^GZ#$=9nz(K+UmK7}|u&EPi%aRt_C3qOFB_ zHc`~N>51%{?ijG?xsHt>MwRChgk=x_z0gh3O2xSL)-6?+2LKZL74~Q>MZjWtwukkA tvjRC=&j+0R$&bLyT7MhBcTXDISHC&xXU0&5CWHV0002ovPDHLkV1fX+la~Mh diff --git a/frontend/templates/default/static/css/img/fancybox/fancy_shadow_nw.png b/frontend/templates/default/static/css/img/fancybox/fancy_shadow_nw.png deleted file mode 100644 index 7182cd938ae98e7e28c65a0bc55df576042ff9f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 324 zcmV-K0lWT*P)2-&4CO{qhKP$XKD&mgeXEM77>~`RA}h@U^Z##eQZVtM>a-K?QT4 z&(8BFf(rD5V61)2I__wHYuRwoaDIqw5Vdr_JSDVr){#J@r;{vbDL|tRyCiirf~4OF zX-l=Ecm>@yR)1nSMt~dy90Zb`^`)TQbhf8jR@fA!l6V$musRyB9Y{p$SCW}!$3==V zk)fW)Xo{s^ez$t+XhmZj;ts)!kTokvmM>z)zt70000 diff --git a/frontend/templates/default/static/css/img/fancybox/fancy_shadow_se.png b/frontend/templates/default/static/css/img/fancybox/fancy_shadow_se.png deleted file mode 100644 index 541e3ffd3e88224b34a4d2097c66a780e6060aeb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 352 zcmV-m0iXVfP){pM9=`y8<_IvWD02WY@RZ<9dgjNmAB|sYF}Xw>7Sq@O0000eMf9z;FC21=)67q_`W0*0KnS4AR00W2`RGn3i8UfsEegLO@ zPhds?2e1Tm)FK3=bymIAx?X=YFo3Mdh7W?@I#8s#svp!&PB> zwah@Ngd|l0N4SCfzvjtQnd$dZ0yM)N$X+lqdtN!Pt{Wn*_`0U}m1^#r1 mwpaW{;a?9KKt^WrpTAEd?0j1W(3L*`0000P{ho=rRL|66mGO)=r*Hk83F#~lnc)I$ztaD0e0sy?& B8X5oq diff --git a/frontend/templates/default/static/css/img/fancybox/fancy_title_left.png b/frontend/templates/default/static/css/img/fancybox/fancy_title_left.png deleted file mode 100644 index 6049223d1ec6af46e100499c01f6489c9e2c6240..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 503 zcmV+)0005LNklqcp9&~$uJw{{rUub~E?-XJ#Upm4Fe%-Gl z!u%tb0N102a|s5;SPlQvJlFCTBbvYaK@wIW6Gjx@?i20AlVDJcHNfh25WRlbF6CIq zv9_ZnqOH`}ppaUR0@%ZcM9zpDt2uQM>f+Z#wIMmyuui3DeoYXWE|hQ{D$te=Yhgkq zIvyj+$t8T|S1wITzUftNOe(E+Qjn$kDotY;I5}1lRgwi=?K26ke)djLR5W2|!7CVH zJ-`tuAq|`lK978y+CnqGNCkUke_%Gig ukvFM-ftpWh!il7Wg7kz7Y?7xB@G*olNlgoj4E_Yv!rmdKI;Vst0Ha3^zyJUM diff --git a/frontend/templates/default/static/css/img/fancybox/fancy_title_right.png b/frontend/templates/default/static/css/img/fancybox/fancy_title_right.png deleted file mode 100644 index e36d9db2a7c6e570aec993d3665cbc13620115e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 506 zcmV+)0005ONklxjQB-g>5=x46nGBwseihc$zfzvTFh(=tCRj6cJ4M&ASrCAq-HbokPnRBAHVa2(-|l wYU(UxfYLN;KDSr z1<%~X^wgl##FWaylc_d9MY*0Xjv*Ddw)7kFH5l+P-xcE$W)3=fYI&uMKVzWNT*W|n zhqlRY)q0r(8Mg&Fu_zpISivgz+b7g)c6G&O{~njE??Y{u-MM!p^=9_W+X-j8mhfK? zj`H2Yy;kp%)!V-M3;EVThyB(Z@o88wpMja-vy^g)SgE!<&|(HpS3j3^P6|6H_V+Po~-c6$N>^IEGZ*^681?Yf#{6Zf~e!I`r4y-J+3m*Ue*gH=cNZ zzpU%p61aCO%jt%FHUKW&bEWLcUAGzK?;SYE)E{9#W9O8@uj{O@89qzNU(dkI YVCW(7-@(*!CeU;SPgg&ebxsLQ07`N|KL7v# diff --git a/frontend/templates/default/static/css/img/fancybox/fancybox.png b/frontend/templates/default/static/css/img/fancybox/fancybox.png deleted file mode 100644 index 65e14f68fd83b87f75c22c0c074e7b20bf20a133..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15287 zcmaKTWn3G5&@B{~;%>#=DG;={yF10TIJA^Ni@Q6dxD|J62@u>uaf*A8(n3=TLErSb z_x;^(_f!7a-E4NVIcLtyoQc=dQGJd}gNuTK@?2d_$pHDPf`Wp&gN=z?QPI&3p`b{G zsVm7Fy<0o~g!9hI>FTLkeXUCSdR`&CQ|`OGxubq*0?(JYNfXC5{*R2zWF6(Xx-T>T2>J&K|Eil&n6Lix zEi`275C{!+X!)7CS*e}=H>=RA%jh4XH)T6XDeap>QZ zuCvB3f1j3`!i;@?^<5L}xzP0QOB^9?Eo@W0)j~`y+S=c{by#*Uoo$DiKILjfWNDo7 zGyqd&{!#&d_P|oW`zcaEy@;d2w|y57JdXR@m44ad$Gcyz{_I2&GK4@SU`c&Hd(VQh zn#vD^;#Q75G(~U%V%iDZL@L=Tw9hMZzCDFM9j?16?PmU()egI=v!xGRv3`4gH%jYG z*XB5pVfpH2C-V9c_8xe%8@rGrVEZ`G|9I83-+!6xowV&cMz2~U_i)uGJ@S3*cKE#^ znI+w0?#cY$pob>5_bg~ZYi`wc9G?Q_yI;!^xaByQ6*CF-F7!LoI6}!W%HOm zn)78kmGgzB<<3%Ss~TX_waZ9m05q-1AFMtfR>_#;a^F#k^#p)TMJWuMY$%F z%=%jUAKs6$O@3rjj7b9g9%p$QdV5l>n-#J#o(%rG=J6u=#jCJnOQN^y{2O0)x&Yqprl%*#!!_|zCVEW-yaI3-X52yuJ!c9 zz6iUCoS&ax%2yIfhCSZHUTwP$BhI})gzWuY_kNXgz1*K3Fz$UQmp8oH;@~mz(&g{T z0*5JN@$_j~RW(h1-Lq}xFRb{(q)D{SX3WtO`gObC;WQ9!DO#{`WS)_(*3(jJ3Lmxc)?Yc*Af>4 zXe$gst9FHmyt#7KrhMt(-!b86SnN$#XDi-;E-tXxuPcS#V1!6;)8@e~HvOb#ByQ&M zcK?UuX`Ca?v*Y!yriExsd@4QoJ$zOm`&Ikyszd50kEry*&*@-WOMQL)1w}jVgR0J4 z{o{+}~L{4c-2cW8G<*T_5Qs0y+A@Nh*tb7dX$-KpW;Hf3Q%V!a9Rc-`M0ex{kr z|Il@RukPls=sp>NOZq~@c{)Hzjg^FF1czDSutYx6{UFoI%G9*$Xv+5SH(imbfq_9E z94fW)v+sKAibW+UZyC+*=Fjjeg3ZG`hZG6-&ECL;o_yU8w+oxRXfU4syJ9}5*O&7g zvgp|981c0xY6-ssnoDEoubAhwe~C1Ph{=UKRM=Dc2hC?qWyga7}FOlQ163X0-*oqNwC4Yek|~X5e^P*VcQF zkUhPwZc!iLY%3QJ2{Ho@I z%dr=>z!}k%0N@^JagB=^_|LrNx>w)TvQA5t8{oB96C=sH!(KuDB6Dd zQ~jz>|K~1IPiLg9-A#L4s^n>nME}i*z)>Q=T2~fvkfEN*E;={T9sKDFYe0s$@o-*( zoEh}zmtQ}znV$kaO$S!N?@O$4?1l{p$z5d4tKilfaUnH1{9i^XqJR3|Uyi+nOHf+* z3}Rk8>MrX*)A&fo;0NC5B%=VEvC=)mu&29i0Z0O`ytHlX;cF(qYo*pLff_-FgJM~; z`)Tu;nHg_i7E0>?{jNgCtlz)6Iu&!AhGYMFn3H~ zJ`xR}4KY&CDsFSI%$sALezXs*9+#c^b>%GE&f)276Jgv<&zGpyo3TDQ%pvJt+&`&! z{Shd!jqXoDjbjmZGxVY}3?{YhMhsiwHT=CS0NllEL&%itR?%i52HSB+*%#wyeQC#y zyVd6XT%3pt6!g3rD_gah3DtT()o>Rv4_d#VyNVK(HhUM8cE8n3B|E| zh}3;3MgAV}^Qx*Ui6_lVS8s3c9PNhg`}5c(1ENE!P=VRx+IEQGL91)lZX=qnPZ9q1 zw5yZO!no+NVgMz&qw6SP=(&e&;Z$>q9{zXi2*K8@yh{H9B^0|1%fk897`kfNUA1#u z!{IV-MMi{e(bIe`_|JA-W3M}=w#mV-ajYBW{>-4l+bof*j=QrEjP12y!e;c>Z&;;V zM^8p8Eobfr3B$fYlBk55<1%$+d-RJ$p7W&h#Y+@F{BUtO>E#R`VBQJ{x&;Dkx&$}H zhOSgb-6>zcMD(`*QoD<9_c&DiV!qaNaA$kj=NWEQ*MFBH`?d@mR1eODIlr^8TQ&6! z?Zu%cuPP3^JxSi%Ej-q-8cKc578ijX@M73*YmY660uq2%TywHd$$rc+JHxc=>e{aVhBM(C=M%@zXsoNWf$<@*&Si zfBaE0iEyQmu4#8O^y-Lkv9sT1-MYB#6SxX;Zup)VKSW5h^`mE2w@xP1CKEEQVqieE z-|qCmnZTox4%cD$#KBz8wr>J;jgQ;vP03?pziiiZf^9Ya9A+z3FRHlvj1|4zu(0z) zk!NHd77L4tsP$B}E)KJnWQ(xqc50Cd4qeLyo7NSYC(nUG-q(2o8G`N>r}!nR>VooB zgQ~`?w`)w4s9nI9q&{b&YrC(Q$Ybmtlea49Z8$%cgf)F5FpZ`{>nRg=iw*s=fI|x~ zs(Z3*nj?^gW{3$m)_kYV>2TDRihE(6$#=dJLrPn*^e2K-^tNl$r_6h8P?Ida`U7x3 zS=_602o@XE{9@RMKYg?j(ay&?`SPJK7pZm`;)Ul4eqxd^hX@u12smf1_zTYw*g(E^ zM>kZdJXPfif?ct?IE8t==XZliUxmmBke(C$Z9FIp@<~(>*En>z|3+X31BNaT$SY4M zNkx5vUujEG6+;x6sn725w@+MSoBhFHH>`f}h`>2f5Ojs|e21azA#TBNt+Y$R*0x%yhV(lOeN^%?TxVUzBBxe;St&eUh^Ev#1hE2>Fug5G zX0^DLvfguwUx&H2HtZ~8ygSPI>L&0uAoGh!j%9nnc2Cq}!FhthK>F_tp1{3$4vMKg z&#>U&p2+u9cG&k*{#!$}l9H0kukL=dX8|r7HIXq9h#IinounmdhBFKZqZ(xogX!ubN$md{4_8j{mQ2-|aUw4ZOE9DntRlBlZA$gv;G`P+hM&gLaJ zWH?F#8W%iq1I_poC(54AEv(1nYfRsk*%bleNu;9*L>Ou`FBBpuWk)I=cHcRX%htu> zoP@h!b-onASogDD5C4iX*0tkphDUA3I5@(^@qjz)0#*F^F*g#b`UY#EgjQIY+24A7 z@C0-HO_z0psDI#nETB7|@i%u8+$!cBZ%r)7`}NwOcb-^o2fg$I+KL&PkO&kFw(ilc z$Pd`|O7c#T*p_Qo)bpL6`-gnArJ&|QEv*&j1huMidI%JOS$n?YrAN37{#C`;uDB{; zyWOtHZi9)3tMHEtWzN2Rxhf*2*O&)7-)tCvtW;~KmwmZ%hb;U8DrV3KV zdtfrOdSFhq9-+a9j6eFPV+yUfr|TerITV2O=`OJg#4kzEg62zxF!xS_aG-5XOH~Ph zBsQi&)mfq6xujyijEGi$)3@y_|G@Ghobn{i3^-dSYmG9`2pZe1n%zFSvE`uUrBIaV zzXbKIyw@biKIOz>_^ar2;dpqe(DIya=(rwN`IoT-avuKeZr^=d$8Df(#4 zQx6RhoGc+FO>z+;V|&$8)7p>mH8pBo%xZ)Y?4=7jd&_3?KfbrE*aRPD!;PXec-5VY ztVuS6m%vD` zoFWnCLFAr|)tHdxa5LU%cnR&ZiDzEf^=`|CrdD4p#UQI?7Za&z^nDH^+;r^D3su@r znNEYJ)kW{!!(ADt52^N9LeqKWImiG2VNz=zL0mAJRx* z8p&o_w`Su}@UH6F+V;~J(5X~mftrXhiiHfeuD^`ZY<+loNH*~9wr-rga=%Z3<-y<< zn<#Z^Y$@Kb#19``Q4FH?rhOufTc3YpWm*cXIFeJ@ad^K2e52o)j-K)>zc7pZj~^G` zN}2}Q!aIUl(WZTwfU!nMU4Z;+DCMg%DBw*12}kmh8YrZ|cLN2*+$^atj*cm7sPq|r z!@1S7qXTZF#KqqJ+%T3`7D`^>7QKACwXhb%Il+maJ>}Dw5jUdMmERLj z^lV00V@9;Xs7jY1Ep8Y$fmYG^lDsBvI1vS?m0xgoY-$^Nh5gVju6}uVM$$eus+G0o{WIi^N?T&>ddhjX8|G3%UeA>(3)XB+rK zKDyDnGB0;#|Bf=;icdxo8S7+luH)X&^pZWQ_~Xo*G}_LhgSLh+9`{-v^!kk-(0dUyojhC0T| zD}}kjs(flk{NmN9fRNVyyKHy^dv>f69trQWB1iqI#6jx{`W#g|f`xve>0Chz%LT-6 z16?J6Am3OFW0`njr%oD6(|&DMv~nO5B*63L(=mob?(1$ZRh_Jh@d&H8Y+Ht1G91U- zr)RnFP0uj2WH*g@0|OG`0aJB4W%OnBA2X}U>TL(WFE}iWyCFS6;IA&P?Y_p?-q^5* znWg8?Fyl)FvOC2t(#ph^Z0U-Dwi{nMj3&kU%UHpS!oOswQfMTT2^J-H9ROFw-S;XpY4@f8S!Yi8jepr(*@yLuH$`62eH zs=Fa;YwJ&=?`ddhO&=~(KWKTq`7N`Olzm}kGvsk4^Y`r>!Ni+bg<Lw^6bY>kq~e zK=)vs&g}A91Lh< z+m;C)W8{Ihn^!PSgS>g80px2KK}N9PG)aRaRt|HjarO7-*rCv(TN+ZP<6N#M$$B6A zs*me>n>lpV{^<_^6d~Q6ihtG^Zb5StlnX1~-C{|grsBLSxxVjj0{%+cP)3pdxjVml z8x*(v7GJ6!{f$k7sd#QDuO>} zjCk;mXVWmC>n|fihn*Q_k(|}_nAGxdW!UQDM!>b1V!qV<(I@uw)o7;<*Lc9rFofpP z%S@Qp&tSpMhU_)0W+)Ph?=;TFR)G42h4ctdNEiA9D#dqL@?mF@H@9Ys<>%N#Dxt|g zAut#aXWs{Ga8VXsMoFU|(1^+dIpAX63*ceSA>&~)_(lp6jjmkXWOFvxwEdUX*?NW2 z=ZV{4N9%bQI0o5eZV`+Mn;Z?AP*zqeNNX2ZL7)4_+X;ZcHxz@joH>T)cM=9 z72M&=GuzfZU_9o)u0A0lG`Bm0IOc{Vi@l;6y}h?Yvf;Onxi6SOr*rsFF)5PIkV#9N zrX)vLEt>krTP0iwf<|vVo=;v{FQ42s-D9UQfbD_^r)hEW8ZTXjv{H4&_I>tlpVH9#F&N4Mx5=VwieJV!h6tl`gSKxTOwV`o(`2o(?@Ny=y zWz^8C>;9+Ep2eFt#`@gx77)~_urrdHT1G%!tarRQ!E!)xm`N9P&70;<;B^6}eqbG+z?~l!peI}w^v&MxDP*abNyuhW1CN~d{X#xgc z=F8VWJ!?Jp1<@~jb3YB8lOU|IMn&%YwcWZx8@m-Foy28C;if{OC||M9%}3}| z`oRb6TZ8=@mvzv-(9e9(YKZ? z-vm1-c%4+wWwBce+czuEsU7#ZolNZ~Qvpf*uRo`4-v4MbsahDfF7slbfEYv!G2GaA z?6Wc{QDP`iGbiLw}s_oFyv-?|ms6^HD1|!Dy9#g^T{c}?J5~f7vU(5GC zV17IMWmm@|el+7OV(#hAwdm10&Jc}t%V-J46$q=`^s33gtYB{V%vmKCn5E5>r!d|MS7TPrY{TqUH6$ zGgPk<$Lpg9B@a}pEw6^?p9UZCWkl@+>Jc6vebkQR{ zrI5U>EiY72u%2Z>utv};v4>8~{s+{g8rM0@@{-nnr0@sP8{q^ZM-LI?R^314!%h-j z+xtncjPhC~%0 zNpU>;J@(;LL4>Tr45BwJb^fJ&*1?)RvOp7&Ml3cV3iIGY*R;Y@Zld;5=Z~IHm$B6m z%V}kK^8^0g2W;+bWKOFW+F<c*}T=l;am@$VV6qC1M`w-a#xbePQi{EFHHjQom|`GY|TZRcV@5_-CB-B=5o_+RK=rIjVJpOT8sOyT5UG#uDp;6gl)` z913|no9~ZWf8{*flTYOy`!nVDc`PyTmT9%}GdAq&&GUM(l6@DHpwTo+X zZ#irZY^YSIpIxJ0ov_Ei*^D9tvsx<35zUZbhsHPf+7 zi&0cdDeWsq^18ZyT`hLYV^ByNKln>e^i4Ci}8GT3YQlH?U7Q$Xsu<#qDkoc6=U~ZFHB|&km$6 z-*oTp#N}ZX_Dj)t%s*MnW=N+-K#%4dFDKR zYPf|riI{wT-URu9@w-vh1!R$Y9v9n-Y;|Keheeg1$$9R%92=NyUKlkPEE_iX75#}d zAaHv?Bb08=OXp40KS2>RB6ktL5_hns5Lql(=~k_r|Ehg)Aqu?Rpo*jRr|HE8eWFwu z-H3UhwoxU?tvISr14caeJKk{j!*2guwT)BMLb2}=wA}boC3ITtTtku9?gv84&4&FQ z{(|6_`ZQv!?E%qcU9FvNm21c^L6##)5u5vj#-_c2B!l-2iYX2@ELZJf3Egea@K-|I zDc7u97JVg8+P=&&PWAukavlh#Zp?%e52NTVA>#I5tu{Dh&(OqqshoI3F^l6sb3HB8 zbgo#8f9wl7A0)gZG@-4VLCr8hDYIo^h1gRj3ZbR#>?xyym5z)Myk|UvI4m&*Jr?k1rD{3L+wq<+nC!Mv6&`Ic4+YM*Kz<5y=gZLWqT8)5FN)x0 z#J_fgUq`_^(5c@bvP(@UTRDQ98fzdF>uaD|^+TPb`21K#e1F;o9@!b2>^o@?(D1? zd#K{P?6#n$L(OR`rxK5+uIUb+ADPd%PqRN-ZUJn0e9IsSRNa~-tKgBk9UT*Eu0>Fj z2mDL1C~L0yW_6QlKx;*{Ec?HWZR>pmr)QID@jVbu8IpgSl;5q>ZrLObX9NgUdPd=h z!p`Q5Z{I1QXvhFHQ=|XA7edbsj@yk6|I^JAO{1fg{(3jtP%p#7hZFf}EdA`-B4?<6 z8w{>V1?r?f=$;|f)cyHc%hcd zPpR+0(au7hfvnhn(RkgB7>VJgSGwUMG~2%#9$%FMy$AADY^Zm&)X=& zfoU>Yb+R@=J>w-KE>iX;{UHtlnC6Vl=bF`uol?VtGmt;j4g7d}1{+*N9yak)K8sk1 zA!`~`M6eYe=-SZ+xN>3~>2bE#{*Jz(z=sb?`tisyB}j}zl;%nhjiybm%>Bt%4Imry zEdd>F8Aay30vS_>ilbPPhS^~^hBq2;Zu)?uG=|-2c0cT19`h^2O0juz>1l|%y5H02 zAKP!=ZCzV5e*HZeWXh~!hdXqEcg|?-BnII5Q~7y)>Uwc+xR_{ljArL|cMMAmcz*B9 zzp3Y_AlN8cMes^Hnh*b(kH4SD!mdLzW}1)+T_Z~z^(T9NXzuEjv8lD_uf{Jw719tl zv`RP-1Vt3Qa%#u0W;ub}DQ{YWfXaeYZjSD_&Pq!k+rb~KvjR!|7ApLSIUzHqTu5~k zZlNNS$SR;_M~4^gySor$QF19GPCJE9DfugWpS>qSB`n-=up_e2oV*lIm#PNSaEIz| zN_s5qGqgEFUSVASNv`Ub>VC?U-#HIRFN|^N1xmjLmE!K_$*>TC5_jwtCKUHv8d^_1 zs;1Q{D|ejt{D~+^C1`r{oWan8l<#~BPROc2kK>kbDn=DpRuD$}-tHq_3muSPQzKKs zFh$MNy{*XI)z$0{X;5fNTZn|AiBK%m91t1NJ)ccRWo@;nN^Hh*AT=5_7*?MJoYl7# zsG&Iq-5+G?@_(+awcx@U=FOyw5c4=US|ycM8ob=&k<&+w_5qtc_h9O!R7h`RSs|VF zIsAH?s?Jz>r}oT^kGjJzVdVGe>8WvnDz(5nJD+a38C(|0l@k*==(J-nfnvA%39?yt zd~EiFG(~-#Jv*>qQcZP)a&ksBZe))MP8-yQlOj4rqrrwD*ln zP|O<7jtX+3!JXt^M1rU4hvitgY48W)YMSr7ur+FbY_ZHqK32Ah=X_UsEIwo?x?f`5 z?4Pz2aEVh+&?_0;#=m-@UL%17-O;O-v=#VygX-}a;_ouc|AQa`J5XkOD@@79zCe}p z3=yNAr?&)8?nO4ORY2auh*4&!_#Ti2DvkwVo&KIS(tiHU0h*i4Rl+=3(mnjW7hwC1 zAi_DOVvnXn%EoQ()PtqtWt@3b&U-hqMYkfArT7a$@}~ zO1e%1uyy|n*`t=U!pne0%(E&?U;;R4>_{8Gb7YJrB*8zqn<5xV@ZOICA~tRLBSPtz-WCq`;lH&q;CHLS;k_ z&+tksI(dl8o1;tX^u$Sr(RicInuW6*AqCCMF`h#h`*AG{jfN?|H~eScV3bxjcH^9n z;(iMHcsMdAOk?-_B{#nB<{mIJEUppDRVjc3FC3Fnel3X**H6t`9$?EGSx8Imi&}O=D)3r}Mdq_BADjr22HfLfZ_yKoXDDvr`}xxW)WHPO7jgr`lKmh7b=wjb z@ok_#*2l7T0^GVbAg7TXh#%b)>+Kl!&~@BlHSKp3tm(L#f#j<1W3R>%qT!W1Oh)X` z+@Gonlml&G@O%(>1cKO8qlXeW+RVzRbL@p6Mb{tDhx`2(Q-kKEViU@7p`5M z&0X7p$-HSH$$aLDmM21-5#m&ky7QRcF49O50yET=SsFnVaw!USCMCB@w2z48G{dnT za_kDvMP;FhA~z!M&M(Z-$_&=l);?ox%USH#IFkKmrovOF_<)$Q&2cYswDSj7S+Q=8 z&mipO3k=hCZU_cV#hdBUeysHv<$ORg{Fl5jMgr^fuNs}q5k?;gI!3xBZ2g+@*I)Cs zQuvu{A&rl#d**G<4R+bqHa10!Z4Irher%O3n{Au+mL#mvkg;Y~!4Ls#_{9*RK#`Ec zD2+^9X+~ecKl|VmAhu+cbUrggXw*VW#uhA#v;d}zq_ud11YLU5r5Hm*l9dIL7#KvK zb9gLEn@zXP%6=hx;c&<<5uGw|v_i8x@`d`RigCj)QephA@g8eZtr*jq}#JboQWEKRLqUlV8Y+dy+&S)&E;Q&lgX*Q43-DzVC+kO{V-tg7w$ zfjxnRt=<;X5Nr`NV*GdG@Kx;Mmu?xQpA)1sh!%!~CEx`$EM+^U$R^P!pUy`7jc9Yb zi4Ly@w9BFnNM$uWXc|r?$}M{`J!aAU)xq4vdItgnen!&)S@c3* zA~EK|g1?ziSo!5bOjT|=Q=W1iz@E-2BsS~Rc1m+9>x=&ZpP0Yi*rEtwWL}Je!iJ>!TXxo z3cms%TXPJsy~k&4=OS?}<~_Xv##~Kga)=L3TVTe*t!p^Ye8BMT$be=Id@eN0C{?)wnjYzmbwnCf{uVL^VhXP|IDf8>g`gGQ|ssLZoNNi z_$1i(o=CB>{5p1mfBb}H~(@x%rE-{HE=-%(5ke}w95e>~LKh<_@SN*=x>{?<#X;K4c8PwA% zXPbZcp4xU^R_)cmXr~CFH2)V<+elz3|BFv5pr)(1o#B^A5X~@ZA>UhbJ+SNn4e?iq zVQ2qPMfPvcN~a?49&o`AEc%zrx}_l%-^*B6YwN`&EyPoQhc91xKj4nO>+HSY5e3NbT5>14lW zvH(!3VfDuE0#8)16}$GF<-gtJ@6ax@WShYlb8xyi5rT;sYgKp@(Sk8i5Zl+}R#?vm zarSlP%r0L|VyyVlNG_5sD=WV&OBZ~X)yRj7vKH_uokdmhkNC5>V`i)B!tc^WOd>r{ ze@+r?kXmWreq;iFO=>YJ7OKI^F^OuNZi&O|362sxH|5*CJ)m|>e14nYR3Lprfq@$D zFu+PAg1i?VD5o^^SHVU>@-U9-(1MBK0>Y3QNKS_0We5jM_5n9I6AKWG)sIqH^-D_uGJ>4%qA$!w2vKd&1%uDXv zhCgPE=93vk1-|@f4H7h&k>jF)iifw6IeKz!Y=R{Gmlbr=yOdZ6=SA@qqgEn7@&+xd z!((Z$wgwl+_Z5e0<7o8BN6GI zVsSp&4|T#AsSB3-{{=(c?~dx`5sNShg( zG#1q@Qj%K?q%%xzkL2U+dQc_TFZknbjji%plZ&gd!E$ZGg7ew+ST9&28u`mYTD;2c z^qgP7&fbSYTr_m;-WWY+kbcKKqOu(f`$TR}Ohn?ltdeW<{xb`{EXL)rMTXQ4NO6FK z*#z0$npSroAr=_=bquv4_a|5LiE2rp8M{;kxSs(^_qO0pn&F>%@op}SfPD)3cxm1br@0g4!H;1NpFvk(5T@A*kUm`Tz{x*gq;NnQ(n4u z3dtz2SYp96k0aGsMglyYF;!9xQyLV;blzZbhdY|zcVFl{pkXj|DrL9j&F7)7aX!bQ z9uyUPX|I(Pf=2uOKYSU`5@OHk83eFJp;E?k2?ii-rZY-%ln@JPkiaGuUh@YPY%iML z1P?QOK;7p|)t%?U8!E?%8SukVzP)(~8G5^t`gZIR(p6YUi4uxya-h^~ECu@6 zqqAC%xW;+t()4VM{|wJ6e$Ni7Xl}lj355EB0e141pK#~D=KRAS#y*f9n%n3*h(Xyd z@8`S&tQJN@p0;1yyyMk|xH0kL)DFj+{IgEZ{8L&PJ^rx9!ELjM;COT8jNB}US7ijV z+sA@%1LRXs{P`>F`irv9+orz1Yj@%sK8jfC)-NaI3l15UTe!Jfgqe38|O!;sI2JS^U`6FGzsESspo zJ67>9!9_8nklSSzoDnSp&(1%y>P3qusVclU!9(ebDy1zQ=T7II#d}B4wqMr-?xp9M zb4=*|Uhol>-Mf`D$~TbQCCnc=Rl{Gw+knJg)Y%*Tfb5P1qh7+YmKXa$2g>HNrW9#Q zhE-bm9OOk`nz2RjjzWl?!MMgFy|_vY_MnWl5wQM%iHK851<&M20;Eeik3|yItH%6|oN9Eun6{%d= z=N*eANB|4DmbrRaN=(|bb2)575&|JP3t}M@h=m!1$dRRp%&-+T0AF8=%d*i<2z{Lh z^F3)IGo1%ZbKG$?nNultCSy0di(F%Ybg&(;k z1izF4^>M!(M)W!<><(H=dwPQDr5OZ?ie+6C6uj**G(x37O`rWR5pseAXJt9$EgTvv zx4a84!V;Ov#?xo~Do%gr{GPUXF8H#!%uK!9%Sr-IZP?*+33*8(p3BHHv%9#C06jvGqkfob46X?zh8#~j zPJ7k1&cfrel5#z{5%T=s%-E-Z#5|L?qmmUG0d=2Ak^=?b&vnK`{Xu_3_vk^E?4$xx z*;D$%(M|j94SX0STo#sIR+rpJ*tY&@s71E=mkubfnYXRVwX8VB+&7aaX zDkYYB08*`-r~k?r|BEg|>3>NVQXVe+TgCDnY4`*WEFO2#&}dCIr(efKj#%hFlb5GZw{&Grpn$HOUs!iagffg< zUOr3@Dmwyx;;e{LUpr{gNl~)W zX@2n$J5io08JiWmLC#GBrIG(1`lzs(%$$xv4*B5(677_}0DvK1{DsG-&*K_EoMlrU z1r9}lAnTooE-E#wQ+?v#McpTvQxiAkk)126n3!C*p}Ki}-pxM`r2ez?TgTl*eVEkx*hsQ4AG1Scb@M1?Bo z64>{l#I7SqZM5$0m$gw!#s{=|bGn1d3YpvS_JPXsv{T^2Xvc)HkNba5@(>xrwNvD3 zSJGWRM!%K`GJiBn_W_SS%OI7~BQ#W!$zg(OccJ37cp#jKUfwUV>yVMqNf$*9P>0_X zQ3XzOz@}VP-r7gmFGi5ST<-NsaScbte+`6jy-v##`Q86b z6jG|SjsPcT{TA5e7iAKdP`-O5snH$Fp#~DWi2dP+tDEgGywPnPkgPeJ+9QTdTzE{X z88~L0W4K4`f9Q5Q<}Oh(JfaAvN+0-dgE;%?(P*qXNwpB_)-Zzm*mP zcex|GZO8(LWj!(h`(I@JpSU%%%+bka+4p#^=Li0xSy-m?t6ws8mE^qtzmeB(XQ@wU ZMt7F5hocMxav&E)U0Fw|QQ>vO{{ZOG+C=~W diff --git a/frontend/templates/default/static/css/img/fancybox/jquery.easing-1.3.pack.js b/frontend/templates/default/static/css/img/fancybox/jquery.easing-1.3.pack.js deleted file mode 100644 index 9028179..0000000 --- a/frontend/templates/default/static/css/img/fancybox/jquery.easing-1.3.pack.js +++ /dev/null @@ -1,72 +0,0 @@ -/* - * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/ - * - * Uses the built in easing capabilities added In jQuery 1.1 - * to offer multiple easing options - * - * TERMS OF USE - jQuery Easing - * - * Open source under the BSD License. - * - * Copyright © 2008 George McGinley Smith - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * Neither the name of the author nor the names of contributors may be used to endorse - * or promote products derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * -*/ - -// t: current time, b: begInnIng value, c: change In value, d: duration -eval(function(p,a,c,k,e,r){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('h.i[\'1a\']=h.i[\'z\'];h.O(h.i,{y:\'D\',z:9(x,t,b,c,d){6 h.i[h.i.y](x,t,b,c,d)},17:9(x,t,b,c,d){6 c*(t/=d)*t+b},D:9(x,t,b,c,d){6-c*(t/=d)*(t-2)+b},13:9(x,t,b,c,d){e((t/=d/2)<1)6 c/2*t*t+b;6-c/2*((--t)*(t-2)-1)+b},X:9(x,t,b,c,d){6 c*(t/=d)*t*t+b},U:9(x,t,b,c,d){6 c*((t=t/d-1)*t*t+1)+b},R:9(x,t,b,c,d){e((t/=d/2)<1)6 c/2*t*t*t+b;6 c/2*((t-=2)*t*t+2)+b},N:9(x,t,b,c,d){6 c*(t/=d)*t*t*t+b},M:9(x,t,b,c,d){6-c*((t=t/d-1)*t*t*t-1)+b},L:9(x,t,b,c,d){e((t/=d/2)<1)6 c/2*t*t*t*t+b;6-c/2*((t-=2)*t*t*t-2)+b},K:9(x,t,b,c,d){6 c*(t/=d)*t*t*t*t+b},J:9(x,t,b,c,d){6 c*((t=t/d-1)*t*t*t*t+1)+b},I:9(x,t,b,c,d){e((t/=d/2)<1)6 c/2*t*t*t*t*t+b;6 c/2*((t-=2)*t*t*t*t+2)+b},G:9(x,t,b,c,d){6-c*8.C(t/d*(8.g/2))+c+b},15:9(x,t,b,c,d){6 c*8.n(t/d*(8.g/2))+b},12:9(x,t,b,c,d){6-c/2*(8.C(8.g*t/d)-1)+b},Z:9(x,t,b,c,d){6(t==0)?b:c*8.j(2,10*(t/d-1))+b},Y:9(x,t,b,c,d){6(t==d)?b+c:c*(-8.j(2,-10*t/d)+1)+b},W:9(x,t,b,c,d){e(t==0)6 b;e(t==d)6 b+c;e((t/=d/2)<1)6 c/2*8.j(2,10*(t-1))+b;6 c/2*(-8.j(2,-10*--t)+2)+b},V:9(x,t,b,c,d){6-c*(8.o(1-(t/=d)*t)-1)+b},S:9(x,t,b,c,d){6 c*8.o(1-(t=t/d-1)*t)+b},Q:9(x,t,b,c,d){e((t/=d/2)<1)6-c/2*(8.o(1-t*t)-1)+b;6 c/2*(8.o(1-(t-=2)*t)+1)+b},P:9(x,t,b,c,d){f s=1.l;f p=0;f a=c;e(t==0)6 b;e((t/=d)==1)6 b+c;e(!p)p=d*.3;e(a<8.w(c)){a=c;f s=p/4}m f s=p/(2*8.g)*8.r(c/a);6-(a*8.j(2,10*(t-=1))*8.n((t*d-s)*(2*8.g)/p))+b},H:9(x,t,b,c,d){f s=1.l;f p=0;f a=c;e(t==0)6 b;e((t/=d)==1)6 b+c;e(!p)p=d*.3;e(a<8.w(c)){a=c;f s=p/4}m f s=p/(2*8.g)*8.r(c/a);6 a*8.j(2,-10*t)*8.n((t*d-s)*(2*8.g)/p)+c+b},T:9(x,t,b,c,d){f s=1.l;f p=0;f a=c;e(t==0)6 b;e((t/=d/2)==2)6 b+c;e(!p)p=d*(.3*1.5);e(a<8.w(c)){a=c;f s=p/4}m f s=p/(2*8.g)*8.r(c/a);e(t<1)6-.5*(a*8.j(2,10*(t-=1))*8.n((t*d-s)*(2*8.g)/p))+b;6 a*8.j(2,-10*(t-=1))*8.n((t*d-s)*(2*8.g)/p)*.5+c+b},F:9(x,t,b,c,d,s){e(s==u)s=1.l;6 c*(t/=d)*t*((s+1)*t-s)+b},E:9(x,t,b,c,d,s){e(s==u)s=1.l;6 c*((t=t/d-1)*t*((s+1)*t+s)+1)+b},16:9(x,t,b,c,d,s){e(s==u)s=1.l;e((t/=d/2)<1)6 c/2*(t*t*(((s*=(1.B))+1)*t-s))+b;6 c/2*((t-=2)*t*(((s*=(1.B))+1)*t+s)+2)+b},A:9(x,t,b,c,d){6 c-h.i.v(x,d-t,0,c,d)+b},v:9(x,t,b,c,d){e((t/=d)<(1/2.k)){6 c*(7.q*t*t)+b}m e(t<(2/2.k)){6 c*(7.q*(t-=(1.5/2.k))*t+.k)+b}m e(t<(2.5/2.k)){6 c*(7.q*(t-=(2.14/2.k))*t+.11)+b}m{6 c*(7.q*(t-=(2.18/2.k))*t+.19)+b}},1b:9(x,t,b,c,d){e(t')[0], { prop: 0 }), - - isIE6 = $.browser.msie && $.browser.version < 7 && !window.XMLHttpRequest, - - /* - * Private methods - */ - - _abort = function() { - loading.hide(); - - imgPreloader.onerror = imgPreloader.onload = null; - - if (ajaxLoader) { - ajaxLoader.abort(); - } - - tmp.empty(); - }, - - _error = function() { - if (false === selectedOpts.onError(selectedArray, selectedIndex, selectedOpts)) { - loading.hide(); - busy = false; - return; - } - - selectedOpts.titleShow = false; - - selectedOpts.width = 'auto'; - selectedOpts.height = 'auto'; - - tmp.html( '

The requested content cannot be loaded.
Please try again later.

' ); - - _process_inline(); - }, - - _start = function() { - var obj = selectedArray[ selectedIndex ], - href, - type, - title, - str, - emb, - ret; - - _abort(); - - selectedOpts = $.extend({}, $.fn.fancybox.defaults, (typeof $(obj).data('fancybox') == 'undefined' ? selectedOpts : $(obj).data('fancybox'))); - - ret = selectedOpts.onStart(selectedArray, selectedIndex, selectedOpts); - - if (ret === false) { - busy = false; - return; - } else if (typeof ret == 'object') { - selectedOpts = $.extend(selectedOpts, ret); - } - - title = selectedOpts.title || (obj.nodeName ? $(obj).attr('title') : obj.title) || ''; - - if (obj.nodeName && !selectedOpts.orig) { - selectedOpts.orig = $(obj).children("img:first").length ? $(obj).children("img:first") : $(obj); - } - - if (title === '' && selectedOpts.orig && selectedOpts.titleFromAlt) { - title = selectedOpts.orig.attr('alt'); - } - - href = selectedOpts.href || (obj.nodeName ? $(obj).attr('href') : obj.href) || null; - - if ((/^(?:javascript)/i).test(href) || href == '#') { - href = null; - } - - if (selectedOpts.type) { - type = selectedOpts.type; - - if (!href) { - href = selectedOpts.content; - } - - } else if (selectedOpts.content) { - type = 'html'; - - } else if (href) { - if (href.match(imgRegExp)) { - type = 'image'; - - } else if (href.match(swfRegExp)) { - type = 'swf'; - - } else if ($(obj).hasClass("iframe")) { - type = 'iframe'; - - } else if (href.indexOf("#") === 0) { - type = 'inline'; - - } else { - type = 'ajax'; - } - } - - if (!type) { - _error(); - return; - } - - if (type == 'inline') { - obj = href.substr(href.indexOf("#")); - type = $(obj).length > 0 ? 'inline' : 'ajax'; - } - - selectedOpts.type = type; - selectedOpts.href = href; - selectedOpts.title = title; - - if (selectedOpts.autoDimensions) { - if (selectedOpts.type == 'html' || selectedOpts.type == 'inline' || selectedOpts.type == 'ajax') { - selectedOpts.width = 'auto'; - selectedOpts.height = 'auto'; - } else { - selectedOpts.autoDimensions = false; - } - } - - if (selectedOpts.modal) { - selectedOpts.overlayShow = true; - selectedOpts.hideOnOverlayClick = false; - selectedOpts.hideOnContentClick = false; - selectedOpts.enableEscapeButton = false; - selectedOpts.showCloseButton = false; - } - - selectedOpts.padding = parseInt(selectedOpts.padding, 10); - selectedOpts.margin = parseInt(selectedOpts.margin, 10); - - tmp.css('padding', (selectedOpts.padding + selectedOpts.margin)); - - $('.fancybox-inline-tmp').unbind('fancybox-cancel').bind('fancybox-change', function() { - $(this).replaceWith(content.children()); - }); - - switch (type) { - case 'html' : - tmp.html( selectedOpts.content ); - _process_inline(); - break; - - case 'inline' : - if ( $(obj).parent().is('#fancybox-content') === true) { - busy = false; - return; - } - - $('
') - .hide() - .insertBefore( $(obj) ) - .bind('fancybox-cleanup', function() { - $(this).replaceWith(content.children()); - }).bind('fancybox-cancel', function() { - $(this).replaceWith(tmp.children()); - }); - - $(obj).appendTo(tmp); - - _process_inline(); - break; - - case 'image': - busy = false; - - $.fancybox.showActivity(); - - imgPreloader = new Image(); - - imgPreloader.onerror = function() { - _error(); - }; - - imgPreloader.onload = function() { - busy = true; - - imgPreloader.onerror = imgPreloader.onload = null; - - _process_image(); - }; - - imgPreloader.src = href; - break; - - case 'swf': - selectedOpts.scrolling = 'no'; - - str = ''; - emb = ''; - - $.each(selectedOpts.swf, function(name, val) { - str += ''; - emb += ' ' + name + '="' + val + '"'; - }); - - str += ''; - - tmp.html(str); - - _process_inline(); - break; - - case 'ajax': - busy = false; - - $.fancybox.showActivity(); - - selectedOpts.ajax.win = selectedOpts.ajax.success; - - ajaxLoader = $.ajax($.extend({}, selectedOpts.ajax, { - url : href, - data : selectedOpts.ajax.data || {}, - error : function(XMLHttpRequest, textStatus, errorThrown) { - if ( XMLHttpRequest.status > 0 ) { - _error(); - } - }, - success : function(data, textStatus, XMLHttpRequest) { - var o = typeof XMLHttpRequest == 'object' ? XMLHttpRequest : ajaxLoader; - if (o.status == 200) { - if ( typeof selectedOpts.ajax.win == 'function' ) { - ret = selectedOpts.ajax.win(href, data, textStatus, XMLHttpRequest); - - if (ret === false) { - loading.hide(); - return; - } else if (typeof ret == 'string' || typeof ret == 'object') { - data = ret; - } - } - - tmp.html( data ); - _process_inline(); - } - } - })); - - break; - - case 'iframe': - _show(); - break; - } - }, - - _process_inline = function() { - var - w = selectedOpts.width, - h = selectedOpts.height; - - if (w.toString().indexOf('%') > -1) { - w = parseInt( ($(window).width() - (selectedOpts.margin * 2)) * parseFloat(w) / 100, 10) + 'px'; - - } else { - w = w == 'auto' ? 'auto' : w + 'px'; - } - - if (h.toString().indexOf('%') > -1) { - h = parseInt( ($(window).height() - (selectedOpts.margin * 2)) * parseFloat(h) / 100, 10) + 'px'; - - } else { - h = h == 'auto' ? 'auto' : h + 'px'; - } - - tmp.wrapInner('
'); - - selectedOpts.width = tmp.width(); - selectedOpts.height = tmp.height(); - - _show(); - }, - - _process_image = function() { - selectedOpts.width = imgPreloader.width; - selectedOpts.height = imgPreloader.height; - - $("").attr({ - 'id' : 'fancybox-img', - 'src' : imgPreloader.src, - 'alt' : selectedOpts.title - }).appendTo( tmp ); - - _show(); - }, - - _show = function() { - var pos, equal; - - loading.hide(); - - if (wrap.is(":visible") && false === currentOpts.onCleanup(currentArray, currentIndex, currentOpts)) { - $.event.trigger('fancybox-cancel'); - - busy = false; - return; - } - - busy = true; - - $(content.add( overlay )).unbind(); - - $(window).unbind("resize.fb scroll.fb"); - $(document).unbind('keydown.fb'); - - if (wrap.is(":visible") && currentOpts.titlePosition !== 'outside') { - wrap.css('height', wrap.height()); - } - - currentArray = selectedArray; - currentIndex = selectedIndex; - currentOpts = selectedOpts; - - if (currentOpts.overlayShow) { - overlay.css({ - 'background-color' : currentOpts.overlayColor, - 'opacity' : currentOpts.overlayOpacity, - 'cursor' : currentOpts.hideOnOverlayClick ? 'pointer' : 'auto', - 'height' : $(document).height() - }); - - if (!overlay.is(':visible')) { - if (isIE6) { - $('select:not(#fancybox-tmp select)').filter(function() { - return this.style.visibility !== 'hidden'; - }).css({'visibility' : 'hidden'}).one('fancybox-cleanup', function() { - this.style.visibility = 'inherit'; - }); - } - - overlay.show(); - } - } else { - overlay.hide(); - } - - final_pos = _get_zoom_to(); - - _process_title(); - - if (wrap.is(":visible")) { - $( close.add( nav_left ).add( nav_right ) ).hide(); - - pos = wrap.position(), - - start_pos = { - top : pos.top, - left : pos.left, - width : wrap.width(), - height : wrap.height() - }; - - equal = (start_pos.width == final_pos.width && start_pos.height == final_pos.height); - - content.fadeTo(currentOpts.changeFade, 0.3, function() { - var finish_resizing = function() { - content.html( tmp.contents() ).fadeTo(currentOpts.changeFade, 1, _finish); - }; - - $.event.trigger('fancybox-change'); - - content - .empty() - .removeAttr('filter') - .css({ - 'border-width' : currentOpts.padding, - 'width' : final_pos.width - currentOpts.padding * 2, - 'height' : selectedOpts.autoDimensions ? 'auto' : final_pos.height - titleHeight - currentOpts.padding * 2 - }); - - if (equal) { - finish_resizing(); - - } else { - fx.prop = 0; - - $(fx).animate({prop: 1}, { - duration : currentOpts.changeSpeed, - easing : currentOpts.easingChange, - step : _draw, - complete : finish_resizing - }); - } - }); - - return; - } - - wrap.removeAttr("style"); - - content.css('border-width', currentOpts.padding); - - if (currentOpts.transitionIn == 'elastic') { - start_pos = _get_zoom_from(); - - content.html( tmp.contents() ); - - wrap.show(); - - if (currentOpts.opacity) { - final_pos.opacity = 0; - } - - fx.prop = 0; - - $(fx).animate({prop: 1}, { - duration : currentOpts.speedIn, - easing : currentOpts.easingIn, - step : _draw, - complete : _finish - }); - - return; - } - - if (currentOpts.titlePosition == 'inside' && titleHeight > 0) { - title.show(); - } - - content - .css({ - 'width' : final_pos.width - currentOpts.padding * 2, - 'height' : selectedOpts.autoDimensions ? 'auto' : final_pos.height - titleHeight - currentOpts.padding * 2 - }) - .html( tmp.contents() ); - - wrap - .css(final_pos) - .fadeIn( currentOpts.transitionIn == 'none' ? 0 : currentOpts.speedIn, _finish ); - }, - - _format_title = function(title) { - if (title && title.length) { - if (currentOpts.titlePosition == 'float') { - return '
' + title + '
'; - } - - return '
' + title + '
'; - } - - return false; - }, - - _process_title = function() { - titleStr = currentOpts.title || ''; - titleHeight = 0; - - title - .empty() - .removeAttr('style') - .removeClass(); - - if (currentOpts.titleShow === false) { - title.hide(); - return; - } - - titleStr = $.isFunction(currentOpts.titleFormat) ? currentOpts.titleFormat(titleStr, currentArray, currentIndex, currentOpts) : _format_title(titleStr); - - if (!titleStr || titleStr === '') { - title.hide(); - return; - } - - title - .addClass('fancybox-title-' + currentOpts.titlePosition) - .html( titleStr ) - .appendTo( 'body' ) - .show(); - - switch (currentOpts.titlePosition) { - case 'inside': - title - .css({ - 'width' : final_pos.width - (currentOpts.padding * 2), - 'marginLeft' : currentOpts.padding, - 'marginRight' : currentOpts.padding - }); - - titleHeight = title.outerHeight(true); - - title.appendTo( outer ); - - final_pos.height += titleHeight; - break; - - case 'over': - title - .css({ - 'marginLeft' : currentOpts.padding, - 'width' : final_pos.width - (currentOpts.padding * 2), - 'bottom' : currentOpts.padding - }) - .appendTo( outer ); - break; - - case 'float': - title - .css('left', parseInt((title.width() - final_pos.width - 40)/ 2, 10) * -1) - .appendTo( wrap ); - break; - - default: - title - .css({ - 'width' : final_pos.width - (currentOpts.padding * 2), - 'paddingLeft' : currentOpts.padding, - 'paddingRight' : currentOpts.padding - }) - .appendTo( wrap ); - break; - } - - title.hide(); - }, - - _set_navigation = function() { - if (currentOpts.enableEscapeButton || currentOpts.enableKeyboardNav) { - $(document).bind('keydown.fb', function(e) { - if (e.keyCode == 27 && currentOpts.enableEscapeButton) { - e.preventDefault(); - $.fancybox.close(); - - } else if ((e.keyCode == 37 || e.keyCode == 39) && currentOpts.enableKeyboardNav && e.target.tagName !== 'INPUT' && e.target.tagName !== 'TEXTAREA' && e.target.tagName !== 'SELECT') { - e.preventDefault(); - $.fancybox[ e.keyCode == 37 ? 'prev' : 'next'](); - } - }); - } - - if (!currentOpts.showNavArrows) { - nav_left.hide(); - nav_right.hide(); - return; - } - - if ((currentOpts.cyclic && currentArray.length > 1) || currentIndex !== 0) { - nav_left.show(); - } - - if ((currentOpts.cyclic && currentArray.length > 1) || currentIndex != (currentArray.length -1)) { - nav_right.show(); - } - }, - - _finish = function () { - if (!$.support.opacity) { - content.get(0).style.removeAttribute('filter'); - wrap.get(0).style.removeAttribute('filter'); - } - - if (selectedOpts.autoDimensions) { - content.css('height', 'auto'); - } - - wrap.css('height', 'auto'); - - if (titleStr && titleStr.length) { - title.show(); - } - - if (currentOpts.showCloseButton) { - close.show(); - } - - _set_navigation(); - - if (currentOpts.hideOnContentClick) { - content.bind('click', $.fancybox.close); - } - - if (currentOpts.hideOnOverlayClick) { - overlay.bind('click', $.fancybox.close); - } - - $(window).bind("resize.fb", $.fancybox.resize); - - if (currentOpts.centerOnScroll) { - $(window).bind("scroll.fb", $.fancybox.center); - } - - if (currentOpts.type == 'iframe') { - $('').appendTo(content); - } - - wrap.show(); - - busy = false; - - $.fancybox.center(); - - currentOpts.onComplete(currentArray, currentIndex, currentOpts); - - _preload_images(); - }, - - _preload_images = function() { - var href, - objNext; - - if ((currentArray.length -1) > currentIndex) { - href = currentArray[ currentIndex + 1 ].href; - - if (typeof href !== 'undefined' && href.match(imgRegExp)) { - objNext = new Image(); - objNext.src = href; - } - } - - if (currentIndex > 0) { - href = currentArray[ currentIndex - 1 ].href; - - if (typeof href !== 'undefined' && href.match(imgRegExp)) { - objNext = new Image(); - objNext.src = href; - } - } - }, - - _draw = function(pos) { - var dim = { - width : parseInt(start_pos.width + (final_pos.width - start_pos.width) * pos, 10), - height : parseInt(start_pos.height + (final_pos.height - start_pos.height) * pos, 10), - - top : parseInt(start_pos.top + (final_pos.top - start_pos.top) * pos, 10), - left : parseInt(start_pos.left + (final_pos.left - start_pos.left) * pos, 10) - }; - - if (typeof final_pos.opacity !== 'undefined') { - dim.opacity = pos < 0.5 ? 0.5 : pos; - } - - wrap.css(dim); - - content.css({ - 'width' : dim.width - currentOpts.padding * 2, - 'height' : dim.height - (titleHeight * pos) - currentOpts.padding * 2 - }); - }, - - _get_viewport = function() { - return [ - $(window).width() - (currentOpts.margin * 2), - $(window).height() - (currentOpts.margin * 2), - $(document).scrollLeft() + currentOpts.margin, - $(document).scrollTop() + currentOpts.margin - ]; - }, - - _get_zoom_to = function () { - var view = _get_viewport(), - to = {}, - resize = currentOpts.autoScale, - double_padding = currentOpts.padding * 2, - ratio; - - if (currentOpts.width.toString().indexOf('%') > -1) { - to.width = parseInt((view[0] * parseFloat(currentOpts.width)) / 100, 10); - } else { - to.width = currentOpts.width + double_padding; - } - - if (currentOpts.height.toString().indexOf('%') > -1) { - to.height = parseInt((view[1] * parseFloat(currentOpts.height)) / 100, 10); - } else { - to.height = currentOpts.height + double_padding; - } - - if (resize && (to.width > view[0] || to.height > view[1])) { - if (selectedOpts.type == 'image' || selectedOpts.type == 'swf') { - ratio = (currentOpts.width ) / (currentOpts.height ); - - if ((to.width ) > view[0]) { - to.width = view[0]; - to.height = parseInt(((to.width - double_padding) / ratio) + double_padding, 10); - } - - if ((to.height) > view[1]) { - to.height = view[1]; - to.width = parseInt(((to.height - double_padding) * ratio) + double_padding, 10); - } - - } else { - to.width = Math.min(to.width, view[0]); - to.height = Math.min(to.height, view[1]); - } - } - - to.top = parseInt(Math.max(view[3] - 20, view[3] + ((view[1] - to.height - 40) * 0.5)), 10); - to.left = parseInt(Math.max(view[2] - 20, view[2] + ((view[0] - to.width - 40) * 0.5)), 10); - - return to; - }, - - _get_obj_pos = function(obj) { - var pos = obj.offset(); - - pos.top += parseInt( obj.css('paddingTop'), 10 ) || 0; - pos.left += parseInt( obj.css('paddingLeft'), 10 ) || 0; - - pos.top += parseInt( obj.css('border-top-width'), 10 ) || 0; - pos.left += parseInt( obj.css('border-left-width'), 10 ) || 0; - - pos.width = obj.width(); - pos.height = obj.height(); - - return pos; - }, - - _get_zoom_from = function() { - var orig = selectedOpts.orig ? $(selectedOpts.orig) : false, - from = {}, - pos, - view; - - if (orig && orig.length) { - pos = _get_obj_pos(orig); - - from = { - width : pos.width + (currentOpts.padding * 2), - height : pos.height + (currentOpts.padding * 2), - top : pos.top - currentOpts.padding - 20, - left : pos.left - currentOpts.padding - 20 - }; - - } else { - view = _get_viewport(); - - from = { - width : currentOpts.padding * 2, - height : currentOpts.padding * 2, - top : parseInt(view[3] + view[1] * 0.5, 10), - left : parseInt(view[2] + view[0] * 0.5, 10) - }; - } - - return from; - }, - - _animate_loading = function() { - if (!loading.is(':visible')){ - clearInterval(loadingTimer); - return; - } - - $('div', loading).css('top', (loadingFrame * -40) + 'px'); - - loadingFrame = (loadingFrame + 1) % 12; - }; - - /* - * Public methods - */ - - $.fn.fancybox = function(options) { - if (!$(this).length) { - return this; - } - - $(this) - .data('fancybox', $.extend({}, options, ($.metadata ? $(this).metadata() : {}))) - .unbind('click.fb') - .bind('click.fb', function(e) { - e.preventDefault(); - - if (busy) { - return; - } - - busy = true; - - $(this).blur(); - - selectedArray = []; - selectedIndex = 0; - - var rel = $(this).attr('rel') || ''; - - if (!rel || rel == '' || rel === 'nofollow') { - selectedArray.push(this); - - } else { - selectedArray = $("a[rel=" + rel + "], area[rel=" + rel + "]"); - selectedIndex = selectedArray.index( this ); - } - - _start(); - - return; - }); - - return this; - }; - - $.fancybox = function(obj) { - var opts; - - if (busy) { - return; - } - - busy = true; - opts = typeof arguments[1] !== 'undefined' ? arguments[1] : {}; - - selectedArray = []; - selectedIndex = parseInt(opts.index, 10) || 0; - - if ($.isArray(obj)) { - for (var i = 0, j = obj.length; i < j; i++) { - if (typeof obj[i] == 'object') { - $(obj[i]).data('fancybox', $.extend({}, opts, obj[i])); - } else { - obj[i] = $({}).data('fancybox', $.extend({content : obj[i]}, opts)); - } - } - - selectedArray = jQuery.merge(selectedArray, obj); - - } else { - if (typeof obj == 'object') { - $(obj).data('fancybox', $.extend({}, opts, obj)); - } else { - obj = $({}).data('fancybox', $.extend({content : obj}, opts)); - } - - selectedArray.push(obj); - } - - if (selectedIndex > selectedArray.length || selectedIndex < 0) { - selectedIndex = 0; - } - - _start(); - }; - - $.fancybox.showActivity = function() { - clearInterval(loadingTimer); - - loading.show(); - loadingTimer = setInterval(_animate_loading, 66); - }; - - $.fancybox.hideActivity = function() { - loading.hide(); - }; - - $.fancybox.next = function() { - return $.fancybox.pos( currentIndex + 1); - }; - - $.fancybox.prev = function() { - return $.fancybox.pos( currentIndex - 1); - }; - - $.fancybox.pos = function(pos) { - if (busy) { - return; - } - - pos = parseInt(pos); - - selectedArray = currentArray; - - if (pos > -1 && pos < currentArray.length) { - selectedIndex = pos; - _start(); - - } else if (currentOpts.cyclic && currentArray.length > 1) { - selectedIndex = pos >= currentArray.length ? 0 : currentArray.length - 1; - _start(); - } - - return; - }; - - $.fancybox.cancel = function() { - if (busy) { - return; - } - - busy = true; - - $.event.trigger('fancybox-cancel'); - - _abort(); - - selectedOpts.onCancel(selectedArray, selectedIndex, selectedOpts); - - busy = false; - }; - - // Note: within an iframe use - parent.$.fancybox.close(); - $.fancybox.close = function() { - if (busy || wrap.is(':hidden')) { - return; - } - - busy = true; - - if (currentOpts && false === currentOpts.onCleanup(currentArray, currentIndex, currentOpts)) { - busy = false; - return; - } - - _abort(); - - $(close.add( nav_left ).add( nav_right )).hide(); - - $(content.add( overlay )).unbind(); - - $(window).unbind("resize.fb scroll.fb"); - $(document).unbind('keydown.fb'); - - content.find('iframe').attr('src', isIE6 && /^https/i.test(window.location.href || '') ? 'javascript:void(false)' : 'about:blank'); - - if (currentOpts.titlePosition !== 'inside') { - title.empty(); - } - - wrap.stop(); - - function _cleanup() { - overlay.fadeOut('fast'); - - title.empty().hide(); - wrap.hide(); - - $.event.trigger('fancybox-cleanup'); - - content.empty(); - - currentOpts.onClosed(currentArray, currentIndex, currentOpts); - - currentArray = selectedOpts = []; - currentIndex = selectedIndex = 0; - currentOpts = selectedOpts = {}; - - busy = false; - } - - if (currentOpts.transitionOut == 'elastic') { - start_pos = _get_zoom_from(); - - var pos = wrap.position(); - - final_pos = { - top : pos.top , - left : pos.left, - width : wrap.width(), - height : wrap.height() - }; - - if (currentOpts.opacity) { - final_pos.opacity = 1; - } - - title.empty().hide(); - - fx.prop = 1; - - $(fx).animate({ prop: 0 }, { - duration : currentOpts.speedOut, - easing : currentOpts.easingOut, - step : _draw, - complete : _cleanup - }); - - } else { - wrap.fadeOut( currentOpts.transitionOut == 'none' ? 0 : currentOpts.speedOut, _cleanup); - } - }; - - $.fancybox.resize = function() { - if (overlay.is(':visible')) { - overlay.css('height', $(document).height()); - } - - $.fancybox.center(true); - }; - - $.fancybox.center = function() { - var view, align; - - if (busy) { - return; - } - - align = arguments[0] === true ? 1 : 0; - view = _get_viewport(); - - if (!align && (wrap.width() > view[0] || wrap.height() > view[1])) { - return; - } - - wrap - .stop() - .animate({ - 'top' : parseInt(Math.max(view[3] - 20, view[3] + ((view[1] - content.height() - 40) * 0.5) - currentOpts.padding)), - 'left' : parseInt(Math.max(view[2] - 20, view[2] + ((view[0] - content.width() - 40) * 0.5) - currentOpts.padding)) - }, typeof arguments[0] == 'number' ? arguments[0] : 200); - }; - - $.fancybox.init = function() { - if ($("#fancybox-wrap").length) { - return; - } - - $('body').append( - tmp = $('
'), - loading = $('
'), - overlay = $('
'), - wrap = $('
') - ); - - outer = $('
') - .append('
') - .appendTo( wrap ); - - outer.append( - content = $('
'), - close = $(''), - title = $('
'), - - nav_left = $(''), - nav_right = $('') - ); - - close.click($.fancybox.close); - loading.click($.fancybox.cancel); - - nav_left.click(function(e) { - e.preventDefault(); - $.fancybox.prev(); - }); - - nav_right.click(function(e) { - e.preventDefault(); - $.fancybox.next(); - }); - - if ($.fn.mousewheel) { - wrap.bind('mousewheel.fb', function(e, delta) { - if (busy) { - e.preventDefault(); - - } else if ($(e.target).get(0).clientHeight == 0 || $(e.target).get(0).scrollHeight === $(e.target).get(0).clientHeight) { - e.preventDefault(); - $.fancybox[ delta > 0 ? 'prev' : 'next'](); - } - }); - } - - if (!$.support.opacity) { - wrap.addClass('fancybox-ie'); - } - - if (isIE6) { - loading.addClass('fancybox-ie6'); - wrap.addClass('fancybox-ie6'); - - $('').prependTo(outer); - } - }; - - $.fn.fancybox.defaults = { - padding : 10, - margin : 40, - opacity : false, - modal : false, - cyclic : false, - scrolling : 'auto', // 'auto', 'yes' or 'no' - - width : 560, - height : 340, - - autoScale : true, - autoDimensions : true, - centerOnScroll : false, - - ajax : {}, - swf : { wmode: 'transparent' }, - - hideOnOverlayClick : true, - hideOnContentClick : false, - - overlayShow : true, - overlayOpacity : 0.7, - overlayColor : '#777', - - titleShow : true, - titlePosition : 'float', // 'float', 'outside', 'inside' or 'over' - titleFormat : null, - titleFromAlt : false, - - transitionIn : 'fade', // 'elastic', 'fade' or 'none' - transitionOut : 'fade', // 'elastic', 'fade' or 'none' - - speedIn : 300, - speedOut : 300, - - changeSpeed : 300, - changeFade : 'fast', - - easingIn : 'swing', - easingOut : 'swing', - - showCloseButton : true, - showNavArrows : true, - enableEscapeButton : true, - enableKeyboardNav : true, - - onStart : function(){}, - onCancel : function(){}, - onComplete : function(){}, - onCleanup : function(){}, - onClosed : function(){}, - onError : function(){} - }; - - $(document).ready(function() { - $.fancybox.init(); - }); - -})(jQuery); \ No newline at end of file diff --git a/frontend/templates/default/static/css/img/fancybox/jquery.fancybox-1.3.4.pack.js b/frontend/templates/default/static/css/img/fancybox/jquery.fancybox-1.3.4.pack.js deleted file mode 100644 index 1373ed0..0000000 --- a/frontend/templates/default/static/css/img/fancybox/jquery.fancybox-1.3.4.pack.js +++ /dev/null @@ -1,46 +0,0 @@ -/* - * FancyBox - jQuery Plugin - * Simple and fancy lightbox alternative - * - * Examples and documentation at: http://fancybox.net - * - * Copyright (c) 2008 - 2010 Janis Skarnelis - * That said, it is hardly a one-person project. Many people have submitted bugs, code, and offered their advice freely. Their support is greatly appreciated. - * - * Version: 1.3.4 (11/11/2010) - * Requires: jQuery v1.3+ - * - * Dual licensed under the MIT and GPL licenses: - * http://www.opensource.org/licenses/mit-license.php - * http://www.gnu.org/licenses/gpl.html - */ - -;(function(b){var m,t,u,f,D,j,E,n,z,A,q=0,e={},o=[],p=0,d={},l=[],G=null,v=new Image,J=/\.(jpg|gif|png|bmp|jpeg)(.*)?$/i,W=/[^\.]\.(swf)\s*$/i,K,L=1,y=0,s="",r,i,h=false,B=b.extend(b("
")[0],{prop:0}),M=b.browser.msie&&b.browser.version<7&&!window.XMLHttpRequest,N=function(){t.hide();v.onerror=v.onload=null;G&&G.abort();m.empty()},O=function(){if(false===e.onError(o,q,e)){t.hide();h=false}else{e.titleShow=false;e.width="auto";e.height="auto";m.html('

The requested content cannot be loaded.
Please try again later.

'); -F()}},I=function(){var a=o[q],c,g,k,C,P,w;N();e=b.extend({},b.fn.fancybox.defaults,typeof b(a).data("fancybox")=="undefined"?e:b(a).data("fancybox"));w=e.onStart(o,q,e);if(w===false)h=false;else{if(typeof w=="object")e=b.extend(e,w);k=e.title||(a.nodeName?b(a).attr("title"):a.title)||"";if(a.nodeName&&!e.orig)e.orig=b(a).children("img:first").length?b(a).children("img:first"):b(a);if(k===""&&e.orig&&e.titleFromAlt)k=e.orig.attr("alt");c=e.href||(a.nodeName?b(a).attr("href"):a.href)||null;if(/^(?:javascript)/i.test(c)|| -c=="#")c=null;if(e.type){g=e.type;if(!c)c=e.content}else if(e.content)g="html";else if(c)g=c.match(J)?"image":c.match(W)?"swf":b(a).hasClass("iframe")?"iframe":c.indexOf("#")===0?"inline":"ajax";if(g){if(g=="inline"){a=c.substr(c.indexOf("#"));g=b(a).length>0?"inline":"ajax"}e.type=g;e.href=c;e.title=k;if(e.autoDimensions)if(e.type=="html"||e.type=="inline"||e.type=="ajax"){e.width="auto";e.height="auto"}else e.autoDimensions=false;if(e.modal){e.overlayShow=true;e.hideOnOverlayClick=false;e.hideOnContentClick= -false;e.enableEscapeButton=false;e.showCloseButton=false}e.padding=parseInt(e.padding,10);e.margin=parseInt(e.margin,10);m.css("padding",e.padding+e.margin);b(".fancybox-inline-tmp").unbind("fancybox-cancel").bind("fancybox-change",function(){b(this).replaceWith(j.children())});switch(g){case "html":m.html(e.content);F();break;case "inline":if(b(a).parent().is("#fancybox-content")===true){h=false;break}b('
').hide().insertBefore(b(a)).bind("fancybox-cleanup",function(){b(this).replaceWith(j.children())}).bind("fancybox-cancel", -function(){b(this).replaceWith(m.children())});b(a).appendTo(m);F();break;case "image":h=false;b.fancybox.showActivity();v=new Image;v.onerror=function(){O()};v.onload=function(){h=true;v.onerror=v.onload=null;e.width=v.width;e.height=v.height;b("").attr({id:"fancybox-img",src:v.src,alt:e.title}).appendTo(m);Q()};v.src=c;break;case "swf":e.scrolling="no";C='';P="";b.each(e.swf,function(x,H){C+='';P+=" "+x+'="'+H+'"'});C+='";m.html(C);F();break;case "ajax":h=false;b.fancybox.showActivity();e.ajax.win=e.ajax.success;G=b.ajax(b.extend({},e.ajax,{url:c,data:e.ajax.data||{},error:function(x){x.status>0&&O()},success:function(x,H,R){if((typeof R=="object"?R:G).status==200){if(typeof e.ajax.win== -"function"){w=e.ajax.win(c,x,H,R);if(w===false){t.hide();return}else if(typeof w=="string"||typeof w=="object")x=w}m.html(x);F()}}}));break;case "iframe":Q()}}else O()}},F=function(){var a=e.width,c=e.height;a=a.toString().indexOf("%")>-1?parseInt((b(window).width()-e.margin*2)*parseFloat(a)/100,10)+"px":a=="auto"?"auto":a+"px";c=c.toString().indexOf("%")>-1?parseInt((b(window).height()-e.margin*2)*parseFloat(c)/100,10)+"px":c=="auto"?"auto":c+"px";m.wrapInner('
');e.width=m.width();e.height=m.height();Q()},Q=function(){var a,c;t.hide();if(f.is(":visible")&&false===d.onCleanup(l,p,d)){b.event.trigger("fancybox-cancel");h=false}else{h=true;b(j.add(u)).unbind();b(window).unbind("resize.fb scroll.fb");b(document).unbind("keydown.fb");f.is(":visible")&&d.titlePosition!=="outside"&&f.css("height",f.height());l=o;p=q;d=e;if(d.overlayShow){u.css({"background-color":d.overlayColor, -opacity:d.overlayOpacity,cursor:d.hideOnOverlayClick?"pointer":"auto",height:b(document).height()});if(!u.is(":visible")){M&&b("select:not(#fancybox-tmp select)").filter(function(){return this.style.visibility!=="hidden"}).css({visibility:"hidden"}).one("fancybox-cleanup",function(){this.style.visibility="inherit"});u.show()}}else u.hide();i=X();s=d.title||"";y=0;n.empty().removeAttr("style").removeClass();if(d.titleShow!==false){if(b.isFunction(d.titleFormat))a=d.titleFormat(s,l,p,d);else a=s&&s.length? -d.titlePosition=="float"?'
'+s+'
':'
'+s+"
":false;s=a;if(!(!s||s==="")){n.addClass("fancybox-title-"+d.titlePosition).html(s).appendTo("body").show();switch(d.titlePosition){case "inside":n.css({width:i.width-d.padding*2,marginLeft:d.padding,marginRight:d.padding}); -y=n.outerHeight(true);n.appendTo(D);i.height+=y;break;case "over":n.css({marginLeft:d.padding,width:i.width-d.padding*2,bottom:d.padding}).appendTo(D);break;case "float":n.css("left",parseInt((n.width()-i.width-40)/2,10)*-1).appendTo(f);break;default:n.css({width:i.width-d.padding*2,paddingLeft:d.padding,paddingRight:d.padding}).appendTo(f)}}}n.hide();if(f.is(":visible")){b(E.add(z).add(A)).hide();a=f.position();r={top:a.top,left:a.left,width:f.width(),height:f.height()};c=r.width==i.width&&r.height== -i.height;j.fadeTo(d.changeFade,0.3,function(){var g=function(){j.html(m.contents()).fadeTo(d.changeFade,1,S)};b.event.trigger("fancybox-change");j.empty().removeAttr("filter").css({"border-width":d.padding,width:i.width-d.padding*2,height:e.autoDimensions?"auto":i.height-y-d.padding*2});if(c)g();else{B.prop=0;b(B).animate({prop:1},{duration:d.changeSpeed,easing:d.easingChange,step:T,complete:g})}})}else{f.removeAttr("style");j.css("border-width",d.padding);if(d.transitionIn=="elastic"){r=V();j.html(m.contents()); -f.show();if(d.opacity)i.opacity=0;B.prop=0;b(B).animate({prop:1},{duration:d.speedIn,easing:d.easingIn,step:T,complete:S})}else{d.titlePosition=="inside"&&y>0&&n.show();j.css({width:i.width-d.padding*2,height:e.autoDimensions?"auto":i.height-y-d.padding*2}).html(m.contents());f.css(i).fadeIn(d.transitionIn=="none"?0:d.speedIn,S)}}}},Y=function(){if(d.enableEscapeButton||d.enableKeyboardNav)b(document).bind("keydown.fb",function(a){if(a.keyCode==27&&d.enableEscapeButton){a.preventDefault();b.fancybox.close()}else if((a.keyCode== -37||a.keyCode==39)&&d.enableKeyboardNav&&a.target.tagName!=="INPUT"&&a.target.tagName!=="TEXTAREA"&&a.target.tagName!=="SELECT"){a.preventDefault();b.fancybox[a.keyCode==37?"prev":"next"]()}});if(d.showNavArrows){if(d.cyclic&&l.length>1||p!==0)z.show();if(d.cyclic&&l.length>1||p!=l.length-1)A.show()}else{z.hide();A.hide()}},S=function(){if(!b.support.opacity){j.get(0).style.removeAttribute("filter");f.get(0).style.removeAttribute("filter")}e.autoDimensions&&j.css("height","auto");f.css("height","auto"); -s&&s.length&&n.show();d.showCloseButton&&E.show();Y();d.hideOnContentClick&&j.bind("click",b.fancybox.close);d.hideOnOverlayClick&&u.bind("click",b.fancybox.close);b(window).bind("resize.fb",b.fancybox.resize);d.centerOnScroll&&b(window).bind("scroll.fb",b.fancybox.center);if(d.type=="iframe")b('').appendTo(j); -f.show();h=false;b.fancybox.center();d.onComplete(l,p,d);var a,c;if(l.length-1>p){a=l[p+1].href;if(typeof a!=="undefined"&&a.match(J)){c=new Image;c.src=a}}if(p>0){a=l[p-1].href;if(typeof a!=="undefined"&&a.match(J)){c=new Image;c.src=a}}},T=function(a){var c={width:parseInt(r.width+(i.width-r.width)*a,10),height:parseInt(r.height+(i.height-r.height)*a,10),top:parseInt(r.top+(i.top-r.top)*a,10),left:parseInt(r.left+(i.left-r.left)*a,10)};if(typeof i.opacity!=="undefined")c.opacity=a<0.5?0.5:a;f.css(c); -j.css({width:c.width-d.padding*2,height:c.height-y*a-d.padding*2})},U=function(){return[b(window).width()-d.margin*2,b(window).height()-d.margin*2,b(document).scrollLeft()+d.margin,b(document).scrollTop()+d.margin]},X=function(){var a=U(),c={},g=d.autoScale,k=d.padding*2;c.width=d.width.toString().indexOf("%")>-1?parseInt(a[0]*parseFloat(d.width)/100,10):d.width+k;c.height=d.height.toString().indexOf("%")>-1?parseInt(a[1]*parseFloat(d.height)/100,10):d.height+k;if(g&&(c.width>a[0]||c.height>a[1]))if(e.type== -"image"||e.type=="swf"){g=d.width/d.height;if(c.width>a[0]){c.width=a[0];c.height=parseInt((c.width-k)/g+k,10)}if(c.height>a[1]){c.height=a[1];c.width=parseInt((c.height-k)*g+k,10)}}else{c.width=Math.min(c.width,a[0]);c.height=Math.min(c.height,a[1])}c.top=parseInt(Math.max(a[3]-20,a[3]+(a[1]-c.height-40)*0.5),10);c.left=parseInt(Math.max(a[2]-20,a[2]+(a[0]-c.width-40)*0.5),10);return c},V=function(){var a=e.orig?b(e.orig):false,c={};if(a&&a.length){c=a.offset();c.top+=parseInt(a.css("paddingTop"), -10)||0;c.left+=parseInt(a.css("paddingLeft"),10)||0;c.top+=parseInt(a.css("border-top-width"),10)||0;c.left+=parseInt(a.css("border-left-width"),10)||0;c.width=a.width();c.height=a.height();c={width:c.width+d.padding*2,height:c.height+d.padding*2,top:c.top-d.padding-20,left:c.left-d.padding-20}}else{a=U();c={width:d.padding*2,height:d.padding*2,top:parseInt(a[3]+a[1]*0.5,10),left:parseInt(a[2]+a[0]*0.5,10)}}return c},Z=function(){if(t.is(":visible")){b("div",t).css("top",L*-40+"px");L=(L+1)%12}else clearInterval(K)}; -b.fn.fancybox=function(a){if(!b(this).length)return this;b(this).data("fancybox",b.extend({},a,b.metadata?b(this).metadata():{})).unbind("click.fb").bind("click.fb",function(c){c.preventDefault();if(!h){h=true;b(this).blur();o=[];q=0;c=b(this).attr("rel")||"";if(!c||c==""||c==="nofollow")o.push(this);else{o=b("a[rel="+c+"], area[rel="+c+"]");q=o.index(this)}I()}});return this};b.fancybox=function(a,c){var g;if(!h){h=true;g=typeof c!=="undefined"?c:{};o=[];q=parseInt(g.index,10)||0;if(b.isArray(a)){for(var k= -0,C=a.length;ko.length||q<0)q=0;I()}};b.fancybox.showActivity=function(){clearInterval(K);t.show();K=setInterval(Z,66)};b.fancybox.hideActivity=function(){t.hide()};b.fancybox.next=function(){return b.fancybox.pos(p+ -1)};b.fancybox.prev=function(){return b.fancybox.pos(p-1)};b.fancybox.pos=function(a){if(!h){a=parseInt(a);o=l;if(a>-1&&a1){q=a>=l.length?0:l.length-1;I()}}};b.fancybox.cancel=function(){if(!h){h=true;b.event.trigger("fancybox-cancel");N();e.onCancel(o,q,e);h=false}};b.fancybox.close=function(){function a(){u.fadeOut("fast");n.empty().hide();f.hide();b.event.trigger("fancybox-cleanup");j.empty();d.onClosed(l,p,d);l=e=[];p=q=0;d=e={};h=false}if(!(h||f.is(":hidden"))){h= -true;if(d&&false===d.onCleanup(l,p,d))h=false;else{N();b(E.add(z).add(A)).hide();b(j.add(u)).unbind();b(window).unbind("resize.fb scroll.fb");b(document).unbind("keydown.fb");j.find("iframe").attr("src",M&&/^https/i.test(window.location.href||"")?"javascript:void(false)":"about:blank");d.titlePosition!=="inside"&&n.empty();f.stop();if(d.transitionOut=="elastic"){r=V();var c=f.position();i={top:c.top,left:c.left,width:f.width(),height:f.height()};if(d.opacity)i.opacity=1;n.empty().hide();B.prop=1; -b(B).animate({prop:0},{duration:d.speedOut,easing:d.easingOut,step:T,complete:a})}else f.fadeOut(d.transitionOut=="none"?0:d.speedOut,a)}}};b.fancybox.resize=function(){u.is(":visible")&&u.css("height",b(document).height());b.fancybox.center(true)};b.fancybox.center=function(a){var c,g;if(!h){g=a===true?1:0;c=U();!g&&(f.width()>c[0]||f.height()>c[1])||f.stop().animate({top:parseInt(Math.max(c[3]-20,c[3]+(c[1]-j.height()-40)*0.5-d.padding)),left:parseInt(Math.max(c[2]-20,c[2]+(c[0]-j.width()-40)*0.5- -d.padding))},typeof a=="number"?a:200)}};b.fancybox.init=function(){if(!b("#fancybox-wrap").length){b("body").append(m=b('
'),t=b('
'),u=b('
'),f=b('
'));D=b('
').append('
').appendTo(f); -D.append(j=b('
'),E=b(''),n=b('
'),z=b(''),A=b(''));E.click(b.fancybox.close);t.click(b.fancybox.cancel);z.click(function(a){a.preventDefault();b.fancybox.prev()});A.click(function(a){a.preventDefault();b.fancybox.next()}); -b.fn.mousewheel&&f.bind("mousewheel.fb",function(a,c){if(h)a.preventDefault();else if(b(a.target).get(0).clientHeight==0||b(a.target).get(0).scrollHeight===b(a.target).get(0).clientHeight){a.preventDefault();b.fancybox[c>0?"prev":"next"]()}});b.support.opacity||f.addClass("fancybox-ie");if(M){t.addClass("fancybox-ie6");f.addClass("fancybox-ie6");b('').prependTo(D)}}}; -b.fn.fancybox.defaults={padding:10,margin:40,opacity:false,modal:false,cyclic:false,scrolling:"auto",width:560,height:340,autoScale:true,autoDimensions:true,centerOnScroll:false,ajax:{},swf:{wmode:"transparent"},hideOnOverlayClick:true,hideOnContentClick:false,overlayShow:true,overlayOpacity:0.7,overlayColor:"#777",titleShow:true,titlePosition:"float",titleFormat:null,titleFromAlt:false,transitionIn:"fade",transitionOut:"fade",speedIn:300,speedOut:300,changeSpeed:300,changeFade:"fast",easingIn:"swing", -easingOut:"swing",showCloseButton:true,showNavArrows:true,enableEscapeButton:true,enableKeyboardNav:true,onStart:function(){},onCancel:function(){},onComplete:function(){},onCleanup:function(){},onClosed:function(){},onError:function(){}};b(document).ready(function(){b.fancybox.init()})})(jQuery); \ No newline at end of file diff --git a/frontend/templates/default/static/css/img/fancybox/jquery.mousewheel-3.0.4.pack.js b/frontend/templates/default/static/css/img/fancybox/jquery.mousewheel-3.0.4.pack.js deleted file mode 100644 index cb66588..0000000 --- a/frontend/templates/default/static/css/img/fancybox/jquery.mousewheel-3.0.4.pack.js +++ /dev/null @@ -1,14 +0,0 @@ -/*! Copyright (c) 2010 Brandon Aaron (http://brandonaaron.net) -* Licensed under the MIT License (LICENSE.txt). -* -* Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers. -* Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix. -* Thanks to: Seamus Leahy for adding deltaX and deltaY -* -* Version: 3.0.4 -* -* Requires: 1.2.2+ -*/ - -(function(d){function g(a){var b=a||window.event,i=[].slice.call(arguments,1),c=0,h=0,e=0;a=d.event.fix(b);a.type="mousewheel";if(a.wheelDelta)c=a.wheelDelta/120;if(a.detail)c=-a.detail/3;e=c;if(b.axis!==undefined&&b.axis===b.HORIZONTAL_AXIS){e=0;h=-1*c}if(b.wheelDeltaY!==undefined)e=b.wheelDeltaY/120;if(b.wheelDeltaX!==undefined)h=-1*b.wheelDeltaX/120;i.unshift(a,c,h,e);return d.event.handle.apply(this,i)}var f=["DOMMouseScroll","mousewheel"];d.event.special.mousewheel={setup:function(){if(this.addEventListener)for(var a= -f.length;a;)this.addEventListener(f[--a],g,false);else this.onmousewheel=g},teardown:function(){if(this.removeEventListener)for(var a=f.length;a;)this.removeEventListener(f[--a],g,false);else this.onmousewheel=null}};d.fn.extend({mousewheel:function(a){return a?this.bind("mousewheel",a):this.trigger("mousewheel")},unmousewheel:function(a){return this.unbind("mousewheel",a)}})})(jQuery); \ No newline at end of file diff --git a/frontend/templates/default/static/css/img/grid.png b/frontend/templates/default/static/css/img/grid.png deleted file mode 100644 index 6e981946e7e03cf775978a4ed71bc695b05f8c3c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1853 zcmeH|e@q)?7{?o}q%doaYzq;Hz8sl9lJ$PHw5%r`9=!sU9b#!BF)Vs*U*LrM!QEj? zmHkmrJ9RT|$)+*;kpwEd>3Q`1(ouqbyC0}-L-L>z>M}Z&9wRAe z(8eZ|7zANS=!Fp|B!&mSf(Zm=v<5rV?a_F;KkiT9joU#(ia`Jg8Ujd31G3Jf0=UIx z(As=V;=l?q`UCiCQ(b%q2r3!`UV?JPDIW!VG(mgn>g(&b0yjldB;_V)w~MZ4JZ^@f zK<Tyj}4N;MSNfctrkP*O9r>jSh)B;x4b2cHv$dsUxG(nk1$_MiNzlTavAzC*gaIN2e z1nbdZ6_OFCD??fwU0hGCSxRMs8Wapgiz>=M-o=hS#ZdG(kHnhsGcOL;=Hueq7>xH)&QDWA(J@gWJyMm{&O zmg_5;YmS1XqRJf9#Ft>ASyLon9hnh}_u?ta%jG7D_fl6hmqg8w=EbhN==>uzJ?647 zwrEord?=%7*U(s(ZT^};Z_7lOW232`e!Ft66lXWtzny+^$GP__M>Tiryd8DW~$< z(cN$DdF+q<>B{F8Hg7%Eas0r~EjMZZ?Ctq&ACAbAul&l-Jn?bk><9a2=T<5fA9-_T zWM(@tFaJU_=TD8)TzPnM+vlZeSO3!VGj9WXc?RQFW$I4(7_ir5A7UN2eI?1>zV-a2 z*Pk{+N0W;uTChyk85_O+qm^=3Y%b-!l*IUpqFz4q$<*G0=o%QWYln80x(s)8w0bin&9ims)9V8IeqktEjur4IRs*(mqFTR z9rY%$&f8UsTg#{J^Ad|`V$oh+HC1x)Bh%@cY|;X!(F*Y`;byP4?ENHor(yE1YiD-- zUcJ1$@I5kcy;*;vJ_}d3ivK2xO@{Vf9lx={|8Hy&W8e61XLRAammQSto{}TAPmS$5 QWd5OrL+#wjrWZ1Q14T7q4FCWD diff --git a/frontend/templates/default/static/css/img/icon-arrow-right.png b/frontend/templates/default/static/css/img/icon-arrow-right.png deleted file mode 100644 index 065378862c9d25861f85b84d804c53b52a47aa62..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 996 zcmaJ=KTH!*96l^I2q6JCNlacI(M5Xq?n)`Wa6;)(sCuL+P3*wX*SlAGfxCC!J?udo zgu%qYKQVD*admJv4q_w*OWDbPh@s`gEes$9S!41>_wa04~eU`to!=jd93pao&;8axZCViZA+`UIpzlrYg00#mXm zCnwYC^aN0lj3lH;vXYR~YEn@V0__iSZ@yJmOM1TTi(49OFy^U})ND4zW>Td7nj~j3 znMgxX5*(2Twp@n8gd2=^6m$}pzU?uax*$@-HM+?($Rj;V!STAXZqP0hFPIc!Pm)Cx zrPKi$#{Z#?(?tiYM9$;=r*Kf-@`zL-0p0XX-njaB)(Xl(W+~^KIarw0Se5`NmUi-?QM5Ul-%i&S&!S7!$`(m+=7vq!r{RcmH z!s{bLuWmn_8yoo%JBFYhyM!)0Iek|Dk^*AAw%@;TnBUo7e0~djiyvQ|D1LZ5w;De< islJ}O{OJ4M&`4G28y#KU!!Hh_cUM?g*5AxmcmDv&BQ^m5 diff --git a/frontend/templates/default/static/css/img/icon-check.png b/frontend/templates/default/static/css/img/icon-check.png deleted file mode 100644 index a9925a06ab02db30c1e7ead9c701c15bc63145cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 537 zcmV+!0_OdRP)Hs{AQG2a)rMyf zFQK~pm1x3+7!nu%-M`k}``c>^00{o_1pjWJUTfl8mg=3qGEl8H@}^@w`VUx0_$uy4 z2FhRqKX}xI*?Tv1DJd8z#F#0c%*~rM30HE1@2o5m~}ZyoWhqv>ql{V z1ZGE0lgcoK^lx+eqc*rAX1Ky;Xx3U%u#zG!m-;eD1Qsn@kf3|F9qz~|95=&g3(7!X zB}JAT>RU;a%vaNOGnJ%e1=K6eAh43c(QN8RQ6~GP%O}Jju$~Ld*%`mO1p$`dXYaZs9=SbAto%g@>T~?_bH&lTUn@`uo|1bXE{eSR(AO)ESb=V4`uk}mK|39Px&03WLbv~pzk+s7D@lK^ zn+aB+sp)&Y_x-B3>;6ywU--WQNUr<8>TU0P-|L#1U&;A)67w(+> pDf@fM7q9#F25QXo3rUI;002ro52U44e~JJA002ovPDHLkV1l;_q@Mr) diff --git a/frontend/templates/default/static/css/img/rte/link_break.png b/frontend/templates/default/static/css/img/rte/link_break.png deleted file mode 100755 index 523575306d53eaf176b4f9b260f0d36852565596..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 657 zcmV;C0&e|@P)>>Oks2`oIPl8XEc) z7Z-oHdiCnNh=_=7-rnASQd3j^Pnt9-52PSJKmR|74-yB-uUN6-AxJ$)AIt?^O-)VT zCr_T74pjKb-rk;L@7}!}=gytu04X?h=n%)+wQD(m;%Y$oCm?ko^&ov<19WwDGt<-4 z-%p!1tt2QYXs4s2<1aTixBr2Gf&W1YfV4h{4-yB-gVcf4gYO zty=YV-MV%Er%#{$zp$_nY(Pat1(**K2g!rffz*TafelboQ)31?&%n#e>wZc~%9rfy z?C(JQGdw&z4x}IUyRt?v{0wJ6^R0W@A*Z8= z&I?WjSJx&^y7yBz?2M*SZ18QRLbAs(#0rsh%4F{kwbCf;j=k00000NkvXXu0mjf-HSTy diff --git a/frontend/templates/default/static/css/img/rte/picture_empty.png b/frontend/templates/default/static/css/img/rte/picture_empty.png deleted file mode 100755 index abd2b9bb48252338e831bb54f2fd76037b1bdeef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 463 zcmV;=0WkiFP)h0wrhpX|Hs7;Pt55ta+?_WPZ?E%ty zcl7GX<6#&ib$G%g0Kx`)KASRL^ZnUGrx zCTlifW8bF0Zh;X~MQ7g4Lm|_~ykU(Cppw z+zc^}2l`HK1P^+B{r2nc%R}+A|9PB!2fN@?ZS6gu^9@CduRn)+FfsrD002ovPDHLk FV1m%L!2$pP diff --git a/frontend/templates/default/static/css/img/rte/text_align_center.png b/frontend/templates/default/static/css/img/rte/text_align_center.png deleted file mode 100755 index 57beb3813973e69f535a822c2f0424fa9f560303..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 234 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6SkfJR9T^zbpD<_bdI{u9mbgZg z1m~xflqVLYGB~E>C#5QQ<|d}62BjvZR2H60wE-%s@pN$v(Kw&{=X`^_fnmU^23D6T z|NkHVz|K?O{7~QE-_Z@zCpI>Iv^P{UFnE&ke;(6i-d4-w%bHR;j1|AyZ#v6S(amDc zlKy{I(;D%Nuye{ncOLwezxwWez>k>{<_3S*oiFG7{Xgq}=)co{r~lFaH2=T-_xf)+ f9X!fMH*zv8ak(u6{1-oD!MC#5QQ<|d}62BjvZR2H60wE-$h_H=O!(Kw&{=X`^_fnmU^23D6T z|NkHVz|K?O{7~QE-_Z@zCpI>Iv^P`}`P2Tg^~Il~8@dITHCPA-{a3!-)3Cjx%=yXx z_>8LclV7mqn+PY^{qor&o%8>H%d3``{~Y#6bGV5yoI2touNPXs5@;QRr>mdKI;Vst E04%Lf&j0`b diff --git a/frontend/templates/default/static/css/img/rte/text_align_right.png b/frontend/templates/default/static/css/img/rte/text_align_right.png deleted file mode 100755 index a1502571c99fb92b1579c3658bcc50c5976b8e7d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 209 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6SkfJR9T^zbpD<_bdI{u9mbgZg z1m~xflqVLYGB~E>C#5QQ<|d}62BjvZR2H60wE-$h_H=O!(Kw&{=X`^_fnmU^23D6T z|NkHVz|K?O{7~QE-_Z@zCpI>Iv^P|9aJcmUe!yIVina{lp#RFZdm6TTlr;aYZ;9)u zJl|<{@VEV{yZaY@Fz(E|@awb^}|6b=Y6y(;Y{!a!g z@UQp#@Aw}>L3(}s|7f5BUjeuKZvQRjV<2U7yvu*H{aAbvQ6K!@3oKzW z-{Qa8d3gae1^)HE{~f^!v<1}u>;4xnKvUpW540I-w9J3a{{r=B3T*2g{_BH1CtaZO zpZ`6V0*V5g1e5i;`_=Z#_e=H*@8|93RG@lX;D!K7TKswwko8{x0000C#5QQ<|d}62BjvZR2H60wE-$B^mK6y(Kw&{<9vg>Q9!g~ne(gm zmj4swoA@7?D86%i^8WzK9JM17E&sp&Z#dpHfz$E-U9ks&4?Z9Gyg!%0k2Q{M-Tz#> z2OnD>vrPZ*#{EHKLq)>Jcx{H|Ovdb&|4aQZWSipI{El%e^Cxx{^9vSw28s;a3IDB= TS1%U=TF&6<>gTe~DWM4fm>N^1 diff --git a/frontend/templates/default/static/css/img/rte/text_list_bullets.png b/frontend/templates/default/static/css/img/rte/text_list_bullets.png deleted file mode 100755 index 4a8672bde48f806d3d4d37db192588a9aa3eac10..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 344 zcmV-e0jK_nP)PbXFR5;6H z`2YVu10|S&DhA}te_Swi*Xsu$nk)lAnzx?+_#Z@r_~qs0*+Bfiq@?73K|#U)?Ck9S zsi~>|6A}{sM@B~e4-O9gPhA%bd?2RGd{of6>E(lvp1b6Ep>6&12TPB<{a?EDDL4@0 z;^ML+A|n0=1_u83^78uc?CkvC#>VEqiHXU7U0vP(YHDhzff&$ntDt1@;|H#l*M@2! z+U8#>h@W=vfpy*`^1J}j+`sMRe-I7g8yOj8Yin!&S5Z;VicFNp}SURRVGD{CSNFe~ni^^#wyl5uzj4je z|23%2?k#{x(*%mqe9M%mih+W%ElRQ}7!$^91> z7ymCLB=nz$hvz>#JNtiTW@gkt1Zf0eyP_){bPq%T_kY#2Z7&xs00000NkvXXu0mjf DNYA0= diff --git a/frontend/templates/default/static/css/img/rte/text_strikethrough.png b/frontend/templates/default/static/css/img/rte/text_strikethrough.png deleted file mode 100755 index 612058a78eba4e3ca259aa13417fd60cd6cf2fbd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 269 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6SkfJR9T^zbpD<_bdI{u9mbgZg z1m~xflqVLYGB~E>C#5QQ<|d}62BjvZR2H60wE-%c@9E+gqH#X?$N2_%qkv$?&V++! z-fX$@sb%KG-5a$|R8J4(Tcmu7`G0cYgxS-++3#dN^zA^J(=P8r|6lx9G_LLaZ+v5S z!d9iC@)!RP{FnQmdw#}3Ee(C$|NPA#|L6YmR@fBO9w|C7oMMQ$vc`Tu(RETvC<`(>OPJ!ieM-fH~m>7>jJ-3AN;KsG}ItN_H<)YO~+biscK35gGaf`SIg^B!*iYEReM4Ple+T`TtK`;KS0!apVx86LEKKJ4Opo2 QTmS$707*qoM6N<$f=73^s{jB1 diff --git a/frontend/templates/default/static/css/img/rte/text_superscript.png b/frontend/templates/default/static/css/img/rte/text_superscript.png deleted file mode 100755 index 2fb2a7c7483531a9f518018de41607eff409019d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 421 zcmV;W0b2fvP)CG+sNmIhtD#~2^Z#UfA#v8j z3n}v+J-{%ayuAECadGj1+}zv)X=!N(;^X5L!o$N4`1$!AaCLP(08(RLajhY2(!C4j zIhPDD3;=2l0BZh_l9KWtsCfcN45+yQsCj{njg5kJ(UkzF>T3&3GA;-hCSP#Si$AM? z;RT@04nWQSBO@dK12q@GYzATP)|&^?=RW+OJnO;#u!(m+;0yzxvnK=w2L5+*bNdgp zS%Bnd1llYB((K~m^54kFXadOwfSe7qxxm`m`oDpJ!G8q>1qY%G0ND%;umTWYQ&V#S z&;|b`BqTlv3JMw!GyrPz0g$tSnhk(99{_4T0MvYdi;L?33k!?E;LJ<_HjJTT ul{display:block;}*/ - .menu ul{margin:0;padding:0;position: absolute;top:100%;left:0;display:none;min-width:150px;max-width:150%;*width:150px;} - .menu ul li{display:block;width:100%;} - .menu ul li a{display:block;} - .menu ul ul{top:0;left:100%;} - -/*--------------Dividers-------------------*/ - .menu ul li.divider{border-top:1px solid #ccc;} - .menu ul li.divider a{border-top:1px solid #fff;} - -/*--------------Arrows-------------------*/ - .menu li.has-menu a{padding-right:25px;} - .menu li.has-menu span.arrow{border-style:solid;border-width:5px; - display:block;position:absolute;top:50%;right:5px;font-size:0;line-height:0;height:0;width:0;} - .menu li li.has-menu span.arrow{margin-top:-4px;} - -/*--------------Vertical Menu Layout-------------------*/ -.menu.vertical{} - .menu.vertical li{display:block;} - .menu.vertical li a{display:block;} - .menu.vertical ul{top:0;left:100%;} - .menu.vertical li.has-menu span.arrow{margin-top:-4px;} - -/*--------------Vertical Right Menu Layout-------------------*/ -.menu.vertical.right{text-align:left;} - .menu.vertical.right ul{top:0;right:100%;left:auto;} - .menu.vertical.right li a{padding-left:25px;padding-right:20px;} - .menu.vertical.right li.has-menu span.arrow{right:auto;left:5px;margin-top:-4px;} - - -/*--------------------------------- - MENU STYLES - EDIT BELOW THIS LINE TO CUSTOMIZE ------------------------------------*/ -.menu{ -border:1px solid #ccc; -text-shadow:0px 1px 1px #fff; -background: #eee; /* Old browsers */ -background: -moz-linear-gradient(top, rgba(252,252,252,1) 0%, rgba(224,224,224,1) 100%); /* FF3.6+ */ -background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(252,252,252,1)), color-stop(100%,rgba(224,224,224,1))); /* Chrome,Safari4+ */ -background: -webkit-linear-gradient(top, rgba(252,252,252,1) 0%,rgba(224,224,224,1) 100%); /* Chrome10+,Safari5.1+ */ -background: -o-linear-gradient(top, rgba(252,252,252,1) 0%,rgba(224,224,224,1) 100%); /* Opera11.10+ */ -background: -ms-linear-gradient(top, rgba(252,252,252,1) 0%,rgba(224,224,224,1) 100%); /* IE10+ */ -background: linear-gradient(top, rgba(252,252,252,1) 0%,rgba(224,224,224,1) 100%); /* W3C */ -z-index:600; -} - - .menu li{} - - .menu li a{ - padding:15px 20px; - text-decoration:none; - font-size:0.9em; - color: #777; - } - - .menu li.current>a, - .menu li.current>a:hover, - .menu li.current.hover>a{ - background: rgb(122,188,255); /* Old browsers */ - background: -moz-linear-gradient(top, rgba(122,188,255,1) 0%, rgba(96,171,248,1) 44%, rgba(64,150,238,1) 100%); /* FF3.6+ */ - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(122,188,255,1)), color-stop(44%,rgba(96,171,248,1)), color-stop(100%,rgba(64,150,238,1))); /* Chrome,Safari4+ */ - background: -webkit-linear-gradient(top, rgba(122,188,255,1) 0%,rgba(96,171,248,1) 44%,rgba(64,150,238,1) 100%); /* Chrome10+,Safari5.1+ */ - background: -o-linear-gradient(top, rgba(122,188,255,1) 0%,rgba(96,171,248,1) 44%,rgba(64,150,238,1) 100%); /* Opera11.10+ */ - background: -ms-linear-gradient(top, rgba(122,188,255,1) 0%,rgba(96,171,248,1) 44%,rgba(64,150,238,1) 100%); /* IE10+ */ - filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#7abcff', endColorstr='#4096ee',GradientType=0 ); /* IE6-9 */ - background: linear-gradient(top, rgba(122,188,255,1) 0%,rgba(96,171,248,1) 44%,rgba(64,150,238,1) 100%); /* W3C */ - color:#fff; - text-shadow:0px -1px 0px rgba(0,0,0,0.2); - cursor: default; - } - - .menu li a:hover, - .menu li.hover>a{ - background:#f5f5f5; - } - - /* sub menus */ - .menu ul{ - background: #efefef; - border:1px solid #ccc; - } - - .menu ul li{} - .menu ul li a{} - - /* sub-sub menus */ - .menu ul ul{} - .menu ul ul li{} - .menu ul ul li a{} - - /* arrows */ - /* arrow down */ .menu li.has-menu span.arrow{border-color-top:#ccc;border-color:#ccc transparent transparent transparent;} - /* arrow left */ .menu li li.has-menu span.arrow, .menu.vertical li.has-menu span.arrow - {border-color-left:#ccc;border-color:transparent transparent transparent #ccc;} - /* arrow right */ .menu.vertical.right li.has-menu span.arrow{border-color-right:#ccc;border-color:transparent #ccc transparent transparent;} - - /* dividers */ .menu ul li.divider{border-top:1px solid #ccc;} - .menu ul li.divider a{border-top:1px solid #fff;} - - /* icons */ - .menu .icon{margin:-10px 7px -10px -5px;vertical-align: middle;} - .menu ul .icon{margin-left:-10px;} diff --git a/frontend/templates/default/static/css/kickstart.css b/frontend/templates/default/static/css/kickstart.css deleted file mode 100644 index 35da369..0000000 --- a/frontend/templates/default/static/css/kickstart.css +++ /dev/null @@ -1,608 +0,0 @@ -/* - 99Lime.com HTML KickStart by Joshua Gatcke - kickstart.css - - Don't edit the file if you want HTML KickStart to be upgradeable. - Instead, copy any CSS selectors you want to modify to your style.css file. - - // Colors - blue: #4D99E0; -*/ -/*--------------------------------- - IMPORTS ------------------------------------*/ -@import url(kickstart-buttons.css); -@import url(kickstart-forms.css); -@import url(kickstart-menus.css); -@import url(kickstart-grid.css); -@import url(kickstart-icons.css); -@import url(jquery.fancybox-1.3.4.css); -@import url(prettify.css); -@import url(chosen.css); -@import url(tiptip.css); - -/*--------------------------------- - HTML ELEMENTS ------------------------------------*/ -a{color:#4D99E0;outline:0;} -a:active{color:inherit;} -a:visited{} -a:hover{} -a img{border:0;} -strong,b{color:#000;background:lightyellow;position:relative;top:0;left:0;padding:2px 5px;} -strike{} -em,i{} -.hide{display:none;} -.show{display:block;} - -/*--------------------------------- - UTILITY ------------------------------------*/ -.center{text-align:center;} -.left{text-align:left;} -.right{text-align:right;} - -/*--------------------------------- - HR ------------------------------------*/ -hr{clear:both;border-bottom:0;border-top:1px dotted #ccc;border-right:0;border-left:0;margin:30px 0;min-height: 0px;height:1px;} -hr.alt1{border-style: solid;} -hr.alt2{border-style: dashed;} - -/*--------------------------------- - HTML5 ELEMENTS (shim) ------------------------------------*/ -article,aside,details,figcaption,figure, -footer,header,hgroup,menu,nav,section { -display:block; -} - -/*--------------------------------- - HEADINGS ------------------------------------*/ -h1,h2,h3,h4,h5,h6{ -font-weight:bold; -line-height:140%; -} - -h1{ -font-size:3em; -margin:10px 0 10px 0; -} - -h2{ -font-size:2.5em; -margin:10px 0 10px 0; -} - -h3{ -font-size:2em; -margin:10px 0 10px 0; -line-height:130%; -} - -h4{ -font-size:1.5em; -margin:10px 0 10px 0; -} - -h5{ -font-size:1.2em; -margin:10px 0 10px 0; -} - -h6{ -font-size:1em; -margin:10px 0 5px 0; -} - -/*--------------------------------- - PARAGRAPHS ------------------------------------*/ -p{ -line-height:150%; -color:#666; -margin:10px 0; -} - -/*--------------------------------- - BLOCKQUOTES ------------------------------------*/ -blockquote{ -font-size:1.5em; -font-style: italic; -color:#888; -margin:30px 30px 30px 0; -padding:0 0 0 20px; -border-left:1px solid #ccc; -} - - blockquote span{font-size:0.7em;color:#000;display:block;} - blockquote.small{font-size:1.2em;} - -/*--------------------------------- - LISTS ------------------------------------*/ -ul, ol{ -padding:0; -margin:0 0 20px 25px; -} - - li{ - padding:5px 0; - margin:0; - } - -ul.checks{ -padding:0; -margin:0 0 20px 0; -} - - ul.checks li{ - list-style-type:none; - margin:0; - background:url(img/icon-check.png) no-repeat 5px 0.5em; - padding-left:30px; - } - -ul.alt{ -padding:0; -margin:0 0 20px 0; -} - - ul.alt li{ - list-style-type:none; - border-top:1px dotted #ccc; - border-bottom:1px dotted #ccc; - margin:0 0 -1px 0; - background:url(img/icon-arrow-right.png) no-repeat 5px 0.7em; - padding-left:20px; - } - -/*--------------------------------- - PRE & CODE ------------------------------------*/ -code{ -font-family: Consolas, "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", Monaco, "Courier New", Courier, monospace; -font-size:0.9em; -border:1px solid lightblue; -padding:3px; --moz-border-radius:3px; --webkit-border-radius:3px; -border-radius:3px; -color:#518BAB; -} - -pre{ -white-space: pre-wrap; /* css-3 */ -white-space: -moz-pre-wrap !important; /* Mozilla, since 1999 */ -white-space: -pre-wrap; /* Opera 4-6 */ -white-space: -o-pre-wrap; /* Opera 7 */ -word-wrap: break-word; /* Internet Explorer 5.5+ */ -margin: 0px 0px 0px 0px; -padding:5px 5px 3px 5px; -background:#fff; --moz-border-radius:5px; --webkit-border-radius:5px; -border-radius:5px; -box-shadow:inset 0px 0px 7px rgba(0,0,0,0.2); -padding:10px; -margin:0 0 20px 0; -border:1px solid #ddd; -font-family: Consolas, "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", Monaco, "Courier New", Courier, monospace; -font-size:0.9em; -} - -/*--------------------------------- - TABLES ------------------------------------*/ -table{width:100%;margin:0 0 10px 0;text-align:left;border-collapse: collapse;} - thead, tbody{margin:0;padding:0;} - th, td{padding:7px 10px;font-size:0.9em;border-bottom:1px dotted #ddd;text-align:left;} - thead th{font-size:0.9em;padding:3px 10px;border-bottom:1px solid #ddd;} - tbody tr.last th, - tbody tr.last td{border-bottom:0;} - -/* striped */ -table.striped{} - table.striped tr.alt{background:#f5f5f5;} - table.striped thead th{background:#fff;} - table.striped tbody th{background:#f5f5f5;text-align:right;padding-right:15px;border-right:1px dotted #e5e5e5;} - table.striped tbody tr.alt th{background:#efefef;} - -/* tight */ -table.tight{} - table.tight th, .tight td{padding:2px 10px;} - -/* sortable */ -table.sortable{border:1px solid #ddd;} - table.sortable thead th{cursor: pointer;position:relative;top:0;left:0;border-right:1px solid #ddd;} - table.sortable thead th:hover{background:#efefef;} - table.sortable span.arrow{border-style:solid;border-width:5px; - display:block;position:absolute;top:50%;right:5px;font-size:0; - border-color:#ccc transparent transparent transparent; - line-height:0;height:0;width:0;margin-top:-2px;} - table.sortable span.arrow.up{border-color:transparent transparent #ccc transparent;margin-top:-7px;} - -/*--------------------------------- - TABS ------------------------------------*/ -ul.tabs{ -margin:10px 0 -1px 0; -padding:0; -width:100%; -border-bottom:1px solid #e5e5e5; -float:left; -} - - ul.tabs.left{text-align:left;} - ul.tabs.center{text-align:center;} - ul.tabs.right{text-align:right;} - - ul.tabs li{ - list-style-type:none; - margin:0 2px 0 0; - padding:0; - display:inline-block; - *display:inline;/*IE ONLY*/ - position:relative; - top:0; - left:0; - *top:1px;/*IE 7 ONLY*/ - zoom:1; - } - - ul.tabs li a{ - text-decoration:none; - color:#666; - display:inline-block; - padding:9px 15px; - position: relative; - top:0; - left:0; - line-height:100%; - background:#f5f5f5; - box-shadow: inset 0px -3px 3px rgba(0,0,0,0.03); - border:1px solid #e5e5e5; - border-bottom:0; - font-size:0.9em; - zoom:1; - } - - ul.tabs li a:hover{ - background:#fff; - } - - ul.tabs li.current a{ - position:relative; - top:1px; - left:0; - background:#fff; - box-shadow: none; - color:#222; - } - - .tab-content{ - border:1px solid #efefef; - border-left:1px solid #e5e5e5; - clear:both; - padding:20px; - margin:0 0 40px 0; - } - - /* w/icon */ - ul.tabs .icon{ - margin:-3px 7px -3px -5px; - position:relative; - top:-2px; - left:0; - } - -/*--------------------------------- - BREADCRUMBS ------------------------------------*/ -ul.breadcrumbs{ -margin:10px 0; -padding:0; -line-height:0%; -font-size:0; -} - - ul.breadcrumbs li{ - list-style-type:none; - margin:0; - padding:0; - display:inline-block; - *display:inline; /* IE ONLY*/ - position:relative; - zoom:1; - line-height:100%; - font-size:14px; /* 0.8em default to override font-size:0; on parent*/ - } - - ul.breadcrumbs li a{ - display:inline-block; - *display:inline; /* IE ONLY*/ - position:relative; - padding:5px 15px 5px 5px; - font-size:0.9em; - zoom:1; - margin:0; - background:url(img/icon-arrow-right.png) no-repeat right center; - } - - ul.breadcrumbs li.last a{ - color:#333; - cursor: default; - text-decoration:none; - background:none; - } - - ul.breadcrumbs li.last a:hover{ - text-decoration:none; - } - - /* Alternative Style */ - ul.breadcrumbs.alt1{ - border:1px solid transparent; - font-size:0; - } - - ul.breadcrumbs.alt1 li a{ - padding:10px 25px 10px 15px; - background:url(img/breadcrumbs-bg.gif) no-repeat right center; - text-decoration:none; - border-top:1px solid #efefef; - border-bottom:1px solid #efefef; - font-size:12px; - } - - ul.breadcrumbs.alt1 a:hover{ - text-decoration:underline; - } - - ul.breadcrumbs.alt1 li.first a{ - border-left:1px solid #efefef; - } - - ul.breadcrumbs.alt1 li.last a{ - background:none; - border-right:1px solid #efefef; - } - -/*--------------------------------- - IMAGES ------------------------------------*/ -/* - for img .style1, .style2, .style3 - view js/kickstart.js Image Style Helpers -*/ -img{ -margin:0; -padding:0; -display:inline-block; -position:relative; -zoom:1; -} - - img.align-left{float:left;margin:0 10px 5px 0;} - img.align-right{float:right;margin:0 0 5px 10px;} - img.full-width{clear:both;display:block;width:100%;height:auto;margin:0 0 10px 0;} - - span.img-wrap{ - display:inline-block; - position: relative; - top:0; - left:0; - zoom: 1; - } - - span.img-inner{ - display:block; - position:absolute; - top:0; - left:0; - width: 100%; - height:100%; - } - - span.img-wrap img{ - display:block; - padding:0; - margin:0; - } - - img.style1{/* DON'T Style This */} - - .img-wrap.style1{ - border:1px solid #ddd; - padding:3px; - background-color:#fff; - margin-left:-3px; - margin-top:-3px; - margin-bottom:-3px; - } - - img.style2{/* DON'T Style This */} - - .img-wrap.style2{ - -moz-border-radius:10px; - -webkit-border-radius:10px; - border-radius:10px; - overflow: hidden; - } - - img.style3{/* DON'T Style This */} - - .img-wrap.style3{ - margin-left:-3px; - margin-top:-3px; - margin-bottom:-3px; - border:3px solid #efefef; - -moz-border-radius:10px; - -webkit-border-radius:10px; - border-radius:10px; - overflow: hidden; - -moz-box-shadow: inset 0px 0px 10px rgba(0,0,0,0.5); - -webkit-box-shadow: inset 0px 0px 10px rgba(0,0,0,0.5); - box-shadow: inset 0px 0px 10px rgba(0,0,0,0.5); - } - - div.caption{ - background:#f5f5f5; - border:1px solid #ddd; - padding:3px; - } - - div.caption img{ - display:block; - padding:0; - margin:0; - } - - div.caption span{ - display:block; - margin-top:3px; - font-size:0.8em; - color:#666; - padding:0px 5px; - } - - .gallery{} - - .gallery a{ - display:inline-block; - position:relative; - border:1px solid #ddd; - background:#fff; - padding:3px; - margin:5px; - -moz-border-radius:5px; - -webkit-border-radius:5px; - border-radius:5px; - } - - .gallery a img{ - display: block; - position: relative; - margin:0; - padding:0; - } - -/*--------------------------------- - SLIDESHOW2 ------------------------------------*/ -.slideshow-wrap{ -clear:both; -margin:0; -padding:0; -position:relative; -top:0; -left:0; -overflow:hidden; -clear:both; -} - - .slideshow-inner{ - overflow:hidden; - clear:both; - position:relative; - top:0; - left:0; - border:1px solid #efefef; - } - - .slideshow{ - clear:both; - margin:0; - padding:0; - width:auto; - height:auto; - overflow:hidden; - } - - .slideshow li{ - list-style-type:none; - margin:0; - padding:0; - float:left; - display:block; - } - - .slideshow img{vertical-align: bottom;} - - .slideshow-buttons{ - text-align:right; - margin:3px 0 0 0; - padding:0; - } - - .slideshow-buttons li{display:inline;position:relative;top:0;left:0;line-height:100%;margin:0;padding:0;} - .slideshow-buttons li.current a{background:#ddd;} - - .slideshow-buttons a{ - display:inline; - position:relative; - top:0; - left:0; - padding:1px 3px; - margin:0 1px; - line-height:100%; - border:1px solid #efefef; - text-decoration:none; - font-size:0.8em; - } - -/*--------------------------------- - MEDIA ------------------------------------*/ -.video-placeholder, -.video-placeholder a{ -position:relative; -top:0; -left:0; -display:inline-block; -*display:inline; -zoom:1; -margin:0; -padding:0; -text-decoration:none; -} - .video-placeholder img{vertical-align: bottom;} - .video-placeholder .icon{ - position:absolute; - top:50%; - left:50%; - margin:-24px 0 0 -24px; - } - - .video-placeholder:hover .icon{ - text-shadow:0px 0px 10px rgba(255,255,255,0.8), 0px 2px 2px rgba(0,0,0,1); - cursor: pointer; - } - -iframe.map-placeholder{ -border:1px solid #ccc; -margin:0; -padding:0; -overflow: hidden; -box-sizing: border-box; -} - -.calendar{ -text-align:center; -text-shadow:0px 1px 0px #fff; -color:#666; -border:1px solid #ddd; -background:#f5f5f5; -} - .calendar h4#current-month{font-size:1em;margin:0;padding:2% 0;border-top:1px solid #fff;line-height:100%;font-weight:normal;} - .calendar table{margin:0;border-collapse: collapse;border:0;} - .calendar th, .calendar td{text-align:center;padding:0;font-weight: normal;line-height:100%;border:0;} - .calendar th{width:14.2857%;padding:2% 0;border-bottom:1px solid #ddd;} - .calendar td{background:#fff;padding:3% 0;} - .calendar th.weekday{color:#999;font-size:0.7em;text-transform: uppercase;} - .calendar td.other-month{color:#ccc;} - .calendar td.current-month{background:#fff;color:#777;} - - diff --git a/frontend/templates/default/static/css/prettify.css b/frontend/templates/default/static/css/prettify.css deleted file mode 100644 index c4941e9..0000000 --- a/frontend/templates/default/static/css/prettify.css +++ /dev/null @@ -1 +0,0 @@ -.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee} \ No newline at end of file diff --git a/frontend/templates/default/static/css/tiptip.css b/frontend/templates/default/static/css/tiptip.css deleted file mode 100644 index fb82c19..0000000 --- a/frontend/templates/default/static/css/tiptip.css +++ /dev/null @@ -1,99 +0,0 @@ -/* - TipTip CSS - Version 1.2 - http://code.drewwilson.com/entry/tiptip-jquery-plugin -*/ - -#tiptip_holder { display: none; position: absolute; top: 0; left: 0; z-index: 99999; } -#tiptip_holder.tip_top { padding-bottom: 5px; } -#tiptip_holder.tip_bottom { padding-top: 5px; } -#tiptip_holder.tip_right { padding-left: 5px; } -#tiptip_holder.tip_left { padding-right: 5px; } - -#tiptip_content { -font-size: 11px; -color: #fff; -text-shadow: 0 0 2px #000; -padding: 4px 8px; -border: 1px solid rgba(255,255,255,0.25); -background:#212121; -background-color: rgba(25,25,25,0.92); -background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, from(transparent), to(#000)); -border-radius: 3px; --webkit-border-radius: 3px; --moz-border-radius: 3px; -box-shadow: 0 0 3px #555; --webkit-box-shadow: 0 0 3px #555; --moz-box-shadow: 0 0 3px #555; -*background:#212121; -} - -#tiptip_arrow, #tiptip_arrow_inner { -position: absolute; -border-color: transparent; -border-style: solid; -border-width: 6px; -height: 0; -width: 0; -} - -#tiptip_holder.tip_top #tiptip_arrow { -border-top-color: #fff; -border-top-color: rgba(255,255,255,0.35); -} - -#tiptip_holder.tip_bottom #tiptip_arrow { -border-bottom-color: #fff; -border-bottom-color: rgba(255,255,255,0.35); -} - -#tiptip_holder.tip_right #tiptip_arrow { -border-right-color: #fff; -border-right-color: rgba(255,255,255,0.35); -} - -#tiptip_holder.tip_left #tiptip_arrow { -border-left-color: #fff; -border-left-color: rgba(255,255,255,0.35); -} - -#tiptip_holder.tip_top #tiptip_arrow_inner { -margin-top: -7px; -margin-left: -6px; -border-top-color: rgb(25,25,25); -border-top-color: rgba(25,25,25,0.92); -} - -#tiptip_holder.tip_bottom #tiptip_arrow_inner { -margin-top: -5px; -margin-left: -6px; -border-bottom-color: rgb(25,25,25); -border-bottom-color: rgba(25,25,25,0.92); -} - -#tiptip_holder.tip_right #tiptip_arrow_inner { -margin-top: -6px; -margin-left: -5px; -border-right-color: rgb(25,25,25); -border-right-color: rgba(25,25,25,0.92); -} - -#tiptip_holder.tip_left #tiptip_arrow_inner { -margin-top: -6px; -margin-left: -7px; -border-left-color: rgb(25,25,25); -border-left-color: rgba(25,25,25,0.92); -} - -/* Webkit Hacks */ -@media screen and (-webkit-min-device-pixel-ratio:0) { - #tiptip_content { - padding: 4px 8px 5px 8px; - background-color: rgba(45,45,45,0.88); - } - #tiptip_holder.tip_bottom #tiptip_arrow_inner { - border-bottom-color: rgba(45,45,45,0.88); - } - #tiptip_holder.tip_top #tiptip_arrow_inner { - border-top-color: rgba(20,20,20,0.92); - } -} \ No newline at end of file diff --git a/frontend/templates/default/static/images/button/restart.png b/frontend/templates/default/static/images/button/restart.png deleted file mode 100644 index 03ffe2dbf341042d68cd20cd81419c99743bee95..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2059 zcmV+m2=w=fP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01ejw01ejxLMWSf00007bV*G`2iyb< z3=|f{9`x)000)anL_t(|+U;9?a8%V5|DF4G0~?4+qA~^|FtLRYqGdmD7CHq}n{nDv z*d$x0ew1NUEbUBdXNtvk%3z&BajK)Xv=v+NqqI{Nc2gpw)e$lZ4J3Ovk~AN-Q7Y9< z8^cGG=3_VSp8i3YYItw6-@8Neo5>$}@4R#0{k?O~J?GrBz!au1g(>_WgR(i8+wHZD zj9{k4qKYnD8yXV*ot?gOmmC2O$9k(!18yd+0l@{(LIBqqjY&X1GrF0mm5ARQ9@Y+K zi|L0>{&-R7-80*R5rR10YuJuZ1yojg3vAQXlK_7s7oMAe-GhU}_w@F@JeqX^+-|Qe8rA(^+>*dB9RxnCK)r(T zJ_~h*NHBCRQAEW6FCox!fUDxRO2QjftLABL_MOfe0dBX~7LDi!0NfOZcrO9ZDrmc< z^qq`Te{pnF|2h-jN1(-VJkqTzZDm`V@577};Pra76YuJK0j!xs^dyLXv|xc{x6kL( zlYKF#)3X{(+W=HdBH9v(&Zus0fAK#Vb%KS{D;@)3UCgD)^h9KAMtxh`AA?<8T`BF| z;c(B}pItcn>CuSoBLb=c2oupcnk8Bu4tMX%m<2eUbzcVaOJ?!}I-|gMOX)w538&{; zTKfeS*aKj84E8rj8TfVD30StwQ=)Y0j4}9!Lh+ZP<*q3wh=b$dv=Ppd&?;J6 zeg8^Cub50gDe-WO$qy=~n=?Im0Fbib9ieHf0K8`+as`zBSXwQ>>GUiCQyTz_!EIeJ z*MvfWgV~G$?DjPdLE;F2X(lm3wUqutX|VuevDswu0OOHtPaXh5p$5s|2h6`HZ%)e+ zSh}=!9)mq5w|j<1wQae|;iU{b4dAc|1uLCS&yti05CZp`eSKp7ZfB=2lEXp{D^?Ex zP{yw(zMZNMAg81D1b}%4Pc#RE{^i*$+PECGI{>=U;NHy)o@H=-m_RRG#2T|crqqVF z-fB2|;hM#ysNrU%<{7??;-6*xYlC|Tcrt-!Yz+1qsCxF3lQ&%gN~tfJC>~IBRb#g8 zy{PESFB#mGqMDB*V|XYoA0W)CI)p|kcSf^KKvPrG7=SIQ*%3e0-X7?WivR|kCTb2L zN02hGmw=;5#{2!#Z2I=Nb^*8BTMVGYcxhL}|CvgDpDt(`ZvqgvA7Y42vHX^}c$?FT%n~2u z0a{uDe*UplX(6=NV)G=!UQMrpQEI=PHVRUX~rMDno2#~UI zh}bywW$>@0Y9CZ(K>+_Yl-ARJ z@R<^PKA*0b9-LsR+ge%zr&6j15UADAv;>ESFfweZ%Reg!bc3-m7`$Om5{Z&AoQ~SR z0;n{Kt%LH0#hGYU$OVKsGi1UhEp$3NZpS48QvwwD82}?DG3Hjc+iSa|36Rp?2cqAa zteg4Ki2n0SfqRTeg(h+0HqiG2^}kC<9=RAy%Pjw61hc1(lWAJ3jcJBdIEq+wHYoGkei` zO|$p`d_HzzfL>luuHBbxOHM*vVh+c8D`8*{CU2Ai&esrM0MV{sueKOaCEo? z)EWle1K_GS$|A2a#ynCs4rOE;G{UM?t1Rcv74HPcY?zve(*TYVsDp`5kfQTni_~RI zxEf5K8@H^IxGO?HU~q8wYpFI%Cfh4aPJ7+=K)e-Z4HTIJ6Y%(qqSKqkkIaw@0>+m_ z?M(#ig3&R0W}>!!Ft2S51zt&)&Xk&^`}(^7F{^mVZ>&}>#QF0?k)gROFz?c=dVNdq zPsh_tYIDuobVA|5Om(7V;1?sS%ajuL5@;QOvLw}n3G|}Q>iJM8 z(4DhnDD}i;brqo15Wxkeg#a%CF#QuEIsvB?cz~EB1ho+HvHA10P`1t?v-+#C3)|?a pQ!|P*&B_zoRi-e7DNG^T_%C7+@a2xVPw4;v002ovPDHLkV1hI5!&d+R diff --git a/frontend/templates/default/static/images/button/start.png b/frontend/templates/default/static/images/button/start.png deleted file mode 100644 index b631414417b4d86172278167cb45bef0a00f81a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1039 zcmV+q1n~QbP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01ejw01ejxLMWSf00007bV*G`2iyb< z3={{iuGAg?00WOnL_t(|+U=Q7Y!p=-$G^Xst`;#uYe_^eB-RLN6gqDPIB3#{7YxSk zj(akC%q!tLzp8%bU!Pjfc)nHyn~=zGK6_#%a*sEkWN5>0E2s+?0nkL z%$?zISd~pck+n>G^y-w85F+@Ji~@>i1p3(!=E&Af-Roo&u=st*s>-Ax%!3^r;m4&D zP~b5J?`dv!(z+ge2LQ(M4?j|Ky)!Oa)vpxp5-v1!2~B(RWf=u5)^3GzKP{(r`|8H0P`fXd zQ@j0m<+Y-m+U?srze4T)$S}-pG788N=)=Gx>bhhycIN-%rvKjjw>ePMvSaC`<2%k7kcK_(;H@B8wIlZ~zpH-M5iP4z# z@SWRRTw`#rof`f!e{NEVLkDlL078Ezv+~gR__6;g`QRoGEcauiI`1cwUth1ru?rK4qpp%Z^RE;lEc)0lzR1v8{N@ zOzBgdoBXe#|Th$Q2U>sKi*n93={D#|;c7+Ad7%91E zGCBOCSL$V@1l$JkZp(VHCh^rx0`3xM@Sfuw92@)UPOajrD+CbeB&oSwiA4MgJj`+g zOp-#;dMCJgMB%>+@wL-0lP_Zh&=-NMa^TnVLpRZ&L4yW9;yx6GIER~3Qyl;R002ov JPDHLkV1kA3=+giI diff --git a/frontend/templates/default/static/images/button/stop.png b/frontend/templates/default/static/images/button/stop.png deleted file mode 100644 index 8ace279ae06cb405e8bd2287334e96319dce69d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 298 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 iOM29*SF`&`{~rK=WQCuj>qPGW0000;(@ diff --git a/frontend/templates/default/static/images/error/info.png b/frontend/templates/default/static/images/error/info.png deleted file mode 100644 index 83de6545870d0e0af384f39f59b6a05c7277a3b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4403 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 diff --git a/frontend/templates/default/static/images/error/success.png b/frontend/templates/default/static/images/error/success.png deleted file mode 100644 index 743ef89c3a48cb65d51f0efb7305be9f2beba401..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4447 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 diff --git a/frontend/templates/default/static/images/error/warning.png b/frontend/templates/default/static/images/error/warning.png deleted file mode 100644 index 1c6b8eb0fb39720842be86b0343adfdcbf929982..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4567 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 By~_Xq diff --git a/frontend/templates/default/static/images/menu/alerts.png b/frontend/templates/default/static/images/menu/alerts.png deleted file mode 100644 index 1e8e45461f18208489336381f9bfc35759218c4d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 410 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=f!eQwFr$;k>O}H9yX7V%GN6ZjG7h9r#RZ1x~6Ff z$z}%bF)`dE^!rUt`R2{{-~QD}=rnkf?;f~6@3Vow4c{)e6?u#w8C4kU9d>p;zUZx~ zz;jl#G0{(N;fGIe|Nh)3@Zk5{xwFE5Gi{i8f5RD;cMnrO{g|w!HT#>*`z<>p7w@NLwaRI+)+^UFzmq-D%_VE{ zeYSg+)!&-G|JkEv7jw01i?ikE`0UrVJXI>wKW|O+%L6bP0l+XkKDR7|7 diff --git a/frontend/templates/default/static/images/menu/api.png b/frontend/templates/default/static/images/menu/api.png deleted file mode 100644 index 61fcf18ed367993cc6b4c93b414439a1e47b4215..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 420 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=f!eQwFr$;k>`dwwn5K^8I~yVDIySbAK)W*C$GCc)RWOje8GwL@hnTu=I?c*W1pD=M7RT z87&scH~tJN;raV3XOk35`uU}jJ(m_*N<@?^NuT}C%P{5P!A;NJF|O$e=XsUtaiF4Uo-U3d7N_rCP~aiAh+PZ!4!i_^&o5*Y_Ll4nS;|5bN=JahAF z2}ubFi5VKDjNE#Y3mHqM2fb-ZOkm(PWNg(>$b8J?6xey4At+cy`0xaFhNe>j3J>gf RRDs4Zc)I$ztaD0e0s!<^K+XUF diff --git a/frontend/templates/default/static/images/menu/ip.png b/frontend/templates/default/static/images/menu/ip.png deleted file mode 100644 index 2fbdc5fe90764a6331b733c6632a2af6a3d092d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 256 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85sDEfH31!Z9ZwBAbW|YuPgf<7EW;??(6THL1s#pxJHyX=jZ08 z=9Mrw7o{eaq^2m8XO?6rxO@5rgg5eu0~JMkx;TbdoK8-V_|zace@SQIh5C|>#_87= zzDQhjh1JL8E0fuJ9y|Sj90u-5_ERM#B;FYq7|cmXNa(OEF1s5W6uW`ND_UV=XF20W pPEIwpZr&8}BMvWxJ>DoXFeJYgyQp!kLKJ8XgQu&X%Q~loCICC`P7VM7 diff --git a/frontend/templates/default/static/images/menu/key.png b/frontend/templates/default/static/images/menu/key.png deleted file mode 100644 index 99abe6745bb0d588fd7c6c94b5b06fc10acd72ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 363 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR4Px#*e&+V6&s8qlBzB@hY?Dq48 zS$e#!@BhkumJUd6Yn;sE@F;YNy1Og4zQeCfo{olw>IdARw`M*TU%;2Kxud)!XWF|1 za-I9qJf|mndtc3xnRWHp-na@q`9-^@TR;A<|AF^tT+-sFabg-kKQnl``njxgN@xNA Dz!{EN diff --git a/frontend/templates/default/static/images/menu/lock.png b/frontend/templates/default/static/images/menu/lock.png deleted file mode 100644 index 5781586a3df2ace989a5a5c1abad82d0918667e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 396 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR4T0*q5xkv@m~hv;TtxcE?>EFBBpQg@jp- z_uY-sjk^76?TD`nWtB&K2x~jfBB_sL7ef!@4wjpur~Zp l-MjIjU)?8_J%#V=8Pw*+%vt&0QU@4v44$rjF6*2UngCw}n@a!y diff --git a/frontend/templates/default/static/images/menu/overview.png b/frontend/templates/default/static/images/menu/overview.png deleted file mode 100644 index 293bf1d6ca08e455944fa33cd47173a7a101eb9b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 357 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85sDEfH31!Z9ZwBAbW|YuPgf<7EW<4m4B*gATuRPTq8=H^K)}k z^GX<;i&7IyQd1PlGfOfQ+&z5*!W;R-fr<`zx;TbdoL)M4BVUt&h%3ME52YWh>gGaW z;*U-oDSz?kj=sXnXNwkR|F-4xJ@RyFf-=jgxwrORpL}~ybVrDoXz{P`(~sC*^P~o* zIxx>^Fu%Zj%gVTAo}~ldmIJBBT-fidG5*J{aINS8pG?FxVGE{vR?V{_vchBBs-h}i zy-;Ab%bC3C9FLb7@9nD$EDm!SRxEEwVRe{auzfyL36lf!V+nT7lToFLQ+GFSu|D-t tWKZcct>@_vSZz|)E_o*YH}~(kcrjmZy@PZ3F97|*;OXk;vd$@?2>>4Cfj0mE diff --git a/frontend/templates/default/static/images/menu/reinstall.png b/frontend/templates/default/static/images/menu/reinstall.png deleted file mode 100644 index 97335a686702ad22cd8ce409760c690791069696..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 447 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85sDEfH31!Z9ZwBAbW|YuPgf<7EW;mp|~&g3xPtCC9V-A&iT2y zsd*&~&PAz-C8;S2<(VZJ3hti10pX2&;y|mUJY5_^EKaYTZ0mQ}L7>&1N07D4r8{4M zgLgM8t37Lx_eSvr9hWW?OIqnY;EoVUa5*fc$T~^-2(Qoi+VWz43tRhLwLz z3zolSe&FKr{y>=TCNYx{Dia z9`*itW9sq7|0%t%Ti!@__neh7-*7DS+K#*#Z?r5UCZv?zSaqx7a`U`nh3`wF{N$nz zOh4c%^WExl(Ie&fCGiL10*Ws)y<>Jxkl(@D!LVdQOz}6Zlyef=3hP59Uny|5m~1+> kl~eO)z2^U~#=5!pF9+l;2)jKw9T=1hp00i_>zopr0Nv`afB*mh diff --git a/frontend/templates/default/static/images/menu/statistics.png b/frontend/templates/default/static/images/menu/statistics.png deleted file mode 100644 index fe13c4ae616e06e75312f33c30eda36ca23c5e3a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 279 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85sDEfH31!Z9ZwBAbW|YuPgf<7EW;<-dATOe*uLgOI#yLobz*Y zQ}ap~oQqNuOHxx5$}>wc6x=<11Hv2m#DR*6JY5_^EKVmUC@{^CU^jd;DLF+!2*~>D z{wQjWq=^Tl(A$rRMeMk1Z-GvP^69}1aRWoaw*q&f7hFz%)ZTE@Y=Xy|eRW)JtiD~vrH2^q&YL`6 zS6qu>)fe-qSwSyXGDu|IF^}1OaIXG=9K*hb=~f?~J1N#b;_f*9UCuR?RpT0mxM-~B za{l?Jjyi1Bo_#vz>sOw+t33ob82Jj8otTvSety_*=KJpztX5QHcbs8}btrzRw!~IK z=H!#2>;3!66C%4$ugI%!$qIFx7<#+!ZO!Zho0MK_L^njHcP=|nlb`X!a`tJJeQGnL z`uTRZRWq9W{m?Gs>XvI=mdw;)m7m0NX#Y>A%Y~o+xbJ0l_sv>YmC4!)3~>feS3j3^ HP6$MU}whwS0gU~=v0UwQg1|Kd4YZgp?Ix92y1+ar%@&pMaAI<@T`_wi3Y z*T3~X|8?&BKYkvr_9KfvcKB#bKeOyJXRp`tE33YCoz2>QXPtQf&|#P+#}H@oJ~j@n z_CwMiB}|k$Po-XbCS$fZIK8yeHLX8d&1BY}rrnq3|LpNwef`b0-@N^&pMTl)x9|LJ zZiIy*K(FY4y%I>k!tevV&ws4=ZvOr<^TWy diff --git a/frontend/templates/default/static/images/misc/logo.png b/frontend/templates/default/static/images/misc/logo.png deleted file mode 100644 index c309d8eff474fae7483dd33e8762888483455553..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5164 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 I3>=a6Kd+s;Y5)KL diff --git a/frontend/templates/default/static/images/misc/wrench.png b/frontend/templates/default/static/images/misc/wrench.png deleted file mode 100644 index 52d7d6d532af12d9123170fec01834b42f1288df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 826 zcmV-A1I7G_P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01ejw01ejxLMWSf00007bV*G`2iyw+ z7ceA_-RQXh00O#6L_t(Y$JLh0YZFlv#=kRnqSjh#iyJ{VS`b7E&BM}#kfyj05ow00 z2(HA6F5C((D(XV?FYr;&qLeO56I&O>2Q(YOWE$JVs#W8o_(0nVZBqJ3GILy*#9A|H zn#{(#nz`qj`{SN-zjKFR@o>A{^5V>v?J1#8hQkl$SH@+lKrWZE69%r%CHM#g9?#A$ zDfx6{1kHdlGgV3q)rNuv$G zj?7|OAkei~NMAOP2(Iii14o@sr6GTfy)H|DFpP?2Z&hG^DkqmH?S( zVLyp+nKnF$#`A%DRnuN3k<$w5>5k{0;R8@>Ojs7A5cRWp~UxeL%S6UhhNfM;aHH&JY1q=K+`?Y#o9_YBdz7MSS{ z-EOy>NYr!_sLkZN7)iQE)A~QJ^^}W$J$A~LN^%c@)cmKBUrCbe)->O@lA8TW81Zxu z2#SgRrI6Dt!QjA;Qae=6hjn!a*Au4uKsaQg9ZROTB^n->ET{hp08mv`EG&pS07fO| z+mOfxVD~cJxNf8mL?Zp)%f3G|z45HXyr@0*cmAvCgua$keuB+v%k5T0n%KM4y*CZ&frO0f9=dcy<( z<~@>NH5BsywE9OmXA4zT#YD_#V42ocR!)a9Y5o7lFBt+0I=$OzL;wH)07*qoM6N<$ Ef(^-XuK)l5 diff --git a/frontend/templates/default/static/images/status/offline.png b/frontend/templates/default/static/images/status/offline.png deleted file mode 100644 index 236cb950aea94b1067a5e78a86275d4190e1be22..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 294 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0XB zj({-ZRBb+KpdfpRr>`sf9ac7B5k}^$m`y+-$r9Iy66gHf+|;}h2Ir#G#FEq$h4Rdj z33p&54EiS*n ztI{$_Y?jG4b(NF{_HFzhrVG7beaE!>z^muAoq?P>_hv|UH+0!*CEjWHcvdnom#bAR zPr5?nUeSdQEIV9|?o?W4dHo>QmevMe=jml1rY1G4{;*T#KnTMb?gPuSxX+mFanNgi j&ED~~y6($V|BH-wd5w-g{JP>G(0L4=u6{1-oD!M`sf9ac7BVHO)lyI(*d$r9Iy66gHf+|;}h2Ir#G#FEq$h4Rdj z37Fi*Ar_~PPTI)ZV!-2ipV8WYb32Q!ZBtWQ<)sTLjJI?cCoA0L zP`JpF;`o5W>Cn>8|GWRDR_wN0mv*O(Gl1Fh12fNpwwzb~jD^x}4$LC#@>vU{Hf6?0 zU34o*bK5g@H|LuhcaL7(f7+@sgTe~DWM4fH>70I diff --git a/frontend/templates/default/static/images/status/suspended.png b/frontend/templates/default/static/images/status/suspended.png deleted file mode 100644 index be97c143418b268a108eb80e076696984b3a8f56..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 294 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0XB zj({-ZRBb+KpdfpRr>`sf9ac7BQSF1LmZ$=SBuiW)N}Tg^b5rw57@Uhz6H8K46v{J8 zG8EiBeFMT9`NV;WCVRR#hFF|FI_V&9vjLB5yrA}0Z-w&>4-T|e7CoG#xJHL@wE+{m z-oi}^OP8!_=|A^h|J(G3@2Zx}Qu@SFwSX;6fx$0yd2mC=lmiSV@^)VwmajT}O{2WY z*!bC6TOWbra{BB3-MXgfv-$jqcWbvcXfX#YWw4*h+QJj>!5G7KK$gKUwEp0mw~lX( kU+i(YK->PiO$TM&D_CSKZ@uke6WPPS<}TpTbXZY;4-*q3U-QxCmJ21?9uA5Xy=vCY znI4y?%-i!}^-TNwKK~>mww;;qa_@b?iQWqs%o_7U|N2aNvP$Rlrqj3nZ79z3ce&S) z8*0m>rc{*CGqdZ2_q^xJW9w2C4#-4^PW-%UU3~QW!`1alO7W|z81MX@$uNWQh{XNf zX+4FPrb#d6T(xS}x4nxruFYPyGw=58R{u9zzL#fi{l<7B=;~~NLy`)~_CG?WrT#uP z!`&hDt3^w}{d6~RiR5PoX04KI5t!E|vHL+&Y=gid Tvh(i%LxI85)z4*}Q$iB}LzA2h diff --git a/frontend/templates/default/static/js/cvm.js b/frontend/templates/default/static/js/cvm.js deleted file mode 100644 index d88304c..0000000 --- a/frontend/templates/default/static/js/cvm.js +++ /dev/null @@ -1,72 +0,0 @@ -var command_running = false; - -$(function(){ - $('.clickable').click(function(event) - { - if($(this).data('url')) - { - url = $(this).data('url'); - - if(event.which == 1) - { - if($(this).hasClass('external')) - { - window.open(url); - } - else - { - window.location = url; - } - - event.stopPropagation(); - return false; - } - else if(event.which == 2) - { - window.open(url); - event.stopPropagation(); - return false; - } - } - }); - - - $('.button-loader').click(function(){ - if(command_running === false) - { - $('.button-loader').addClass('disabled').click(function(event){ - event.preventDefault(); - event.stopPropagation(); - return false; - }); - - $(this).children('.button-icon').addClass('running')[0].src = "/templates/default/static/images/misc/loading.gif"; - command_running = true; - } - }); - - $('.enabler').change(function(){ - var group = $(this).data("enable-group"); - - if($(this).is(':checked')) - { - $('.disabled').each(function(index, item){ - if($(item).data("disabled-group") == group) - { - $(item).children('input').removeAttr('disabled'); - $(item).removeClass('disabled'); - } - }); - } - else - { - $('form .field').each(function(index, item){ - if($(item).data("disabled-group") == group) - { - $(item).children('input').attr('disabled', 'disabled'); - $(item).addClass('disabled'); - } - }); - } - }) -}); diff --git a/frontend/templates/default/static/js/kickstart.js b/frontend/templates/default/static/js/kickstart.js deleted file mode 100644 index 6da726d..0000000 --- a/frontend/templates/default/static/js/kickstart.js +++ /dev/null @@ -1,527 +0,0 @@ -/* - 99Lime.com HTML KickStart by Joshua Gatcke - kickstart.js -*/ - -jQuery(document).ready(function($){ - - /*--------------------------------- - MENU Dropdowns - -----------------------------------*/ - $('ul.menu').each(function(){ - // find menu items with children. - $(this).find('li').has('ul').addClass('has-menu') - .append(' '); - }); - - $('ul.menu li').hover(function(){ - $(this).find('ul:first').stop(true, true).fadeIn('fast'); - $(this).addClass('hover'); - }, - function(){ - $(this).find('ul').stop(true, true).fadeOut('slow'); - $(this).removeClass('hover'); - }); - - - /*--------------------------------- - ScrollTo/LocalScroll - -----------------------------------*/ - $.localScroll({ - filter: ':not(.tabs>li>a)', - lazy: true, - hash: true - }); - - /*--------------------------------- - Slideshow - -----------------------------------*/ - // setup - $('ul.slideshow').wrap('
') - .each(function(){ - var wrap = $(this).parents('.slideshow-wrap'); - var inner = $(this).parents('.slideshow-inner'); - - // set height and width - var swidth = $(this).attr('width'); - var sheight = $(this).attr('height'); - if(swidth != undefined && sheight != undefined){wrap.width(swidth); inner.height(sheight);} - $(this).width('999em').attr('width','').attr('height',''); - - $(this).find('li:first').addClass('current'); - $(this).delay(2000).animate({alpha:1}, function(){ - KSslideshow($(this), null); - }); - - // add navigation buttons - var items = $(this).find('li'); - wrap.append('
    '); - items.each(function(index){ - wrap.find('.slideshow-buttons') - .append('
  • '+(index+1)+'
  • '); - }); - - // stop play button - wrap.find('.slideshow-buttons') - .append('
  • Stop
  • '); - wrap.find('.slideshow-stop a').click(function(e){ - e.preventDefault(); - if(!wrap.hasClass('paused')) { next = wrap.find('.slideshow li.current');} - else{ next = null; } - var slideshow = $(this).parents('.slideshow-wrap').find('ul.slideshow'); - KSslideshow(slideshow, next); - }); - - // button events - $('.slideshow-buttons li:first').addClass('current'); - wrap.find('.slideshow-buttons li').not('.slideshow-stop').find('a').click(function(e){ - e.preventDefault(); - var slideshow = wrap.find('ul.slideshow'); - var link = $(e.currentTarget).attr('rel'); - var next = slideshow.find('li').eq(link); - KSslideshow(slideshow, next); - }); - }); - - // run slideshow - function KSslideshow(slideshow, next){ - var wrap = slideshow.parents('.slideshow-wrap'); - var inner = slideshow.parents('.slideshow-inner'); - var current = slideshow.find('li.current'); - var nav = slideshow.parents('.slideshow-wrap').find('.slideshow-buttons li'); - var sstop = nav.filter('.slideshow-stop'); - - // next slide - if(next == null) { - next = current.next(); - if(next.length < 1) { next = slideshow.find('li:first'); } - wrap.removeClass('paused'); - sstop.find('a').html('Stop'); - }else{ - wrap.addClass('paused'); - sstop.find('a').html('Play'); - } - - // scroll - var scrollEffect = inner.scrollTo(next, 1000); - current.removeClass('current'); - next.addClass('current'); - nav.removeClass('current').eq(next.index()).addClass('current'); - slideshow.delay(3000).animate({alpha:1}, function(){ - if(wrap.hasClass('paused') == false){ KSslideshow(slideshow, null); } - }); - } - - /*--------------------------------- - HTML5 Placeholder Support - -----------------------------------*/ - $('input[placeholder], textarea[placeholder]').placeholder(); - - /*--------------------------------- - SELECT MENUS - CHOSEN - -----------------------------------*/ - $('select.fancy').chosen(); - - /*--------------------------------- - MEDIA - -----------------------------------*/ - // video placeholder - $('a.video-placeholder').each(function(){ - $(this).append(''); - }); - - // calendar - $('.calendar').each(function(){ - if($(this).attr('data-month')) { cMonth = $(this).attr('data-month'); } - if($(this).attr('data-year')) { cYear = $(this).attr('data-year'); } - $(this).calendarWidget({month:cMonth, year: cYear}); - }); - - /*--------------------------------- - Rich Text Editor - -----------------------------------*/ - $('.rte').each(function(index){ - var newID = $(this).attr('id')+index; - $(this).hide(); - $(this).wrap('
    '); - - // toolbar - var wrap = $(this).parents('.rte-wrap'); - var rhtml = wrap.find('textarea.rte'); - var toolbar = '
    \ -
      \ -
    • \ -
    • \ -
    • \ -
    • \ -
    • \ -
    • \ -
    • \ -
    • \ -
    • \ -
    • \ -
    • \ -
    • \ -
    • \ -
    • HTML
    • \ -
    '; - - // editor - var editor = '
    '; - wrap.prepend(toolbar+editor); - wrap.find('.rte-editor').html(rhtml.val()); - }); - - // buttons - $('.rte-wrap .rte-toolbar a').live('click',function(e){ - e.preventDefault(); - var rte = $(this).parents('.rte-wrap'); - var toolbar = rte.find('.rte-toolbar'); - var editor = rte.find('.rte-editor'); - var rhtml = rte.find('textarea.rte'); - var bool = false; - var value = $(this).attr('data-value'); - var command = $(this).attr('data-command'); - var rprompt = $(this).attr('data-prompt'); - - if(rprompt){ - value = prompt(rprompt); - } - - // html toggle - if($(this).parent().hasClass('html-toggle')) { - if(rhtml.is(':hidden')) { rhtml.val(editor.html()); rte.removeClass('editmode'); } - else{ editor.html(rhtml.val()); rte.addClass('editmode'); } - editor.toggle(); - rhtml.toggle(); - } - - // do the action - document.execCommand(command, bool, value); - }); - - // select - $('.rte-wrap .rte-toolbar select').live('change', function(e){ - var bool = false; - var value = $(this).val(); - - // do the action - document.execCommand('formatblock', bool, value); - }); - - /*--------------------------------- - Fancybox Lightbox - -----------------------------------*/ - $('.gallery').each(function(i){ - $(this).find('a').attr('rel', 'gallery'+i) - .fancybox({ - overlayOpacity: 0.2, - overlayColor: '#000' - }); - }); - - // lightbox links - $('a.lightbox').fancybox({ - overlayOpacity: 0.2, - overlayColor: '#000' - }); - - /*--------------------------------- - Tabs - -----------------------------------*/ - // tab setup - $('.tab-content').addClass('clearfix').not(':first').hide(); - $('ul.tabs').each(function(){ - var current = $(this).find('li.current'); - if(current.length < 1) { $(this).find('li:first').addClass('current'); } - current = $(this).find('li.current a').attr('href'); - $(current).show(); - }); - - // tab click - $('ul.tabs a[href^="#"]').live('click', function(e){ - e.preventDefault(); - var tabs = $(this).parents('ul.tabs').find('li'); - var tab_next = $(this).attr('href'); - var tab_current = tabs.filter('.current').find('a').attr('href'); - $(tab_current).hide(); - tabs.removeClass('current'); - $(this).parent().addClass('current'); - $(tab_next).show(); - return false; - }); - - /*--------------------------------- - Image Style Helpers - -----------------------------------*/ - $('img.style1, img.style2, img.style3').each(function(){ - $(this).wrap(''); - $(this).parent('span') - .attr('class', 'img-wrap '+$(this).attr('class')) - .css('background-image','url('+$(this).attr('src')+')') - .css('background-position','center center') - .css('background-repeat','no-repeat') - .css('height', $(this).height()) - .css('width', $(this).width()); - $(this).attr('class','').hide(); - }); - - /*--------------------------------- - Image Caption - -----------------------------------*/ - $('img.caption').each(function(){ - $(this).wrap('
    '); - $(this).parents('div.caption') - .attr('class', 'caption '+$(this).attr('class')) - .css('width', $(this).width()+'px'); - if($(this).attr('title')){ - $(this).parents('div.caption') - .append(''+$(this).attr('title')+''); - } - }); - - /*--------------------------------- - Notice - -----------------------------------*/ - $('.notice a.close').live('click', function(e){ - e.preventDefault(); - var notice = $(this).parents('.notice'); - $(this).hide(); - notice.fadeOut('slow'); - }); - - /*--------------------------------- - ToolTip - TipTip - -----------------------------------*/ - - // Standard tooltip - $('.tooltip, .tooltip-top, .tooltip-bottom, .tooltip-right, .tooltip-left').each(function(){ - // variables - var tpos = 'top'; - var content = $(this).attr('title'); - var dataContent = $(this).attr('data-content'); - var keepAlive = false; - var action = 'hover'; - - // position - if($(this).hasClass('tooltip-top')) { tpos = 'top'; } - if($(this).hasClass('tooltip-right')) { tpos = 'right'; } - if($(this).hasClass('tooltip-bottom')) { tpos = 'bottom'; } - if($(this).hasClass('tooltip-left')) { tpos = 'left'; } - - // content - $('.tooltip-content').removeClass('hide').wrap('
    '); - if(dataContent) { content = $(dataContent).html(); keepAlive = true; } - - // action (hover or click) defaults to hover - if($(this).attr('data-action') == 'click') { action = 'click'; } - - // tooltip - $(this).attr('title','') - .tipTip({defaultPosition: tpos, content: content, keepAlive: keepAlive, activation: action, delay: 1000}); - }); - - /*--------------------------------- - Table Sort - -----------------------------------*/ - // init - var aAsc = []; - $('table.sortable').each(function(){ - $(this).find('thead th').each(function(index){$(this).attr('rel', index);}); - $(this).find('th,td').each(function(){$(this).attr('value', $(this).text());}); - }); - - // table click - $('table.sortable thead th').live('click', function(e){ - // update arrow icon - $(this).parents('table.sortable').find('span.arrow').remove(); - $(this).append(''); - - // sort direction - var nr = $(this).attr('rel'); - aAsc[nr] = aAsc[nr]=='asc'?'desc':'asc'; - if(aAsc[nr] == 'desc'){ $(this).find('span.arrow').addClass('up'); } - - // sort rows - var rows = $(this).parents('table.sortable').find('tbody tr'); - rows.tsort('td:eq('+nr+')',{order:aAsc[nr],attr:'value'}); - - // fix row classes - rows.removeClass('alt first last'); - var table = $(this).parents('table.sortable'); - table.find('tr:even').addClass('alt'); - table.find('tr:first').addClass('first'); - table.find('tr:last').addClass('last'); - }); - - /*--------------------------------- - Icons - -----------------------------------*/ - $('.icon').each(function(){ - $(this).append('') - .css('display', 'inline-block'); - }); - - /*--------------------------------- - CSS Helpers - -----------------------------------*/ - if($.browser.msie){ $('body').addClass('msie'); } - $('input[type=checkbox]').addClass('checkbox'); - $('input[type=radio]').addClass('radio'); - $('input[type=file]').addClass('file'); - $('[disabled=disabled]').addClass('disabled'); - $('table').find('tr:even').addClass('alt'); - $('table').find('tr:first-child').addClass('first'); - $('table').find('tr:last-child').addClass('last'); - $('ul').find('li:first-child').addClass('first'); - $('ul').find('li:last-child').addClass('last'); - $('hr').before('
     
    '); - $('[class*=col_]').not('input, label').addClass('column').each( - function (i,o){ - var div = document.createElement('div'); div.className="inner"; - while (o.firstChild) div.appendChild(o.firstChild); - o.appendChild(div); - } - ); - $('pre').addClass('prettyprint');prettyPrint(); - -}); - -/** - * jQuery.LocalScroll - Animated scrolling navigation, using anchors. - * Copyright © 2007-2009 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com - * Dual licensed under MIT and GPL. - * Date: 3/11/2009 - * @author Ariel Flesler - * @version 1.2.7 - **/ -(function($){var l=location.href.replace(/#.*/,'');var g=$.localScroll=function(a){$('body').localScroll(a)};g.defaults={duration:1e3,axis:'y',event:'click',stop:true,target:window,reset:true};g.hash=function(a){if(location.hash){a=$.extend({},g.defaults,a);a.hash=false;if(a.reset){var e=a.duration;delete a.duration;$(a.target).scrollTo(0,a);a.duration=e}i(0,location,a)}};$.fn.localScroll=function(b){b=$.extend({},g.defaults,b);return b.lazy?this.bind(b.event,function(a){var e=$([a.target,a.target.parentNode]).filter(d)[0];if(e)i(a,e,b)}):this.find('a,area').filter(d).bind(b.event,function(a){i(a,this,b)}).end().end();function d(){return!!this.href&&!!this.hash&&this.href.replace(this.hash,'')==l&&(!b.filter||$(this).is(b.filter))}};function i(a,e,b){var d=e.hash.slice(1),f=document.getElementById(d)||document.getElementsByName(d)[0];if(!f)return;if(a)a.preventDefault();var h=$(b.target);if(b.lock&&h.is(':animated')||b.onBefore&&b.onBefore.call(b,a,f,h)===false)return;if(b.stop)h.stop(true);if(b.hash){var j=f.id==d?'id':'name',k=$(' ').attr(j,d).css({position:'absolute',top:$(window).scrollTop(),left:$(window).scrollLeft()});f[j]='';$('body').prepend(k);location=e.hash;k.remove();f[j]=d}h.scrollTo(f,b).trigger('notify.serialScroll',[f])}})(jQuery); - -/** - * jQuery.ScrollTo - Easy element scrolling using jQuery. - * Copyright © 2007-2009 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com - * Dual licensed under MIT and GPL. - * Date: 5/25/2009 - * @author Ariel Flesler - * @version 1.4.2 - * - * http://flesler.blogspot.com/2007/10/jqueryscrollto.html - */ -;(function(d){var k=d.scrollTo=function(a,i,e){d(window).scrollTo(a,i,e)};k.defaults={axis:'xy',duration:parseFloat(d.fn.jquery)>=1.3?0:1};k.window=function(a){return d(window)._scrollable()};d.fn._scrollable=function(){return this.map(function(){var a=this,i=!a.nodeName||d.inArray(a.nodeName.toLowerCase(),['iframe','#document','html','body'])!=-1;if(!i)return a;var e=(a.contentWindow||a).document||a.ownerDocument||a;return d.browser.safari||e.compatMode=='BackCompat'?e.body:e.documentElement})};d.fn.scrollTo=function(n,j,b){if(typeof j=='object'){b=j;j=0}if(typeof b=='function')b={onAfter:b};if(n=='max')n=9e9;b=d.extend({},k.defaults,b);j=j||b.speed||b.duration;b.queue=b.queue&&b.axis.length>1;if(b.queue)j/=2;b.offset=p(b.offset);b.over=p(b.over);return this._scrollable().each(function(){var q=this,r=d(q),f=n,s,g={},u=r.is('html,body');switch(typeof f){case'number':case'string':if(/^([+-]=)?\d+(\.\d+)?(px|%)?$/.test(f)){f=p(f);break}f=d(f,this);case'object':if(f.is||f.style)s=(f=d(f)).offset()}d.each(b.axis.split(''),function(a,i){var e=i=='x'?'Left':'Top',h=e.toLowerCase(),c='scroll'+e,l=q[c],m=k.max(q,i);if(s){g[c]=s[h]+(u?0:l-r.offset()[h]);if(b.margin){g[c]-=parseInt(f.css('margin'+e))||0;g[c]-=parseInt(f.css('border'+e+'Width'))||0}g[c]+=b.offset[h]||0;if(b.over[h])g[c]+=f[i=='x'?'width':'height']()*b.over[h]}else{var o=f[h];g[c]=o.slice&&o.slice(-1)=='%'?parseFloat(o)/100*m:o}if(/^\d+$/.test(g[c]))g[c]=g[c]<=0?0:Math.min(g[c],m);if(!a&&b.queue){if(l!=g[c])t(b.onAfterFirst);delete g[c]}});t(b.onAfter);function t(a){r.animate(g,j,b.easing,a&&function(){a.call(this,n,b)})}}).end()};k.max=function(a,i){var e=i=='x'?'Width':'Height',h='scroll'+e;if(!d(a).is('html,body'))return a[h]-d(a)[e.toLowerCase()]();var c='client'+e,l=a.ownerDocument.documentElement,m=a.ownerDocument.body;return Math.max(l[h],m[h])-Math.min(l[c],m[c])};function p(a){return typeof a=='object'?a:{top:a,left:a}}})(jQuery); - -/* -* Placeholder plugin for jQuery -* --- -* Copyright 2010, Daniel Stocks (http://webcloud.se) -* Released under the MIT, BSD, and GPL Licenses. -*/ - -(function(b){function d(a){this.input=a;a.attr("type")=="password"&&this.handlePassword();b(a[0].form).submit(function(){if(a.hasClass("placeholder")&&a[0].value==a.attr("placeholder"))a[0].value=""})}d.prototype={show:function(a){if(this.input[0].value===""||a&&this.valueIsPlaceholder()){if(this.isPassword)try{this.input[0].setAttribute("type","text")}catch(b){this.input.before(this.fakePassword.show()).hide()}this.input.addClass("placeholder");this.input[0].value=this.input.attr("placeholder")}}, -hide:function(){if(this.valueIsPlaceholder()&&this.input.hasClass("placeholder")&&(this.input.removeClass("placeholder"),this.input[0].value="",this.isPassword)){try{this.input[0].setAttribute("type","password")}catch(a){}this.input.show();this.input[0].focus()}},valueIsPlaceholder:function(){return this.input[0].value==this.input.attr("placeholder")},handlePassword:function(){var a=this.input;a.attr("realType","password");this.isPassword=!0;if(b.browser.msie&&a[0].outerHTML){var c=b(a[0].outerHTML.replace(/type=(['"])?password\1/gi, -"type=$1text$1"));this.fakePassword=c.val(a.attr("placeholder")).addClass("placeholder").focus(function(){a.trigger("focus");b(this).hide()});b(a[0].form).submit(function(){c.remove();a.show()})}}};var e=!!("placeholder"in document.createElement("input"));b.fn.placeholder=function(){return e?this:this.each(function(){var a=b(this),c=new d(a);c.show(!0);a.focus(function(){c.hide()});a.blur(function(){c.show(!1)});b.browser.msie&&(b(window).load(function(){a.val()&&a.removeClass("placeholder");c.show(!0)}), -a.focus(function(){if(this.value==""){var a=this.createTextRange();a.collapse(!0);a.moveStart("character",0);a.select()}}))})}})(jQuery); - -/* - * FancyBox - jQuery Plugin - * Simple and fancy lightbox alternative - * - * Examples and documentation at: http://fancybox.net - * - * Copyright (c) 2008 - 2010 Janis Skarnelis - * That said, it is hardly a one-person project. Many people have submitted bugs, code, and offered their advice freely. Their support is greatly appreciated. - * - * Version: 1.3.4 (11/11/2010) - * Requires: jQuery v1.3+ - * - * Dual licensed under the MIT and GPL licenses: - * http://www.opensource.org/licenses/mit-license.php - * http://www.gnu.org/licenses/gpl.html - */ - -(function(b){var m,t,u,f,D,j,E,n,z,A,q=0,e={},o=[],p=0,d={},l=[],G=null,v=new Image,J=/\.(jpg|gif|png|bmp|jpeg)(.*)?$/i,W=/[^\.]\.(swf)\s*$/i,K,L=1,y=0,s="",r,i,h=false,B=b.extend(b("
    ")[0],{prop:0}),M=b.browser.msie&&b.browser.version<7&&!window.XMLHttpRequest,N=function(){t.hide();v.onerror=v.onload=null;G&&G.abort();m.empty()},O=function(){if(false===e.onError(o,q,e)){t.hide();h=false}else{e.titleShow=false;e.width="auto";e.height="auto";m.html('

    The requested content cannot be loaded.
    Please try again later.

    '); -F()}},I=function(){var a=o[q],c,g,k,C,P,w;N();e=b.extend({},b.fn.fancybox.defaults,typeof b(a).data("fancybox")=="undefined"?e:b(a).data("fancybox"));w=e.onStart(o,q,e);if(w===false)h=false;else{if(typeof w=="object")e=b.extend(e,w);k=e.title||(a.nodeName?b(a).attr("title"):a.title)||"";if(a.nodeName&&!e.orig)e.orig=b(a).children("img:first").length?b(a).children("img:first"):b(a);if(k===""&&e.orig&&e.titleFromAlt)k=e.orig.attr("alt");c=e.href||(a.nodeName?b(a).attr("href"):a.href)||null;if(/^(?:javascript)/i.test(c)|| -c=="#")c=null;if(e.type){g=e.type;if(!c)c=e.content}else if(e.content)g="html";else if(c)g=c.match(J)?"image":c.match(W)?"swf":b(a).hasClass("iframe")?"iframe":c.indexOf("#")===0?"inline":"ajax";if(g){if(g=="inline"){a=c.substr(c.indexOf("#"));g=b(a).length>0?"inline":"ajax"}e.type=g;e.href=c;e.title=k;if(e.autoDimensions)if(e.type=="html"||e.type=="inline"||e.type=="ajax"){e.width="auto";e.height="auto"}else e.autoDimensions=false;if(e.modal){e.overlayShow=true;e.hideOnOverlayClick=false;e.hideOnContentClick= -false;e.enableEscapeButton=false;e.showCloseButton=false}e.padding=parseInt(e.padding,10);e.margin=parseInt(e.margin,10);m.css("padding",e.padding+e.margin);b(".fancybox-inline-tmp").unbind("fancybox-cancel").bind("fancybox-change",function(){b(this).replaceWith(j.children())});switch(g){case "html":m.html(e.content);F();break;case "inline":if(b(a).parent().is("#fancybox-content")===true){h=false;break}b('
    ').hide().insertBefore(b(a)).bind("fancybox-cleanup",function(){b(this).replaceWith(j.children())}).bind("fancybox-cancel", -function(){b(this).replaceWith(m.children())});b(a).appendTo(m);F();break;case "image":h=false;b.fancybox.showActivity();v=new Image;v.onerror=function(){O()};v.onload=function(){h=true;v.onerror=v.onload=null;e.width=v.width;e.height=v.height;b("").attr({id:"fancybox-img",src:v.src,alt:e.title}).appendTo(m);Q()};v.src=c;break;case "swf":e.scrolling="no";C='';P="";b.each(e.swf,function(x,H){C+='';P+=" "+x+'="'+H+'"'});C+='";m.html(C);F();break;case "ajax":h=false;b.fancybox.showActivity();e.ajax.win=e.ajax.success;G=b.ajax(b.extend({},e.ajax,{url:c,data:e.ajax.data||{},error:function(x){x.status>0&&O()},success:function(x,H,R){if((typeof R=="object"?R:G).status==200){if(typeof e.ajax.win== -"function"){w=e.ajax.win(c,x,H,R);if(w===false){t.hide();return}else if(typeof w=="string"||typeof w=="object")x=w}m.html(x);F()}}}));break;case "iframe":Q()}}else O()}},F=function(){var a=e.width,c=e.height;a=a.toString().indexOf("%")>-1?parseInt((b(window).width()-e.margin*2)*parseFloat(a)/100,10)+"px":a=="auto"?"auto":a+"px";c=c.toString().indexOf("%")>-1?parseInt((b(window).height()-e.margin*2)*parseFloat(c)/100,10)+"px":c=="auto"?"auto":c+"px";m.wrapInner('
    ');e.width=m.width();e.height=m.height();Q()},Q=function(){var a,c;t.hide();if(f.is(":visible")&&false===d.onCleanup(l,p,d)){b.event.trigger("fancybox-cancel");h=false}else{h=true;b(j.add(u)).unbind();b(window).unbind("resize.fb scroll.fb");b(document).unbind("keydown.fb");f.is(":visible")&&d.titlePosition!=="outside"&&f.css("height",f.height());l=o;p=q;d=e;if(d.overlayShow){u.css({"background-color":d.overlayColor, -opacity:d.overlayOpacity,cursor:d.hideOnOverlayClick?"pointer":"auto",height:b(document).height()});if(!u.is(":visible")){M&&b("select:not(#fancybox-tmp select)").filter(function(){return this.style.visibility!=="hidden"}).css({visibility:"hidden"}).one("fancybox-cleanup",function(){this.style.visibility="inherit"});u.show()}}else u.hide();i=X();s=d.title||"";y=0;n.empty().removeAttr("style").removeClass();if(d.titleShow!==false){if(b.isFunction(d.titleFormat))a=d.titleFormat(s,l,p,d);else a=s&&s.length? -d.titlePosition=="float"?'
    '+s+'
    ':'
    '+s+"
    ":false;s=a;if(!(!s||s==="")){n.addClass("fancybox-title-"+d.titlePosition).html(s).appendTo("body").show();switch(d.titlePosition){case "inside":n.css({width:i.width-d.padding*2,marginLeft:d.padding,marginRight:d.padding}); -y=n.outerHeight(true);n.appendTo(D);i.height+=y;break;case "over":n.css({marginLeft:d.padding,width:i.width-d.padding*2,bottom:d.padding}).appendTo(D);break;case "float":n.css("left",parseInt((n.width()-i.width-40)/2,10)*-1).appendTo(f);break;default:n.css({width:i.width-d.padding*2,paddingLeft:d.padding,paddingRight:d.padding}).appendTo(f)}}}n.hide();if(f.is(":visible")){b(E.add(z).add(A)).hide();a=f.position();r={top:a.top,left:a.left,width:f.width(),height:f.height()};c=r.width==i.width&&r.height== -i.height;j.fadeTo(d.changeFade,0.3,function(){var g=function(){j.html(m.contents()).fadeTo(d.changeFade,1,S)};b.event.trigger("fancybox-change");j.empty().removeAttr("filter").css({"border-width":d.padding,width:i.width-d.padding*2,height:e.autoDimensions?"auto":i.height-y-d.padding*2});if(c)g();else{B.prop=0;b(B).animate({prop:1},{duration:d.changeSpeed,easing:d.easingChange,step:T,complete:g})}})}else{f.removeAttr("style");j.css("border-width",d.padding);if(d.transitionIn=="elastic"){r=V();j.html(m.contents()); -f.show();if(d.opacity)i.opacity=0;B.prop=0;b(B).animate({prop:1},{duration:d.speedIn,easing:d.easingIn,step:T,complete:S})}else{d.titlePosition=="inside"&&y>0&&n.show();j.css({width:i.width-d.padding*2,height:e.autoDimensions?"auto":i.height-y-d.padding*2}).html(m.contents());f.css(i).fadeIn(d.transitionIn=="none"?0:d.speedIn,S)}}}},Y=function(){if(d.enableEscapeButton||d.enableKeyboardNav)b(document).bind("keydown.fb",function(a){if(a.keyCode==27&&d.enableEscapeButton){a.preventDefault();b.fancybox.close()}else if((a.keyCode== -37||a.keyCode==39)&&d.enableKeyboardNav&&a.target.tagName!=="INPUT"&&a.target.tagName!=="TEXTAREA"&&a.target.tagName!=="SELECT"){a.preventDefault();b.fancybox[a.keyCode==37?"prev":"next"]()}});if(d.showNavArrows){if(d.cyclic&&l.length>1||p!==0)z.show();if(d.cyclic&&l.length>1||p!=l.length-1)A.show()}else{z.hide();A.hide()}},S=function(){if(!b.support.opacity){j.get(0).style.removeAttribute("filter");f.get(0).style.removeAttribute("filter")}e.autoDimensions&&j.css("height","auto");f.css("height","auto"); -s&&s.length&&n.show();d.showCloseButton&&E.show();Y();d.hideOnContentClick&&j.bind("click",b.fancybox.close);d.hideOnOverlayClick&&u.bind("click",b.fancybox.close);b(window).bind("resize.fb",b.fancybox.resize);d.centerOnScroll&&b(window).bind("scroll.fb",b.fancybox.center);if(d.type=="iframe")b('').appendTo(j); -f.show();h=false;b.fancybox.center();d.onComplete(l,p,d);var a,c;if(l.length-1>p){a=l[p+1].href;if(typeof a!=="undefined"&&a.match(J)){c=new Image;c.src=a}}if(p>0){a=l[p-1].href;if(typeof a!=="undefined"&&a.match(J)){c=new Image;c.src=a}}},T=function(a){var c={width:parseInt(r.width+(i.width-r.width)*a,10),height:parseInt(r.height+(i.height-r.height)*a,10),top:parseInt(r.top+(i.top-r.top)*a,10),left:parseInt(r.left+(i.left-r.left)*a,10)};if(typeof i.opacity!=="undefined")c.opacity=a<0.5?0.5:a;f.css(c); -j.css({width:c.width-d.padding*2,height:c.height-y*a-d.padding*2})},U=function(){return[b(window).width()-d.margin*2,b(window).height()-d.margin*2,b(document).scrollLeft()+d.margin,b(document).scrollTop()+d.margin]},X=function(){var a=U(),c={},g=d.autoScale,k=d.padding*2;c.width=d.width.toString().indexOf("%")>-1?parseInt(a[0]*parseFloat(d.width)/100,10):d.width+k;c.height=d.height.toString().indexOf("%")>-1?parseInt(a[1]*parseFloat(d.height)/100,10):d.height+k;if(g&&(c.width>a[0]||c.height>a[1]))if(e.type== -"image"||e.type=="swf"){g=d.width/d.height;if(c.width>a[0]){c.width=a[0];c.height=parseInt((c.width-k)/g+k,10)}if(c.height>a[1]){c.height=a[1];c.width=parseInt((c.height-k)*g+k,10)}}else{c.width=Math.min(c.width,a[0]);c.height=Math.min(c.height,a[1])}c.top=parseInt(Math.max(a[3]-20,a[3]+(a[1]-c.height-40)*0.5),10);c.left=parseInt(Math.max(a[2]-20,a[2]+(a[0]-c.width-40)*0.5),10);return c},V=function(){var a=e.orig?b(e.orig):false,c={};if(a&&a.length){c=a.offset();c.top+=parseInt(a.css("paddingTop"), -10)||0;c.left+=parseInt(a.css("paddingLeft"),10)||0;c.top+=parseInt(a.css("border-top-width"),10)||0;c.left+=parseInt(a.css("border-left-width"),10)||0;c.width=a.width();c.height=a.height();c={width:c.width+d.padding*2,height:c.height+d.padding*2,top:c.top-d.padding-20,left:c.left-d.padding-20}}else{a=U();c={width:d.padding*2,height:d.padding*2,top:parseInt(a[3]+a[1]*0.5,10),left:parseInt(a[2]+a[0]*0.5,10)}}return c},Z=function(){if(t.is(":visible")){b("div",t).css("top",L*-40+"px");L=(L+1)%12}else clearInterval(K)}; -b.fn.fancybox=function(a){if(!b(this).length)return this;b(this).data("fancybox",b.extend({},a,b.metadata?b(this).metadata():{})).unbind("click.fb").bind("click.fb",function(c){c.preventDefault();if(!h){h=true;b(this).blur();o=[];q=0;c=b(this).attr("rel")||"";if(!c||c==""||c==="nofollow")o.push(this);else{o=b("a[rel="+c+"], area[rel="+c+"]");q=o.index(this)}I()}});return this};b.fancybox=function(a,c){var g;if(!h){h=true;g=typeof c!=="undefined"?c:{};o=[];q=parseInt(g.index,10)||0;if(b.isArray(a)){for(var k= -0,C=a.length;ko.length||q<0)q=0;I()}};b.fancybox.showActivity=function(){clearInterval(K);t.show();K=setInterval(Z,66)};b.fancybox.hideActivity=function(){t.hide()};b.fancybox.next=function(){return b.fancybox.pos(p+ -1)};b.fancybox.prev=function(){return b.fancybox.pos(p-1)};b.fancybox.pos=function(a){if(!h){a=parseInt(a);o=l;if(a>-1&&a1){q=a>=l.length?0:l.length-1;I()}}};b.fancybox.cancel=function(){if(!h){h=true;b.event.trigger("fancybox-cancel");N();e.onCancel(o,q,e);h=false}};b.fancybox.close=function(){function a(){u.fadeOut("fast");n.empty().hide();f.hide();b.event.trigger("fancybox-cleanup");j.empty();d.onClosed(l,p,d);l=e=[];p=q=0;d=e={};h=false}if(!(h||f.is(":hidden"))){h= -true;if(d&&false===d.onCleanup(l,p,d))h=false;else{N();b(E.add(z).add(A)).hide();b(j.add(u)).unbind();b(window).unbind("resize.fb scroll.fb");b(document).unbind("keydown.fb");j.find("iframe").attr("src",M&&/^https/i.test(window.location.href||"")?"javascript:void(false)":"about:blank");d.titlePosition!=="inside"&&n.empty();f.stop();if(d.transitionOut=="elastic"){r=V();var c=f.position();i={top:c.top,left:c.left,width:f.width(),height:f.height()};if(d.opacity)i.opacity=1;n.empty().hide();B.prop=1; -b(B).animate({prop:0},{duration:d.speedOut,easing:d.easingOut,step:T,complete:a})}else f.fadeOut(d.transitionOut=="none"?0:d.speedOut,a)}}};b.fancybox.resize=function(){u.is(":visible")&&u.css("height",b(document).height());b.fancybox.center(true)};b.fancybox.center=function(a){var c,g;if(!h){g=a===true?1:0;c=U();!g&&(f.width()>c[0]||f.height()>c[1])||f.stop().animate({top:parseInt(Math.max(c[3]-20,c[3]+(c[1]-j.height()-40)*0.5-d.padding)),left:parseInt(Math.max(c[2]-20,c[2]+(c[0]-j.width()-40)*0.5- -d.padding))},typeof a=="number"?a:200)}};b.fancybox.init=function(){if(!b("#fancybox-wrap").length){b("body").append(m=b('
    '),t=b('
    '),u=b('
    '),f=b('
    '));D=b('
    ').append('
    ').appendTo(f); -D.append(j=b('
    '),E=b(''),n=b('
    '),z=b(''),A=b(''));E.click(b.fancybox.close);t.click(b.fancybox.cancel);z.click(function(a){a.preventDefault();b.fancybox.prev()});A.click(function(a){a.preventDefault();b.fancybox.next()}); -b.fn.mousewheel&&f.bind("mousewheel.fb",function(a,c){if(h)a.preventDefault();else if(b(a.target).get(0).clientHeight==0||b(a.target).get(0).scrollHeight===b(a.target).get(0).clientHeight){a.preventDefault();b.fancybox[c>0?"prev":"next"]()}});b.support.opacity||f.addClass("fancybox-ie");if(M){t.addClass("fancybox-ie6");f.addClass("fancybox-ie6");b('').prependTo(D)}}}; -b.fn.fancybox.defaults={padding:10,margin:40,opacity:false,modal:false,cyclic:false,scrolling:"auto",width:560,height:340,autoScale:true,autoDimensions:true,centerOnScroll:false,ajax:{},swf:{wmode:"transparent"},hideOnOverlayClick:true,hideOnContentClick:false,overlayShow:true,overlayOpacity:0.7,overlayColor:"#777",titleShow:true,titlePosition:"float",titleFormat:null,titleFromAlt:false,transitionIn:"fade",transitionOut:"fade",speedIn:300,speedOut:300,changeSpeed:300,changeFade:"fast",easingIn:"swing", -easingOut:"swing",showCloseButton:true,showNavArrows:true,enableEscapeButton:true,enableKeyboardNav:true,onStart:function(){},onCancel:function(){},onComplete:function(){},onCleanup:function(){},onClosed:function(){},onError:function(){}};b(document).ready(function(){b.fancybox.init()})})(jQuery); - -// HTML5 Shiv v3 | @jon_neal @afarkas @rem | MIT/GPL2 Licensed -// Uncompressed source: https://github.com/aFarkas/html5shiv -(function(a,b){function f(a){var c,d,e,f;b.documentMode>7?(c=b.createElement("font"),c.setAttribute("data-html5shiv",a.nodeName.toLowerCase())):c=b.createElement("shiv:"+a.nodeName);while(a.firstChild)c.appendChild(a.childNodes[0]);for(d=a.attributes,e=d.length,f=0;f7?e[g][e[g].length-1]=e[g][e[g].length-1].replace(d,'$1font[data-html5shiv="$2"]'):e[g][e[g].length-1]=e[g][e[g].length-1].replace(d,"$1shiv\\:$2"),e[g]=e[g].join("}");return e.join("{")}var c=function(a){return a.innerHTML="",a.childNodes.length===1}(b.createElement("a")),d=function(a,b,c){return b.appendChild(a),(c=(c?c(a):a.currentStyle).display)&&b.removeChild(a)&&c==="block"}(b.createElement("nav"),b.documentElement,a.getComputedStyle),e={elements:"abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video".split(" "),shivDocument:function(a){a=a||b;if(a.documentShived)return;a.documentShived=!0;var f=a.createElement,g=a.createDocumentFragment,h=a.getElementsByTagName("head")[0],i=function(a){f(a)};c||(e.elements.join(" ").replace(/\w+/g,i),a.createElement=function(a){var b=f(a);return b.canHaveChildren&&e.shivDocument(b.document),b},a.createDocumentFragment=function(){return e.shivDocument(g())});if(!d&&h){var j=f("div");j.innerHTML=["x"].join(""),h.insertBefore(j.lastChild,h.firstChild)}return a}};e.shivDocument(b),a.html5=e;if(c||!a.attachEvent)return;a.attachEvent("onbeforeprint",function(){if(a.html5.supportsXElement||!b.namespaces)return;b.namespaces.shiv||b.namespaces.add("shiv");var c=-1,d=new RegExp("^("+a.html5.elements.join("|")+")$","i"),e=b.getElementsByTagName("*"),g=e.length,j,k=i(h(function(a,b){var c=[],d=a.length;while(d)c.unshift(a[--d]);d=b.length;while(d)c.unshift(b[--d]);c.sort(function(a,b){return a.sourceIndex-b.sourceIndex}),d=c.length;while(d)c[--d]=c[d].styleSheet;return c}(b.getElementsByTagName("style"),b.getElementsByTagName("link"))));while(++c"+a.html+"")},a.prototype.results_update_field=function(){return this.result_clear_highlight(),this.result_single_selected=null,this.results_build()},a.prototype.results_toggle=function(){return this.results_showing?this.results_hide():this.results_show()},a.prototype.results_search=function(a){return this.results_showing?this.winnow_results():this.results_show()},a.prototype.keyup_checker=function(a){var b,c;b=(c=a.which)!=null?c:a.keyCode,this.search_field_scale();switch(b){case 8:if(this.is_multiple&&this.backstroke_length<1&&this.choices>0)return this.keydown_backstroke();if(!this.pending_backstroke)return this.result_clear_highlight(),this.results_search();break;case 13:a.preventDefault();if(this.results_showing)return this.result_select(a);break;case 27:return this.results_showing&&this.results_hide(),!0;case 9:case 38:case 40:case 16:case 91:case 17:break;default:return this.results_search()}},a.prototype.generate_field_id=function(){var a;return a=this.generate_random_id(),this.form_field.id=a,a},a.prototype.generate_random_char=function(){var a,b,c;return a="0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZ",c=Math.floor(Math.random()*a.length),b=a.substring(c,c+1)},a}(),b.AbstractChosen=a}.call(this),function(){var a,b,c,d,e=Object.prototype.hasOwnProperty,f=function(a,b){function d(){this.constructor=a}for(var c in b)e.call(b,c)&&(a[c]=b[c]);return d.prototype=b.prototype,a.prototype=new d,a.__super__=b.prototype,a};d=this,a=jQuery,a.fn.extend({chosen:function(c){return!a.browser.msie||a.browser.version!=="6.0"&&a.browser.version!=="7.0"?a(this).each(function(d){if(!a(this).hasClass("chzn-done"))return new b(this,c)}):this}}),b=function(b){function e(){e.__super__.constructor.apply(this,arguments)}return f(e,b),e.prototype.setup=function(){return this.form_field_jq=a(this.form_field),this.is_rtl=this.form_field_jq.hasClass("chzn-rtl")},e.prototype.finish_setup=function(){return this.form_field_jq.addClass("chzn-done")},e.prototype.set_up_html=function(){var b,d,e,f;return this.container_id=this.form_field.id.length?this.form_field.id.replace(/(:|\.)/g,"_"):this.generate_field_id(),this.container_id+="_chzn",this.f_width=this.form_field_jq.outerWidth(),this.default_text=this.form_field_jq.data("placeholder")?this.form_field_jq.data("placeholder"):this.default_text_default,b=a("
    ",{id:this.container_id,"class":"chzn-container"+(this.is_rtl?" chzn-rtl":""),style:"width: "+this.f_width+"px;"}),this.is_multiple?b.html('
      '):b.html(''+this.default_text+'
        '),this.form_field_jq.hide().after(b),this.container=a("#"+this.container_id),this.container.addClass("chzn-container-"+(this.is_multiple?"multi":"single")),this.dropdown=this.container.find("div.chzn-drop").first(),d=this.container.height(),e=this.f_width-c(this.dropdown),this.dropdown.css({width:e+"px",top:d+"px"}),this.search_field=this.container.find("input").first(),this.search_results=this.container.find("ul.chzn-results").first(),this.search_field_scale(),this.search_no_results=this.container.find("li.no-results").first(),this.is_multiple?(this.search_choices=this.container.find("ul.chzn-choices").first(),this.search_container=this.container.find("li.search-field").first()):(this.search_container=this.container.find("div.chzn-search").first(),this.selected_item=this.container.find(".chzn-single").first(),f=e-c(this.search_container)-c(this.search_field),this.search_field.css({width:f+"px"})),this.results_build(),this.set_tab_index(),this.form_field_jq.trigger("liszt:ready",{chosen:this})},e.prototype.register_observers=function(){var a=this;return this.container.mousedown(function(b){return a.container_mousedown(b)}),this.container.mouseup(function(b){return a.container_mouseup(b)}),this.container.mouseenter(function(b){return a.mouse_enter(b)}),this.container.mouseleave(function(b){return a.mouse_leave(b)}),this.search_results.mouseup(function(b){return a.search_results_mouseup(b)}),this.search_results.mouseover(function(b){return a.search_results_mouseover(b)}),this.search_results.mouseout(function(b){return a.search_results_mouseout(b)}),this.form_field_jq.bind("liszt:updated",function(b){return a.results_update_field(b)}),this.search_field.blur(function(b){return a.input_blur(b)}),this.search_field.keyup(function(b){return a.keyup_checker(b)}),this.search_field.keydown(function(b){return a.keydown_checker(b)}),this.is_multiple?(this.search_choices.click(function(b){return a.choices_click(b)}),this.search_field.focus(function(b){return a.input_focus(b)})):this.container.click(function(a){return a.preventDefault()})},e.prototype.search_field_disabled=function(){this.is_disabled=this.form_field_jq[0].disabled;if(this.is_disabled)return this.container.addClass("chzn-disabled"),this.search_field[0].disabled=!0,this.is_multiple||this.selected_item.unbind("focus",this.activate_action),this.close_field();this.container.removeClass("chzn-disabled"),this.search_field[0].disabled=!1;if(!this.is_multiple)return this.selected_item.bind("focus",this.activate_action)},e.prototype.container_mousedown=function(b){var c;if(!this.is_disabled)return c=b!=null?a(b.target).hasClass("search-choice-close"):!1,b&&b.type==="mousedown"&&b.stopPropagation(),!this.pending_destroy_click&&!c?(this.active_field?!this.is_multiple&&b&&(a(b.target)[0]===this.selected_item[0]||a(b.target).parents("a.chzn-single").length)&&(b.preventDefault(),this.results_toggle()):(this.is_multiple&&this.search_field.val(""),a(document).click(this.click_test_action),this.results_show()),this.activate_field()):this.pending_destroy_click=!1},e.prototype.container_mouseup=function(a){if(a.target.nodeName==="ABBR")return this.results_reset(a)},e.prototype.blur_test=function(a){if(!this.active_field&&this.container.hasClass("chzn-container-active"))return this.close_field()},e.prototype.close_field=function(){return a(document).unbind("click",this.click_test_action),this.is_multiple||(this.selected_item.attr("tabindex",this.search_field.attr("tabindex")),this.search_field.attr("tabindex",-1)),this.active_field=!1,this.results_hide(),this.container.removeClass("chzn-container-active"),this.winnow_results_clear(),this.clear_backstroke(),this.show_search_field_default(),this.search_field_scale()},e.prototype.activate_field=function(){return!this.is_multiple&&!this.active_field&&(this.search_field.attr("tabindex",this.selected_item.attr("tabindex")),this.selected_item.attr("tabindex",-1)),this.container.addClass("chzn-container-active"),this.active_field=!0,this.search_field.val(this.search_field.val()),this.search_field.focus()},e.prototype.test_active_click=function(b){return a(b.target).parents("#"+this.container_id).length?this.active_field=!0:this.close_field()},e.prototype.results_build=function(){var a,b,c,e,f;this.parsing=!0,this.results_data=d.SelectParser.select_to_array(this.form_field),this.is_multiple&&this.choices>0?(this.search_choices.find("li.search-choice").remove(),this.choices=0):this.is_multiple||(this.selected_item.find("span").text(this.default_text),this.form_field.options.length<=this.disable_search_threshold?this.container.addClass("chzn-container-single-nosearch"):this.container.removeClass("chzn-container-single-nosearch")),a="",f=this.results_data;for(c=0,e=f.length;c'+a("
        ").text(b.label).html()+"")},e.prototype.result_do_highlight=function(a){var b,c,d,e,f;if(a.length){this.result_clear_highlight(),this.result_highlight=a,this.result_highlight.addClass("highlighted"),d=parseInt(this.search_results.css("maxHeight"),10),f=this.search_results.scrollTop(),e=d+f,c=this.result_highlight.position().top+this.search_results.scrollTop(),b=c+this.result_highlight.outerHeight();if(b>=e)return this.search_results.scrollTop(b-d>0?b-d:0);if(c'+b.html+''),d=a("#"+c).find("a").first(),d.click(function(a){return e.choice_destroy_link_click(a)})},e.prototype.choice_destroy_link_click=function(b){return b.preventDefault(),this.is_disabled?b.stopPropagation:(this.pending_destroy_click=!0,this.choice_destroy(a(b.target)))},e.prototype.choice_destroy=function(a){return this.choices-=1,this.show_search_field_default(),this.is_multiple&&this.choices>0&&this.search_field.val().length<1&&this.results_hide(),this.result_deselect(a.attr("rel")),a.parents("li").first().remove()},e.prototype.results_reset=function(b){this.form_field.options[0].selected=!0,this.selected_item.find("span").text(this.default_text),this.show_search_field_default(),a(b.target).remove(),this.form_field_jq.trigger("change");if(this.active_field)return this.results_hide()},e.prototype.result_select=function(a){var b,c,d,e;if(this.result_highlight)return b=this.result_highlight,c=b.attr("id"),this.result_clear_highlight(),this.is_multiple?this.result_deactivate(b):(this.search_results.find(".result-selected").removeClass("result-selected"),this.result_single_selected=b),b.addClass("result-selected"),e=c.substr(c.lastIndexOf("_")+1),d=this.results_data[e],d.selected=!0,this.form_field.options[d.options_index].selected=!0,this.is_multiple?this.choice_build(d):(this.selected_item.find("span").first().text(d.text),this.allow_single_deselect&&this.single_deselect_control_build()),(!a.metaKey||!this.is_multiple)&&this.results_hide(),this.search_field.val(""),this.form_field_jq.trigger("change"),this.search_field_scale()},e.prototype.result_activate=function(a){return a.addClass("active-result")},e.prototype.result_deactivate=function(a){return a.removeClass("active-result")},e.prototype.result_deselect=function(b){var c,d;return d=this.results_data[b],d.selected=!1,this.form_field.options[d.options_index].selected=!1,c=a("#"+this.container_id+"_o_"+b),c.removeClass("result-selected").addClass("active-result").show(),this.result_clear_highlight(),this.winnow_results(),this.form_field_jq.trigger("change"),this.search_field_scale()},e.prototype.single_deselect_control_build=function(){if(this.allow_single_deselect&&this.selected_item.find("abbr").length<1)return this.selected_item.find("span").first().after('')},e.prototype.winnow_results=function(){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;this.no_results_clear(),i=0,j=this.search_field.val()===this.default_text?"":a("
        ").text(a.trim(this.search_field.val())).html(),f=new RegExp("^"+j.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),"i"),m=new RegExp(j.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),"i"),r=this.results_data;for(n=0,p=r.length;n=0||c.html.indexOf("[")===0){e=c.html.replace(/\[|\]/g,"").split(" ");if(e.length)for(o=0,q=e.length;o"+c.html.substr(k+j.length),l=l.substr(0,k)+""+l.substr(k)):l=c.html,g.html(l),this.result_activate(g),c.group_array_index!=null&&a("#"+this.results_data[c.group_array_index].dom_id).css("display","list-item")):(this.result_highlight&&h===this.result_highlight.attr("id")&&this.result_clear_highlight(),this.result_deactivate(g))}}return i<1&&j.length?this.no_results(j):this.winnow_results_set_highlight()},e.prototype.winnow_results_clear=function(){var b,c,d,e,f;this.search_field.val(""),c=this.search_results.find("li"),f=[];for(d=0,e=c.length;d'+this.results_none_found+' ""'),c.find("span").first().html(b),this.search_results.append(c)},e.prototype.no_results_clear=function(){return this.search_results.find(".no-results").remove()},e.prototype.keydown_arrow=function(){var b,c;this.result_highlight?this.results_showing&&(c=this.result_highlight.nextAll("li.active-result").first(),c&&this.result_do_highlight(c)):(b=this.search_results.find("li.active-result").first(),b&&this.result_do_highlight(a(b)));if(!this.results_showing)return this.results_show()},e.prototype.keyup_arrow=function(){var a;if(!this.results_showing&&!this.is_multiple)return this.results_show();if(this.result_highlight)return a=this.result_highlight.prevAll("li.active-result"),a.length?this.result_do_highlight(a.first()):(this.choices>0&&this.results_hide(),this.result_clear_highlight())},e.prototype.keydown_backstroke=function(){return this.pending_backstroke?(this.choice_destroy(this.pending_backstroke.find("a").first()),this.clear_backstroke()):(this.pending_backstroke=this.search_container.siblings("li.search-choice").last(),this.pending_backstroke.addClass("search-choice-focus"))},e.prototype.clear_backstroke=function(){return this.pending_backstroke&&this.pending_backstroke.removeClass("search-choice-focus"),this.pending_backstroke=null},e.prototype.keydown_checker=function(a){var b,c;b=(c=a.which)!=null?c:a.keyCode,this.search_field_scale(),b!==8&&this.pending_backstroke&&this.clear_backstroke();switch(b){case 8:this.backstroke_length=this.search_field.val().length;break;case 9:this.results_showing&&!this.is_multiple&&this.result_select(a),this.mouse_on_container=!1;break;case 13:a.preventDefault();break;case 38:a.preventDefault(),this.keyup_arrow();break;case 40:this.keydown_arrow()}},e.prototype.search_field_scale=function(){var b,c,d,e,f,g,h,i,j;if(this.is_multiple){d=0,h=0,f="position:absolute; left: -1000px; top: -1000px; display:none;",g=["font-size","font-style","font-weight","font-family","line-height","text-transform","letter-spacing"];for(i=0,j=g.length;i",{style:f}),c.text(this.search_field.val()),a("body").append(c),h=c.width()+25,c.remove(),h>this.f_width-10&&(h=this.f_width-10),this.search_field.css({width:h+"px"}),b=this.container.height(),this.dropdown.css({top:b+"px"})}},e.prototype.generate_random_id=function(){var b;b="sel"+this.generate_random_char()+this.generate_random_char()+this.generate_random_char();while(a("#"+b).length>0)b+=this.generate_random_char();return b},e}(AbstractChosen),c=function(a){var b;return b=a.outerWidth()-a.width()},d.get_side_border_padding=c}.call(this); - - /* - * TipTip - * Copyright 2010 Drew Wilson - * www.drewwilson.com - * code.drewwilson.com/entry/tiptip-jquery-plugin - * - * Version 1.3 - Updated: Mar. 23, 2010 - * - * This Plug-In will create a custom tooltip to replace the default - * browser tooltip. It is extremely lightweight and very smart in - * that it detects the edges of the browser window and will make sure - * the tooltip stays within the current window size. As a result the - * tooltip will adjust itself to be displayed above, below, to the left - * or to the right depending on what is necessary to stay within the - * browser window. It is completely customizable as well via CSS. - * - * This TipTip jQuery plug-in is dual licensed under the MIT and GPL licenses: - * http://www.opensource.org/licenses/mit-license.php - * http://www.gnu.org/licenses/gpl.html - */ -(function($){$.fn.tipTip=function(options){var defaults={activation:"hover",keepAlive:false,maxWidth:"200px",edgeOffset:3,defaultPosition:"bottom",delay:400,fadeIn:200,fadeOut:200,attribute:"title",content:false,enter:function(){},exit:function(){}};var opts=$.extend(defaults,options);if($("#tiptip_holder").length<=0){var tiptip_holder=$('
        ');var tiptip_content=$('
        ');var tiptip_arrow=$('
        ');$("body").append(tiptip_holder.html(tiptip_content).prepend(tiptip_arrow.html('
        ')))}else{var tiptip_holder=$("#tiptip_holder");var tiptip_content=$("#tiptip_content");var tiptip_arrow=$("#tiptip_arrow")}return this.each(function(){var org_elem=$(this);if(opts.content){var org_title=opts.content}else{var org_title=org_elem.attr(opts.attribute)}if(org_title!=""){if(!opts.content){org_elem.removeAttr(opts.attribute)}var timeout=false;if(opts.activation=="hover"){org_elem.hover(function(){active_tiptip()},function(){if(!opts.keepAlive){deactive_tiptip()}});if(opts.keepAlive){tiptip_holder.hover(function(){},function(){deactive_tiptip()})}}else if(opts.activation=="focus"){org_elem.focus(function(){active_tiptip()}).blur(function(){deactive_tiptip()})}else if(opts.activation=="click"){org_elem.click(function(){active_tiptip();return false}).hover(function(){},function(){if(!opts.keepAlive){deactive_tiptip()}});if(opts.keepAlive){tiptip_holder.hover(function(){},function(){deactive_tiptip()})}}function active_tiptip(){opts.enter.call(this);tiptip_content.html(org_title);tiptip_holder.hide().removeAttr("class").css("margin","0");tiptip_arrow.removeAttr("style");var top=parseInt(org_elem.offset()['top']);var left=parseInt(org_elem.offset()['left']);var org_width=parseInt(org_elem.outerWidth());var org_height=parseInt(org_elem.outerHeight());var tip_w=tiptip_holder.outerWidth();var tip_h=tiptip_holder.outerHeight();var w_compare=Math.round((org_width-tip_w)/2);var h_compare=Math.round((org_height-tip_h)/2);var marg_left=Math.round(left+w_compare);var marg_top=Math.round(top+org_height+opts.edgeOffset);var t_class="";var arrow_top="";var arrow_left=Math.round(tip_w-12)/2;if(opts.defaultPosition=="bottom"){t_class="_bottom"}else if(opts.defaultPosition=="top"){t_class="_top"}else if(opts.defaultPosition=="left"){t_class="_left"}else if(opts.defaultPosition=="right"){t_class="_right"}var right_compare=(w_compare+left)parseInt($(window).width());if((right_compare&&w_compare<0)||(t_class=="_right"&&!left_compare)||(t_class=="_left"&&left<(tip_w+opts.edgeOffset+5))){t_class="_right";arrow_top=Math.round(tip_h-13)/2;arrow_left=-12;marg_left=Math.round(left+org_width+opts.edgeOffset);marg_top=Math.round(top+h_compare)}else if((left_compare&&w_compare<0)||(t_class=="_left"&&!right_compare)){t_class="_left";arrow_top=Math.round(tip_h-13)/2;arrow_left=Math.round(tip_w);marg_left=Math.round(left-(tip_w+opts.edgeOffset+5));marg_top=Math.round(top+h_compare)}var top_compare=(top+org_height+opts.edgeOffset+tip_h+8)>parseInt($(window).height()+$(window).scrollTop());var bottom_compare=((top+org_height)-(opts.edgeOffset+tip_h+8))<0;if(top_compare||(t_class=="_bottom"&&top_compare)||(t_class=="_top"&&!bottom_compare)){if(t_class=="_top"||t_class=="_bottom"){t_class="_top"}else{t_class=t_class+"_top"}arrow_top=tip_h;marg_top=Math.round(top-(tip_h+5+opts.edgeOffset))}else if(bottom_compare|(t_class=="_top"&&bottom_compare)||(t_class=="_bottom"&&!top_compare)){if(t_class=="_top"||t_class=="_bottom"){t_class="_bottom"}else{t_class=t_class+"_bottom"}arrow_top=-12;marg_top=Math.round(top+org_height+opts.edgeOffset)}if(t_class=="_right_top"||t_class=="_left_top"){marg_top=marg_top+5}else if(t_class=="_right_bottom"||t_class=="_left_bottom"){marg_top=marg_top-5}if(t_class=="_left_top"||t_class=="_left_bottom"){marg_left=marg_left+5}tiptip_arrow.css({"margin-left":arrow_left+"px","margin-top":arrow_top+"px"});tiptip_holder.css({"margin-left":marg_left+"px","margin-top":marg_top+"px"}).attr("class","tip"+t_class);if(timeout){clearTimeout(timeout)}timeout=setTimeout(function(){tiptip_holder.stop(true,true).fadeIn(opts.fadeIn)},opts.delay)}function deactive_tiptip(){opts.exit.call(this);if(timeout){clearTimeout(timeout)}tiptip_holder.fadeOut(opts.fadeOut)}}})}})(jQuery); - -/* TINY SORT */ -(function(e){var a=false,g=null,f=parseFloat,b=/(\d+\.?\d*)$/g;e.tinysort={id:"TinySort",version:"1.2.18",copyright:"Copyright (c) 2008-2012 Ron Valstar",uri:"http://tinysort.sjeiti.com/",licenced:{MIT:"http://www.opensource.org/licenses/mit-license.php",GPL:"http://www.gnu.org/licenses/gpl.html"},defaults:{order:"asc",attr:g,data:g,useVal:a,place:"start",returns:a,cases:a,forceStrings:a,sortFunction:g}};e.fn.extend({tinysort:function(m,h){if(m&&typeof(m)!="string"){h=m;m=g}var n=e.extend({},e.tinysort.defaults,h),s,B=this,x=e(this).length,C={},p=!(!m||m==""),q=!(n.attr===g||n.attr==""),w=n.data!==g,j=p&&m[0]==":",k=j?B.filter(m):B,r=n.sortFunction,v=n.order=="asc"?1:-1,l=[];if(!r){r=n.order=="rand"?function(){return Math.random()<0.5?1:-1}:function(F,E){var i=!n.cases?d(F.s):F.s,K=!n.cases?d(E.s):E.s;if(!n.forceStrings){var H=i.match(b),G=K.match(b);if(H&&G){var J=i.substr(0,i.length-H[0].length),I=K.substr(0,K.length-G[0].length);if(J==I){i=f(H[0]);K=f(G[0])}}}return v*(iK?1:0))}}B.each(function(G,H){var I=e(H),E=p?(j?k.filter(H):I.find(m)):I,J=w?E.data(n.data):(q?E.attr(n.attr):(n.useVal?E.val():E.text())),F=I.parent();if(!C[F]){C[F]={s:[],n:[]}}if(E.length>0){C[F].s.push({s:J,e:I,n:G})}else{C[F].n.push({e:I,n:G})}});for(s in C){C[s].s.sort(r)}for(s in C){var y=C[s],A=[],D=x,u=[0,0],z;switch(n.place){case"first":e.each(y.s,function(E,F){D=Math.min(D,F.n)});break;case"org":e.each(y.s,function(E,F){A.push(F.n)});break;case"end":D=y.n.length;break;default:D=0}for(z=0;z=D&&z'+"January,February,March,April,May,June,July,August,September,October,November,December".split(",")[month]+" "+ -year+"");a=a+('')+"";for(d=0;7>d;d++)a+='";a+="";f(month,year);b=new Date(year,month,1);c=b.getDay();e=f(month,year);b=new Date(year,month,1);c=b.getDay();e=0==month?11:month-1;e=f(e,11==e?year-1:year);c=0==c&&b?7:c;for(j=b=0;42>j;j++)j'+(e-c+j+1)+"":j>=c+f(month,year)?(b+=1,a+='"):a+='",6==j%7&&(a+="");this.html(a+"
        '+e[d]+"
        '+ -b+"'+(j-c+1)+"
        ");return this}})(jQuery); \ No newline at end of file diff --git a/frontend/templates/default/static/js/prettify.js b/frontend/templates/default/static/js/prettify.js deleted file mode 100644 index eef5ad7..0000000 --- a/frontend/templates/default/static/js/prettify.js +++ /dev/null @@ -1,28 +0,0 @@ -var q=null;window.PR_SHOULD_USE_CONTINUATION=!0; -(function(){function L(a){function m(a){var f=a.charCodeAt(0);if(f!==92)return f;var b=a.charAt(1);return(f=r[b])?f:"0"<=b&&b<="7"?parseInt(a.substring(1),8):b==="u"||b==="x"?parseInt(a.substring(2),16):a.charCodeAt(1)}function e(a){if(a<32)return(a<16?"\\x0":"\\x")+a.toString(16);a=String.fromCharCode(a);if(a==="\\"||a==="-"||a==="["||a==="]")a="\\"+a;return a}function h(a){for(var f=a.substring(1,a.length-1).match(/\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\[0-3][0-7]{0,2}|\\[0-7]{1,2}|\\[\S\s]|[^\\]/g),a= -[],b=[],o=f[0]==="^",c=o?1:0,i=f.length;c122||(d<65||j>90||b.push([Math.max(65,j)|32,Math.min(d,90)|32]),d<97||j>122||b.push([Math.max(97,j)&-33,Math.min(d,122)&-33]))}}b.sort(function(a,f){return a[0]-f[0]||f[1]-a[1]});f=[];j=[NaN,NaN];for(c=0;ci[0]&&(i[1]+1>i[0]&&b.push("-"),b.push(e(i[1])));b.push("]");return b.join("")}function y(a){for(var f=a.source.match(/\[(?:[^\\\]]|\\[\S\s])*]|\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\\d+|\\[^\dux]|\(\?[!:=]|[()^]|[^()[\\^]+/g),b=f.length,d=[],c=0,i=0;c=2&&a==="["?f[c]=h(j):a!=="\\"&&(f[c]=j.replace(/[A-Za-z]/g,function(a){a=a.charCodeAt(0);return"["+String.fromCharCode(a&-33,a|32)+"]"}));return f.join("")}for(var t=0,s=!1,l=!1,p=0,d=a.length;p=5&&"lang-"===b.substring(0,5))&&!(o&&typeof o[1]==="string"))c=!1,b="src";c||(r[f]=b)}i=d;d+=f.length;if(c){c=o[1];var j=f.indexOf(c),k=j+c.length;o[2]&&(k=f.length-o[2].length,j=k-c.length);b=b.substring(5);B(l+i,f.substring(0,j),e,p);B(l+i+j,c,C(b,c),p);B(l+i+k,f.substring(k),e,p)}else p.push(l+i,b)}a.e=p}var h={},y;(function(){for(var e=a.concat(m), -l=[],p={},d=0,g=e.length;d=0;)h[n.charAt(k)]=r;r=r[1];n=""+r;p.hasOwnProperty(n)||(l.push(r),p[n]=q)}l.push(/[\S\s]/);y=L(l)})();var t=m.length;return e}function u(a){var m=[],e=[];a.tripleQuotedStrings?m.push(["str",/^(?:'''(?:[^'\\]|\\[\S\s]|''?(?=[^']))*(?:'''|$)|"""(?:[^"\\]|\\[\S\s]|""?(?=[^"]))*(?:"""|$)|'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$))/,q,"'\""]):a.multiLineStrings?m.push(["str",/^(?:'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$)|`(?:[^\\`]|\\[\S\s])*(?:`|$))/, -q,"'\"`"]):m.push(["str",/^(?:'(?:[^\n\r'\\]|\\.)*(?:'|$)|"(?:[^\n\r"\\]|\\.)*(?:"|$))/,q,"\"'"]);a.verbatimStrings&&e.push(["str",/^@"(?:[^"]|"")*(?:"|$)/,q]);var h=a.hashComments;h&&(a.cStyleComments?(h>1?m.push(["com",/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,q,"#"]):m.push(["com",/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\n\r]*)/,q,"#"]),e.push(["str",/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,q])):m.push(["com",/^#[^\n\r]*/, -q,"#"]));a.cStyleComments&&(e.push(["com",/^\/\/[^\n\r]*/,q]),e.push(["com",/^\/\*[\S\s]*?(?:\*\/|$)/,q]));a.regexLiterals&&e.push(["lang-regex",/^(?:^^\.?|[!+-]|!=|!==|#|%|%=|&|&&|&&=|&=|\(|\*|\*=|\+=|,|-=|->|\/|\/=|:|::|;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|[?@[^]|\^=|\^\^|\^\^=|{|\||\|=|\|\||\|\|=|~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\s*(\/(?=[^*/])(?:[^/[\\]|\\[\S\s]|\[(?:[^\\\]]|\\[\S\s])*(?:]|$))+\/)/]);(h=a.types)&&e.push(["typ",h]);a=(""+a.keywords).replace(/^ | $/g, -"");a.length&&e.push(["kwd",RegExp("^(?:"+a.replace(/[\s,]+/g,"|")+")\\b"),q]);m.push(["pln",/^\s+/,q," \r\n\t\xa0"]);e.push(["lit",/^@[$_a-z][\w$@]*/i,q],["typ",/^(?:[@_]?[A-Z]+[a-z][\w$@]*|\w+_t\b)/,q],["pln",/^[$_a-z][\w$@]*/i,q],["lit",/^(?:0x[\da-f]+|(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d\+)(?:e[+-]?\d+)?)[a-z]*/i,q,"0123456789"],["pln",/^\\[\S\s]?/,q],["pun",/^.[^\s\w"-$'./@\\`]*/,q]);return x(m,e)}function D(a,m){function e(a){switch(a.nodeType){case 1:if(k.test(a.className))break;if("BR"===a.nodeName)h(a), -a.parentNode&&a.parentNode.removeChild(a);else for(a=a.firstChild;a;a=a.nextSibling)e(a);break;case 3:case 4:if(p){var b=a.nodeValue,d=b.match(t);if(d){var c=b.substring(0,d.index);a.nodeValue=c;(b=b.substring(d.index+d[0].length))&&a.parentNode.insertBefore(s.createTextNode(b),a.nextSibling);h(a);c||a.parentNode.removeChild(a)}}}}function h(a){function b(a,d){var e=d?a.cloneNode(!1):a,f=a.parentNode;if(f){var f=b(f,1),g=a.nextSibling;f.appendChild(e);for(var h=g;h;h=g)g=h.nextSibling,f.appendChild(h)}return e} -for(;!a.nextSibling;)if(a=a.parentNode,!a)return;for(var a=b(a.nextSibling,0),e;(e=a.parentNode)&&e.nodeType===1;)a=e;d.push(a)}var k=/(?:^|\s)nocode(?:\s|$)/,t=/\r\n?|\n/,s=a.ownerDocument,l;a.currentStyle?l=a.currentStyle.whiteSpace:window.getComputedStyle&&(l=s.defaultView.getComputedStyle(a,q).getPropertyValue("white-space"));var p=l&&"pre"===l.substring(0,3);for(l=s.createElement("LI");a.firstChild;)l.appendChild(a.firstChild);for(var d=[l],g=0;g=0;){var h=m[e];A.hasOwnProperty(h)?window.console&&console.warn("cannot override language handler %s",h):A[h]=a}}function C(a,m){if(!a||!A.hasOwnProperty(a))a=/^\s*=o&&(h+=2);e>=c&&(a+=2)}}catch(w){"console"in window&&console.log(w&&w.stack?w.stack:w)}}var v=["break,continue,do,else,for,if,return,while"],w=[[v,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"], -"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"],F=[w,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"],G=[w,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"], -H=[G,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"],w=[w,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"],I=[v,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"], -J=[v,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"],v=[v,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"],K=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/,N=/\S/,O=u({keywords:[F,H,w,"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END"+ -I,J,v],hashComments:!0,cStyleComments:!0,multiLineStrings:!0,regexLiterals:!0}),A={};k(O,["default-code"]);k(x([],[["pln",/^[^]*(?:>|$)/],["com",/^<\!--[\S\s]*?(?:--\>|$)/],["lang-",/^<\?([\S\s]+?)(?:\?>|$)/],["lang-",/^<%([\S\s]+?)(?:%>|$)/],["pun",/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\S\s]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\S\s]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\S\s]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]), -["default-markup","htm","html","mxml","xhtml","xml","xsl"]);k(x([["pln",/^\s+/,q," \t\r\n"],["atv",/^(?:"[^"]*"?|'[^']*'?)/,q,"\"'"]],[["tag",/^^<\/?[a-z](?:[\w-.:]*\w)?|\/?>$/i],["atn",/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^\s"'>]*(?:[^\s"'/>]|\/(?=\s)))/],["pun",/^[/<->]+/],["lang-js",/^on\w+\s*=\s*"([^"]+)"/i],["lang-js",/^on\w+\s*=\s*'([^']+)'/i],["lang-js",/^on\w+\s*=\s*([^\s"'>]+)/i],["lang-css",/^style\s*=\s*"([^"]+)"/i],["lang-css",/^style\s*=\s*'([^']+)'/i],["lang-css", -/^style\s*=\s*([^\s"'>]+)/i]]),["in.tag"]);k(x([],[["atv",/^[\S\s]+/]]),["uq.val"]);k(u({keywords:F,hashComments:!0,cStyleComments:!0,types:K}),["c","cc","cpp","cxx","cyc","m"]);k(u({keywords:"null,true,false"}),["json"]);k(u({keywords:H,hashComments:!0,cStyleComments:!0,verbatimStrings:!0,types:K}),["cs"]);k(u({keywords:G,cStyleComments:!0}),["java"]);k(u({keywords:v,hashComments:!0,multiLineStrings:!0}),["bsh","csh","sh"]);k(u({keywords:I,hashComments:!0,multiLineStrings:!0,tripleQuotedStrings:!0}), -["cv","py"]);k(u({keywords:"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["perl","pl","pm"]);k(u({keywords:J,hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["rb"]);k(u({keywords:w,cStyleComments:!0,regexLiterals:!0}),["js"]);k(u({keywords:"all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes", -hashComments:3,cStyleComments:!0,multilineStrings:!0,tripleQuotedStrings:!0,regexLiterals:!0}),["coffee"]);k(x([],[["str",/^[\S\s]+/]]),["regex"]);window.prettyPrintOne=function(a,m,e){var h=document.createElement("PRE");h.innerHTML=a;e&&D(h,e);E({g:m,i:e,h:h});return h.innerHTML};window.prettyPrint=function(a){function m(){for(var e=window.PR_SHOULD_USE_CONTINUATION?l.now()+250:Infinity;p=0){var k=k.match(g),f,b;if(b= -!k){b=n;for(var o=void 0,c=b.firstChild;c;c=c.nextSibling)var i=c.nodeType,o=i===1?o?b:c:i===3?N.test(c.nodeValue)?b:o:o;b=(f=o===b?void 0:o)&&"CODE"===f.tagName}b&&(k=f.className.match(g));k&&(k=k[1]);b=!1;for(o=n.parentNode;o;o=o.parentNode)if((o.tagName==="pre"||o.tagName==="code"||o.tagName==="xmp")&&o.className&&o.className.indexOf("prettyprint")>=0){b=!0;break}b||((b=(b=n.className.match(/\blinenums\b(?::(\d+))?/))?b[1]&&b[1].length?+b[1]:!0:!1)&&D(n,b),d={g:k,h:n,i:b},E(d))}}p - -
        - {%?contents} -
        -
        diff --git a/frontend/templates/pure/admin/node/add.tpl b/frontend/templates/pure/admin/node/add.tpl deleted file mode 100644 index b8da93c..0000000 --- a/frontend/templates/pure/admin/node/add.tpl +++ /dev/null @@ -1,50 +0,0 @@ -

        {%!title-admin-addnode}

        - -{%if isempty|errors == false} -
        -
        {%!error-form}
        -
        -
          - {%foreach error in errors} -
        • {%?error}
        • - {%/foreach} -
        -
        -
        -{%/if} - -
        -
        - - {%input type="text" group="addnode" name="name"} -
        - -
        - - {%input type="text" group="addnode" name="hostname"} -
        - -
        - - {%input type="text" group="addnode" name="location"} -
        - -
        - - {%input type="checkbox" group="addnode" name="customkey" data-enable-group="customkey" class="enabler"} -
        - -
        - - {%input type="file" group="addnode" name="publickey" disabled="disabled"} -
        - -
        - - {%input type="file" group="addnode" name="privatekey" disabled="disabled"} -
        - -
        - -
        -
        diff --git a/frontend/templates/pure/admin/node/list.tpl b/frontend/templates/pure/admin/node/list.tpl deleted file mode 100644 index 1203a6b..0000000 --- a/frontend/templates/pure/admin/node/list.tpl +++ /dev/null @@ -1,30 +0,0 @@ -

        {%!title-admin-nodelist}

        - - - - - - - - - - - - {%foreach node in nodes} - - - - - {%/foreach} - -
        {%!list-column-hostname}{%!list-column-location}
        - - {%?node[hostname]} - - - {%?node[location]} -
        diff --git a/frontend/templates/pure/admin/node/lookup.tpl b/frontend/templates/pure/admin/node/lookup.tpl deleted file mode 100644 index c3611b0..0000000 --- a/frontend/templates/pure/admin/node/lookup.tpl +++ /dev/null @@ -1,87 +0,0 @@ -

        {%!title-admin-nodeinfo}

        - - - -
        - - - - - - - - - - - - - -
        {%!list-column-nodeid}{%?id}
        {%!list-column-hostname}{%?hostname}
        {%!list-column-location}{%?location}
        -
        - -
        -

        {%!header-admin-node-vpses}

        - - - - - - - - - - - - - {%if isset|vpses == true} - {%foreach vps in vpses} - - - - - - - - - {%/foreach} - {%/if} - -
        {%!list-column-hostname}{%!list-column-platform}{%!list-column-disk}{%!list-column-ram}{%!list-column-template}
        - {%if vps[status] == running} - {%!list-status-running} - {%elseif vps[status] == stopped} - {%!list-status-stopped} - {%elseif vps[status] == suspended} - {%!list-status-suspended} - {%else} - {%!list-status-unknown} - {%/if} - - - {%?vps[hostname]} - - - - {%if vps[virtualization-type] == 1} - OpenVZ - {%/if}{%if vps[virtualization-type] == 2} - Xen PV - {%/if}{%if vps[virtualization-type] == 3} - Xen HVM - {%/if}{%if vps[virtualization-type] == 4} - KVM - {%/if} - - - {%?vps[diskspace]} - {%?vps[diskspace-unit]} - - {%?vps[guaranteed-ram]} - {%?vps[guaranteed-ram-unit]} - {%?vps[template]}
        -
        diff --git a/frontend/templates/pure/admin/overview/index.tpl b/frontend/templates/pure/admin/overview/index.tpl deleted file mode 100644 index f83d783..0000000 --- a/frontend/templates/pure/admin/overview/index.tpl +++ /dev/null @@ -1,3 +0,0 @@ -

        {%!title-admin-overview}

        - -

        {%!admin-overview-message}

        diff --git a/frontend/templates/pure/admin/template/add.tpl b/frontend/templates/pure/admin/template/add.tpl deleted file mode 100644 index 3026f5b..0000000 --- a/frontend/templates/pure/admin/template/add.tpl +++ /dev/null @@ -1,36 +0,0 @@ -

        Add templates

        - -{%if isempty|templates == true} -

        - To add new templates, add the corresponding tar.gz files to /etc/cvm/templates on the master node, and reload this page. - New files will be automatically detected, and you will be able to add them as templates from this page. -

        - -

        - All templates will be automatically synchronized to slave nodes. -

        -{%else} -
        - {%foreach template in templates} -
        -
        -

        {%?template}

        - -
        - -
        - - {%input type="text" group="addtemplate" name="name[]"} -
        - -
        - - -
        -
        - {%/foreach} -
        - -
        -
        -{%/if} diff --git a/frontend/templates/pure/admin/template/list.tpl b/frontend/templates/pure/admin/template/list.tpl deleted file mode 100644 index 1982a56..0000000 --- a/frontend/templates/pure/admin/template/list.tpl +++ /dev/null @@ -1,56 +0,0 @@ -

        Template overview

        - - - - - - - - - - - - - - - {%foreach template in templates} - - - - - - - - {%/foreach} - -
        FilenameTemplate nameSupportedUp-to-dateAvailable
        - - {%?template[filename]} - - - - {%?template[name]} - - - {%if template[supported] == true} - - {%else} - - {%/if} - - {%if template[outdated] == true} - - {%else} - - {%/if} - - {%if template[available] == true} - - {%else} - - {%/if} -
        diff --git a/frontend/templates/pure/admin/vps/add.tpl b/frontend/templates/pure/admin/vps/add.tpl deleted file mode 100644 index 20845a1..0000000 --- a/frontend/templates/pure/admin/vps/add.tpl +++ /dev/null @@ -1,77 +0,0 @@ -

        {%!title-admin-addvps}

        - -{%if isempty|errors == false} -
        -
        {%!error-form}
        -
        -
          - {%foreach error in errors} -
        • {%?error}
        • - {%/foreach} -
        -
        -
        -{%/if} - -
        -
        - - {%select group="addvps" name="node"} - {%foreach node in nodes} - {%option value="(?node[id])" text="(?node[name]) ((?node[location]))"} - {%/foreach} - {%/select} -
        - -
        - - {%select group="addvps" name="template"} - {%foreach template in templates} - {%option value="(?template[id])" text="(?template[name])"} - {%/foreach} - {%/select} -
        - -
        - - {%select group="addvps" name="user"} - {%foreach user in users} - {%option value="(?user[id])" text="(?user[username]) (#(?user[id]))"} - {%/foreach} - {%/select} -
        - -
        - - {%input type="text" group="addvps" name="diskspace"} -
        - -
        - - {%input type="text" group="addvps" name="guaranteed"} -
        - -
        - - {%input type="text" group="addvps" name="burstable"} -
        - -
        - - {%input type="text" group="addvps" name="cpucount"} -
        - -
        - - {%input type="text" group="addvps" name="traffic"} -
        - -
        - - {%input type="text" group="addvps" name="hostname"} -
        - -
        - -
        -
        diff --git a/frontend/templates/pure/client/vps/list.tpl b/frontend/templates/pure/client/vps/list.tpl deleted file mode 100644 index 0a8f3b1..0000000 --- a/frontend/templates/pure/client/vps/list.tpl +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - - - - - - - - - {%foreach vps in vpses} - - - - - - - - - - {%/foreach} - -
        {%!list-column-hostname}{%!list-column-platform}{%!list-column-node}{%!list-column-disk}{%!list-column-ram}{%!list-column-template}
        - {%if vps[status] == running} - {%!list-status-running} - {%elseif vps[status] == stopped} - {%!list-status-stopped} - {%elseif vps[status] == suspended} - {%!list-status-suspended} - {%else} - {%!list-status-unknown} - {%/if} - - - {%?vps[hostname]} - - - - {%if vps[virtualization-type] == 1} - OpenVZ - {%/if}{%if vps[virtualization-type] == 2} - Xen PV - {%/if}{%if vps[virtualization-type] == 3} - Xen HVM - {%/if}{%if vps[virtualization-type] == 4} - KVM - {%/if} - - - - {%?vps[node]} - ({%?vps[node-hostname]}) - - - {%?vps[diskspace]} - {%?vps[diskspace-unit]} - - {%?vps[guaranteed-ram]} - {%?vps[guaranteed-ram-unit]} - {%?vps[template]}
        diff --git a/frontend/templates/pure/shared/error/error.tpl b/frontend/templates/pure/shared/error/error.tpl deleted file mode 100644 index 2068c8f..0000000 --- a/frontend/templates/pure/shared/error/error.tpl +++ /dev/null @@ -1,4 +0,0 @@ -
        -
        {%?title}
        -
        {%?message}
        -
        diff --git a/frontend/templates/pure/shared/login.tpl b/frontend/templates/pure/shared/login.tpl deleted file mode 100644 index aa69f4c..0000000 --- a/frontend/templates/pure/shared/login.tpl +++ /dev/null @@ -1,19 +0,0 @@ -
        - {%?error} - -
        -
        -
        - - {%input type="text" group="login" name="username"} -
        -
        - - {%input type="password" group="login" name="password"} -
        -
        - -
        -
        -
        -
        diff --git a/frontend/templates/pure/shared/main.tpl b/frontend/templates/pure/shared/main.tpl deleted file mode 100644 index 2433ac0..0000000 --- a/frontend/templates/pure/shared/main.tpl +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - -
        -
        - -
        - {%if logged-in == true} - - {%/if} -
        - {%?main} -
        -
        - - diff --git a/frontend/templates/pure/static/css/cvm.css b/frontend/templates/pure/static/css/cvm.css deleted file mode 100644 index a947ee2..0000000 --- a/frontend/templates/pure/static/css/cvm.css +++ /dev/null @@ -1,82 +0,0 @@ -.wrapper { - width: 960px; - margin: 0px auto; } - .wrapper h1, .wrapper h2, .wrapper h3, .wrapper h4, .wrapper h5, .wrapper h6 { - margin-top: 4px; - margin-bottom: 7px; } - .wrapper .pure-g > div { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; } - .wrapper .pure-g > div.padded { - padding: 8px 10px; } - .wrapper .pure-menu a { - color: #515151; } - .wrapper .pure-menu a i.fa { - margin-right: 9px; } - .wrapper .pure-menu .pure-menu-selected a { - color: black; } - .wrapper .pure-table th.vertical { - background: #e0e0e0; - color: black; - text-align: left; - vertical-align: bottom; - border-bottom: 1px solid #cbcbcb; } - .wrapper .pure-table i.fa.ok { - color: #208927; } - .wrapper .pure-table i.fa.not-ok { - color: #C22118; } - .wrapper .pure-table td.icon { - text-align: center; - vertical-align: middle; - font-size: 19px; } - .wrapper .pure-button.add { - #background-color: #7ECB9A; } - .wrapper .clickable:hover { - background-color: #F1F1F1; - cursor: pointer; } - .wrapper section { - margin-bottom: 16px; } - .wrapper .error { - padding: 8px 10px; - background-color: #FFD4D4; - border: 1px solid #ff8080; - border-radius: 6px; - margin-bottom: 12px; } - .wrapper .error .title { - font-size: 19px; - font-weight: bold; - margin-bottom: 5px; } - .wrapper .error .title i { - color: #B43636; - vertical-align: middle; } - .wrapper .error .message { - font-size: 15px; } - .wrapper .header .logo { - margin-bottom: 8px; } - .wrapper .pure-menu-horizontal { - background-color: #F1F1F1; - margin-bottom: 16px; } - .wrapper .pure-menu-horizontal a:hover { - background-color: #E6E6E6; } - .wrapper .contents #form_login { - background-color: #F1F1F1; - padding: 12px 16px; } - .wrapper .contents h1 { - font-size: 25px; - margin-top: 2px; } - .wrapper .contents .narrow-wrapper { - width: 420px; - margin: 0px auto; } - .wrapper .contents table.stretch { - width: 100%; } - .wrapper .contents .clickable a { - color: inherit; - text-decoration: inherit; } - .wrapper .contents .submenu { - font-size: 14px; - margin-bottom: 4px; } - .wrapper .contents .submenu i.fa { - margin-right: 0px; } - .wrapper .contents .submenu li a { - padding: 5px 10px; } diff --git a/frontend/templates/pure/static/css/font-awesome.css b/frontend/templates/pure/static/css/font-awesome.css deleted file mode 100644 index 449d6ac..0000000 --- a/frontend/templates/pure/static/css/font-awesome.css +++ /dev/null @@ -1,4 +0,0 @@ -/*! - * Font Awesome 4.0.3 by @davegandy - http://fontawesome.io - @fontawesome - * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) - */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.0.3');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.0.3') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff?v=4.0.3') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.0.3') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.0.3#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font-family:FontAwesome;font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.3333333333333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.2857142857142858em;text-align:center}.fa-ul{padding-left:0;margin-left:2.142857142857143em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.142857142857143em;width:2.142857142857143em;top:.14285714285714285em;text-align:center}.fa-li.fa-lg{left:-1.8571428571428572em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:spin 2s infinite linear;-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;animation:spin 2s infinite linear}@-moz-keyframes spin{0%{-moz-transform:rotate(0deg)}100%{-moz-transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0deg)}100%{-o-transform:rotate(359deg)}}@-ms-keyframes spin{0%{-ms-transform:rotate(0deg)}100%{-ms-transform:rotate(359deg)}}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0,mirror=1);-webkit-transform:scale(-1,1);-moz-transform:scale(-1,1);-ms-transform:scale(-1,1);-o-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2,mirror=1);-webkit-transform:scale(1,-1);-moz-transform:scale(1,-1);-ms-transform:scale(1,-1);-o-transform:scale(1,-1);transform:scale(1,-1)}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-asc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-desc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-reply-all:before{content:"\f122"}.fa-mail-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"} \ No newline at end of file diff --git a/frontend/templates/pure/static/fonts/FontAwesome.otf b/frontend/templates/pure/static/fonts/FontAwesome.otf deleted file mode 100644 index 8b0f54e47e1d356dcf1496942a50e228e0f1ee14..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 62856 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