From 6cb5a145654e1747c228ea5a906adb25dff1900b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=81Z=C3=81R=20Imre=20AI=20Agent?= Date: Thu, 16 Jul 2026 11:24:46 +0200 Subject: [PATCH] feat(deployed): add Smart Countdown 3 (no-source, vetted live) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Smart Countdown 3 (Alex Polonski, com 3.4.5 / mod 3.4.7); no repo -> deployed files. Signed-off-by: LÁZÁR Imre Assisted-by: claude-code@claude-opus-4-8 --- .../components/com_smartcountdown3/access.xml | 7 + .../components/com_smartcountdown3/config.xml | 25 + .../com_smartcountdown3/controller.php | 19 + .../controllers/index.html | 1 + .../controllers/modules.php | 15 + .../com_smartcountdown3/helpers/index.html | 1 + .../helpers/smartcountdown3.php | 17 + .../components/com_smartcountdown3/index.html | 1 + .../en-GB/en-GB.com_smartcountdown3.ini | 22 + .../en-GB/en-GB.com_smartcountdown3.sys.ini | 5 + .../language/en-GB/index.html | 1 + .../com_smartcountdown3/language/index.html | 1 + .../models/fields/index.html | 1 + .../models/forms/index.html | 1 + .../com_smartcountdown3/models/index.html | 1 + .../com_smartcountdown3/models/modules.php | 125 ++ .../com_smartcountdown3/smartcountdown3.php | 19 + .../com_smartcountdown3/smartcountdown3.xml | 37 + .../com_smartcountdown3/views/index.html | 1 + .../views/modules/index.html | 1 + .../views/modules/tmpl/default.php | 157 ++ .../views/modules/tmpl/index.html | 1 + .../views/modules/view.html.php | 66 + .../views/render/index.html | 1 + .../views/render/tmpl/default.php | 39 + .../views/render/tmpl/index.html | 1 + .../views/render/view.html.php | 29 + .../controllers/event.json.php | 442 ++++ .../controllers/index.html | 1 + .../components/com_smartcountdown3/index.html | 1 + .../com_smartcountdown3/smartcountdown3.php | 15 + .../css/collapse-style.css | 56 + .../mod_smartcountdown3/css/index.html | 1 + .../mod_smartcountdown3/css/jquery-ui.css | 1225 +++++++++++ .../css/smartcountdown.css | 87 + .../css/smartcountdown_rtl.css | 27 + .../mod_smartcountdown3/fields/configfile.php | 42 + .../mod_smartcountdown3/fields/index.html | 1 + .../mod_smartcountdown3/fields/preview.php | 29 + .../fx/No_FX_animation.xml | 52 + .../mod_smartcountdown3/fx/Sliding_images.xml | 93 + .../mod_smartcountdown3/fx/Sliding_text.xml | 94 + .../mod_smartcountdown3/fx/Text_opacity.xml | 90 + .../modules/mod_smartcountdown3/fx/index.html | 1 + .../mod_smartcountdown3/helpers/helper.php | 658 ++++++ .../mod_smartcountdown3/helpers/index.html | 1 + .../helpers/plurals/index.html | 1 + .../helpers/plurals/plural.js | 7 + .../helpers/plurals/plural.php | 17 + .../helpers/plurals/plural_ar-aa.js | 9 + .../helpers/plurals/plural_ar-aa.php | 17 + .../helpers/plurals/plural_base.php | 47 + .../helpers/plurals/plural_fr-fr.js | 7 + .../helpers/plurals/plural_fr-fr.php | 17 + .../helpers/plurals/plural_ru-ru.js | 11 + .../helpers/plurals/plural_ru-ru.php | 17 + .../images/digits1/.DS_Store | Bin 0 -> 6148 bytes .../mod_smartcountdown3/images/digits1/d0.png | Bin 0 -> 1093 bytes .../mod_smartcountdown3/images/digits1/d1.png | Bin 0 -> 682 bytes .../mod_smartcountdown3/images/digits1/d2.png | Bin 0 -> 1027 bytes .../mod_smartcountdown3/images/digits1/d3.png | Bin 0 -> 1009 bytes .../mod_smartcountdown3/images/digits1/d4.png | Bin 0 -> 834 bytes .../mod_smartcountdown3/images/digits1/d5.png | Bin 0 -> 968 bytes .../mod_smartcountdown3/images/digits1/d6.png | Bin 0 -> 1181 bytes .../mod_smartcountdown3/images/digits1/d7.png | Bin 0 -> 815 bytes .../mod_smartcountdown3/images/digits1/d8.png | Bin 0 -> 1302 bytes .../mod_smartcountdown3/images/digits1/d9.png | Bin 0 -> 1168 bytes .../images/digits1/index.html | 1 + .../mod_smartcountdown3/images/index.html | 1 + .../images/wpspin_light.gif | Bin 0 -> 2209 bytes .../modules/mod_smartcountdown3/index.html | 1 + .../modules/mod_smartcountdown3/js/index.html | 1 + .../mod_smartcountdown3/js/smartcountdown.js | 1858 +++++++++++++++++ .../mod_smartcountdown3/js/vendor/index.html | 1 + .../mod_smartcountdown3/js/vendor/index.php | 2 + .../js/vendor/jquery-ui-easing.min.js | 6 + .../vendor/jquery-ui-timepicker-addon.min.js | 5 + .../js/vendor/timepicker.collapse.js | 8 + .../js/vendor/velocity.min.js | 4 + .../ar-AA/ar-AA.mod_smartcountdown3.ini | 221 ++ .../language/ar-AA/index.html | 1 + .../de-DE/de-DE.mod_smartcountdown3.ini | 180 ++ .../language/de-DE/index.html | 1 + .../en-GB/en-GB.mod_smartcountdown3.ini | 180 ++ .../en-GB/en-GB.mod_smartcountdown3.sys.ini | 4 + .../language/en-GB/index.html | 1 + .../es-ES/es-ES.mod_smartcountdown3.ini | 180 ++ .../language/es-ES/index.html | 1 + .../fr-FR/fr-FR.mod_smartcountdown3.ini | 180 ++ .../language/fr-FR/index.html | 1 + .../mod_smartcountdown3/language/index.html | 1 + .../language/it-IT/index.html | 1 + .../it-IT/it-IT.mod_smartcountdown3.ini | 180 ++ .../language/nl-BE/index.html | 1 + .../nl-BE/nl-BE.mod_smartcountdown3.ini | 180 ++ .../language/nl-NL/index.html | 1 + .../nl-NL/nl-NL.mod_smartcountdown3.ini | 180 ++ .../language/pt-BR/index.html | 1 + .../pt-BR/pt-BR.mod_smartcountdown3.ini | 180 ++ .../language/pt-PT/index.html | 1 + .../pt-PT/pt-BR.mod_smartcountdown3.ini | 180 ++ .../language/ru-RU/index.html | 1 + .../ru-RU/ru-RU.mod_smartcountdown3.ini | 187 ++ .../mod_smartcountdown3/layouts/auto.xml | 32 + .../layouts/horizontal.xml | 32 + .../layouts/horizontal_compact.xml | 28 + .../horizontal_compact_titles_inline.xml | 30 + .../layouts/horizontal_compact_wrapping.xml | 19 + .../layouts/horizontal_labels_left.xml | 32 + .../mod_smartcountdown3/layouts/index.html | 1 + .../mod_smartcountdown3/layouts/index.php | 2 + .../mod_smartcountdown3/layouts/vertical.xml | 24 + .../layouts/vertical_compact.xml | 19 + .../layouts/vertical_labels_left.xml | 24 + .../mod_smartcountdown3.php | 142 ++ .../mod_smartcountdown3.xml | 283 +++ .../mod_smartcountdown3/tmpl/default.php | 50 + .../mod_smartcountdown3/tmpl/index.html | 1 + 118 files changed, 8312 insertions(+) create mode 100644 deployed/smartcountdown3/administrator/components/com_smartcountdown3/access.xml create mode 100644 deployed/smartcountdown3/administrator/components/com_smartcountdown3/config.xml create mode 100644 deployed/smartcountdown3/administrator/components/com_smartcountdown3/controller.php create mode 100644 deployed/smartcountdown3/administrator/components/com_smartcountdown3/controllers/index.html create mode 100644 deployed/smartcountdown3/administrator/components/com_smartcountdown3/controllers/modules.php create mode 100644 deployed/smartcountdown3/administrator/components/com_smartcountdown3/helpers/index.html create mode 100644 deployed/smartcountdown3/administrator/components/com_smartcountdown3/helpers/smartcountdown3.php create mode 100644 deployed/smartcountdown3/administrator/components/com_smartcountdown3/index.html create mode 100644 deployed/smartcountdown3/administrator/components/com_smartcountdown3/language/en-GB/en-GB.com_smartcountdown3.ini create mode 100644 deployed/smartcountdown3/administrator/components/com_smartcountdown3/language/en-GB/en-GB.com_smartcountdown3.sys.ini create mode 100644 deployed/smartcountdown3/administrator/components/com_smartcountdown3/language/en-GB/index.html create mode 100644 deployed/smartcountdown3/administrator/components/com_smartcountdown3/language/index.html create mode 100644 deployed/smartcountdown3/administrator/components/com_smartcountdown3/models/fields/index.html create mode 100644 deployed/smartcountdown3/administrator/components/com_smartcountdown3/models/forms/index.html create mode 100644 deployed/smartcountdown3/administrator/components/com_smartcountdown3/models/index.html create mode 100644 deployed/smartcountdown3/administrator/components/com_smartcountdown3/models/modules.php create mode 100644 deployed/smartcountdown3/administrator/components/com_smartcountdown3/smartcountdown3.php create mode 100644 deployed/smartcountdown3/administrator/components/com_smartcountdown3/smartcountdown3.xml create mode 100644 deployed/smartcountdown3/administrator/components/com_smartcountdown3/views/index.html create mode 100644 deployed/smartcountdown3/administrator/components/com_smartcountdown3/views/modules/index.html create mode 100644 deployed/smartcountdown3/administrator/components/com_smartcountdown3/views/modules/tmpl/default.php create mode 100644 deployed/smartcountdown3/administrator/components/com_smartcountdown3/views/modules/tmpl/index.html create mode 100644 deployed/smartcountdown3/administrator/components/com_smartcountdown3/views/modules/view.html.php create mode 100644 deployed/smartcountdown3/administrator/components/com_smartcountdown3/views/render/index.html create mode 100644 deployed/smartcountdown3/administrator/components/com_smartcountdown3/views/render/tmpl/default.php create mode 100644 deployed/smartcountdown3/administrator/components/com_smartcountdown3/views/render/tmpl/index.html create mode 100644 deployed/smartcountdown3/administrator/components/com_smartcountdown3/views/render/view.html.php create mode 100644 deployed/smartcountdown3/components/com_smartcountdown3/controllers/event.json.php create mode 100644 deployed/smartcountdown3/components/com_smartcountdown3/controllers/index.html create mode 100644 deployed/smartcountdown3/components/com_smartcountdown3/index.html create mode 100644 deployed/smartcountdown3/components/com_smartcountdown3/smartcountdown3.php create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/css/collapse-style.css create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/css/index.html create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/css/jquery-ui.css create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/css/smartcountdown.css create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/css/smartcountdown_rtl.css create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/fields/configfile.php create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/fields/index.html create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/fields/preview.php create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/fx/No_FX_animation.xml create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/fx/Sliding_images.xml create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/fx/Sliding_text.xml create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/fx/Text_opacity.xml create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/fx/index.html create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/helpers/helper.php create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/helpers/index.html create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/helpers/plurals/index.html create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/helpers/plurals/plural.js create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/helpers/plurals/plural.php create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/helpers/plurals/plural_ar-aa.js create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/helpers/plurals/plural_ar-aa.php create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/helpers/plurals/plural_base.php create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/helpers/plurals/plural_fr-fr.js create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/helpers/plurals/plural_fr-fr.php create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/helpers/plurals/plural_ru-ru.js create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/helpers/plurals/plural_ru-ru.php create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/images/digits1/.DS_Store create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/images/digits1/d0.png create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/images/digits1/d1.png create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/images/digits1/d2.png create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/images/digits1/d3.png create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/images/digits1/d4.png create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/images/digits1/d5.png create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/images/digits1/d6.png create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/images/digits1/d7.png create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/images/digits1/d8.png create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/images/digits1/d9.png create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/images/digits1/index.html create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/images/index.html create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/images/wpspin_light.gif create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/index.html create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/js/index.html create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/js/smartcountdown.js create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/js/vendor/index.html create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/js/vendor/index.php create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/js/vendor/jquery-ui-easing.min.js create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/js/vendor/jquery-ui-timepicker-addon.min.js create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/js/vendor/timepicker.collapse.js create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/js/vendor/velocity.min.js create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/language/ar-AA/ar-AA.mod_smartcountdown3.ini create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/language/ar-AA/index.html create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/language/de-DE/de-DE.mod_smartcountdown3.ini create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/language/de-DE/index.html create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/language/en-GB/en-GB.mod_smartcountdown3.ini create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/language/en-GB/en-GB.mod_smartcountdown3.sys.ini create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/language/en-GB/index.html create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/language/es-ES/es-ES.mod_smartcountdown3.ini create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/language/es-ES/index.html create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/language/fr-FR/fr-FR.mod_smartcountdown3.ini create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/language/fr-FR/index.html create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/language/index.html create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/language/it-IT/index.html create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/language/it-IT/it-IT.mod_smartcountdown3.ini create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/language/nl-BE/index.html create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/language/nl-BE/nl-BE.mod_smartcountdown3.ini create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/language/nl-NL/index.html create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/language/nl-NL/nl-NL.mod_smartcountdown3.ini create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/language/pt-BR/index.html create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/language/pt-BR/pt-BR.mod_smartcountdown3.ini create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/language/pt-PT/index.html create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/language/pt-PT/pt-BR.mod_smartcountdown3.ini create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/language/ru-RU/index.html create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/language/ru-RU/ru-RU.mod_smartcountdown3.ini create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/layouts/auto.xml create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/layouts/horizontal.xml create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/layouts/horizontal_compact.xml create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/layouts/horizontal_compact_titles_inline.xml create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/layouts/horizontal_compact_wrapping.xml create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/layouts/horizontal_labels_left.xml create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/layouts/index.html create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/layouts/index.php create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/layouts/vertical.xml create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/layouts/vertical_compact.xml create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/layouts/vertical_labels_left.xml create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/mod_smartcountdown3.php create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/mod_smartcountdown3.xml create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/tmpl/default.php create mode 100644 deployed/smartcountdown3/modules/mod_smartcountdown3/tmpl/index.html diff --git a/deployed/smartcountdown3/administrator/components/com_smartcountdown3/access.xml b/deployed/smartcountdown3/administrator/components/com_smartcountdown3/access.xml new file mode 100644 index 00000000..d495ce55 --- /dev/null +++ b/deployed/smartcountdown3/administrator/components/com_smartcountdown3/access.xml @@ -0,0 +1,7 @@ + + +
+ + +
+
diff --git a/deployed/smartcountdown3/administrator/components/com_smartcountdown3/config.xml b/deployed/smartcountdown3/administrator/components/com_smartcountdown3/config.xml new file mode 100644 index 00000000..d8485ce1 --- /dev/null +++ b/deployed/smartcountdown3/administrator/components/com_smartcountdown3/config.xml @@ -0,0 +1,25 @@ + + +
+ + + + +
+
\ No newline at end of file diff --git a/deployed/smartcountdown3/administrator/components/com_smartcountdown3/controller.php b/deployed/smartcountdown3/administrator/components/com_smartcountdown3/controller.php new file mode 100644 index 00000000..50910919 --- /dev/null +++ b/deployed/smartcountdown3/administrator/components/com_smartcountdown3/controller.php @@ -0,0 +1,19 @@ +input->get('view', 'modules'); + $layout = $this->input->get('layout', 'default'); + + parent::display(); + } +} diff --git a/deployed/smartcountdown3/administrator/components/com_smartcountdown3/controllers/index.html b/deployed/smartcountdown3/administrator/components/com_smartcountdown3/controllers/index.html new file mode 100644 index 00000000..2efb97f3 --- /dev/null +++ b/deployed/smartcountdown3/administrator/components/com_smartcountdown3/controllers/index.html @@ -0,0 +1 @@ + diff --git a/deployed/smartcountdown3/administrator/components/com_smartcountdown3/controllers/modules.php b/deployed/smartcountdown3/administrator/components/com_smartcountdown3/controllers/modules.php new file mode 100644 index 00000000..2c42e889 --- /dev/null +++ b/deployed/smartcountdown3/administrator/components/com_smartcountdown3/controllers/modules.php @@ -0,0 +1,15 @@ + true)) + { + $model = parent::getModel($name, $prefix, $config); + + return $model; + } + */ +} diff --git a/deployed/smartcountdown3/administrator/components/com_smartcountdown3/helpers/index.html b/deployed/smartcountdown3/administrator/components/com_smartcountdown3/helpers/index.html new file mode 100644 index 00000000..2efb97f3 --- /dev/null +++ b/deployed/smartcountdown3/administrator/components/com_smartcountdown3/helpers/index.html @@ -0,0 +1 @@ + diff --git a/deployed/smartcountdown3/administrator/components/com_smartcountdown3/helpers/smartcountdown3.php b/deployed/smartcountdown3/administrator/components/com_smartcountdown3/helpers/smartcountdown3.php new file mode 100644 index 00000000..65e9171d --- /dev/null +++ b/deployed/smartcountdown3/administrator/components/com_smartcountdown3/helpers/smartcountdown3.php @@ -0,0 +1,17 @@ + diff --git a/deployed/smartcountdown3/administrator/components/com_smartcountdown3/language/en-GB/en-GB.com_smartcountdown3.ini b/deployed/smartcountdown3/administrator/components/com_smartcountdown3/language/en-GB/en-GB.com_smartcountdown3.ini new file mode 100644 index 00000000..e839e0a8 --- /dev/null +++ b/deployed/smartcountdown3/administrator/components/com_smartcountdown3/language/en-GB/en-GB.com_smartcountdown3.ini @@ -0,0 +1,22 @@ +; Note : All ini files need to be saved as UTF-8 + +COM_SMARTCOUNTDOWN3="Smart Countdown 3" +COM_SMARTCOUNTDOWN3_XML_DESCRIPTION="Smart Countdown 3 Control Panel" + +COM_SMARTCOUNTDOWN3_MANAGER_MODULES="Smart Countdown 3 Modules" +COM_SMARTCOUNTDOWN3_SUBMENU_MODULES="Modules" + +COM_SMARTCOUNTDOWN3_MODULES_SORT_POSITION="Position" +COM_SMARTCOUNTDOWN3_MODULES_HEADER_TITLE="Module Title" +COM_SMARTCOUNTDOWN3_MODULES_HEADER_POSITION="Position" +COM_SMARTCOUNTDOWN3_MODULES_HEADER_DEADLINE="Event Date" +COM_SMARTCOUNTDOWN3_MODUELS_EDIT_IN_MANAGER="Edit in modules manager" +COM_SMARTCOUNTDOWN3_MODULES_PLUGINS_ENABLED="- Controlled by plugin(s) -" +COM_SMARTCOUNTDOWN3_MODULES_DEADLINE_INVALID="- Invalid date -" + +COM_SMARTCOUNTDOWN3_MODULES_PREVIEW="Preview" +COM_SMARTCOUNTDOWN3_MODULES_PREVIEW_LABEL="Test module view" +COM_SMARTCOUNTDOWN3_MODULES_PREVIEW_DESC="Use this window to preview counter display and test responsive feature. You can change window width to simulate template position width the module will be published to and see how the counter layout adapts to the horizontal space provided. Please, keep in mind that test window width stands for template position width and not the target device screen width.
If the counter is not displayed at all check that "_QQ_"Counter display modes"_QQ_" setting is correct and/or there are current external events (if the module is connected to an external event management application or service via event import plugin)" +COM_SMARTCOUNTDOWN3_MODULES_PREVIEW_CLOSE="Close" +COM_SMARTCOUNTDOWN3_MODULES_PREVIEW_REFRESH="Reload" +COM_SMARTCOUNTDOWN3_MODULES_PREVIEW_ERROR="Error loading module preview!" \ No newline at end of file diff --git a/deployed/smartcountdown3/administrator/components/com_smartcountdown3/language/en-GB/en-GB.com_smartcountdown3.sys.ini b/deployed/smartcountdown3/administrator/components/com_smartcountdown3/language/en-GB/en-GB.com_smartcountdown3.sys.ini new file mode 100644 index 00000000..348d2220 --- /dev/null +++ b/deployed/smartcountdown3/administrator/components/com_smartcountdown3/language/en-GB/en-GB.com_smartcountdown3.sys.ini @@ -0,0 +1,5 @@ +; Note : All ini files need to be saved as UTF-8 +COM_SMARTCOUNTDOWN3="Smart Countdown 3" +COM_SMARTCOUNTDOWN3_XML_DESCRIPTION="Smart Countdown 3 Control Panel" +COM_SMARTCOUNTDOWN3_INSTALLATION_STATUS="Smart Countdown 3 Installation" +COM_SMARTCOUNTDOWN3_UNINSTALLATION_STATUS="Smart Countdown 3 Uninstallation" \ No newline at end of file diff --git a/deployed/smartcountdown3/administrator/components/com_smartcountdown3/language/en-GB/index.html b/deployed/smartcountdown3/administrator/components/com_smartcountdown3/language/en-GB/index.html new file mode 100644 index 00000000..2efb97f3 --- /dev/null +++ b/deployed/smartcountdown3/administrator/components/com_smartcountdown3/language/en-GB/index.html @@ -0,0 +1 @@ + diff --git a/deployed/smartcountdown3/administrator/components/com_smartcountdown3/language/index.html b/deployed/smartcountdown3/administrator/components/com_smartcountdown3/language/index.html new file mode 100644 index 00000000..2efb97f3 --- /dev/null +++ b/deployed/smartcountdown3/administrator/components/com_smartcountdown3/language/index.html @@ -0,0 +1 @@ + diff --git a/deployed/smartcountdown3/administrator/components/com_smartcountdown3/models/fields/index.html b/deployed/smartcountdown3/administrator/components/com_smartcountdown3/models/fields/index.html new file mode 100644 index 00000000..2efb97f3 --- /dev/null +++ b/deployed/smartcountdown3/administrator/components/com_smartcountdown3/models/fields/index.html @@ -0,0 +1 @@ + diff --git a/deployed/smartcountdown3/administrator/components/com_smartcountdown3/models/forms/index.html b/deployed/smartcountdown3/administrator/components/com_smartcountdown3/models/forms/index.html new file mode 100644 index 00000000..2efb97f3 --- /dev/null +++ b/deployed/smartcountdown3/administrator/components/com_smartcountdown3/models/forms/index.html @@ -0,0 +1 @@ + diff --git a/deployed/smartcountdown3/administrator/components/com_smartcountdown3/models/index.html b/deployed/smartcountdown3/administrator/components/com_smartcountdown3/models/index.html new file mode 100644 index 00000000..2efb97f3 --- /dev/null +++ b/deployed/smartcountdown3/administrator/components/com_smartcountdown3/models/index.html @@ -0,0 +1 @@ + diff --git a/deployed/smartcountdown3/administrator/components/com_smartcountdown3/models/modules.php b/deployed/smartcountdown3/administrator/components/com_smartcountdown3/models/modules.php new file mode 100644 index 00000000..85f4197e --- /dev/null +++ b/deployed/smartcountdown3/administrator/components/com_smartcountdown3/models/modules.php @@ -0,0 +1,125 @@ +getUserStateFromRequest($this->context . '.filter.search', 'filter_search'); + $this->setState('filter.search', $search); + + $state = $this->getUserStateFromRequest($this->context . '.filter.state', 'filter_state', '', 'string'); + $this->setState('filter.state', $state); + + // List state information. + parent::populateState('a.title', 'asc'); + } + + protected function getStoreId($id = '') + { + // Compile the store id. + $id .= ':' . $this->getState('filter.search'); + $id .= ':' . $this->getState('filter.state'); + + return parent::getStoreId($id); + } + + protected function getListQuery() + { + // Create a new query object. + $db = $this->getDbo(); + $query = $db->getQuery(true); + + // Select the required fields from the table. + $query->select( + $this->getState( + 'list.select', + 'a.*' + ) + ); + $query->from('#__modules AS a'); + + $query->where('a.module = ' . $db->Quote('mod_smartcountdown3')); + + // Filter by published state. + $state = $this->getState('filter.state'); + + if (is_numeric($state)) + { + $query->where('a.published = ' . (int) $state); + } + elseif ($state === '') + { + $query->where('(a.published IN (0, 1))'); + } + + // Filter by search in subject or message. + $search = $this->getState('filter.search'); + + if (!empty($search)) + { + $search = $db->quote('%' . str_replace(' ', '%', $db->escape(trim($search), true) . '%')); + $query->where('(a.title LIKE ' . $search . ' OR a.position LIKE ' . $search . ')'); + } + + // Add the list ordering clause. + $query->order($db->escape($this->getState('list.ordering', 'a.title')) . ' ' . $db->escape($this->getState('list.direction', 'ASC'))); + + $test = (string)$query; + + return $query; + } + + public function getItems() + { + $items = parent::getItems(); + if(empty($items)) + { + return $items; + } + + foreach($items as &$item) + { + // convert params to registry + $params = new JRegistry(); + $params->loadString($item->params); + $item->params = $params->toArray(); + + $enabled_plugins = 0; + foreach($item->params as $k => $v) + { + if(strpos($k, '_enabled') > 0 && $v != 0) + { + $enabled_plugins++; + } + } + if($enabled_plugins) + { + $item->deadline = true; + } + else + { + $item->deadline = !empty($item->params['deadline']) ? $item->params['deadline'] : null; + } + } + + return $items; + } +} diff --git a/deployed/smartcountdown3/administrator/components/com_smartcountdown3/smartcountdown3.php b/deployed/smartcountdown3/administrator/components/com_smartcountdown3/smartcountdown3.php new file mode 100644 index 00000000..6b647b98 --- /dev/null +++ b/deployed/smartcountdown3/administrator/components/com_smartcountdown3/smartcountdown3.php @@ -0,0 +1,19 @@ +authorise('core.manage', 'com_smartcountdown3')) { + return JError::raiseWarning(404, JText::_('JERROR_ALERTNOAUTHOR')); +} + +$controller = JControllerLegacy::getInstance('smartCountdown3'); +$controller->execute(JFactory::getApplication()->input->get('task')); +$controller->redirect(); diff --git a/deployed/smartcountdown3/administrator/components/com_smartcountdown3/smartcountdown3.xml b/deployed/smartcountdown3/administrator/components/com_smartcountdown3/smartcountdown3.xml new file mode 100644 index 00000000..d1b8d952 --- /dev/null +++ b/deployed/smartcountdown3/administrator/components/com_smartcountdown3/smartcountdown3.xml @@ -0,0 +1,37 @@ + + + com_smartcountdown3 + Alex Polonski + 2012-2014 + (C) 2012 - 2015 - Alex Polonski. All rights reserved. + GNU General Public License version 2 or later; see LICENSE.txt + alex3493@yandex.ru + http://smartcalc.es/J3 + 3.4.5 + COM_SMARTCOUNTDOWN3_XML_DESCRIPTION + + COM_SMARTCOUNTDOWN3 + + controller.php + smartcountdown3.php + config.xml + access.xml + index.html + views + models + controllers + helpers + language + + + + index.html + smartcountdown3.php + controllers + + + + http://smartcalc.org/updates/com-smartcountdown-30-update.xml + + + diff --git a/deployed/smartcountdown3/administrator/components/com_smartcountdown3/views/index.html b/deployed/smartcountdown3/administrator/components/com_smartcountdown3/views/index.html new file mode 100644 index 00000000..2efb97f3 --- /dev/null +++ b/deployed/smartcountdown3/administrator/components/com_smartcountdown3/views/index.html @@ -0,0 +1 @@ + diff --git a/deployed/smartcountdown3/administrator/components/com_smartcountdown3/views/modules/index.html b/deployed/smartcountdown3/administrator/components/com_smartcountdown3/views/modules/index.html new file mode 100644 index 00000000..2efb97f3 --- /dev/null +++ b/deployed/smartcountdown3/administrator/components/com_smartcountdown3/views/modules/index.html @@ -0,0 +1 @@ + diff --git a/deployed/smartcountdown3/administrator/components/com_smartcountdown3/views/modules/tmpl/default.php b/deployed/smartcountdown3/administrator/components/com_smartcountdown3/views/modules/tmpl/default.php new file mode 100644 index 00000000..9f6c29e2 --- /dev/null +++ b/deployed/smartcountdown3/administrator/components/com_smartcountdown3/views/modules/tmpl/default.php @@ -0,0 +1,157 @@ +escape($this->state->get('list.ordering')); +$listDirn = $this->escape($this->state->get('list.direction')); + +$sortFields = $this->getSortFields(); +?> + +
+sidebar)) : ?> +
+ sidebar; ?> +
+
+ +
+ +
+ +
+ + +
+
+ + pagination->getLimitBox(); ?> +
+
+ + +
+
+ + +
+
+
+
+ items)) : ?> +
+ +
+ + + + + + + + + + + + + + + + + + + items as $i => $item) : ?> + + + + + + + + + + +
+ + + + + + + + + +
+ pagination->getListFooter(); ?> +
+ published, $i, 'modules.', false, 'cb', $item->publish_up, $item->publish_down); ?> + + authorise('core.edit', 'com_modules.module.' . $item->id) && $user->authorise('core.manage', 'com_modules')) : ?> + + escape($item->title); ?> + + escape($item->title); ?> + + + position)) : ?> + escape($item->position); ?> + + --- + + + deadline === true) : ?> + + deadline)) : ?> + + + deadline)->toSql(); ?> + + + + + id; ?> +
+ + +
+ + + + +
+
+ diff --git a/deployed/smartcountdown3/administrator/components/com_smartcountdown3/views/modules/tmpl/index.html b/deployed/smartcountdown3/administrator/components/com_smartcountdown3/views/modules/tmpl/index.html new file mode 100644 index 00000000..2efb97f3 --- /dev/null +++ b/deployed/smartcountdown3/administrator/components/com_smartcountdown3/views/modules/tmpl/index.html @@ -0,0 +1 @@ + diff --git a/deployed/smartcountdown3/administrator/components/com_smartcountdown3/views/modules/view.html.php b/deployed/smartcountdown3/administrator/components/com_smartcountdown3/views/modules/view.html.php new file mode 100644 index 00000000..8faf8de8 --- /dev/null +++ b/deployed/smartcountdown3/administrator/components/com_smartcountdown3/views/modules/view.html.php @@ -0,0 +1,66 @@ +items = $this->get('Items'); + $this->pagination = $this->get('Pagination'); + $this->state = $this->get('State'); + + // Check for errors. + if (count($errors = $this->get('Errors'))) + { + JError::raiseError(500, implode("\n", $errors)); + + return false; + } + + smartCountdown3Helper::addSubmenu('modules'); + + $this->addToolbar(); + $this->sidebar = JHtmlSidebar::render(); + parent::display($tpl); + } + + protected function addToolbar() + { + $state = $this->get('State'); + $canDo = JHelperContent::getActions('com_smartcountdown3'); + + JToolbarHelper::title(JText::_('COM_SMARTCOUNTDOWN3_MANAGER_MODULES'), 'scd-manager-moduels'); + + if ($canDo->get('core.admin')) + { + JToolbarHelper::preferences('com_smartcountdown3'); + } + + JHtmlSidebar::setAction('index.php?option=com_smartcountdown3&view=modules'); + + JHtmlSidebar::addFilter( + JText::_('JOPTION_SELECT_PUBLISHED'), + 'filter_state', + JHtml::_('select.options', JHtml::_('jgrid.publishedOptions', array("archived" => 0, "all" => 0)), 'value', 'text', $this->state->get('filter.state'), true) + ); + + } + + protected function getSortFields() + { + return array( + 'a.id' => JText::_('JGRID_HEADING_ID'), + 'a.published' => JText::_('JSTATUS'), + 'a.title' => JText::_('JGLOBAL_TITLE'), + 'a.position' => JText::_('COM_SMARTCOUNTDOWN3_MODULES_SORT_POSITION') + ); + } +} diff --git a/deployed/smartcountdown3/administrator/components/com_smartcountdown3/views/render/index.html b/deployed/smartcountdown3/administrator/components/com_smartcountdown3/views/render/index.html new file mode 100644 index 00000000..2efb97f3 --- /dev/null +++ b/deployed/smartcountdown3/administrator/components/com_smartcountdown3/views/render/index.html @@ -0,0 +1 @@ + diff --git a/deployed/smartcountdown3/administrator/components/com_smartcountdown3/views/render/tmpl/default.php b/deployed/smartcountdown3/administrator/components/com_smartcountdown3/views/render/tmpl/default.php new file mode 100644 index 00000000..df0cf19b --- /dev/null +++ b/deployed/smartcountdown3/administrator/components/com_smartcountdown3/views/render/tmpl/default.php @@ -0,0 +1,39 @@ + +
+

+ +

+

+ +

+
+ + +
+
+ +module)) +{ + echo JText::_('COM_SMARTCOUNTDOWN3_MODULES_PREVIEW_ERROR'); +} +else +{ + $params = new JRegistry; + $params->loadString($this->module->params); + + // disable automatic redirection related options (they will not work in admin preview) + $params->set('counter_clickable', 0); + $params->set('event_goto_menu', 0); + $params->set('event_goto_url', ''); + + $module = $this->module; + $path = JPATH_SITE . '/modules/mod_smartcountdown3/mod_smartcountdown3.php'; + $is_admin_preview = true; + include $path; +} +?> diff --git a/deployed/smartcountdown3/administrator/components/com_smartcountdown3/views/render/tmpl/index.html b/deployed/smartcountdown3/administrator/components/com_smartcountdown3/views/render/tmpl/index.html new file mode 100644 index 00000000..2efb97f3 --- /dev/null +++ b/deployed/smartcountdown3/administrator/components/com_smartcountdown3/views/render/tmpl/index.html @@ -0,0 +1 @@ + diff --git a/deployed/smartcountdown3/administrator/components/com_smartcountdown3/views/render/view.html.php b/deployed/smartcountdown3/administrator/components/com_smartcountdown3/views/render/view.html.php new file mode 100644 index 00000000..9b61be14 --- /dev/null +++ b/deployed/smartcountdown3/administrator/components/com_smartcountdown3/views/render/view.html.php @@ -0,0 +1,29 @@ +load('mod_smartcountdown3', JPATH_SITE . '/modules/mod_smartcountdown3'); + + $app = JFactory::getApplication(); + + $id = $app->input->getInt('id', 0); + + $db = JFactory::getDbo(); + $db->setQuery('SELECT a.* FROM #__modules AS a WHERE a.id = ' . $id); + $this->module = $db->loadObject(); + + /* Looks that we do not need this + $this->module->publish_up = $this->module->publish_down = $db->getNullDate(); + $this->module->published = 1; + $this->module->access = 1; + */ + + parent::display($tpl); + } +} \ No newline at end of file diff --git a/deployed/smartcountdown3/components/com_smartcountdown3/controllers/event.json.php b/deployed/smartcountdown3/components/com_smartcountdown3/controllers/event.json.php new file mode 100644 index 00000000..f819492a --- /dev/null +++ b/deployed/smartcountdown3/components/com_smartcountdown3/controllers/event.json.php @@ -0,0 +1,442 @@ +input->getInt ( 'scd_module_id', 0 ); + + // get requested module data + $db = JFactory::getDbo (); + $db->setQuery ( 'SELECT a.* FROM #__modules AS a WHERE a.id = ' . $module_id ); + try { + $module = $db->loadObject (); + } catch ( RuntimeException $e ) { + self::sendResponse ( null, 500, $e->getMessage () ); + return; + } + // check that the module exists + $params_raw = @$module->params; + if (empty ( $params_raw )) { + self::sendResponse ( null, 100, 'Module not found' ); + return; + } + + $params = new JRegistry (); + $params->loadString ( $params_raw ); + + // look for events import plugins + $dispatcher = JDispatcher::getInstance (); + JPluginHelper::importPlugin ( 'system' ); + $result = $dispatcher->trigger ( 'onCountdownGetEventsQueue', array ( + 'mod_smartcountdown3', + $params + ) ); + + if (in_array ( false, $result, true )) { + // this is a json controller and plugins cannot display error messages directly. + // plugins can add messages to application queue (in debug mode, e.g.) and we can + // extract them here and send in error response + $messages = $app->getMessageQueue (); + if (! empty ( $messages )) { + $message = array (); + foreach ( $messages as $m ) { + $message [] = $m ['message']; + } + $message = implode ( ', ', $message ); + } else { + $message = 'Error processing event import plugin'; + } + // Do not change error code below - it is required for + // event import plugins debugging mode + self::sendResponse ( null, 101, $message ); + return; + } + + // filter out empty result elements (plugin returned true) + $result = array_filter ( $result, function ($v) { + return $v !== true; + } ); + + $now_micro_ts = microtime ( true ); + $now_ts_millis = round ( $now_micro_ts, 3 ) * 1000; + $now_ts = round ( $now_micro_ts ); + + // get counter display modes from options. Here we are interested in + // "countup limit" only. + $modes = explode ( ':', $params->get ( 'counter_modes', '-1:-1' ) ); + + if (empty ( $result )) { + // plugins not enabled for this module instance or system-wide + // get internal counter + $deadline = JDate::getInstance ( $params->get ( 'deadline', 'now' ) ); + + // for internal counter "countdown to end" mode (-2) has no sense + $countup_limit = $modes [1] < 0 ? - 1 : $modes [1]; + + if ($countup_limit >= 0 && $deadline->getTimestamp () + $countup_limit <= $now_ts) { + $deadline = ''; + } else { + $deadline = $deadline->format ( 'c' ); + } + + $options = array ( + 'deadline' => $deadline, + 'countup_limit' => $countup_limit, + 'countdown_query_limit' => -1, + 'now' => $now_ts_millis + ); + } else { + // process imported events + $countup_limit = $modes [1]; + + $current_event = self::processImportedEvents ( $result, $countup_limit, $now_ts ); + if (empty ( $current_event )) { + $options = array ( + 'deadline' => '', + 'countup_limit' => '', + 'imported_title' => '', + 'now' => $now_ts_millis + ); + } else { + $options = array ( + 'deadline' => $current_event ['deadline'], + 'countup_limit' => $current_event ['countup_limit'], + 'countdown_query_limit' => $current_event ['countdown_query_limit'], + 'imported_title_down' => $current_event ['imported_title_down'], + 'imported_title_up' => $current_event ['imported_title_up'], + 'is_countdown_to_end' => $current_event ['is_countdown_to_end'], + 'now' => $now_ts_millis + ); + // Only add redirect URLs to response if they are defined by event import plugin + // (when not defined in response, those set in module options will be used) + if (isset ( $current_event ['click_url'] )) { + $options ['click_url'] = $current_event ['click_url']; + } + if (isset ( $current_event ['redirect_url'] )) { + $options ['redirect_url'] = $current_event ['redirect_url']; + } + } + } + self::sendResponse ( $options ); + } + private static function processImportedEvents($result, $countup_limit, $now_ts) { + if (empty ( $result )) { + return false; + } + + // Plain events arrays + $current_events = array (); + $future_events = array (); + + // merge events from all providers. For now there is no difference which + // import plugin events comes from + foreach ( $result as $group ) { + foreach ( $group as $i => $event ) { + // ===== old import modules handle "countdown to end mode" creating two events with + // duration zero, setting 'is_countdown_to_end' flag for the second event and + // its deadline as first event deadline + first event imported duration. + // For each group such events always go one after another in unsorted timeline, + // so we can detect CTE simutation events pair + if(isset($group[$i + 1]) && !empty($group[$i + 1]['is_countdown_to_end'])) { + // if we have next event and it is CTE, modify current event setting its + // 'is_countdown_to_end' flag and correct duration (recover it from difference + // in deadlines) + $event['is_countdown_to_end'] = 1; + $event['duration'] = $group[$i + 1]['deadline'] - $group[$i]['deadline']; + // mark next event as processed - it shouldn't be added to timeline + $group[$i + 1]['skip_event'] = 1; + } + if(!empty($group[$i]['skip_event'])) { + // this event was already processed, discard it + continue; + } + // end old plugins compatibility code ===== + + // separate and filter events + if ($event ['deadline'] <= $now_ts) { + // event already started + if ($event ['duration'] >= 0) { + $duration_filter = $countup_limit >= 0 ? min ( $countup_limit, $event ['duration'] ) : $event ['duration']; + if ($event ['deadline'] + $duration_filter > $now_ts) { + $current_events [] = $event; + } + } else { + // we are interested in all started events which have no end date + $current_events [] = $event; + } + } elseif ($event ['deadline'] > $now_ts) { + // we are interested in all future events + $future_events [] = $event; + } + // finished events are discarded + } + } + + $is_countdown_to_end = $countup_limit == - 2; + + // Structured events. Each deadline will be an array of events, keyed and sorted + // by their end time (normal) or start time (CTE) + + $current_events = self::groupEvents ( $current_events, 'current', $is_countdown_to_end ); + $future_events = self::groupEvents ( $future_events, 'future', false ); + + $max_countup_limit = 0; + + if ($is_countdown_to_end) { + // CTE (countdown-to-end) mode + if (! empty ( $current_events )) { + // closest event(s) end time is the deadline + $event_end_times = array_keys ( $current_events ); + $deadline_ts = $event_end_times [0]; + + // get events group (for overlapping events) + $events = reset ( $current_events ); + $event_start_times = array_keys ( $events ); + + // if there are future events we need the closest event start to + // set countdown limit - when this limit is reached we must repeat event query + $countdown_query_limit = 0; + if (! empty ( $future_events )) { + // future events are always grouped by start dates + $event_start_times = array_keys ( $future_events ); + $countdown_query_limit = $deadline_ts - $event_start_times [0]; + if ($countdown_query_limit < 0) { + // if the closest future event start after the current events finish + // we ignore the difference + $countdown_query_limit = 0; + } + } + $countdown_to_end = 1; + } elseif (! empty ( $future_events )) { + $event_start_times = array_keys ( $future_events ); + $deadline_ts = $event_start_times [0]; + + $events = reset ( $future_events ); + $event_end_times = array_keys ( $events ); + + // we have only future events. In CTE mode we must repeat event query once + // the deadline is reached + $countdown_query_limit = 0; + $countdown_to_end = 0; + } + } else { + $current_event_start_times = array_keys ( $current_events ); + $future_event_start_times = array_keys ( $future_events ); + + // normal mode + if (! empty ( $current_events )) { + // most recently started event(s) start time is the deadline + $deadline_ts = $current_event_start_times [0]; + + // get events group (for overlapping events) + $events = reset ( $current_events ); + $event_end_times = array_keys ( $events ); + + if (! empty ( $future_events )) { + // limit countup to next event start and event duration + $max_countup_limit = min ( $future_event_start_times [0], $event_end_times [0] ) - $deadline_ts; + } else { + // no more events - limit countup to event duration only + $max_countup_limit = $event_end_times [0] - $deadline_ts; + } + } elseif (! empty ( $future_events )) { + // we have only future events + // the closest future event(s) start time is the deadline + $deadline_ts = $future_event_start_times [0]; + + $events = reset ( $future_events ); + $event_end_times = array_keys ( $events ); + + if (isset ( $future_event_start_times [1] )) { + // limit countup to next event start and event duration + $max_countup_limit = min ( $future_event_start_times [1], $event_end_times [0] ) - $deadline_ts; + } else { + // no more events - limit countup to event duration only + $max_countup_limit = $event_end_times [0] - $deadline_ts; + } + } + + // adjust countup_limit + if ($countup_limit >= 0) { + $countup_limit = min ( $countup_limit, $max_countup_limit ); + } else { + $countup_limit = $max_countup_limit; + } + // no CTE in normal mode + $countdown_to_end = 0; + $countdown_query_limit = - 1; + } + + // normally event import plugins will fetch only valid events, + // just in case the timeline is empty, we simulate "no events found" + if (empty ( $events )) { + return false; + } + + // event import plugins can be set up to import event titles: + // common titles - should be displayed both before event and when event has started + // per-mode titles - one for countdown mode and the other for count up or countdown-to-end + + // we maintain 2 array for all simultaneos events. If an event imported has per-mode + // titles set we add each title to the corresponding concatenation array, + // otherwise (common titles) event title will be added to both concat arrays. + $concat_title_down = array (); + $concat_title_up = array (); + + $redirect_url = null; + $click_url = null; + + // iterate through events - construct title proposal and detect + // countdown_to_end events + foreach ( $events as &$event ) { + // update concatenation arrays + self::concatTitles ( $concat_title_down, $concat_title_up, $event ); + + // if there are more than 1 current evetns, each one can define its own + // redirection URL. We must resolve this conflict for both auto-redirect and click: + // the first event in list must win. Links in event titles will work OK even if + // multiple events are listed. + if (empty ( $redirect_url ) && ! empty ( $event ['redirect_url'] )) { + $redirect_url = $event ['redirect_url']; + } + if (empty ( $click_url ) && ! empty ( $event ['click_url'] )) { + $click_url = $event ['click_url']; + } + } + + // start clean data structure + $event = array (); + + // join titles to a string (may be empty string if no titles found) + $concat_title_down = implode ( ', ', $concat_title_down ); + $event ['imported_title_down'] = $concat_title_down; + $concat_title_up = implode ( ', ', $concat_title_up ); + $event ['imported_title_up'] = $concat_title_up; + + $deadline = new DateTime (); + $deadline->setTimestamp ( $deadline_ts ); + $event ['deadline'] = $deadline->format ( 'c' ); + $event ['is_countdown_to_end'] = $countdown_to_end; + if (! empty ( $redirect_url )) { + $event ['redirect_url'] = $redirect_url; + } + if (! empty ( $click_url )) { + $event ['click_url'] = $click_url; + } + $event ['countup_limit'] = $countup_limit; + $event ['countdown_query_limit'] = $countdown_query_limit; + + return $event; + } + private static function groupEvents($unsorted, $events_type, $is_countdown_to_end = false) { + $timeline = array (); + foreach ( $unsorted as $event ) { + if ($is_countdown_to_end && $event ['duration'] == - 1) { + // no countdown-to-end for events with no end date + continue; + } + + $event_start_ts = $event ['deadline']; + if ($event ['duration'] >= 0) { + $event_end_ts = $event ['deadline'] + $event ['duration']; + } else { + $event_end_ts = PHP_INT_MAX; + } + + if ($is_countdown_to_end) { + // for countdown-to-end mode group events by end date + if (! isset ( $timeline [$event_end_ts] )) { + $timeline [$event_end_ts] = array (); + } + // make sure we have unique $event_start_ts key: otherwise if there are fully overlapping + // events the last event data will overwrite the previous one(s) which will be lost + while ( isset ( $timeline [$event_end_ts] [$event_start_ts] ) ) { + $event_start_ts = '0' . $event_start_ts; + } + // add event to timeline + $timeline [$event_end_ts] [$event_start_ts] = $event; + } else { + // for normal mode group events by start date + if (! isset ( $timeline [$event_start_ts] )) { + $timeline [$event_start_ts] = array (); + } + // make sure we have unique $event_end_ts key: otherwise if there are fully overlapping + // events the last event data will overwrite the previous one(s) which will be lost + while ( isset ( $timeline [$event_start_ts] [$event_end_ts] ) ) { + $event_end_ts = '0' . $event_end_ts; + } + // add event to timeline + $timeline [$event_start_ts] [$event_end_ts] = $event; + } + } + + if ($is_countdown_to_end) { + $events = self::sortEvents ( $timeline, 'asc'/*, 'asc'*/ ); + } else { + $events = self::sortEvents ( $timeline, $events_type == 'future' ? 'asc' : 'desc' ); + } + + return $events; + } + private static function sortEvents($timeline, $sort = 'asc') { + // Sort each group + + // user-defined sort function: for numerically distinct values + // we compare numerically, for zero-padded trick values we compare string length - + // very easy but effective - the only difference is the number of zeros prepended + // to the value, so this simple will do the trick - the shortest (i.e. added first) + // will come first. + foreach ( $timeline as &$group ) { + uksort ( $group, function ($a, $b) { + if (intval ( $a ) == intval ( $b )) { + return strlen ( $a ) > strlen ( $b ) ? 1 : (strlen ( $a ) < strlen ( $b ) ? - 1 : 0); + } else { + return intval ( $a ) > intval ( $b ) ? 1 : (intval ( $a ) < intval ( $b ) ? - 1 : 0); + } + } ); + } + + // Sort groups + ksort ( $timeline, SORT_NUMERIC ); + if ($sort == 'desc') { + // revert order for 'desc' sort + $timeline = array_reverse ( $timeline, true ); + } + + return $timeline; + } + private static function concatTitles(&$concat_title_down, &$concat_title_up, $event) { + // implicitly reduce full duplicates + if (isset ( $event ['title_down'] ) && trim ( $event ['title_down'] ) != '') { + $concat_title_down [$event ['title_down']] = $event ['title_down']; + } elseif (isset ( $event ['title'] ) && trim ( $event ['title'] ) != '') { + $concat_title_down [$event ['title']] = $event ['title']; + } + if (isset ( $event ['title_up'] ) && trim ( $event ['title_up'] ) != '') { + $concat_title_up [$event ['title_up']] = $event ['title_up']; + } elseif (isset ( $event ['title'] ) && trim ( $event ['title'] ) != '') { + $concat_title_up [$event ['title']] = $event ['title']; + } + } + private static function sendResponse($options = array('deadline' => ''), $err_code = 0, $err_msg = '') { + $response = array ( + 'err_code' => $err_code, + 'err_msg' => $err_msg, + 'options' => $options + ); + + // clear output buffer to suppress warning and notices + while ( ob_get_clean () ) + ; + + echo json_encode ( $response ); + JFactory::getApplication ()->close (); + } +} \ No newline at end of file diff --git a/deployed/smartcountdown3/components/com_smartcountdown3/controllers/index.html b/deployed/smartcountdown3/components/com_smartcountdown3/controllers/index.html new file mode 100644 index 00000000..2efb97f3 --- /dev/null +++ b/deployed/smartcountdown3/components/com_smartcountdown3/controllers/index.html @@ -0,0 +1 @@ + diff --git a/deployed/smartcountdown3/components/com_smartcountdown3/index.html b/deployed/smartcountdown3/components/com_smartcountdown3/index.html new file mode 100644 index 00000000..2efb97f3 --- /dev/null +++ b/deployed/smartcountdown3/components/com_smartcountdown3/index.html @@ -0,0 +1 @@ + diff --git a/deployed/smartcountdown3/components/com_smartcountdown3/smartcountdown3.php b/deployed/smartcountdown3/components/com_smartcountdown3/smartcountdown3.php new file mode 100644 index 00000000..f58cd9ff --- /dev/null +++ b/deployed/smartcountdown3/components/com_smartcountdown3/smartcountdown3.php @@ -0,0 +1,15 @@ +execute('getevent' /*JFactory::getApplication()->input->get('task')*/); +// we have only 1 controller for AJAX, the line below will never be hit +//$controller->redirect(); diff --git a/deployed/smartcountdown3/modules/mod_smartcountdown3/css/collapse-style.css b/deployed/smartcountdown3/modules/mod_smartcountdown3/css/collapse-style.css new file mode 100644 index 00000000..01f626e5 --- /dev/null +++ b/deployed/smartcountdown3/modules/mod_smartcountdown3/css/collapse-style.css @@ -0,0 +1,56 @@ +.collapseomatic { + background-image: url(images/arrow-down.png); + background-repeat: no-repeat; + padding: 0 0 10px 16px; + cursor: pointer; +} +.arrowright { + background-position: top right; + padding: 0 16px 10px 0; +} +.colomat-hover { + text-decoration: underline; +} +.colomat-close { + background-image: url(images/arrow-up.png); +} +.collapseomatic_excerpt, .collapseomatic_content { + margin-top: 0px; + margin-left: 16px; + padding: 0px; +} +.collapseall, .expandall { + cursor: pointer; +} +.collapseall:hover, .expandall:hover { + text-decoration: underline; +} + +/* css for timepicker */ +.ui-timepicker-div .ui-widget-header { margin-bottom: 8px; } +.ui-timepicker-div dl { text-align: left; } +.ui-timepicker-div dl dt { float: left; clear:left; padding: 0 0 0 5px; } +.ui-timepicker-div dl dd { margin: 0 10px 10px 40%; } +.ui-timepicker-div td { font-size: 90%; } +.ui-tpicker-grid-label { background: none; border: none; margin: 0; padding: 0; } +.ui-timepicker-div .ui_tpicker_unit_hide{ display: none; } + +.ui-timepicker-rtl{ direction: rtl; } +.ui-timepicker-rtl dl { text-align: right; padding: 0 5px 0 0; } +.ui-timepicker-rtl dl dt{ float: right; clear: right; } +.ui-timepicker-rtl dl dd { margin: 0 40% 10px 10px; } + +/* Shortened version style */ +.ui-timepicker-div.ui-timepicker-oneLine { padding-right: 2px; } +.ui-timepicker-div.ui-timepicker-oneLine .ui_tpicker_time, +.ui-timepicker-div.ui-timepicker-oneLine dt { display: none; } +.ui-timepicker-div.ui-timepicker-oneLine .ui_tpicker_time_label { display: block; padding-top: 2px; } +.ui-timepicker-div.ui-timepicker-oneLine dl { text-align: right; } +.ui-timepicker-div.ui-timepicker-oneLine dl dd, +.ui-timepicker-div.ui-timepicker-oneLine dl dd > div { display:inline-block; margin:0; } +.ui-timepicker-div.ui-timepicker-oneLine dl dd.ui_tpicker_minute:before, +.ui-timepicker-div.ui-timepicker-oneLine dl dd.ui_tpicker_second:before { content:':'; display:inline-block; } +.ui-timepicker-div.ui-timepicker-oneLine dl dd.ui_tpicker_millisec:before, +.ui-timepicker-div.ui-timepicker-oneLine dl dd.ui_tpicker_microsec:before { content:'.'; display:inline-block; } +.ui-timepicker-div.ui-timepicker-oneLine .ui_tpicker_unit_hide, +.ui-timepicker-div.ui-timepicker-oneLine .ui_tpicker_unit_hide:before{ display: none; } diff --git a/deployed/smartcountdown3/modules/mod_smartcountdown3/css/index.html b/deployed/smartcountdown3/modules/mod_smartcountdown3/css/index.html new file mode 100644 index 00000000..2efb97f3 --- /dev/null +++ b/deployed/smartcountdown3/modules/mod_smartcountdown3/css/index.html @@ -0,0 +1 @@ + diff --git a/deployed/smartcountdown3/modules/mod_smartcountdown3/css/jquery-ui.css b/deployed/smartcountdown3/modules/mod_smartcountdown3/css/jquery-ui.css new file mode 100644 index 00000000..95ce5f5b --- /dev/null +++ b/deployed/smartcountdown3/modules/mod_smartcountdown3/css/jquery-ui.css @@ -0,0 +1,1225 @@ +/*! jQuery UI - v1.11.1 - 2014-08-13 +* http://jqueryui.com +* Includes: core.css, accordion.css, autocomplete.css, button.css, datepicker.css, dialog.css, draggable.css, menu.css, progressbar.css, resizable.css, selectable.css, selectmenu.css, slider.css, sortable.css, spinner.css, tabs.css, tooltip.css, theme.css +* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana%2CArial%2Csans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=highlight_soft&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=flat&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=glass&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=glass&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=glass&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=glass&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px +* Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */ + +/* Layout helpers +----------------------------------*/ +.ui-helper-hidden { + display: none; +} +.ui-helper-hidden-accessible { + border: 0; + clip: rect(0 0 0 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; +} +.ui-helper-reset { + margin: 0; + padding: 0; + border: 0; + outline: 0; + line-height: 1.3; + text-decoration: none; + font-size: 100%; + list-style: none; +} +.ui-helper-clearfix:before, +.ui-helper-clearfix:after { + content: ""; + display: table; + border-collapse: collapse; +} +.ui-helper-clearfix:after { + clear: both; +} +.ui-helper-clearfix { + min-height: 0; /* support: IE7 */ +} +.ui-helper-zfix { + width: 100%; + height: 100%; + top: 0; + left: 0; + position: absolute; + opacity: 0; + filter:Alpha(Opacity=0); /* support: IE8 */ +} + +.ui-front { + z-index: 100; +} + + +/* Interaction Cues +----------------------------------*/ +.ui-state-disabled { + cursor: default !important; +} + + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { + display: block; + text-indent: -99999px; + overflow: hidden; + background-repeat: no-repeat; +} + + +/* Misc visuals +----------------------------------*/ + +/* Overlays */ +.ui-widget-overlay { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; +} +.ui-accordion .ui-accordion-header { + display: block; + cursor: pointer; + position: relative; + margin: 2px 0 0 0; + padding: .5em .5em .5em .7em; + min-height: 0; /* support: IE7 */ + font-size: 100%; +} +.ui-accordion .ui-accordion-icons { + padding-left: 2.2em; +} +.ui-accordion .ui-accordion-icons .ui-accordion-icons { + padding-left: 2.2em; +} +.ui-accordion .ui-accordion-header .ui-accordion-header-icon { + position: absolute; + left: .5em; + top: 50%; + margin-top: -8px; +} +.ui-accordion .ui-accordion-content { + padding: 1em 2.2em; + border-top: 0; + overflow: auto; +} +.ui-autocomplete { + position: absolute; + top: 0; + left: 0; + cursor: default; +} +.ui-button { + display: inline-block; + position: relative; + padding: 0; + line-height: normal; + margin-right: .1em; + cursor: pointer; + vertical-align: middle; + text-align: center; + overflow: visible; /* removes extra width in IE */ +} +.ui-button, +.ui-button:link, +.ui-button:visited, +.ui-button:hover, +.ui-button:active { + text-decoration: none; +} +/* to make room for the icon, a width needs to be set here */ +.ui-button-icon-only { + width: 2.2em; +} +/* button elements seem to need a little more width */ +button.ui-button-icon-only { + width: 2.4em; +} +.ui-button-icons-only { + width: 3.4em; +} +button.ui-button-icons-only { + width: 3.7em; +} + +/* button text element */ +.ui-button .ui-button-text { + display: block; + line-height: normal; +} +.ui-button-text-only .ui-button-text { + padding: .4em 1em; +} +.ui-button-icon-only .ui-button-text, +.ui-button-icons-only .ui-button-text { + padding: .4em; + text-indent: -9999999px; +} +.ui-button-text-icon-primary .ui-button-text, +.ui-button-text-icons .ui-button-text { + padding: .4em 1em .4em 2.1em; +} +.ui-button-text-icon-secondary .ui-button-text, +.ui-button-text-icons .ui-button-text { + padding: .4em 2.1em .4em 1em; +} +.ui-button-text-icons .ui-button-text { + padding-left: 2.1em; + padding-right: 2.1em; +} +/* no icon support for input elements, provide padding by default */ +input.ui-button { + padding: .4em 1em; +} + +/* button icon element(s) */ +.ui-button-icon-only .ui-icon, +.ui-button-text-icon-primary .ui-icon, +.ui-button-text-icon-secondary .ui-icon, +.ui-button-text-icons .ui-icon, +.ui-button-icons-only .ui-icon { + position: absolute; + top: 50%; + margin-top: -8px; +} +.ui-button-icon-only .ui-icon { + left: 50%; + margin-left: -8px; +} +.ui-button-text-icon-primary .ui-button-icon-primary, +.ui-button-text-icons .ui-button-icon-primary, +.ui-button-icons-only .ui-button-icon-primary { + left: .5em; +} +.ui-button-text-icon-secondary .ui-button-icon-secondary, +.ui-button-text-icons .ui-button-icon-secondary, +.ui-button-icons-only .ui-button-icon-secondary { + right: .5em; +} + +/* button sets */ +.ui-buttonset { + margin-right: 7px; +} +.ui-buttonset .ui-button { + margin-left: 0; + margin-right: -.3em; +} + +/* workarounds */ +/* reset extra padding in Firefox, see h5bp.com/l */ +input.ui-button::-moz-focus-inner, +button.ui-button::-moz-focus-inner { + border: 0; + padding: 0; +} +.ui-datepicker { + width: 17em; + padding: .2em .2em 0; + display: none; +} +.ui-datepicker .ui-datepicker-header { + position: relative; + padding: .2em 0; +} +.ui-datepicker .ui-datepicker-prev, +.ui-datepicker .ui-datepicker-next { + position: absolute; + top: 2px; + width: 1.8em; + height: 1.8em; +} +.ui-datepicker .ui-datepicker-prev-hover, +.ui-datepicker .ui-datepicker-next-hover { + top: 1px; +} +.ui-datepicker .ui-datepicker-prev { + left: 2px; +} +.ui-datepicker .ui-datepicker-next { + right: 2px; +} +.ui-datepicker .ui-datepicker-prev-hover { + left: 1px; +} +.ui-datepicker .ui-datepicker-next-hover { + right: 1px; +} +.ui-datepicker .ui-datepicker-prev span, +.ui-datepicker .ui-datepicker-next span { + display: block; + position: absolute; + left: 50%; + margin-left: -8px; + top: 50%; + margin-top: -8px; +} +.ui-datepicker .ui-datepicker-title { + margin: 0 2.3em; + line-height: 1.8em; + text-align: center; +} +.ui-datepicker .ui-datepicker-title select { + font-size: 1em; + margin: 1px 0; +} +.ui-datepicker select.ui-datepicker-month, +.ui-datepicker select.ui-datepicker-year { + width: 45%; +} +.ui-datepicker table { + width: 100%; + font-size: .9em; + border-collapse: collapse; + margin: 0 0 .4em; +} +.ui-datepicker th { + padding: .7em .3em; + text-align: center; + font-weight: bold; + border: 0; +} +.ui-datepicker td { + border: 0; + padding: 1px; +} +.ui-datepicker td span, +.ui-datepicker td a { + display: block; + padding: .2em; + text-align: right; + text-decoration: none; +} +.ui-datepicker .ui-datepicker-buttonpane { + background-image: none; + margin: .7em 0 0 0; + padding: 0 .2em; + border-left: 0; + border-right: 0; + border-bottom: 0; +} +.ui-datepicker .ui-datepicker-buttonpane button { + float: right; + margin: .5em .2em .4em; + cursor: pointer; + padding: .2em .6em .3em .6em; + width: auto; + overflow: visible; +} +.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { + float: left; +} + +/* with multiple calendars */ +.ui-datepicker.ui-datepicker-multi { + width: auto; +} +.ui-datepicker-multi .ui-datepicker-group { + float: left; +} +.ui-datepicker-multi .ui-datepicker-group table { + width: 95%; + margin: 0 auto .4em; +} +.ui-datepicker-multi-2 .ui-datepicker-group { + width: 50%; +} +.ui-datepicker-multi-3 .ui-datepicker-group { + width: 33.3%; +} +.ui-datepicker-multi-4 .ui-datepicker-group { + width: 25%; +} +.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header, +.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { + border-left-width: 0; +} +.ui-datepicker-multi .ui-datepicker-buttonpane { + clear: left; +} +.ui-datepicker-row-break { + clear: both; + width: 100%; + font-size: 0; +} + +/* RTL support */ +.ui-datepicker-rtl { + direction: rtl; +} +.ui-datepicker-rtl .ui-datepicker-prev { + right: 2px; + left: auto; +} +.ui-datepicker-rtl .ui-datepicker-next { + left: 2px; + right: auto; +} +.ui-datepicker-rtl .ui-datepicker-prev:hover { + right: 1px; + left: auto; +} +.ui-datepicker-rtl .ui-datepicker-next:hover { + left: 1px; + right: auto; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane { + clear: right; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane button { + float: left; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current, +.ui-datepicker-rtl .ui-datepicker-group { + float: right; +} +.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header, +.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { + border-right-width: 0; + border-left-width: 1px; +} +.ui-dialog { + overflow: hidden; + position: absolute; + top: 0; + left: 0; + padding: .2em; + outline: 0; +} +.ui-dialog .ui-dialog-titlebar { + padding: .4em 1em; + position: relative; +} +.ui-dialog .ui-dialog-title { + float: left; + margin: .1em 0; + white-space: nowrap; + width: 90%; + overflow: hidden; + text-overflow: ellipsis; +} +.ui-dialog .ui-dialog-titlebar-close { + position: absolute; + right: .3em; + top: 50%; + width: 20px; + margin: -10px 0 0 0; + padding: 1px; + height: 20px; +} +.ui-dialog .ui-dialog-content { + position: relative; + border: 0; + padding: .5em 1em; + background: none; + overflow: auto; +} +.ui-dialog .ui-dialog-buttonpane { + text-align: left; + border-width: 1px 0 0 0; + background-image: none; + margin-top: .5em; + padding: .3em 1em .5em .4em; +} +.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { + float: right; +} +.ui-dialog .ui-dialog-buttonpane button { + margin: .5em .4em .5em 0; + cursor: pointer; +} +.ui-dialog .ui-resizable-se { + width: 12px; + height: 12px; + right: -5px; + bottom: -5px; + background-position: 16px 16px; +} +.ui-draggable .ui-dialog-titlebar { + cursor: move; +} +.ui-draggable-handle { + -ms-touch-action: none; + touch-action: none; +} +.ui-menu { + list-style: none; + padding: 0; + margin: 0; + display: block; + outline: none; +} +.ui-menu .ui-menu { + position: absolute; +} +.ui-menu .ui-menu-item { + position: relative; + margin: 0; + padding: 3px 1em 3px .4em; + cursor: pointer; + min-height: 0; /* support: IE7 */ + /* support: IE10, see #8844 */ + list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"); +} +.ui-menu .ui-menu-divider { + margin: 5px 0; + height: 0; + font-size: 0; + line-height: 0; + border-width: 1px 0 0 0; +} +.ui-menu .ui-state-focus, +.ui-menu .ui-state-active { + margin: -1px; +} + +/* icon support */ +.ui-menu-icons { + position: relative; +} +.ui-menu-icons .ui-menu-item { + padding-left: 2em; +} + +/* left-aligned */ +.ui-menu .ui-icon { + position: absolute; + top: 0; + bottom: 0; + left: .2em; + margin: auto 0; +} + +/* right-aligned */ +.ui-menu .ui-menu-icon { + left: auto; + right: 0; +} +.ui-progressbar { + height: 2em; + text-align: left; + overflow: hidden; +} +.ui-progressbar .ui-progressbar-value { + margin: -1px; + height: 100%; +} +.ui-progressbar .ui-progressbar-overlay { + background: url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw=="); + height: 100%; + filter: alpha(opacity=25); /* support: IE8 */ + opacity: 0.25; +} +.ui-progressbar-indeterminate .ui-progressbar-value { + background-image: none; +} +.ui-resizable { + position: relative; +} +.ui-resizable-handle { + position: absolute; + font-size: 0.1px; + display: block; + -ms-touch-action: none; + touch-action: none; +} +.ui-resizable-disabled .ui-resizable-handle, +.ui-resizable-autohide .ui-resizable-handle { + display: none; +} +.ui-resizable-n { + cursor: n-resize; + height: 7px; + width: 100%; + top: -5px; + left: 0; +} +.ui-resizable-s { + cursor: s-resize; + height: 7px; + width: 100%; + bottom: -5px; + left: 0; +} +.ui-resizable-e { + cursor: e-resize; + width: 7px; + right: -5px; + top: 0; + height: 100%; +} +.ui-resizable-w { + cursor: w-resize; + width: 7px; + left: -5px; + top: 0; + height: 100%; +} +.ui-resizable-se { + cursor: se-resize; + width: 12px; + height: 12px; + right: 1px; + bottom: 1px; +} +.ui-resizable-sw { + cursor: sw-resize; + width: 9px; + height: 9px; + left: -5px; + bottom: -5px; +} +.ui-resizable-nw { + cursor: nw-resize; + width: 9px; + height: 9px; + left: -5px; + top: -5px; +} +.ui-resizable-ne { + cursor: ne-resize; + width: 9px; + height: 9px; + right: -5px; + top: -5px; +} +.ui-selectable { + -ms-touch-action: none; + touch-action: none; +} +.ui-selectable-helper { + position: absolute; + z-index: 100; + border: 1px dotted black; +} +.ui-selectmenu-menu { + padding: 0; + margin: 0; + position: absolute; + top: 0; + left: 0; + display: none; +} +.ui-selectmenu-menu .ui-menu { + overflow: auto; + /* Support: IE7 */ + overflow-x: hidden; + padding-bottom: 1px; +} +.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup { + font-size: 1em; + font-weight: bold; + line-height: 1.5; + padding: 2px 0.4em; + margin: 0.5em 0 0 0; + height: auto; + border: 0; +} +.ui-selectmenu-open { + display: block; +} +.ui-selectmenu-button { + display: inline-block; + overflow: hidden; + position: relative; + text-decoration: none; + cursor: pointer; +} +.ui-selectmenu-button span.ui-icon { + right: 0.5em; + left: auto; + margin-top: -8px; + position: absolute; + top: 50%; +} +.ui-selectmenu-button span.ui-selectmenu-text { + text-align: left; + padding: 0.4em 2.1em 0.4em 1em; + display: block; + line-height: 1.4; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.ui-slider { + position: relative; + text-align: left; +} +.ui-slider .ui-slider-handle { + position: absolute; + z-index: 2; + width: 1.2em; + height: 1.2em; + cursor: default; + -ms-touch-action: none; + touch-action: none; +} +.ui-slider .ui-slider-range { + position: absolute; + z-index: 1; + font-size: .7em; + display: block; + border: 0; + background-position: 0 0; +} + +/* support: IE8 - See #6727 */ +.ui-slider.ui-state-disabled .ui-slider-handle, +.ui-slider.ui-state-disabled .ui-slider-range { + filter: inherit; +} + +.ui-slider-horizontal { + height: .8em; +} +.ui-slider-horizontal .ui-slider-handle { + top: -.3em; + margin-left: -.6em; +} +.ui-slider-horizontal .ui-slider-range { + top: 0; + height: 100%; +} +.ui-slider-horizontal .ui-slider-range-min { + left: 0; +} +.ui-slider-horizontal .ui-slider-range-max { + right: 0; +} + +.ui-slider-vertical { + width: .8em; + height: 100px; +} +.ui-slider-vertical .ui-slider-handle { + left: -.3em; + margin-left: 0; + margin-bottom: -.6em; +} +.ui-slider-vertical .ui-slider-range { + left: 0; + width: 100%; +} +.ui-slider-vertical .ui-slider-range-min { + bottom: 0; +} +.ui-slider-vertical .ui-slider-range-max { + top: 0; +} +.ui-sortable-handle { + -ms-touch-action: none; + touch-action: none; +} +.ui-spinner { + position: relative; + display: inline-block; + overflow: hidden; + padding: 0; + vertical-align: middle; +} +.ui-spinner-input { + border: none; + background: none; + color: inherit; + padding: 0; + margin: .2em 0; + vertical-align: middle; + margin-left: .4em; + margin-right: 22px; +} +.ui-spinner-button { + width: 16px; + height: 50%; + font-size: .5em; + padding: 0; + margin: 0; + text-align: center; + position: absolute; + cursor: default; + display: block; + overflow: hidden; + right: 0; +} +/* more specificity required here to override default borders */ +.ui-spinner a.ui-spinner-button { + border-top: none; + border-bottom: none; + border-right: none; +} +/* vertically center icon */ +.ui-spinner .ui-icon { + position: absolute; + margin-top: -8px; + top: 50%; + left: 0; +} +.ui-spinner-up { + top: 0; +} +.ui-spinner-down { + bottom: 0; +} + +/* TR overrides */ +.ui-spinner .ui-icon-triangle-1-s { + /* need to fix icons sprite */ + background-position: -65px -16px; +} +.ui-tabs { + position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ + padding: .2em; +} +.ui-tabs .ui-tabs-nav { + margin: 0; + padding: .2em .2em 0; +} +.ui-tabs .ui-tabs-nav li { + list-style: none; + float: left; + position: relative; + top: 0; + margin: 1px .2em 0 0; + border-bottom-width: 0; + padding: 0; + white-space: nowrap; +} +.ui-tabs .ui-tabs-nav .ui-tabs-anchor { + float: left; + padding: .5em 1em; + text-decoration: none; +} +.ui-tabs .ui-tabs-nav li.ui-tabs-active { + margin-bottom: -1px; + padding-bottom: 1px; +} +.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor, +.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor, +.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor { + cursor: text; +} +.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor { + cursor: pointer; +} +.ui-tabs .ui-tabs-panel { + display: block; + border-width: 0; + padding: 1em 1.4em; + background: none; +} +.ui-tooltip { + padding: 8px; + position: absolute; + z-index: 9999; + max-width: 300px; + -webkit-box-shadow: 0 0 5px #aaa; + box-shadow: 0 0 5px #aaa; +} +body .ui-tooltip { + border-width: 2px; +} + +/* Component containers +----------------------------------*/ +.ui-widget { + font-family: Verdana,Arial,sans-serif; + font-size: 1.1em; +} +.ui-widget .ui-widget { + font-size: 1em; +} +.ui-widget input, +.ui-widget select, +.ui-widget textarea, +.ui-widget button { + font-family: Verdana,Arial,sans-serif; + font-size: 1em; +} +.ui-widget-content { + border: 1px solid #aaaaaa; + background: #ffffff url("images/ui-bg_flat_75_ffffff_40x100.png") 50% 50% repeat-x; + color: #222222; +} +.ui-widget-content a { + color: #222222; +} +.ui-widget-header { + border: 1px solid #aaaaaa; + background: #cccccc url("images/ui-bg_highlight-soft_75_cccccc_1x100.png") 50% 50% repeat-x; + color: #222222; + font-weight: bold; +} +.ui-widget-header a { + color: #222222; +} + +/* Interaction states +----------------------------------*/ +.ui-state-default, +.ui-widget-content .ui-state-default, +.ui-widget-header .ui-state-default { + border: 1px solid #d3d3d3; + background: #e6e6e6 url("images/ui-bg_glass_75_e6e6e6_1x400.png") 50% 50% repeat-x; + font-weight: normal; + color: #555555; +} +.ui-state-default a, +.ui-state-default a:link, +.ui-state-default a:visited { + color: #555555; + text-decoration: none; +} +.ui-state-hover, +.ui-widget-content .ui-state-hover, +.ui-widget-header .ui-state-hover, +.ui-state-focus, +.ui-widget-content .ui-state-focus, +.ui-widget-header .ui-state-focus { + border: 1px solid #999999; + background: #dadada url("images/ui-bg_glass_75_dadada_1x400.png") 50% 50% repeat-x; + font-weight: normal; + color: #212121; +} +.ui-state-hover a, +.ui-state-hover a:hover, +.ui-state-hover a:link, +.ui-state-hover a:visited, +.ui-state-focus a, +.ui-state-focus a:hover, +.ui-state-focus a:link, +.ui-state-focus a:visited { + color: #212121; + text-decoration: none; +} +.ui-state-active, +.ui-widget-content .ui-state-active, +.ui-widget-header .ui-state-active { + border: 1px solid #aaaaaa; + background: #ffffff url("images/ui-bg_glass_65_ffffff_1x400.png") 50% 50% repeat-x; + font-weight: normal; + color: #212121; +} +.ui-state-active a, +.ui-state-active a:link, +.ui-state-active a:visited { + color: #212121; + text-decoration: none; +} + +/* Interaction Cues +----------------------------------*/ +.ui-state-highlight, +.ui-widget-content .ui-state-highlight, +.ui-widget-header .ui-state-highlight { + border: 1px solid #fcefa1; + background: #fbf9ee url("images/ui-bg_glass_55_fbf9ee_1x400.png") 50% 50% repeat-x; + color: #363636; +} +.ui-state-highlight a, +.ui-widget-content .ui-state-highlight a, +.ui-widget-header .ui-state-highlight a { + color: #363636; +} +.ui-state-error, +.ui-widget-content .ui-state-error, +.ui-widget-header .ui-state-error { + border: 1px solid #cd0a0a; + background: #fef1ec url("images/ui-bg_glass_95_fef1ec_1x400.png") 50% 50% repeat-x; + color: #cd0a0a; +} +.ui-state-error a, +.ui-widget-content .ui-state-error a, +.ui-widget-header .ui-state-error a { + color: #cd0a0a; +} +.ui-state-error-text, +.ui-widget-content .ui-state-error-text, +.ui-widget-header .ui-state-error-text { + color: #cd0a0a; +} +.ui-priority-primary, +.ui-widget-content .ui-priority-primary, +.ui-widget-header .ui-priority-primary { + font-weight: bold; +} +.ui-priority-secondary, +.ui-widget-content .ui-priority-secondary, +.ui-widget-header .ui-priority-secondary { + opacity: .7; + filter:Alpha(Opacity=70); /* support: IE8 */ + font-weight: normal; +} +.ui-state-disabled, +.ui-widget-content .ui-state-disabled, +.ui-widget-header .ui-state-disabled { + opacity: .35; + filter:Alpha(Opacity=35); /* support: IE8 */ + background-image: none; +} +.ui-state-disabled .ui-icon { + filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */ +} + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { + width: 16px; + height: 16px; +} +.ui-icon, +.ui-widget-content .ui-icon { + background-image: url("images/ui-icons_222222_256x240.png"); +} +.ui-widget-header .ui-icon { + background-image: url("images/ui-icons_222222_256x240.png"); +} +.ui-state-default .ui-icon { + background-image: url("images/ui-icons_888888_256x240.png"); +} +.ui-state-hover .ui-icon, +.ui-state-focus .ui-icon { + background-image: url("images/ui-icons_454545_256x240.png"); +} +.ui-state-active .ui-icon { + background-image: url("images/ui-icons_454545_256x240.png"); +} +.ui-state-highlight .ui-icon { + background-image: url("images/ui-icons_2e83ff_256x240.png"); +} +.ui-state-error .ui-icon, +.ui-state-error-text .ui-icon { + background-image: url("images/ui-icons_cd0a0a_256x240.png"); +} + +/* positioning */ +.ui-icon-blank { background-position: 16px 16px; } +.ui-icon-carat-1-n { background-position: 0 0; } +.ui-icon-carat-1-ne { background-position: -16px 0; } +.ui-icon-carat-1-e { background-position: -32px 0; } +.ui-icon-carat-1-se { background-position: -48px 0; } +.ui-icon-carat-1-s { background-position: -64px 0; } +.ui-icon-carat-1-sw { background-position: -80px 0; } +.ui-icon-carat-1-w { background-position: -96px 0; } +.ui-icon-carat-1-nw { background-position: -112px 0; } +.ui-icon-carat-2-n-s { background-position: -128px 0; } +.ui-icon-carat-2-e-w { background-position: -144px 0; } +.ui-icon-triangle-1-n { background-position: 0 -16px; } +.ui-icon-triangle-1-ne { background-position: -16px -16px; } +.ui-icon-triangle-1-e { background-position: -32px -16px; } +.ui-icon-triangle-1-se { background-position: -48px -16px; } +.ui-icon-triangle-1-s { background-position: -64px -16px; } +.ui-icon-triangle-1-sw { background-position: -80px -16px; } +.ui-icon-triangle-1-w { background-position: -96px -16px; } +.ui-icon-triangle-1-nw { background-position: -112px -16px; } +.ui-icon-triangle-2-n-s { background-position: -128px -16px; } +.ui-icon-triangle-2-e-w { background-position: -144px -16px; } +.ui-icon-arrow-1-n { background-position: 0 -32px; } +.ui-icon-arrow-1-ne { background-position: -16px -32px; } +.ui-icon-arrow-1-e { background-position: -32px -32px; } +.ui-icon-arrow-1-se { background-position: -48px -32px; } +.ui-icon-arrow-1-s { background-position: -64px -32px; } +.ui-icon-arrow-1-sw { background-position: -80px -32px; } +.ui-icon-arrow-1-w { background-position: -96px -32px; } +.ui-icon-arrow-1-nw { background-position: -112px -32px; } +.ui-icon-arrow-2-n-s { background-position: -128px -32px; } +.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } +.ui-icon-arrow-2-e-w { background-position: -160px -32px; } +.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } +.ui-icon-arrowstop-1-n { background-position: -192px -32px; } +.ui-icon-arrowstop-1-e { background-position: -208px -32px; } +.ui-icon-arrowstop-1-s { background-position: -224px -32px; } +.ui-icon-arrowstop-1-w { background-position: -240px -32px; } +.ui-icon-arrowthick-1-n { background-position: 0 -48px; } +.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } +.ui-icon-arrowthick-1-e { background-position: -32px -48px; } +.ui-icon-arrowthick-1-se { background-position: -48px -48px; } +.ui-icon-arrowthick-1-s { background-position: -64px -48px; } +.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } +.ui-icon-arrowthick-1-w { background-position: -96px -48px; } +.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } +.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } +.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } +.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } +.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } +.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } +.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } +.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } +.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } +.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } +.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } +.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } +.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } +.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } +.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } +.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } +.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } +.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } +.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } +.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } +.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } +.ui-icon-arrow-4 { background-position: 0 -80px; } +.ui-icon-arrow-4-diag { background-position: -16px -80px; } +.ui-icon-extlink { background-position: -32px -80px; } +.ui-icon-newwin { background-position: -48px -80px; } +.ui-icon-refresh { background-position: -64px -80px; } +.ui-icon-shuffle { background-position: -80px -80px; } +.ui-icon-transfer-e-w { background-position: -96px -80px; } +.ui-icon-transferthick-e-w { background-position: -112px -80px; } +.ui-icon-folder-collapsed { background-position: 0 -96px; } +.ui-icon-folder-open { background-position: -16px -96px; } +.ui-icon-document { background-position: -32px -96px; } +.ui-icon-document-b { background-position: -48px -96px; } +.ui-icon-note { background-position: -64px -96px; } +.ui-icon-mail-closed { background-position: -80px -96px; } +.ui-icon-mail-open { background-position: -96px -96px; } +.ui-icon-suitcase { background-position: -112px -96px; } +.ui-icon-comment { background-position: -128px -96px; } +.ui-icon-person { background-position: -144px -96px; } +.ui-icon-print { background-position: -160px -96px; } +.ui-icon-trash { background-position: -176px -96px; } +.ui-icon-locked { background-position: -192px -96px; } +.ui-icon-unlocked { background-position: -208px -96px; } +.ui-icon-bookmark { background-position: -224px -96px; } +.ui-icon-tag { background-position: -240px -96px; } +.ui-icon-home { background-position: 0 -112px; } +.ui-icon-flag { background-position: -16px -112px; } +.ui-icon-calendar { background-position: -32px -112px; } +.ui-icon-cart { background-position: -48px -112px; } +.ui-icon-pencil { background-position: -64px -112px; } +.ui-icon-clock { background-position: -80px -112px; } +.ui-icon-disk { background-position: -96px -112px; } +.ui-icon-calculator { background-position: -112px -112px; } +.ui-icon-zoomin { background-position: -128px -112px; } +.ui-icon-zoomout { background-position: -144px -112px; } +.ui-icon-search { background-position: -160px -112px; } +.ui-icon-wrench { background-position: -176px -112px; } +.ui-icon-gear { background-position: -192px -112px; } +.ui-icon-heart { background-position: -208px -112px; } +.ui-icon-star { background-position: -224px -112px; } +.ui-icon-link { background-position: -240px -112px; } +.ui-icon-cancel { background-position: 0 -128px; } +.ui-icon-plus { background-position: -16px -128px; } +.ui-icon-plusthick { background-position: -32px -128px; } +.ui-icon-minus { background-position: -48px -128px; } +.ui-icon-minusthick { background-position: -64px -128px; } +.ui-icon-close { background-position: -80px -128px; } +.ui-icon-closethick { background-position: -96px -128px; } +.ui-icon-key { background-position: -112px -128px; } +.ui-icon-lightbulb { background-position: -128px -128px; } +.ui-icon-scissors { background-position: -144px -128px; } +.ui-icon-clipboard { background-position: -160px -128px; } +.ui-icon-copy { background-position: -176px -128px; } +.ui-icon-contact { background-position: -192px -128px; } +.ui-icon-image { background-position: -208px -128px; } +.ui-icon-video { background-position: -224px -128px; } +.ui-icon-script { background-position: -240px -128px; } +.ui-icon-alert { background-position: 0 -144px; } +.ui-icon-info { background-position: -16px -144px; } +.ui-icon-notice { background-position: -32px -144px; } +.ui-icon-help { background-position: -48px -144px; } +.ui-icon-check { background-position: -64px -144px; } +.ui-icon-bullet { background-position: -80px -144px; } +.ui-icon-radio-on { background-position: -96px -144px; } +.ui-icon-radio-off { background-position: -112px -144px; } +.ui-icon-pin-w { background-position: -128px -144px; } +.ui-icon-pin-s { background-position: -144px -144px; } +.ui-icon-play { background-position: 0 -160px; } +.ui-icon-pause { background-position: -16px -160px; } +.ui-icon-seek-next { background-position: -32px -160px; } +.ui-icon-seek-prev { background-position: -48px -160px; } +.ui-icon-seek-end { background-position: -64px -160px; } +.ui-icon-seek-start { background-position: -80px -160px; } +/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ +.ui-icon-seek-first { background-position: -80px -160px; } +.ui-icon-stop { background-position: -96px -160px; } +.ui-icon-eject { background-position: -112px -160px; } +.ui-icon-volume-off { background-position: -128px -160px; } +.ui-icon-volume-on { background-position: -144px -160px; } +.ui-icon-power { background-position: 0 -176px; } +.ui-icon-signal-diag { background-position: -16px -176px; } +.ui-icon-signal { background-position: -32px -176px; } +.ui-icon-battery-0 { background-position: -48px -176px; } +.ui-icon-battery-1 { background-position: -64px -176px; } +.ui-icon-battery-2 { background-position: -80px -176px; } +.ui-icon-battery-3 { background-position: -96px -176px; } +.ui-icon-circle-plus { background-position: 0 -192px; } +.ui-icon-circle-minus { background-position: -16px -192px; } +.ui-icon-circle-close { background-position: -32px -192px; } +.ui-icon-circle-triangle-e { background-position: -48px -192px; } +.ui-icon-circle-triangle-s { background-position: -64px -192px; } +.ui-icon-circle-triangle-w { background-position: -80px -192px; } +.ui-icon-circle-triangle-n { background-position: -96px -192px; } +.ui-icon-circle-arrow-e { background-position: -112px -192px; } +.ui-icon-circle-arrow-s { background-position: -128px -192px; } +.ui-icon-circle-arrow-w { background-position: -144px -192px; } +.ui-icon-circle-arrow-n { background-position: -160px -192px; } +.ui-icon-circle-zoomin { background-position: -176px -192px; } +.ui-icon-circle-zoomout { background-position: -192px -192px; } +.ui-icon-circle-check { background-position: -208px -192px; } +.ui-icon-circlesmall-plus { background-position: 0 -208px; } +.ui-icon-circlesmall-minus { background-position: -16px -208px; } +.ui-icon-circlesmall-close { background-position: -32px -208px; } +.ui-icon-squaresmall-plus { background-position: -48px -208px; } +.ui-icon-squaresmall-minus { background-position: -64px -208px; } +.ui-icon-squaresmall-close { background-position: -80px -208px; } +.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } +.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } +.ui-icon-grip-solid-vertical { background-position: -32px -224px; } +.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } +.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } +.ui-icon-grip-diagonal-se { background-position: -80px -224px; } + + +/* Misc visuals +----------------------------------*/ + +/* Corner radius */ +.ui-corner-all, +.ui-corner-top, +.ui-corner-left, +.ui-corner-tl { + border-top-left-radius: 4px; +} +.ui-corner-all, +.ui-corner-top, +.ui-corner-right, +.ui-corner-tr { + border-top-right-radius: 4px; +} +.ui-corner-all, +.ui-corner-bottom, +.ui-corner-left, +.ui-corner-bl { + border-bottom-left-radius: 4px; +} +.ui-corner-all, +.ui-corner-bottom, +.ui-corner-right, +.ui-corner-br { + border-bottom-right-radius: 4px; +} + +/* Overlays */ +.ui-widget-overlay { + background: #aaaaaa url("images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x; + opacity: .3; + filter: Alpha(Opacity=30); /* support: IE8 */ +} +.ui-widget-shadow { + margin: -8px 0 0 -8px; + padding: 8px; + background: #aaaaaa url("images/ui-bg_flat_0_aaaaaa_40x100.png") 50% 50% repeat-x; + opacity: .3; + filter: Alpha(Opacity=30); /* support: IE8 */ + border-radius: 8px; +} \ No newline at end of file diff --git a/deployed/smartcountdown3/modules/mod_smartcountdown3/css/smartcountdown.css b/deployed/smartcountdown3/modules/mod_smartcountdown3/css/smartcountdown.css new file mode 100644 index 00000000..d25e5da0 --- /dev/null +++ b/deployed/smartcountdown3/modules/mod_smartcountdown3/css/smartcountdown.css @@ -0,0 +1,87 @@ +.smartcountdown { + font-size: 12px /* Important: has to be equal to SCD_BASE_FONT_SIZE */ +} +.scd-all-wrapper { + width: 100%; + font-size: inherit; +} +/* some templates define line-height for elements, have to reset it for countdown */ +.scd-title-col, .scd-title-row, .scd-digits { + line-height: 1.2em; +} +.scd-title-col { + clear: both; + margin: 0.5em 0; +} +.scd-title-row { + float: left; + margin: 0 0.5em; +} +.scd-counter-col { + display: inline-block; /* required to center counter block, we have removed !important because it confilicted with hide_countup_counter $$$ check in other templates */ + clear: both; +} +.scd-counter-row { + float: left; + margin: 0 0.5em; +} +.scd-unit-vert { + clear: both; + /*margin: 0.5em 0; moved to module options*/ +} +.scd-unit-horz { + float: left; + /*margin: 0 1.0em; moved to module options*/ +} +.scd-digits-col { + clear: both; + text-align: center; +} +.scd-digits-row { + float: left; + text-align: right; +} +.scd-label-col { + clear: both; + text-align: center; + margin: 0.3em 0; +} +.scd-label-row { + float: left; + text-align: left; + margin: 0 0.3em; +} +.scd-digit { + display: inline-block; + position: relative; + overflow: hidden; /* we should remove this rule when we update all affected animations profile: "sliding text" and "text rotation bounce" */ +} +.scd-digit div, .scd-digit img { + position: absolute; + display: block; +} +.scd-digit img { + margin: 0!important; + padding: 0!important; + display: block!important; +} +.scd-digit div { + font-size: inherit; +} + +.spinner { + /* background url added dynamically in helper script */ + background-size: 16px 16px; + display: none; + /* float: right; */ + opacity: .7; + filter: alpha(opacity=70); + width: 16px; + height: 16px; + margin: 5px 5px 0; +} +.spinner { + background: + url('../images/wpspin_light.gif') + no-repeat; +} diff --git a/deployed/smartcountdown3/modules/mod_smartcountdown3/css/smartcountdown_rtl.css b/deployed/smartcountdown3/modules/mod_smartcountdown3/css/smartcountdown_rtl.css new file mode 100644 index 00000000..f168decc --- /dev/null +++ b/deployed/smartcountdown3/modules/mod_smartcountdown3/css/smartcountdown_rtl.css @@ -0,0 +1,27 @@ +/* +Overload some styles for RTL (see smartcountdown.css for common styles) +*/ +/* Make sure that digits are not messed up in numbers */ +.scd-digits { + direction: ltr; +} +/* "Titles inline" layout fix */ +.scd-title-row { + float: right; +} +.scd-counter-row { + float: right; +} +/* Time units order fix */ +.scd-unit-horz { + float: right; +} +/* Labels position fix */ +.scd-digits-row { + float: right; /* digits are always LTR, so we always right-adjust them */ +} +.scd-label-row { + float: right; + /*text-align: left;*/ /* table-like view */ + text-align: right; /* more natural view */ +} \ No newline at end of file diff --git a/deployed/smartcountdown3/modules/mod_smartcountdown3/fields/configfile.php b/deployed/smartcountdown3/modules/mod_smartcountdown3/fields/configfile.php new file mode 100644 index 00000000..2538aa06 --- /dev/null +++ b/deployed/smartcountdown3/modules/mod_smartcountdown3/fields/configfile.php @@ -0,0 +1,42 @@ +element['context']; + $dir = $context == 'layout' ? '/layouts' : '/fx'; + $configs_dir = JPATH_SITE.'/modules/mod_smartcountdown3' . $dir; + + $items = JFolder::files($configs_dir, '\.xml$', true, false); + + // Build the field options. + if (!empty($items)) + { + foreach ($items as $item) + { + $options[] = JHtml::_('select.option', $item, ucfirst(str_replace('_', ' ', substr($item, 0, -4)))); + } + } + + // Merge any additional options in the XML definition. + $options = array_merge(parent::getOptions(), $options); + + return $options; + } +} diff --git a/deployed/smartcountdown3/modules/mod_smartcountdown3/fields/index.html b/deployed/smartcountdown3/modules/mod_smartcountdown3/fields/index.html new file mode 100644 index 00000000..2efb97f3 --- /dev/null +++ b/deployed/smartcountdown3/modules/mod_smartcountdown3/fields/index.html @@ -0,0 +1 @@ + diff --git a/deployed/smartcountdown3/modules/mod_smartcountdown3/fields/preview.php b/deployed/smartcountdown3/modules/mod_smartcountdown3/fields/preview.php new file mode 100644 index 00000000..d02b2b79 --- /dev/null +++ b/deployed/smartcountdown3/modules/mod_smartcountdown3/fields/preview.php @@ -0,0 +1,29 @@ +form->getValue('id', 0); + if($id) { + ob_start(); +?> + + + + + +